From d5f4ab1751118eb568c33e2b290d2c1180626ac8 Mon Sep 17 00:00:00 2001 From: Daniel Leroux Date: Fri, 15 Mar 2024 14:40:05 +0100 Subject: [PATCH] chore: migrate to pnpm (#931) --- .changeset/README.md | 8 + .changeset/config.json | 28 + .github/ISSUE_TEMPLATE/bug_report.yml | 12 +- .github/ISSUE_TEMPLATE/docs_bug_report.yml | 6 +- .github/ISSUE_TEMPLATE/feature_request.yml | 6 +- .github/PULL_REQUEST_TEMPLATE | 68 +- .../workflows/actions/build-cache/action.yml | 15 - .github/workflows/actions/build/action.yml | 43 - .github/workflows/actions/install/action.yml | 34 - .github/workflows/actions/lint/action.yml | 23 - .../workflows/actions/push-remote/action.yml | 53 + .github/workflows/actions/test/action.yml | 23 - .github/workflows/actions/turbo/action.yml | 41 + .../actions/visual-regression/action.yml | 25 - .github/workflows/build.yml | 152 +- .github/workflows/deploy-pages-daily.yml | 63 - .github/workflows/deploy-pages.yml | 98 - .github/workflows/issue-workflow.yml | 51 + .github/workflows/nightly.yml | 66 + .github/workflows/pr.yml | 140 + .github/workflows/pre-publish.yml | 70 - .github/workflows/publish.yml | 70 - .github/workflows/release.yml | 31 + .gitignore | 1 + .husky/commit-msg | 2 + .npmrc | 3 +- .prettierrc | 3 +- CONTRIBUTING.md | 262 +- README.md | 204 +- ix.code-workspace | 2 +- package.json | 25 +- packages/aggrid/package.json | 6 +- packages/aggrid/playwright.config.ts | 2 +- packages/angular-test-app/package.json | 6 +- packages/angular-test-app/tsconfig.json | 3 +- packages/angular/package.json | 7 +- packages/angular/tsconfig.json | 6 +- packages/core/package.json | 11 +- packages/core/playwright-ct.config.ts | 1 + packages/core/playwright.config.ts | 4 +- packages/core/scripts/build/build-css.ts | 8 +- packages/core/src/components/utils/context.ts | 4 +- .../src/components/utils/modal/message.ts | 5 +- ...-1-chromium---theme-classic-dark-linux.png | Bin 7286 -> 6962 bytes ...1-chromium---theme-classic-light-linux.png | Bin 7354 -> 6845 bytes ...-1-chromium---theme-classic-dark-linux.png | Bin 7286 -> 6466 bytes ...1-chromium---theme-classic-light-linux.png | Bin 7354 -> 6382 bytes .../tests/basic-navigation/mobile/index.html | 2 +- .../core/src/tests/dropdown/dropdown.e2e.ts | 16 +- ...-1-chromium---theme-classic-dark-linux.png | Bin 9330 -> 10851 bytes ...-1-chromium---theme-classic-dark-linux.png | Bin 9251 -> 10817 bytes ...-1-chromium---theme-classic-dark-linux.png | Bin 16740 -> 17367 bytes ...1-chromium---theme-classic-light-linux.png | Bin 16779 -> 16855 bytes ...-1-chromium---theme-classic-dark-linux.png | Bin 12447 -> 11600 bytes ...1-chromium---theme-classic-light-linux.png | Bin 11895 -> 11026 bytes packages/core/src/tests/input/input.e2e.ts | 12 +- ...-1-chromium---theme-classic-dark-linux.png | Bin 8597 -> 8597 bytes ...1-chromium---theme-classic-light-linux.png | Bin 8643 -> 8643 bytes ...-1-chromium---theme-classic-dark-linux.png | Bin 11642 -> 11642 bytes ...1-chromium---theme-classic-light-linux.png | Bin 11709 -> 11709 bytes packages/core/src/utils/test/page.ts | 2 +- packages/core/stencil.config.ts | 2 +- .../docs/controls/_avatar_code.md | 39 +- .../docs/controls/_avatar_styleguide.md | 21 - .../docs/controls/_blind_code.md | 44 +- .../docs/controls/_blind_styleguide.md | 2 - .../docs/controls/_breadcrumb_code.md | 39 +- .../docs/controls/_card-list_code.md | 18 +- .../documentation/docs/controls/_card_code.md | 48 +- .../documentation/docs/controls/_chip_code.md | 15 +- .../documentation/docs/controls/_divider.md | 14 +- .../docs/controls/_layout-grid_code.md | 2 +- .../controls/_modal/angular/modal-config.md | 2 +- .../controls/_modal/react/modal-config.md | 2 +- .../docs/controls/_panes_code.md | 26 +- .../documentation/docs/controls/_pill_code.md | 28 +- .../_about-and-legal_code.md | 2 +- .../_application-header_code.md | 2 +- .../_application-header_styleguide.md | 2 +- .../_application-menu_code.md | 54 +- .../application-frame/_application_code.md | 2 +- .../_basic-navigation_code.md | 29 +- .../application-frame/_content_code.md | 2 +- .../application-frame/_content_styleguide.md | 2 +- .../application-frame/_map-navigation_code.md | 26 +- .../application-frame/_popover-news_code.md | 2 +- .../application-frame/_settings_code.md | 2 +- .../application-frame/about-and-legal.md | 1 - .../application-frame/application-header.md | 1 - .../application-frame/application-menu.md | 1 - .../controls/application-frame/application.md | 1 - .../application-frame/basic-navigation.md | 1 - .../controls/application-frame/content.md | 2 - .../application-frame/map-navigation.md | 1 - .../application-frame/popover-news.md | 1 - .../controls/application-frame/settings.md | 1 - .../documentation/docs/controls/avatar.md | 1 - packages/documentation/docs/controls/blind.md | 1 - .../documentation/docs/controls/breadcrumb.md | 1 - .../docs/controls/buttons/_button_code.md | 105 +- .../controls/buttons/_dropdown-button_code.md | 29 +- .../controls/buttons/_icon-button_code.md | 14 +- .../controls/buttons/_link-button_code.md | 26 +- .../controls/buttons/_split-button_code.md | 29 +- .../controls/buttons/_toggle-button_code.md | 119 +- .../docs/controls/category-filter.md | 27 +- .../documentation/docs/controls/checkbox.md | 26 +- packages/documentation/docs/controls/chip.md | 1 - .../docs/controls/content-header.md | 34 +- .../docs/controls/date-dropdown.md | 26 +- .../docs/controls/date-picker.md | 5 +- .../docs/controls/date-time-picker.md | 14 +- .../documentation/docs/controls/drawer.md | 28 +- .../documentation/docs/controls/dropdown.md | 49 +- .../docs/controls/empty-state.md | 38 +- .../documentation/docs/controls/event-list.md | 48 +- .../docs/controls/expanding-search.md | 14 +- packages/documentation/docs/controls/flip.md | 14 +- packages/documentation/docs/controls/group.md | 50 +- .../documentation/docs/controls/html-grid.md | 13 +- packages/documentation/docs/controls/input.md | 83 +- .../docs/controls/key-value-list.md | 50 +- .../documentation/docs/controls/key-value.md | 50 +- packages/documentation/docs/controls/kpi.md | 15 +- .../documentation/docs/controls/messagebar.md | 14 +- packages/documentation/docs/controls/modal.md | 79 +- .../documentation/docs/controls/pagination.md | 26 +- packages/documentation/docs/controls/panes.md | 4 +- packages/documentation/docs/controls/pill.md | 4 - .../docs/controls/radiobutton.md | 14 +- .../documentation/docs/controls/select.md | 39 +- .../documentation/docs/controls/slider.md | 2 +- .../documentation/docs/controls/spinner.md | 28 +- packages/documentation/docs/controls/tabs.md | 27 +- .../documentation/docs/controls/textarea.md | 39 +- packages/documentation/docs/controls/tile.md | 14 +- .../docs/controls/time-picker.md | 14 +- packages/documentation/docs/controls/toast.md | 37 +- .../documentation/docs/controls/toggle.md | 61 +- .../documentation/docs/controls/tooltip.md | 11 +- packages/documentation/docs/controls/tree.md | 27 +- .../documentation/docs/controls/upload.md | 14 +- .../documentation/docs/controls/validation.md | 12 +- .../documentation/docs/controls/workflow.md | 27 +- .../docs/getting-started-for-designers.md | 2 +- .../documentation/docs/getting-started.md | 2 +- .../docs/guidelines/theme-switching.md | 9 +- .../documentation/docs/guidelines/theme.md | 1 - .../docs/installation/javascript.md | 8 +- .../documentation/docs/theming/animation.md | 2 +- packages/documentation/docusaurus.config.js | 200 - packages/documentation/docusaurus.config.ts | 216 + packages/documentation/package.json | 49 +- .../documentation/scripts/download-theme.ts | 56 + .../scripts/generate-markdown.ts | 60 +- .../documentation/scripts/ts-class-tasks.ts | 7 +- .../{sidebars.js => sidebars.ts} | 11 +- .../src/components/Playground/index.tsx | 390 - .../src/components/Playground/playground.scss | 38 - .../framework-types.ts | 0 .../src/components/PlaygroundV2/index.tsx | 338 + .../components/PlaygroundV2/styles.module.css | 6 + .../{Playground => PlaygroundV2}/utils.ts | 56 +- .../Category/{index.js => index.tsx} | 96 +- packages/documentation/src/theme/Loader.tsx | 23 - .../Navbar/Content/{index.js => index.tsx} | 63 +- .../theme/Navbar/Content/styles.module.css | 10 +- .../src/theme/Navbar/Layout/index.js | 52 - .../src/theme/Navbar/Layout/styles.module.css | 7 - .../src/theme/Navbar/Logo/index.d.ts | 11 - .../theme/Navbar/Logo/{index.js => index.tsx} | 40 +- packages/documentation/src/theme/Root.tsx | 27 - .../src/theme/SearchBar/DocSearch.js | 528 +- .../src/theme/SearchBar/algolia.css | 23 + .../theme/SearchBar/{index.js => index.tsx} | 43 +- .../src/theme/SearchBar/lunar-search.js | 1 + .../src/theme/SearchBar/styles.css | 5 +- .../src/theme/SearchBar/templates.js | 11 + .../SiteMetadata/{index.js => index.tsx} | 94 +- packages/documentation/static/img/github.svg | 2 +- .../documentation/static/img/logo-640.png | Bin 27959 -> 0 bytes .../documentation/static/img/stackblitz.svg | 2 +- packages/documentation/tsconfig.json | 10 + .../index.js | 4 +- .../package.json | 1 + packages/figma-plugin/package.json | 6 +- packages/figma-plugin/tsconfig.json | 1 + packages/html-test-app/package.json | 8 +- .../src/preview-examples/init.js | 9 - packages/html-test-app/vite.config.ts | 22 +- packages/react-test-app/package.json | 10 +- packages/react/package.json | 4 +- packages/vue-test-app/package.json | 5 +- packages/vue/package.json | 4 +- pnpm-lock.yaml | 26582 ++++++++++++++++ pnpm-workspace.yaml | 2 + turbo.json | 12 +- yarn.lock | 21370 ------------- 198 files changed, 29010 insertions(+), 25092 deletions(-) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json delete mode 100644 .github/workflows/actions/build-cache/action.yml delete mode 100644 .github/workflows/actions/build/action.yml delete mode 100644 .github/workflows/actions/install/action.yml delete mode 100644 .github/workflows/actions/lint/action.yml create mode 100644 .github/workflows/actions/push-remote/action.yml delete mode 100644 .github/workflows/actions/test/action.yml create mode 100644 .github/workflows/actions/turbo/action.yml delete mode 100644 .github/workflows/actions/visual-regression/action.yml delete mode 100644 .github/workflows/deploy-pages-daily.yml delete mode 100644 .github/workflows/deploy-pages.yml create mode 100644 .github/workflows/issue-workflow.yml create mode 100644 .github/workflows/nightly.yml create mode 100644 .github/workflows/pr.yml delete mode 100644 .github/workflows/pre-publish.yml delete mode 100644 .github/workflows/publish.yml create mode 100644 .github/workflows/release.yml delete mode 100644 packages/documentation/docusaurus.config.js create mode 100644 packages/documentation/docusaurus.config.ts create mode 100644 packages/documentation/scripts/download-theme.ts rename packages/documentation/{sidebars.js => sidebars.ts} (94%) delete mode 100644 packages/documentation/src/components/Playground/index.tsx delete mode 100644 packages/documentation/src/components/Playground/playground.scss rename packages/documentation/src/components/{Playground => PlaygroundV2}/framework-types.ts (100%) create mode 100644 packages/documentation/src/components/PlaygroundV2/index.tsx create mode 100644 packages/documentation/src/components/PlaygroundV2/styles.module.css rename packages/documentation/src/components/{Playground => PlaygroundV2}/utils.ts (86%) rename packages/documentation/src/theme/DocSidebarItem/Category/{index.js => index.tsx} (74%) delete mode 100644 packages/documentation/src/theme/Loader.tsx rename packages/documentation/src/theme/Navbar/Content/{index.js => index.tsx} (62%) delete mode 100644 packages/documentation/src/theme/Navbar/Layout/index.js delete mode 100644 packages/documentation/src/theme/Navbar/Layout/styles.module.css delete mode 100644 packages/documentation/src/theme/Navbar/Logo/index.d.ts rename packages/documentation/src/theme/Navbar/Logo/{index.js => index.tsx} (50%) delete mode 100644 packages/documentation/src/theme/Root.tsx rename packages/documentation/src/theme/SearchBar/{index.js => index.tsx} (69%) rename packages/documentation/src/theme/SiteMetadata/{index.js => index.tsx} (59%) delete mode 100644 packages/documentation/static/img/logo-640.png create mode 100644 packages/documentation/tsconfig.json rename packages/{eslint-config => eslint-config-ix}/index.js (100%) rename packages/{eslint-config => eslint-config-ix}/package.json (93%) create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml delete mode 100644 yarn.lock diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 00000000000..e5b6d8d6a67 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 00000000000..94989bf42b8 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", + "changelog": [ + "@changesets/changelog-github", + { "repo": "siemens/ix" } + ], + "commit": false, + "linked": [], + "fixed": [ + [ + "@siemens/ix", + "@siemens/ix-angular", + "@siemens/ix-react", + "@siemens/ix-vue" + ] + ], + "access": "restricted", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [ + "angular-test-app", + "react-test-app", + "vue-test-app", + "html-test-app", + "figma-plugin", + "documentation" + ] +} diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b5eaa028265..a2f72a95422 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -12,9 +12,9 @@ body: label: Prerequisites description: Make sure to not violate these rules options: - - label: I have not leaked any internal company information. + - label: I have read the [Contributing Guidelines](https://github.com/siemens/ix/blob/main/CONTRIBUTING.md). required: true - - label: I have not posted internal links or code snippets. + - label: I have not leaked any internal/restricted information like screenshots, videos, code snippets, links etc. required: true - type: textarea @@ -29,7 +29,7 @@ body: - type: dropdown id: framework attributes: - label: What type of frontend frameware are you seeing the problem on? + label: What type of frontend framework are you seeing the problem on? multiple: true options: - Angular @@ -44,7 +44,7 @@ body: attributes: label: Which version of iX do you use? description: The exact version of Siemens iX you use. - placeholder: v1.x.x + placeholder: v2.x.x validations: required: true @@ -52,7 +52,9 @@ body: id: logs attributes: label: Code to produce this issue. - description: Please copy and paste any relevant code to re-produce this issue (__preferred__ stackblitz/codesandbox/... link or a github repository). + description: | + Please provide accessible code (no private repositories) to reproduce the problem (__preferred__ github repository, stackblitz or codesandbox). + Issues without code to reproduce can not be analyzed by the team. render: shell validations: required: true diff --git a/.github/ISSUE_TEMPLATE/docs_bug_report.yml b/.github/ISSUE_TEMPLATE/docs_bug_report.yml index 6a43e9d2014..dffd6c3bdac 100644 --- a/.github/ISSUE_TEMPLATE/docs_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/docs_bug_report.yml @@ -5,16 +5,16 @@ body: - type: markdown attributes: value: | - Thanks for taking the time to fill out this bug report! + Thank you for taking the time to fill out this bug report! - type: checkboxes attributes: label: Prerequisites description: Make sure to not violate these rules options: - - label: I have not leaked any internal company information. + - label: I have read the [Contributing Guidelines](https://github.com/siemens/ix/blob/main/CONTRIBUTING.md). required: true - - label: I have not posted internal links or code snippets. + - label: I have not leaked any internal/restricted information like screenshots, videos, code snippets, links etc. required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index a68e9860ca4..32ef74e56a2 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -5,16 +5,16 @@ body: - type: markdown attributes: value: | - We appreciate your feedback on how to improve this project. Please be sure to include as much information and any neccessary resources! + We appreciate your feedback on how to improve this project. - type: checkboxes attributes: label: Prerequisites description: Make sure to not violate these rules options: - - label: I have not leaked any internal company information. + - label: I have read the [Contributing Guidelines](https://github.com/siemens/ix/blob/main/CONTRIBUTING.md). required: true - - label: I have not posted internal links or code snippets. + - label: I have not leaked any internal/restricted information like screenshots, videos, code snippets, links etc. required: true - type: textarea diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index 9f15f24ac4b..6630dfe140e 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,69 +1,33 @@ - -## Pull request checklist - -Please check if your PR fulfills the following requirements: - -- [ ] Tests for the changes have been added (for bug fixes / features) -- [ ] Docs have been reviewed and added / updated if needed (for bug fixes / features) -- [ ] Build (`yarn build`) was run locally and any changes were pushed -- [ ] Unit tests (`yarn test`) were run locally and passed -- [ ] Visual Regression Tests (`yarn visual-regression`) were run locally and passed -- [ ] Linting (`npm lint`) was run locally and passed - -## Pull request type - - - - - -Please check the type of change your PR introduces: - -- [ ] Bug fix -- [ ] Feature -- [ ] Refactoring (no functional changes, no API changes) -- [ ] Build related changes -- [ ] Documentation content changes -- [ ] Other (please describe): - -## What is the current behavior? +## ๐Ÿ’ก What is the current behavior? -GitHub Issue Number: N/A +GitHub Issue Number: # -## What is the new behavior? +## ๐Ÿ†• What is the new behavior? - - -- - -## Does this introduce a breaking change? - -- [ ] Yes -- [ ] No - +## ๐Ÿ Checklist -## Testing +A pull request can only be merged if all of these conditions are met (where applicable): - +- [ ] ๐Ÿฆฎ Accessibility (a11y) features were implemented +- [ ] ๐Ÿ—บ๏ธ Internationalization (i18n) - no hard coded strings +- [ ] ๐Ÿ“ฒ Responsiveness - components handle viewport changes and content overflow gracefully +- [ ] ๐Ÿ“„ Documentation was reviewed/updated (`yarn docs`) +- [ ] ๐Ÿงช Unit tests were added/updated and pass (`yarn test`) +- [ ] ๐Ÿ“ธ Visual regression tests were added/updated and pass (`yarn visual-regression`) +- [ ] ๐Ÿง Static code analysis passes (`yarn lint`) +- [ ] ๐Ÿ—๏ธ Successful compilation (`yarn build`, changes pushed) -## Other information +## ๐Ÿ‘จโ€๐Ÿ’ป Help & support - + diff --git a/.github/workflows/actions/build-cache/action.yml b/.github/workflows/actions/build-cache/action.yml deleted file mode 100644 index 206e216ea73..00000000000 --- a/.github/workflows/actions/build-cache/action.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: 'Use build cache' -description: 'Use build cache' -runs: - using: 'composite' - steps: - - uses: actions/cache@v3 - id: build-cache - with: - key: build-${{ runner.os }}-${{ github.sha }} - path: | - packages/**/dist - packages/**/www - packages/**/loader - packages/**/build - packages/**/components diff --git a/.github/workflows/actions/build/action.yml b/.github/workflows/actions/build/action.yml deleted file mode 100644 index 4c0d835ad07..00000000000 --- a/.github/workflows/actions/build/action.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: 'Build Icons' -description: 'Build Icons' -inputs: - filter: # id of input - description: 'yarn filter property' - default: 'none' - - args: # id of input - description: 'additional args' - default: '' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v3 - with: - node-version: 18 - registry-url: 'https://registry.npmjs.org' - scope: '@siemens' - - - uses: actions/cache@v3 - id: cache - with: - key: yarn-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} - restore-keys: | - yarn-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} - path: | - .yarn-cache - node_modules - packages/**/node_modules - - - name: build with filter - if: ${{ inputs.filter != 'none' }} - run: yarn build --filter ${{ inputs.filter }} ${{ inputs.args }} - shell: bash - - - name: build all - if: ${{ inputs.filter == 'none' }} - run: yarn build ${{ inputs.args }} - shell: bash - - - name: Check for local development changes - run: ./scripts/lint-build.sh - shell: bash diff --git a/.github/workflows/actions/install/action.yml b/.github/workflows/actions/install/action.yml deleted file mode 100644 index 65e1ac51f09..00000000000 --- a/.github/workflows/actions/install/action.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: 'Install dependencies' -description: 'Install dependencies' -runs: - using: 'composite' - steps: - - name: Remove .npmrc - run: rm .npmrc - shell: bash - - - uses: actions/setup-node@v3 - with: - node-version: 18 - registry-url: 'https://registry.npmjs.org' - scope: '@siemens' - - - name: configure yarnrc - run: | - echo 'yarn-offline-mirror ".yarn-cache/"' >> .yarnrc - echo 'yarn-offline-mirror-pruning true' >> .yarnrc - shell: bash - - - uses: actions/cache@v3 - id: cache - with: - key: yarn-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} - path: | - .yarn-cache - node_modules - packages/**/node_modules - - - name: install - if: steps.cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --no-progress - shell: bash diff --git a/.github/workflows/actions/lint/action.yml b/.github/workflows/actions/lint/action.yml deleted file mode 100644 index b94ad750c99..00000000000 --- a/.github/workflows/actions/lint/action.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: 'Execute unit tests' -description: 'Execute unit tests' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v3 - with: - node-version: 18 - registry-url: 'https://registry.npmjs.org' - scope: '@siemens' - - - uses: actions/cache@v3 - id: cache - with: - key: yarn-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} - path: | - .yarn-cache - node_modules - packages/**/node_modules - - - name: Lint - run: yarn lint - shell: bash diff --git a/.github/workflows/actions/push-remote/action.yml b/.github/workflows/actions/push-remote/action.yml new file mode 100644 index 00000000000..069818f87c0 --- /dev/null +++ b/.github/workflows/actions/push-remote/action.yml @@ -0,0 +1,53 @@ +name: 'Push Remote' +description: 'Push Remote' +inputs: + internal-name: + default: 'core' + + branch-name: # id of input + default: 'ix' + + commit_id: + description: 'commit id' + + token: + description: 'github pat' + +runs: + using: 'composite' + steps: + - name: Prepare ${{ inputs.branch-name }} repo + uses: actions/checkout@v3 + with: + path: 'nightly_store_${{ inputs.branch-name }}' + ref: ${{ inputs.branch-name }} + repository: 'danielleroux/ix-nightlies' + token: ${{ inputs.token }} + fetch-depth: 0 + persist-credentials: true + + - name: Copy build files + shell: bash + run: | + ROOT_PATH=$(pwd) + cd ./packages/${{ inputs.internal-name }} + TAR_FILE=$(pnpm pack) + tar -xf $TAR_FILE -C $ROOT_PATH/nightly_store_${{ inputs.branch-name }} + + - name: Push to remote + shell: bash + working-directory: nightly_store_${{ inputs.branch-name }} + run: | + git ls-files -z | xargs -0 rm -rf || true + git ls-tree --name-only -d -r -z HEAD | sort -rz | xargs -0 rmdir || true + mv ./package/* . + rm -rf package + git config --global user.name "ix builder [bot]" + git config --global user.email "<>" + git add -A + if [[ $(git status --porcelain) == '' ]]; then + echo "No changes. Push to remote skipped!" + else + git commit -m "Nightly build $(date +"%Y-%m-%d %T") - ${{ inputs.commit_id }}" + git push + fi diff --git a/.github/workflows/actions/test/action.yml b/.github/workflows/actions/test/action.yml deleted file mode 100644 index 3210797d6de..00000000000 --- a/.github/workflows/actions/test/action.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: 'Execute unit tests' -description: 'Execute unit tests' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v3 - with: - node-version: 18 - registry-url: 'https://registry.npmjs.org' - scope: '@siemens' - - - uses: actions/cache@v3 - id: cache - with: - key: yarn-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} - path: | - .yarn-cache - node_modules - packages/**/node_modules - - - name: test - run: yarn run test - shell: bash diff --git a/.github/workflows/actions/turbo/action.yml b/.github/workflows/actions/turbo/action.yml new file mode 100644 index 00000000000..e2045381083 --- /dev/null +++ b/.github/workflows/actions/turbo/action.yml @@ -0,0 +1,41 @@ +name: 'PNPM & Turbo Cache' +description: 'PNPM & Turbo Cache' +runs: + using: 'composite' + steps: + - uses: pnpm/action-setup@v2 + name: Install pnpm + with: + version: 8 + run_install: false + + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'pnpm' + + - name: Get pnpm store directory + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + shell: bash + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Cache turbo build setup + uses: actions/cache@v3 + with: + path: .turbo + key: ${{ runner.os }}-turbo-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-turbo- + + - name: Install dependencies + run: pnpm install + shell: bash diff --git a/.github/workflows/actions/visual-regression/action.yml b/.github/workflows/actions/visual-regression/action.yml deleted file mode 100644 index fd95240c803..00000000000 --- a/.github/workflows/actions/visual-regression/action.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: 'Execute visual regression tests' -description: 'Execute visual regression tests' -runs: - using: 'composite' - steps: - - name: Install Playwright Browsers - run: yarn playwright install chromium - shell: bash - - - name: Run Playwright at @siemens/ix - run: yarn workspace @siemens/ix run test:e2e - shell: bash - - - name: Run Playwright at @siemens/ix-aggrid - run: yarn workspace @siemens/ix-aggrid run test:e2e - shell: bash - - - uses: actions/upload-artifact@v3 - if: always() - with: - name: playwright-report - path: | - ./packages/core/playwright-report/ - ./packages/aggrid/playwright-report/ - retention-days: 2 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8359ee956b8..51d0bcc9164 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,108 +1,104 @@ -name: build +name: main and preview on: push: branches: - 'main' - 'release/*' - pull_request: - branches: - - '**' - workflow_dispatch: - workflow_call: - -concurrency: - group: ci-${{ github.event_name }}-${{ github.ref }}-${{ github.sha }} - cancel-in-progress: true jobs: - install: - runs-on: ubuntu-latest - container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive - steps: - - run: | - echo "github.ref = ${{ github.ref }}" - echo "github.sha = ${{ github.sha }}" - - uses: actions/checkout@v3 - - uses: ./.github/workflows/actions/install - build: runs-on: ubuntu-latest - needs: [install] - container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive steps: - - uses: actions/checkout@v3 - - uses: ./.github/workflows/actions/build-cache - - uses: ./.github/workflows/actions/build + - name: Checkout + uses: actions/checkout@v3 - upload-artifacts: - runs-on: ubuntu-latest + - uses: ./.github/workflows/actions/turbo + + - name: Build + run: pnpm build --cache-dir=.turbo --filter \!documentation + + - name: Lint + run: pnpm lint + + visual-testing-core: needs: [build] + timeout-minutes: 10 + runs-on: ubuntu-latest container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive + image: mcr.microsoft.com/playwright:v1.39.0-jammy + strategy: + fail-fast: false + matrix: + shard: [1/4, 2/4, 3/4, 4/4] steps: - uses: actions/checkout@v3 - - uses: ./.github/workflows/actions/build-cache - - name: Upload build artifacts - uses: actions/upload-artifact@v3 + - uses: ./.github/workflows/actions/turbo + + - name: Visual Regression + run: pnpm run visual-regression --cache-dir=.turbo --filter @siemens/ix -- --shard ${{ matrix.shard }} + + - uses: actions/upload-artifact@v3 + if: always() with: - name: dist-build - if-no-files-found: error + name: core-blob-report path: | - packages/core/dist - packages/core/components - packages/core/loader - packages/core/www - packages/react/dist - packages/vue/dist - packages/angular/dist - packages/aggrid/dist - packages/aggrid/www - packages/aggrid/loader - packages/echarts/dist - - visual-test: + ./packages/core/blob-report/ + retention-days: 1 + + visual-testing-aggrid: needs: [build] - timeout-minutes: 60 + timeout-minutes: 10 runs-on: ubuntu-latest container: - image: mcr.microsoft.com/playwright:v1.32.1-focal - env: - DEBIAN_FRONTEND: noninteractive + image: mcr.microsoft.com/playwright:v1.39.0-jammy steps: - uses: actions/checkout@v3 - - uses: ./.github/workflows/actions/build-cache - - uses: ./.github/workflows/actions/install - - uses: ./.github/workflows/actions/visual-regression + - uses: ./.github/workflows/actions/turbo - test: - runs-on: ubuntu-latest - needs: [build] - container: - image: mcr.microsoft.com/playwright:v1.32.1-focal - env: - DEBIAN_FRONTEND: noninteractive - steps: + - name: Visual Regression + run: pnpm run visual-regression --cache-dir=.turbo --filter @siemens/ix-aggrid + + - uses: actions/upload-artifact@v3 + if: failure() + with: + name: aggrid-html-report--attempt-${{ github.run_attempt }} + path: | + ./packages/aggrid/playwright-report/ + retention-days: 1 + + merge-core-reports: + if: failure() + needs: [visual-testing-core] + + runs-on: ubuntu-latest + steps: - uses: actions/checkout@v3 - - uses: ./.github/workflows/actions/build-cache - - uses: ./.github/workflows/actions/install - - uses: ./.github/workflows/actions/test + - uses: ./.github/workflows/actions/turbo + + - name: Download blob reports from GitHub Actions Artifacts + uses: actions/download-artifact@v3 + with: + name: core-blob-report + path: all-blob-reports - lint: + - name: Merge into HTML Report + run: pnpm exec playwright merge-reports --reporter html ./all-blob-reports + + - name: Upload HTML report + uses: actions/upload-artifact@v3 + with: + name: core-html-report--attempt-${{ github.run_attempt }} + path: playwright-report + retention-days: 2 + unit: + needs: [build] + timeout-minutes: 10 runs-on: ubuntu-latest - needs: [install] container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive + image: mcr.microsoft.com/playwright:v1.39.0-jammy steps: - uses: actions/checkout@v3 - - uses: ./.github/workflows/actions/lint + - uses: ./.github/workflows/actions/turbo + - name: Test + run: pnpm run test --cache-dir=.turbo --filter !\documentation diff --git a/.github/workflows/deploy-pages-daily.yml b/.github/workflows/deploy-pages-daily.yml deleted file mode 100644 index 3c7edd104a1..00000000000 --- a/.github/workflows/deploy-pages-daily.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Deploy to GitHub Pages (DEV Version) - -on: - workflow_dispatch: - schedule: - - cron: '0 6 * * 1-4' - -permissions: - contents: write - -jobs: - deploy: - name: Deploy to GitHub Pages (DEV only) - runs-on: ubuntu-latest - container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive - steps: - - uses: actions/checkout@v3 - - - name: Install rsync - run: | - apt-get update && apt-get install -y rsync - - - uses: ./.github/workflows/actions/install - - - uses: actions/setup-node@v3 - with: - node-version: 18 - registry-url: 'https://code.siemens.com/api/v4/projects/249177/packages/npm/' - scope: '@siemens' - always-auth: 'true' - - - name: 'Download @siemens/ix-brand-theme' - env: - TOKEN: ${{ secrets.READ_CSC_TOKEN }} - run: | - PIPELINE_ROOT_DIR=$(pwd) - mkdir .tmp-brand - cd .tmp-brand - curl https://code.siemens.com/api/v4/projects/249177/packages/npm/@siemens/ix-brand-theme/-/@siemens/ix-brand-theme-2.0.0.tgz -H "Authorization: Bearer $TOKEN" --output theme.tgz - tar -xvzf theme.tgz -C $PIPELINE_ROOT_DIR/node_modules/@siemens - cd $PIPELINE_ROOT_DIR/node_modules/@siemens - mv package ix-brand-theme - cd $PIPELINE_ROOT_DIR - cp -R ./node_modules/@siemens/ix-brand-theme ./packages/html-test-app/src/public/additional-theme - - - name: 'Build documentation for dev instance' - uses: ./.github/workflows/actions/build - env: - BASE_URL: /version-dev/ - FIGMA_API_TOKEN: ${{ secrets.FIGMA_API_TOKEN }} - with: - filter: 'documentation' - args: '--force' - - - name: Deploy dev instance ๐Ÿš€ - uses: JamesIves/github-pages-deploy-action@v4 - with: - folder: ./packages/documentation/build - target-folder: version-dev - clean-exclude: version-* diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml deleted file mode 100644 index a2a0775d47e..00000000000 --- a/.github/workflows/deploy-pages.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: Deploy to GitHub Pages - -on: - workflow_dispatch: - inputs: - confirm_deployment: - description: 'Please confirm deployment' - required: true - type: boolean - deployment: - description: 'Deployment instance' - required: true - default: 'dev' - type: choice - options: - - dev - - prod - -permissions: - contents: write - -jobs: - deploy: - name: Deploy to GitHub Pages - runs-on: ubuntu-latest - container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive - steps: - - uses: actions/checkout@v3 - - name: Check if deployment condition is fulfilled - if: ${{ startsWith(github.ref, 'refs/heads/release/docs/v') == false || github.event.inputs.confirm_deployment == false }} - run: | - echo "::error ::Be sure that the workflow runs on release/docs/v* and you checked confirm" - exit -1 - - - name: Install rsync - run: | - apt-get update && apt-get install -y rsync - - - uses: ./.github/workflows/actions/install - - - uses: actions/setup-node@v3 - with: - node-version: 18 - registry-url: 'https://code.siemens.com/api/v4/projects/249177/packages/npm/' - scope: '@siemens' - always-auth: 'true' - - - name: 'Download @siemens/ix-brand-theme' - env: - TOKEN: ${{ secrets.READ_CSC_TOKEN }} - run: | - PIPELINE_ROOT_DIR=$(pwd) - mkdir .tmp-brand - cd .tmp-brand - curl https://code.siemens.com/api/v4/projects/249177/packages/npm/@siemens/ix-brand-theme/-/@siemens/ix-brand-theme-2.0.0.tgz -H "Authorization: Bearer $TOKEN" --output theme.tgz - tar -xvzf theme.tgz -C $PIPELINE_ROOT_DIR/node_modules/@siemens - cd $PIPELINE_ROOT_DIR/node_modules/@siemens - mv package ix-brand-theme - cd $PIPELINE_ROOT_DIR - cp -R ./node_modules/@siemens/ix-brand-theme ./packages/html-test-app/src/public/additional-theme - - - name: 'Build documentation for dev instance' - uses: ./.github/workflows/actions/build - if: ${{ github.event.inputs.deployment == 'dev' }} - env: - FIGMA_API_TOKEN: ${{ secrets.FIGMA_API_TOKEN }} - BASE_URL: /version-dev/ - with: - filter: 'documentation' - args: '--force' - - - name: 'Build documentation for prod instance' - uses: ./.github/workflows/actions/build - if: ${{ github.event.inputs.deployment == 'prod' }} - env: - FIGMA_API_TOKEN: ${{ secrets.FIGMA_API_TOKEN }} - BASE_URL: / - with: - filter: 'documentation' - args: '--force' - - - name: Deploy production instance ๐Ÿš€ - uses: JamesIves/github-pages-deploy-action@v4 - if: ${{ github.event.inputs.deployment == 'prod' }} - with: - folder: ./packages/documentation/build - clean-exclude: version-* - - - name: Deploy dev instance ๐Ÿš€ - uses: JamesIves/github-pages-deploy-action@v4 - if: ${{ github.event.inputs.deployment == 'dev' }} - with: - folder: ./packages/documentation/build - target-folder: version-dev - clean-exclude: version-* diff --git a/.github/workflows/issue-workflow.yml b/.github/workflows/issue-workflow.yml new file mode 100644 index 00000000000..af6f03db909 --- /dev/null +++ b/.github/workflows/issue-workflow.yml @@ -0,0 +1,51 @@ +name: Workflow Labeling + +on: + issues: + types: [labeled] + +jobs: + comment-workflow: + runs-on: ubuntu-latest + steps: + + # Useful if we try to also integrate other labels + # - name: Find comments + # id: find_comments + # uses: actions-cool/issues-helper@v3 + # with: + # actions: 'find-comments' + # token: ${{ secrets.GITHUB_TOKEN }} + # issue-number: ${{ github.event.issue.number }} + # comment-auth: 'github-actions[bot]' + # body-includes: '๐Ÿค– Hello ' + + # - uses: actions/github-script@v7 + # id: filter-comment + # env: + # COMMENTS_RESULT: ${{ steps.find_comments.outputs.comments }} + # with: + # script: | + # const { COMMENTS_RESULT } = process.env; + # const comments = JSON.parse(COMMENTS_RESULT); + + # if (comments.length === 1) { + # return comments[0].id; + # } + + # return ''; + # result-encoding: string + + - name: Jira Ticket created + if: "contains(github.event.label.name, 'Workflow: Issue created')" + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.GITHUB_TOKEN }} + body: | + ๐Ÿค– Hello @${{ github.event.issue.user.login }} + + Your issue will be analyzed and is part of our internal workflow. + To get informed about our workflow please checkout the [Contributing Guidelines](https://github.com/siemens/ix/blob/main/CONTRIBUTING.md#issue-workflow) + + JIRA: IX-000 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 00000000000..2bc676cbf74 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,66 @@ +name: nightly + +on: + schedule: + - cron: '0 8,16 * * 1-5' + push: + branches: + - 'main' + workflow_dispatch: + +jobs: + deploy_nightly: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: main + + - name: Store commit id + id: gitcommit + shell: bash + run: | + echo "GIT_COMMIT_ID=$(git log -1 --pretty=%h)" >> "$GITHUB_OUTPUT" + + - name: Copy build files + shell: bash + run: | + rm -rf .git + rm -rf .gitignore + + - uses: ./.github/workflows/actions/turbo + + - name: Build + run: pnpm build --cache-dir=.turbo --filter \!documentation + + - name: Push to remote @siemens/ix + uses: ./.github/workflows/actions/push-remote + env: + GIT_COMMIT_ID: ${{ steps.gitcommit.outputs.GIT_COMMIT_ID }} + with: + internal-name: core + branch-name: ix + commit_id: $GIT_COMMIT_ID + token: ${{ secrets.NIGHTLY_STORE }} + + - name: Push to remote @siemens/ix-react + uses: ./.github/workflows/actions/push-remote + env: + GIT_COMMIT_ID: ${{ steps.gitcommit.outputs.GIT_COMMIT_ID }} + with: + internal-name: react + branch-name: ix-react + commit_id: $GIT_COMMIT_ID + token: ${{ secrets.NIGHTLY_STORE }} + + - name: Push to remote @siemens/ix-angular + uses: ./.github/workflows/actions/push-remote + env: + GIT_COMMIT_ID: ${{ steps.gitcommit.outputs.GIT_COMMIT_ID }} + with: + internal-name: angular + branch-name: ix-angular + commit_id: $GIT_COMMIT_ID + token: ${{ secrets.NIGHTLY_STORE }} + diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000000..70146135190 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,140 @@ +name: Pull Request + +on: + pull_request: + branches-ignore: + - changeset-release/main + types: + - opened + - reopened + - synchronize + +concurrency: pr-${{ github.ref }} + +jobs: + changes: + runs-on: ubuntu-latest + outputs: + core: ${{ steps.changes.outputs.core }} + angular: ${{ steps.changes.outputs.angular }} + aggrid: ${{ steps.changes.outputs.aggrid }} + docs: ${{ steps.changes.outputs.docs }} + steps: + - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: changes + with: + filters: | + core: + - 'packages/core/**' + angular: + - 'packages/angular/**' + aggrid: + - 'packages/aggrid/**' + docs: + - 'packages/documentation/**' + - 'packages/html-test-app/**' + - 'packages/angular-test-app/**' + - 'packages/react-test-app/**' + - 'packages/vue-test-app/**' + + build: + needs: changes + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - uses: ./.github/workflows/actions/turbo + + - name: Build + run: pnpm build --cache-dir=.turbo --filter \!documentation + + - name: Lint + run: pnpm lint + + visual-testing-core: + if: ${{ needs.changes.outputs.core == 'true' }} + needs: [build, changes] + timeout-minutes: 10 + runs-on: ubuntu-latest + container: + image: mcr.microsoft.com/playwright:v1.39.0-jammy + strategy: + fail-fast: false + matrix: + shard: [1/4, 2/4, 3/4, 4/4] + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/turbo + + - name: Visual Regression + run: pnpm run visual-regression --cache-dir=.turbo --filter @siemens/ix -- --shard ${{ matrix.shard }} + + - uses: actions/upload-artifact@v3 + if: always() + with: + name: core-blob-report + path: | + ./packages/core/blob-report/ + retention-days: 1 + + visual-testing-aggrid: + if: ${{ needs.changes.outputs.core == 'true' || needs.changes.outputs.aggrid == 'true' }} + needs: [build] + timeout-minutes: 10 + runs-on: ubuntu-latest + container: + image: mcr.microsoft.com/playwright:v1.39.0-jammy + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/turbo + + - name: Visual Regression + run: pnpm run visual-regression --cache-dir=.turbo --filter @siemens/ix-aggrid + + - uses: actions/upload-artifact@v3 + if: failure() + with: + name: aggrid-html-report--attempt-${{ github.run_attempt }} + path: | + ./packages/aggrid/playwright-report/ + retention-days: 1 + + merge-core-reports: + if: failure() + needs: [visual-testing-core] + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/turbo + + - name: Download blob reports from GitHub Actions Artifacts + uses: actions/download-artifact@v3 + with: + name: core-blob-report + path: all-blob-reports + + - name: Merge into HTML Report + run: pnpm exec playwright merge-reports --reporter html ./all-blob-reports + + - name: Upload HTML report + uses: actions/upload-artifact@v3 + with: + name: core-html-report--attempt-${{ github.run_attempt }} + path: playwright-report + retention-days: 2 + unit: + if: ${{ needs.changes.outputs.core == 'true' || needs.changes.outputs.angular == 'true' }} + needs: [build] + timeout-minutes: 10 + runs-on: ubuntu-latest + container: + image: mcr.microsoft.com/playwright:v1.39.0-jammy + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/turbo + + - name: Test + run: pnpm run test --cache-dir=.turbo --filter !\documentation diff --git a/.github/workflows/pre-publish.yml b/.github/workflows/pre-publish.yml deleted file mode 100644 index e574878f1e7..00000000000 --- a/.github/workflows/pre-publish.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Publish Beta - -on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+' - -concurrency: - group: prepublish-${{ github.sha }} - cancel-in-progress: true - -jobs: - build-lib: - uses: ./.github/workflows/build.yml - deploy: - needs: [build-lib] - runs-on: ubuntu-latest - container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive - steps: - - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 - with: - name: dist-build - path: packages - - - name: Publish ix beta version to npmjs.org - run: | - yarn workspace @siemens/ix publish --access public --tag beta - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-react beta version to npmjs.org - run: | - yarn workspace @siemens/ix-react publish --access public --tag beta - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-vue beta version to npmjs.org - run: | - yarn workspace @siemens/ix-vue publish --access public --tag beta - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-aggrid beta version to npmjs.org - run: | - yarn workspace @siemens/ix-aggrid publish --access public --tag beta - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-echarts beta version to npmjs.org - run: | - yarn workspace @siemens/ix-echarts publish --access public --tag beta - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-angular beta version to npmjs.org - run: | - cd packages/angular/dist - yarn publish --access public --tag beta - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index c95edbb0da7..00000000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Publish - -on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' - -concurrency: - group: publish-${{ github.sha }} - cancel-in-progress: true - -jobs: - build-lib: - uses: ./.github/workflows/build.yml - deploy: - needs: [build-lib] - runs-on: ubuntu-latest - container: - image: node:18.12.1 - env: - DEBIAN_FRONTEND: noninteractive - steps: - - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 - with: - name: dist-build - path: packages - - - name: Publish ix version to npmjs.org - run: | - yarn workspace @siemens/ix publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-react version to npmjs.org - run: | - yarn workspace @siemens/ix-react publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-vue version to npmjs.org - run: | - yarn workspace @siemens/ix-vue publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-aggrid version to npmjs.org - run: | - yarn workspace @siemens/ix-aggrid publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-echarts version to npmjs.org - run: | - yarn workspace @siemens/ix-echarts publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish ix-angular version to npmjs.org - run: | - cd packages/angular/dist - yarn publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000000..ec05c485eed --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: Release + +on: + push: + branches: + - main + - next + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - uses: ./.github/workflows/actions/turbo + + - name: Build + run: pnpm build --cache-dir=.turbo --filter \!documentation + + - name: Create Release Pull Request or Publish to npm + id: changesets + uses: changesets/action@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + publish: pnpm ci:publish --publish-branch ${{ github.ref_name }} + version: pnpm ci:version diff --git a/.gitignore b/.gitignore index 56c2a0f1c21..13e297a1247 100644 --- a/.gitignore +++ b/.gitignore @@ -171,6 +171,7 @@ packages/html-test-app/src/public/additional-theme ### packages/documentation/docs/auto-generated/ +packages/documentation/.build-temp packages/documentation/scripts/.typedoc/ packages/documentation/static/auto-generated/ packages/documentation/static/figma/ diff --git a/.husky/commit-msg b/.husky/commit-msg index 988eb597eaa..e4290ee0770 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,6 @@ #!/usr/bin/env sh +[ -n "$CI" ] && exit 0 + . "$(dirname -- "$0")/_/husky.sh" npx --no -- commitlint --edit diff --git a/.npmrc b/.npmrc index 8fbba643f1e..32f18c2f591 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,3 @@ -registry = "https://registry.npmjs.org" +registry=https://registry.npmjs.org @siemens:registry=https://registry.npmjs.org +shamefully-hoist=true diff --git a/.prettierrc b/.prettierrc index 544138be456..c1a6f667131 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,4 @@ { - "singleQuote": true + "singleQuote": true, + "trailingComma": "es5" } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 37468c9f1a9..6310156294b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,66 +4,238 @@ SPDX-FileCopyrightText: 2023 Siemens AG SPDX-License-Identifier: MIT --> -# Siemens iX + +# Contributing to Siemens Industrial Experience -Siemens iX provides a holistic design system for building attractive and intuitive web applications. +First off, thanks for taking the time to contribute! โค๏ธ -Contributions to the library and feedback are very welcome. -This document explains our guidelines for both. -These guidelines are designed to minimize friction for everyone involved. +All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. ๐ŸŽ‰ -## Feature requests and bug reporting +> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about: +> - Star the project +> - Tweet about it +> - Refer this project in your project's readme +> - Mention the project at local meetups and tell your friends/colleagues -For feature requests as well as bug reports please open up an issue. + +## Table of Contents -### Feature requests +- [Code of Conduct](#code-of-conduct) +- [I Want To Contribute](#i-want-to-contribute) +- [Issue workflow](#issue-workflow) +- [Reporting Bugs](#reporting-bugs) +- [Suggesting Enhancements](#suggesting-enhancements) +- [Your First Code Contribution](#your-first-code-contribution) +- [Improving The Documentation](#modify-and-preview-documentation) +- [Commit Messages](#commit-messages) -Feature requests need to include a clear description of the desired feature. Ideally a use case for the feature is also part of the request. Additional information like screenshots or design screens can increase understandability and cogency of the request. -### Bug reports +## Code of Conduct -Bug reports need to include a clear description of the problem as well as additional information that can help in solving the issue (e.g. software versions, stack traces). +This project and everyone participating in it is governed by the +[Siemens Industrial Experience Code of Conduct](blob/main/CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. Please report unacceptable behavior +to or . -## Merge requests +## I Want To Contribute -If you are planning to contribute a larger change to iX it is advisable to open an issue for discussion first. This way you can make sure in advance that your changes will actually get accepted. +> ### Legal Notice +> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license. -In order to start working on an issue fork the `iX repositiory`. -Once all changes are implemented commit them to the fork and create a merge request (MR). -Please make sure to enable the option `Allow commits from members who can merge to the target branch` in your MR. This way the iX team will be able to rebase the MR if neccessary. +### Reporting Bugs -Usually all changes have to be combined into one single commit for clarity. No unrelated changes must be part of that commit. -If your MR should contain more than one commit it will get squash merged. + +#### How Do I Submit a Good Bug Report? -## Coding guidelines +> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to or . -iX releases follow the concept of [Semantic versioning](https://semver.org/). Therefore it is vital that changes to the codebase don't violate these principles. -The API of iX consists of components, TypeScript classes, CSS classes, CSS Custom properties and SCSS mixins. -Please make sure that no accidental breaking changes are produced by your changes. -For issues that are not yet tagged with a version number it is important that you communicate breaking changes in your merge request. +We use GitHub issues to track bugs and errors. If you run into an issue with the project: -In order to keep code quality high we ask for any contribution to adhere to any applicable guidelines listed below: +- Open an [Issue](https://github.com/siemens/ix/issues/new?assignees=&labels=triage&projects=&template=bug_report.yml). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.) +- Explain the behavior you would expect and the actual behavior. +- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case. +- Provide the information you collected in the previous section. -- [Angular coding style guide](https://angular.io/guide/styleguide) -- [Google's TypeScript style guide](https://google.github.io/styleguide/tsguide.html) +Once it's filed: -## Design specs/styleguide +#### Issue workflow -If you need access to iX design documentation please contact a iX maintainer. +- The project team will label the issue accordingly. `Workflow: Issue created` +- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` label will not be addressed until the steps to reproduce it have been provided. Ideally you can provide a link to a running example (e.g. StackBlitz). +- If the team is able to reproduce the issue, it will be marked `type: bug` and `Workflow: Approved`, as well as possibly other labels (such as `type: enhancement`) +- If work on the issue has begun the workflow label will be changed to `Workflow: In progress` -## Definition of done (DoD) -Any contribution will have to satisfy this list of criteria before it will get accepted: +### Suggesting Enhancements -- Feature/fix as described in issue -- Unit tests (where applicable) -- Visual regression tests for components/styling -- E2E tests (where applicable) -- Example component/documentation for components/styling/concepts + +#### Before Submitting an Enhancement -## Commit guidlines +- Read the [documentation](https://ix.siemens.io/version-dev/docs/getting-started/) carefully and find out if the functionality is already covered, maybe by an individual configuration. +- Perform a [search](https://github.com/siemens/ix/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one. +- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library. -#### Commit Message Header + +#### How Do I Submit a Good Enhancement Suggestion? + +Enhancement suggestions are tracked as [GitHub issues](https://github.com/siemens/ix/issues). + +- Use a **clear and descriptive title** for the issue to identify the suggestion. +- Provide a **step-by-step description of the suggested enhancement** in as many details as possible. +- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you. +- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. +- **Explain why this enhancement would be useful** to most Siemens iX users. You may also want to point out the other projects that solved it better and which could serve as inspiration. + +## Your First Code Contribution + +### Setup + +1. [Download the installer](https://nodejs.org/) for the LTS version of Node.js. This is the best way to also [install pnpm](https://pnpm.io/installation). +2. Fork this repository. +3. Clone your fork. +4. Create a new branch from main for your change. +5. Run `pnpm install` to install dependencies. +6. Navigate into the directory of the package you wish to modify (core, angular, etc.). +7. Follow the steps for the specific package below. + +### Modifying Core Components + +1. Locate the component(s) to modify inside `/packages/core/src/components/`. +2. Take a look at the [Stencil Documentation](https://stenciljs.com/docs/introduction/) and other components to understand the implementation of these components. +3. Make your changes to the component. If the change is overly complex or out of the ordinary, add comments so we can understand the changes. +4. [Preview your changes](#preview-changes) locally. +5. [Modify the documentation](#modify-and-preview-documentation) if needed. +6. [Run lint](#lint-changes) on the directory and make sure there are no errors. +7. [Build the project](#building-changes). +8. After the build is finished, commit the changes. Please follow the [commit message format](#commit-message-format) for every commit. + +### Modifying Angular, React, and Vue + +``` +Stencil's primary goal is to remove the need for components to be written using a specific framework's API. It accomplishes this by using standardized web platform APIs that work across all modern browsers. Using the low-level component model that is provided by the browser (which all frameworks are built on) allows Stencil components to work inside a framework or without one. + +The experience of integrating web components directly into existing applications can be tricky at times, as frameworks have varying support for vanilla web components. In order to accommodate the various issues the Stencil team has created Framework Wrappers to make the process simpler. +``` +Read more about the [Stencil Output Targets here](https://stenciljs.com/docs/overview) + +> Please be aware you can not modify angular, react and vue components directly. +> Some files are marked with a jsdocs `/* auto-generated react proxies */`. These files will be overwritten by each build! + +#### Modifying Files + +1. Locate the files inside the relevant root directory: + - Angular: [`/packages/angular`](/packages/angular/src) + - React: [`/packages/react`](/packages/react/src) + - Vue: [`/packages/vue`](/packages/vue/src) +2. Make your changes to the files. If the change is overly complex or out of the ordinary, add comments so we can understand the changes. +3. Run lint on the directory and make sure there are no errors. +4. Build the project. +5. After the build is finished, commit the changes. Please follow the [commit message format](#commit-message-format) for every commit. +6. [Submit a Pull Request](#submit-pull-request) of your changes. + +### Preview Changes + +#### Core + +1. Run `pnpm start --filter @siemens/ix` from within the `root` directory. +2. A browser should open at `http://localhost:3333/`. +3. Edit and safe `/packages/core/src/components/my-component/my-component.tsx` to review your changes. + +#### Angular + +1. Run `pnpm start --filter @siemens/angular-test-app` from within the `root` directory. +2. A browser should open at `http://localhost:4200/previews/button`. +3. Edit or add an example in `packages/angular-test-app/src/preview-examples`. +4. Navigate to `http://localhost:4200/previews/{your-example-file-name}` to review your changes. + +#### React + +1. Run `pnpm start --filter @siemens/react-test-app` from within the `root` directory. +2. A browser should open at `http://localhost:5173/previews/buttons`. +3. Edit or add an example in `packages/react-test-app/src/preview-examples/buttons`. +4. Navigate to `http://localhost:5173/previews/{your-example-file-name}` to review your changes. + +#### Vue + +1. Run `pnpm start --filter @siemens/angular-test-app` from within the `root` directory. +2. A browser should open at `http://localhost:5173/previews/buttons`. +3. Edit or add an example in `packages/vue-test-app/src/preview-examples/buttons`. +4. Navigate to `http://localhost:5173/previews/{your-example-file-name}` to review your changes. + +#### Web Components + +1. Run `pnpm start --filter @siemens/html-test-app` from within the `root` directory. +2. A browser should open at `http://localhost:5173/preview-examples/buttons.html`. +3. Edit or add an example in `packages/vue-test-app/src/preview-examples/buttons`. +4. Navigate to `http://localhost:5173/preview-examples/{your-example-file-name}.html` to test and preview your changes. + +#### Lint changes + +1. Run `pnpm lint` from within the `root` directory. + +#### Building changes + +1. Run `pnpm build` from within the `root` directory. +2. Make sure you have committed all changes. + +### Unit testing + +```sh +pnpm test +``` + +### Visual regression testing + +**_Docker cli must be installed on your system_** +If you execute the visual-regression tests, please be sure to execute the build step before. + +1. Build the library `pnpm build --filter \!documentation` + +2. Start playwright docker container. (Currently v1.30.0-focal but can be a newer version) + +```sh +docker run -p 8080:8080 -v $(pwd):/work/ -w /work -it mcr.microsoft.com/playwright:v1.30.0-focal /bin/bash +``` + +3. Start the test suite + - All tests run `pnpm visual-regression` + - Workspace run `pnpm visual-regression --filter @siemens/ix` + +- Check the results in `packages//playwright-report/index.html` +- Adapt and update snapshots with `pnpm --filter @siemens/ix run visual-regression -u` +- Check the git diff and commit changes ๐ŸŽ‰ + +### Modify and preview documentation + +1. Run `pnpm start --filter documentation` from within the `root` directory. +2. Locate the docs(s) to modify inside `/packages/documentation/docs/`. + +#### Preview and example code + +- html-test-app +- angular-test-app +- react-test-app +- vue-test-app + +These packages contain playground applications to explore and test the respective `ix` components. +The preview source code for the documentation is also located inside the `x-test-app`'s. (`src/preview-examples`) +These preview-examples will be translated to markdown files and get copied into `./packages/documentation/docs/auto-generated/previews`. + +#### Figma integration + +> You need to have access to the internal figma library + +To see all image references it is necessary to create a personal access token (https://www.figma.com/developers/api#access-tokens). + +Store the token as environment variable "FIGMA_API_TOKEN" or in the .env file inside root. + +Serve documentation [locally](http://localhost:3000/siemens-ix/) + +```sh +pnpm start --filter=documentation +``` + +### Commit Message Format ``` (): @@ -81,6 +253,12 @@ Any contribution will have to satisfy this list of criteria before it will get a The `` and `` fields are mandatory, the `()` field is optional. +##### Git hooks via husky + +If you execute `pnpm install` you will get git hooks which verify the git commit message. + +Checkout more [details here](https://github.com/typicode/husky) + ##### Type Must be one of the following: @@ -93,3 +271,13 @@ Must be one of the following: - **perf**: A code change that improves performance - **refactor**: A code change that neither fixes a bug nor adds a feature - **test**: Adding missing tests or correcting existing tests + +### Submit Pull Request + +1. [Create a new pull request](https://github.com/siemens/ix/compare) with the `main` branch as the `base`. You may need to click on `compare across forks` to find your changes. +2. See the [Creating a pull request from a fork](https://help.github.com/articles/creating-a-pull-request-from-a-fork/) GitHub help article for more information. +3. Please fill out the provided Pull Request template to the best of your ability and include any issues that are related. +4. Create a [changeset](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md) to help us prepare a release. If you are not sure what to do just skip this step, a maintainer will comment on the pull request. + +## Attribution +This guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)! diff --git a/README.md b/README.md index 7dd2006d62e..fb1b2fbd6af 100644 --- a/README.md +++ b/README.md @@ -1,159 +1,58 @@ - - -![iX](./logo.svg) - -> Siemens Industrial Experience (iX) monorepo - -![version](https://img.shields.io/npm/v/@siemens/ix) -![npm](https://img.shields.io/badge/npm-%3E%3D8.x.x-blue.svg) -![node](https://img.shields.io/badge/node-%3E%3D16.16.x-blue.svg) -![yarn](https://img.shields.io/badge/yarn->=1.x.x-blue.svg) -[![MIT License](https://img.shields.io/badge/license-MIT-009999.svg?style=flat)](./LICENSE.md) - -iX is an open-source design system for designers and developers, to consistently create the perfect digital experience for industrial software products. - -

- Quickstart - - - - Documentation + +
+

- - -## Installation - -You can find a getting started guide [here](https://ix.siemens.io/docs/installation/) - -## Development - -### Installation - -```sh -yarn install -``` - -### Build - -```sh -yarn build || yarn build --filter= -``` - -### Development - -```sh -yarn start || yarn start --filter= -``` - -### Execute unit tests - -```sh -yarn test -``` - -### Visual regression testing - -**_Docker cli must be installed on your system_** -If you execute the visual-regression tests, please be sure to execute the build step before. - -- Build the library - -```sh -yarn build -``` - -- Start playwright docker container. (Currently v1.30.0-focal but can be a newer version) - -```sh -docker run -p 8080:8080 -v $(pwd):/work/ -w /work -it mcr.microsoft.com/playwright:v1.30.0-focal /bin/bash -``` -- Start the test suite +

Siemens Industrial Experience

- - All tests run `yarn visual-regression-ci` - - Workspace run `yarn workspace @siemens/ix test:e2e` +

+ Siemens Industrial Experience gives you access to a broad range of UI patterns, UI components, design tools, resources and content guidelines to accelerate collaboration between designers, developers and writers, helping to build efficient and consistent products. +
+ Explore the documentation ยป +
+
+ Quickstart + ยท + Community + ยท + Report Issue + ยท + Request Feature +

+ -- Check the results in `packages//playwright-report/index.html` -- Adapt and update snapshots with `yarn workspace @siemens/ix test:e2e -u` -- Check the git diff and commit changes ๐ŸŽ‰ -### Documentation + +## About The Project -To see all image references it is necessary to create a personal access token (https://www.figma.com/developers/api#access-tokens). +Siemens Industrial Experience is an open-source design system for designers and developers, to consistently create the perfect digital experience for industrial software products. -Store the token as environment variable "FIGMA_API_TOKEN" or in the .env file inside root. +### ๐Ÿ“ฆ Flexible components -Serve documentation [locally](http://localhost:3000/siemens-ix/) +Build based on native Web Components. +Adopt major frameworks for seamless integration into your project. -```sh -yarn start --filter=documentation -``` +[![Stencil][Stencil]][Stencil-url] +[![React][React.js]][React-url] +[![Vue][Vue.js]][Vue-url] +[![Angular][Angular.io]][Angular-url] -### Release -```sh -yarn release -``` + +## ๐Ÿš€ Getting Started -## Project structure - -### Package `core` - -Contains all styles and the webcomponents. - -**_published as `@siemens/ix`_** - -### Package `react` - -Contains the wrapper components for react. - -**_published as `@siemens/ix-react`_** - -### Package `angular` - -Contains the wrapper components for angular. - -**_published as `@siemens/ix-angular`_** - -### Package `html-test-app`, `react-test-app` and `angular-test-app` - -These packages contain playground applications to explore and test the respective `ix` components. -The preview source code for the documentation is also located inside the `x-test-app`'s. (`src/preview-examples`) -These preview-examples will be translated to markdown files and get copied into `./packages/documentation/docs/auto-generated/previews`. - -**_Not published_** - -### Package `documentation` - -Contains the documentation. - -### Package `aggrid` - -Contains the brand and classic theme for the aggrid library - -**_published as `@siemens/ix-aggrid`_** - -## Git hooks via husky - -Our pipeline lints each commit pushed to remote. To verify that you don't need -to rebase existing commits please install our git hooks. - -```sh -# Activate hooks -npx husky install -# or -yarn husky install -``` +You can find a getting started guide [here](https://ix.siemens.io/docs/installation/) + ## ๐Ÿค Contributing -Contributions, issues and feature requests are welcome! +Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. + +Checkout our [contribution guidelines](/CONTRIBUTING.md) ## ๐Ÿ‘จโ€๐Ÿ’ป Maintainers @@ -165,3 +64,28 @@ Contributions, issues and feature requests are welcome! Copyright ยฉ 2022 [Siemens AG](https://www.siemens.com/). This project is MIT licensed. + +

(back to top)

+ + + + +[contributors-shield]: https://img.shields.io/github/contributors/siemens/ix.svg?style=for-the-badge +[contributors-url]: https://github.com/siemens/ix/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/siemens/ix.svg?style=for-the-badge +[forks-url]: https://github.com/siemens/ix/members +[stars-shield]: https://img.shields.io/github/stars/siemens/ix.svg?style=for-the-badge +[stars-url]: https://github.com/siemens/ix/stargazers +[issues-shield]: https://img.shields.io/github/issues/siemens/ix.svg?style=for-the-badge +[issues-url]: https://github.com/siemens/ix/issues +[license-shield]: https://img.shields.io/github/license/siemens/ix.svg?style=for-the-badge +[license-url]: https://github.com/siemens/ix/blob/main/LICENSE.txt +[product-screenshot]: packages/documentation/static/img/welcome.png +[Stencil]: https://img.shields.io/badge/stenciljs-000000?style=for-the-badge&logo=stenciljs&logoColor=white +[Stencil-url]: https://stenciljs.com/ +[React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB +[React-url]: https://reactjs.org/ +[Vue.js]: https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge&logo=vuedotjs&logoColor=4FC08D +[Vue-url]: https://vuejs.org/ +[Angular.io]: https://img.shields.io/badge/Angular-DD0031?style=for-the-badge&logo=angular&logoColor=white +[Angular-url]: https://angular.io/ diff --git a/ix.code-workspace b/ix.code-workspace index eb669b5f098..3a617b0d1bb 100644 --- a/ix.code-workspace +++ b/ix.code-workspace @@ -46,7 +46,7 @@ }, { "name": "eslint-config", - "path": "./packages/eslint-config" + "path": "./packages/eslint-config-ix" }, { "name": "figma-plugin", diff --git a/package.json b/package.json index 42f2f20fd3f..14043c6e75e 100644 --- a/package.json +++ b/package.json @@ -13,36 +13,31 @@ "bugs": { "url": "https://www.github.com/siemens/ix/issues" }, - "packageManager": "yarn@1.22.15", + "packageManager": "pnpm@8.9.2", "engines": { "npm": ">=8.x.x", "node": ">=16.16.x" }, - "workspaces": [ - "packages/*" - ], "scripts": { "docs": "dotenv -- turbo run start --filter=documentation", "build": "dotenv -- turbo run build", + "pkg": "dotenv -- turbo run pkg", "start": "dotenv -- turbo run start", - "clean": "npx rimraf ./**/node_modules", "turbo": "dotenv -- turbo", "lint": "dotenv -- turbo run lint", - "generate-documentation-version": "yarn workspace documentation run generate-version", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0", - "release": "node ./scripts/release.js", - "push-git": "node ./scripts/push-git.js", - "sonarqube": "sonar-scanner", - "visual-regression-ci": "npx playwright install chromium && yarn workspace @siemens/ix test:e2e && yarn workspace @siemens/ix-aggrid test:e2e", - "visual-regression": "docker run --rm --network host -v $(pwd):/work/ -w /work mcr.microsoft.com/playwright:v1.32.1-focal /bin/bash -c \"CI=TRUE npm run visual-regression-ci\"", - "visual-regression-windows": "docker run --rm --network host -v %cd%:/work/ -w /work mcr.microsoft.com/playwright:v1.32.1-focal /bin/bash -c \"CI=TRUE npm run visual-regression-ci\"", - "test": "turbo run test", - "prepare": "husky install" + "visual-regression": "dotenv -- turbo run visual-regression", + "test": "dotenv -- turbo run test", + "prepare": "husky install", + "ci:version": "pnpm changeset version && pnpm i --lockfile-only", + "ci:publish": "pnpm publish -r --dry-run" }, "dependencies": { "tslib": "^2.3.0" }, "devDependencies": { + "@changesets/changelog-github": "^0.4.8", + "@changesets/cli": "^2.26.2", "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", "colorette": "^2.0.19", @@ -59,7 +54,7 @@ "prettier-plugin-organize-imports": "^3.2.1", "semver": "^7.3.7", "sonarqube-scanner": "^2.8.1", - "turbo": "^1.4.3", + "turbo": "^1.10.16", "typescript": "~4.7.2" }, "config": { diff --git a/packages/aggrid/package.json b/packages/aggrid/package.json index 233a6f0179c..68e7ed8eb41 100644 --- a/packages/aggrid/package.json +++ b/packages/aggrid/package.json @@ -16,7 +16,7 @@ ], "scripts": { "build": "gulp", - "test:e2e": "playwright test --reporter html", + "test:e2e": "playwright test", "host-root": "http-server -a 127.0.0.1" }, "devDependencies": { @@ -37,8 +37,10 @@ "sass": "^1.68.0", "ts-node": "^10.9.1" }, + "dependencies": { + "@siemens/ix": "~2.1.2" + }, "peerDependencies": { - "@siemens/ix": "~2.1.2", "ag-grid-community": "^28 || ^29 || ^30" } } diff --git a/packages/aggrid/playwright.config.ts b/packages/aggrid/playwright.config.ts index ae3933453f2..c333b48a90b 100644 --- a/packages/aggrid/playwright.config.ts +++ b/packages/aggrid/playwright.config.ts @@ -72,7 +72,7 @@ const config: PlaywrightTestConfig = { /* Configure projects for major browsers */ projects: buildProjectsWithThemes(), webServer: { - command: 'yarn host-root', + command: 'pnpm host-root', port: 8080, }, }; diff --git a/packages/angular-test-app/package.json b/packages/angular-test-app/package.json index eff6041cf02..186cfaa26e5 100644 --- a/packages/angular-test-app/package.json +++ b/packages/angular-test-app/package.json @@ -19,9 +19,9 @@ "@angular/platform-browser-dynamic": "^14.2.0", "@angular/router": "^14.2.0", "@siemens/ix-icons": "^2.0.0", - "@siemens/ix": "~2.1.2", - "@siemens/ix-aggrid": "~2.1.2", - "@siemens/ix-angular": "~2.1.2", + "@siemens/ix": "workspace:*", + "@siemens/ix-aggrid": "workspace:*", + "@siemens/ix-angular": "workspace:*", "ag-grid-angular": "^30.0.0", "ag-grid-community": "^30.2.0", "rxjs": "~7.5.0", diff --git a/packages/angular-test-app/tsconfig.json b/packages/angular-test-app/tsconfig.json index 4dfe1110d0a..d80e0136983 100644 --- a/packages/angular-test-app/tsconfig.json +++ b/packages/angular-test-app/tsconfig.json @@ -23,8 +23,7 @@ "preserveSymlinks": true, "paths": { "@siemens/ix-angular": ["./../angular/dist"], - "@siemens/ix-angular/*": ["./../angular/dist"], - "@angular/*": ["../node_modules/@angular/*"] + "@siemens/ix-angular/*": ["./../angular/dist"] } }, "angularCompilerOptions": { diff --git a/packages/angular/package.json b/packages/angular/package.json index b390c6a38cc..6abbad7f232 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -19,7 +19,8 @@ "@siemens/ix": "~2.1.2" }, "peerDependencies": { - "@angular/core": ">=13.3.12", + "@angular/core": ">=13.4.0", + "@angular/forms": ">=13.4.0", "@siemens/ix-icons": "^2.0.0" }, "devDependencies": { @@ -27,6 +28,7 @@ "@angular/compiler": "v13-lts", "@angular/compiler-cli": "v13-lts", "@angular/core": "v13-lts", + "@angular/forms": "v13-lts", "@jest/globals": "^29.3.1", "@siemens/ix": "~2.1.2", "@types/jest": "^29.2.3", @@ -36,5 +38,8 @@ "ng-packagr": "^14.2.0", "ts-jest": "^29.0.3", "typescript": "4.6.4" + }, + "publishConfig": { + "directory": "dist" } } diff --git a/packages/angular/tsconfig.json b/packages/angular/tsconfig.json index c6b6f57b60f..f423e1929af 100644 --- a/packages/angular/tsconfig.json +++ b/packages/angular/tsconfig.json @@ -31,11 +31,7 @@ "strictPropertyInitialization": false, "target": "es2015", "baseUrl": ".", - "paths": { - "@siemens/ix": ["../core"] - }, - "plugins": [ - ], + "plugins": [], "skipLibCheck": true }, "exclude": ["node_modules"], diff --git a/packages/core/package.json b/packages/core/package.json index 2902e8bb402..60f8eedd281 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -36,12 +36,10 @@ "test": "npm run test:spec && npm run test:ct", "test:spec": "stencil test --spec", "test:ct": "playwright test --config playwright-ct.config.ts --reporter list", - "test:coverage": "stencil test --spec --coverage", - "test:e2e": "playwright test --reporter html", - "test:e2e:list": "playwright test --reporter list", - "playwright.docker": "docker run --rm --network host -v $(pwd):/work/ -w /work/packages/core -it mcr.microsoft.com/playwright:v1.32.1-focal /bin/bash", + "visual-regression": "playwright test", "host-root": "http-server ./ -a 127.0.0.1 -p 8080 -c-1", - "generate": "stencil generate" + "generate": "stencil generate", + "pkg": "pnpm pack" }, "dependencies": { "@floating-ui/dom": "^1.5.1", @@ -74,7 +72,7 @@ "cssnano": "^6.0.1", "cz-conventional-changelog": "^3.3.0", "eslint": "^8.56.0", - "eslint-config-ix": "*", + "eslint-config-ix": "workspace:*", "eslint-plugin-react": "^7.33.2", "fs-extra": "^10.0.0", "http-server": "^14.1.1", @@ -83,6 +81,7 @@ "mustache": "^4.2.0", "postcss": "^8.4.29", "puppeteer": "21.1.1", + "rimraf": "^5.0.5", "sass": "^1.58.3", "start-server-and-test": "^1.14.0", "ts-node": "^10.0.0", diff --git a/packages/core/playwright-ct.config.ts b/packages/core/playwright-ct.config.ts index 71b3d3ce56a..c85a75cacc9 100644 --- a/packages/core/playwright-ct.config.ts +++ b/packages/core/playwright-ct.config.ts @@ -19,6 +19,7 @@ import defaultConfig from './playwright.config'; const config: PlaywrightTestConfig = { ...defaultConfig, testMatch: path.join(__dirname, 'src', 'components', '**', '*.ct.ts'), + reporter: 'list', projects: [ { name: `chromium`, diff --git a/packages/core/playwright.config.ts b/packages/core/playwright.config.ts index 0e7a4fa28c3..3da7d5cd629 100644 --- a/packages/core/playwright.config.ts +++ b/packages/core/playwright.config.ts @@ -62,7 +62,7 @@ const config: PlaywrightTestConfig = { /* Opt out of parallel tests on CI. */ workers: 10, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', + reporter: process.env.CI ? 'blob' : 'html', /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ @@ -76,7 +76,7 @@ const config: PlaywrightTestConfig = { /* Configure projects for major browsers */ projects: buildProjectsWithThemes(), webServer: { - command: 'npm run host-root', + command: 'pnpm run host-root', port: 8080, }, }; diff --git a/packages/core/scripts/build/build-css.ts b/packages/core/scripts/build/build-css.ts index e019be162b7..4bceccfa4e9 100644 --- a/packages/core/scripts/build/build-css.ts +++ b/packages/core/scripts/build/build-css.ts @@ -10,7 +10,7 @@ import cssnano from 'cssnano'; import fse from 'fs-extra'; import path from 'path'; import postcss from 'postcss'; -import rimraf from 'rimraf'; +import { rimraf } from 'rimraf'; import sass from 'sass'; const ROOT = path.join(__dirname, '..', '..'); @@ -21,8 +21,8 @@ const DIST = path.join(ROOT, 'dist', 'siemens-ix'); const DIST_CSS = path.join(ROOT, 'dist-css'); const DIST_THEME = path.join(ROOT, 'dist-css', 'theme'); -function setupDistFolder() { - rimraf.sync(DIST_CSS); +async function setupDistFolder() { + await rimraf.sync(DIST_CSS); fse.ensureDirSync(DIST_CSS); fse.ensureDirSync(DIST_THEME); } @@ -82,7 +82,7 @@ function copyDistCssToDist() { } (async () => { - setupDistFolder(); + await setupDistFolder(); let cssFiles: { path: string; diff --git a/packages/core/src/components/utils/context.ts b/packages/core/src/components/utils/context.ts index 29c9c435da6..76ca46d2a39 100644 --- a/packages/core/src/components/utils/context.ts +++ b/packages/core/src/components/utils/context.ts @@ -87,7 +87,7 @@ export type ContextConsumerSubscription = { export function useContextConsumer< T extends HTMLElement, - C extends UnknownContext + C extends UnknownContext, >( hostElement: T, context: C, @@ -122,7 +122,7 @@ export type ContextProvider = Context> = { export function useContextProvider< X extends {}, C extends Context, - T extends HTMLElement = HTMLElement + T extends HTMLElement = HTMLElement, >( hostElement: T, context: C, diff --git a/packages/core/src/components/utils/modal/message.ts b/packages/core/src/components/utils/modal/message.ts index e069dd9a891..c36ce1ea12f 100644 --- a/packages/core/src/components/utils/modal/message.ts +++ b/packages/core/src/components/utils/modal/message.ts @@ -121,9 +121,8 @@ export async function showMessage(config: MessageContent) { dialog.appendChild(content); dialog.appendChild(footer); - const dialogRef = await getCoreDelegate().attachView( - dialog - ); + const dialogRef = + await getCoreDelegate().attachView(dialog); dialogRef.addEventListener( 'dialogClose', diff --git a/packages/core/src/tests/application/application.e2e.ts-snapshots/basic-navigation-mobile-mobile-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/application/application.e2e.ts-snapshots/basic-navigation-mobile-mobile-1-chromium---theme-classic-dark-linux.png index d8354cce8247bc2756fbe329156c43c7d1690b2f..9b038510a78e753acce85dc43d8c6b9a5b5e1403 100644 GIT binary patch literal 6962 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 delta 4788 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

lA{wl}?;GkLEaa)+jb@C&roy3`3J2uRQkTRx(dy zfJJsJXnxIpP1iADfsv8*ug0UmXvL`lzY7=E`OPAslRzPP<7<0bEgiFesroLLKGJMh zHM(~8swZwa#Ad&^>BH>SA2~L9V*^MiD#M!{Q>b(>aoO(YLw3s1esadpKV2C`d@kbJirG)Ts8oAjm#%Fa@zL3%o>~~Q- zlmRE3cfu{3KMWL3-9VdSd~6YokX+=3inTw0BhAuEgL=?FW%Rf+YV+S!T`v8`Uo&-Rpfr|axfcbE$3|3u6(x?E zWn-DBt(fjgd_bHKo{33^i>mLqn0@(7&YNFxo16~Wn99nhn;aVHcK8N(hUZ^rMZW2-&fuOSXm*P+@vn zA8aK12wx);i_BG?=o|}(I{OZ~JE8VpDy8E4J6=YjFElmSC5?Ky5l&dQVEt0-BAYZl zq(o|j)%>%>k%W=ob000;|3zchkaQu|$vA8wUM@v2Saxi@aqG3G&kuj;lCx~}zqLs) z1}mlt3@?~$zUL;~dDCrF`ZY|(3uLK*ttiIq()L@rsb%1#H)(K@j`%79Yn;?Et}LHJ zo@qN@$s;Y*h(-gQnWr0|(Sbqu6~CX|eIs3R?iZvWk`ezIxnvZ}q!HcgTKnn9j%2F- zh@-UMD>BmZoEM%dreSwabSoEeF*z{jK!cz9kOSN7_VM0t5{C%GmrmnfmykXjdo{Us z80Sp^yMDW~p>(JBd7B*x)^c*gsaCfpV@q5`;%CE&9TJ zYtb4f{`5U#r7=$YTR?fpw_$NN_78SMo-7FVQ}6xeX!f;+lQL_J%R|oO=H#VCQvPOD z7#meGkR!2KJV*9=RFL8m1*@_sB1JezfhVVU`my(Do5~>TD;J#5Qq4cAGZx~!ovnlh z4PO!}&omZsT{dn*?r@%kRD*+^nzC84C2dMSKpEDbX=I7p-qo%D+xZJN;v@!+L?Ts& z5Ak=_QQM+fabhQD#r%~I@@C58;-1+Wt8e67R?>Fsw@(cS7yW~B{-p{7+duzYUxwD+ zwA!$rtXGXP=JD$idSJQdqg%;cc(x3l%Y??0!njiD6tAt7V*alL7b<-r-0;PMD(YPy zXtHg$%?aeQf)qw1vS-$Rb|9b}&)Zt7`E>@<>z{DJCWc{(zlEI^RYo;9wPo1M=doi7 ziw6cp3z}<7@7losa)(O4MSIBVUmP4Ck+Hze^a!_O>O^=7;~{ z5@L2HBm~wpdXeb^b+Yc>x|xsu2W5Y*E{$pG)hyQ>$@4$#FrXD#5JKt7`Wycb9YMok z2H8rENyUDw4NFAb^RBAeGIrbe>nX-@?!nnK01eU!->lS?&wnYDO~(^ZDS4C_EW$Xx zaqXzyh+kA{gL%o9_bHw&TtnpZiC&Y&Xlrii4IlNtD&5uU8(y*5;ks>8U$u?>r@NOv rTQgSW(Z2l?!}|8WIi#=MY6927a*v~3H|N(_zpsx3AEq5V`~80ax}TKR diff --git a/packages/core/src/tests/application/application.e2e.ts-snapshots/basic-navigation-mobile-mobile-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/application/application.e2e.ts-snapshots/basic-navigation-mobile-mobile-1-chromium---theme-classic-light-linux.png index 77518919f55949a33a07dcbce2f8b53f474ed61c..8053e6c76d88399f31d84a5abf48b7548ed8cc7a 100644 GIT binary patch literal 6845 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 aFR=CTQBQc^n=d0Rg7$}e*SIh4{C@)YFXD~> diff --git a/packages/core/src/tests/basic-navigation/basic-navigation.e2e.ts-snapshots/basic-navigation-mobile-mobile-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/basic-navigation/basic-navigation.e2e.ts-snapshots/basic-navigation-mobile-mobile-1-chromium---theme-classic-dark-linux.png index d8354cce8247bc2756fbe329156c43c7d1690b2f..b9052dd4c3f9246f4e4e6d18c998391ae2d313ec 100644 GIT binary patch delta 3968 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 diff --git a/packages/core/src/tests/basic-navigation/mobile/index.html b/packages/core/src/tests/basic-navigation/mobile/index.html index 8fc94603de7..49037fb0092 100644 --- a/packages/core/src/tests/basic-navigation/mobile/index.html +++ b/packages/core/src/tests/basic-navigation/mobile/index.html @@ -25,7 +25,7 @@ justify-content: center; align-items: center; position: absolute; - content: '๐Ÿšง'; + content: 'TEST'; border: 2px dashed #ff0000aa; padding: 2rem; font-size: 55px; diff --git a/packages/core/src/tests/dropdown/dropdown.e2e.ts b/packages/core/src/tests/dropdown/dropdown.e2e.ts index b790c345a9f..c74a5599376 100644 --- a/packages/core/src/tests/dropdown/dropdown.e2e.ts +++ b/packages/core/src/tests/dropdown/dropdown.e2e.ts @@ -17,9 +17,7 @@ regressionTest.describe('dropdown', () => { await page.locator('ix-button').click(); await page.waitForSelector('.dropdown-menu.show'); - expect(await page.screenshot({ fullPage: true })).toMatchSnapshot({ - maxDiffPixelRatio: 0.05, - }); + await expect(page).toHaveScreenshot(); }); regressionTest('overflow', async ({ page }) => { @@ -33,9 +31,7 @@ regressionTest.describe('dropdown', () => { }, menuHandle); await page.waitForSelector('.dropdown-menu.show.__SCROLLED__'); - expect(await page.screenshot({ fullPage: true })).toMatchSnapshot({ - maxDiffPixelRatio: 0.02, - }); + await expect(page).toHaveScreenshot(); }); regressionTest('disabled', async ({ page }) => { @@ -44,9 +40,7 @@ regressionTest.describe('dropdown', () => { await page.locator('ix-button').click(); await page.waitForSelector('.dropdown-menu.show'); - expect(await page.screenshot({ fullPage: true })).toMatchSnapshot({ - maxDiffPixelRatio: 0.05, - }); + await expect(page).toHaveScreenshot(); }); regressionTest('handle multiple', async ({ page }) => { @@ -58,7 +52,7 @@ regressionTest.describe('dropdown', () => { await page.locator('#trigger-b').click(); await page.waitForSelector('.dropdown-menu.show'); - expect(await page.screenshot({ fullPage: true })).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); regressionTest('zoom', async ({ page }) => { @@ -73,6 +67,6 @@ regressionTest.describe('dropdown', () => { await page.locator('ix-button').click(); await page.waitForSelector('.dropdown-menu.show'); - expect(await page.screenshot({ fullPage: true })).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); }); diff --git a/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-basic-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-basic-1-chromium---theme-classic-dark-linux.png index b68a0a7641130e1ec7db3a68ce6b48143b99bba2..651be97e340a3f4092107fa05793b3885352de14 100644 GIT binary patch literal 10851 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 literal 9330 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 diff --git a/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-disabled-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-disabled-1-chromium---theme-classic-dark-linux.png index a83a595662d8aea5dbf5217cd3fcfd7d607d18b2..cc32f8ffec9c7ebe16ae02bb5499ea6894ea344c 100644 GIT binary patch literal 10817 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 gn+a literal 9251 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 diff --git a/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-overflow-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-overflow-1-chromium---theme-classic-dark-linux.png index deb62d552a7de90370ce97619bf96986a7bfa655..b00f610dbeb30b34067928b5e039e5f33de8bc7b 100644 GIT binary patch literal 17367 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 literal 16740 zcmeHv2~?BU+Ah{pX^XkEZ1q@<*FS$+TA1u3Z=C#0l4dHdN8aHah~BNu$zhP+_;cd2rs(!7+^ zekrT(PF}o`y*P4$W!F;ZD8qA5BBeHbQqp}u@NHsr1)>p5#|m#mF(@s#UWRs zj2#9I1Wn4~S4n;G!}8OyG2zs9bt}HhU&L1)RP5AtxU|Mq*>5#X{ziO7D$4t*XT{!c z|K|(VRbi6r4}$*k*MDMgM(}KI*RWfbXPmiD-AqrKd*)z8bG;?f&YUxF#I5#-DT=`# zS=oMA6Zw8vyM5likiya|ZczuK4j999qcZ3&Ur=!NW}F$6KKR(T^+0|RW3xdU4~83!5m7-zW}x}Ge=o@v^K!S#Kfep{<<&m z_@)wbK{A0<#A?@^f+a*^=3FWHd#J`e@7XDls5$15o zTyPe;_&+3X+xujPtCTOfH@D2C&WANn)X+qmzMYYA6cZU|vcS&3^qw*fU?uCH47c|4^Xr?O%yGO_LDVd9q&G$zzkl-Yno+h-nm4FCUw*XPc1GffqNUg80zj*PY*Yr;-^NWk!n~H{yo1!cey}Hwn6_uAW3{W;UHl36Z@RjKG`j;;c zrF9jRl?mp!?_2D()9f9MzUi>E3{2^w#OKIt-S6`q$|0{41RFKK?v96=>lJupAL_Sd z;=`8P6EY?T(pwIm?T*VaW%YIG(AG?;-ZKTUMI|NHT?cxM`BgE6m6geLQxT?IE!T7h zl6lt4Thg=!a&A`3LEG*qu1@!(H+NA^^wlDJy{d-~hgDLwJW>@2C?wStfv-GSsZ8RKyt#6mjkF;lr#|J!sbwn{jq?Z7umszJ5<;hNp&2=l!oOSkx>8h4HCOrB6?$ zS?z4^#pE+itYwP~6qjFZzVcd|E(;**k+eLmC`A+52e4~w_`%Ct$hI8RtUO`eJ8_mI z;uEOSa!0z`$-JCWEG;LBdsDJDsVKh}P20WRJ~)|S3bP#>A|&aNAV#ztEM|dD@1Gb* zRyU^1Ch1`&p1U58I^C=rentfm&@ZW;GSXY%;3}p#%;$ z^M+j5ukPw__?UBolfDRYZfuqjXT^RiqBr{hfb4FK?V9V&t9mzu?r&~_xYS18-&DPv zu7h2%E;^E;>p${#adED_HekH3w>M!Z-x}FEN_$*YRb|ILc75)x>)1rLDnIBv07>rr z#MT}+59(N65g6v3jy+R!v6D44!<&O9g2TO5ZiO>=@|6pt4olI{{dPlJ-=R3o3-(ZtL{N@}fXoBW9}R5gq~RF+{Dx)8|3Kfmg8@SZ9zFK#2U zz~lOP+bpvKJz82(mBNu{p6p2ksmBw_v)TiB{@ji#d4Q$XD!?2=WpHbdvH&(sVMPLU zt5Ao~V!z@_Z+7ayz`)~%2GfdCcL`8h$UzfTA*>*CNSJ?pf0H9TUWsSQBawMwj3zE& zwovoZ>YEwK+N1&d#jZE*)#Y zN{9HTYF4w-_32K(=;+AJY$zx=2;duhS?T`p`j_M`3P{Tbt$d6O zsdyTWB%{-m4ANUJRQjUBQeoj%Cfs=Sz#{H=2(#JnS(>exaJ@Sn6I^iCw23zMQq9sQ z%-&Nr>*z7lFh;wz4k3G-nVuG#Wmr&NuC0}(Pg^FbC@8J#``6 zA3t@f^085IVO=|XCjUtI`or!9G{zZs0w!!763-x8y#!{VZApVxq9Bxo6>K`9py{rdeLkE z_>Xg4xmHb04WM+8;o_2Fy+?uHB|ZkI<>25D?#)>^@|-s1s-O3Dj7r4!05})j%g}Fc zN>in|WSm{pf@lsuG&-76&M3c*LNNzF@RojP^U zb}tU-oJPV`i?MN(x>f7FeMvydxFd%FfV*mQU#EPjb{Y%{0T&ik2Yc4~k0x6CkccAQ zydCXbf|?$@_1^W+P+E%PB_?4@*GP@PZ^;@@w_^kmEx)#@;`a6H5R-iixvr)lrn>|E zy07j&=+j124xgu_AvcxT;_x3B9L%RAQk8_GE%r`Moi2!`oXtJj-Ni6m&%2kmBnjy1 zZVhVlro2z@^qYp#(2aqjjM2Am;c{K6I$g2k24jx2a{BFkyLkKr?ERCsq$!S~<#;^$ z<&TZ^K0W3lrSY25QQ$2**J7}Ydm>ILPHO0YNAXrC%nCVi0Qe62v$cV;}^9sGUC5zzv>>Hfv z^fF}XH@+#B;97N4sSQ+}?-P|weJ>D=>81MmhHLi_BTui!Q_ITBZ9Oe4a$TQ&1JwAU zfxC-KRu-cE7<{-n6$JAnQSWiVK|Sr}<4fap%wF@Ya}f^yH`B|-Fs!_5&`IGMp3tKz zeBZk{%aedrbQJs#CX)y^5f{Tnv6=Cvh9U|{1Sdn4Bscxk<6nhE6H`-e#1fEhg_J() z%6GZwDh^JBm&@H^e{*tzkiQHe^!x^%01AEt5wK)%37~p@S1L`WO*zeS4>X;Yi~YJJ z*DWQ*4%)8)x63dyRt+3a{R+!Vi_%qz&KXeyVCg<4&3bI2*qEcPF5JYZm8FwbB}^mWQ$3HxnJ{H$fXS+-rgau(w{ zbEQ5h&io+Yggr}SLO#tIAZ>XAHIsk+jR$qjlrchwZDp~wc)(HJu`{uyQ2_zsoM~f3 zP6TMDPt49B^Sq3;(y$Pq!o8N?o#Y9ZP+np>eEe!8*gm%K_AZdpZ4&S8(>sW0;#{gl zkej%+qMN}5&lQBxcv$;6MPow+=6=VieOR}hQQnxnITU#U*Wh1qfg}<=;^9>3IRPRm&P1YDw z=RCtqry}R`odgRdXnpRiy$r^?4PXGa)wQ!;Jz%`z};tBqokjjEv0n@t6IKfkQ348{j}xPRcdCeC>EEpU=% z=V6%CaoS|Y+R_prKE9a-dTq9u$zNOCp6xLrcTURe@#@Jm2>0*EEBZF2a`t_UE|bCY zjhg<|ZAkfoebOm8ZKA!VBlYoaySbW*t2HfR3dabJ-inePx3_U+L4w`k&B!+PbrIPT z&A1cUC?T(?qQVYoZ=X1uoMcB_51t8mzq*gtIeRF)vBtpBgV%FCEHwWa9!RmJdwS?M z@#^8+CN2wb(grv5$lI%8JC4yPSTkE~QKgQ-%R8PVNHepfx16K34Dc8qyr-Dfn`a4o z*~Ar-;97s)elGOsQ4isC+6AY>-Xl*Rj*j*w1dP|_=jExDS*KC&Rgu8+Ky$B{oSMqL zbLY;)F(%O!DF`hxd7w*fm~T}&=P)R3w*`rdI{zdjk}@IaG%{j+Xo5eN5X0WIR7wDD z*|-LLD*!g9fB~>%I#v}*A3B?B5?aS~oj9roGAil3Wt4fpPW`uqHo1w^)KqhFSBxqq zeV3x}5J!5D%ll2~>-{V2(A2B_ezj|el{v4&Zp~HEC#s`<58k+}nq~xs%E8^7_M8A^$o#RK=`c#W1-Tqcl;QC>?9+bM|zsLP~{4 zm=jn*lzSvEU%=f8At`jg+pjH^MkjHK$5+;8^gK7-Wauuf=EB9k_oz**vHz>riz9e7 zohE)rAi>jJY>@+xRE&}>Q1p$%n%3d;vN|OB)z40x#j1T~H-efsm+;2^)2}B`qE|

