diff --git a/.github/actions/e2e-atomic-angular/action.yml b/.github/actions/e2e-atomic-angular/action.yml index 36bc42951fa..3712085a4f8 100644 --- a/.github/actions/e2e-atomic-angular/action.yml +++ b/.github/actions/e2e-atomic-angular/action.yml @@ -19,7 +19,7 @@ runs: wait-on-timeout: 600000 install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: angular-screenshots diff --git a/.github/actions/e2e-atomic-next/action.yml b/.github/actions/e2e-atomic-next/action.yml index 6d550fceba1..1e89edc89a1 100644 --- a/.github/actions/e2e-atomic-next/action.yml +++ b/.github/actions/e2e-atomic-next/action.yml @@ -19,7 +19,7 @@ runs: install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: next-screenshots diff --git a/.github/actions/e2e-atomic-react/action.yml b/.github/actions/e2e-atomic-react/action.yml index 81f32585e4d..3f3994a5dcb 100644 --- a/.github/actions/e2e-atomic-react/action.yml +++ b/.github/actions/e2e-atomic-react/action.yml @@ -18,7 +18,7 @@ runs: wait-on-timeout: 600000 install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: react-screenshots diff --git a/.github/actions/e2e-atomic-screenshots/action.yml b/.github/actions/e2e-atomic-screenshots/action.yml index 76190d0b5d8..bbb437a813c 100644 --- a/.github/actions/e2e-atomic-screenshots/action.yml +++ b/.github/actions/e2e-atomic-screenshots/action.yml @@ -21,7 +21,7 @@ runs: wait-on-timeout: 600000 install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: cancelled() || failure() || success() with: name: result-lists-screenshots diff --git a/.github/actions/e2e-atomic/action.yml b/.github/actions/e2e-atomic/action.yml index d35dcdfb723..6e3003e52a9 100644 --- a/.github/actions/e2e-atomic/action.yml +++ b/.github/actions/e2e-atomic/action.yml @@ -34,7 +34,7 @@ runs: GITHUB_TOKEN: ${{ inputs.github-token }} SPLIT: ${{ inputs.SPLIT }} SPLIT_INDEX: ${{ inputs.SPLIT_INDEX }} - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: atomic-e2e-screenshots-${{ inputs.spec }} diff --git a/.github/actions/e2e-headless-ssr-app-dev/action.yml b/.github/actions/e2e-headless-ssr-app-dev/action.yml index 9fd6978fab3..dfc771b2716 100644 --- a/.github/actions/e2e-headless-ssr-app-dev/action.yml +++ b/.github/actions/e2e-headless-ssr-app-dev/action.yml @@ -19,7 +19,7 @@ runs: install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: ssr-app-dev-screenshots diff --git a/.github/actions/e2e-headless-ssr-app-prod/action.yml b/.github/actions/e2e-headless-ssr-app-prod/action.yml index 9a83626e0c5..71daea3e6b6 100644 --- a/.github/actions/e2e-headless-ssr-app-prod/action.yml +++ b/.github/actions/e2e-headless-ssr-app-prod/action.yml @@ -19,7 +19,7 @@ runs: install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: ssr-app-prd-screenshots diff --git a/.github/actions/e2e-headless-ssr-pages-dev/action.yml b/.github/actions/e2e-headless-ssr-pages-dev/action.yml index 17ff3a5e5bf..66c8637c711 100644 --- a/.github/actions/e2e-headless-ssr-pages-dev/action.yml +++ b/.github/actions/e2e-headless-ssr-pages-dev/action.yml @@ -19,7 +19,7 @@ runs: install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: ssr-page-dev-screenshots diff --git a/.github/actions/e2e-headless-ssr-pages-prod/action.yml b/.github/actions/e2e-headless-ssr-pages-prod/action.yml index 4ac2f52f1ad..351ca95fc36 100644 --- a/.github/actions/e2e-headless-ssr-pages-prod/action.yml +++ b/.github/actions/e2e-headless-ssr-pages-prod/action.yml @@ -19,7 +19,7 @@ runs: install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: ssr-pages-prd-screenshots diff --git a/.github/actions/e2e-iife/action.yml b/.github/actions/e2e-iife/action.yml index 4bb5a72dcbf..5b2a1f8c7ae 100644 --- a/.github/actions/e2e-iife/action.yml +++ b/.github/actions/e2e-iife/action.yml @@ -19,7 +19,7 @@ runs: install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: iife-screenshots diff --git a/.github/actions/e2e-quantic/action.yml b/.github/actions/e2e-quantic/action.yml index c07c20527a2..c2ce1bce83d 100644 --- a/.github/actions/e2e-quantic/action.yml +++ b/.github/actions/e2e-quantic/action.yml @@ -26,7 +26,7 @@ runs: config: reporter=cypress/reporters/detailed-reporter.js env: GITHUB_TOKEN: ${{ inputs.github-token }} - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: quantic-screenshots-${{ inputs.spec}} diff --git a/.github/actions/e2e-stencil/action.yml b/.github/actions/e2e-stencil/action.yml index efaebc575fa..aa6051fac3d 100644 --- a/.github/actions/e2e-stencil/action.yml +++ b/.github/actions/e2e-stencil/action.yml @@ -18,7 +18,7 @@ runs: wait-on-timeout: 600000 install: false record: false - - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 + - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 # v3 if: failure() with: name: stencil-sample-screenshots diff --git a/.github/actions/merge-playwright-reports/action.yml b/.github/actions/merge-playwright-reports/action.yml index 8bc8c57ab9f..5bf7cd1ef91 100644 --- a/.github/actions/merge-playwright-reports/action.yml +++ b/.github/actions/merge-playwright-reports/action.yml @@ -15,7 +15,7 @@ runs: shell: bash - name: Upload HTML report - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 with: name: atomic-playwright-report path: packages/atomic/playwright-report diff --git a/.github/actions/playwright-atomic-hosted-pages/action.yml b/.github/actions/playwright-atomic-hosted-pages/action.yml index 6724bdfe664..9f0b6b274c9 100644 --- a/.github/actions/playwright-atomic-hosted-pages/action.yml +++ b/.github/actions/playwright-atomic-hosted-pages/action.yml @@ -11,7 +11,7 @@ runs: run: npx playwright test working-directory: packages/atomic-hosted-page shell: bash - - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4 + - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 if: always() with: name: atomic-hosted-page-playwright-report diff --git a/.github/actions/playwright-atomic/action.yml b/.github/actions/playwright-atomic/action.yml index 0e877aa7bc2..6ed86e10c5b 100644 --- a/.github/actions/playwright-atomic/action.yml +++ b/.github/actions/playwright-atomic/action.yml @@ -18,7 +18,7 @@ runs: run: npx playwright test --shard=${{ inputs.shardIndex }}/${{ inputs.shardTotal }} working-directory: packages/atomic shell: bash - - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4 + - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 if: always() with: name: blob-report-${{ matrix.shardIndex }} diff --git a/package-lock.json b/package-lock.json index 55ee44c212f..d0dfb45e0cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,7 +67,7 @@ "cspell": "8.12.1", "cz-conventional-changelog": "3.3.0", "detect-indent": "7.0.1", - "esbuild": "0.23.0", + "esbuild": "0.23.1", "esbuild-plugin-alias": "0.2.1", "esbuild-plugin-umd-wrapper": "2.0.3", "eslint": "8.57.0", @@ -5914,9 +5914,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", "cpu": [ "arm64" ], @@ -28467,9 +28467,9 @@ } }, "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "dev": true, "hasInstallScript": true, "bin": { @@ -28479,30 +28479,30 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/esbuild-plugin-alias": { @@ -28542,9 +28542,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "cpu": [ "ppc64" ], @@ -28558,9 +28558,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -28574,9 +28574,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -28590,9 +28590,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -28606,9 +28606,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], @@ -28622,9 +28622,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -28638,9 +28638,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -28654,9 +28654,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -28670,9 +28670,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -28686,9 +28686,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -28702,9 +28702,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -28718,9 +28718,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -28734,9 +28734,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -28750,9 +28750,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -28766,9 +28766,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -28782,9 +28782,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -28798,9 +28798,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -28814,9 +28814,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -28830,9 +28830,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -28846,9 +28846,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -28862,9 +28862,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -28878,9 +28878,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -28894,9 +28894,9 @@ } }, "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index bc3c62debc1..d6990785023 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "cspell": "8.12.1", "cz-conventional-changelog": "3.3.0", "detect-indent": "7.0.1", - "esbuild": "0.23.0", + "esbuild": "0.23.1", "esbuild-plugin-alias": "0.2.1", "esbuild-plugin-umd-wrapper": "2.0.3", "eslint": "8.57.0", diff --git a/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/atomic-angular.module.ts b/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/atomic-angular.module.ts index cd067257356..d467989730f 100644 --- a/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/atomic-angular.module.ts +++ b/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/atomic-angular.module.ts @@ -11,19 +11,33 @@ AtomicAutomaticFacetGenerator, AtomicBreadbox, AtomicCategoryFacet, AtomicColorFacet, +AtomicCommerceBreadbox, AtomicCommerceCategoryFacet, +AtomicCommerceDidYouMean, AtomicCommerceFacet, +AtomicCommerceFacetNumberInput, AtomicCommerceFacets, AtomicCommerceInterface, +AtomicCommerceLayout, AtomicCommerceLoadMoreProducts, +AtomicCommerceNoProducts, +AtomicCommerceNumericFacet, AtomicCommercePager, AtomicCommerceProductList, AtomicCommerceProductsPerPage, +AtomicCommerceQueryError, AtomicCommerceQuerySummary, +AtomicCommerceRecommendationInterface, +AtomicCommerceRecommendationList, AtomicCommerceRefineModal, AtomicCommerceRefineToggle, AtomicCommerceSearchBox, +AtomicCommerceSearchBoxInstantProducts, +AtomicCommerceSearchBoxQuerySuggestions, +AtomicCommerceSearchBoxRecentQueries, +AtomicCommerceSortDropdown, AtomicCommerceText, +AtomicCommerceTimeframeFacet, AtomicComponentError, AtomicDidYouMean, AtomicExternal, @@ -38,6 +52,7 @@ AtomicFrequentlyBoughtTogether, AtomicGeneratedAnswer, AtomicHtml, AtomicIcon, +AtomicInsightUserActionsTimeline, AtomicLayoutSection, AtomicLoadMoreResults, AtomicNoResults, @@ -46,7 +61,26 @@ AtomicNumericFacet, AtomicNumericRange, AtomicPager, AtomicPopover, +AtomicProduct, +AtomicProductChildren, +AtomicProductDescription, +AtomicProductFieldCondition, +AtomicProductImage, +AtomicProductLink, +AtomicProductNumericFieldValue, +AtomicProductPrice, +AtomicProductRating, +AtomicProductSectionActions, +AtomicProductSectionBadges, +AtomicProductSectionBottomMetadata, +AtomicProductSectionChildren, +AtomicProductSectionDescription, +AtomicProductSectionEmphasized, +AtomicProductSectionMetadata, +AtomicProductSectionName, +AtomicProductSectionVisual, AtomicProductTemplate, +AtomicProductText, AtomicQueryError, AtomicQuerySummary, AtomicQuickview, @@ -122,19 +156,33 @@ AtomicAutomaticFacetGenerator, AtomicBreadbox, AtomicCategoryFacet, AtomicColorFacet, +AtomicCommerceBreadbox, AtomicCommerceCategoryFacet, +AtomicCommerceDidYouMean, AtomicCommerceFacet, +AtomicCommerceFacetNumberInput, AtomicCommerceFacets, AtomicCommerceInterface, +AtomicCommerceLayout, AtomicCommerceLoadMoreProducts, +AtomicCommerceNoProducts, +AtomicCommerceNumericFacet, AtomicCommercePager, AtomicCommerceProductList, AtomicCommerceProductsPerPage, +AtomicCommerceQueryError, AtomicCommerceQuerySummary, +AtomicCommerceRecommendationInterface, +AtomicCommerceRecommendationList, AtomicCommerceRefineModal, AtomicCommerceRefineToggle, AtomicCommerceSearchBox, +AtomicCommerceSearchBoxInstantProducts, +AtomicCommerceSearchBoxQuerySuggestions, +AtomicCommerceSearchBoxRecentQueries, +AtomicCommerceSortDropdown, AtomicCommerceText, +AtomicCommerceTimeframeFacet, AtomicComponentError, AtomicDidYouMean, AtomicExternal, @@ -149,6 +197,7 @@ AtomicFrequentlyBoughtTogether, AtomicGeneratedAnswer, AtomicHtml, AtomicIcon, +AtomicInsightUserActionsTimeline, AtomicLayoutSection, AtomicLoadMoreResults, AtomicNoResults, @@ -157,7 +206,26 @@ AtomicNumericFacet, AtomicNumericRange, AtomicPager, AtomicPopover, +AtomicProduct, +AtomicProductChildren, +AtomicProductDescription, +AtomicProductFieldCondition, +AtomicProductImage, +AtomicProductLink, +AtomicProductNumericFieldValue, +AtomicProductPrice, +AtomicProductRating, +AtomicProductSectionActions, +AtomicProductSectionBadges, +AtomicProductSectionBottomMetadata, +AtomicProductSectionChildren, +AtomicProductSectionDescription, +AtomicProductSectionEmphasized, +AtomicProductSectionMetadata, +AtomicProductSectionName, +AtomicProductSectionVisual, AtomicProductTemplate, +AtomicProductText, AtomicQueryError, AtomicQuerySummary, AtomicQuickview, diff --git a/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/components.ts b/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/components.ts index 85e7fc1b9f5..035e95737fc 100644 --- a/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/components.ts +++ b/packages/atomic-angular/projects/atomic-angular/src/lib/stencil-generated/components.ts @@ -138,6 +138,28 @@ export class AtomicColorFacet { export declare interface AtomicColorFacet extends Components.AtomicColorFacet {} +@ProxyCmp({ + inputs: ['pathLimit'] +}) +@Component({ + selector: 'atomic-commerce-breadbox', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['pathLimit'], +}) +export class AtomicCommerceBreadbox { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceBreadbox extends Components.AtomicCommerceBreadbox {} + + @ProxyCmp({ inputs: ['facet', 'field', 'isCollapsed', 'summary'] }) @@ -160,6 +182,27 @@ export class AtomicCommerceCategoryFacet { export declare interface AtomicCommerceCategoryFacet extends Components.AtomicCommerceCategoryFacet {} +@ProxyCmp({ +}) +@Component({ + selector: 'atomic-commerce-did-you-mean', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [], +}) +export class AtomicCommerceDidYouMean { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceDidYouMean extends Components.AtomicCommerceDidYouMean {} + + @ProxyCmp({ inputs: ['facet', 'field', 'isCollapsed', 'summary'] }) @@ -182,6 +225,32 @@ export class AtomicCommerceFacet { export declare interface AtomicCommerceFacet extends Components.AtomicCommerceFacet {} +@ProxyCmp({ + inputs: ['bindings', 'facet', 'label', 'range'] +}) +@Component({ + selector: 'atomic-commerce-facet-number-input', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['bindings', 'facet', 'label', 'range'], +}) +export class AtomicCommerceFacetNumberInput { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + proxyOutputs(this, this.el, ['atomic/numberInputApply']); + } +} + + +export declare interface AtomicCommerceFacetNumberInput extends Components.AtomicCommerceFacetNumberInput { + + 'atomic/numberInputApply': EventEmitter>; +} + + @ProxyCmp({ inputs: ['collapseFacetsAfter'] }) @@ -227,6 +296,28 @@ export class AtomicCommerceInterface { export declare interface AtomicCommerceInterface extends Components.AtomicCommerceInterface {} +@ProxyCmp({ + inputs: ['mobileBreakpoint'] +}) +@Component({ + selector: 'atomic-commerce-layout', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['mobileBreakpoint'], +}) +export class AtomicCommerceLayout { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceLayout extends Components.AtomicCommerceLayout {} + + @ProxyCmp({ }) @Component({ @@ -248,6 +339,49 @@ export class AtomicCommerceLoadMoreProducts { export declare interface AtomicCommerceLoadMoreProducts extends Components.AtomicCommerceLoadMoreProducts {} +@ProxyCmp({ +}) +@Component({ + selector: 'atomic-commerce-no-products', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [], +}) +export class AtomicCommerceNoProducts { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceNoProducts extends Components.AtomicCommerceNoProducts {} + + +@ProxyCmp({ + inputs: ['facet', 'field', 'isCollapsed', 'summary'] +}) +@Component({ + selector: 'atomic-commerce-numeric-facet', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['facet', 'field', 'isCollapsed', 'summary'], +}) +export class AtomicCommerceNumericFacet { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceNumericFacet extends Components.AtomicCommerceNumericFacet {} + + @ProxyCmp({ inputs: ['nextButtonIcon', 'numberOfPages', 'previousButtonIcon'] }) @@ -263,29 +397,668 @@ export class AtomicCommercePager { constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); this.el = r.nativeElement; - proxyOutputs(this, this.el, ['atomic/scrollToTop']); + proxyOutputs(this, this.el, ['atomic/scrollToTop']); + } +} + + +export declare interface AtomicCommercePager extends Components.AtomicCommercePager { + + 'atomic/scrollToTop': EventEmitter>; +} + + +@ProxyCmp({ + inputs: ['density', 'display', 'gridCellLinkTarget', 'imageSize', 'numberOfPlaceholders'], + methods: ['setRenderFunction'] +}) +@Component({ + selector: 'atomic-commerce-product-list', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['density', 'display', 'gridCellLinkTarget', 'imageSize', 'numberOfPlaceholders'], +}) +export class AtomicCommerceProductList { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceProductList extends Components.AtomicCommerceProductList {} + + +@ProxyCmp({ + inputs: ['choicesDisplayed', 'initialChoice'] +}) +@Component({ + selector: 'atomic-commerce-products-per-page', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['choicesDisplayed', 'initialChoice'], +}) +export class AtomicCommerceProductsPerPage { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + proxyOutputs(this, this.el, ['atomic/scrollToTop']); + } +} + + +export declare interface AtomicCommerceProductsPerPage extends Components.AtomicCommerceProductsPerPage { + + 'atomic/scrollToTop': EventEmitter>; +} + + +@ProxyCmp({ +}) +@Component({ + selector: 'atomic-commerce-query-error', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [], +}) +export class AtomicCommerceQueryError { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceQueryError extends Components.AtomicCommerceQueryError {} + + +@ProxyCmp({ +}) +@Component({ + selector: 'atomic-commerce-query-summary', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [], +}) +export class AtomicCommerceQuerySummary { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceQuerySummary extends Components.AtomicCommerceQuerySummary {} + + +@ProxyCmp({ + inputs: ['CspNonce', 'analytics', 'engine', 'i18n', 'iconAssetsPath', 'language', 'languageAssetsPath', 'scrollContainer'], + methods: ['initializeWithEngine', 'getOrganizationEndpoints'] +}) +@Component({ + selector: 'atomic-commerce-recommendation-interface', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['CspNonce', 'analytics', 'engine', 'i18n', 'iconAssetsPath', 'language', 'languageAssetsPath', 'scrollContainer'], +}) +export class AtomicCommerceRecommendationInterface { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceRecommendationInterface extends Components.AtomicCommerceRecommendationInterface {} + + +@ProxyCmp({ + inputs: ['density', 'display', 'gridCellLinkTarget', 'headingLevel', 'imageSize', 'productId', 'productsPerPage', 'slotId'], + methods: ['setRenderFunction', 'previousPage', 'nextPage'] +}) +@Component({ + selector: 'atomic-commerce-recommendation-list', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['density', 'display', 'gridCellLinkTarget', 'headingLevel', 'imageSize', 'productId', 'productsPerPage', 'slotId'], +}) +export class AtomicCommerceRecommendationList { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceRecommendationList extends Components.AtomicCommerceRecommendationList {} + + +@ProxyCmp({ + inputs: ['collapseFacetsAfter', 'isOpen', 'openButton'] +}) +@Component({ + selector: 'atomic-commerce-refine-modal', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['collapseFacetsAfter', 'isOpen', 'openButton'], +}) +export class AtomicCommerceRefineModal { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceRefineModal extends Components.AtomicCommerceRefineModal {} + + +@ProxyCmp({ +}) +@Component({ + selector: 'atomic-commerce-refine-toggle', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [], +}) +export class AtomicCommerceRefineToggle { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceRefineToggle extends Components.AtomicCommerceRefineToggle {} + + +@ProxyCmp({ + inputs: ['clearFilters', 'disableSearch', 'minimumQueryLength', 'numberOfQueries', 'redirectionUrl', 'suggestionDelay', 'suggestionTimeout'] +}) +@Component({ + selector: 'atomic-commerce-search-box', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['clearFilters', 'disableSearch', 'minimumQueryLength', 'numberOfQueries', 'redirectionUrl', 'suggestionDelay', 'suggestionTimeout'], +}) +export class AtomicCommerceSearchBox { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + proxyOutputs(this, this.el, ['redirect']); + } +} + + +import type { RedirectionPayload as IAtomicCommerceSearchBoxRedirectionPayload } from '@coveo/atomic'; + +export declare interface AtomicCommerceSearchBox extends Components.AtomicCommerceSearchBox { + /** + * Event that is emitted when a standalone search box redirection is triggered. By default, the search box will directly change the URL and redirect accordingly, so if you want to handle the redirection differently, use this event. + +Example: +```html + +... + +``` + */ + redirect: EventEmitter>; +} + + +@ProxyCmp({ + inputs: ['ariaLabelGenerator', 'density', 'imageSize'], + methods: ['setRenderFunction'] +}) +@Component({ + selector: 'atomic-commerce-search-box-instant-products', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['ariaLabelGenerator', 'density', 'imageSize'], +}) +export class AtomicCommerceSearchBoxInstantProducts { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceSearchBoxInstantProducts extends Components.AtomicCommerceSearchBoxInstantProducts {} + + +@ProxyCmp({ + inputs: ['icon', 'maxWithQuery', 'maxWithoutQuery'] +}) +@Component({ + selector: 'atomic-commerce-search-box-query-suggestions', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['icon', 'maxWithQuery', 'maxWithoutQuery'], +}) +export class AtomicCommerceSearchBoxQuerySuggestions { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceSearchBoxQuerySuggestions extends Components.AtomicCommerceSearchBoxQuerySuggestions {} + + +@ProxyCmp({ + inputs: ['icon', 'maxWithQuery', 'maxWithoutQuery'] +}) +@Component({ + selector: 'atomic-commerce-search-box-recent-queries', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['icon', 'maxWithQuery', 'maxWithoutQuery'], +}) +export class AtomicCommerceSearchBoxRecentQueries { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceSearchBoxRecentQueries extends Components.AtomicCommerceSearchBoxRecentQueries {} + + +@ProxyCmp({ +}) +@Component({ + selector: 'atomic-commerce-sort-dropdown', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [], +}) +export class AtomicCommerceSortDropdown { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceSortDropdown extends Components.AtomicCommerceSortDropdown {} + + +@ProxyCmp({ + inputs: ['count', 'value'] +}) +@Component({ + selector: 'atomic-commerce-text', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['count', 'value'], +}) +export class AtomicCommerceText { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceText extends Components.AtomicCommerceText {} + + +@ProxyCmp({ + inputs: ['facet', 'field', 'isCollapsed', 'summary'] +}) +@Component({ + selector: 'atomic-commerce-timeframe-facet', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['facet', 'field', 'isCollapsed', 'summary'], +}) +export class AtomicCommerceTimeframeFacet { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicCommerceTimeframeFacet extends Components.AtomicCommerceTimeframeFacet {} + + +@ProxyCmp({ + inputs: ['element', 'error'] +}) +@Component({ + selector: 'atomic-component-error', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['element', 'error'], +}) +export class AtomicComponentError { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicComponentError extends Components.AtomicComponentError {} + + +@ProxyCmp({ + inputs: ['automaticallyCorrectQuery', 'queryCorrectionMode'] +}) +@Component({ + selector: 'atomic-did-you-mean', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['automaticallyCorrectQuery', 'queryCorrectionMode'], +}) +export class AtomicDidYouMean { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicDidYouMean extends Components.AtomicDidYouMean {} + + +@ProxyCmp({ + inputs: ['boundInterface', 'selector'] +}) +@Component({ + selector: 'atomic-external', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['boundInterface', 'selector'], +}) +export class AtomicExternal { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicExternal extends Components.AtomicExternal {} + + +@ProxyCmp({ + inputs: ['allowedValues', 'customSort', 'dependsOn', 'displayValuesAs', 'enableExclusion', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'resultsMustMatch', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withSearch'] +}) +@Component({ + selector: 'atomic-facet', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['allowedValues', 'customSort', 'dependsOn', 'displayValuesAs', 'enableExclusion', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'resultsMustMatch', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withSearch'], +}) +export class AtomicFacet { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFacet extends Components.AtomicFacet {} + + +@ProxyCmp({ + inputs: ['collapseFacetsAfter'] +}) +@Component({ + selector: 'atomic-facet-manager', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['collapseFacetsAfter'], +}) +export class AtomicFacetManager { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFacetManager extends Components.AtomicFacetManager {} + + +@ProxyCmp({ + inputs: ['ifDefined', 'ifNotDefined'] +}) +@Component({ + selector: 'atomic-field-condition', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['ifDefined', 'ifNotDefined'], +}) +export class AtomicFieldCondition { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFieldCondition extends Components.AtomicFieldCondition {} + + +@ProxyCmp({ + inputs: ['childField', 'collectionField', 'density', 'imageSize', 'numberOfFoldedResults', 'parentField', 'tabsExcluded', 'tabsIncluded'], + methods: ['setRenderFunction'] +}) +@Component({ + selector: 'atomic-folded-result-list', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['childField', 'collectionField', 'density', 'imageSize', 'numberOfFoldedResults', 'parentField', 'tabsExcluded', 'tabsIncluded'], +}) +export class AtomicFoldedResultList { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFoldedResultList extends Components.AtomicFoldedResultList {} + + +@ProxyCmp({ + inputs: ['currency'] +}) +@Component({ + selector: 'atomic-format-currency', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['currency'], +}) +export class AtomicFormatCurrency { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFormatCurrency extends Components.AtomicFormatCurrency {} + + +@ProxyCmp({ + inputs: ['maximumFractionDigits', 'maximumSignificantDigits', 'minimumFractionDigits', 'minimumIntegerDigits', 'minimumSignificantDigits'] +}) +@Component({ + selector: 'atomic-format-number', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['maximumFractionDigits', 'maximumSignificantDigits', 'minimumFractionDigits', 'minimumIntegerDigits', 'minimumSignificantDigits'], +}) +export class AtomicFormatNumber { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFormatNumber extends Components.AtomicFormatNumber {} + + +@ProxyCmp({ + inputs: ['unit', 'unitDisplay'] +}) +@Component({ + selector: 'atomic-format-unit', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['unit', 'unitDisplay'], +}) +export class AtomicFormatUnit { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFormatUnit extends Components.AtomicFormatUnit {} + + +@ProxyCmp({ +}) +@Component({ + selector: 'atomic-frequently-bought-together', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [], +}) +export class AtomicFrequentlyBoughtTogether { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicFrequentlyBoughtTogether extends Components.AtomicFrequentlyBoughtTogether {} + + +@ProxyCmp({ + inputs: ['answerStyle', 'collapsible', 'withRephraseButtons', 'withToggle'] +}) +@Component({ + selector: 'atomic-generated-answer', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['answerStyle', 'collapsible', 'withRephraseButtons', 'withToggle'], +}) +export class AtomicGeneratedAnswer { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface AtomicGeneratedAnswer extends Components.AtomicGeneratedAnswer {} + + +@ProxyCmp({ + inputs: ['sanitize', 'value'] +}) +@Component({ + selector: 'atomic-html', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['sanitize', 'value'], +}) +export class AtomicHtml { + protected el: HTMLElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; } } -export declare interface AtomicCommercePager extends Components.AtomicCommercePager { - - 'atomic/scrollToTop': EventEmitter>; -} +export declare interface AtomicHtml extends Components.AtomicHtml {} @ProxyCmp({ - inputs: ['density', 'display', 'gridCellLinkTarget', 'imageSize', 'numberOfPlaceholders'], - methods: ['setRenderFunction'] + inputs: ['icon'] }) @Component({ - selector: 'atomic-commerce-product-list', + selector: 'atomic-icon', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['density', 'display', 'gridCellLinkTarget', 'imageSize', 'numberOfPlaceholders'], + inputs: ['icon'], }) -export class AtomicCommerceProductList { +export class AtomicIcon { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -294,45 +1067,42 @@ export class AtomicCommerceProductList { } -export declare interface AtomicCommerceProductList extends Components.AtomicCommerceProductList {} +export declare interface AtomicIcon extends Components.AtomicIcon {} @ProxyCmp({ - inputs: ['choicesDisplayed', 'initialChoice'] + inputs: ['ticketCreationDateTime', 'userId'] }) @Component({ - selector: 'atomic-commerce-products-per-page', + selector: 'atomic-insight-user-actions-timeline', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['choicesDisplayed', 'initialChoice'], + inputs: ['ticketCreationDateTime', 'userId'], }) -export class AtomicCommerceProductsPerPage { +export class AtomicInsightUserActionsTimeline { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); this.el = r.nativeElement; - proxyOutputs(this, this.el, ['atomic/scrollToTop']); } } -export declare interface AtomicCommerceProductsPerPage extends Components.AtomicCommerceProductsPerPage { - - 'atomic/scrollToTop': EventEmitter>; -} +export declare interface AtomicInsightUserActionsTimeline extends Components.AtomicInsightUserActionsTimeline {} @ProxyCmp({ + inputs: ['maxWidth', 'minWidth', 'section'] }) @Component({ - selector: 'atomic-commerce-query-summary', + selector: 'atomic-layout-section', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: [], + inputs: ['maxWidth', 'minWidth', 'section'], }) -export class AtomicCommerceQuerySummary { +export class AtomicLayoutSection { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -341,20 +1111,19 @@ export class AtomicCommerceQuerySummary { } -export declare interface AtomicCommerceQuerySummary extends Components.AtomicCommerceQuerySummary {} +export declare interface AtomicLayoutSection extends Components.AtomicLayoutSection {} @ProxyCmp({ - inputs: ['collapseFacetsAfter', 'isOpen', 'openButton'] }) @Component({ - selector: 'atomic-commerce-refine-modal', + selector: 'atomic-load-more-results', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['collapseFacetsAfter', 'isOpen', 'openButton'], + inputs: [], }) -export class AtomicCommerceRefineModal { +export class AtomicLoadMoreResults { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -363,19 +1132,20 @@ export class AtomicCommerceRefineModal { } -export declare interface AtomicCommerceRefineModal extends Components.AtomicCommerceRefineModal {} +export declare interface AtomicLoadMoreResults extends Components.AtomicLoadMoreResults {} @ProxyCmp({ + inputs: ['enableCancelLastAction'] }) @Component({ - selector: 'atomic-commerce-refine-toggle', + selector: 'atomic-no-results', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: [], + inputs: ['enableCancelLastAction'], }) -export class AtomicCommerceRefineToggle { +export class AtomicNoResults { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -384,62 +1154,42 @@ export class AtomicCommerceRefineToggle { } -export declare interface AtomicCommerceRefineToggle extends Components.AtomicCommerceRefineToggle {} +export declare interface AtomicNoResults extends Components.AtomicNoResults {} @ProxyCmp({ - inputs: ['clearFilters', 'disableSearch', 'minimumQueryLength', 'numberOfQueries', 'redirectionUrl', 'suggestionDelay', 'suggestionTimeout'] + inputs: ['headingLevel', 'icon'] }) @Component({ - selector: 'atomic-commerce-search-box', + selector: 'atomic-notifications', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['clearFilters', 'disableSearch', 'minimumQueryLength', 'numberOfQueries', 'redirectionUrl', 'suggestionDelay', 'suggestionTimeout'], + inputs: ['headingLevel', 'icon'], }) -export class AtomicCommerceSearchBox { +export class AtomicNotifications { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); this.el = r.nativeElement; - proxyOutputs(this, this.el, ['redirect']); } } -import type { RedirectionPayload as IAtomicCommerceSearchBoxRedirectionPayload } from '@coveo/atomic'; - -export declare interface AtomicCommerceSearchBox extends Components.AtomicCommerceSearchBox { - /** - * Event that is emitted when a standalone search box redirection is triggered. By default, the search box will directly change the URL and redirect accordingly, so if you want to handle the redirection differently, use this event. - -Example: -```html - -... - -``` - */ - redirect: EventEmitter>; -} +export declare interface AtomicNotifications extends Components.AtomicNotifications {} @ProxyCmp({ - inputs: ['count', 'value'] + inputs: ['dependsOn', 'displayValuesAs', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'rangeAlgorithm', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withInput'] }) @Component({ - selector: 'atomic-commerce-text', + selector: 'atomic-numeric-facet', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['count', 'value'], + inputs: ['dependsOn', 'displayValuesAs', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'rangeAlgorithm', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withInput'], }) -export class AtomicCommerceText { +export class AtomicNumericFacet { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -448,20 +1198,20 @@ export class AtomicCommerceText { } -export declare interface AtomicCommerceText extends Components.AtomicCommerceText {} +export declare interface AtomicNumericFacet extends Components.AtomicNumericFacet {} @ProxyCmp({ - inputs: ['element', 'error'] + inputs: ['end', 'endInclusive', 'label', 'start'] }) @Component({ - selector: 'atomic-component-error', + selector: 'atomic-numeric-range', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['element', 'error'], + inputs: ['end', 'endInclusive', 'label', 'start'], }) -export class AtomicComponentError { +export class AtomicNumericRange { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -470,42 +1220,45 @@ export class AtomicComponentError { } -export declare interface AtomicComponentError extends Components.AtomicComponentError {} +export declare interface AtomicNumericRange extends Components.AtomicNumericRange {} @ProxyCmp({ - inputs: ['automaticallyCorrectQuery', 'queryCorrectionMode'] + inputs: ['nextButtonIcon', 'numberOfPages', 'previousButtonIcon'] }) @Component({ - selector: 'atomic-did-you-mean', + selector: 'atomic-pager', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['automaticallyCorrectQuery', 'queryCorrectionMode'], + inputs: ['nextButtonIcon', 'numberOfPages', 'previousButtonIcon'], }) -export class AtomicDidYouMean { +export class AtomicPager { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); this.el = r.nativeElement; + proxyOutputs(this, this.el, ['atomic/scrollToTop']); } } -export declare interface AtomicDidYouMean extends Components.AtomicDidYouMean {} +export declare interface AtomicPager extends Components.AtomicPager { + + 'atomic/scrollToTop': EventEmitter>; +} @ProxyCmp({ - inputs: ['boundInterface', 'selector'] }) @Component({ - selector: 'atomic-external', + selector: 'atomic-popover', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['boundInterface', 'selector'], + inputs: [], }) -export class AtomicExternal { +export class AtomicPopover { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -514,20 +1267,20 @@ export class AtomicExternal { } -export declare interface AtomicExternal extends Components.AtomicExternal {} +export declare interface AtomicPopover extends Components.AtomicPopover {} @ProxyCmp({ - inputs: ['allowedValues', 'customSort', 'dependsOn', 'displayValuesAs', 'enableExclusion', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'resultsMustMatch', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withSearch'] + inputs: ['classes', 'content', 'density', 'display', 'imageSize', 'interactiveProduct', 'linkContent', 'loadingFlag', 'product', 'renderingFunction', 'stopPropagation', 'store'] }) @Component({ - selector: 'atomic-facet', + selector: 'atomic-product', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['allowedValues', 'customSort', 'dependsOn', 'displayValuesAs', 'enableExclusion', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'resultsMustMatch', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withSearch'], + inputs: ['classes', 'content', 'density', 'display', 'imageSize', 'interactiveProduct', 'linkContent', 'loadingFlag', 'product', 'renderingFunction', 'stopPropagation', 'store'], }) -export class AtomicFacet { +export class AtomicProduct { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -536,42 +1289,48 @@ export class AtomicFacet { } -export declare interface AtomicFacet extends Components.AtomicFacet {} +export declare interface AtomicProduct extends Components.AtomicProduct {} @ProxyCmp({ - inputs: ['collapseFacetsAfter'] + inputs: ['fallback', 'field', 'label'] }) @Component({ - selector: 'atomic-facet-manager', + selector: 'atomic-product-children', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['collapseFacetsAfter'], + inputs: ['fallback', 'field', 'label'], }) -export class AtomicFacetManager { +export class AtomicProductChildren { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); this.el = r.nativeElement; + proxyOutputs(this, this.el, ['atomic/selectChildProduct']); } } -export declare interface AtomicFacetManager extends Components.AtomicFacetManager {} +import type { SelectChildProductEventArgs as IAtomicProductChildrenSelectChildProductEventArgs } from '@coveo/atomic'; + +export declare interface AtomicProductChildren extends Components.AtomicProductChildren { + + 'atomic/selectChildProduct': EventEmitter>; +} @ProxyCmp({ - inputs: ['ifDefined', 'ifNotDefined'] + inputs: ['field', 'truncateAfter'] }) @Component({ - selector: 'atomic-field-condition', + selector: 'atomic-product-description', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['ifDefined', 'ifNotDefined'], + inputs: ['field', 'truncateAfter'], }) -export class AtomicFieldCondition { +export class AtomicProductDescription { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -580,21 +1339,20 @@ export class AtomicFieldCondition { } -export declare interface AtomicFieldCondition extends Components.AtomicFieldCondition {} +export declare interface AtomicProductDescription extends Components.AtomicProductDescription {} @ProxyCmp({ - inputs: ['childField', 'collectionField', 'density', 'imageSize', 'numberOfFoldedResults', 'parentField', 'tabsExcluded', 'tabsIncluded'], - methods: ['setRenderFunction'] + inputs: ['ifDefined', 'ifNotDefined'] }) @Component({ - selector: 'atomic-folded-result-list', + selector: 'atomic-product-field-condition', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['childField', 'collectionField', 'density', 'imageSize', 'numberOfFoldedResults', 'parentField', 'tabsExcluded', 'tabsIncluded'], + inputs: ['ifDefined', 'ifNotDefined'], }) -export class AtomicFoldedResultList { +export class AtomicProductFieldCondition { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -603,20 +1361,21 @@ export class AtomicFoldedResultList { } -export declare interface AtomicFoldedResultList extends Components.AtomicFoldedResultList {} +export declare interface AtomicProductFieldCondition extends Components.AtomicProductFieldCondition {} @ProxyCmp({ - inputs: ['currency'] + inputs: ['fallback', 'field', 'imageAltField'], + methods: ['previousImage', 'nextImage', 'navigateToImage'] }) @Component({ - selector: 'atomic-format-currency', + selector: 'atomic-product-image', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['currency'], + inputs: ['fallback', 'field', 'imageAltField'], }) -export class AtomicFormatCurrency { +export class AtomicProductImage { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -625,20 +1384,20 @@ export class AtomicFormatCurrency { } -export declare interface AtomicFormatCurrency extends Components.AtomicFormatCurrency {} +export declare interface AtomicProductImage extends Components.AtomicProductImage {} @ProxyCmp({ - inputs: ['maximumFractionDigits', 'maximumSignificantDigits', 'minimumFractionDigits', 'minimumIntegerDigits', 'minimumSignificantDigits'] + inputs: ['hrefTemplate'] }) @Component({ - selector: 'atomic-format-number', + selector: 'atomic-product-link', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['maximumFractionDigits', 'maximumSignificantDigits', 'minimumFractionDigits', 'minimumIntegerDigits', 'minimumSignificantDigits'], + inputs: ['hrefTemplate'], }) -export class AtomicFormatNumber { +export class AtomicProductLink { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -647,20 +1406,20 @@ export class AtomicFormatNumber { } -export declare interface AtomicFormatNumber extends Components.AtomicFormatNumber {} +export declare interface AtomicProductLink extends Components.AtomicProductLink {} @ProxyCmp({ - inputs: ['unit', 'unitDisplay'] + inputs: ['field'] }) @Component({ - selector: 'atomic-format-unit', + selector: 'atomic-product-numeric-field-value', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['unit', 'unitDisplay'], + inputs: ['field'], }) -export class AtomicFormatUnit { +export class AtomicProductNumericFieldValue { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -669,19 +1428,19 @@ export class AtomicFormatUnit { } -export declare interface AtomicFormatUnit extends Components.AtomicFormatUnit {} +export declare interface AtomicProductNumericFieldValue extends Components.AtomicProductNumericFieldValue {} @ProxyCmp({ }) @Component({ - selector: 'atomic-frequently-bought-together', + selector: 'atomic-product-price', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property inputs: [], }) -export class AtomicFrequentlyBoughtTogether { +export class AtomicProductPrice { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -690,20 +1449,20 @@ export class AtomicFrequentlyBoughtTogether { } -export declare interface AtomicFrequentlyBoughtTogether extends Components.AtomicFrequentlyBoughtTogether {} +export declare interface AtomicProductPrice extends Components.AtomicProductPrice {} @ProxyCmp({ - inputs: ['answerStyle', 'collapsible', 'withRephraseButtons', 'withToggle'] + inputs: ['field', 'icon', 'maxValueInIndex', 'ratingDetailsField'] }) @Component({ - selector: 'atomic-generated-answer', + selector: 'atomic-product-rating', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['answerStyle', 'collapsible', 'withRephraseButtons', 'withToggle'], + inputs: ['field', 'icon', 'maxValueInIndex', 'ratingDetailsField'], }) -export class AtomicGeneratedAnswer { +export class AtomicProductRating { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -712,20 +1471,19 @@ export class AtomicGeneratedAnswer { } -export declare interface AtomicGeneratedAnswer extends Components.AtomicGeneratedAnswer {} +export declare interface AtomicProductRating extends Components.AtomicProductRating {} @ProxyCmp({ - inputs: ['sanitize', 'value'] }) @Component({ - selector: 'atomic-html', + selector: 'atomic-product-section-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['sanitize', 'value'], + inputs: [], }) -export class AtomicHtml { +export class AtomicProductSectionActions { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -734,20 +1492,19 @@ export class AtomicHtml { } -export declare interface AtomicHtml extends Components.AtomicHtml {} +export declare interface AtomicProductSectionActions extends Components.AtomicProductSectionActions {} @ProxyCmp({ - inputs: ['icon'] }) @Component({ - selector: 'atomic-icon', + selector: 'atomic-product-section-badges', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['icon'], + inputs: [], }) -export class AtomicIcon { +export class AtomicProductSectionBadges { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -756,20 +1513,19 @@ export class AtomicIcon { } -export declare interface AtomicIcon extends Components.AtomicIcon {} +export declare interface AtomicProductSectionBadges extends Components.AtomicProductSectionBadges {} @ProxyCmp({ - inputs: ['maxWidth', 'minWidth', 'section'] }) @Component({ - selector: 'atomic-layout-section', + selector: 'atomic-product-section-bottom-metadata', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['maxWidth', 'minWidth', 'section'], + inputs: [], }) -export class AtomicLayoutSection { +export class AtomicProductSectionBottomMetadata { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -778,19 +1534,19 @@ export class AtomicLayoutSection { } -export declare interface AtomicLayoutSection extends Components.AtomicLayoutSection {} +export declare interface AtomicProductSectionBottomMetadata extends Components.AtomicProductSectionBottomMetadata {} @ProxyCmp({ }) @Component({ - selector: 'atomic-load-more-results', + selector: 'atomic-product-section-children', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property inputs: [], }) -export class AtomicLoadMoreResults { +export class AtomicProductSectionChildren { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -799,20 +1555,19 @@ export class AtomicLoadMoreResults { } -export declare interface AtomicLoadMoreResults extends Components.AtomicLoadMoreResults {} +export declare interface AtomicProductSectionChildren extends Components.AtomicProductSectionChildren {} @ProxyCmp({ - inputs: ['enableCancelLastAction'] }) @Component({ - selector: 'atomic-no-results', + selector: 'atomic-product-section-description', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['enableCancelLastAction'], + inputs: [], }) -export class AtomicNoResults { +export class AtomicProductSectionDescription { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -821,20 +1576,19 @@ export class AtomicNoResults { } -export declare interface AtomicNoResults extends Components.AtomicNoResults {} +export declare interface AtomicProductSectionDescription extends Components.AtomicProductSectionDescription {} @ProxyCmp({ - inputs: ['headingLevel', 'icon'] }) @Component({ - selector: 'atomic-notifications', + selector: 'atomic-product-section-emphasized', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['headingLevel', 'icon'], + inputs: [], }) -export class AtomicNotifications { +export class AtomicProductSectionEmphasized { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -843,20 +1597,19 @@ export class AtomicNotifications { } -export declare interface AtomicNotifications extends Components.AtomicNotifications {} +export declare interface AtomicProductSectionEmphasized extends Components.AtomicProductSectionEmphasized {} @ProxyCmp({ - inputs: ['dependsOn', 'displayValuesAs', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'rangeAlgorithm', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withInput'] }) @Component({ - selector: 'atomic-numeric-facet', + selector: 'atomic-product-section-metadata', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['dependsOn', 'displayValuesAs', 'facetId', 'field', 'filterFacetCount', 'headingLevel', 'injectionDepth', 'isCollapsed', 'label', 'numberOfValues', 'rangeAlgorithm', 'sortCriteria', 'tabsExcluded', 'tabsIncluded', 'withInput'], + inputs: [], }) -export class AtomicNumericFacet { +export class AtomicProductSectionMetadata { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -865,20 +1618,19 @@ export class AtomicNumericFacet { } -export declare interface AtomicNumericFacet extends Components.AtomicNumericFacet {} +export declare interface AtomicProductSectionMetadata extends Components.AtomicProductSectionMetadata {} @ProxyCmp({ - inputs: ['end', 'endInclusive', 'label', 'start'] }) @Component({ - selector: 'atomic-numeric-range', + selector: 'atomic-product-section-name', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['end', 'endInclusive', 'label', 'start'], + inputs: [], }) -export class AtomicNumericRange { +export class AtomicProductSectionName { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -887,45 +1639,43 @@ export class AtomicNumericRange { } -export declare interface AtomicNumericRange extends Components.AtomicNumericRange {} +export declare interface AtomicProductSectionName extends Components.AtomicProductSectionName {} @ProxyCmp({ - inputs: ['nextButtonIcon', 'numberOfPages', 'previousButtonIcon'] + inputs: ['imageSize'] }) @Component({ - selector: 'atomic-pager', + selector: 'atomic-product-section-visual', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['nextButtonIcon', 'numberOfPages', 'previousButtonIcon'], + inputs: ['imageSize'], }) -export class AtomicPager { +export class AtomicProductSectionVisual { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); this.el = r.nativeElement; - proxyOutputs(this, this.el, ['atomic/scrollToTop']); } } -export declare interface AtomicPager extends Components.AtomicPager { - - 'atomic/scrollToTop': EventEmitter>; -} +export declare interface AtomicProductSectionVisual extends Components.AtomicProductSectionVisual {} @ProxyCmp({ + inputs: ['conditions', 'mustMatch', 'mustNotMatch'], + methods: ['getTemplate'] }) @Component({ - selector: 'atomic-popover', + selector: 'atomic-product-template', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: [], + inputs: ['conditions', 'mustMatch', 'mustNotMatch'], }) -export class AtomicPopover { +export class AtomicProductTemplate { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -934,21 +1684,20 @@ export class AtomicPopover { } -export declare interface AtomicPopover extends Components.AtomicPopover {} +export declare interface AtomicProductTemplate extends Components.AtomicProductTemplate {} @ProxyCmp({ - inputs: ['conditions', 'mustMatch', 'mustNotMatch'], - methods: ['getTemplate'] + inputs: ['default', 'field', 'shouldHighlight'] }) @Component({ - selector: 'atomic-product-template', + selector: 'atomic-product-text', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['conditions', 'mustMatch', 'mustNotMatch'], + inputs: ['default', 'field', 'shouldHighlight'], }) -export class AtomicProductTemplate { +export class AtomicProductText { protected el: HTMLElement; constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { c.detach(); @@ -957,7 +1706,7 @@ export class AtomicProductTemplate { } -export declare interface AtomicProductTemplate extends Components.AtomicProductTemplate {} +export declare interface AtomicProductText extends Components.AtomicProductText {} @ProxyCmp({ diff --git a/packages/atomic-react/src/components/stencil-generated/commerce/index.ts b/packages/atomic-react/src/components/stencil-generated/commerce/index.ts index 4289b8102a6..36191fb6a57 100644 --- a/packages/atomic-react/src/components/stencil-generated/commerce/index.ts +++ b/packages/atomic-react/src/components/stencil-generated/commerce/index.ts @@ -12,6 +12,7 @@ export const AtomicCommerceBreadbox = /*@__PURE__*/createReactComponent('atomic-commerce-category-facet'); export const AtomicCommerceDidYouMean = /*@__PURE__*/createReactComponent('atomic-commerce-did-you-mean'); export const AtomicCommerceFacet = /*@__PURE__*/createReactComponent('atomic-commerce-facet'); +export const AtomicCommerceFacetNumberInput = /*@__PURE__*/createReactComponent('atomic-commerce-facet-number-input'); export const AtomicCommerceFacets = /*@__PURE__*/createReactComponent('atomic-commerce-facets'); export const AtomicCommerceInterface = /*@__PURE__*/createReactComponent('atomic-commerce-interface'); export const AtomicCommerceLayout = /*@__PURE__*/createReactComponent('atomic-commerce-layout'); @@ -21,6 +22,7 @@ export const AtomicCommerceNumericFacet = /*@__PURE__*/createReactComponent('atomic-commerce-pager'); export const AtomicCommerceProductList = /*@__PURE__*/createReactComponent('atomic-commerce-product-list'); export const AtomicCommerceProductsPerPage = /*@__PURE__*/createReactComponent('atomic-commerce-products-per-page'); +export const AtomicCommerceQueryError = /*@__PURE__*/createReactComponent('atomic-commerce-query-error'); export const AtomicCommerceQuerySummary = /*@__PURE__*/createReactComponent('atomic-commerce-query-summary'); export const AtomicCommerceRecommendationInterface = /*@__PURE__*/createReactComponent('atomic-commerce-recommendation-interface'); export const AtomicCommerceRecommendationList = /*@__PURE__*/createReactComponent('atomic-commerce-recommendation-list'); @@ -34,6 +36,7 @@ export const AtomicCommerceSortDropdown = /*@__PURE__*/createReactComponent('atomic-commerce-text'); export const AtomicCommerceTimeframeFacet = /*@__PURE__*/createReactComponent('atomic-commerce-timeframe-facet'); export const AtomicIcon = /*@__PURE__*/createReactComponent('atomic-icon'); +export const AtomicInsightUserActionsTimeline = /*@__PURE__*/createReactComponent('atomic-insight-user-actions-timeline'); export const AtomicLayoutSection = /*@__PURE__*/createReactComponent('atomic-layout-section'); export const AtomicNumericRange = /*@__PURE__*/createReactComponent('atomic-numeric-range'); export const AtomicProduct = /*@__PURE__*/createReactComponent('atomic-product'); @@ -46,6 +49,7 @@ export const AtomicProductNumericFieldValue = /*@__PURE__*/createReactComponent< export const AtomicProductPrice = /*@__PURE__*/createReactComponent('atomic-product-price'); export const AtomicProductRating = /*@__PURE__*/createReactComponent('atomic-product-rating'); export const AtomicProductSectionActions = /*@__PURE__*/createReactComponent('atomic-product-section-actions'); +export const AtomicProductSectionBadges = /*@__PURE__*/createReactComponent('atomic-product-section-badges'); export const AtomicProductSectionBottomMetadata = /*@__PURE__*/createReactComponent('atomic-product-section-bottom-metadata'); export const AtomicProductSectionChildren = /*@__PURE__*/createReactComponent('atomic-product-section-children'); export const AtomicProductSectionDescription = /*@__PURE__*/createReactComponent('atomic-product-section-description'); diff --git a/packages/atomic-react/src/components/stencil-generated/search/index.ts b/packages/atomic-react/src/components/stencil-generated/search/index.ts index ad0c03662f4..d0633209016 100644 --- a/packages/atomic-react/src/components/stencil-generated/search/index.ts +++ b/packages/atomic-react/src/components/stencil-generated/search/index.ts @@ -27,6 +27,7 @@ export const AtomicFrequentlyBoughtTogether = /*@__PURE__*/createReactComponent< export const AtomicGeneratedAnswer = /*@__PURE__*/createReactComponent('atomic-generated-answer'); export const AtomicHtml = /*@__PURE__*/createReactComponent('atomic-html'); export const AtomicIcon = /*@__PURE__*/createReactComponent('atomic-icon'); +export const AtomicInsightUserActionsTimeline = /*@__PURE__*/createReactComponent('atomic-insight-user-actions-timeline'); export const AtomicLayoutSection = /*@__PURE__*/createReactComponent('atomic-layout-section'); export const AtomicLoadMoreResults = /*@__PURE__*/createReactComponent('atomic-load-more-results'); export const AtomicNoResults = /*@__PURE__*/createReactComponent('atomic-no-results'); diff --git a/packages/atomic/src/components.d.ts b/packages/atomic/src/components.d.ts index 626a98d8ed8..e1710df3564 100644 --- a/packages/atomic/src/components.d.ts +++ b/packages/atomic/src/components.d.ts @@ -285,6 +285,7 @@ export namespace Components { } /** * The `atomic-commerce-breadbox` component creates breadcrumbs that display a summary of the currently active facet values. + * @alpha */ interface AtomicCommerceBreadbox { /** @@ -316,6 +317,9 @@ export namespace Components { */ "summary": Summary; } + /** + * @alpha The `atomic-commerce-query-correction` component is responsible for handling query corrections. When a query returns no products but finds a possible query correction, the component either suggests the correction or automatically triggers a new query with the suggested term. + */ interface AtomicCommerceDidYouMean { } /** @@ -342,6 +346,7 @@ export namespace Components { } /** * Internal component made to be integrated in a NumericFacet. + * @alpha */ interface AtomicCommerceFacetNumberInput { "bindings": Bindings; @@ -426,6 +431,9 @@ export namespace Components { "type": | 'search' | 'product-listing'; } + /** + * @alpha The `atomic-commerce-layout` helps organize elements in the commerce page. + */ interface AtomicCommerceLayout { /** * CSS value that defines where the layout goes from mobile to desktop. e.g., 800px, 65rem. @@ -438,10 +446,14 @@ export namespace Components { */ interface AtomicCommerceLoadMoreProducts { } + /** + * @alpha The `atomic-no-products` component displays search tips when there are no products. Any additional content slotted inside of its element will be displayed as well. + */ interface AtomicCommerceNoProducts { } /** * The `atomic-commerce-numeric-facet` component is responsible for rendering a commerce facet that allows the user to filter products using numeric ranges. + * @alpha */ interface AtomicCommerceNumericFacet { /** @@ -528,6 +540,7 @@ export namespace Components { } /** * The `atomic-commerce-query-error` component handles fatal errors when performing a query on the Commerce API. When the error is known, it displays a link to relevant documentation for debugging purposes. When the error is unknown, it displays a small text area with the JSON content of the error. + * @alpha */ interface AtomicCommerceQueryError { } @@ -537,6 +550,9 @@ export namespace Components { */ interface AtomicCommerceQuerySummary { } + /** + * @alpha The `atomic-commerce-recommendation-interface` component is meant to be used as the parent of one or more `atomic-commerce-recommendation-list` components. It handles the headless search engine and localization configurations. + */ interface AtomicCommerceRecommendationInterface { /** * The value to set the [nonce](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce) attribute to on inline script and style elements generated by this interface and its child components. If your application is served with a Content Security Policy (CSP) that doesn't include the `script-src: 'unsafe-inline'` or `style-src: 'unsafe-inline'` directives, you should ensure that your application server generates a new nonce on every page load and uses the generated value to set this prop and serve the corresponding CSP response headers (i.e., script-src 'nonce-' and style-src 'nonce-'). Otherwise you may see console errors such as - Refused to execute inline script because it violates the following Content Security Policy directive: [...] - Refused to apply inline style because it violates the following Content Security Policy directive: [...]. @@ -584,6 +600,7 @@ export namespace Components { } /** * The `atomic-commerce-recommendation-list` component displays a list of product recommendations by applying one or more product templates. + * @alpha */ interface AtomicCommerceRecommendationList { /** @@ -692,6 +709,7 @@ export namespace Components { * The `atomic-commerce-search-box-instant-products` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of instant results behavior. * This component does not support accessibility out-of-the-box. To do so, see [Instant Results Accessibility](https://docs.coveo.com/en/atomic/latest/usage/accessibility/#instant-results-accessibility). * This component is not supported on mobile. + * @alpha */ interface AtomicCommerceSearchBoxInstantProducts { /** @@ -714,6 +732,7 @@ export namespace Components { } /** * The `atomic-commerce-search-box-query-suggestions` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of query suggestion behavior. + * @alpha */ interface AtomicCommerceSearchBoxQuerySuggestions { /** @@ -731,6 +750,7 @@ export namespace Components { } /** * The `atomic-commerce-search-box-recent-queries` component can be added as a child of an `atomic-commerce-search-box` component, allowing for the configuration of recent query suggestions. + * @alpha */ interface AtomicCommerceSearchBoxRecentQueries { /** @@ -748,6 +768,7 @@ export namespace Components { } /** * The `atomic-commerce-sort-dropdown` component renders a dropdown that the end user can interact with to select the criteria to use when sorting products. + * @alpha */ interface AtomicCommerceSortDropdown { } @@ -768,6 +789,7 @@ export namespace Components { /** * A facet is a list of values for a certain field occurring in the results. * An `atomic-commerce-timeframe-facet` displays a facet of the results for the current query as date intervals. + * @alpha */ interface AtomicCommerceTimeframeFacet { /** @@ -1618,6 +1640,23 @@ export namespace Components { */ "userActions": Array; } + /** + * This component displays all the actions performed by a user around the time they created a case. + * The actions are grouped into multiple sessions, including the session during which the case was created, + * the sessions preceding the case creation and the sessions following the case creation. + * @component + * @example + */ + interface AtomicInsightUserActionsTimeline { + /** + * The date and time when the case was created. For example "2024-01-01T00:00:00Z" + */ + "ticketCreationDateTime": string; + /** + * The ID of the user whose actions are being displayed. For example in email format "someone@company.com". + */ + "userId": string; + } interface AtomicIpxBody { "displayFooterSlot": boolean; "isOpen"?: boolean; @@ -1926,6 +1965,7 @@ export namespace Components { } /** * The `atomic-product` component is used internally by the `atomic-commerce-product-list` component. + * @alpha */ interface AtomicProduct { /** @@ -1950,6 +1990,7 @@ export namespace Components { "imageSize": ItemDisplayImageSize; /** * The InteractiveProduct item. + * @alpha */ "interactiveProduct": InteractiveProduct; /** @@ -1957,6 +1998,9 @@ export namespace Components { * @default - An `atomic-result-link` without any customization. */ "linkContent": ParentNode; + /** + * @alpha + */ "loadingFlag"?: string; /** * The product item. @@ -1964,6 +2008,7 @@ export namespace Components { "product": Product; /** * Internal function used in advanced setups, which lets you bypass the standard HTML template system. Particularly useful for Atomic React + * @alpha */ "renderingFunction": ItemRenderingFunction; /** @@ -1972,9 +2017,14 @@ export namespace Components { "stopPropagation"?: boolean; /** * Global Atomic state. + * @alpha */ "store"?: AtomicCommonStore; } + /** + * @alpha The `atomic-product-children` component renders a section that allows the user to select a nested product (e.g., a color variant of a given product). + * This component leverages the [product grouping](https://docs.coveo.com/en/l78i2152/) feature. + */ interface AtomicProductChildren { /** * A fallback image URL to use when the specified `field` is not defined on a given child product, or when its value is invalid. @@ -1989,6 +2039,9 @@ export namespace Components { */ "label": string; } + /** + * @alpha The `atomic-product-description` component renders the description of a product. + */ interface AtomicProductDescription { /** * The name of the description field to use. @@ -2002,6 +2055,7 @@ export namespace Components { /** * The `atomic-product-field-condition` component takes a list of conditions that, if fulfilled, apply the template in which it's defined. * The condition properties can be based on any top-level product property of the `product` object, not restricted to fields (e.g., `ec_name`). + * @alpha */ interface AtomicProductFieldCondition { /** @@ -2015,6 +2069,7 @@ export namespace Components { } /** * The `atomic-product-image` component renders an image from a product field. + * @alpha */ interface AtomicProductImage { /** @@ -2043,22 +2098,33 @@ export namespace Components { */ "previousImage": () => Promise; } + /** + * @alpha The `atomic-product-link` component automatically transforms a search product title into a clickable link that points to the original item. + */ interface AtomicProductLink { /** * The [template literal](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals) from which to generate the `href` attribute value The template literal can reference any number of product properties from the parent product. It can also reference the window object. For example, the following markup generates an `href` value such as `http://uri.com?id=itemTitle`, using the product's `clickUri` and `itemtitle` fields. ```html ``` */ "hrefTemplate"?: string; } + /** + * @alpha The `atomic-product-numeric-field-value` component renders the value of a number product field. + * The number can be formatted by adding a `atomic-format-number`, `atomic-format-currency` or `atomic-format-unit` component into this component. + */ interface AtomicProductNumericFieldValue { /** * The field that the component should use. The component will try to find this field in the `Product.additionalFields` object unless it finds it in the `Product` object first. */ "field": string; } + /** + * @alpha The `atomic-product-price` component renders the price of a product. + */ interface AtomicProductPrice { } /** * The `atomic-product-rating` element renders a star rating. + * @alpha */ interface AtomicProductRating { /** @@ -2078,22 +2144,90 @@ export namespace Components { */ "ratingDetailsField"?: string; } + /** + * @alpha This section is intended to display components that allow the user to perform an action on a product without having to view its details. + * In commerce interface, the user can usually add the product to their cart or wish list. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ interface AtomicProductSectionActions { } + /** + * @alpha This section is meant to render badges that highlight special features of the product. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ interface AtomicProductSectionBadges { } + /** + * @alpha This section is meant to render additional descriptive information about the product. + * Behavior: + * * Has a maximum height of two lines. + * * Exposes the `--line-height` variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + * * Has a font weight. + */ interface AtomicProductSectionBottomMetadata { } + /** + * @alpha This section is meant to render child products, available when using the component. + * Behavior: + * * Shows children at the bottom of the result, indented and wrapped in a border. + */ interface AtomicProductSectionChildren { } + /** + * @alpha This section is intended to render an informative summary of the product's description. + * Behavior: + * * Has a fixed height of one to three lines, depending on the layout and density. + * * Ellipses overflowing text. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ interface AtomicProductSectionDescription { } + /** + * @alpha This section is intended to display the field that's important for its search criteria. + * For example, in Commerce, a product's price is often more important than the title itself. + * Behavior: + * * Has a very large font size. + * * Is the second closest element beneath the name section. + */ interface AtomicProductSectionEmphasized { } + /** + * @alpha This section is intended to display some fields that are directly related to the name of the product. + * In commerce, this could be the product rating, which is tied to the nature of the product itself, + * rather than to the product's description. + * Behavior: + * * Has a very small font size. + * * Is the closest element beneath the title section. + */ interface AtomicProductSectionMetadata { } + /** + * @alpha This section is intended to display the product's name, and its main use is to make the product list scannable. + * Behavior: + * * Has a fixed height of two lines on grid layouts. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ interface AtomicProductSectionName { } + /** + * @alpha This section is intended to provide visual information about the product. + * In commerce, an image is a great shorthand for a product category. + * Behavior: + * * Has a fixed size that depends on the specified image size, the layout, the density, and the screen size. + * ** You should ensure that elements inside of it take the available space. + * * Always has a 1:1 aspect ratio. + */ interface AtomicProductSectionVisual { /** * How large or small the visual section of product using this template should be. @@ -2131,6 +2265,9 @@ export namespace Components { string[] >; } + /** + * @alpha The `atomic-product-text` component renders the value of a string product field. + */ interface AtomicProductText { /** * The locale key for the text to display when the configured field has no value. @@ -3718,6 +3855,7 @@ declare global { }; /** * The `atomic-commerce-breadbox` component creates breadcrumbs that display a summary of the currently active facet values. + * @alpha */ interface HTMLAtomicCommerceBreadboxElement extends Components.AtomicCommerceBreadbox, HTMLStencilElement { } @@ -3736,6 +3874,9 @@ declare global { prototype: HTMLAtomicCommerceCategoryFacetElement; new (): HTMLAtomicCommerceCategoryFacetElement; }; + /** + * @alpha The `atomic-commerce-query-correction` component is responsible for handling query corrections. When a query returns no products but finds a possible query correction, the component either suggests the correction or automatically triggers a new query with the suggested term. + */ interface HTMLAtomicCommerceDidYouMeanElement extends Components.AtomicCommerceDidYouMean, HTMLStencilElement { } var HTMLAtomicCommerceDidYouMeanElement: { @@ -3757,6 +3898,7 @@ declare global { } /** * Internal component made to be integrated in a NumericFacet. + * @alpha */ interface HTMLAtomicCommerceFacetNumberInputElement extends Components.AtomicCommerceFacetNumberInput, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLAtomicCommerceFacetNumberInputElement, ev: AtomicCommerceFacetNumberInputCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; @@ -3795,6 +3937,9 @@ declare global { prototype: HTMLAtomicCommerceInterfaceElement; new (): HTMLAtomicCommerceInterfaceElement; }; + /** + * @alpha The `atomic-commerce-layout` helps organize elements in the commerce page. + */ interface HTMLAtomicCommerceLayoutElement extends Components.AtomicCommerceLayout, HTMLStencilElement { } var HTMLAtomicCommerceLayoutElement: { @@ -3811,6 +3956,9 @@ declare global { prototype: HTMLAtomicCommerceLoadMoreProductsElement; new (): HTMLAtomicCommerceLoadMoreProductsElement; }; + /** + * @alpha The `atomic-no-products` component displays search tips when there are no products. Any additional content slotted inside of its element will be displayed as well. + */ interface HTMLAtomicCommerceNoProductsElement extends Components.AtomicCommerceNoProducts, HTMLStencilElement { } var HTMLAtomicCommerceNoProductsElement: { @@ -3819,6 +3967,7 @@ declare global { }; /** * The `atomic-commerce-numeric-facet` component is responsible for rendering a commerce facet that allows the user to filter products using numeric ranges. + * @alpha */ interface HTMLAtomicCommerceNumericFacetElement extends Components.AtomicCommerceNumericFacet, HTMLStencilElement { } @@ -3879,6 +4028,7 @@ declare global { }; /** * The `atomic-commerce-query-error` component handles fatal errors when performing a query on the Commerce API. When the error is known, it displays a link to relevant documentation for debugging purposes. When the error is unknown, it displays a small text area with the JSON content of the error. + * @alpha */ interface HTMLAtomicCommerceQueryErrorElement extends Components.AtomicCommerceQueryError, HTMLStencilElement { } @@ -3896,6 +4046,9 @@ declare global { prototype: HTMLAtomicCommerceQuerySummaryElement; new (): HTMLAtomicCommerceQuerySummaryElement; }; + /** + * @alpha The `atomic-commerce-recommendation-interface` component is meant to be used as the parent of one or more `atomic-commerce-recommendation-list` components. It handles the headless search engine and localization configurations. + */ interface HTMLAtomicCommerceRecommendationInterfaceElement extends Components.AtomicCommerceRecommendationInterface, HTMLStencilElement { } var HTMLAtomicCommerceRecommendationInterfaceElement: { @@ -3904,6 +4057,7 @@ declare global { }; /** * The `atomic-commerce-recommendation-list` component displays a list of product recommendations by applying one or more product templates. + * @alpha */ interface HTMLAtomicCommerceRecommendationListElement extends Components.AtomicCommerceRecommendationList, HTMLStencilElement { } @@ -3958,6 +4112,7 @@ declare global { * The `atomic-commerce-search-box-instant-products` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of instant results behavior. * This component does not support accessibility out-of-the-box. To do so, see [Instant Results Accessibility](https://docs.coveo.com/en/atomic/latest/usage/accessibility/#instant-results-accessibility). * This component is not supported on mobile. + * @alpha */ interface HTMLAtomicCommerceSearchBoxInstantProductsElement extends Components.AtomicCommerceSearchBoxInstantProducts, HTMLStencilElement { } @@ -3967,6 +4122,7 @@ declare global { }; /** * The `atomic-commerce-search-box-query-suggestions` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of query suggestion behavior. + * @alpha */ interface HTMLAtomicCommerceSearchBoxQuerySuggestionsElement extends Components.AtomicCommerceSearchBoxQuerySuggestions, HTMLStencilElement { } @@ -3976,6 +4132,7 @@ declare global { }; /** * The `atomic-commerce-search-box-recent-queries` component can be added as a child of an `atomic-commerce-search-box` component, allowing for the configuration of recent query suggestions. + * @alpha */ interface HTMLAtomicCommerceSearchBoxRecentQueriesElement extends Components.AtomicCommerceSearchBoxRecentQueries, HTMLStencilElement { } @@ -3985,6 +4142,7 @@ declare global { }; /** * The `atomic-commerce-sort-dropdown` component renders a dropdown that the end user can interact with to select the criteria to use when sorting products. + * @alpha */ interface HTMLAtomicCommerceSortDropdownElement extends Components.AtomicCommerceSortDropdown, HTMLStencilElement { } @@ -4004,6 +4162,7 @@ declare global { /** * A facet is a list of values for a certain field occurring in the results. * An `atomic-commerce-timeframe-facet` displays a facet of the results for the current query as date intervals. + * @alpha */ interface HTMLAtomicCommerceTimeframeFacetElement extends Components.AtomicCommerceTimeframeFacet, HTMLStencilElement { } @@ -4428,6 +4587,19 @@ declare global { prototype: HTMLAtomicInsightUserActionsSessionElement; new (): HTMLAtomicInsightUserActionsSessionElement; }; + /** + * This component displays all the actions performed by a user around the time they created a case. + * The actions are grouped into multiple sessions, including the session during which the case was created, + * the sessions preceding the case creation and the sessions following the case creation. + * @component + * @example + */ + interface HTMLAtomicInsightUserActionsTimelineElement extends Components.AtomicInsightUserActionsTimeline, HTMLStencilElement { + } + var HTMLAtomicInsightUserActionsTimelineElement: { + prototype: HTMLAtomicInsightUserActionsTimelineElement; + new (): HTMLAtomicInsightUserActionsTimelineElement; + }; interface HTMLAtomicIpxBodyElementEventMap { "animationEnded": never; } @@ -4633,6 +4805,7 @@ declare global { }; /** * The `atomic-product` component is used internally by the `atomic-commerce-product-list` component. + * @alpha */ interface HTMLAtomicProductElement extends Components.AtomicProduct, HTMLStencilElement { } @@ -4643,6 +4816,10 @@ declare global { interface HTMLAtomicProductChildrenElementEventMap { "atomic/selectChildProduct": SelectChildProductEventArgs; } + /** + * @alpha The `atomic-product-children` component renders a section that allows the user to select a nested product (e.g., a color variant of a given product). + * This component leverages the [product grouping](https://docs.coveo.com/en/l78i2152/) feature. + */ interface HTMLAtomicProductChildrenElement extends Components.AtomicProductChildren, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLAtomicProductChildrenElement, ev: AtomicProductChildrenCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -4657,6 +4834,9 @@ declare global { prototype: HTMLAtomicProductChildrenElement; new (): HTMLAtomicProductChildrenElement; }; + /** + * @alpha The `atomic-product-description` component renders the description of a product. + */ interface HTMLAtomicProductDescriptionElement extends Components.AtomicProductDescription, HTMLStencilElement { } var HTMLAtomicProductDescriptionElement: { @@ -4666,6 +4846,7 @@ declare global { /** * The `atomic-product-field-condition` component takes a list of conditions that, if fulfilled, apply the template in which it's defined. * The condition properties can be based on any top-level product property of the `product` object, not restricted to fields (e.g., `ec_name`). + * @alpha */ interface HTMLAtomicProductFieldConditionElement extends Components.AtomicProductFieldCondition, HTMLStencilElement { } @@ -4675,6 +4856,7 @@ declare global { }; /** * The `atomic-product-image` component renders an image from a product field. + * @alpha */ interface HTMLAtomicProductImageElement extends Components.AtomicProductImage, HTMLStencilElement { } @@ -4682,18 +4864,28 @@ declare global { prototype: HTMLAtomicProductImageElement; new (): HTMLAtomicProductImageElement; }; + /** + * @alpha The `atomic-product-link` component automatically transforms a search product title into a clickable link that points to the original item. + */ interface HTMLAtomicProductLinkElement extends Components.AtomicProductLink, HTMLStencilElement { } var HTMLAtomicProductLinkElement: { prototype: HTMLAtomicProductLinkElement; new (): HTMLAtomicProductLinkElement; }; + /** + * @alpha The `atomic-product-numeric-field-value` component renders the value of a number product field. + * The number can be formatted by adding a `atomic-format-number`, `atomic-format-currency` or `atomic-format-unit` component into this component. + */ interface HTMLAtomicProductNumericFieldValueElement extends Components.AtomicProductNumericFieldValue, HTMLStencilElement { } var HTMLAtomicProductNumericFieldValueElement: { prototype: HTMLAtomicProductNumericFieldValueElement; new (): HTMLAtomicProductNumericFieldValueElement; }; + /** + * @alpha The `atomic-product-price` component renders the price of a product. + */ interface HTMLAtomicProductPriceElement extends Components.AtomicProductPrice, HTMLStencilElement { } var HTMLAtomicProductPriceElement: { @@ -4702,6 +4894,7 @@ declare global { }; /** * The `atomic-product-rating` element renders a star rating. + * @alpha */ interface HTMLAtomicProductRatingElement extends Components.AtomicProductRating, HTMLStencilElement { } @@ -4709,54 +4902,122 @@ declare global { prototype: HTMLAtomicProductRatingElement; new (): HTMLAtomicProductRatingElement; }; + /** + * @alpha This section is intended to display components that allow the user to perform an action on a product without having to view its details. + * In commerce interface, the user can usually add the product to their cart or wish list. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ interface HTMLAtomicProductSectionActionsElement extends Components.AtomicProductSectionActions, HTMLStencilElement { } var HTMLAtomicProductSectionActionsElement: { prototype: HTMLAtomicProductSectionActionsElement; new (): HTMLAtomicProductSectionActionsElement; }; + /** + * @alpha This section is meant to render badges that highlight special features of the product. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ interface HTMLAtomicProductSectionBadgesElement extends Components.AtomicProductSectionBadges, HTMLStencilElement { } var HTMLAtomicProductSectionBadgesElement: { prototype: HTMLAtomicProductSectionBadgesElement; new (): HTMLAtomicProductSectionBadgesElement; }; + /** + * @alpha This section is meant to render additional descriptive information about the product. + * Behavior: + * * Has a maximum height of two lines. + * * Exposes the `--line-height` variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + * * Has a font weight. + */ interface HTMLAtomicProductSectionBottomMetadataElement extends Components.AtomicProductSectionBottomMetadata, HTMLStencilElement { } var HTMLAtomicProductSectionBottomMetadataElement: { prototype: HTMLAtomicProductSectionBottomMetadataElement; new (): HTMLAtomicProductSectionBottomMetadataElement; }; + /** + * @alpha This section is meant to render child products, available when using the component. + * Behavior: + * * Shows children at the bottom of the result, indented and wrapped in a border. + */ interface HTMLAtomicProductSectionChildrenElement extends Components.AtomicProductSectionChildren, HTMLStencilElement { } var HTMLAtomicProductSectionChildrenElement: { prototype: HTMLAtomicProductSectionChildrenElement; new (): HTMLAtomicProductSectionChildrenElement; }; + /** + * @alpha This section is intended to render an informative summary of the product's description. + * Behavior: + * * Has a fixed height of one to three lines, depending on the layout and density. + * * Ellipses overflowing text. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ interface HTMLAtomicProductSectionDescriptionElement extends Components.AtomicProductSectionDescription, HTMLStencilElement { } var HTMLAtomicProductSectionDescriptionElement: { prototype: HTMLAtomicProductSectionDescriptionElement; new (): HTMLAtomicProductSectionDescriptionElement; }; + /** + * @alpha This section is intended to display the field that's important for its search criteria. + * For example, in Commerce, a product's price is often more important than the title itself. + * Behavior: + * * Has a very large font size. + * * Is the second closest element beneath the name section. + */ interface HTMLAtomicProductSectionEmphasizedElement extends Components.AtomicProductSectionEmphasized, HTMLStencilElement { } var HTMLAtomicProductSectionEmphasizedElement: { prototype: HTMLAtomicProductSectionEmphasizedElement; new (): HTMLAtomicProductSectionEmphasizedElement; }; + /** + * @alpha This section is intended to display some fields that are directly related to the name of the product. + * In commerce, this could be the product rating, which is tied to the nature of the product itself, + * rather than to the product's description. + * Behavior: + * * Has a very small font size. + * * Is the closest element beneath the title section. + */ interface HTMLAtomicProductSectionMetadataElement extends Components.AtomicProductSectionMetadata, HTMLStencilElement { } var HTMLAtomicProductSectionMetadataElement: { prototype: HTMLAtomicProductSectionMetadataElement; new (): HTMLAtomicProductSectionMetadataElement; }; + /** + * @alpha This section is intended to display the product's name, and its main use is to make the product list scannable. + * Behavior: + * * Has a fixed height of two lines on grid layouts. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ interface HTMLAtomicProductSectionNameElement extends Components.AtomicProductSectionName, HTMLStencilElement { } var HTMLAtomicProductSectionNameElement: { prototype: HTMLAtomicProductSectionNameElement; new (): HTMLAtomicProductSectionNameElement; }; + /** + * @alpha This section is intended to provide visual information about the product. + * In commerce, an image is a great shorthand for a product category. + * Behavior: + * * Has a fixed size that depends on the specified image size, the layout, the density, and the screen size. + * ** You should ensure that elements inside of it take the available space. + * * Always has a 1:1 aspect ratio. + */ interface HTMLAtomicProductSectionVisualElement extends Components.AtomicProductSectionVisual, HTMLStencilElement { } var HTMLAtomicProductSectionVisualElement: { @@ -4776,6 +5037,9 @@ declare global { prototype: HTMLAtomicProductTemplateElement; new (): HTMLAtomicProductTemplateElement; }; + /** + * @alpha The `atomic-product-text` component renders the value of a string product field. + */ interface HTMLAtomicProductTextElement extends Components.AtomicProductText, HTMLStencilElement { } var HTMLAtomicProductTextElement: { @@ -5706,6 +5970,7 @@ declare global { "atomic-insight-tabs": HTMLAtomicInsightTabsElement; "atomic-insight-timeframe-facet": HTMLAtomicInsightTimeframeFacetElement; "atomic-insight-user-actions-session": HTMLAtomicInsightUserActionsSessionElement; + "atomic-insight-user-actions-timeline": HTMLAtomicInsightUserActionsTimelineElement; "atomic-ipx-body": HTMLAtomicIpxBodyElement; "atomic-ipx-button": HTMLAtomicIpxButtonElement; "atomic-ipx-embedded": HTMLAtomicIpxEmbeddedElement; @@ -6032,6 +6297,7 @@ declare namespace LocalJSX { } /** * The `atomic-commerce-breadbox` component creates breadcrumbs that display a summary of the currently active facet values. + * @alpha */ interface AtomicCommerceBreadbox { /** @@ -6063,6 +6329,9 @@ declare namespace LocalJSX { */ "summary": Summary; } + /** + * @alpha The `atomic-commerce-query-correction` component is responsible for handling query corrections. When a query returns no products but finds a possible query correction, the component either suggests the correction or automatically triggers a new query with the suggested term. + */ interface AtomicCommerceDidYouMean { } /** @@ -6089,6 +6358,7 @@ declare namespace LocalJSX { } /** * Internal component made to be integrated in a NumericFacet. + * @alpha */ interface AtomicCommerceFacetNumberInput { "bindings": Bindings; @@ -6162,6 +6432,9 @@ declare namespace LocalJSX { "type"?: | 'search' | 'product-listing'; } + /** + * @alpha The `atomic-commerce-layout` helps organize elements in the commerce page. + */ interface AtomicCommerceLayout { /** * CSS value that defines where the layout goes from mobile to desktop. e.g., 800px, 65rem. @@ -6174,10 +6447,14 @@ declare namespace LocalJSX { */ interface AtomicCommerceLoadMoreProducts { } + /** + * @alpha The `atomic-no-products` component displays search tips when there are no products. Any additional content slotted inside of its element will be displayed as well. + */ interface AtomicCommerceNoProducts { } /** * The `atomic-commerce-numeric-facet` component is responsible for rendering a commerce facet that allows the user to filter products using numeric ranges. + * @alpha */ interface AtomicCommerceNumericFacet { /** @@ -6261,6 +6538,7 @@ declare namespace LocalJSX { } /** * The `atomic-commerce-query-error` component handles fatal errors when performing a query on the Commerce API. When the error is known, it displays a link to relevant documentation for debugging purposes. When the error is unknown, it displays a small text area with the JSON content of the error. + * @alpha */ interface AtomicCommerceQueryError { } @@ -6270,6 +6548,9 @@ declare namespace LocalJSX { */ interface AtomicCommerceQuerySummary { } + /** + * @alpha The `atomic-commerce-recommendation-interface` component is meant to be used as the parent of one or more `atomic-commerce-recommendation-list` components. It handles the headless search engine and localization configurations. + */ interface AtomicCommerceRecommendationInterface { /** * The value to set the [nonce](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce) attribute to on inline script and style elements generated by this interface and its child components. If your application is served with a Content Security Policy (CSP) that doesn't include the `script-src: 'unsafe-inline'` or `style-src: 'unsafe-inline'` directives, you should ensure that your application server generates a new nonce on every page load and uses the generated value to set this prop and serve the corresponding CSP response headers (i.e., script-src 'nonce-' and style-src 'nonce-'). Otherwise you may see console errors such as - Refused to execute inline script because it violates the following Content Security Policy directive: [...] - Refused to apply inline style because it violates the following Content Security Policy directive: [...]. @@ -6307,6 +6588,7 @@ declare namespace LocalJSX { } /** * The `atomic-commerce-recommendation-list` component displays a list of product recommendations by applying one or more product templates. + * @alpha */ interface AtomicCommerceRecommendationList { /** @@ -6406,6 +6688,7 @@ declare namespace LocalJSX { * The `atomic-commerce-search-box-instant-products` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of instant results behavior. * This component does not support accessibility out-of-the-box. To do so, see [Instant Results Accessibility](https://docs.coveo.com/en/atomic/latest/usage/accessibility/#instant-results-accessibility). * This component is not supported on mobile. + * @alpha */ interface AtomicCommerceSearchBoxInstantProducts { /** @@ -6423,6 +6706,7 @@ declare namespace LocalJSX { } /** * The `atomic-commerce-search-box-query-suggestions` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of query suggestion behavior. + * @alpha */ interface AtomicCommerceSearchBoxQuerySuggestions { /** @@ -6440,6 +6724,7 @@ declare namespace LocalJSX { } /** * The `atomic-commerce-search-box-recent-queries` component can be added as a child of an `atomic-commerce-search-box` component, allowing for the configuration of recent query suggestions. + * @alpha */ interface AtomicCommerceSearchBoxRecentQueries { /** @@ -6457,6 +6742,7 @@ declare namespace LocalJSX { } /** * The `atomic-commerce-sort-dropdown` component renders a dropdown that the end user can interact with to select the criteria to use when sorting products. + * @alpha */ interface AtomicCommerceSortDropdown { } @@ -6477,6 +6763,7 @@ declare namespace LocalJSX { /** * A facet is a list of values for a certain field occurring in the results. * An `atomic-commerce-timeframe-facet` displays a facet of the results for the current query as date intervals. + * @alpha */ interface AtomicCommerceTimeframeFacet { /** @@ -7290,6 +7577,23 @@ declare namespace LocalJSX { */ "userActions": Array; } + /** + * This component displays all the actions performed by a user around the time they created a case. + * The actions are grouped into multiple sessions, including the session during which the case was created, + * the sessions preceding the case creation and the sessions following the case creation. + * @component + * @example + */ + interface AtomicInsightUserActionsTimeline { + /** + * The date and time when the case was created. For example "2024-01-01T00:00:00Z" + */ + "ticketCreationDateTime": string; + /** + * The ID of the user whose actions are being displayed. For example in email format "someone@company.com". + */ + "userId": string; + } interface AtomicIpxBody { "displayFooterSlot"?: boolean; "isOpen"?: boolean; @@ -7586,6 +7890,7 @@ declare namespace LocalJSX { } /** * The `atomic-product` component is used internally by the `atomic-commerce-product-list` component. + * @alpha */ interface AtomicProduct { /** @@ -7610,6 +7915,7 @@ declare namespace LocalJSX { "imageSize"?: ItemDisplayImageSize; /** * The InteractiveProduct item. + * @alpha */ "interactiveProduct": InteractiveProduct; /** @@ -7617,6 +7923,9 @@ declare namespace LocalJSX { * @default - An `atomic-result-link` without any customization. */ "linkContent"?: ParentNode; + /** + * @alpha + */ "loadingFlag"?: string; /** * The product item. @@ -7624,6 +7933,7 @@ declare namespace LocalJSX { "product": Product; /** * Internal function used in advanced setups, which lets you bypass the standard HTML template system. Particularly useful for Atomic React + * @alpha */ "renderingFunction"?: ItemRenderingFunction; /** @@ -7632,9 +7942,14 @@ declare namespace LocalJSX { "stopPropagation"?: boolean; /** * Global Atomic state. + * @alpha */ "store"?: AtomicCommonStore; } + /** + * @alpha The `atomic-product-children` component renders a section that allows the user to select a nested product (e.g., a color variant of a given product). + * This component leverages the [product grouping](https://docs.coveo.com/en/l78i2152/) feature. + */ interface AtomicProductChildren { /** * A fallback image URL to use when the specified `field` is not defined on a given child product, or when its value is invalid. @@ -7650,6 +7965,9 @@ declare namespace LocalJSX { "label"?: string; "onAtomic/selectChildProduct"?: (event: AtomicProductChildrenCustomEvent) => void; } + /** + * @alpha The `atomic-product-description` component renders the description of a product. + */ interface AtomicProductDescription { /** * The name of the description field to use. @@ -7663,6 +7981,7 @@ declare namespace LocalJSX { /** * The `atomic-product-field-condition` component takes a list of conditions that, if fulfilled, apply the template in which it's defined. * The condition properties can be based on any top-level product property of the `product` object, not restricted to fields (e.g., `ec_name`). + * @alpha */ interface AtomicProductFieldCondition { /** @@ -7676,6 +7995,7 @@ declare namespace LocalJSX { } /** * The `atomic-product-image` component renders an image from a product field. + * @alpha */ interface AtomicProductImage { /** @@ -7691,22 +8011,33 @@ declare namespace LocalJSX { */ "imageAltField"?: string; } + /** + * @alpha The `atomic-product-link` component automatically transforms a search product title into a clickable link that points to the original item. + */ interface AtomicProductLink { /** * The [template literal](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals) from which to generate the `href` attribute value The template literal can reference any number of product properties from the parent product. It can also reference the window object. For example, the following markup generates an `href` value such as `http://uri.com?id=itemTitle`, using the product's `clickUri` and `itemtitle` fields. ```html ``` */ "hrefTemplate"?: string; } + /** + * @alpha The `atomic-product-numeric-field-value` component renders the value of a number product field. + * The number can be formatted by adding a `atomic-format-number`, `atomic-format-currency` or `atomic-format-unit` component into this component. + */ interface AtomicProductNumericFieldValue { /** * The field that the component should use. The component will try to find this field in the `Product.additionalFields` object unless it finds it in the `Product` object first. */ "field": string; } + /** + * @alpha The `atomic-product-price` component renders the price of a product. + */ interface AtomicProductPrice { } /** * The `atomic-product-rating` element renders a star rating. + * @alpha */ interface AtomicProductRating { /** @@ -7726,22 +8057,90 @@ declare namespace LocalJSX { */ "ratingDetailsField"?: string; } + /** + * @alpha This section is intended to display components that allow the user to perform an action on a product without having to view its details. + * In commerce interface, the user can usually add the product to their cart or wish list. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ interface AtomicProductSectionActions { } + /** + * @alpha This section is meant to render badges that highlight special features of the product. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ interface AtomicProductSectionBadges { } + /** + * @alpha This section is meant to render additional descriptive information about the product. + * Behavior: + * * Has a maximum height of two lines. + * * Exposes the `--line-height` variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + * * Has a font weight. + */ interface AtomicProductSectionBottomMetadata { } + /** + * @alpha This section is meant to render child products, available when using the component. + * Behavior: + * * Shows children at the bottom of the result, indented and wrapped in a border. + */ interface AtomicProductSectionChildren { } + /** + * @alpha This section is intended to render an informative summary of the product's description. + * Behavior: + * * Has a fixed height of one to three lines, depending on the layout and density. + * * Ellipses overflowing text. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ interface AtomicProductSectionDescription { } + /** + * @alpha This section is intended to display the field that's important for its search criteria. + * For example, in Commerce, a product's price is often more important than the title itself. + * Behavior: + * * Has a very large font size. + * * Is the second closest element beneath the name section. + */ interface AtomicProductSectionEmphasized { } + /** + * @alpha This section is intended to display some fields that are directly related to the name of the product. + * In commerce, this could be the product rating, which is tied to the nature of the product itself, + * rather than to the product's description. + * Behavior: + * * Has a very small font size. + * * Is the closest element beneath the title section. + */ interface AtomicProductSectionMetadata { } + /** + * @alpha This section is intended to display the product's name, and its main use is to make the product list scannable. + * Behavior: + * * Has a fixed height of two lines on grid layouts. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ interface AtomicProductSectionName { } + /** + * @alpha This section is intended to provide visual information about the product. + * In commerce, an image is a great shorthand for a product category. + * Behavior: + * * Has a fixed size that depends on the specified image size, the layout, the density, and the screen size. + * ** You should ensure that elements inside of it take the available space. + * * Always has a 1:1 aspect ratio. + */ interface AtomicProductSectionVisual { /** * How large or small the visual section of product using this template should be. @@ -7775,6 +8174,9 @@ declare namespace LocalJSX { string[] >; } + /** + * @alpha The `atomic-product-text` component renders the value of a string product field. + */ interface AtomicProductText { /** * The locale key for the text to display when the configured field has no value. @@ -9225,6 +9627,7 @@ declare namespace LocalJSX { "atomic-insight-tabs": AtomicInsightTabs; "atomic-insight-timeframe-facet": AtomicInsightTimeframeFacet; "atomic-insight-user-actions-session": AtomicInsightUserActionsSession; + "atomic-insight-user-actions-timeline": AtomicInsightUserActionsTimeline; "atomic-ipx-body": AtomicIpxBody; "atomic-ipx-button": AtomicIpxButton; "atomic-ipx-embedded": AtomicIpxEmbedded; @@ -9379,6 +9782,7 @@ declare module "@stencil/core" { "atomic-color-facet": LocalJSX.AtomicColorFacet & JSXBase.HTMLAttributes; /** * The `atomic-commerce-breadbox` component creates breadcrumbs that display a summary of the currently active facet values. + * @alpha */ "atomic-commerce-breadbox": LocalJSX.AtomicCommerceBreadbox & JSXBase.HTMLAttributes; /** @@ -9387,6 +9791,9 @@ declare module "@stencil/core" { * @alpha */ "atomic-commerce-category-facet": LocalJSX.AtomicCommerceCategoryFacet & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-commerce-query-correction` component is responsible for handling query corrections. When a query returns no products but finds a possible query correction, the component either suggests the correction or automatically triggers a new query with the suggested term. + */ "atomic-commerce-did-you-mean": LocalJSX.AtomicCommerceDidYouMean & JSXBase.HTMLAttributes; /** * The `atomic-commerce-facet` component renders a commerce facet that the end user can interact with to filter products. @@ -9395,6 +9802,7 @@ declare module "@stencil/core" { "atomic-commerce-facet": LocalJSX.AtomicCommerceFacet & JSXBase.HTMLAttributes; /** * Internal component made to be integrated in a NumericFacet. + * @alpha */ "atomic-commerce-facet-number-input": LocalJSX.AtomicCommerceFacetNumberInput & JSXBase.HTMLAttributes; /** @@ -9410,15 +9818,22 @@ declare module "@stencil/core" { * configurations. */ "atomic-commerce-interface": LocalJSX.AtomicCommerceInterface & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-commerce-layout` helps organize elements in the commerce page. + */ "atomic-commerce-layout": LocalJSX.AtomicCommerceLayout & JSXBase.HTMLAttributes; /** * The `atomic-commerce-load-more-products` component allows the user to load additional products if more are available. * @alpha */ "atomic-commerce-load-more-products": LocalJSX.AtomicCommerceLoadMoreProducts & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-no-products` component displays search tips when there are no products. Any additional content slotted inside of its element will be displayed as well. + */ "atomic-commerce-no-products": LocalJSX.AtomicCommerceNoProducts & JSXBase.HTMLAttributes; /** * The `atomic-commerce-numeric-facet` component is responsible for rendering a commerce facet that allows the user to filter products using numeric ranges. + * @alpha */ "atomic-commerce-numeric-facet": LocalJSX.AtomicCommerceNumericFacet & JSXBase.HTMLAttributes; /** @@ -9437,6 +9852,7 @@ declare module "@stencil/core" { "atomic-commerce-products-per-page": LocalJSX.AtomicCommerceProductsPerPage & JSXBase.HTMLAttributes; /** * The `atomic-commerce-query-error` component handles fatal errors when performing a query on the Commerce API. When the error is known, it displays a link to relevant documentation for debugging purposes. When the error is unknown, it displays a small text area with the JSON content of the error. + * @alpha */ "atomic-commerce-query-error": LocalJSX.AtomicCommerceQueryError & JSXBase.HTMLAttributes; /** @@ -9444,9 +9860,13 @@ declare module "@stencil/core" { * @alpha */ "atomic-commerce-query-summary": LocalJSX.AtomicCommerceQuerySummary & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-commerce-recommendation-interface` component is meant to be used as the parent of one or more `atomic-commerce-recommendation-list` components. It handles the headless search engine and localization configurations. + */ "atomic-commerce-recommendation-interface": LocalJSX.AtomicCommerceRecommendationInterface & JSXBase.HTMLAttributes; /** * The `atomic-commerce-recommendation-list` component displays a list of product recommendations by applying one or more product templates. + * @alpha */ "atomic-commerce-recommendation-list": LocalJSX.AtomicCommerceRecommendationList & JSXBase.HTMLAttributes; /** @@ -9470,18 +9890,22 @@ declare module "@stencil/core" { * The `atomic-commerce-search-box-instant-products` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of instant results behavior. * This component does not support accessibility out-of-the-box. To do so, see [Instant Results Accessibility](https://docs.coveo.com/en/atomic/latest/usage/accessibility/#instant-results-accessibility). * This component is not supported on mobile. + * @alpha */ "atomic-commerce-search-box-instant-products": LocalJSX.AtomicCommerceSearchBoxInstantProducts & JSXBase.HTMLAttributes; /** * The `atomic-commerce-search-box-query-suggestions` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of query suggestion behavior. + * @alpha */ "atomic-commerce-search-box-query-suggestions": LocalJSX.AtomicCommerceSearchBoxQuerySuggestions & JSXBase.HTMLAttributes; /** * The `atomic-commerce-search-box-recent-queries` component can be added as a child of an `atomic-commerce-search-box` component, allowing for the configuration of recent query suggestions. + * @alpha */ "atomic-commerce-search-box-recent-queries": LocalJSX.AtomicCommerceSearchBoxRecentQueries & JSXBase.HTMLAttributes; /** * The `atomic-commerce-sort-dropdown` component renders a dropdown that the end user can interact with to select the criteria to use when sorting products. + * @alpha */ "atomic-commerce-sort-dropdown": LocalJSX.AtomicCommerceSortDropdown & JSXBase.HTMLAttributes; /** @@ -9491,6 +9915,7 @@ declare module "@stencil/core" { /** * A facet is a list of values for a certain field occurring in the results. * An `atomic-commerce-timeframe-facet` displays a facet of the results for the current query as date intervals. + * @alpha */ "atomic-commerce-timeframe-facet": LocalJSX.AtomicCommerceTimeframeFacet & JSXBase.HTMLAttributes; /** @@ -9604,6 +10029,14 @@ declare module "@stencil/core" { * @example */ "atomic-insight-user-actions-session": LocalJSX.AtomicInsightUserActionsSession & JSXBase.HTMLAttributes; + /** + * This component displays all the actions performed by a user around the time they created a case. + * The actions are grouped into multiple sessions, including the session during which the case was created, + * the sessions preceding the case creation and the sessions following the case creation. + * @component + * @example + */ + "atomic-insight-user-actions-timeline": LocalJSX.AtomicInsightUserActionsTimeline & JSXBase.HTMLAttributes; "atomic-ipx-body": LocalJSX.AtomicIpxBody & JSXBase.HTMLAttributes; "atomic-ipx-button": LocalJSX.AtomicIpxButton & JSXBase.HTMLAttributes; "atomic-ipx-embedded": LocalJSX.AtomicIpxEmbedded & JSXBase.HTMLAttributes; @@ -9659,34 +10092,123 @@ declare module "@stencil/core" { "atomic-popover": LocalJSX.AtomicPopover & JSXBase.HTMLAttributes; /** * The `atomic-product` component is used internally by the `atomic-commerce-product-list` component. + * @alpha */ "atomic-product": LocalJSX.AtomicProduct & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-product-children` component renders a section that allows the user to select a nested product (e.g., a color variant of a given product). + * This component leverages the [product grouping](https://docs.coveo.com/en/l78i2152/) feature. + */ "atomic-product-children": LocalJSX.AtomicProductChildren & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-product-description` component renders the description of a product. + */ "atomic-product-description": LocalJSX.AtomicProductDescription & JSXBase.HTMLAttributes; /** * The `atomic-product-field-condition` component takes a list of conditions that, if fulfilled, apply the template in which it's defined. * The condition properties can be based on any top-level product property of the `product` object, not restricted to fields (e.g., `ec_name`). + * @alpha */ "atomic-product-field-condition": LocalJSX.AtomicProductFieldCondition & JSXBase.HTMLAttributes; /** * The `atomic-product-image` component renders an image from a product field. + * @alpha */ "atomic-product-image": LocalJSX.AtomicProductImage & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-product-link` component automatically transforms a search product title into a clickable link that points to the original item. + */ "atomic-product-link": LocalJSX.AtomicProductLink & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-product-numeric-field-value` component renders the value of a number product field. + * The number can be formatted by adding a `atomic-format-number`, `atomic-format-currency` or `atomic-format-unit` component into this component. + */ "atomic-product-numeric-field-value": LocalJSX.AtomicProductNumericFieldValue & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-product-price` component renders the price of a product. + */ "atomic-product-price": LocalJSX.AtomicProductPrice & JSXBase.HTMLAttributes; /** * The `atomic-product-rating` element renders a star rating. + * @alpha */ "atomic-product-rating": LocalJSX.AtomicProductRating & JSXBase.HTMLAttributes; + /** + * @alpha This section is intended to display components that allow the user to perform an action on a product without having to view its details. + * In commerce interface, the user can usually add the product to their cart or wish list. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ "atomic-product-section-actions": LocalJSX.AtomicProductSectionActions & JSXBase.HTMLAttributes; + /** + * @alpha This section is meant to render badges that highlight special features of the product. + * Behavior: + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * ** You should ensure that elements inside of it have `height: var(--line-height)`. + * * Is a wrapping flexbox with a gap. + * * May appear over, next to, or beneath the visual section. + */ "atomic-product-section-badges": LocalJSX.AtomicProductSectionBadges & JSXBase.HTMLAttributes; + /** + * @alpha This section is meant to render additional descriptive information about the product. + * Behavior: + * * Has a maximum height of two lines. + * * Exposes the `--line-height` variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + * * Has a font weight. + */ "atomic-product-section-bottom-metadata": LocalJSX.AtomicProductSectionBottomMetadata & JSXBase.HTMLAttributes; + /** + * @alpha This section is meant to render child products, available when using the component. + * Behavior: + * * Shows children at the bottom of the result, indented and wrapped in a border. + */ "atomic-product-section-children": LocalJSX.AtomicProductSectionChildren & JSXBase.HTMLAttributes; + /** + * @alpha This section is intended to render an informative summary of the product's description. + * Behavior: + * * Has a fixed height of one to three lines, depending on the layout and density. + * * Ellipses overflowing text. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ "atomic-product-section-description": LocalJSX.AtomicProductSectionDescription & JSXBase.HTMLAttributes; + /** + * @alpha This section is intended to display the field that's important for its search criteria. + * For example, in Commerce, a product's price is often more important than the title itself. + * Behavior: + * * Has a very large font size. + * * Is the second closest element beneath the name section. + */ "atomic-product-section-emphasized": LocalJSX.AtomicProductSectionEmphasized & JSXBase.HTMLAttributes; + /** + * @alpha This section is intended to display some fields that are directly related to the name of the product. + * In commerce, this could be the product rating, which is tied to the nature of the product itself, + * rather than to the product's description. + * Behavior: + * * Has a very small font size. + * * Is the closest element beneath the title section. + */ "atomic-product-section-metadata": LocalJSX.AtomicProductSectionMetadata & JSXBase.HTMLAttributes; + /** + * @alpha This section is intended to display the product's name, and its main use is to make the product list scannable. + * Behavior: + * * Has a fixed height of two lines on grid layouts. + * * Exposes the `--line-height` CSS variable so child elements can adjust to the current line height. + * * Has a defined CSS `color` property for text. + */ "atomic-product-section-name": LocalJSX.AtomicProductSectionName & JSXBase.HTMLAttributes; + /** + * @alpha This section is intended to provide visual information about the product. + * In commerce, an image is a great shorthand for a product category. + * Behavior: + * * Has a fixed size that depends on the specified image size, the layout, the density, and the screen size. + * ** You should ensure that elements inside of it take the available space. + * * Always has a 1:1 aspect ratio. + */ "atomic-product-section-visual": LocalJSX.AtomicProductSectionVisual & JSXBase.HTMLAttributes; /** * @alpha * A product template determines the format of the query results, depending on the conditions that are defined for each template. @@ -9696,6 +10218,9 @@ declare module "@stencil/core" { * @MapProp name: mustNotMatch;attr: must-not-match;docs: The field and values that must not be matched by a product item for the template to apply. For example, a template with the following attribute only applies to product items whose `filetype` is not `lithiummessage`: `must-not-match-filetype="lithiummessage";type: Record ;default: {} */ "atomic-product-template": LocalJSX.AtomicProductTemplate & JSXBase.HTMLAttributes; + /** + * @alpha The `atomic-product-text` component renders the value of a string product field. + */ "atomic-product-text": LocalJSX.AtomicProductText & JSXBase.HTMLAttributes; /** * The `atomic-query-error` component handles fatal errors when performing a query on the index or Search API. When the error is known, it displays a link to relevant documentation link for debugging purposes. When the error is unknown, it displays a small text area with the JSON content of the error. diff --git a/packages/atomic/src/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tsx b/packages/atomic/src/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tsx index 09d408cec08..04b03cddb95 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tsx @@ -61,7 +61,7 @@ type AnyFacetValue = * @part label - The "Filters" label. * @part clear - The button to clear all filters. * - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-breadbox', diff --git a/packages/atomic/src/components/commerce/atomic-commerce-did-you-mean/atomic-commerce-did-you-mean.tsx b/packages/atomic/src/components/commerce/atomic-commerce-did-you-mean/atomic-commerce-did-you-mean.tsx index 33702733684..8eaebd87475 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-did-you-mean/atomic-commerce-did-you-mean.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-did-you-mean/atomic-commerce-did-you-mean.tsx @@ -19,7 +19,7 @@ import {TriggerCorrection} from '../../common/query-correction/trigger-correctio import {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface'; /** - * @internal + * @alpha * * The `atomic-commerce-query-correction` component is responsible for handling query corrections. When a query returns no products but finds a possible query correction, the component either suggests the correction or automatically triggers a new query with the suggested term. * diff --git a/packages/atomic/src/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tsx b/packages/atomic/src/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tsx index 8b57e817684..fe6d128808b 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tsx @@ -9,7 +9,7 @@ import {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-int import {buildCommerceLayout} from './commerce-layout'; /** - * @internal + * @alpha * The `atomic-commerce-layout` helps organize elements in the commerce page. */ @Component({ diff --git a/packages/atomic/src/components/commerce/atomic-commerce-no-products/atomic-commerce-no-products.tsx b/packages/atomic/src/components/commerce/atomic-commerce-no-products/atomic-commerce-no-products.tsx index 379605377a6..a4455f907c3 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-no-products/atomic-commerce-no-products.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-no-products/atomic-commerce-no-products.tsx @@ -21,7 +21,7 @@ import {getSummary} from '../../common/no-items/utils'; import {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface'; /** - * @internal + * @alpha * * The `atomic-no-products` component displays search tips when there are no products. Any additional content slotted inside of its element will be displayed as well. * diff --git a/packages/atomic/src/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tsx b/packages/atomic/src/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tsx index ae4c7a86474..3d3789b5590 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tsx @@ -263,7 +263,10 @@ export class AtomicCommerceProductList this.imageSize ), content: this.productTemplateProvider.getTemplateContent(product), - linkContent: this.productTemplateProvider.getLinkTemplateContent(product), + linkContent: + this.display === 'grid' + ? this.productTemplateProvider.getLinkTemplateContent(product) + : this.productTemplateProvider.getEmptyLinkTemplateContent(), store: this.bindings.store, density: this.density, imageSize: this.imageSize, diff --git a/packages/atomic/src/components/commerce/atomic-commerce-query-error/atomic-commerce-query-error.tsx b/packages/atomic/src/components/commerce/atomic-commerce-query-error/atomic-commerce-query-error.tsx index 8535dbddfdf..ee936bf03d4 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-query-error/atomic-commerce-query-error.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-query-error/atomic-commerce-query-error.tsx @@ -35,7 +35,7 @@ import {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-int * @part more-info-btn - A button to request additional error information. * @part error-info - Additional error information. * - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-query-error', diff --git a/packages/atomic/src/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.tsx b/packages/atomic/src/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.tsx index ebe2bca4b85..6a4f28793dc 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.tsx @@ -38,7 +38,7 @@ export type CommerceBindings = CommonBindings< NonceBindings; /** - * @internal + * @alpha * The `atomic-commerce-recommendation-interface` component is meant to be used as the parent of one or more `atomic-commerce-recommendation-list` components. It handles the headless search engine and localization configurations. */ @Component({ diff --git a/packages/atomic/src/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tsx b/packages/atomic/src/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tsx index d7ac856772b..61e58ad7b9c 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tsx @@ -46,7 +46,7 @@ import {SelectChildProductEventArgs} from '../product-template-components/atomic /** * The `atomic-commerce-recommendation-list` component displays a list of product recommendations by applying one or more product templates. - * @internal + * @alpha * * @part result-list - The element containing the list of product recommendations. * @part result-list-grid-clickable-container - The parent of a recommended product and the clickable link encompassing it. @@ -330,7 +330,10 @@ export class AtomicCommerceRecommendationList this.imageSize ), content: this.productTemplateProvider.getTemplateContent(product), - linkContent: this.productTemplateProvider.getLinkTemplateContent(product), + linkContent: + this.display === 'grid' + ? this.productTemplateProvider.getLinkTemplateContent(product) + : this.productTemplateProvider.getEmptyLinkTemplateContent(), store: this.bindings.store, density: this.density, display: this.display, diff --git a/packages/atomic/src/components/commerce/atomic-commerce-sort-dropdown/atomic-commerce-sort-dropdown.tsx b/packages/atomic/src/components/commerce/atomic-commerce-sort-dropdown/atomic-commerce-sort-dropdown.tsx index d8c6d939f9f..74a7383e13d 100644 --- a/packages/atomic/src/components/commerce/atomic-commerce-sort-dropdown/atomic-commerce-sort-dropdown.tsx +++ b/packages/atomic/src/components/commerce/atomic-commerce-sort-dropdown/atomic-commerce-sort-dropdown.tsx @@ -31,7 +31,7 @@ import {CommerceSortOption, getSortByLabel} from '../sort/option'; * @part select-separator - The element separating the select from the icon. * @part placeholder - The dropdown placeholder for while the interface is initializing. * - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-sort-dropdown', diff --git a/packages/atomic/src/components/commerce/atomic-product/atomic-product.tsx b/packages/atomic/src/components/commerce/atomic-product/atomic-product.tsx index c72ae4ff70c..58360280be6 100644 --- a/packages/atomic/src/components/commerce/atomic-product/atomic-product.tsx +++ b/packages/atomic/src/components/commerce/atomic-product/atomic-product.tsx @@ -24,7 +24,7 @@ import { /** * The `atomic-product` component is used internally by the `atomic-commerce-product-list` component. - * @internal + * @alpha */ @Component({ tag: 'atomic-product', @@ -48,13 +48,13 @@ export class AtomicProduct { /** * The InteractiveProduct item. - * @internal + * @alpha */ @Prop() interactiveProduct!: InteractiveProduct; /** * Global Atomic state. - * @internal + * @alpha */ @Prop() store?: AtomicCommonStore; @@ -93,7 +93,7 @@ export class AtomicProduct { @Prop() classes = ''; /** - * @internal + * @alpha */ @Prop() loadingFlag?: string; @@ -101,7 +101,7 @@ export class AtomicProduct { * Internal function used in advanced setups, which lets you bypass the standard HTML template system. * Particularly useful for Atomic React * - * @internal + * @alpha */ @Prop() renderingFunction: ItemRenderingFunction; diff --git a/packages/atomic/src/components/commerce/facets/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.tsx b/packages/atomic/src/components/commerce/facets/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.tsx index 8a58b522639..57b7f47eaa1 100644 --- a/packages/atomic/src/components/commerce/facets/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.tsx +++ b/packages/atomic/src/components/commerce/facets/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.tsx @@ -34,7 +34,7 @@ import type {Range} from '../facet-number-input/atomic-commerce-facet-number-inp /** * The `atomic-commerce-numeric-facet` component is responsible for rendering a commerce facet that allows the user to filter products using numeric ranges. * - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-numeric-facet', diff --git a/packages/atomic/src/components/commerce/facets/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.tsx b/packages/atomic/src/components/commerce/facets/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.tsx index 689ac961057..d9b4227a3d9 100644 --- a/packages/atomic/src/components/commerce/facets/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.tsx +++ b/packages/atomic/src/components/commerce/facets/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.tsx @@ -32,7 +32,7 @@ import {CommerceBindings as Bindings} from '../../atomic-commerce-interface/atom * A facet is a list of values for a certain field occurring in the results. * An `atomic-commerce-timeframe-facet` displays a facet of the results for the current query as date intervals. * - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-timeframe-facet', diff --git a/packages/atomic/src/components/commerce/facets/facet-number-input/atomic-commerce-facet-number-input.tsx b/packages/atomic/src/components/commerce/facets/facet-number-input/atomic-commerce-facet-number-input.tsx index 757d7d504a4..c121a2a65c4 100644 --- a/packages/atomic/src/components/commerce/facets/facet-number-input/atomic-commerce-facet-number-input.tsx +++ b/packages/atomic/src/components/commerce/facets/facet-number-input/atomic-commerce-facet-number-input.tsx @@ -8,7 +8,7 @@ export type Range = {start: number; end: number}; /** * Internal component made to be integrated in a NumericFacet. - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-facet-number-input', diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-children/atomic-product-children.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-children/atomic-product-children.tsx index 61460ba9135..fe6ddc087e1 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-children/atomic-product-children.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-children/atomic-product-children.tsx @@ -26,7 +26,7 @@ export interface SelectChildProductEventArgs { } /** - * @internal + * @alpha * The `atomic-product-children` component renders a section that allows the user to select a nested product (e.g., a color variant of a given product). * * This component leverages the [product grouping](https://docs.coveo.com/en/l78i2152/) feature. diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-description/atomic-product-description.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-description/atomic-product-description.tsx index e00153f0ba8..770a7fcb127 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-description/atomic-product-description.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-description/atomic-product-description.tsx @@ -12,7 +12,7 @@ import {CommerceBindings} from '../../atomic-commerce-interface/atomic-commerce- import {ProductContext} from '../product-template-decorators'; /** - * @internal + * @alpha * The `atomic-product-description` component renders the description of a product. */ @Component({ @@ -81,7 +81,11 @@ export class AtomicProductDescription } } - private onToggleExpand() { + private onToggleExpand(e?: MouseEvent) { + if (e) { + e.stopPropagation(); + } + this.isExpanded = !this.isExpanded; } @@ -124,7 +128,7 @@ export class AtomicProductDescription part="label-button" class={`my-2 p-1 text-xs ${this.isExpanded || !this.isTruncated || this.truncateAfter === 'none' ? 'invisible' : ''}`} title={this.bindings.i18n.t('show-more')} - onClick={() => this.onToggleExpand()} + onClick={(e) => this.onToggleExpand(e)} > `. diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-numeric-field-value/atomic-product-numeric-field-value.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-numeric-field-value/atomic-product-numeric-field-value.tsx index 3ec67d27d31..632657e51bc 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-numeric-field-value/atomic-product-numeric-field-value.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-numeric-field-value/atomic-product-numeric-field-value.tsx @@ -9,7 +9,7 @@ import { import {ProductContext} from '../product-template-decorators'; /** - * @internal + * @alpha * The `atomic-product-numeric-field-value` component renders the value of a number product field. * * The number can be formatted by adding a `atomic-format-number`, `atomic-format-currency` or `atomic-format-unit` component into this component. diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-price/atomic-product-price.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-price/atomic-product-price.tsx index c224720fa78..6220cf32401 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-price/atomic-product-price.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-price/atomic-product-price.tsx @@ -14,7 +14,7 @@ import {CommerceBindings} from '../../atomic-commerce-interface/atomic-commerce- import {ProductContext} from '../product-template-decorators'; /** - * @internal + * @alpha * The `atomic-product-price` component renders the price of a product. */ @Component({ diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-rating/atomic-product-rating.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-rating/atomic-product-rating.tsx index a51c728b962..b8dde9ffd48 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-rating/atomic-product-rating.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-rating/atomic-product-rating.tsx @@ -18,7 +18,7 @@ import {ProductContext} from '../product-template-decorators'; * @part value-rating - The wrapper that contains the row of inactive stars and the row of active stars. * @part value-rating-icon - The individual star icons used in the rating display. * - * @internal + * @alpha */ @Component({ tag: 'atomic-product-rating', diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-actions.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-actions.tsx index 8ead7ccfaa5..d23e057f934 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-actions.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-actions.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is intended to display components that allow the user to perform an action on a product without having to view its details. * In commerce interface, the user can usually add the product to their cart or wish list. diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-badges.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-badges.tsx index dc9089cc105..bf70175631a 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-badges.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-badges.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is meant to render badges that highlight special features of the product. * diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-bottom-metadata.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-bottom-metadata.tsx index 341b8d8b87e..50249b3f059 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-bottom-metadata.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-bottom-metadata.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is meant to render additional descriptive information about the product. * diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-children.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-children.tsx index 148e3d7cf9a..5e46164ade3 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-children.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-children.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is meant to render child products, available when using the component. * diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-description.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-description.tsx index 460b9aab5b4..626028d8b81 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-description.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-description.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is intended to render an informative summary of the product's description. * diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-emphasized.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-emphasized.tsx index 89fd4f3e841..67fa38bb280 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-emphasized.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-emphasized.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is intended to display the field that's important for its search criteria. * For example, in Commerce, a product's price is often more important than the title itself. diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-metadata.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-metadata.tsx index aa2bbd28fa8..f4a96e0231b 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-metadata.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-metadata.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is intended to display some fields that are directly related to the name of the product. * In commerce, this could be the product rating, which is tied to the nature of the product itself, diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-name.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-name.tsx index 3b620340e61..714ed856360 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-name.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-name.tsx @@ -2,7 +2,7 @@ import {Element, Component} from '@stencil/core'; import {hideEmptySection} from '../../../../utils/item-section-utils'; /** - * @internal + * @alpha * * This section is intended to display the product's name, and its main use is to make the product list scannable. * diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-visual.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-visual.tsx index e3dcc4b1966..3d3fd3b5e7c 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-visual.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-sections/atomic-product-section-visual.tsx @@ -3,7 +3,7 @@ import {hideEmptySection} from '../../../../utils/item-section-utils'; import {ItemDisplayImageSize} from '../../../common/layout/display-options'; /** - * @internal + * @alpha * * This section is intended to provide visual information about the product. * In commerce, an image is a great shorthand for a product category. diff --git a/packages/atomic/src/components/commerce/product-template-components/atomic-product-text/atomic-product-text.tsx b/packages/atomic/src/components/commerce/product-template-components/atomic-product-text/atomic-product-text.tsx index d435314cdef..e40a1d75eb0 100644 --- a/packages/atomic/src/components/commerce/product-template-components/atomic-product-text/atomic-product-text.tsx +++ b/packages/atomic/src/components/commerce/product-template-components/atomic-product-text/atomic-product-text.tsx @@ -16,7 +16,7 @@ import {ProductContext} from '../product-template-decorators'; import {getStringValueFromProductOrNull} from '../product-utils'; /** - * @internal + * @alpha * The `atomic-product-text` component renders the value of a string product field. */ @Component({ diff --git a/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-instant-products/atomic-commerce-search-box-instant-products.tsx b/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-instant-products/atomic-commerce-search-box-instant-products.tsx index 6f3e244bfbb..9f1c0646997 100644 --- a/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-instant-products/atomic-commerce-search-box-instant-products.tsx +++ b/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-instant-products/atomic-commerce-search-box-instant-products.tsx @@ -40,7 +40,7 @@ export type AriaLabelGenerator = ( * This component is not supported on mobile. * * @slot default - The default slot where the instant products are rendered. - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-search-box-instant-products', diff --git a/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-query-suggestions/atomic-commerce-search-box-query-suggestions.tsx b/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-query-suggestions/atomic-commerce-search-box-query-suggestions.tsx index ab5f5add258..929cedd1e13 100644 --- a/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-query-suggestions/atomic-commerce-search-box-query-suggestions.tsx +++ b/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-query-suggestions/atomic-commerce-search-box-query-suggestions.tsx @@ -21,7 +21,7 @@ import { /** * The `atomic-commerce-search-box-query-suggestions` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of query suggestion behavior. - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-search-box-query-suggestions', diff --git a/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.tsx b/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.tsx index 9d7f67c8e9e..e788b079d8f 100644 --- a/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.tsx +++ b/packages/atomic/src/components/commerce/search-box-suggestions/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.tsx @@ -29,7 +29,7 @@ import {CommerceBindings as Bindings} from '../../atomic-commerce-interface/atom * @part recent-query-title - The 'Recent queries' title. * @part recent-query-clear - The 'Clear' button for clearing recent queries. * - * @internal + * @alpha */ @Component({ tag: 'atomic-commerce-search-box-recent-queries', diff --git a/packages/atomic/src/components/common/template-provider/template-provider.ts b/packages/atomic/src/components/common/template-provider/template-provider.ts index c091994ec5b..5371c6f3733 100644 --- a/packages/atomic/src/components/common/template-provider/template-provider.ts +++ b/packages/atomic/src/components/common/template-provider/template-provider.ts @@ -73,6 +73,10 @@ export abstract class TemplateProvider { return this.templateManager.selectLinkTemplate(item)!; } + public getEmptyLinkTemplateContent() { + return document.createDocumentFragment(); + } + public get templatesRegistered() { return this.props.getResultTemplateRegistered(); } diff --git a/packages/atomic/src/components/insight/index.ts b/packages/atomic/src/components/insight/index.ts index a5701644f43..e3312e16de3 100644 --- a/packages/atomic/src/components/insight/index.ts +++ b/packages/atomic/src/components/insight/index.ts @@ -4,6 +4,7 @@ export { InsightEngine, InsightEngineConfiguration, buildInsightEngine, + getSampleInsightEngineConfiguration, ResultList as InsightResultList, ResultListState as InsightResultListState, buildResultList as buildInsightResultList, diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.tsx b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.tsx index cba15c5eb0d..e25c26df612 100644 --- a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.tsx +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.tsx @@ -111,7 +111,10 @@ export class AtomicInsightUserActionsSession { count: this.userActionsAfterCaseCreation.length, }); return ( -
+
@@ -139,8 +142,11 @@ export class AtomicInsightUserActionsSession {
{this.renderSessionStartDate()} - {this.areActionsAfterCaseCreationVisible && - this.renderActions(this.userActionsAfterCaseCreation)} + {this.areActionsAfterCaseCreationVisible && ( +
+ {this.renderActions(this.userActionsAfterCaseCreation)} +
+ )} {isShowMoreActionsButtonVisible && this.renderShowMoreActionsButton()} diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/user-action.tsx b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/user-action.tsx index c3535a7dfcc..9e090f39e8a 100644 --- a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/user-action.tsx +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-session/user-action.tsx @@ -50,7 +50,7 @@ export const UserAction: FunctionalComponent = ({ case 'TICKET_CREATION': return (
- a{bindings.i18n.t('ticket-created')} + {bindings.i18n.t('ticket-created')}
); case 'CUSTOM': diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.new.stories.tsx b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.new.stories.tsx new file mode 100644 index 00000000000..ba3115d8205 --- /dev/null +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.new.stories.tsx @@ -0,0 +1,26 @@ +import {parameters} from '@coveo/atomic/storybookUtils/common/common-meta-parameters'; +import {renderComponent} from '@coveo/atomic/storybookUtils/common/render-component'; +import type {Meta, StoryObj as Story} from '@storybook/web-components'; +import {wrapInInsightInterface} from '../../../../../storybookUtils/insight/insight-interface-wrapper'; + +const {decorator, play} = wrapInInsightInterface(); + +const meta: Meta = { + component: 'atomic-insight-user-actions-timeline', + title: 'Atomic/Insight/UserActionsTimelines', + id: 'atomic-insight-user-actions-timeline', + + render: renderComponent, + decorators: [decorator], + parameters, + play, +}; + +export default meta; + +export const Default: Story = { + name: 'atomic-insight-user-actions-timeline', + play: async (context) => { + await play(context); + }, +}; diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.pcss b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.pcss new file mode 100644 index 00000000000..e0edebb1211 --- /dev/null +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.pcss @@ -0,0 +1,6 @@ +@import '../../../../global/global.pcss'; + +.separator { + height: 1px; + background-color: #e0e1dd; +} diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.tsx b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.tsx new file mode 100644 index 00000000000..dfdb30fdbbc --- /dev/null +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.tsx @@ -0,0 +1,228 @@ +import {Component, h, State, Prop} from '@stencil/core'; +import { + buildInsightUserActions, + InsightUserActions, + InsightUserActionsState, + InsightUserSession, +} from '../..'; +import ArrowDownIcon from '../../../../images/big-arrow-down.svg'; +import ArrowUpIcon from '../../../../images/big-arrow-up.svg'; +import { + InitializableComponent, + InitializeBindings, + BindStateToController, +} from '../../../../utils/initialization-utils'; +import {Button} from '../../../common/button'; +import {NoItemsContainer} from '../../../common/no-items/container'; +import {MagnifyingGlass} from '../../../common/no-items/magnifying-glass'; +import {InsightBindings} from '../../atomic-insight-interface/atomic-insight-interface'; + +/** + * This component displays all the actions performed by a user around the time they created a case. + * The actions are grouped into multiple sessions, including the session during which the case was created, + * the sessions preceding the case creation and the sessions following the case creation. + * + * @component + * @example + * + * + */ +@Component({ + tag: 'atomic-insight-user-actions-timeline', + styleUrl: 'atomic-insight-user-actions-timeline.pcss', + shadow: true, +}) +export class AtomicInsightUserActionsTimeline + implements InitializableComponent +{ + @InitializeBindings() public bindings!: InsightBindings; + public userActions!: InsightUserActions; + + @BindStateToController('userActions') + @State() + public userActionsState!: InsightUserActionsState; + public error!: Error; + + /** + * The ID of the user whose actions are being displayed. For example in email format "someone@company.com". + */ + @Prop() public userId!: string; + /** + * The date and time when the case was created. For example "2024-01-01T00:00:00Z" + */ + @Prop() public ticketCreationDateTime!: string; + + public initialize() { + this.userActions = buildInsightUserActions(this.bindings.engine, { + options: {ticketCreationDate: this.ticketCreationDateTime}, + }); + + this.userActions.fetchUserActions(this.userId); + } + + @State() followingSessionsAreVisible = false; + @State() precedingSessionsAreVisible = false; + + private toggleFollowingSessions() { + this.followingSessionsAreVisible = !this.followingSessionsAreVisible; + } + + private togglePrecedingSessions() { + this.precedingSessionsAreVisible = !this.precedingSessionsAreVisible; + } + + private renderSessions( + sessions: Array | undefined, + renderSeparator?: Function, + testId?: string + ) { + return ( +
+ {sessions?.map(({actions, start}) => [ +
+ +
, + renderSeparator ? renderSeparator() : null, + ])} +
+ ); + } + + private renderToggleFollowingSessionsButton() { + const btnClasses = 'flex items-center text-left p-2 text-sm max-w-full'; + const iconClasses = 'h-3 w-3 mr-1'; + const label = this.followingSessionsAreVisible + ? this.bindings.i18n.t('hide-following-sessions') + : this.bindings.i18n.t('show-following-sessions'); + const icon = this.followingSessionsAreVisible ? ArrowDownIcon : ArrowUpIcon; + + return ( +
+ +
+ ); + } + + private renderTogglePrecedingSessionsButton() { + const btnClasses = 'flex items-center text-left p-2 text-sm max-w-full'; + const iconClasses = 'h-3 w-3 mr-1'; + const label = this.precedingSessionsAreVisible + ? this.bindings.i18n.t('hide-preceding-sessions') + : this.bindings.i18n.t('show-preceding-sessions'); + const icon = this.precedingSessionsAreVisible ? ArrowUpIcon : ArrowDownIcon; + + return ( +
+ +
+ ); + } + + private renderFollowingSessionsSection() { + if (!this.userActionsState.timeline?.followingSessions?.length) { + return null; + } + return [ + this.renderToggleFollowingSessionsButton(), +
, + this.followingSessionsAreVisible + ? this.renderSessions( + this.userActionsState.timeline?.followingSessions, + () =>
, + 'following-session' + ) + : null, + ]; + } + + private renderPrecedingSessionsSection() { + if (!this.userActionsState.timeline?.precedingSessions?.length) { + return null; + } + return [ +
, + this.precedingSessionsAreVisible + ? this.renderSessions( + this.userActionsState.timeline?.precedingSessions, + () =>
, + 'preceding-session' + ) + : null, + this.renderTogglePrecedingSessionsButton(), + ]; + } + + private renderTimeline() { + return ( +
+ {this.renderFollowingSessionsSection()} +
+ +
+ {this.renderPrecedingSessionsSection()} +
+ ); + } + + private renderNoUserActionsScreen() { + return ( +
+ + +
+ {this.bindings.i18n.t('no-user-actions-available')} +
+
+ {this.bindings.i18n.t('no-user-actions-associated-with-params')} +
+
+
+ ); + } + + render() { + const areUserActionsAvailable = this.userActionsState.timeline?.session; + const hasError = this.userActionsState.error; + + if (areUserActionsAvailable && !hasError) { + return this.renderTimeline(); + } + return this.renderNoUserActionsScreen(); + } +} diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/atomic-insight-user-actions-timeline.e2e.ts b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/atomic-insight-user-actions-timeline.e2e.ts new file mode 100644 index 00000000000..24320069086 --- /dev/null +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/atomic-insight-user-actions-timeline.e2e.ts @@ -0,0 +1,198 @@ +import {test, expect} from './fixture'; + +const followingSessionsActions = [ + { + name: 'CUSTOM', + value: + '{"event_type":"example","event_value":"exampleCustomAction","origin_level_1":"default"}', + time: new Date('2024-09-02T15:30:00Z').valueOf(), + }, + { + name: 'CUSTOM', + value: + '{"event_type":"example","event_value":"exampleCustomAction","origin_level_1":"default"}', + time: new Date('2024-09-01T15:30:00Z').valueOf(), + }, +]; + +const ticketCreationSessionActions = [ + { + name: 'CUSTOM', + value: + '{"event_type":"errors","event_value":"One","origin_level_1":"default","origin_level_2":"default"}', + time: new Date('2024-08-30T00:10:00Z').valueOf(), + }, + { + name: 'CUSTOM', + value: + '{"event_type":"errors","event_value":"Two","origin_level_1":"default","origin_level_2":"default"}', + time: new Date('2024-08-30T00:12:00Z').valueOf(), + }, + { + name: 'CUSTOM', + value: + '{"event_type":"errors","event_value":"Three","origin_level_1":"default","origin_level_2":"default"}', + time: new Date('2024-08-29T23:45:00Z').valueOf(), + }, +]; + +const precedingSessionsActions = [ + { + name: 'CUSTOM', + value: + '{"event_type":"example","event_value":"exampleCustomAction","origin_level_1":"default"}', + time: new Date('2024-08-29T15:40:00Z').valueOf(), + }, + { + name: 'CUSTOM', + value: + '{"event_type":"example","event_value":"exampleCustomAction","origin_level_1":"default"}', + time: new Date('2024-08-28T15:40:00Z').valueOf(), + }, +]; + +const exampleUserActions = [ + ...followingSessionsActions, + ...ticketCreationSessionActions, + ...precedingSessionsActions, +]; + +const exampleUserId = 'exampleUserId'; +const exampleTicketCreationDate = encodeURIComponent('2024-08-30'); + +test.describe('user actions timeline', () => { + test.describe('when user actions data is found', () => { + test.beforeEach(async ({userActionsTimeline, page}) => { + await userActionsTimeline.load({ + args: { + userId: exampleUserId, + ticketCreationDateTime: exampleTicketCreationDate, + }, + }); + await userActionsTimeline.mockUserActions(page, exampleUserActions); + }); + + test('should display the ticket creation session', async ({ + userActionsTimeline, + }) => { + await expect(userActionsTimeline.activeSession).toBeVisible(); + }); + + test('should display the show following sessions button', async ({ + userActionsTimeline, + }) => { + await expect( + userActionsTimeline.showFollowingSessionsbutton + ).toBeVisible(); + }); + + test('should display the show preceding sessions button', async ({ + userActionsTimeline, + }) => { + await expect( + userActionsTimeline.showPrecedingSessionsbutton + ).toBeVisible(); + }); + + test('should not display the preceding sessions automatically', async ({ + userActionsTimeline, + }) => { + await expect(userActionsTimeline.precedingSession).not.toBeVisible(); + }); + + test('should not display the following sessions automatically', async ({ + userActionsTimeline, + }) => { + await expect(userActionsTimeline.followingSession).not.toBeVisible(); + }); + + test.describe('when clicking the show more actions button', () => { + test('should properly show more actions', async ({ + userActionsTimeline, + }) => { + await expect(userActionsTimeline.showMoreActionsButton).toBeVisible(); + await expect(userActionsTimeline.moreActionsSection).not.toBeVisible(); + await userActionsTimeline.showMoreActionsButton.click(); + await userActionsTimeline.showMoreActionsButton.waitFor({ + state: 'hidden', + }); + + await expect(userActionsTimeline.moreActionsSection).toBeVisible(); + }); + }); + + test.describe('when toggling the following sessions', () => { + test('should properly show and hide the following sessions', async ({ + userActionsTimeline, + }) => { + const expectedFollowingSessionsCount = 2; + + await userActionsTimeline.showFollowingSessionsbutton.click(); + await userActionsTimeline.hideFollowingSessionsbutton.waitFor({ + state: 'visible', + }); + + await expect(userActionsTimeline.followingSession).toHaveCount( + expectedFollowingSessionsCount + ); + + await userActionsTimeline.hideFollowingSessionsbutton.click(); + await userActionsTimeline.showFollowingSessionsbutton.waitFor({ + state: 'visible', + }); + + await expect(userActionsTimeline.followingSession).not.toBeVisible(); + }); + }); + + test.describe('when toggling the preceding sessions', () => { + test('should properly show and hide the preceding sessions', async ({ + userActionsTimeline, + }) => { + const expectedPrecedingSessionsCount = 2; + + await userActionsTimeline.showPrecedingSessionsbutton.click(); + await userActionsTimeline.hidePrecedingSessionsbutton.waitFor({ + state: 'visible', + }); + + await expect(userActionsTimeline.precedingSession).toHaveCount( + expectedPrecedingSessionsCount + ); + + await userActionsTimeline.hidePrecedingSessionsbutton.click(); + await userActionsTimeline.showPrecedingSessionsbutton.waitFor({ + state: 'visible', + }); + + await expect(userActionsTimeline.precedingSession).not.toBeVisible(); + }); + }); + }); + + test.describe('when no user actions data is found', () => { + test.beforeEach(async ({userActionsTimeline, page}) => { + await userActionsTimeline.mockUserActions(page, []); + await userActionsTimeline.load(); + }); + + test('should display the user actions error screen', async ({ + userActionsTimeline, + }) => { + await expect(userActionsTimeline.userActionsError).toBeVisible(); + }); + }); + + test.describe('when an error occurs while fetching user actions', () => { + test.beforeEach(async ({userActionsTimeline, page}) => { + await userActionsTimeline.mockUserActionsError(page); + await userActionsTimeline.load(); + }); + + test('should display the user actions error screen', async ({ + userActionsTimeline, + }) => { + await expect(userActionsTimeline.userActionsError).toBeVisible(); + }); + }); +}); diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/fixture.ts b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/fixture.ts new file mode 100644 index 00000000000..2e05d942da9 --- /dev/null +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/fixture.ts @@ -0,0 +1,21 @@ +import {test as base} from '@playwright/test'; +import { + AxeFixture, + makeAxeBuilder, +} from '../../../../../../playwright-utils/base-fixture'; +import {UserActionsTimelinePageObject} from './page-object'; + +type AtomicInsightUserActionsTimelineE2EFixtures = { + userActionsTimeline: UserActionsTimelinePageObject; +}; + +export const test = base.extend< + AtomicInsightUserActionsTimelineE2EFixtures & AxeFixture +>({ + makeAxeBuilder, + userActionsTimeline: async ({page}, use) => { + await use(new UserActionsTimelinePageObject(page)); + }, +}); + +export {expect} from '@playwright/test'; diff --git a/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/page-object.ts b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/page-object.ts new file mode 100644 index 00000000000..f58bfc31e22 --- /dev/null +++ b/packages/atomic/src/components/insight/user-actions/atomic-insight-user-actions-timeline/e2e/page-object.ts @@ -0,0 +1,83 @@ +import {Page} from '@playwright/test'; +import {BasePageObject} from '../../../../../../playwright-utils/base-page-object'; + +export class UserActionsTimelinePageObject extends BasePageObject<'atomic-insight-user-actions-timeline'> { + constructor(page: Page) { + super(page, 'atomic-insight-user-actions-timeline'); + } + + get activeSession() { + return this.page.locator('[data-testid="active-session"]'); + } + + get followingSession() { + return this.page.locator('[data-testid="following-session"]'); + } + + get precedingSession() { + return this.page.locator('[data-testid="preceding-session"]'); + } + + get showFollowingSessionsbutton() { + return this.page.getByLabel('Show following sessions'); + } + + get hideFollowingSessionsbutton() { + return this.page.getByLabel('Hide following sessions'); + } + + get showPrecedingSessionsbutton() { + return this.page.getByLabel('Show preceding sessions'); + } + + get hidePrecedingSessionsbutton() { + return this.page.getByLabel('Hide preceding sessions'); + } + + get userActionsError() { + return this.page.locator('[data-testid="user-actions-error"]'); + } + + get showMoreActionsButton() { + return this.page.locator('[data-testid="show-more-actions-button"] button'); + } + + get moreActionsSection() { + return this.page.locator('[data-testid="more-actions-section"]'); + } + + async mockUserActions( + page: Page, + userActions: Array<{name: string; value: string; time: number}> + ) { + await page.route('**/user/actions', async (route) => { + const body = {value: userActions}; + + await route.fulfill({ + body: JSON.stringify(body), + status: 200, + headers: { + 'content-type': 'text/html', + }, + }); + }); + } + + async mockUserActionsError(page: Page) { + await page.route('**/user/actions', async (route) => { + const body = { + message: 'Access is denied.', + errorCode: 'ACCESS_DENIED', + requestID: '1486603b-db83-4dc2-9580-5f8e81c8e00c', + }; + + await route.fulfill({ + body: JSON.stringify(body), + status: 403, + headers: { + 'content-type': 'text/html', + }, + }); + }); + } +} diff --git a/packages/atomic/src/components/search/atomic-result/e2e/page-object.ts b/packages/atomic/src/components/search/atomic-result/e2e/page-object.ts new file mode 100644 index 00000000000..0b14f29cd33 --- /dev/null +++ b/packages/atomic/src/components/search/atomic-result/e2e/page-object.ts @@ -0,0 +1,8 @@ +import type {Page} from '@playwright/test'; +import {BasePageObject} from '../../../../../playwright-utils/base-page-object'; + +export class AtomicResultPageObject extends BasePageObject<'atomic-result'> { + constructor(page: Page) { + super(page, 'atomic-result'); + } +} diff --git a/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.new.stories.tsx b/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.new.stories.tsx index 92e21da9f21..691c1111b30 100644 --- a/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.new.stories.tsx +++ b/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.new.stories.tsx @@ -3,7 +3,16 @@ import {renderComponent} from '@coveo/atomic/storybookUtils/common/render-compon import {wrapInSearchInterface} from '@coveo/atomic/storybookUtils/search/search-interface-wrapper'; import type {Meta, StoryObj as Story} from '@storybook/web-components'; -const {decorator, play} = wrapInSearchInterface(); +const {decorator, play} = wrapInSearchInterface({ + search: { + preprocessSearchResponseMiddleware: (r) => { + const [result] = r.body.results; + result.title = 'Manage the Coveo In-Product Experiences (IPX)'; + result.clickUri = 'https://docs.coveo.com/en/3160'; + return r; + }, + }, +}); const meta: Meta = { component: 'atomic-result-list', title: 'Atomic/ResultList', @@ -18,5 +27,12 @@ const meta: Meta = { export default meta; export const Default: Story = { - name: 'atomic-result-list', + name: 'List Display', +}; + +export const Grid: Story = { + name: 'Grid Display', + args: { + 'attributes-display': 'grid', + }, }; diff --git a/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.tsx b/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.tsx index 20ce948563d..0692fcec22b 100644 --- a/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.tsx +++ b/packages/atomic/src/components/search/result-lists/atomic-result-list/atomic-result-list.tsx @@ -269,7 +269,10 @@ export class AtomicResultList implements InitializableComponent { this.imageSize ), content: this.itemTemplateProvider.getTemplateContent(result), - linkContent: this.itemTemplateProvider.getLinkTemplateContent(result), + linkContent: + this.display === 'grid' + ? this.itemTemplateProvider.getLinkTemplateContent(result) + : this.itemTemplateProvider.getEmptyLinkTemplateContent(), store: this.bindings.store, density: this.density, imageSize: this.imageSize, diff --git a/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/atomic-result-list.e2e.ts b/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/atomic-result-list.e2e.ts new file mode 100644 index 00000000000..721c6bc086b --- /dev/null +++ b/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/atomic-result-list.e2e.ts @@ -0,0 +1,35 @@ +import {test, expect} from './fixture'; + +test.describe('When using a list layout', () => { + test.beforeEach(async ({resultList}) => { + await resultList.load(); + }); + + test.describe('when clicking a result', () => { + test.beforeEach(async ({result}) => { + await result.hydrated.first().click(); + }); + + test('should not navigate', async ({page}) => { + expect(page.url()).toContain('http://localhost:4400/iframe.html'); + }); + }); +}); + +test.describe('When using a grid layout', () => { + test.beforeEach(async ({resultList}) => { + await resultList.load({story: 'grid'}); + }); + + test.describe('when clicking a result', () => { + test.beforeEach(async ({result}) => { + await result.hydrated.first().click(); + }); + + test('should navigate', async ({page}) => { + await expect + .poll(() => page.url()) + .toContain('https://docs.coveo.com/en/3160'); + }); + }); +}); diff --git a/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/fixture.ts b/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/fixture.ts new file mode 100644 index 00000000000..6076f85fed5 --- /dev/null +++ b/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/fixture.ts @@ -0,0 +1,24 @@ +import {test as base} from '@playwright/test'; +import { + AxeFixture, + makeAxeBuilder, +} from '../../../../../../playwright-utils/base-fixture'; +import {AtomicResultPageObject as Result} from '../../../atomic-result/e2e/page-object'; +import {AtomicResultListPageObject as ResultList} from './page-object'; + +type Fixture = { + resultList: ResultList; + result: Result; +}; + +export const test = base.extend({ + makeAxeBuilder, + resultList: async ({page}, use) => { + await use(new ResultList(page)); + }, + result: async ({page}, use) => { + await use(new Result(page)); + }, +}); + +export {expect} from '@playwright/test'; diff --git a/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/page-object.ts b/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/page-object.ts new file mode 100644 index 00000000000..fcf5261b305 --- /dev/null +++ b/packages/atomic/src/components/search/result-lists/atomic-result-list/e2e/page-object.ts @@ -0,0 +1,8 @@ +import type {Page} from '@playwright/test'; +import {BasePageObject} from '../../../../../../playwright-utils/base-page-object'; + +export class AtomicResultListPageObject extends BasePageObject<'atomic-result-list'> { + constructor(page: Page) { + super(page, 'atomic-result-list'); + } +} diff --git a/packages/atomic/src/images/big-arrow-down.svg b/packages/atomic/src/images/big-arrow-down.svg new file mode 100644 index 00000000000..a98f0eee699 --- /dev/null +++ b/packages/atomic/src/images/big-arrow-down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/atomic/src/images/big-arrow-up.svg b/packages/atomic/src/images/big-arrow-up.svg new file mode 100644 index 00000000000..f409304c75d --- /dev/null +++ b/packages/atomic/src/images/big-arrow-up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/atomic/src/index.ts b/packages/atomic/src/index.ts index 1a12fa3ba36..cb28a35cbce 100644 --- a/packages/atomic/src/index.ts +++ b/packages/atomic/src/index.ts @@ -13,6 +13,7 @@ export {PopoverChildFacet} from './components/common/facets/popover/popover-type export {resultContext} from './components/search/result-template-components/result-template-decorators'; export {productContext} from './components/commerce/product-template-components/product-template-decorators'; +export {SelectChildProductEventArgs} from './components/commerce/product-template-components/atomic-product-children/atomic-product-children'; export { dispatchSearchBoxSuggestionsEvent, SearchBoxSuggestionElement, diff --git a/packages/atomic/src/locales.json b/packages/atomic/src/locales.json index 7b2ca8d6e36..a4b17ee00e2 100644 --- a/packages/atomic/src/locales.json +++ b/packages/atomic/src/locales.json @@ -8263,6 +8263,168 @@ "zh-CN": "用户操作", "zh-TW": "使用者操作" }, + "no-user-actions-available": { + "en": "No user actions available", + "fr": "Aucune action utilisateur disponible", + "cs": "Nejsou k dispozici žádné uživatelské akce", + "da": "Ingen brugerhandlinger tilgængelige", + "de": "Keine Benutzeraktionen verfügbar", + "el": "Δεν υπάρχουν διαθέσιμες ενέργειες χρήστη", + "es": "No hay acciones de usuario disponibles", + "fi": "Käyttäjätoimintoja ei ole saatavilla", + "hu": "Nincsenek elérhető user műveletek", + "id": "Tidak ada tindakan pengguna yang tersedia", + "it": "Nessuna azione utente disponibile", + "ja": "利用可能なユーザーアクションはありません", + "ko": "사용자 액션을 사용할 수 없습니다", + "nl": "Geen gebruikersacties beschikbaar", + "no": "Ingen brukerhandlinger tilgjengelig", + "pl": "Brak dostępnych akcji użytkownika", + "pt": "Nenhuma ação do usuário disponível", + "pt-BR": "Nenhuma ação do usuário disponível", + "ru": "Доступных действий пользователя нет", + "sv": "Inga användaråtgärder tillgängliga", + "th": "ไม่มีการดำเนินการของผู้ใช้ที่สามารถใช้งานได้", + "tr": "Kullanılabilir kullanıcı eylemi yok", + "zh": "没有可用的用户操作", + "zh-CN": "没有可用的用户操作", + "zh-TW": "沒有可用的用戶操作" + }, + "no-user-actions-associated-with-params": { + "en": "There are no user actions associated with the user id or the case is too old to detect related actions.", + "fr": "Il n'y a pas d'actions utilisateur associées à l'identifiant utilisateur ou le cas est trop ancien pour détecter des actions liées.", + "cs": "K uživatelskému ID nejsou přiřazeny žádné uživatelské akce nebo je případ příliš starý na detekci souvisejících akcí.", + "da": "Der er ingen brugerhandlinger forbundet med bruger-id'et, eller sagen er for gammel til at opdage relaterede handlinger.", + "de": "Es gibt keine Benutzeraktionen, die mit der Benutzer-ID verbunden sind oder der Fall ist zu alt, um verwandte Aktionen zu erkennen.", + "el": "Δεν υπάρχουν ενέργειες χρήστη που σχετίζονται με το αναγνωριστικό χρήστη ή η περίπτωση είναι πολύ παλιά για να ανιχνεύσει σχετικές ενέργειες.", + "es": "No hay acciones de usuario asociadas con el ID de usuario o el caso es demasiado antiguo para detectar acciones relacionadas.", + "fi": "Käyttäjätunnukseen ei liity käyttäjätoimintoja tai tapaus on liian vanha havaittavaksi liittyviä toimeenpanovallan.", + "hu": "Nincsenek a felhasználói azonosítóhoz társított felhasználói műveletek vagy az eset túl régi a kapcsolódó műveletek észleléséhez.", + "id": "Tidak ada tindakan pengguna yang terkait dengan id pengguna atau kasusnya terlalu lama untuk mendeteksi tindakan terkait.", + "it": "Non ci sono azioni utente associate all'ID utente o il caso è troppo vecchio per rilevare azioni correlate.", + "ja": "ユーザーIDに関連付けられたユーザーアクションはない、またはケースが古すぎて関連アクションを検出できません。", + "ko": "사용자 ID에 연결된 사용자 작업이 없거나 사례가 너무 오래되어 관련 작업을 탐지할 수 없습니다.", + "nl": "Er zijn geen gebruikersacties geassocieerd met de gebruikers-id of de zaak is te oud om gerelateerde acties te detecteren.", + "no": "Det er ingen brukerhandlinger forbundet med bruker-IDen, eller saken er for gammel til å oppdage relaterte handlinger.", + "pl": "Brak akcji użytkownika powiązanych z identyfikatorem użytkownika lub sprawa jest zbyt stara, aby wykryć powiązane działania.", + "pt": "Não há ações do usuário associadas ao ID do usuário ou o caso é muito antigo para detectar ações relacionadas.", + "pt-BR": "Não há ações do usuário associadas ao ID do usuário ou o caso é muito antigo para detectar ações relacionadas.", + "ru": "Действий пользователя, связанных с идентификатором пользователя, нет, или дело слишком старое, чтобы обнаружить связанные действия.", + "sv": "Det finns inga användaråtgärder kopplade till användar-ID:t, eller fallet är för gammalt för att upptäcka relaterade åtgärder.", + "th": "ไม่มีการดำเนินการของผู้ใช้ที่เชื่อมโยงกับ ID ผู้ใช้หรือกรณีที่เก่าเกินไปในการตรวจสอบการดำเนินการที่เกี่ยวข้อง", + "tr": "Kullanıcı kimliği ile ilişkili kullanıcı işlemleri yok ya da durum, ilgili işlemleri tespit etmek için çok eski.", + "zh": "没有与用户id相关联的用户操作,或者案例太老无法检测到相关操作。", + "zh-CN": "没有与用户id相关联的用户操作,或者案例太老无法检测到相关操作。", + "zh-TW": "没有与用户id相关联的用户操作,或者案例太老无法检测到相关操作。" + }, + "hide-preceding-sessions": { + "en": "Hide preceding sessions", + "fr": "Masquer les sessions précédentes", + "cs": "Skrýt předchozí relace", + "da": "Skjul forudgående sessioner", + "de": "Vorherige Sitzungen ausblenden", + "el": "Απόκρυψη προηγούμενων συνεδριών", + "es": "Ocultar sesiones anteriores", + "fi": "Piilota edeltävät istunnot", + "hu": "Előző munkamenetek elrejtése", + "id": "Sembunyikan sesi sebelumnya", + "it": "Nascondi le sessioni precedenti", + "ja": "前のセッションを隠す", + "ko": "이전 세션 숨기기", + "nl": "Vorige sessies verbergen", + "no": "Skjul forrige økter", + "pl": "Ukryj poprzednie sesje", + "pt": "Ocultar sessões anteriores", + "pt-BR": "Ocultar sessões anteriores", + "ru": "Скрыть предыдущие сессии", + "sv": "Dölj tidigare sessioner", + "th": "ซ่อนเซสชันก่อนหน้า", + "tr": "Önceki oturumları gizle", + "zh": "隐藏前面的会话", + "zh-CN": "隐藏先前的会话", + "zh-TW": "隱藏前面的會話" + }, + "show-preceding-sessions": { + "en": "Show preceding sessions", + "fr": "Afficher les sessions précédentes", + "cs": "Zobrazit předchozí relace", + "da": "Vis foregående sessioner", + "de": "Vorangegangene Sitzungen anzeigen", + "el": "Εμφάνιση προηγούμενων συνεδριών", + "es": "Mostrar sesiones anteriores", + "fi": "Näytä edelliset istunnot", + "hu": "Előző munkamenetek megjelenítése", + "id": "Tampilkan sesi sebelumnya", + "it": "Mostra le sessioni precedenti", + "ja": "前のセッションを表示", + "ko": "이전 세션 보기", + "nl": "Vorige sessies tonen", + "no": "Vis forrige økter", + "pl": "Pokaż poprzednie sesje", + "pt": "Mostrar sessões anteriores", + "pt-BR": "Mostrar sessões anteriores", + "ru": "Показать предыдущие сессии", + "sv": "Visa föregående sessioner", + "th": "แสดงเซสชั่นก่อนหน้านี้", + "tr": "Önceki oturumları göster", + "zh": "显示前面的会议", + "zh-CN": "显示前面的会话", + "zh-TW": "顯示前面的會議" + }, + "hide-following-sessions": { + "en": "Hide following sessions", + "fr": "Masquer les sessions suivantes", + "cs": "Skrýt následující relace", + "da": "Skjul følgende sessioner", + "de": "Folgende Sitzungen ausblenden", + "el": "Απόκρυψη των επόμενων συνεδριών", + "es": "Ocultar las sesiones siguientes", + "fi": "Piilota seuraavat istunnot", + "hu": "A következő munkamenetek elrejtése", + "id": "Sembunyikan sesi berikutnya", + "it": "Nascondi le sessioni seguenti", + "ja": "次のセッションを非表示", + "ko": "다음 세션 숨기기", + "nl": "Volgende sessies verbergen", + "no": "Skjul følgende økter", + "pl": "Ukryj następujące sesje", + "pt": "Ocultar sessões seguintes", + "pt-BR": "Ocultar as sessões seguintes", + "ru": "Скрыть следующие сессии", + "sv": "Dölj följande sessioner", + "th": "ซ่อนเซสชันถัดไป", + "tr": "İzleyen oturumları gizle", + "zh": "隐藏以下会话", + "zh-CN": "隐藏以下会话", + "zh-TW": "隱藏以下會議" + }, + "show-following-sessions": { + "en": "Show following sessions", + "fr": "Afficher les sessions suivantes", + "cs": "Zobrazit následující relace", + "da": "Vis følgende sessioner", + "de": "Folgende Sitzungen anzeigen", + "el": "Εμφάνιση των ακόλουθων συνεδρίων", + "es": "Mostrar las siguientes sesiones", + "fi": "Näytä seuraavat istunnot", + "hu": "A következő munkamenetek megjelenítése", + "id": "Tampilkan sesi berikutnya", + "it": "Mostra le sessioni seguenti", + "ja": "次のセッションを表示", + "ko": "다음 세션 표시", + "nl": "De volgende sessies tonen", + "no": "Vis følgende økter", + "pl": "Pokaż następujące sesje", + "pt": "Mostrar as sessões seguintes", + "pt-BR": "Mostrar as sessões seguintes", + "ru": "Показать следующие сессии", + "sv": "Visa följande sessioner", + "th": "แสดงเซสชันถัดไป", + "tr": "Aşağıdaki oturumları göster", + "zh": "显示以下会议", + "zh-CN": "显示以下会议", + "zh-TW": "顯示以下會議" + }, "empty-search": { "en": "Empty search", "fr": "Recherche vide", diff --git a/packages/atomic/storybookUtils/insight/insight-interface-wrapper.tsx b/packages/atomic/storybookUtils/insight/insight-interface-wrapper.tsx new file mode 100644 index 00000000000..b24078c6b24 --- /dev/null +++ b/packages/atomic/storybookUtils/insight/insight-interface-wrapper.tsx @@ -0,0 +1,40 @@ +import {InsightEngineConfiguration} from '@coveo/headless/dist/definitions/insight.index'; +import {getSampleInsightEngineConfiguration} from '@coveo/headless/insight'; +import {within} from '@storybook/test'; +import {Decorator, StoryContext} from '@storybook/web-components'; +import {html} from 'lit/static-html.js'; +import type * as _ from '../../src/components'; + +export const wrapInInsightInterface = ( + config?: Partial, + skipFirstSearch = false +): { + decorator: Decorator; + play: (context: StoryContext) => Promise; +} => ({ + decorator: (story) => html` + + ${story()} + + `, + play: async ({canvasElement, step}) => { + await customElements.whenDefined('atomic-insight-interface'); + const canvas = within(canvasElement); + const insightInterface = + await canvas.findByTestId( + 'root-interface' + ); + await step('Render the Insight Interface', async () => { + await insightInterface!.initialize({ + ...getSampleInsightEngineConfiguration(), + ...config, + }); + }); + if (skipFirstSearch) { + return; + } + await step('Execute the first search', async () => { + await insightInterface!.executeFirstSearch(); + }); + }, +}); diff --git a/packages/atomic/tsconfig.storybook.json b/packages/atomic/tsconfig.storybook.json index b8bf340425f..30d5ba207d2 100644 --- a/packages/atomic/tsconfig.storybook.json +++ b/packages/atomic/tsconfig.storybook.json @@ -3,7 +3,8 @@ "compilerOptions": { "emitDecoratorMetadata": true, "composite": true, - "jsxFactory": "h" + "jsxFactory": "h", + "declaration": true }, "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": [ diff --git a/packages/headless/esbuild.mjs b/packages/headless/esbuild.mjs index 45b91b597a1..661ed911ce0 100644 --- a/packages/headless/esbuild.mjs +++ b/packages/headless/esbuild.mjs @@ -234,6 +234,7 @@ const nodeEsm = Object.entries(useCaseEntries).map((entry) => { outfile, format: 'esm', external: ['pino'], + mainFields: ['module', 'main'], }, dir ); @@ -263,30 +264,6 @@ async function buildNodeConfig(options, outDir) { return out; } -// https://github.com/coveo/ui-kit/issues/1616 -function adjustRequireImportsInNodeEsmBundles() { - const paths = getNodeEsmBundlePaths(); - - return paths.map(async (filePath) => { - const resolvedPath = resolve(filePath); - - const content = await promises.readFile(resolvedPath, { - encoding: 'utf-8', - }); - const modified = content.replace(/__require\(/g, 'require('); - - await promises.writeFile(resolvedPath, modified); - }); -} - -function getNodeEsmBundlePaths() { - return Object.entries(useCaseEntries).map((entry) => { - const [useCase] = entry; - const dir = getUseCaseDir('dist/', useCase); - return `${dir}/headless.esm.js`; - }); -} - function outputMetafile(platform, outDir, metafile) { const outFile = resolve(outDir, `${platform}.stats.json`); writeFileSync(outFile, JSON.stringify(metafile)); @@ -301,7 +278,6 @@ async function main() { ...nodeCjs, ...quanticUmd, ]); - await Promise.all(adjustRequireImportsInNodeEsmBundles()); } main(); diff --git a/packages/headless/src/api/generated-answer/generated-answer-client.ts b/packages/headless/src/api/generated-answer/generated-answer-client.ts index 9bdccd0113f..4a3ca6241ac 100644 --- a/packages/headless/src/api/generated-answer/generated-answer-client.ts +++ b/packages/headless/src/api/generated-answer/generated-answer-client.ts @@ -4,7 +4,6 @@ import {AsyncThunkOptions} from '../../app/async-thunk-options'; import {ClientThunkExtraArguments} from '../../app/thunk-extra-arguments'; import {GeneratedAnswerErrorPayload} from '../../features/generated-answer/generated-answer-actions'; import {SearchAppState} from '../../state/search-app-state'; -import {createAbortController} from '../../utils/abort-controller-polyfill'; import {URLPath} from '../../utils/url-utils'; import {resetTimeout} from '../../utils/utils'; import {GeneratedAnswerStreamEventData} from './generated-answer-event-payload'; @@ -99,7 +98,7 @@ export class GeneratedAnswerAPIClient { timeoutStateManager.add(timeout); }; - const abortController = createAbortController(); + const abortController = new AbortController(); const stream = () => fetchEventSource(buildStreamingUrl(url, organizationId, streamId), { diff --git a/packages/headless/src/api/search/api-calls-queue.ts b/packages/headless/src/api/search/api-calls-queue.ts index 0d1a427b17b..aaf6afc4f69 100644 --- a/packages/headless/src/api/search/api-calls-queue.ts +++ b/packages/headless/src/api/search/api-calls-queue.ts @@ -1,5 +1,4 @@ import {Logger} from 'pino'; -import {createAbortController} from '../../utils/abort-controller-polyfill'; export class APICallsQueue { private currentAbortController: AbortController | null = null; @@ -13,7 +12,7 @@ export class APICallsQueue { ) { const lastAbortController = this.currentAbortController; const abortController = (this.currentAbortController = - createAbortController()); + new AbortController()); if (lastAbortController) { if (options.warnOnAbort) { options.logger.warn('Cancelling current pending search query'); diff --git a/packages/headless/src/app/insight-engine/insight-engine-configuration.ts b/packages/headless/src/app/insight-engine/insight-engine-configuration.ts index 9e3353965dd..8f16040bebb 100644 --- a/packages/headless/src/app/insight-engine/insight-engine-configuration.ts +++ b/packages/headless/src/app/insight-engine/insight-engine-configuration.ts @@ -6,6 +6,7 @@ import { import { EngineConfiguration, engineConfigurationDefinitions, + getSampleEngineConfiguration, } from '../engine-configuration'; /** @@ -49,3 +50,17 @@ export const insightEngineConfigurationSchema = }, }), }); + +const sampleInsightId = '2729db39-d7fd-4504-a06e-668c64968c95'; + +/** + * Creates a sample search engine configuration. + * + * @returns The sample search engine configuration. + */ +export function getSampleInsightEngineConfiguration(): InsightEngineConfiguration { + return { + ...getSampleEngineConfiguration(), + insightId: sampleInsightId, + }; +} diff --git a/packages/headless/src/app/insight-engine/insight-engine.ts b/packages/headless/src/app/insight-engine/insight-engine.ts index d18c542377b..ac3dcbf8396 100644 --- a/packages/headless/src/app/insight-engine/insight-engine.ts +++ b/packages/headless/src/app/insight-engine/insight-engine.ts @@ -30,12 +30,14 @@ import { InsightEngineConfiguration, insightEngineConfigurationSchema, InsightEngineSearchConfigurationOptions, + getSampleInsightEngineConfiguration, } from './insight-engine-configuration'; export type { InsightEngineConfiguration, InsightEngineSearchConfigurationOptions, }; +export {getSampleInsightEngineConfiguration}; const insightEngineReducers = { insightConfiguration, diff --git a/packages/headless/src/insight.index.ts b/packages/headless/src/insight.index.ts index 40a079af2a2..b31f69ce0af 100644 --- a/packages/headless/src/insight.index.ts +++ b/packages/headless/src/insight.index.ts @@ -11,7 +11,10 @@ export type { InsightEngineConfiguration, InsightEngineSearchConfigurationOptions, } from './app/insight-engine/insight-engine'; -export {buildInsightEngine} from './app/insight-engine/insight-engine'; +export { + buildInsightEngine, + getSampleInsightEngineConfiguration, +} from './app/insight-engine/insight-engine'; export type {CoreEngine, ExternalEngineOptions} from './app/engine'; export type { diff --git a/packages/headless/src/utils/abort-controller-polyfill.ts b/packages/headless/src/utils/abort-controller-polyfill.ts deleted file mode 100644 index 4f84ad5125f..00000000000 --- a/packages/headless/src/utils/abort-controller-polyfill.ts +++ /dev/null @@ -1,13 +0,0 @@ -export function createAbortController(): AbortController | null { - // For nodejs environments only, we want to load the implementation of AbortController from node-abort-controller package. - // For browser environments, we need to make sure that we don't use AbortController as it might not be available (Locker Service in Salesforce) - // This is not something that can be polyfilled in a meaningful manner. - // This is a low level browser API after all, and only JS code inside a polyfill cannot actually cancel network requests done by the browser. - - if (typeof window === 'undefined') { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const {AbortController: nodeAbort} = require('node-abort-controller'); - return new nodeAbort() as AbortController; - } - return typeof AbortController === 'undefined' ? null : new AbortController(); -} diff --git a/packages/quantic/cypress/e2e/default-2/recommendation-list/recommendation-list-expectations.ts b/packages/quantic/cypress/e2e/default-2/recommendation-list/recommendation-list-expectations.ts index 9223fc6d006..28d4c848069 100644 --- a/packages/quantic/cypress/e2e/default-2/recommendation-list/recommendation-list-expectations.ts +++ b/packages/quantic/cypress/e2e/default-2/recommendation-list/recommendation-list-expectations.ts @@ -54,22 +54,22 @@ export function recommendationListExpectations( }, recommendationsEqual: (recommendationsAlias: string) => { - cy.get>(recommendationsAlias).then( - (recommendations) => { - selector - .recommendationLinks() - .then((elements) => { - return Cypress.$.makeArray(elements).map( - (element) => element.innerText - ); - }) - .should( - 'deep.equal', - recommendations.map((result) => result.Title) - ) - .logDetail('should render the received recommendations'); - } - ); + cy.get>( + recommendationsAlias + ).then((recommendations) => { + selector + .recommendationLinks() + .then((elements) => { + return Cypress.$.makeArray(elements).map( + (element) => element.innerText + ); + }) + .should( + 'deep.equal', + recommendations.map((result) => result.Title || result.clickUri) + ) + .logDetail('should render the received recommendations'); + }); }, correctFieldsIncluded: (expectedFieldsToInclude: string[]) => { diff --git a/packages/quantic/cypress/e2e/default-2/result-list/result-list-expectations.ts b/packages/quantic/cypress/e2e/default-2/result-list/result-list-expectations.ts index 77e41a92161..654c9f82929 100644 --- a/packages/quantic/cypress/e2e/default-2/result-list/result-list-expectations.ts +++ b/packages/quantic/cypress/e2e/default-2/result-list/result-list-expectations.ts @@ -18,20 +18,22 @@ export function resultListExpectations(selector: ResultListSelector) { .logDetail(`${should(display)} display results`); }, resultsEqual: (resultsAlias: string) => { - cy.get(resultsAlias).then((results) => { - selector - .resultLinks() - .then((elements) => { - return Cypress.$.makeArray(elements).map( - (element) => element.innerText - ); - }) - .should( - 'deep.equal', - results.map((result) => result.Title) - ) - .logDetail('should render the received results'); - }); + cy.get>(resultsAlias).then( + (results) => { + selector + .resultLinks() + .then((elements) => { + return Cypress.$.makeArray(elements).map( + (element) => element.innerText + ); + }) + .should( + 'deep.equal', + results.map((result) => result.Title || result.clickUri) + ) + .logDetail('should render the received results'); + } + ); }, requestFields: (expectedFieldsToInclude: string[], useCase: string) => { cy.wait(getQueryAlias(useCase)) diff --git a/packages/quantic/force-app/main/default/lwc/quanticCaseAssistInterface/quanticCaseAssistInterface.js b/packages/quantic/force-app/main/default/lwc/quanticCaseAssistInterface/quanticCaseAssistInterface.js index ea5f348db3e..400f65b67b7 100644 --- a/packages/quantic/force-app/main/default/lwc/quanticCaseAssistInterface/quanticCaseAssistInterface.js +++ b/packages/quantic/force-app/main/default/lwc/quanticCaseAssistInterface/quanticCaseAssistInterface.js @@ -56,6 +56,7 @@ export default class QuanticCaseAssistInterface extends LightningElement { caseAssistId: this.caseAssistId, searchHub: this.searchHub, analytics: { + analyticsMode: 'legacy', ...(document.referrer && {originLevel3: document.referrer}), }, }, diff --git a/packages/quantic/force-app/main/default/lwc/quanticInsightInterface/quanticInsightInterface.js b/packages/quantic/force-app/main/default/lwc/quanticInsightInterface/quanticInsightInterface.js index 801c559afd2..7da7d26e11e 100644 --- a/packages/quantic/force-app/main/default/lwc/quanticInsightInterface/quanticInsightInterface.js +++ b/packages/quantic/force-app/main/default/lwc/quanticInsightInterface/quanticInsightInterface.js @@ -69,6 +69,7 @@ export default class QuanticInsightInterface extends LightningElement { locale: LOCALE, }, analytics: { + analyticsMode: 'legacy', ...(document.referrer && {originLevel3: document.referrer}), }, }, diff --git a/packages/quantic/force-app/main/default/lwc/quanticRecommendationInterface/quanticRecommendationInterface.js b/packages/quantic/force-app/main/default/lwc/quanticRecommendationInterface/quanticRecommendationInterface.js index 28455d6f214..d4c627cb608 100644 --- a/packages/quantic/force-app/main/default/lwc/quanticRecommendationInterface/quanticRecommendationInterface.js +++ b/packages/quantic/force-app/main/default/lwc/quanticRecommendationInterface/quanticRecommendationInterface.js @@ -75,6 +75,7 @@ export default class QuanticRecommendationInterface extends LightningElement { locale: LOCALE, timezone: TIMEZONE, analytics: { + analyticsMode: 'legacy', originContext: this.analyticsOriginContext, }, }, diff --git a/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js b/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js index a75e345c78e..dfe2fa2867d 100644 --- a/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js +++ b/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js @@ -11,6 +11,8 @@ const functionsMocks = { const defaultPlaceholder = 'Search...'; const mockInputValue = 'Test input value'; +const mockLongInputValue = + 'Test input value that is longer than the default input value length to test the textarea expanding feature'; const mockSuggestions = [ {key: '1', value: 'suggestion1', rawValue: 'suggestion1'}, {key: '2', value: 'suggestion2', rawValue: 'suggestion2'}, @@ -770,6 +772,36 @@ describe('c-quantic-search-box-input', () => { }); }); }); + + describe('when clicking on the clear icon after typing something', () => { + it('should properly clear the input value', async () => { + const element = createTestComponent({ + ...defaultOptions, + textarea: textareaValue, + }); + await flushPromises(); + + element.inputValue = mockLongInputValue; + await flushPromises(); + + const clearIcon = element.shadowRoot.querySelector( + selectors.searchBoxClearIcon + ); + const input = element.shadowRoot.querySelector( + textareaValue + ? selectors.searchBoxTextArea + : selectors.searchBoxInput + ); + + expect(input).not.toBeNull(); + expect(input.value).toEqual(mockLongInputValue); + + clearIcon.click(); + expect(input.value).toEqual(''); + const expectedCollapsedInputHeight = textareaValue ? '0px' : ''; + expect(input.style.height).toEqual(expectedCollapsedInputHeight); + }); + }); }); }); }); diff --git a/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/quanticSearchBoxInput.js b/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/quanticSearchBoxInput.js index a172df4791a..485dae701cb 100644 --- a/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/quanticSearchBoxInput.js +++ b/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/quanticSearchBoxInput.js @@ -311,10 +311,20 @@ export default class QuanticSearchBoxInput extends LightningElement { clearInput() { this.sendInputValueChangeEvent(''); + this.setDisplayedInputValue(''); + this.input.removeAttribute('aria-activedescendant'); + this.collapseTextArea(); this.input.focus(); - if (this.textarea) { - this.adjustTextAreaHeight(); - } + } + + /** + * Prevents the blur event from being triggered when clearing the input. + * This allows us to clear the input value before collapsing the input. + * @param {event} event + * @returns {void} + */ + preventBlur(event) { + event.preventDefault(); } handleSuggestionListEvent = (event) => { diff --git a/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/templates/expandableSearchBoxInput.html b/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/templates/expandableSearchBoxInput.html index 5cfbc30b0f4..797723c7fd3 100644 --- a/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/templates/expandableSearchBoxInput.html +++ b/packages/quantic/force-app/main/default/lwc/quanticSearchBoxInput/templates/expandableSearchBoxInput.html @@ -46,6 +46,7 @@ >