l>;z1|5-`Ic(Mxnz_U#-HiWe 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 Ou{ve@UHRXy{P-V4<&bOu diff --git a/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-overflow-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-overflow-1-chromium---theme-classic-light-linux.png index 8ce781744dc566b8e4e6b18987c8ca561a74a59c..4c9dbdf3170a12180f04c401ea190724cfc9c3e3 100644 GIT binary patch literal 16855 zcmeHvd03NYx_(ewY^_p{wTNuBqEr#6ARxQeDvbz?qEOao5s+O75JD0{YYSBr1Z0P# zR)Hcy1Y{=(twPwNAcQqR0tpZxK!A|__kK8MPOtgRT+^A;Gv~U_RsRX!lJ|SRce$VY zzMm)F{F9^I_ILNb3xmP7!@v0a0u1&R_;b^Xt#5-5I&RDbd?+C=*nI{o@6nin!9Ie) zKR>=nxYG<2AHR}Z{M!2zISimXm46(W@dAZi>GIP+QdZUynAk1TG|J@ zcUNm+_!!V#m`#(x_U(59f&*u#qZSoUGKJ5%p<}l$czPa@DuK&S(xQBS{`E`+{}jcL)66jogmIm56F%roNFt>EO7s9Tn?N{im$-qFd_aiR8R zaB}?FPT0&vckoYJf)mOxH{-!cn07Mki{fQ@qry~G`uPcPBHoq=&IrJnEw<2MnJ%oi zq)D+r6^8N;yt@gUlA^bqu*gtpkT`AG0uI*~!Qt){8Fc9>X~#S9yXaPiHxk|(nOK_> z7>2G6)^?M1!Dx6`QLa2o=*q@U$cc>vAV zjOW|zm@_y5+KVq^>{Gfvdz$O}vkX}^F0aoqLVp!I_XNk|z9po06Yyr&N?XfHOX-)Y z%Hiw}fAMnY&egz3+e^wy?Zd-I>=DvsJ#%rAZjlq8>0x54JtpD9BJDl`EjQcsftItp zqI;T^HXB`Uj$fIp_qmmn63Vy;gtX<}+7+QKh7vrdwrgS2w*n*cKiT7}|64fl6nAuq()zFCHGwkDXW&aSpHs z=Nbkcd*$(Qm}vRZ_s?twc>bMC$qj9fTXA1)^oB_4!zo|3x3_mBVnfCJ0mBs89L4IG zV&P($XKH|JH#}`LiZ8WN^iFg&3Noz(ulAd-{nT-;e!TbIy?c{2+N^9H^z2JzWY@PH zranSmW6%ywOTQ!}p3}V9XgW;6Vb_0ZbFbTaO>ZkSP1u+M1DK6sVxoz1HK6DmA$xgw z8G8SN1<@C@JQuI;-MhCkdaNN*e?E7<0p%1B5RjbnryO0aT%v(jL*zSs{m^=8@k4sOa4kyQ&LvufRiPx%=R1e zf`XhcUc4t0j_FGHjZTghukF=rW?x7-wWN1Xz4gT+v@O=JS&X4zJG87m!ED#Mr|0io zFgrW@*saR6&#$X}h>J+msh?b)sbB2Xs|@U)J!WRc9a8l^3x~tSYcmCvpT zHD265E_6qDb@)~hP2eJULTyW-K$p*a ztFGQssdi-u^%gWQ!QRE&;^9XAtxu1cniPE{O;tlZe_28z(I3w^r|YN^@s7E9dB$ts zKd53Yp09u1ninxPH#5^;>c6(<_(#fGi!&OiUk=qztyzxT#t3l&=c5#(-E6(S-rlrB zs-Bs*mNIgp=21*FNnRgx$vdHx_sfIQtDe$AjUCYmHKxg7@5ie(F z_nLg?_@F!**U`~&;lhR9hTW>F#XtS@QQa_pa2%K$B+z*3Z@r2SY7{ATjyX8oiRd7rLiStaQGx@%L(Z8Czm&U z1bu$+sS@;M*t^+(xgEl)_)Q1@zg|GM{i*r){rZ!C0tRE#eX6Ugb4-1rZ7^-GMJxVi zxTVF89bs|-%7gqN)Vt|xn*RYS_Kx)aaMadp+X6A~P`YjrZO2G$ocDFb=$r_3qb6{) zp+W3v!pj8XPJ;RNdf2@b3&)c3Qd0Pvd(u*G!7W$SBKvMwIEIYMn z+@NtT|Le_fUmcHEni)dUK2TMyjng`Q`GgB))rAt>YHoggvhF?WYmo*73u~~v;c2a{ zt>?&J`6amCrrRjrZu`~{dmxE`Hc&SWZhMl-?tL|yf8&gHrX@dz;m2I9t~OtN&K7jr zQ!0j{s-FgTwQvhE_Tj0nZ_iOMJ^3;2nU~7i^6;K(6>?~I!^YXYGnCCw3JVVuJK31Y zP`oT!Tr@%}7ms@6Qr`Bol%oS*Xh6jg@B!hRF|<7aJ)5e5x#(Nuc|G9l*|QNNDPiZ* ztX8LQnEQR^n^z%O9WzNx)~sr&H>6Igt3@}z7@+GhV=aBh8hp70vDJc0(DH1qc{#Ib zTwrL>!?Vxy>zKTG$k5P=`}g++G0N;2z2!sY7~#FlOiuPY8R&`o zqM6=8`^It~fJ8a5EnV38Nz%inrY0}i+o09>kV0Iko8_04D|e2WnD~OR2}!?@#f4KKRTSJNV+_?c>MUtrws2_5$GO2uSbgv3+mMu(&{)5v{2XjYv(QqbjVk zA<8~Qvxfeot`>8`T*!<=5-_g|k6@Qob8z#k^;5}>5j+Q0P?ks`s3mb;!Tq^OG{?3Q z-GUbeJ{vpGZYEOc`uKv(xymmDLMWD(L+o@Xj-}T*uC1KySp2`_FWc0l{5-2w)n9JL#I86 zqz|7b#+j^>2N(l>L(7kjcz9>%xOsUM09d`?Ty+p0(b8ou>Ux52Q#vIKvkn8dykaoI z9+W~L5WjZmX+wjbkDb9dQ=;897eq}*$gwARl)|v496i6Dc4Io_Ze?YtDA9?ZwT*7A z*Em;+bSZN$=q%690bx9^wY5mvueI5DW+mNuY3N2T08ZzFgq&g`ZXd!{HVLA6QOY6{ z%hSv`Drqnc%Kno`)3Ei#ni{2YhbwV;5nF8C`gY$NZfNMk}tWsa-~Uz^so2Re5X%75cE6iPGz{pk^6(7 z=nl8nM**cOiCDt^vx=JhGV6ZeY*ba);s2k{PshJyi9(a!VbNx zkYWfi*Wwx?XDWBQb|hBEjSb(+$S8dH@L`mmfq`Rqc=)Ybx7=%WLcCcDEvRn~Pdyp{ zNIEK}_|r9=0qqBn`gFlV+?rRv?BVLa)Jb|+QgSHq_M^7bTw(^GUdK#LIbgSNK?wH4 zg?QPlwp&Lm3?b-u$-=H*!Dv`M@(kc%_3cf7*C1za(zq`wd?M&g%EOO&Rmz&#sYL5f zAe7WGpZV6%m$})tv!j;j2zEF2oMJoZ7;Jq#vVji^4hU$UNvAs~#>7(<#IdYI4y)i% zhMv*E4Rr55U=AP(B{#F9&-B@-71V%Lw57&k;bm_C76DPS& z(vR7+mxY*CFSKk zxh6rzA+7oOIQap1n!N#$u+5PCaj8q0BNB-u;9eI3LGUn)$UMXwFo7=*2ib$&!SI^{ z(HAh}MB)Y9GfO0j=^Oq0~j$UUw)Q7IEK=d2) zp2pqHD(jKSmap%PMo0=mTFDZMsALZ!2T)NUD%$UDGq7)2@91h+vxKMN2`1KL)X*Us zQR-A;#py(gTotM6a}XX$IPo?JQQ*F`Y^g1pmE)tcNQ(28BJ03dusAy?u;gL1;3QMmtLLF`Mk zIe!igPqWj;8?h8Gos5LVw%4qg#VBIg-rDkV8`tiJgLc?BY(wJR-66lZ zI2@|`z7GvME+sWB^Q@%PzvP=QJzb+7hu(Lv)xrygmAAB@aqYe5a;%O{O-(^8`kcl5 zL#w*+*C5bcoo|SmaUV7riQ*FgxzI4aZ{%ck%+{*`yHcE!mzRee$}mRuO!ke*AUbp6 z`ck{_@l%5mO~D-vhs5s2#9@kkjYDYiZPB6t5n;LE^R-#X!YvudAssU0qf0 zEp??oCY3pyKYt#AHV8E~g3tO-rv!N{O74$8{#Zs3R($8=H{Y--ns8M}8Wn*c{N6sK z%K4t2LT}*`1*xQs;8ar$xUI5^);;puDjgZdq@LYbUUw%Z(mYKh!$&+^GPLmuOGt?a z1Po={8)m0zSx2{388+Pmk!fYV&$8dd1fIt5_DFMzi@0oa-kZ`s2%=<_U-$3;y|lEn z3aD;ymH@HU!)G*_+C?<1=%MHJo=IR&tgxxqp&4A?6WO4x1Wz+JE-I`jIl7yj(p9%V z*%61s`8g1Cb?Vop$llS>{0cjb0$D;z$96O3J)WPF6A)8Xv}Psq#ds%f-7d#={aV(L z-)JL0j|gB6LObC90jH+&;%!pbW57wBuoJsx8iR-qHE9!RE29;O+FPKh8aH$SdOP=y zCV6WNLmU<4?BbFMUT&Zau*a5`7C^lN$I_mnaf%Jo&|*e29_sT6$@_oN)6nt%Er@$! zpm}uWxiP(y?POKm!nT#Y-adq9;c5am0PaDu6hfnhAvPp9O;~d8P|9kubTNS!F|KsV zBL&A!3**R@6(Q*Y$;v{(cPeAlOMj-118;1_sirF318^;zv>mIkvuz(G%70jmAu_=O z{!>qDEQyx#w#P&4=9iLPRYJlIXV1|!4y`(fF{OvFGN9pS>IQILXV2CI>O#>&b)GCDpHPZ;s+}u3mi|J>}caS}8M|T}I%R%8nLL9A^)-^1m&n@H#Pvk|F z0lP{jp3kK;hI++sNQj=I-^EWHc}~@tVW1e`QC%N$y{n=_2>9^uWZ5#jWDn}|p5xqa zj(CY%X~_G~t3TNexYW8dDM=tsD};>Nj?T`$DsFO4vWrX2zKrS%no9hg1m|zw$h5YxTXRlX}IDXTkQf^i+c$5RB1W-nyvl z_8Vn%=O_}te8a(pPLOwN91}m0M!Ylz#PCmzUC?%eja&f46sZ3~;H3D!+@%t>l#dCc zn$yXP7e2HRC3R8O#G?^3ulm&@eznBCh85Si!t^b^c&Y4~umWn}vd8ql#`YNHURj+* z-EG=g`e9?W0HKZ`DvV?jq2vo6NCuwR(C3TeCx?O-e}ERoMORmU$W}1*aqO{Cr0KLD z$a128m*t&$snn$yWCZAx#S6gj=&g0)-;3hq>Y(SV4*&x^$aoDXc_5(s_o}*rCLpQ& z>T&zpNLZF@oGi~XLbM{4tB|Hv57v%WBdweeUZimpnHb*Eha zr39jdDiln}S$q51nbnQ)z#MY-@~WzMpsK|G4Z@nddBga-roExA|F@06{~?A5!Pi6% z*Z0NUD;}c+oV=w>OHxxWe0cx#LaD^B2U^1M)DKRVmIj%I^5CxJSiS0~>c2(*?qx(tUa$xH`~86subOU8?33*x zUPCq&`8hZqkNRqjiM$TM5CtzY0Wt7?8BLWcEzOrY`TK#y4VN!u8mrjWd@3AMTwb8e z+szDD^ISX+X%GCv5SIpl|G!&Eb3C}5Z8VLHQ?xtqH0)|8qRo{m{VrvO3Wf_<(^Sae z(%08F$1T^-P(7$tYgLlv7t%)O>WI@tUM9Nm2nJaoklH61^Lsp&yPQ)d2Ok_Zp8Ce# z8Q5GSaaf*@X_ae)pQbV2@vyy4;D=mrbuDT6f@lRL*% zDu0`@UT+hGj;{B(?$bi8q>36(;`4MM#9t^7UWVLAjbqqBJHm#kwZZFtn`bHcLhvCN z3V#w|=t|BQ?2qMoUTSzu2g|uzz5{um4d$oGIFu(jXQ? z6f`G-^KcYJ>vjX#KT&rWLe_><5sy%NNOHDWUYAGpMA^znHQi2Y!&9~R41|IIu4ftI z<&{^#cw<=()YSpovoq7R5NwdN$t0Rqh9#enm8gZb0w;aNwdD?cujmfBWc$z=SI7*6 z&6oaL1olp4{6X$Hd2v@Z(yLV~E)q)GnR(-*{_jKWH&^tB|FaeVjQ6i|P|*1QX3jhS z3FR0L8ZEt9ToWTLwr$!6@``kqJGhZiOvI~Hq7#ViW*F?Vgzfd55msk+Ei+Y{dEIM= z)#Ynx4=EIzQweuQ=UASWf?Kz(ufB3AgJd4e;sOxxC8`Bkf*!)Xzu{vJJqqW|&LaCC z2Sq&R(!xw(10amQQ|#Eq#O!bkUn(-Q&CJM{TEgemwo}ZQQjo=s@?K+N=whIi-xcn^)OCHm{&oIAvF!iOAVt(AFCGNT_DmnIG7D3LhZB=*{ju2 zqF1`Ywt9cO^{F+c@v}3@_RdJ;j=i`qDd9b8fWb{26qJ+7x=VDmh`7yZ`8J}_6;>HSOEQE*Uz3lOxYvK&SDu@$Q_o|H z(DK5T928d{%_*^qm^+`56Y+E5p+kq-Lu@HW;mfZcsMOrV!+S~ma`VW!Y}+8s6hrJ` zC<9BwFAc6W{WVng> zk6nAmSmlqP0eWHccWk!*olNrYOdubFEH9*|0XM9vvzADcJgnD3kbL;5Q_nt32^)N} z&)5$E8HrO_Nd)HP;7Ay$16W0wuOIB_F19tcK-es;00ry%yCtS$r)n>Fd8La$x}jJL z_o-xFA`}g)IYVyWU&9yVAOhp?;hUt&s2B~*csJ322e_X**__HYTKVB+ea!62tN#82 z@V)Bl#;dn-)Vz<{NHjkEco$_c<47#0J{Y{=uMljZ$=^E<4dOQE)vgq}nW3oFkFnZ; zms+rQsAUvH&t?FBStDxlHAq0FPhGmC%~Nbp8XJRx1xuKRyL*Iq5(()h^qjwN>b?k7 z95{9BTw|bP+GII~%N1pP=+7*uoy;lLYOk=nO(R-Ja|6q{@)(V^D( z7aoXt?r)opm(?a#MND~sDwggh<+w~IS-&oL#Fz~s=}kJt?O#ZzaBe1YitV!uw9yL! zx(%q*={8@#OZTU~egLJ9B35q)0E7)l)PvqGK7{|kwJN&ixADMhS@p%rZH6EpsDqQNIJ(uA zzwsf5ZDoOrm@*IZ+p5^h7eciQ1pxEJ* zkcAqNZ7j4OG(mY(whq$ooV|}TsM68S2?ySzSS;?!wK0K5EQz>KMW9d0aSO?I?F{wM zrbCQw0>PUc>zDHNX5fJld%|_|(>y|{Ro!(cmYFRm27(HIfPMi{)fciR-57B|vvhaq z^#V=TmWnvOPdUZ>NQ&*!MT&5~w5rdMT=Rzt|7#3>?5y1EL&aW*ixHG*cMhglQ9gZk z=Jv?M64Ed?7t|6|4Egl=d!-xq)Q|hPF);mL=|GTLOOi7ZElA6QhTO~%zW9rcYK%Ya zu{Z)7U@*9|JWAe@okluNe&zE709hMQ8!H}4cE3;z1oxC^=?)7Ha<o?7RwLw21xYL#)VE$NYXBC3~O&zYDB&2wYURn z_$IY&$cV;*T9dQ(jSua!(o%ebp_OkFrx~q0{$nw*T{T%mdv6TSf~o?e`Baahe3L_} z1t^zW_HxVPCLmu8_CXKGz8Yg+-A4m!!6QW$KC~?D%i(eW6fX~*+Cd-UdffvKl`b5p zw`i#3laX~K#99Gf{p?f)f;kr(N)<36Ph3t^%jhIYT|i~3oEB6UxK=%+Fn+Mn#vQY< z(FSUHxj~kb!sSe|<;SOX>`5i%8yy06DzeH)L)Jp#4D%Ge={N>fk^ohHhG;R!tI3VV zVx%IQoT!!mk|?1K(6DC0FT=WXP0W2K+=jUEJIzgW)+TWX%4JQqKW)q1Rbw z_u*B%6afv*3-hQiVNxDdevxCnSOvMB2PG-ykBl0r-17sC3uIeG%=0T7C77>L6S>PX zRZ#KB9d$F#igD3Znr7_eYvqL=a;@Sx5VHkIRCC!W(v&S;7)U|)KlYT~K`wXF6#9@1 zr4!d%l;z!q3Vz=VSURdy*U}LTn87FLHag+0?L_DJIBZ*W-Fc+<~ z=iRvlf>r@7PCj{1q6GvB7GRpgnrxw;#r0rdEg9XE!-i4`-Ppg?3^|5U98icFUCkOP zBm4$4UF^~zR44_=>&FON?l%`fiZ#OV?-!#6SQpy|WZjFNd7^$AT7T=`gEj0(UTgwM zrbLh&&c3K6n8FGkxuLPIok5y@c(Uon4y%udz#R%^kTHi<)QSE5{b)=-wsbV#;X-%AVTirM?T`*AYkp;3=AT47DJk@0(WLw}6pU_=JC*Mmlq#9Xc*1A-}>I@n|U8&9xSrJ-> zhkC9v^yL1&Flo43^l(7&Tpc^PjAkopx9+VB_sMjuf?~2U@#@%Bmag)S z^=7JQvRMgA7|BL~P%3%ko(dIOCnRh)Us`Dok#p{tDF!)>V(&)Etp zl!DmU^-NzbNcWAzGFg0+<34BZv<*H>>3JbboE)cXWOqE<;gF(b861bhNQL6g&Q3tN z$(2oy0@IPdt^=l$KwSoq0s4i7UO-8SzgBF62El@~gIZn6FUMUFiRgvP0%GTIwg2QG z+o{LFw%!Do{{xn~O}dq``n`K|d&!s)nR-=t6*p|~#S?g!eVTZ?dZld5Bl&x;#%h^& zQ~6j!5lC+8wBt}x9fc%JA*Q?Y>rS2FzN8UjbYV6%pVBmOSM!iyDvfv@C8A+CqMc5R zIjkb(ovL3-H1l6@3LBoYXp{wL@-MAXaKBCmgohkBu<0Yv<7PzV4)m6F$R{5_tNP9l zN9E12;w1CSB~A;eCj5FqhT!#@6e<67tc%~>1hVG-+=Z7c-pq2b8>Bd0+cfPK`?t4Ru@FH5v_*B z<-z?6h^L)wA%V9%%p-B_Y{}MOYuT!qERQR~Z~@kugFj*}O6uPP3AA3E<3kB2)CS5mi2#$FN_1sF<}~Zewq&qSTl|zY73`_Potp z1gPCcjbZSBwF~$PVU86jO~0+SI;7JcZl{@}9x6Q_r$}V<0$Tzim+v5s-*;HVx`N84 ztMs3582R)>LB8`)I87_0r{15rSu}AI(aBdVLceubMo{tk;3<|emf*%A{_6TJY8w#9 zK=7Q3Tj?9Q0BX+@7O4D#-1q)&1$b|44`0qxajTA9l_Wxr&A8#`iB_9N%RFjFr81si z47~X1EU(lIpg#k$3`8ST5h5pQ>ecO%JxjL9=RpB_slRtBWT>RFlfOWt(PuQQteg)z z1zU3~x6!+6%SF+l1sK%ZI|i*0;$L3oV1!MkKHEX?&BynsfvO)9x5m(r9g0yX;TLHd zD!=&}6pZrZF6LSE5upkZ;W|q^l9Hs662?e!y0X2e+ zDwj9g-J)q59flNMj;m+Q5Zg|{-svW8)kaDW?Q#aimAF`b+Ac~=@R=0p+(Fjv^#yUV zVxmICc6kSHIH#jaJe z;E>0Oz(u6!murF{i|;AD78TX~p^<7ZhQ}y#aC375d(yoY)a*zV^J6a^C*1eMzjXLn zh#!HU*`J@39vk?by9W1~4dd(=_B$89DK%6u3yK0Xb|hxe_OQFdaZtf&v#P!l!?G*1*mzOzLk}g;{+{yO8d$Oh^rPFt>C^Ta4MO`PApP@J79GSkroB5eSLlF zt31YWBAqP~q4Vk7a2q0Rj}P=my{9)hK!la;wH+}UE!)q0eLW^;F|R1#T;DO!N_J6z zm6g@)#Kgo>{*d?_)M8BmXDjl!hW9Tl4Vgh!r~TIaQ!H^z(x-!K-rwgT5ZYN7Y4^_S zqHI#$CI}7IHHx3T{uDHor`p36*nf*Ql;6bN4#!P|;XD(Xr+n&Hgu{?TiBB=tFRp0a zL;A7P>aDu!Nmr@QjLVjMI-?KIyGdR3if8QH3Ed{i&+NksjK+`33tqS{C{Q6{Cn-BO z2(zZ2!o$J1L4vq=zJu)M*Wg~5q#*MoC!)S7SMK4c)I*}rDXmw{k8Qq=rV!>ZVas81 zFQ(YhOc@%=7*;_23W~6v_l#Ah9{-q5+6f!6*$boX3HypwUD%u{hb9i2+-FgDL|2~4 z$fT``Og3E}A->%#5>?A|YY!^6oCJ43-Rs1s(Ab?Hj7z01E4$VQBlL#LvNjvCSw_+_ zq0*?k9132|A;sVY+HxPTma(_ND|SwQ46B@SdD2*|JuViP(V;Gl+Z0c2xAhZLA1yaj z0G!NR+tMtG387NU4m{`MHoQQE`JE-i;>f#)IzQRUA5s^rz5TNX5h{XduIY<);}iBA zZyizpws{YOJ<6297>sgFsNp(#|AFQz>wWKMGPlKda)ny8Hc+49dCVh96f?2g-mYMN z+88Et3p6i_{-(OHtQz^5Em!$zOV(VBJerPz2IEOKOoJUYY5Y!`HzrOOQv?$d_%cUu z0rsJpk|=$hMqf*X)lq89-iPkKPVB>0?pCb5ebPDJmQHs5k?%EPJfpkuBceG}Ok5o0 z_R;c$M(d+ai#{{PMM``!v>%&8Ty;UWGY5Wlx_hP5+DsYEw~h;fo*}dZi??&&1L8Zj zHhnJ7CDR*cN7rTzntia?Uz|RX4%zITwlUfV{l=p?u6XskvORUDf4V{>L>C5}O}{f{5vZwx|ky{Hg9J5 z#~}PM2)~WO{Q($%?3I7CSKjA*O#uH#02=y#0sa`Re>7UZ`v@sukC)5e7iur$Lz@+T N+VS)9&n|!S{{W9B!tek9 literal 16779 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 diff --git a/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-zoom-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-zoom-1-chromium---theme-classic-dark-linux.png index 2dd341e0614125fff38e5244b22a6c38c941f5cd..19bb0df0662a59eab0b2427e6f5367514ff2bede 100644 GIT binary patch literal 11600 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 literal 12447 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 diff --git a/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-zoom-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/dropdown/dropdown.e2e.ts-snapshots/dropdown-zoom-1-chromium---theme-classic-light-linux.png index a6bb495fe71cc07ae570ba493efa058b469cae8b..5008c5713e068ccfd2a887ed5353aec282668142 100644 GIT binary patch literal 11026 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 literal 11895 zcmeHNcT`i^x({L-3$|-P1sp|jlqL)!AVkM;7*vYFh>9dQ2pMY73?+m%!ziK@2?ElB ziU>%T5=sg-ij*KNl#oypB|w1m$~!0Ax7J(hty%ZJ`{w?2T`Onple5qF?JxW5znxeI zJL`?>cCUj#ARBFd{QeRIvMLG!QQft6HSpwi)fsbOP(fX?{ti;wx%V>!vJYbO{b{F= zteFvXNVZ4z(gMZICgarhw*G57zR7!%;JfOzkva6{w(F;kTj(YnJ{-OF$Pu;uxu2fg zJN)F8lZwin8x{MGtZUhSWZl|(N7ruf8{Bf()}{V=$D&kqYxlQajv0q^Ov|W&d~*uA z6V-{z;gN-baE7Bg=99I>nG z+3&c9#qs!!d~~QFix$d|r{9*xqeo+P*7$q_@`04Cjoums@9TY3*c@Txl7MmDfv=t- zS!+>>(cHxs8%cHZ0^ zyCk3GEKVIQJ!frgjlDVXkLf%7q5_v_|r5+W3&xcD`LE5=G7F_ zOhQ}FO{Lnmz=r)YQ{O*8@il^{+MKVa)CdHxMG{a%$eEv0D3DU8BZI-+0vjyyy1cSf zl&P&(QX;0kPeTY~Vl>~|cF=wNvJLjmgPl4yR&shU3-{T0F@3#3EA7tu#T?GS!6k8m zD^}YlVQ+d)*qkxCx!;9}ArrpIA&rj5MRe@0Nixz;~Y9V*iPC?N!DIN@QcxIoy6OHF!v#to64rj>PBCm%vXD#91v1DFNZ^hkH&P-XRf9rd)!Vf!Hf*kPuDcl3xk*EyAU!W_}wE2DYba;Ui zR@*=@q#v1KmCF_>c1CLZzYXlS!4e|me5^JntM;cCk;38g1Y{+@Ng&FKX-LpQ2YF&A zO$>hUQZl<#vIseen&YOM3B|?oX=jga&uxoBYb}>?ev)lGdSbP~JKEgD*MLDh9m~7Z zPu!e1jA@@G3UE+XF#7KPfWdu1HWI(%<3&-Hc6&Rk=V?Ww}c;tw}-9;s->8KnEKT^`Rl{4&_9N&sLb-{TBVHboj)4I}GqB0^<|+e;Jn zFVJ)X;nrJzC9@?d9nhrp1v3M#OX>!E^6|`v$&AQTxU9acTsl8NyETt2cg5bE<{&8_ zIYXA)Of}Pbtaw^=!jH|1ud{>On{ufguMt@(I-VW7 znQ$E&93}!r5A6O%{AMz|vMm+)0f(d?+H_KUQ_YgwP&b7Xsx?tpfWNfBE2SbPqRL&I zwy_kIDEpC4oP8Iz@T$;EcsDa9)a>X~ESI7=eGq&VQsxkCq^b- zeKh6Vk(6^U`@DgV^M)P2gKXSHMO8I5LBQp?F#g`l$HyLHEp;f1J$<>v$e535hox^_?=lZh)t(TE8PmckdsrFE?zmjgR;GW%F-JiB|TVeXwIAe|N#x4|Y^P zClbSB>l!sQG)&Cel(Jo^@pfrQ+C+F>LOkH-=STbjzD4=`Zrb#s!C1gwvFkOz%` zP!PkgpE`o`8qVc)BV@DME5HEIIPbQ`@cidbpFU-%(&%)Y0M_)!J>|;|(v@zh-7dUY zJ<ohGAMkp|BG5pUXgDASj4 z-Ve!I*~G@`V!j$2Yk0vySuBkp+Dm7^;C#w*u1fYXMA z-d`beRoC3zk6($D!{C^ih33j9c^(g)ok*l{B&%YdGDTJ+udE#1*bj$lS&Wy%;1)g~ z#OQ#bs?)HGgO_ivTnTb=Xn=i$t}ykvjG~{o6(i%Zs6pA%_kpI9W7eALSiX#pjHJM% zT3H?VaP~tQIUl!xFWaTN71YcrztFR5M(JU4o-wy2H*u3BoQ$F05sMHB6t-!m;V0o- zVQ#K_`U0MNWi#l@QA3v<5A2idX3dXQd5I?xP;$Ev7W~%syv&XEVxn1ScKn$sU>}2X zehr?l-`p{iIOeqVyZGbQQ!I@u5tLR_a^U5N;9-q)@pV+c3#ZzQr@98Q6fU^1_@;EE zb!lNNi(BG|np*{J-)3)>(&r4fgi9B{63b_UnUX!o&K^o+mB7 ztV?l4`qI;-62^LN5ksa=RlMSqV_JatTyQb>@&f+)G2-lGb;C|@^}C4~Ln<_{#F3y@ z&4yXoD>`Omqp3l~wh)gCIST<1kE!zz=ahVttKowaI4b(%W5RPL8&^W#~xU@GoyKWD4e^ihX`!`z;%Rp{(~Nq;z}F z3-V^)O(!Sk^I(~V5fcY-iJC-z>Mi$)d&QN4YlWBLLvEJODvqt+SzY`rMa|NEKPc%F z!P>^Qu3pib1p1!RI-@5*WrR_@WZQj zNfY+~IcSnDorCX(Ko=$*uLfsV_jGj`J`wJ*d*=pnF9-+x0AWSVTB8|S0H-EsLH+YM z)ZX65+Udu`f2g6!Y_CQVE6~mQ7E?Uq{K>#Q{ts<+;wU+aMSPg7r+Mnr0V}NPAx=ZL z@B&sK5XiWn5m;>$v(pxPQrrto);<7OiBIvuv`QVN?FLI(X>Ndurm+#1J`*mj(yjs+RTIoKI!wUiirh$V7QR4>Pr+*8OlXPsE~ z*dn7Mv|#ZlW1rdIoi(o$X&w<~74+_gsz5V!R$Pbb?(Kafkw|*``tnLk_4~X{fKSS~ zyrUuke}JnDH@kM5RI7%_`LKp}+;oa%8Y?5S(rxVble{h-i~-(h8_aBlVM?kcGF@<& zqntB9bL$B-rDd`GYYXAjxr$-^L3ez%^TK_Y`i!z}jxy@)RU5_i!+e~MYd}eiQG5`mvwC$KD)& zj%N+HCwwTuk0gCI)@&u9x!l-94P15qbz_EHaTYyYm~ZUaUN3HPwrjt;$G^NcoYj$; zR^5Ni*jfu6a>&2>EOt`9#;$X_vqBrsK&LHhd4q+?u@%o6xcOlg6F_yhNi*z}B4oI% zdtl%(io6tkJ*3q`JRRE%WM4)WCmVguzkbTpjGM)+r&GHea?b0Mjo>m`MV(-}t&&0K zwA#R>o~7gk=JhazS>0Gh;pbnFlt*0sX+G(Ibwax-SpXgMWa~9_R##QsWENi?EJ$-x zx{(9hTOT51j<@AAA4V%IUHt0K0<{l}JorbL=!{m&l(QlvmK`*VZjMtoHn({tuh~{v zo_BB!37OMNrRG0<`n3zP`mAQgv0S*&*T<*rE4akFskp&Tz(AC#EZKp34=K9V5g+x* zt23((Ef`EUo3&s~R&lZ_d)bwqCWsCb>w`7`g+EoiB|hE;`!Ux#INQf}S5oSo^=TLi zlgSK|)EZ2R#atA9ka2F}K@M0pKn$~b!yx{?dy~##lkH?-f^ZHd744UI>FQ_c2!g*MIEhzKEt{U%%mEXI&yZ7&r4$-8E(zFvxG*qQg@Elh)v<$;(fX0OL zCd6H9)IKbQErk4?sNdTNQbv+^qj?KDMu<)tPz5s2Xq`Ch>>6(CPnyDCC4}7444+xp zi*84t#%cBX5e&kBnT>*h08Q?6DncNXOYV=%QK{0nVhrA12#dS~iCTdG=rPaRL*TnAe=Rw;V&qFrbU0XL`U3=vQ;} z7KTz?2;ZbFjS^IrGhw4!LAy6@6Cp9Ob!FCxL8JFPj93U}+0q|PMi)$r89an*l z_59x8$QiU!{Tt#l_Npj_YW%S6p9KN_@}Tg4h9UlK61>!!UiE7RkT5&R^H^F?v)1Aa zs&esVQW2u^t8I%MDJMI4j>L`{VWlH*9eQMWI33S{sS46Tn}k#s914Okf}~on7{6(? zFWF|M8tjeqjkx`O6F0lZu5}N++$+IS@xW}>1+i&>=r8WzfQnQbU?~;Q`|@j`knZlr zPLKjF)eQa2&4Nz36c!bo$NHZ1&-JyqRpeXWDx%$Dja;n_xB)14u_@MK@=-GBA(1Zc zETs&DQ{#!4G71+u+aR5&bvSzlYXI8lXfLK&WC(F;Mbq+EtpsXy+jiKS8 zR~>2=Q^h^@t!l|N6g_gC3Gn>%3rffdFlZciL8dQBdYg?ydG$8f*kn4+J<;q4$Psu$ zo6GE==vW1X^j|}DgbAfPrwa3NosW;PnS0=7$M*QwzJ4gvQ2wsa-HRHHk+tkZv?LvI zo0p{Z`967M7B9q!CC+vi9336WR-CxX7dMA^>f(>@85CDM{W0j%Bn*9(xUUS^krbnq z+A1ZQW+D{^;t4g5z`|{c8_F>qSy8e_VEA#JDlg1O15o_S;?- zwymsvCp6f%lqgx8!3#0ByQ!pfuv*!f6KUsP>*;MiG;BOYc(9s>R6;1_Mt4s_C?TRG z?N+ww$jwt$$j%uvue~21n^+SM0cB!K(6C*5iK%?Q#jL0XRz?zczalaAKJgE zChSiR2Ku+xvx77efAPJ5jnlNOXJ2=Jd#_6O`icL^Srh7?tKF)_5uk^FaV6;NBe9S%}C=zeAjPLX;q&lujU)b#!#tV4JqYdwHS1Y1hA2br?YI zD%s*JGgQyeP==q5e@bqGD4>)y9y1sa%|}hymwo0d_9PA;-gHvbwUwo~wWMl564a+C zB9x1r@cLCZ)rY@bNLn z62gTY^_V)2% zJCyylyBjbh@9HB;6zP=8OTQI{BURNkFMt{!sP5rkUpc(oME~SU2)PItc}%EAZxqne z=)wqx`=-w)pFWauzeNdoymhJuh$xioZMpkkgF6ghk65fu8&}utY-MNba8Ckc&ni3~ zLFb}+`ukG>CZ){)T5(Wu@alBZP@lS212kyKx#V)g??_iyR}cqscBZnW9jlZQjOCMn zvi~9i9`QH3?(M%P({B^ph&l|AaZt-Kn=G6^rMsI!=4I9s|Bb_Nj{4uMiICOPCBzW~0t~p2sT4Uq9 zGb3F46d(%#jBSOkb1rm(^{b64NS*gxlEj4Y_}_kfYv*p%vN{=bPZa~CRrzvtS$(5WqjBVInV9_6K9UI$3d+hh6N)J? zIvQl>_Di6A?RCW3IV-_aY2s^swbWTwVj12sGi$Z(8D{gGo=hK^rtCBwq^Y7UwZQHJ zl}zBQV%BO!;~Zlw7upb&eDF*FOUp6&)E(lW~i+OzOZq;MaN8^Z{lQ@Fy`{_Wlx zSmZeS{@jYWuZ-LN;-Qg?=CKBY}_KRMHYHit;%{EI+xlt`_F63^?;8eqYcO7sx>S=YmM&r?K z;qM!t;)}%u1D(~b86?|Q5nN{J_oD^=P{ zvI>R-L#f;_3U!y}MKE@~G;KvHN7__K85BIyETSt5QKYadNll|VS^GA)mqbWC9HGGuSkur%mk1tCM(@QIsb)&wLcG!%GmdhPv*Wb`13P^fBJay z%O-x=#DC?SJS+VT2Le$$2>ut~uRnDEVwGR4@?WvaFP8Z4_zTPzZ~Wqo|4H6BzcgH- zst#7QrxpD|(YgZ=w{yzQ8*<^RXl-9)>|4Z*2sKArQwE z$`iLQ#E_^j8wUAeBwri@fJDATk}tsk@}Ct9wj0tyuU~!o6&Fm3HfQa=Fa6H#_x}PZ CVvhj; diff --git a/packages/core/src/tests/input/input.e2e.ts b/packages/core/src/tests/input/input.e2e.ts index f65175823d5..565b56f4fe3 100644 --- a/packages/core/src/tests/input/input.e2e.ts +++ b/packages/core/src/tests/input/input.e2e.ts @@ -13,7 +13,7 @@ import { regressionTest } from '@utils/test'; regressionTest.describe('input', () => { regressionTest('basic', async ({ page }) => { await page.goto('input/basic'); - expect(await page.screenshot()).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); regressionTest('hover', async ({ page }) => { @@ -22,7 +22,7 @@ regressionTest.describe('input', () => { await input.hover(); await page.waitForTimeout(1000); - expect(await page.screenshot()).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); regressionTest('focus', async ({ page }) => { @@ -31,7 +31,7 @@ regressionTest.describe('input', () => { await input.focus(); await page.waitForTimeout(1000); - expect(await page.screenshot()).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); regressionTest('with value', async ({ page }) => { @@ -40,16 +40,16 @@ regressionTest.describe('input', () => { await input.fill('Example content'); await page.waitForTimeout(1000); - expect(await page.screenshot()).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); regressionTest('readonly', async ({ page }) => { await page.goto('input/readonly'); - expect(await page.screenshot()).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); regressionTest('disabled', async ({ page }) => { await page.goto('input/disabled'); - expect(await page.screenshot()).toMatchSnapshot(); + await expect(page).toHaveScreenshot(); }); }); diff --git a/packages/core/src/tests/input/input.e2e.ts-snapshots/input-disabled-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/input/input.e2e.ts-snapshots/input-disabled-1-chromium---theme-classic-dark-linux.png index 848257ad955a8baf5d5e04c1212b810c0c1709b0..8d2530bd2a29dccc280ae0b8a0cc8f08a4a3f67a 100644 GIT binary patch delta 1587 zcmW-he^AnQ7{@J^-feAex0Z93bd!^71~pL`zjBvbj7;0DZKh1w7Q!4dO*9J8Z$GYF zx$4BB=TJOj)7z$KlA1pPTTPEp$W)93p#wou0sSJN{2J`@&-1zaeD1mD^*rzQ!_VMn z^z3^TFbq6dkft0A`eLliPLGthEg~Y~LJ2HldnkVV-S&N<5V1?`0?yPU+zXABc74N5 zrSf?8ag(DBf^jXj!ANv^PCRF2&DoX5A2ff1%zyVW-0Lpn{P+P|Je-7sRvoB`<_fdO zwyYdBJ9`g~2hvrvd1cL0ovvQd2q4Xu*$c;5KOsqFZnamkDD*y^)$!NvtZ}!d0y|r9 z-o7T6&s0(t&}z7AR=edE!Sm!{u1=O%;xo_XP7NgE*o20$>$qfGC4wFm10)B_qPR7fHDin;5^jVjFR_c2l{&S zWH~@puS-1KOOx^wxp`v3>GW-i5)z7viby#*Y#ufAB$3SVU@UaMK06!8nrux+ zqXla9@|~WJ4!ECToA5{5?iF4AQ!ekGOg&S9&p}cihgmSlk_hGBR-I#E%&|jcrML_jdbBkSW(4klAvyYwKOKE zibFG%YUVsR2K+7C8e4AA{>+&qALJ+)G&&vhM!Of6ZrEQ7U_u?XKnz2#$653#E2~V? zHM&qigpRacG!pA!xcKua`S}E3Y6t*X6BNhtHA`*!WNPwIM1lErxuvn~EDA^NNc3LDV>bz%cKi!hA zBV{TOs&qnWa+3G!!hau2ooVl3Sf{=A>r(0Q6DKCeWw6{$cz;l-EC7=3^z~H)PUW!O zKD|*Svie0$4He~7IkY)CJgnNnDTtvR!L|&>0A+q$6#`*hUCkoWiNM(SQ54r&cJyku z=|N4rlBZUem!CCXT*Z}{XGVSf`YRt*n-s;*?(S!(#hIbA^|jk_Mdlyw%+mo15H2p5 z6CLH zW;P-wAI)CdgDF2mKM|csI(*K{)@&|CgVVq{%p9$Iam8Tey5vOt%L0qCSx#@|Hs_~v z@d_-KRlz;bT75S?rbZc*Ga{q1&20cNULj@ch3RM4{`veS6vML=aQ90j5)5bQTbC?Y zAk=_Igy(4N!(4ldK<%OGqcqaxI&GC*{mYGNzNqF68c1*_4hH-W*m`aP?ks`l9k5S0 zXTHpC!3#550ausstuV#z+kZ^STx#e{cmqTP^yJVA2;U&1Zesn5H*u0L-ZVwO(sy=F eBf;(?ZrfFQf$|~hWQ8F7hxBRoC*mXDUiuHR=V8?V delta 1594 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 diff --git a/packages/core/src/tests/input/input.e2e.ts-snapshots/input-readonly-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/input/input.e2e.ts-snapshots/input-readonly-1-chromium---theme-classic-dark-linux.png index 3549697236bd56bd6083731f4e86ec4d7f8023e4..cea9ce8cfea3b3e4966f9de5c5c20b23d474f156 100644 GIT binary patch delta 3204 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 delta 3213 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 ahrh0Ba-L#mFYdOMz`suT7xSyL|M?%~ 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 s?f(}S1pDs2f4uj!?@pWFmstn@{nilCMeZ @@ -27,36 +11,21 @@ import SourceVueAvatarInitials from './../auto-generated/previews/vue/avatar-ini +examplesByName> ## Initials +examplesByName> ## Image +examplesByName> ## Header diff --git a/packages/documentation/docs/controls/_avatar_styleguide.md b/packages/documentation/docs/controls/_avatar_styleguide.md index bd4acf99d33..b53e25f0e62 100644 --- a/packages/documentation/docs/controls/_avatar_styleguide.md +++ b/packages/documentation/docs/controls/_avatar_styleguide.md @@ -1,24 +1,3 @@ -import Playground from '@site/src/components/Playground'; -import Props from './../auto-generated/ix-avatar/props.md'; -import Events from './../auto-generated/ix-avatar/events.md'; -import Tags from './../auto-generated/ix-avatar/tags.md'; - -import SourceAvatar from './../auto-generated/previews/web-component/avatar.md' -import SourceAvatarImage from './../auto-generated/previews/web-component/avatar-image.md' -import SourceAvatarInitials from './../auto-generated/previews/web-component/avatar-initials.md' - -import SourceReactAvatar from './../auto-generated/previews/react/avatar.md' -import SourceReactAvatarImage from './../auto-generated/previews/react/avatar-image.md' -import SourceReactAvatarInitials from './../auto-generated/previews/react/avatar-initials.md' - -import SourceAngularAvatar from './../auto-generated/previews/angular/avatar.ts.md' -import SourceAngularAvatarImage from './../auto-generated/previews/angular/avatar-image.ts.md' -import SourceAngularAvatarInitials from './../auto-generated/previews/angular/avatar-initials.ts.md' - -import SourceVueAvatar from './../auto-generated/previews/vue/avatar.md' -import SourceVueAvatarImage from './../auto-generated/previews/vue/avatar-image.md' -import SourceVueAvatarInitials from './../auto-generated/previews/vue/avatar-initials.md' - Avatars are visual or textual representations of individual identities and they are most often used to represent users logged into a system. Identity providers or user management systems usually provide identity information, and the amount of information provided varies from system to system. The iX avatar component offers different options to handle this. ## Options diff --git a/packages/documentation/docs/controls/_blind_code.md b/packages/documentation/docs/controls/_blind_code.md index d45b21e8a72..65b6b2d9cd1 100644 --- a/packages/documentation/docs/controls/_blind_code.md +++ b/packages/documentation/docs/controls/_blind_code.md @@ -5,37 +5,12 @@ import Preview from '@site/src/components/Preview'; import Props from './../auto-generated/ix-blind/props.md'; import Events from './../auto-generated/ix-blind/events.md'; -import WebComponent from './../auto-generated/previews/web-component/blind.md' -import SourceReact from './../auto-generated/previews/react/blind.md' -import SourceVue from './../auto-generated/previews/vue/blind.md' -import SourceAngularTs from './../auto-generated/previews/angular/blind.ts.md' -import SourceAngularHtml from './../auto-generated/previews/angular/blind.html.md' - -import WebComponentHeaderActions from './../auto-generated/previews/web-component/blind-header-actions.md' -import SourceReactHeaderActions from './../auto-generated/previews/react/blind-header-actions.md' -import SourceVueHeaderActions from './../auto-generated/previews/vue/blind-header-actions.md' -import SourceAngularHeaderActions from './../auto-generated/previews/angular/blind-header-actions.ts.md' - -import WebComponentVariants from './../auto-generated/previews/web-component/blind-variants.md' -import SourceReactVariants from './../auto-generated/previews/react/blind-variants.md' -import SourceVueVariants from './../auto-generated/previews/vue/blind-variants.md' -import SourceAngularVariants from './../auto-generated/previews/angular/blind-variants.ts.md' - - -import Playground from '@site/src/components/Playground' +import Playground from '@site/src/components/PlaygroundV2' +examplesByName> ### Header actions @@ -45,12 +20,7 @@ frameworks={{ +examplesByName> @@ -58,15 +28,9 @@ frameworks={{ +examplesByName> - ### Properties #### Props diff --git a/packages/documentation/docs/controls/_blind_styleguide.md b/packages/documentation/docs/controls/_blind_styleguide.md index e248abe6127..79e6178c3ee 100644 --- a/packages/documentation/docs/controls/_blind_styleguide.md +++ b/packages/documentation/docs/controls/_blind_styleguide.md @@ -8,8 +8,6 @@ import SourceReact from './../auto-generated/previews/react/blind.md' import SourceAngularTs from './../auto-generated/previews/angular/blind.ts.md' import SourceAngularHtml from './../auto-generated/previews/angular/blind.html.md' -import Playground from '@site/src/components/Playground' - Blinds are UI controls that allow the users to hide or reveal content by clicking on a control element. Blinds can display a large amount of content in a compact space or present information in an organized and hierarchical way. Blinds reduce the user's cognitive load by removing clutter and less important information from an interface. We typically don't use blinds if the content is central to the user's task due to its reduced visibility and accessibility. Blinds consist of a header section on the top and a content section below. The header section contains a chevron on the left followed by the blind's label. Within the content section, content can be placed freely. diff --git a/packages/documentation/docs/controls/_breadcrumb_code.md b/packages/documentation/docs/controls/_breadcrumb_code.md index 8c63bfb2f10..3ba177bc345 100644 --- a/packages/documentation/docs/controls/_breadcrumb_code.md +++ b/packages/documentation/docs/controls/_breadcrumb_code.md @@ -3,33 +3,12 @@ import Events from './../auto-generated/ix-breadcrumb/events.md'; import ItemProps from './../auto-generated/ix-breadcrumb-item/props.md'; -import SourceBreadcrumb from './../auto-generated/previews/web-component/breadcrumb.md' -import SourceBreadcrumbTruncate from './../auto-generated/previews/web-component/breadcrumb-truncate.md' -import SourceBreadcrumbNextItems from './../auto-generated/previews/web-component/breadcrumb-next-items.md' - -import SourceReactBreadcrumb from './../auto-generated/previews/react/breadcrumb.md' -import SourceReactBreadcrumbTruncate from './../auto-generated/previews/react/breadcrumb-truncate.md' -import SourceReactBreadcrumbNextItems from './../auto-generated/previews/react/breadcrumb-next-items.md' - -import SourceAngularBreadcrumb from './../auto-generated/previews/angular/breadcrumb.ts.md' -import SourceAngularBreadcrumbTruncate from './../auto-generated/previews/angular/breadcrumb-truncate.ts.md' -import SourceAngularBreadcrumbNextItems from './../auto-generated/previews/angular/breadcrumb-next-items.ts.md' - -import SourceVueBreadcrumb from './../auto-generated/previews/vue/breadcrumb.md' -import SourceVueBreadcrumbTruncate from './../auto-generated/previews/vue/breadcrumb-truncate.md' -import SourceVueBreadcrumbNextItems from './../auto-generated/previews/vue/breadcrumb-next-items.md' - -import Playground from '@site/src/components/Playground' +import Playground from '@site/src/components/PlaygroundV2' +examplesByName> ### Truncate @@ -38,12 +17,7 @@ frameworks={{ name="breadcrumb-truncate" height="10rem" hideInitalCodePreview -frameworks={{ - react: SourceReactBreadcrumbTruncate, - angular: SourceAngularBreadcrumbTruncate, - javascript: SourceBreadcrumbTruncate, - vue: SourceVueBreadcrumbTruncate -}}> +examplesByName> ### Lazy loaded next items @@ -52,12 +26,7 @@ frameworks={{ name="breadcrumb-next-items" height="8rem" hideInitalCodePreview -frameworks={{ - react: SourceReactBreadcrumbNextItems, - angular: SourceAngularBreadcrumbNextItems, - javascript: SourceBreadcrumbNextItems, - vue: SourceVueBreadcrumbNextItems -}}> +examplesByName> ## Properties (ix-breadcrumb) diff --git a/packages/documentation/docs/controls/_card-list_code.md b/packages/documentation/docs/controls/_card-list_code.md index 0f241f91ec2..853b56f16eb 100644 --- a/packages/documentation/docs/controls/_card-list_code.md +++ b/packages/documentation/docs/controls/_card-list_code.md @@ -1,15 +1,9 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import CardListTags from './../auto-generated/ix-card-list/tags.md'; import CardListProps from './../auto-generated/ix-card-list/props.md'; import CardListEvents from './../auto-generated/ix-card-list/events.md'; -import WebComponentCardList from './../auto-generated/previews/web-component/card-list.md' -import ReactCardList from './../auto-generated/previews/react/card-list.md' -import VueCardList from './../auto-generated/previews/vue/card-list.md' -import AngularTsCardList from './../auto-generated/previews/angular/card-list.ts.md' -import AngularHtmlCardList from './../auto-generated/previews/angular/card-list.html.md' - ## Card List (ix-card-list) @@ -17,15 +11,7 @@ import AngularHtmlCardList from './../auto-generated/previews/angular/card-list. +examplesByName> ### Properties diff --git a/packages/documentation/docs/controls/_card_code.md b/packages/documentation/docs/controls/_card_code.md index 445a0eba014..58171e25d19 100644 --- a/packages/documentation/docs/controls/_card_code.md +++ b/packages/documentation/docs/controls/_card_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import ActionCardTags from './../auto-generated/ix-action-card/tags.md'; import ActionCardProps from './../auto-generated/ix-action-card/props.md'; @@ -12,23 +12,7 @@ import CardTags from './../auto-generated/ix-card/tags.md'; import CardProps from './../auto-generated/ix-card/props.md'; import CardEvents from './../auto-generated/ix-card/events.md'; -import WebComponentCard from './../auto-generated/previews/web-component/card.md' -import ReactCard from './../auto-generated/previews/react/card.md' -import VueCard from './../auto-generated/previews/vue/card.md' -import AngularTsCard from './../auto-generated/previews/angular/card.ts.md' -import AngularHtmlCard from './../auto-generated/previews/angular/card.html.md' -import WebComponentPushCard from './../auto-generated/previews/web-component/push-card.md' -import ReactPushCard from './../auto-generated/previews/react/push-card.md' -import VuePushCard from './../auto-generated/previews/vue/push-card.md' -import AngularTsPushCard from './../auto-generated/previews/angular/push-card.ts.md' -import AngularHtmlPushCard from './../auto-generated/previews/angular/push-card.html.md' - -import WebComponentActionCard from './../auto-generated/previews/web-component/action-card.md' -import ReactActionCard from './../auto-generated/previews/react/action-card.md' -import VueActionCard from './../auto-generated/previews/vue/action-card.md' -import AngularTsActionCard from './../auto-generated/previews/angular/action-card.ts.md' -import AngularHtmlActionCard from './../auto-generated/previews/angular/action-card.html.md' ## Action Card (ix-action-card) @@ -37,15 +21,7 @@ import AngularHtmlActionCard from './../auto-generated/previews/angular/action-c +examplesByName> ### Properties @@ -63,15 +39,7 @@ frameworks={{ +examplesByName> ### Properties @@ -89,15 +57,7 @@ frameworks={{ +examplesByName> ### Properties diff --git a/packages/documentation/docs/controls/_chip_code.md b/packages/documentation/docs/controls/_chip_code.md index bc08ebfffe6..c579e83144c 100644 --- a/packages/documentation/docs/controls/_chip_code.md +++ b/packages/documentation/docs/controls/_chip_code.md @@ -1,21 +1,12 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-chip/props.md'; import Events from './../auto-generated/ix-chip/events.md'; -import SourceChip from './../auto-generated/previews/web-component/chip.md' -import SourceReactChip from './../auto-generated/previews/react/chip.md' -import SourceAngularChip from './../auto-generated/previews/angular/chip.ts.md' -import SourceVueChip from './../auto-generated/previews/vue/chip.md' - +## Usage +examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/_divider.md b/packages/documentation/docs/controls/_divider.md index 5761fbec371..fecf5905420 100644 --- a/packages/documentation/docs/controls/_divider.md +++ b/packages/documentation/docs/controls/_divider.md @@ -1,15 +1,9 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-divider/props.md'; import Events from './../auto-generated/ix-divider/events.md'; import Tags from './../auto-generated/ix-divider/tags.md'; -import SourceDivider from './../auto-generated/previews/web-component/divider.md' - -import SourceReactDivider from './../auto-generated/previews/react/divider.md' - -import SourceAngularDivider from './../auto-generated/previews/angular/divider.ts.md' - # Divider @@ -18,8 +12,4 @@ import SourceAngularDivider from './../auto-generated/previews/angular/divider.t +examplesByName> diff --git a/packages/documentation/docs/controls/_layout-grid_code.md b/packages/documentation/docs/controls/_layout-grid_code.md index d6b9948bd99..bbe59d7f817 100644 --- a/packages/documentation/docs/controls/_layout-grid_code.md +++ b/packages/documentation/docs/controls/_layout-grid_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-layout-grid/props.md'; import Events from './../auto-generated/ix-layout-grid/events.md'; diff --git a/packages/documentation/docs/controls/_modal/angular/modal-config.md b/packages/documentation/docs/controls/_modal/angular/modal-config.md index 154b813cabf..acd0a8d23aa 100644 --- a/packages/documentation/docs/controls/_modal/angular/modal-config.md +++ b/packages/documentation/docs/controls/_modal/angular/modal-config.md @@ -11,7 +11,7 @@ | data |

Data passed to the modal template
| `data` | `TData` | `undefined` | | headerTitle |
Header title
| `header-title` | `string` | `undefined` | | icon |
Optional icon displayed next to the title
| `icon` | `string` | `undefined` | -| iconColor |
Color of the header {@see ix-icon}
| `icon-color` | `"color-alarm" ๏ฝœ "color-info" ๏ฝœ "color-std-text" ๏ฝœ "color-success" ๏ฝœ "color-warning"` | `'color-std-text'` | +| iconColor |
Color of the header
| `icon-color` | `"color-alarm" ๏ฝœ "color-info" ๏ฝœ "color-std-text" ๏ฝœ "color-success" ๏ฝœ "color-warning"` | `'color-std-text'` | | keyboard |
ESC close modal dialog
| `keyboard` | `boolean` | `true` | | modalDialogClass |
Modal dialog class
| `modal-dialog-class` | `string` | `undefined` | | scrollable |
Modal scollable
| `scrollable` | `boolean` | `true` | diff --git a/packages/documentation/docs/controls/_modal/react/modal-config.md b/packages/documentation/docs/controls/_modal/react/modal-config.md index 63731963491..a3f75a1c991 100644 --- a/packages/documentation/docs/controls/_modal/react/modal-config.md +++ b/packages/documentation/docs/controls/_modal/react/modal-config.md @@ -10,7 +10,7 @@ | content |
Content of modal
| `content` | `React.ReactNode` | `undefined` | | headerTitle |
Header title
| `header-title` | `string` | `undefined` | | icon |
Optional icon displayed next to the title
| `icon` | `string` | `undefined` | -| iconColor |
Color of the header {@see ix-icon}
| `icon-color` | `"color-alarm" ๏ฝœ "color-info" ๏ฝœ "color-std-text" ๏ฝœ "color-success" ๏ฝœ "color-warning"` | `'color-std-text'` | +| iconColor |
Color of the header
| `icon-color` | `"color-alarm" ๏ฝœ "color-info" ๏ฝœ "color-std-text" ๏ฝœ "color-success" ๏ฝœ "color-warning"` | `'color-std-text'` | | keyboard |
ESC close modal dialog
| `keyboard` | `boolean` | `true` | | modalDialogClass |
Modal dialog class
| `modal-dialog-class` | `string` | `undefined` | | scrollable |
Modal scollable
| `scrollable` | `boolean` | `true` | diff --git a/packages/documentation/docs/controls/_panes_code.md b/packages/documentation/docs/controls/_panes_code.md index 24410fa8528..1645f516bd9 100644 --- a/packages/documentation/docs/controls/_panes_code.md +++ b/packages/documentation/docs/controls/_panes_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import PaneProps from './../auto-generated/ix-pane/props.md'; import PaneEvents from './../auto-generated/ix-pane/events.md'; @@ -20,36 +20,16 @@ import SourceVuePaneLayout from './../auto-generated/previews/vue/pane-layout.md ## Pane - - +examplesByName> ## Pane Layout - - +examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/_pill_code.md b/packages/documentation/docs/controls/_pill_code.md index 345cc2c4111..3b8eba46c2b 100644 --- a/packages/documentation/docs/controls/_pill_code.md +++ b/packages/documentation/docs/controls/_pill_code.md @@ -1,37 +1,15 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-pill/props.md'; import Events from './../auto-generated/ix-pill/events.md'; -import SourcePill from './../auto-generated/previews/web-component/pill.md'; -import SourceReactPill from './../auto-generated/previews/react/pill.md'; -import SourceAngularPill from './../auto-generated/previews/angular/pill.ts.md'; -import SourceVuePill from './../auto-generated/previews/vue/pill.md'; - -import SourcePillVariants from './../auto-generated/previews/web-component/pill-variants.md'; -import SourceAngularPillVariants from './../auto-generated/previews/angular/pill-variants.ts.md'; -import SourceReactPillVariants from './../auto-generated/previews/react/pill-variants.md'; -import SourceVuePillVariants from './../auto-generated/previews/vue/pill-variants.md'; - +name="pill" height="24rem" examplesByName> ## Variants +name="pill-variants" height="24rem" examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/application-frame/_about-and-legal_code.md b/packages/documentation/docs/controls/application-frame/_about-and-legal_code.md index cc153f6f68d..ad29314d7b3 100644 --- a/packages/documentation/docs/controls/application-frame/_about-and-legal_code.md +++ b/packages/documentation/docs/controls/application-frame/_about-and-legal_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-menu-about/props.md'; import Events from './../../auto-generated/ix-menu-about/events.md'; diff --git a/packages/documentation/docs/controls/application-frame/_application-header_code.md b/packages/documentation/docs/controls/application-frame/_application-header_code.md index a4bbb3a8bfb..8a7836d28a4 100644 --- a/packages/documentation/docs/controls/application-frame/_application-header_code.md +++ b/packages/documentation/docs/controls/application-frame/_application-header_code.md @@ -1,6 +1,6 @@ import Slots from './../../auto-generated/ix-application-header/slots.md'; import Props from './../../auto-generated/ix-application-header/props.md'; -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; The application-header can host custom content which will be displayed on the far right side of the header. diff --git a/packages/documentation/docs/controls/application-frame/_application-header_styleguide.md b/packages/documentation/docs/controls/application-frame/_application-header_styleguide.md index 640fcbf0b4e..f7aeb4ce7e4 100644 --- a/packages/documentation/docs/controls/application-frame/_application-header_styleguide.md +++ b/packages/documentation/docs/controls/application-frame/_application-header_styleguide.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; ![Application header with different options](https://www.figma.com/file/wEptRgAezDU1z80Cn3eZ0o/iX-Pattern-Illustrations?type=design&node-id=1634-56424&mode=design&t=4XzscFw57dE7McUX-11) diff --git a/packages/documentation/docs/controls/application-frame/_application-menu_code.md b/packages/documentation/docs/controls/application-frame/_application-menu_code.md index fa4b938f280..81ec75f64d1 100644 --- a/packages/documentation/docs/controls/application-frame/_application-menu_code.md +++ b/packages/documentation/docs/controls/application-frame/_application-menu_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-menu-settings/props.md'; @@ -16,27 +16,6 @@ import AvatarItemProps from './../../auto-generated/ix-menu-avatar-item/props.md import AvatarItemEvents from './../../auto-generated/ix-menu-avatar-item/events.md'; import AvatarTags from './../../auto-generated/ix-menu-avatar/tags.md'; -import SourceMenu from './../../auto-generated/previews/web-component/vertical-tabs.md' -import SourceMenuCategory from './../../auto-generated/previews/web-component/menu-category.md' -import SourceMenuWithAvatar from './../../auto-generated/previews/web-component/vertical-tabs-with-avatar.md' -import SourceMenuWithBottomTabs from './../../auto-generated/previews/web-component/menu-with-bottom-tabs.md' - -import SourceReactMenu from './../../auto-generated/previews/react/vertical-tabs.md' -import SourceReactMenuCategory from './../../auto-generated/previews/react/menu-category.md' -import SourceReactMenuWithAvatar from './../../auto-generated/previews/react/vertical-tabs-with-avatar.md' -import SourceReactMenuWithBottomTabs from './../../auto-generated/previews/react/menu-with-bottom-tabs.md' - -import SourceAngularMenu from './../../auto-generated/previews/angular/vertical-tabs.ts.md' -import SourceAngularMenuCategoryTs from './../../auto-generated/previews/angular/menu-category.ts.md' -import SourceAngularMenuCategoryHtml from './../../auto-generated/previews/angular/menu-category.html.md' -import SourceAngularMenuWithAvatar from './../../auto-generated/previews/angular/vertical-tabs-with-avatar.ts.md' -import SourceAngularMenuWithBottomTabs from './../../auto-generated/previews/angular/menu-with-bottom-tabs.ts.md' - -import SourceVueMenu from './../../auto-generated/previews/vue/vertical-tabs.md' -import SourceVueMenuCategory from './../../auto-generated/previews/vue/menu-category.md' -import SourceVueMenuWithAvatar from './../../auto-generated/previews/vue/vertical-tabs-with-avatar.md' -import SourceVueMenuWithBottomTabs from './../../auto-generated/previews/vue/menu-with-bottom-tabs.md' - # Navigation menu ## Usage @@ -44,12 +23,7 @@ import SourceVueMenuWithBottomTabs from './../../auto-generated/previews/vue/men +examplesByName> ## 2nd navigation level @@ -57,15 +31,7 @@ frameworks={{ +examplesByName> ## Avatar @@ -74,12 +40,7 @@ frameworks={{ +examplesByName> ## Bottom tabs @@ -90,12 +51,7 @@ frameworks={{ +examplesByName> ## Properties (ix-menu) diff --git a/packages/documentation/docs/controls/application-frame/_application_code.md b/packages/documentation/docs/controls/application-frame/_application_code.md index 3c4d5adcef7..83727d060f1 100644 --- a/packages/documentation/docs/controls/application-frame/_application_code.md +++ b/packages/documentation/docs/controls/application-frame/_application_code.md @@ -1,6 +1,6 @@ import Props from './../../auto-generated/ix-application/props.md'; import Events from './../../auto-generated/ix-application/events.md'; -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; The application component acts as a centralized hub for configuring aspects of your web-application, such as screen breakpoints, theming and app switch configuration. By consolidating these configuration points, it simplifies the management of application-wide settings and ensures a consistent user interface across different scenarios. diff --git a/packages/documentation/docs/controls/application-frame/_basic-navigation_code.md b/packages/documentation/docs/controls/application-frame/_basic-navigation_code.md index c4728961945..c047def79d8 100644 --- a/packages/documentation/docs/controls/application-frame/_basic-navigation_code.md +++ b/packages/documentation/docs/controls/application-frame/_basic-navigation_code.md @@ -1,38 +1,17 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-basic-navigation/props.md'; -import WebComponent from './../../auto-generated/previews/web-component/basic-navigation.md' -import ReactComponent from './../../auto-generated/previews/react/basic-navigation.md' -import AngularComponent from './../../auto-generated/previews/angular/basic-navigation.ts.md' -import VueComponent from './../../auto-generated/previews/vue/basic-navigation.md' - -import WebComponentWithoutHeader from './../../auto-generated/previews/web-component/basic-navigation-without-header.md' -import ReactComponentWithoutHeader from './../../auto-generated/previews/react/basic-navigation-without-header.md' -import AngularComponentWithoutHeader from './../../auto-generated/previews/angular/basic-navigation-without-header.ts.md' -import VueComponentWithoutHeader from './../../auto-generated/previews/vue/basic-navigation-without-header.md' - ## Usage - + ### Without header +examplesByName +> ### ix-basic-navigation diff --git a/packages/documentation/docs/controls/application-frame/_content_code.md b/packages/documentation/docs/controls/application-frame/_content_code.md index 43a5f73d088..f5000e6a3f2 100644 --- a/packages/documentation/docs/controls/application-frame/_content_code.md +++ b/packages/documentation/docs/controls/application-frame/_content_code.md @@ -1,7 +1,7 @@ import Tags from './../../auto-generated/ix-content/tags.md'; import Slots from './../../auto-generated/ix-content/slots.md'; import Props from './../../auto-generated/ix-content/props.md'; -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; # Content diff --git a/packages/documentation/docs/controls/application-frame/_content_styleguide.md b/packages/documentation/docs/controls/application-frame/_content_styleguide.md index 13af7ce009a..641c5c87a8c 100644 --- a/packages/documentation/docs/controls/application-frame/_content_styleguide.md +++ b/packages/documentation/docs/controls/application-frame/_content_styleguide.md @@ -1,5 +1,5 @@ import Tags from './../../auto-generated/ix-content/tags.md'; -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; The content component is a simple layout component made for hosting content. diff --git a/packages/documentation/docs/controls/application-frame/_map-navigation_code.md b/packages/documentation/docs/controls/application-frame/_map-navigation_code.md index e00813a5208..c52d331d98b 100644 --- a/packages/documentation/docs/controls/application-frame/_map-navigation_code.md +++ b/packages/documentation/docs/controls/application-frame/_map-navigation_code.md @@ -1,43 +1,23 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-map-navigation/props.md'; import Events from './../../auto-generated/ix-map-navigation/events.md'; import PropsOverlay from './../../auto-generated/ix-map-navigation-overlay/props.md'; import EventsOverlay from './../../auto-generated/ix-map-navigation-overlay/events.md'; -import SourceWebComponent from './../../auto-generated/previews/web-component/map-navigation.md' -import ReactComponent from './../../auto-generated/previews/react/map-navigation.md' -import AngularComponent from './../../auto-generated/previews/angular/map-navigation.ts.md' -import VueComponent from './../../auto-generated/previews/vue/map-navigation.md' - -import OverlayWebComponent from './../../auto-generated/previews/web-component/map-navigation-overlay.md' -import OverlayReactComponent from './../../auto-generated/previews/react/map-navigation-overlay.md' -import OverlayAngularComponent from './../../auto-generated/previews/angular/map-navigation-overlay.ts.md' -import OverlayVueComponent from './../../auto-generated/previews/vue/map-navigation-overlay.md' - ## Usage +examplesByName> ## Custom overlay +examplesByName> ## Properties (ix-map-navigation) diff --git a/packages/documentation/docs/controls/application-frame/_popover-news_code.md b/packages/documentation/docs/controls/application-frame/_popover-news_code.md index 3c8b3e26698..7ffa89a7d3b 100644 --- a/packages/documentation/docs/controls/application-frame/_popover-news_code.md +++ b/packages/documentation/docs/controls/application-frame/_popover-news_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-menu-about-news/props.md'; import Events from './../../auto-generated/ix-menu-about-news/events.md'; diff --git a/packages/documentation/docs/controls/application-frame/_settings_code.md b/packages/documentation/docs/controls/application-frame/_settings_code.md index 35ad32ac169..8456bc4995d 100644 --- a/packages/documentation/docs/controls/application-frame/_settings_code.md +++ b/packages/documentation/docs/controls/application-frame/_settings_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-menu-settings/props.md'; import Events from './../../auto-generated/ix-menu-settings/events.md'; diff --git a/packages/documentation/docs/controls/application-frame/about-and-legal.md b/packages/documentation/docs/controls/application-frame/about-and-legal.md index f1574d8c8aa..e43870bed5c 100644 --- a/packages/documentation/docs/controls/application-frame/about-and-legal.md +++ b/packages/documentation/docs/controls/application-frame/about-and-legal.md @@ -2,7 +2,6 @@ sidebar_position: 4 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_about-and-legal_styleguide.md'; diff --git a/packages/documentation/docs/controls/application-frame/application-header.md b/packages/documentation/docs/controls/application-frame/application-header.md index e9dd273276b..9a9617d2762 100644 --- a/packages/documentation/docs/controls/application-frame/application-header.md +++ b/packages/documentation/docs/controls/application-frame/application-header.md @@ -1,7 +1,6 @@ --- sidebar_position: 1 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_application-header_styleguide.md'; diff --git a/packages/documentation/docs/controls/application-frame/application-menu.md b/packages/documentation/docs/controls/application-frame/application-menu.md index c52bc596573..0515a59d185 100644 --- a/packages/documentation/docs/controls/application-frame/application-menu.md +++ b/packages/documentation/docs/controls/application-frame/application-menu.md @@ -2,7 +2,6 @@ sidebar_position: 2 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_application-menu_styleguide.md'; diff --git a/packages/documentation/docs/controls/application-frame/application.md b/packages/documentation/docs/controls/application-frame/application.md index bbe45de59f1..39156a69b68 100644 --- a/packages/documentation/docs/controls/application-frame/application.md +++ b/packages/documentation/docs/controls/application-frame/application.md @@ -2,7 +2,6 @@ sidebar_position: 0 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_application_styleguide.md'; diff --git a/packages/documentation/docs/controls/application-frame/basic-navigation.md b/packages/documentation/docs/controls/application-frame/basic-navigation.md index 682b23e5b8f..5021ea23675 100644 --- a/packages/documentation/docs/controls/application-frame/basic-navigation.md +++ b/packages/documentation/docs/controls/application-frame/basic-navigation.md @@ -2,7 +2,6 @@ sidebar_position: 10 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_basic-navigation_styleguide.md'; diff --git a/packages/documentation/docs/controls/application-frame/content.md b/packages/documentation/docs/controls/application-frame/content.md index 9a5eb4d96d4..75c85ea1486 100644 --- a/packages/documentation/docs/controls/application-frame/content.md +++ b/packages/documentation/docs/controls/application-frame/content.md @@ -2,13 +2,11 @@ sidebar_position: 3 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_content_styleguide.md'; import DocsCode from './\_content_code.md'; - import Tags from './../../auto-generated/ix-content/tags.md'; # Content diff --git a/packages/documentation/docs/controls/application-frame/map-navigation.md b/packages/documentation/docs/controls/application-frame/map-navigation.md index b15cbd80408..e487b16d25b 100644 --- a/packages/documentation/docs/controls/application-frame/map-navigation.md +++ b/packages/documentation/docs/controls/application-frame/map-navigation.md @@ -2,7 +2,6 @@ sidebar_position: 11 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_map-navigation_styleguide.md'; diff --git a/packages/documentation/docs/controls/application-frame/popover-news.md b/packages/documentation/docs/controls/application-frame/popover-news.md index 9d1dc7ec122..639925986bb 100644 --- a/packages/documentation/docs/controls/application-frame/popover-news.md +++ b/packages/documentation/docs/controls/application-frame/popover-news.md @@ -2,7 +2,6 @@ sidebar_position: 9 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_popover-news_styleguide.md'; diff --git a/packages/documentation/docs/controls/application-frame/settings.md b/packages/documentation/docs/controls/application-frame/settings.md index 89f6635ece4..4a9b7e2a3c2 100644 --- a/packages/documentation/docs/controls/application-frame/settings.md +++ b/packages/documentation/docs/controls/application-frame/settings.md @@ -2,7 +2,6 @@ sidebar_position: 4 --- -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_settings_styleguide.md'; diff --git a/packages/documentation/docs/controls/avatar.md b/packages/documentation/docs/controls/avatar.md index 7cd66a5c290..29818c85430 100644 --- a/packages/documentation/docs/controls/avatar.md +++ b/packages/documentation/docs/controls/avatar.md @@ -1,4 +1,3 @@ -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_avatar_styleguide.md' diff --git a/packages/documentation/docs/controls/blind.md b/packages/documentation/docs/controls/blind.md index ebbf18228e0..31e162b27fe 100644 --- a/packages/documentation/docs/controls/blind.md +++ b/packages/documentation/docs/controls/blind.md @@ -1,4 +1,3 @@ -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_blind_styleguide.md' diff --git a/packages/documentation/docs/controls/breadcrumb.md b/packages/documentation/docs/controls/breadcrumb.md index 2add59a7573..edee0b3d06f 100644 --- a/packages/documentation/docs/controls/breadcrumb.md +++ b/packages/documentation/docs/controls/breadcrumb.md @@ -1,4 +1,3 @@ -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_breadcrumb_styleguide.md' diff --git a/packages/documentation/docs/controls/buttons/_button_code.md b/packages/documentation/docs/controls/buttons/_button_code.md index 122a6ee5150..d7215513462 100644 --- a/packages/documentation/docs/controls/buttons/_button_code.md +++ b/packages/documentation/docs/controls/buttons/_button_code.md @@ -1,58 +1,13 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-button/props.md'; -import WebComponentButtons from './../../auto-generated/previews/web-component/buttons.md' -import WebComponentButtonSecondary from './../../auto-generated/previews/web-component/button-secondary.md' -import WebComponentButtonGhost from './../../auto-generated/previews/web-component/button-ghost.md' -import WebComponentButtonGrey from './../../auto-generated/previews/web-component/button-grey.md' -import WebComponentButtonGreySecondary from './../../auto-generated/previews/web-component/button-grey-secondary.md' -import WebComponentButtonGreyGhost from './../../auto-generated/previews/web-component/button-grey-ghost.md' -import WebComponentButtonTextIcon from './../../auto-generated/previews/web-component/button-text-icon.md' -import WebComponentButtonGroup from './../../auto-generated/previews/web-component/button-group.md' -import WebComponentButtonLoading from './../../auto-generated/previews/web-component/button-loading.md' - -import ReactButtons from './../../auto-generated/previews/react/buttons.md' -import ReactButtonGroup from './../../auto-generated/previews/react/button-group.md' -import ReactButtonSecondary from './../../auto-generated/previews/react/button-secondary.md' -import ReactButtonGhost from './../../auto-generated/previews/react/button-ghost.md' -import ReactButtonGrey from './../../auto-generated/previews/react/button-grey.md' -import ReactButtonGreySecondary from './../../auto-generated/previews/react/button-grey-secondary.md' -import ReactButtonGreyGhost from './../../auto-generated/previews/react/button-grey-ghost.md' -import ReactButtonTextIcon from './../../auto-generated/previews/react/button-text-icon.md' -import ReactButtonLoading from './../../auto-generated/previews/react/button-loading.md' - -import AngularButtons from './../../auto-generated/previews/angular/buttons.ts.md' -import AngularButtonGroup from './../../auto-generated/previews/angular/button-group.ts.md' -import AngularButtonSecondary from './../../auto-generated/previews/angular/button-secondary.ts.md' -import AngularButtonGhost from './../../auto-generated/previews/angular/button-ghost.ts.md' -import AngularButtonGrey from './../../auto-generated/previews/angular/button-grey.ts.md' -import AngularButtonGreySecondary from './../../auto-generated/previews/angular/button-grey-secondary.ts.md' -import AngularButtonGreyGhost from './../../auto-generated/previews/angular/button-grey-ghost.ts.md' -import AngularButtonTextIcon from './../../auto-generated/previews/angular/button-text-icon.ts.md' -import AngularButtonLoading from './../../auto-generated/previews/angular/button-loading.ts.md' - -import VueButtons from './../../auto-generated/previews/vue/buttons.md' -import VueButtonGroup from './../../auto-generated/previews/vue/button-group.md' -import VueButtonSecondary from './../../auto-generated/previews/vue/button-secondary.md' -import VueButtonGhost from './../../auto-generated/previews/vue/button-ghost.md' -import VueButtonGrey from './../../auto-generated/previews/vue/button-grey.md' -import VueButtonGreySecondary from './../../auto-generated/previews/vue/button-grey-secondary.md' -import VueButtonGreyGhost from './../../auto-generated/previews/vue/button-grey-ghost.md' -import VueButtonTextIcon from './../../auto-generated/previews/vue/button-text-icon.md' -import VueButtonLoading from './../../auto-generated/previews/vue/button-loading.md' - ## Usage ### Primary +examplesByName> ### Primary Outline @@ -66,12 +21,7 @@ Will be used as **Secondary** in UX context +examplesByName> ### Primary Ghost @@ -84,12 +34,7 @@ Will be used as **Ghost** in UX context +examplesByName> ### Secondary @@ -102,12 +47,7 @@ Will be used as **Grey button** in UX context +examplesByName> ### Secondary Outline @@ -120,12 +60,7 @@ Will be used as **Grey secondary** in UX context +examplesByName> ### Secondary Ghost @@ -138,48 +73,28 @@ Will be used as **Grey ghost** in UX context +examplesByName> ### Button group +examplesByName> ### Button with text and icon +examplesByName> ### Loading button +examplesByName> ## Properties (ix-button) diff --git a/packages/documentation/docs/controls/buttons/_dropdown-button_code.md b/packages/documentation/docs/controls/buttons/_dropdown-button_code.md index 30a9058424c..d7f0352df05 100644 --- a/packages/documentation/docs/controls/buttons/_dropdown-button_code.md +++ b/packages/documentation/docs/controls/buttons/_dropdown-button_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import TabItem from '@theme/TabItem'; import Preview from '@site/src/components/Preview'; @@ -6,19 +6,6 @@ import Overview from './../../auto-generated/ix-dropdown-button/overview.md'; import Tags from './../../auto-generated/ix-dropdown-button/tags.md'; import Props from './../../auto-generated/ix-dropdown-button/props.md'; -import SourceDropdownButton from './../../auto-generated/previews/web-component/dropdown-button.md'; -import SourceDropdownButtonIcon from './../../auto-generated/previews/web-component/dropdown-button-icon.md'; - -import SourceReactDropdownButton from './../../auto-generated/previews/react/dropdown-button.md'; -import SourceReactDropdownButtonIcon from './../../auto-generated/previews/react/dropdown-button-icon.md'; - -import SourceAngularDropdownButton from './../../auto-generated/previews/angular/dropdown-button.ts.md'; -import SourceAngularDropdownButtonIcon from './../../auto-generated/previews/angular/dropdown-button-icon.ts.md'; - -import SourceVueDropdownButton from './../../auto-generated/previews/vue/dropdown-button.md'; -import SourceVueDropdownButtonIcon from './../../auto-generated/previews/vue/dropdown-button-icon.md'; - - @@ -27,23 +14,13 @@ import SourceVueDropdownButtonIcon from './../../auto-generated/previews/vue/dro +examplesByName> ### Icon +examplesByName> ## Properties (ix-dropdown-button) diff --git a/packages/documentation/docs/controls/buttons/_icon-button_code.md b/packages/documentation/docs/controls/buttons/_icon-button_code.md index 391a5fcef8b..9fb108d36c4 100644 --- a/packages/documentation/docs/controls/buttons/_icon-button_code.md +++ b/packages/documentation/docs/controls/buttons/_icon-button_code.md @@ -1,13 +1,8 @@ import Tags from './../../auto-generated/ix-link-button/tags.md'; -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import PropsIcon from './../../auto-generated/ix-icon-button/props.md'; -import WebComponentButtonIcon from './../../auto-generated/previews/web-component/button-with-icon.md' -import AngularButtonIcon from './../../auto-generated/previews/angular/button-with-icon.ts.md' -import ReactButtonIcon from './../../auto-generated/previews/react/button-with-icon.md' -import VueButtonIcon from './../../auto-generated/previews/vue/button-with-icon.md' - ### Icon button @@ -17,12 +12,7 @@ import VueButtonIcon from './../../auto-generated/previews/vue/button-with-icon. +examplesByName> ## Properties (ix-icon-button) diff --git a/packages/documentation/docs/controls/buttons/_link-button_code.md b/packages/documentation/docs/controls/buttons/_link-button_code.md index 78e8f5f6e2a..43d30caa4ec 100644 --- a/packages/documentation/docs/controls/buttons/_link-button_code.md +++ b/packages/documentation/docs/controls/buttons/_link-button_code.md @@ -1,42 +1,22 @@ import Tags from './../../auto-generated/ix-link-button/tags.md'; -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-link-button/props.md'; -import SourceLinkButton from './../../auto-generated/previews/web-component/link-button.md' -import SourceReactLinkButton from './../../auto-generated/previews/react/link-button.md' -import SourceAngularLinkButton from './../../auto-generated/previews/angular/link-button.ts.md' -import SourceVueLinkButton from './../../auto-generated/previews/vue/link-button.md' - -import SourceLinkButtonDisabled from './../../auto-generated/previews/web-component/link-button-disabled.md' -import SourceReactLinkButtonDisabled from './../../auto-generated/previews/react/link-button-disabled.md' -import SourceAngularLinkButtonDisabled from './../../auto-generated/previews/angular/link-button-disabled.ts.md' -import SourceVueLinkButtonDisabled from './../../auto-generated/previews/vue/link-button-disabled.md' - ## Usage +examplesByName> ## Disabled +examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/buttons/_split-button_code.md b/packages/documentation/docs/controls/buttons/_split-button_code.md index 79b5231297c..d049e87a08f 100644 --- a/packages/documentation/docs/controls/buttons/_split-button_code.md +++ b/packages/documentation/docs/controls/buttons/_split-button_code.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../../auto-generated/ix-split-button/props.md'; import Events from './../../auto-generated/ix-split-button/events.md'; @@ -6,39 +6,16 @@ import Events from './../../auto-generated/ix-split-button/events.md'; import ItemProps from './../../auto-generated/ix-split-button-item/props.md'; import ItemEvents from './../../auto-generated/ix-split-button-item/events.md'; -import SourceSplitButton from './../../auto-generated/previews/web-component/split-button.md'; -import SourceSplitButtonIcons from './../../auto-generated/previews/web-component/split-button-icons.md'; - -import SourceReactSplitButton from './../../auto-generated/previews/react/split-button.md'; -import SourceReactSplitButtonIcons from './../../auto-generated/previews/react/split-button-icons.md'; - -import SourceAngularSplitButton from './../../auto-generated/previews/angular/split-button.ts.md'; -import SourceAngularSplitButtonIcons from './../../auto-generated/previews/angular/split-button-icons.ts.md'; - -import SourceVueSplitButton from './../../auto-generated/previews/vue/split-button.md'; -import SourceVueSplitButtonIcons from './../../auto-generated/previews/vue/split-button-icons.md'; - - +examplesByName> ### With icon only +examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/buttons/_toggle-button_code.md b/packages/documentation/docs/controls/buttons/_toggle-button_code.md index baad86484e3..4bec755cd19 100644 --- a/packages/documentation/docs/controls/buttons/_toggle-button_code.md +++ b/packages/documentation/docs/controls/buttons/_toggle-button_code.md @@ -1,5 +1,5 @@ import { ApiTableSinceTag } from '@site/src/components/ApiTableTag'; -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Tags from './../../auto-generated/ix-toggle-button/tags.md'; @@ -11,53 +11,6 @@ import PropsToggleButton from './../../auto-generated/ix-toggle-button/props.md' import PropsIconToggleButton from './../../auto-generated/ix-icon-toggle-button/props.md'; -import WcToggleButtonSecondary from './../../auto-generated/previews/web-component/toggle-button-secondary.md' -import WcToggleButtonSecondaryGhost from './../../auto-generated/previews/web-component/toggle-button-secondary-ghost.md' -import WcToggleButtonSecondaryOutline from './../../auto-generated/previews/web-component/toggle-button-secondary-outline.md' -import WcToggleButtonPrimaryGhost from './../../auto-generated/previews/web-component/toggle-button-primary-ghost.md' -import WcToggleButtonPrimaryOutline from './../../auto-generated/previews/web-component/toggle-button-primary-outline.md' - -import NgToggleButtonSecondary from './../../auto-generated/previews/angular/toggle-button-secondary.ts.md' -import NgToggleButtonSecondaryGhost from './../../auto-generated/previews/angular/toggle-button-secondary-ghost.ts.md' -import NgToggleButtonSecondaryOutline from './../../auto-generated/previews/angular/toggle-button-secondary-outline.ts.md' -import NgToggleButtonPrimaryGhost from './../../auto-generated/previews/angular/toggle-button-primary-ghost.ts.md' -import NgToggleButtonPrimaryOutline from './../../auto-generated/previews/angular/toggle-button-primary-outline.ts.md' - -import ReactToggleButtonSecondary from './../../auto-generated/previews/react/toggle-button-secondary.md' -import ReactToggleButtonSecondaryGhost from './../../auto-generated/previews/react/toggle-button-secondary-ghost.md' -import ReactToggleButtonSecondaryOutline from './../../auto-generated/previews/react/toggle-button-secondary-outline.md' -import ReactToggleButtonPrimaryGhost from './../../auto-generated/previews/react/toggle-button-primary-ghost.md' -import ReactToggleButtonPrimaryOutline from './../../auto-generated/previews/react/toggle-button-primary-outline.md' - -import VueToggleButtonSecondary from './../../auto-generated/previews/vue/toggle-button-secondary.md' -import VueToggleButtonSecondaryGhost from './../../auto-generated/previews/vue/toggle-button-secondary-ghost.md' -import VueToggleButtonSecondaryOutline from './../../auto-generated/previews/vue/toggle-button-secondary-outline.md' -import VueToggleButtonPrimaryGhost from './../../auto-generated/previews/vue/toggle-button-primary-ghost.md' -import VueToggleButtonPrimaryOutline from './../../auto-generated/previews/vue/toggle-button-primary-outline.md' - -import WcIconToggleButtonSecondary from './../../auto-generated/previews/web-component/icon-toggle-button-secondary.md' -import WcIconToggleButtonSecondaryGhost from './../../auto-generated/previews/web-component/icon-toggle-button-secondary-ghost.md' -import WcIconToggleButtonSecondaryOutline from './../../auto-generated/previews/web-component/icon-toggle-button-secondary-outline.md' -import WcIconToggleButtonPrimaryGhost from './../../auto-generated/previews/web-component/icon-toggle-button-primary-ghost.md' -import WcIconToggleButtonPrimaryOutline from './../../auto-generated/previews/web-component/icon-toggle-button-primary-outline.md' - -import NgIconToggleButtonSecondary from './../../auto-generated/previews/angular/icon-toggle-button-secondary.ts.md' -import NgIconToggleButtonSecondaryGhost from './../../auto-generated/previews/angular/icon-toggle-button-secondary-ghost.ts.md' -import NgIconToggleButtonSecondaryOutline from './../../auto-generated/previews/angular/icon-toggle-button-secondary-outline.ts.md' -import NgIconToggleButtonPrimaryGhost from './../../auto-generated/previews/angular/icon-toggle-button-primary-ghost.ts.md' -import NgIconToggleButtonPrimaryOutline from './../../auto-generated/previews/angular/icon-toggle-button-primary-outline.ts.md' - -import ReactIconToggleButtonSecondary from './../../auto-generated/previews/react/icon-toggle-button-secondary.md' -import ReactIconToggleButtonSecondaryGhost from './../../auto-generated/previews/react/icon-toggle-button-secondary-ghost.md' -import ReactIconToggleButtonSecondaryOutline from './../../auto-generated/previews/react/icon-toggle-button-secondary-outline.md' -import ReactIconToggleButtonPrimaryGhost from './../../auto-generated/previews/react/icon-toggle-button-primary-ghost.md' -import ReactIconToggleButtonPrimaryOutline from './../../auto-generated/previews/react/icon-toggle-button-primary-outline.md' - -import VueIconToggleButtonSecondary from './../../auto-generated/previews/vue/icon-toggle-button-secondary.md' -import VueIconToggleButtonSecondaryGhost from './../../auto-generated/previews/vue/icon-toggle-button-secondary-ghost.md' -import VueIconToggleButtonSecondaryOutline from './../../auto-generated/previews/vue/icon-toggle-button-secondary-outline.md' -import VueIconToggleButtonPrimaryGhost from './../../auto-generated/previews/vue/icon-toggle-button-primary-ghost.md' -import VueIconToggleButtonPrimaryOutline from './../../auto-generated/previews/vue/icon-toggle-button-primary-outline.md' @@ -65,60 +18,35 @@ import VueIconToggleButtonPrimaryOutline from './../../auto-generated/previews/v +examplesByName> ## Toggle button secondary ghost +examplesByName> ## Toggle button secondary +examplesByName> ## Toggle button primary outline +examplesByName> ## Toggle button primary ghost +examplesByName> @@ -127,60 +55,35 @@ frameworks={{ +examplesByName> ## Icon Toggle button secondary ghost +examplesByName> ## Icon Toggle Button secondary +examplesByName> ## Icon Toggle button primary outline +examplesByName> ## Icon Toggle Button primary ghost +examplesByName> ## Properties (ix-toggle-button) diff --git a/packages/documentation/docs/controls/category-filter.md b/packages/documentation/docs/controls/category-filter.md index 80b96f7fa8d..228cdab9ada 100644 --- a/packages/documentation/docs/controls/category-filter.md +++ b/packages/documentation/docs/controls/category-filter.md @@ -3,18 +3,7 @@ import Preview from '@site/src/components/Preview'; import Props from './../auto-generated/ix-category-filter/props.md'; import Events from './../auto-generated/ix-category-filter/events.md'; -import SourceCategoryFilter from './../auto-generated/previews/web-component/category-filter.md' -import SourceReactCategoryFilter from './../auto-generated/previews/react/category-filter.md' -import SourceAngularCategoryFilter from './../auto-generated/previews/angular/category-filter.ts.md' - -import SourceCategoryFilterSuggestions from './../auto-generated/previews/web-component/category-filter-suggestions.md' -import SourceReactCategoryFilterSuggestions from './../auto-generated/previews/react/category-filter-suggestions.md' -import SourceAngularCategoryFilterSuggestions from './../auto-generated/previews/angular/category-filter-suggestions.ts.md' - -import SourceVueCategoryFilter from './../auto-generated/previews/vue/category-filter.md' -import SourceVueCategoryFilterSuggestions from './../auto-generated/previews/vue/category-filter-suggestions.md' - -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; # Category filter @@ -23,12 +12,7 @@ import Playground from '@site/src/components/Playground'; +examplesByName> ### without categories @@ -36,12 +20,7 @@ frameworks={{ name="category-filter-suggestions" hideInitalCodePreview height="12rem" -frameworks={{ - react: SourceReactCategoryFilterSuggestions, - angular: SourceAngularCategoryFilterSuggestions, - javascript: SourceCategoryFilterSuggestions, - vue: SourceVueCategoryFilterSuggestions -}}> +examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/checkbox.md b/packages/documentation/docs/controls/checkbox.md index 4771131a92f..d6554b4c202 100644 --- a/packages/documentation/docs/controls/checkbox.md +++ b/packages/documentation/docs/controls/checkbox.md @@ -1,14 +1,4 @@ -import Playground from '@site/src/components/Playground'; - -import SourceCheckbox from './../auto-generated/previews/web-component/checkbox.md' -import SourceCheckboxInderterminate from './../auto-generated/previews/web-component/checkbox-indeterminate.md' -import SourceReactCheckbox from './../auto-generated/previews/react/checkbox.md' -import SourceReactCheckboxInderterminate from './../auto-generated/previews/react/checkbox-indeterminate.md' -import SourceAngularCheckbox from './../auto-generated/previews/angular/checkbox.ts.md' -import SourceAngularCheckboxInderterminate from './../auto-generated/previews/angular/checkbox-indeterminate.ts.md' - -import SourceVueCheckbox from './../auto-generated/previews/vue/checkbox.md' -import SourceVueCheckboxInderterminate from './../auto-generated/previews/vue/checkbox-indeterminate.md' +import Playground from '@site/src/components/PlaygroundV2'; # Checkbox @@ -16,21 +6,11 @@ import SourceVueCheckboxInderterminate from './../auto-generated/previews/vue/ch +examplesByName> ### Indeterminate +examplesByName> diff --git a/packages/documentation/docs/controls/chip.md b/packages/documentation/docs/controls/chip.md index 1f7f4dcff8d..35f09f885fb 100644 --- a/packages/documentation/docs/controls/chip.md +++ b/packages/documentation/docs/controls/chip.md @@ -1,4 +1,3 @@ -import Playground from '@site/src/components/Playground' import DocsTabs from '@site/src/components/DocsTabs'; import DocsUx from './\_chip_styleguide.md' diff --git a/packages/documentation/docs/controls/content-header.md b/packages/documentation/docs/controls/content-header.md index 5addd526109..0ab57b5b08b 100644 --- a/packages/documentation/docs/controls/content-header.md +++ b/packages/documentation/docs/controls/content-header.md @@ -1,50 +1,22 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-content-header/props.md'; import Events from './../auto-generated/ix-content-header/events.md'; -import SourceContentHeader from './../auto-generated/previews/web-component/content-header.md' -import SourceReactContentHeader from './../auto-generated/previews/react/content-header.md' -import SourceHtmlAngularContentHeader from './../auto-generated/previews/angular/content-header.html.md' -import SourceTsAngularContentHeader from './../auto-generated/previews/angular/content-header.ts.md' -import SourceVueContentHeader from './../auto-generated/previews/vue/content-header.md' - -import SourceContentHeaderNoBack from './../auto-generated/previews/web-component/content-header-no-back.md' -import SourceReactContentHeaderNoBack from './../auto-generated/previews/react/content-header-no-back.md' -import SourceHtmlAngularContentHeaderNoBack from './../auto-generated/previews/angular/content-header-no-back.html.md' -import SourceTsAngularContentHeaderNoBack from './../auto-generated/previews/angular/content-header-no-back.ts.md' -import SourceVueContentHeaderNoBack from './../auto-generated/previews/vue/content-header-no-back.md' - # Content Header ## Usage +examplesByName> ### No back button +examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/date-dropdown.md b/packages/documentation/docs/controls/date-dropdown.md index 30fdbfe56b1..d12f8a966c1 100644 --- a/packages/documentation/docs/controls/date-dropdown.md +++ b/packages/documentation/docs/controls/date-dropdown.md @@ -1,40 +1,20 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-date-dropdown/props.md'; import Events from './../auto-generated/ix-date-dropdown/events.md'; -import SourceDateDateDropdown from './../auto-generated/previews/web-component/date-dropdown.md' -import SourceReactDateDropdown from './../auto-generated/previews/react/date-dropdown.md' -import SourceAngularDateDropdown from './../auto-generated/previews/angular/date-dropdown.ts.md' -import SourceVueDateDropdown from './../auto-generated/previews/vue/date-dropdown.md' - -import SourceDateDropdownUserRange from './../auto-generated/previews/web-component/date-dropdown-user-range.md' -import SourceReactDateDropdownUserRange from './../auto-generated/previews/react/date-dropdown-user-range.md' -import SourceAngularDateDropdownUserRange from './../auto-generated/previews/angular/date-dropdown-user-range.ts.md' -import SourceVueDateDropdownUserRange from './../auto-generated/previews/vue/date-dropdown-user-range.md' - # Date Dropdown ## Usage + examplesByName> ## with user defined range options + examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/date-picker.md b/packages/documentation/docs/controls/date-picker.md index 980b2e5bb56..8bf4cb2e8b4 100644 --- a/packages/documentation/docs/controls/date-picker.md +++ b/packages/documentation/docs/controls/date-picker.md @@ -1,4 +1,4 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-date-picker/props.md'; import Events from './../auto-generated/ix-date-picker/events.md'; @@ -21,8 +21,7 @@ examplesByName> The `ix-date-picker` can be configured using [BCP 47](https://tools.ietf.org/html/rfc5646) locale strings specifying the language to use generating or interpreting strings. More information can be found [here](https://moment.github.io/luxon/#/intl?id=default-locale) +name="datepicker-locale" height="35rem" examplesByName> ## Properties diff --git a/packages/documentation/docs/controls/date-time-picker.md b/packages/documentation/docs/controls/date-time-picker.md index 820dde967f8..8de3763ffe5 100644 --- a/packages/documentation/docs/controls/date-time-picker.md +++ b/packages/documentation/docs/controls/date-time-picker.md @@ -1,24 +1,14 @@ -import Playground from '@site/src/components/Playground'; +import Playground from '@site/src/components/PlaygroundV2'; import Props from './../auto-generated/ix-datetime-picker/props.md'; import Events from './../auto-generated/ix-datetime-picker/events.md'; -import SourceDatetimepicker from './../auto-generated/previews/web-component/datetimepicker.md' -import SourceReactDatetimepicker from './../auto-generated/previews/react/datetimepicker.md' -import SourceAngularDatetimepicker from './../auto-generated/previews/angular/datetimepicker.ts.md' -import SourceVueDatetimepicker from './../auto-generated/previews/vue/datetimepicker.md' - # Date time picker ## Usage +examplesByName> (\n)+/gms, ''); +} + +function sliceHtmlCode(code: string) { + if (code.includes('')) { + const [__, source] = code.split('\n'); + return stripHeader( + source + .split('\n') + .map((line) => line.replace(/[ ]{4}/, '')) + .join('\n') + .trimEnd() + ); + } + + return stripHeader(code); +} + +async function fetchSource(path: string) { + console.log('FETCH SOURCE FROM', path); + const response = await fetch(`${path}.txt`); + const source = await response.text(); + + // Docusaurus don' throw a classic 404 if a sub route is not found + // Check if the response is the bootstrap code of docusaurus + // If this is the case the resource is not existing + console.log(source); + if ( + !source || + source?.includes('
') || + source?.includes('Page Not Found') + ) { + return null; + } + + return source; +} + +async function fetchHTMLSource( + path: string, + framework: TargetFramework, + files: string[] +) { + let frameworkPath = 'web-components'; + + if (framework === TargetFramework.ANGULAR) { + frameworkPath = 'angular'; + } + + if (framework === TargetFramework.REACT) { + frameworkPath = 'react'; + } + + if (framework === TargetFramework.VUE) { + frameworkPath = 'vue'; + } + + return Promise.all( + files.map(async (file) => { + try { + const source = await fetchSource( + `${path}/previews/${frameworkPath}/${file}` + ); + + if (!source) { + return null; + } + + return { + filename: file, + source: sliceHtmlCode(source), + }; + } catch (e) { + console.warn(e); + } + }) + ); +} + +function getLanguage(filename: string) { + if (filename.endsWith('.html')) { + return 'html'; + } + + if (filename.endsWith('.ts')) { + return 'ts'; + } + + if (filename.endsWith('.tsx')) { + return 'tsx'; + } + + if (filename.endsWith('.vue')) { + return 'tsx'; + } +} + +type PlaygroundV2Props = { + files: Record; + examplesByName?: boolean; +} & DemoProps; + +function SourceCodePreview(props: { + framework: TargetFramework; + name: string; + files?: Record; + examplesByName?: boolean; + onSourceCodeFetched: (files: SourceFile[]) => void; +}) { + const [isFetching, setFetching] = useState(true); + + const baseUrl = useBaseUrl('/auto-generated'); + + const [files, setFiles] = useState([]); + const [selectedFile, setSelectedFile] = useState(0); + + useEffect(() => { + if (props.examplesByName) { + let filesToFetch = []; + + if (props.framework === TargetFramework.ANGULAR) { + filesToFetch = [`${props.name}.ts`, `${props.name}.html`]; + } + + if (props.framework === TargetFramework.JAVASCRIPT) { + filesToFetch = [`${props.name}.html`]; + } + + if (props.framework === TargetFramework.REACT) { + filesToFetch = [`${props.name}.tsx`]; + } + + if (props.framework === TargetFramework.VUE) { + filesToFetch = [`${props.name}.vue`]; + } + + setFetching(true); + fetchHTMLSource(baseUrl, props.framework, filesToFetch).then((files) => { + setFiles(files.filter((f) => f)); + setFetching(false); + }); + return; + } + if (props.files && props.files[props.framework]) { + const filesToFetch = props.files[props.framework]; + + setFetching(true); + fetchHTMLSource(baseUrl, props.framework, filesToFetch).then((files) => { + setFiles(files.filter((f) => f)); + setFetching(false); + }); + } + }, [props.framework]); + + useEffect(() => { + props.onSourceCodeFetched(files); + }, [files]); + + if (isFetching) { + return ; + } + + if (files.length === 0) { + return ( +
+ There is no example code yet ๐Ÿ˜ฑ +
+ ); + } + + if (files.length === 1) { + return ( + + {files[0].source} + + ); + } + + return ( + <> + + {files.map((file, index) => ( + setSelectedFile(index)} + > + {file.filename} + + ))} + + + {files[selectedFile].source} + + + ); +} + +export default function PlaygroundV2(props: PlaygroundV2Props) { + const [tab, setTab] = useState(TargetFramework.PREVIEW); + const baseUrl = useBaseUrl('/'); + const baseUrlAssets = useBaseUrl('/img'); + const iframe = useBaseUrl('/webcomponent-examples/dist/preview-examples'); + const [files, setFiles] = useState([]); + const isTabVisible = (framework: TargetFramework) => { + if (props.examplesByName) { + return true; + } + + return !!props.files[framework]; + }; + + return ( +
+ + setTab(TargetFramework.PREVIEW)}> + Preview + + {isTabVisible(TargetFramework.ANGULAR) && ( + setTab(TargetFramework.ANGULAR)}> + Angular + + )} + {isTabVisible(TargetFramework.REACT) && ( + setTab(TargetFramework.REACT)}> + React + + )} + {isTabVisible(TargetFramework.VUE) && ( + setTab(TargetFramework.VUE)}>Vue + )} + {isTabVisible(TargetFramework.JAVASCRIPT) && ( + setTab(TargetFramework.JAVASCRIPT)}> + Javascript + + )} + +
+ {tab === TargetFramework.PREVIEW ? ( + { + window.open(`${iframe}/${props.name}.html`); + }} + > + ) : ( + <> + { + openStackBlitz({ + baseUrl: baseUrl, + files: files, + framework: tab, + name: props.name, + }); + }} + > + + { + window.open(`https://github.com/${getBranchPath(tab)}`); + }} + > + + )} +
+
+ {tab === TargetFramework.PREVIEW ? : null} + {tab !== TargetFramework.PREVIEW ? ( + setFiles(files)} + framework={tab} + name={props.name} + files={props.files} + examplesByName={props.examplesByName} + > + ) : null} +
+ ); +} diff --git a/packages/documentation/src/components/PlaygroundV2/styles.module.css b/packages/documentation/src/components/PlaygroundV2/styles.module.css new file mode 100644 index 00000000000..0249d91d8d7 --- /dev/null +++ b/packages/documentation/src/components/PlaygroundV2/styles.module.css @@ -0,0 +1,6 @@ +/* + * COPYRIGHT (c) Siemens AG 2018-2023 ALL RIGHTS RESERVED. + */ +.Files_Toolbar { + margin-left: auto; +} diff --git a/packages/documentation/src/components/Playground/utils.ts b/packages/documentation/src/components/PlaygroundV2/utils.ts similarity index 86% rename from packages/documentation/src/components/Playground/utils.ts rename to packages/documentation/src/components/PlaygroundV2/utils.ts index 58210788554..42f878561b5 100644 --- a/packages/documentation/src/components/Playground/utils.ts +++ b/packages/documentation/src/components/PlaygroundV2/utils.ts @@ -11,6 +11,11 @@ import { TargetFramework } from './framework-types'; const repositoryUrl = 'https://github.com/siemens/ix/tree/main/packages'; +export type SourceFile = { + filename: string; + source: string; +}; + function getSourceCodeFile({ name, framework, @@ -55,10 +60,7 @@ async function loadSourceCodeFromStatic(paths: string[]) { return Promise.all(sourceFiles.map((res) => res.text())); } -async function openHtmlStackBlitz( - baseUrl: string, - sourceFiles: { filename: string; sourceCode: string }[] -) { +async function openHtmlStackBlitz(baseUrl: string, sourceFiles: SourceFile[]) { const [index_html, main_js, package_json, vite_config_ts] = await loadSourceCodeFromStatic([ `${baseUrl}code-runtime/html/src/index.html`, @@ -71,7 +73,7 @@ async function openHtmlStackBlitz( const files = {}; additionalFiles.forEach((file) => { - files[`src/${file.filename}`] = file.sourceCode; + files[`src/${file.filename}`] = file.source; }); sdk.openProject( @@ -83,7 +85,7 @@ async function openHtmlStackBlitz( ...files, 'src/index.html': index_html.replace( '', - renderFirstExample.sourceCode + renderFirstExample.source ), 'src/main.js': main_js, 'package.json': package_json, @@ -99,7 +101,7 @@ async function openHtmlStackBlitz( async function openAngularStackBlitz( baseUrl: string, name: string, - additionalFiles: { filename: string; sourceCode: string }[] + additionalFiles: SourceFile[] ) { const [ app_component_css, @@ -127,9 +129,9 @@ async function openAngularStackBlitz( `${baseUrl}code-runtime/angular/tsconfig.json`, ]); - const declareComponents = []; - additionalFiles.forEach(({ filename, sourceCode }) => { - if (/@Component/gms.test(sourceCode)) { + const declareComponents: string[] = []; + additionalFiles.forEach(({ filename, source }) => { + if (/@Component/gms.test(source)) { declareComponents.push(filename); } }); @@ -151,8 +153,8 @@ async function openAngularStackBlitz( `; const exampleFiles = {}; - additionalFiles.forEach(({ filename, sourceCode }) => { - exampleFiles[`src/app/${filename}`] = sourceCode; + additionalFiles.forEach(({ filename, source }) => { + exampleFiles[`src/app/${filename}`] = source; }); sdk.openProject( @@ -182,10 +184,7 @@ async function openAngularStackBlitz( ); } -async function openReactStackBlitz( - baseUrl: string, - sourceFiles: { filename: string; sourceCode: string }[] -) { +async function openReactStackBlitz(baseUrl: string, sourceFiles: SourceFile[]) { const [app_tsx, index_html, index_tsx, package_json, tsconfig_json] = await loadSourceCodeFromStatic([ `${baseUrl}code-runtime/react/App.tsx`, @@ -211,8 +210,8 @@ async function openReactStackBlitz( const files: Record = {}; - sourceFiles.forEach(({ filename, sourceCode }) => { - files[`src/${filename}`] = sourceCode; + sourceFiles.forEach(({ filename, source }) => { + files[`src/${filename}`] = source; }); sdk.openProject( @@ -238,10 +237,7 @@ async function openReactStackBlitz( ); } -async function openVueStackBlitz( - baseUrl: string, - sourceFiles: { filename: string; sourceCode: string }[] -) { +async function openVueStackBlitz(baseUrl: string, sourceFiles: SourceFile[]) { const [ app_vue, index_html, @@ -273,8 +269,8 @@ async function openVueStackBlitz( const files: Record = {}; - sourceFiles.forEach(({ filename, sourceCode }) => { - files[`src/${filename}`] = sourceCode; + sourceFiles.forEach(({ filename, source }) => { + files[`src/${filename}`] = source; }); sdk.openProject( @@ -330,25 +326,23 @@ export async function openStackBlitz({ baseUrl, }: { name: string; - files: string[]; + files: SourceFile[]; framework: TargetFramework; baseUrl: string; }) { - const additionalFiles = await getSourceCodeFiles(baseUrl, framework, files); - if (framework === TargetFramework.REACT) { - return openReactStackBlitz(baseUrl, additionalFiles); + return openReactStackBlitz(baseUrl, files); } if (framework === TargetFramework.ANGULAR) { - return openAngularStackBlitz(baseUrl, name, additionalFiles); + return openAngularStackBlitz(baseUrl, name, files); } if (framework === TargetFramework.JAVASCRIPT) { - return openHtmlStackBlitz(baseUrl, additionalFiles); + return openHtmlStackBlitz(baseUrl, files); } if (framework === TargetFramework.VUE) { - return openVueStackBlitz(baseUrl, additionalFiles); + return openVueStackBlitz(baseUrl, files); } } diff --git a/packages/documentation/src/theme/DocSidebarItem/Category/index.js b/packages/documentation/src/theme/DocSidebarItem/Category/index.tsx similarity index 74% rename from packages/documentation/src/theme/DocSidebarItem/Category/index.js rename to packages/documentation/src/theme/DocSidebarItem/Category/index.tsx index 4b82b3a1c15..b51217942b7 100644 --- a/packages/documentation/src/theme/DocSidebarItem/Category/index.js +++ b/packages/documentation/src/theme/DocSidebarItem/Category/index.tsx @@ -1,13 +1,4 @@ -/* - * SPDX-FileCopyrightText: 2023 Siemens AG - * - * SPDX-License-Identifier: MIT - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import React, { useEffect, useMemo } from 'react'; +import React, { type ComponentProps, useEffect, useMemo } from 'react'; import clsx from 'clsx'; import { ThemeClassNames, @@ -18,7 +9,7 @@ import { } from '@docusaurus/theme-common'; import { isActiveSidebarItem, - findFirstCategoryLink, + findFirstSidebarItemLink, useDocSidebarItemsExpandedState, isSamePath, } from '@docusaurus/theme-common/internal'; @@ -26,10 +17,20 @@ import Link from '@docusaurus/Link'; import { translate } from '@docusaurus/Translate'; import useIsBrowser from '@docusaurus/useIsBrowser'; import DocSidebarItems from '@theme/DocSidebarItems'; +import type { Props } from '@theme/DocSidebarItem/Category'; +import { IxIcon } from '@siemens/ix-react'; // If we navigate to a category and it becomes active, it should automatically // expand itself -function useAutoExpandActiveCategory({ isActive, collapsed, updateCollapsed }) { +function useAutoExpandActiveCategory({ + isActive, + collapsed, + updateCollapsed, +}: { + isActive: boolean; + collapsed: boolean; + updateCollapsed: (b: boolean) => void; +}) { const wasActive = usePrevious(isActive); useEffect(() => { const justBecameActive = isActive && !wasActive; @@ -38,6 +39,7 @@ function useAutoExpandActiveCategory({ isActive, collapsed, updateCollapsed }) { } }, [isActive, wasActive, collapsed, updateCollapsed]); } + /** * When a collapsible category has no link, we still link it to its first child * during SSR as a temporary fallback. This allows to be able to navigate inside @@ -46,10 +48,12 @@ function useAutoExpandActiveCategory({ isActive, collapsed, updateCollapsed }) { * see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188 * see https://github.com/facebook/docusaurus/issues/3030 */ -function useCategoryHrefWithSSRFallback(item) { +function useCategoryHrefWithSSRFallback( + item: Props['item'] +): string | undefined { const isBrowser = useIsBrowser(); return useMemo(() => { - if (item.href) { + if (item.href && !item.linkUnlisted) { return item.href; } // In these cases, it's not necessary to render a fallback @@ -57,21 +61,40 @@ function useCategoryHrefWithSSRFallback(item) { if (isBrowser || !item.collapsible) { return undefined; } - return findFirstCategoryLink(item); + return findFirstSidebarItemLink(item); }, [item, isBrowser]); } -function CollapseButton({ categoryLabel, onClick }) { + +function CollapseButton({ + collapsed, + categoryLabel, + onClick, +}: { + collapsed: boolean; + categoryLabel: string; + onClick: ComponentProps<'button'>['onClick']; +}) { return ( + diff --git a/packages/documentation/src/theme/SiteMetadata/index.js b/packages/documentation/src/theme/SiteMetadata/index.tsx similarity index 59% rename from packages/documentation/src/theme/SiteMetadata/index.js rename to packages/documentation/src/theme/SiteMetadata/index.tsx index f2f5e3bf751..15f7381e034 100644 --- a/packages/documentation/src/theme/SiteMetadata/index.js +++ b/packages/documentation/src/theme/SiteMetadata/index.tsx @@ -1,34 +1,36 @@ -/* - * SPDX-FileCopyrightText: 2023 Siemens AG - * - * SPDX-License-Identifier: MIT - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - +import React from 'react'; import Head from '@docusaurus/Head'; -import { useLocation } from '@docusaurus/router'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import useBaseUrl from '@docusaurus/useBaseUrl'; import { PageMetadata, useThemeConfig } from '@docusaurus/theme-common'; import { DEFAULT_SEARCH_TAG, useAlternatePageUtils, + keyboardFocusedClassName, } from '@docusaurus/theme-common/internal'; -import useBaseUrl from '@docusaurus/useBaseUrl'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import { getDefaultTheme } from '@site/src/components/config'; +import { useLocation } from '@docusaurus/router'; +import { applyTrailingSlash } from '@docusaurus/utils-common'; import SearchMetadata from '@theme/SearchMetadata'; -import React, { useEffect } from 'react'; // TODO move to SiteMetadataDefaults or theme-common ? // Useful for i18n/SEO // See https://developers.google.com/search/docs/advanced/crawling/localized-versions // See https://github.com/facebook/docusaurus/issues/3317 -function AlternateLangHeaders() { +function AlternateLangHeaders(): JSX.Element { const { - i18n: { defaultLocale, localeConfigs }, + i18n: { currentLocale, defaultLocale, localeConfigs }, } = useDocusaurusContext(); const alternatePageUtils = useAlternatePageUtils(); + + const currentHtmlLang = localeConfigs[currentLocale]!.htmlLang; + + // HTML lang is a BCP 47 tag, but the Open Graph protocol requires + // using underscores instead of dashes. + // See https://ogp.me/#optional + // See https://en.wikipedia.org/wiki/IETF_language_tag) + const bcp47ToOpenGraphLocale = (code: string): string => + code.replace('-', '_'); + // Note: it is fine to use both "x-default" and "en" to target the same url // See https://www.searchviu.com/en/multiple-hreflang-tags-one-url/ return ( @@ -52,23 +54,49 @@ function AlternateLangHeaders() { })} hrefLang="x-default" /> + + + {Object.values(localeConfigs) + .filter((config) => currentHtmlLang !== config.htmlLang) + .map((config) => ( + + ))} ); } + // Default canonical url inferred from current page location pathname function useDefaultCanonicalUrl() { const { - siteConfig: { url: siteUrl }, + siteConfig: { url: siteUrl, baseUrl, trailingSlash }, } = useDocusaurusContext(); + + // TODO using useLocation().pathname is not a super idea + // See https://github.com/facebook/docusaurus/issues/9170 const { pathname } = useLocation(); - return siteUrl + useBaseUrl(pathname); + + const canonicalPathname = applyTrailingSlash(useBaseUrl(pathname), { + trailingSlash, + baseUrl, + }); + + return siteUrl + canonicalPathname; } + // TODO move to SiteMetadataDefaults or theme-common ? -function CanonicalUrlHeaders({ permalink }) { +function CanonicalUrlHeaders({ permalink }: { permalink?: string }) { const { siteConfig: { url: siteUrl }, } = useDocusaurusContext(); const defaultCanonicalUrl = useDefaultCanonicalUrl(); + const canonicalUrl = permalink ? `${siteUrl}${permalink}` : defaultCanonicalUrl; @@ -79,24 +107,23 @@ function CanonicalUrlHeaders({ permalink }) { ); } -export default function SiteMetadata() { + +export default function SiteMetadata(): JSX.Element { const { i18n: { currentLocale }, } = useDocusaurusContext(); + // TODO maybe move these 2 themeConfig to siteConfig? // These seems useful for other themes as well const { metadata, image: defaultImage } = useThemeConfig(); - const context = useDocusaurusContext(); - - useEffect(() => { - document.body.classList.add(getDefaultTheme(context)); - }, [context]); return ( <> - + {/* The keyboard focus class name need to be applied when SSR so links + are outlined when JS is disabled */} + {defaultImage && } @@ -108,11 +135,11 @@ export default function SiteMetadata() { {/* - It's important to have an additional element here, as it allows - react-helmet to override default metadata values set in previous - like "twitter:card". In same Head, the same meta would appear twice - instead of overriding. - */} + It's important to have an additional element here, as it allows + react-helmet to override default metadata values set in previous + like "twitter:card". In same Head, the same meta would appear twice + instead of overriding. + */} {/* Yes, "metadatum" is the grammatically correct term */} {metadata.map((metadatum, i) => ( @@ -123,7 +150,10 @@ export default function SiteMetadata() { - + ); diff --git a/packages/documentation/static/img/github.svg b/packages/documentation/static/img/github.svg index 98f1a1b47ce..048c97d22d9 100644 --- a/packages/documentation/static/img/github.svg +++ b/packages/documentation/static/img/github.svg @@ -1 +1 @@ - + diff --git a/packages/documentation/static/img/logo-640.png b/packages/documentation/static/img/logo-640.png deleted file mode 100644 index b28e1ed2907ef6493a445c82f31c428220178bf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27959 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