diff --git a/.bun-version b/.bun-version
new file mode 100644
index 00000000..2c69d9f9
--- /dev/null
+++ b/.bun-version
@@ -0,0 +1 @@
+1.1.43
diff --git a/.github/actions/setup-bun/action.yml b/.github/actions/setup-bun/action.yml
index c6f9d935..9b057f5c 100644
--- a/.github/actions/setup-bun/action.yml
+++ b/.github/actions/setup-bun/action.yml
@@ -5,4 +5,6 @@ runs:
using: 'composite'
steps:
- name: Setup Bun
- uses: oven-sh/setup-bun@v1
+ uses: oven-sh/setup-bun@v2
+ with:
+ bun-version-file: '.bun-version'
diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml
index 474e1e4b..0746ddb6 100644
--- a/.github/actions/setup-node/action.yml
+++ b/.github/actions/setup-node/action.yml
@@ -12,29 +12,18 @@ runs:
restore-keys: |
${{ runner.os }}-turbo-
- - name: Install NodeJS
- uses: actions/setup-node@v4
- with:
- node-version-file: '.node-version'
- registry-url: 'https://registry.npmjs.org'
-
- - uses: pnpm/action-setup@v3
+ - uses: pnpm/action-setup@v4
name: Install pnpm
id: pnpm-install
with:
run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
-
- - uses: actions/cache@v4
- name: Setup pnpm cache
+ - name: Install NodeJS
+ uses: actions/setup-node@v4
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- restore-keys: |
- ${{ runner.os }}-pnpm-store-
+ node-version-file: '.node-version'
+ registry-url: 'https://registry.npmjs.org'
+ cache: 'pnpm'
- name: Install dependencies
shell: bash
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..b73920e1
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,31 @@
+name: Build
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+
+ - name: Setup NodeJS
+ uses: ./.github/actions/setup-node
+
+ - name: Setup environment files
+ uses: ./.github/actions/setup-env-files
+ with:
+ storyblok-token: ${{ secrets.STAGING_STORYBLOK_TOKEN }}
+
+ - name: Setup DFX
+ uses: ./.github/actions/setup-dfx
+
+ - name: DFX build
+ run: dfx build --check
diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml
new file mode 100644
index 00000000..59a44663
--- /dev/null
+++ b/.github/workflows/codestyle.yml
@@ -0,0 +1,41 @@
+name: Codestyle
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ rust_codestyle:
+ name: Rust codestyle
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+
+ - name: Cargo fmt
+ run: cargo fmt -- --check
+
+ - name: Cargo clippy
+ run: cargo clippy --all-targets --all-features
+
+ typescript_codestyle:
+ name: TypeScript codestyle
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+
+ - name: Setup NodeJS
+ uses: ./.github/actions/setup-node
+
+ - name: Check TypeScript formatting
+ run: pnpm format:check
+
+ - name: Run ESLint
+ run: pnpm lint
diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml
deleted file mode 100644
index 76909da7..00000000
--- a/.github/workflows/integration-test.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: Integration tests
-
-on:
- push:
- branches:
- - main
- pull_request:
-
-jobs:
- integration_tests:
- name: Integration tests
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
- with:
- fetch-depth: 2
-
- - uses: ./.github/actions/setup-node
-
- - uses: ./.github/actions/setup-env-files
- with:
- storyblok-token: ${{ secrets.STAGING_STORYBLOK_TOKEN }}
-
- - uses: ./.github/actions/setup-bun
-
- - uses: ./.github/actions/setup-dfx
-
- - name: DFX build
- run: dfx build --check
-
- - name: Backend integration tests
- run: pnpm -F backend-integration test
-
- - name: Frontend unit tests
- run: pnpm -F frontend test
-
- - name: UI library unit tests
- run: pnpm -F @cg/angular-ui test
diff --git a/.github/workflows/mainnet-deploy.yml b/.github/workflows/mainnet-deploy.yml
index 0f1c0997..9d39c22f 100644
--- a/.github/workflows/mainnet-deploy.yml
+++ b/.github/workflows/mainnet-deploy.yml
@@ -10,18 +10,21 @@ jobs:
name: mainnet
url: https://npiey-xiaaa-aaaal-qcx2q-cai.icp0.io
steps:
- - name: Checkout Code
+ - name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- - uses: ./.github/actions/setup-node
+ - name: Setup NodeJS
+ uses: ./.github/actions/setup-node
- - uses: ./.github/actions/setup-env-files
+ - name: Setup environment files
+ uses: ./.github/actions/setup-env-files
with:
storyblok-token: ${{ secrets.PRODUCTION_STORYBLOK_TOKEN }}
- - uses: ./.github/actions/setup-dfx
+ - name: Setup DFX
+ uses: ./.github/actions/setup-dfx
- name: Import DFX identity
run: |
diff --git a/.github/workflows/rust-tests.yml b/.github/workflows/rust-tests.yml
deleted file mode 100644
index f243a15f..00000000
--- a/.github/workflows/rust-tests.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: Rust tests
-
-on:
- push:
- branches:
- - main
- pull_request:
-
-jobs:
- rust_tests:
- name: Rust tests
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
-
- - name: Cargo fmt
- run: cargo fmt -- --check
-
- - name: Cargo clippy
- run: cargo clippy --all-targets --all-features
-
- - name: Cargo test
- run: cargo test
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 00000000..5c17237f
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,76 @@
+name: Tests
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ rust_tests:
+ name: Rust tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+
+ - name: Cargo test
+ run: cargo test
+
+ typescript_tests:
+ name: Typescript tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+
+ - name: Setup NodeJS
+ uses: ./.github/actions/setup-node
+
+ - name: Install Playwright dependencies
+ run: pnpm run playwright-install
+
+ - name: Setup dfx
+ uses: ./.github/actions/setup-dfx
+
+ - name: Setup environment files
+ uses: ./.github/actions/setup-env-files
+ with:
+ storyblok-token: ${{ secrets.STAGING_STORYBLOK_TOKEN }}
+
+ - name: UI library tests
+ run: pnpm turbo test -F @cg/ui
+
+ - name: Angular UI library tests
+ run: pnpm turbo test -F @cg/angular-ui
+
+ - name: Frontend unit tests
+ run: pnpm turbo test -F frontend
+
+ backend_integration_tests:
+ name: Backend integration tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+
+ - name: Setup NodeJS
+ uses: ./.github/actions/setup-node
+
+ - name: Setup bun
+ uses: ./.github/actions/setup-bun
+
+ - name: Setup dfx
+ uses: ./.github/actions/setup-dfx
+
+ - name: DFX build
+ run: dfx build backend --check
+
+ - name: Backend integration tests
+ run: pnpm turbo test -F backend-integration
diff --git a/.github/workflows/typescript-tests.yml b/.github/workflows/typescript-tests.yml
deleted file mode 100644
index 73c1fd2c..00000000
--- a/.github/workflows/typescript-tests.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: TypeScript tests
-
-on:
- push:
- branches:
- - main
- pull_request:
-
-jobs:
- typescript_tests:
- name: TypeScript tests
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
-
- - uses: ./.github/actions/setup-node
-
- - name: Check TypeScript Formatting
- run: pnpm format:check
-
- - name: Run ESLint
- run: pnpm lint
diff --git a/.gitignore b/.gitignore
index e17c27a1..5af17dac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,8 @@ dist/
.turbo/
coverage/
.angular/
+www/
+test-results/
# environment variables
.env
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 1f1fccf2..4bf0ef22 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -7,6 +7,7 @@
"astro-build.astro-vscode",
"angular.ng-template",
"tamasfe.even-better-toml",
- "rust-lang.rust-analyzer"
+ "rust-lang.rust-analyzer",
+ "vercel.turbo-vsc"
]
}
diff --git a/README.md b/README.md
index 48faa9ae..16a8fea2 100644
--- a/README.md
+++ b/README.md
@@ -54,6 +54,20 @@ Else, refer to the following sections.
| `dfx deploy docs` | Deploy to a local DFX replica |
| `pnpm turbo start -F docs` | Run a local development server |
+### `@cg/ui`
+
+| Command | Description |
+| ---------------------------- | ----------------- |
+| `pnpm turbo build -F @cg/ui` | Build the library |
+| `pnpm turbo test -F @cg/ui` | Run unit tests |
+
+### `@cg/ui-angular`
+
+| Command | Description |
+| ------------------------------------ | ----------------- |
+| `pnpm turbo build -F @cg/ui-angular` | Build the library |
+| `pnpm turbo test -F @cg/ui-angular` | Run unit tests |
+
### Backend
The primary backend canister for CodeGov proposal review management.
@@ -297,7 +311,6 @@ dfx canister call backend update_user_profile '(record { user_id = "${userId}";
Or to only upgrade a user to a reviewer:
```bash
-
dfx canister call backend update_user_profile '(record { user_id = "${userId}"; config = opt variant { reviewer = record {} } })'
```
@@ -353,6 +366,33 @@ To list open replica version management proposals:
- `payload` is the Candid encoded argument for the corresponding NNS function. The types for this argument can be found in the appropriate canister's declaration. A mapping between NNS functions and their corresponding canisters can be found in the [`NnsFunction::canister_and_function`](https://github.com/dfinity/ic/blob/master/rs/nns/governance/src/governance.rs#L527-L631) function definition.
- For example, the `UpdateElectedReplicaVersions` uses number `38` and its payload is the [`UpdateElectedReplicaVersionsPayload`](https://github.com/dfinity/ic/blob/master/rs/registry/canister/canister/registry.did#L217-L223) record.
+### Getting proposals for testing
+
+Open the [NNS canister interface on the dashboard](https://dashboard.internetcomputer.org/canister/rrkah-fqaaa-aaaaa-aaaaq-cai#list_proposals). It should open on the `list_proposals` method.
+
+- Set `limit` to whatever you want, although lower numbers are recommended for a more manageable data set.
+- Set the `exclude_topic` length to `17`
+- Add the following topics to the `exclude_topic` list:
+ - `0` for `Unspecified`
+ - `1` for `NeuronManagement`
+ - `2` for `ExchangeRate`
+ - `3` for `NetworkEconomics`
+ - `4` for `Governance`
+ - `5` for `NodeAdmin`
+ - `6` for `ParticipantManagement`
+ - `7` for `SubnetManagement`
+ - `8` for `NetworkCanisterManagement`
+ - `9` for `Kyc`
+ - `10` for `NodeProviderRewards`
+ - `12` for `IcOsVersionDeployment`
+ - `14` for `SnsAndCommunityFund`
+ - `15` for `ApiBoundaryNodeManagement`
+ - `16` for `SubnetRental`
+ - `17` for `ProtocolCanisterManagement`
+ - `18` for `ServiceNervousSystemManagement`
+- Note that `11` currently doesn't exist, and `13` is `IcOsVersionElection`, the topic we want.
+- Finally, click the `Call` button to get a list of proposals.
+
### Manually syncing proposals
To manually trigger the proposals synchronization from the Nervous Systems, run the following command:
diff --git a/lib/ui/.storybook/main.ts b/lib/ui/.storybook/main.ts
index 612e9857..e3065721 100644
--- a/lib/ui/.storybook/main.ts
+++ b/lib/ui/.storybook/main.ts
@@ -1,7 +1,7 @@
-import { type StorybookConfig } from '@storybook/html-vite';
+import { type StorybookConfig } from '@storybook/web-components-vite';
const config: StorybookConfig = {
- framework: '@storybook/html-vite',
+ framework: '@storybook/web-components-vite',
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: [
{
@@ -13,6 +13,22 @@ const config: StorybookConfig = {
},
},
],
+ async viteFinal(config, { configType }) {
+ const { mergeConfig } = await import('vite');
+
+ if (configType !== 'DEVELOPMENT') {
+ return config;
+ }
+
+ return mergeConfig(config, {
+ build: {
+ // this is set to 'dist' by default which causes hot-reloading for stencil components to break
+ // see: https://vitejs.dev/config/server-options.html#server-watch
+ // setting it to anything other than dist fixes the issue
+ outDir: 'dist-vite',
+ },
+ });
+ },
};
export default config;
diff --git a/lib/ui/.storybook/preview.ts b/lib/ui/.storybook/preview.ts
index 445de600..32c4f804 100644
--- a/lib/ui/.storybook/preview.ts
+++ b/lib/ui/.storybook/preview.ts
@@ -1,4 +1,4 @@
-import { type Preview } from '@storybook/html';
+import { type Preview } from '@storybook/web-components';
import { defineCustomElements } from '../loader';
import '@cg/styles/global.scss';
diff --git a/lib/ui/package.json b/lib/ui/package.json
index 1260e16e..657cd2c6 100644
--- a/lib/ui/package.json
+++ b/lib/ui/package.json
@@ -16,21 +16,22 @@
"build": "stencil build",
"watch": "stencil build --watch",
"storybook": "storybook dev -p 6006 --no-open",
- "build:storybook": "storybook build"
+ "build:storybook": "storybook build",
+ "test": "playwright test",
+ "test:watch": "playwright test --ui"
},
"dependencies": {
"@cg/styles": "workspace:*",
- "@stencil/core": "^4.14.1"
+ "@stencil/core": "^4.23.1"
},
"devDependencies": {
- "@stencil/sass": "^3.0.11",
- "@storybook/addon-essentials": "^8.0.6",
- "@storybook/blocks": "^8.0.6",
- "@storybook/html": "^8.0.6",
- "@storybook/html-vite": "^8.0.6",
- "@storybook/test": "^8.0.6",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "storybook": "^8.0.6"
+ "@stencil/playwright": "^0.2.1",
+ "@stencil/sass": "^3.0.12",
+ "@storybook/addon-essentials": "^8.4.7",
+ "@storybook/blocks": "^8.4.7",
+ "@storybook/test": "^8.4.7",
+ "@storybook/web-components": "^8.4.7",
+ "@storybook/web-components-vite": "^8.4.7",
+ "storybook": "^8.4.7"
}
}
diff --git a/lib/ui/playwright.config.ts b/lib/ui/playwright.config.ts
new file mode 100644
index 00000000..eef20236
--- /dev/null
+++ b/lib/ui/playwright.config.ts
@@ -0,0 +1,6 @@
+import { expect } from '@playwright/test';
+import { matchers, createConfig } from '@stencil/playwright';
+
+expect.extend(matchers);
+
+export default createConfig({});
diff --git a/lib/ui/src/coercion/coerce-boolean.ts b/lib/ui/src/coercion/coerce-boolean.ts
new file mode 100644
index 00000000..543fc0b2
--- /dev/null
+++ b/lib/ui/src/coercion/coerce-boolean.ts
@@ -0,0 +1,26 @@
+export type LooseBoolean =
+ | boolean
+ | 'true'
+ | 'false'
+ | 1
+ | 0
+ | '1'
+ | '0'
+ | ''
+ | null
+ | undefined;
+
+const falseValues: LooseBoolean[] = ['false', false, '0', 0];
+const trueValues: LooseBoolean[] = ['', 'true', true, '1', 1, null, undefined];
+
+export function coerceBoolean(value: LooseBoolean): boolean {
+ if (falseValues.includes(value)) {
+ return false;
+ }
+
+ if (trueValues.includes(value)) {
+ return true;
+ }
+
+ throw new Error(`Invalid boolean value: "${value}"`);
+}
diff --git a/lib/ui/src/coercion/coerce-theme.ts b/lib/ui/src/coercion/coerce-theme.ts
new file mode 100644
index 00000000..b282a945
--- /dev/null
+++ b/lib/ui/src/coercion/coerce-theme.ts
@@ -0,0 +1,13 @@
+import { Theme } from '../types';
+
+export function coerceTheme(theme: unknown): Theme {
+ if (!isTheme(theme)) {
+ throw new Error(`Invalid theme: "${theme}"`);
+ }
+
+ return theme;
+}
+
+export function isTheme(theme: unknown): theme is Theme {
+ return theme === 'primary' || theme === 'success' || theme === 'error';
+}
diff --git a/lib/ui/src/coercion/index.ts b/lib/ui/src/coercion/index.ts
new file mode 100644
index 00000000..f549d45a
--- /dev/null
+++ b/lib/ui/src/coercion/index.ts
@@ -0,0 +1,2 @@
+export * from './coerce-boolean';
+export * from './coerce-theme';
diff --git a/lib/ui/src/components/atoms/badge/badge.e2e.ts b/lib/ui/src/components/atoms/badge/badge.e2e.ts
new file mode 100644
index 00000000..fc32b3d3
--- /dev/null
+++ b/lib/ui/src/components/atoms/badge/badge.e2e.ts
@@ -0,0 +1,50 @@
+import { expect } from '@playwright/test';
+import { test } from '@stencil/playwright';
+
+test.describe('cg-badge', () => {
+ const content = 'Badge content';
+ const compLoc = 'cg-badge';
+
+ test('should render content with default theme', async ({ page }) => {
+ await page.setContent(`
+
+ ${content}
+
+ `);
+
+ const component = page.locator(compLoc);
+ await expect(component).toHaveText(content);
+ await expect(component).toHaveClass(/badge--primary/);
+ });
+
+ ['primary', 'success', 'error'].forEach(theme => {
+ test(`should render content with ${theme} theme`, async ({ page }) => {
+ await page.setContent(`
+
+ ${content}
+
+ `);
+
+ const component = page.locator(compLoc);
+ await expect(component).toHaveText(content);
+ await expect(component).toHaveClass(new RegExp(`badge--${theme}`));
+ });
+ });
+
+ test('should throw error for an invalid theme', async ({ page }) => {
+ let errorThrown = false;
+ page.on('pageerror', error => {
+ if (error.message === 'Invalid theme: "garbage"') {
+ errorThrown = true;
+ }
+ });
+
+ await page.setContent(`
+
+ ${content}
+
+ `);
+
+ expect(errorThrown).toBe(true);
+ });
+});
diff --git a/lib/ui/src/components/atoms/badge/badge.stories.ts b/lib/ui/src/components/atoms/badge/badge.stories.ts
index 3ccf65bc..da887003 100644
--- a/lib/ui/src/components/atoms/badge/badge.stories.ts
+++ b/lib/ui/src/components/atoms/badge/badge.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
import { Theme } from '../../../types';
interface Args {
diff --git a/lib/ui/src/components/atoms/badge/badge.tsx b/lib/ui/src/components/atoms/badge/badge.tsx
index 5b04e1cd..f9ca741c 100644
--- a/lib/ui/src/components/atoms/badge/badge.tsx
+++ b/lib/ui/src/components/atoms/badge/badge.tsx
@@ -1,5 +1,6 @@
import { Component, ComponentInterface, Host, Prop, h } from '@stencil/core';
import { Theme } from '../../../types';
+import { coerceTheme } from '../../../coercion';
@Component({
tag: 'cg-badge',
@@ -8,7 +9,13 @@ import { Theme } from '../../../types';
})
export class BadgeComponent implements ComponentInterface {
@Prop({ reflect: true })
- public theme: Theme = 'primary';
+ public get theme(): Theme {
+ return this.#theme;
+ }
+ public set theme(value: Theme) {
+ this.#theme = coerceTheme(value);
+ }
+ #theme: Theme = 'primary';
public render() {
return (
diff --git a/lib/ui/src/components/atoms/card/card.e2e.ts b/lib/ui/src/components/atoms/card/card.e2e.ts
new file mode 100644
index 00000000..54e52089
--- /dev/null
+++ b/lib/ui/src/components/atoms/card/card.e2e.ts
@@ -0,0 +1,57 @@
+import { expect } from '@playwright/test';
+import { test } from '@stencil/playwright';
+
+test.describe('cg-card', () => {
+ const title = 'Card title';
+ const content = 'Card content';
+
+ const compLoc = 'cg-card';
+ const cardTitleLoc = '[slot="cardTitle"]';
+ const cardContentLoc = '[slot="cardContent"]';
+
+ test(`should render title & content`, async ({ page }) => {
+ await page.setContent(`
+
+ ${title}
+ ${content}
+
+ `);
+
+ const component = page.locator(compLoc);
+ const cardTitle = component.locator(cardTitleLoc);
+ const cardContent = component.locator(cardContentLoc);
+
+ await expect(cardTitle).toHaveText(title);
+ await expect(cardContent).toHaveText(content);
+ });
+
+ test(`should render title only`, async ({ page }) => {
+ await page.setContent(`
+
+ ${title}
+
+ `);
+
+ const component = page.locator(compLoc);
+ const cardTitle = component.locator(cardTitleLoc);
+ const cardContent = component.locator(cardContentLoc);
+
+ await expect(cardTitle).toHaveText(title);
+ await expect(cardContent).not.toBeVisible();
+ });
+
+ test(`should render content only`, async ({ page }) => {
+ await page.setContent(`
+
+ ${content}
+
+ `);
+
+ const component = page.locator(compLoc);
+ const cardTitle = component.locator(cardTitleLoc);
+ const cardContent = component.locator(cardContentLoc);
+
+ await expect(cardTitle).not.toBeVisible();
+ await expect(cardContent).toHaveText(content);
+ });
+});
diff --git a/lib/ui/src/components/atoms/card/card.stories.ts b/lib/ui/src/components/atoms/card/card.stories.ts
index 9cd3c700..0c55b1ba 100644
--- a/lib/ui/src/components/atoms/card/card.stories.ts
+++ b/lib/ui/src/components/atoms/card/card.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Atoms/Cards',
diff --git a/lib/ui/src/components/atoms/focus-ring/focus-ring.e2e.ts b/lib/ui/src/components/atoms/focus-ring/focus-ring.e2e.ts
new file mode 100644
index 00000000..f56bdd09
--- /dev/null
+++ b/lib/ui/src/components/atoms/focus-ring/focus-ring.e2e.ts
@@ -0,0 +1,85 @@
+import { test } from '@stencil/playwright';
+import { expect } from '@playwright/test';
+
+test.describe('cg-focus-ring', () => {
+ const compLoc = 'cg-focus-ring';
+
+ test('should render unfocused focus ring with default theme', async ({
+ page,
+ }) => {
+ await page.setContent(``);
+
+ const component = page.locator(compLoc);
+
+ await expect(component).not.toHaveClass(/focus-ring--visible/);
+ await expect(component).toHaveClass(/focus-ring--primary/);
+ });
+
+ test('should render focused focus ring with default theme', async ({
+ page,
+ }) => {
+ await page.setContent(``);
+
+ const component = page.locator(compLoc);
+
+ await expect(component).toHaveClass(/focus-ring--visible/);
+ await expect(component).toHaveClass(/focus-ring--primary/);
+ });
+
+ test('should render unfocused focus ring when isFocused is false', async ({
+ page,
+ }) => {
+ await page.setContent(``);
+
+ const component = page.locator(compLoc);
+
+ await expect(component).not.toHaveClass(/focus-ring--visible/);
+ });
+
+ ['', 'true', 'string'].forEach(value => {
+ test(`should render focused focus ring when isFocused is ${value}`, async ({
+ page,
+ }) => {
+ await page.setContent(``);
+
+ const component = page.locator(compLoc);
+
+ await expect(component).toHaveClass(/focus-ring--visible/);
+ });
+ });
+
+ ['primary', 'success', 'error'].forEach(theme => {
+ test(`should render focus ring with ${theme} theme`, async ({ page }) => {
+ await page.setContent(``);
+
+ const component = page.locator(compLoc);
+
+ await expect(component).not.toHaveClass(/focus-ring--visible/);
+ await expect(component).toHaveClass(new RegExp(`focus-ring--${theme}`));
+ });
+
+ test(`should render focused focus ring with ${theme} theme`, async ({
+ page,
+ }) => {
+ await page.setContent(``);
+
+ const component = page.locator(compLoc);
+
+ await expect(component).toHaveClass(/focus-ring--visible/);
+ await expect(component).toHaveClass(new RegExp(`focus-ring--${theme}`));
+ });
+ });
+
+ test('should throw error for an invalid theme', async ({ page }) => {
+ let errorThrown = false;
+ page.on('pageerror', error => {
+ if (error.message === 'Invalid theme: "garbage"') {
+ errorThrown = true;
+ }
+ });
+
+ await page.setContent(``);
+
+ expect(errorThrown).toBe(true);
+ });
+});
diff --git a/lib/ui/src/components/atoms/focus-ring/focus-ring.scss b/lib/ui/src/components/atoms/focus-ring/focus-ring.scss
index 8294570a..3302bdd5 100644
--- a/lib/ui/src/components/atoms/focus-ring/focus-ring.scss
+++ b/lib/ui/src/components/atoms/focus-ring/focus-ring.scss
@@ -11,7 +11,6 @@ $focus-ring-color: common.$primary-dark;
right: $focus-ring-width;
bottom: $focus-ring-width;
pointer-events: none;
- box-shadow: 0 0 0 $focus-ring-width $focus-ring-color;
opacity: 0;
@include common.quick-transition(opacity);
@@ -21,6 +20,10 @@ $focus-ring-color: common.$primary-dark;
opacity: 1;
}
+:host-context(.focus-ring--primary) {
+ box-shadow: 0 0 0 $focus-ring-width common.$primary-dark;
+}
+
:host-context(.focus-ring--success) {
box-shadow: 0 0 0 $focus-ring-width common.$success;
}
diff --git a/lib/ui/src/components/atoms/focus-ring/focus-ring.tsx b/lib/ui/src/components/atoms/focus-ring/focus-ring.tsx
index 404ae8b7..470178cd 100644
--- a/lib/ui/src/components/atoms/focus-ring/focus-ring.tsx
+++ b/lib/ui/src/components/atoms/focus-ring/focus-ring.tsx
@@ -1,5 +1,6 @@
import { Component, ComponentInterface, Host, Prop, h } from '@stencil/core';
import { Theme } from '../../../types';
+import { coerceTheme } from '../../../coercion';
@Component({
tag: 'cg-focus-ring',
@@ -8,19 +9,24 @@ import { Theme } from '../../../types';
})
export class FocusRingComponent implements ComponentInterface {
@Prop({ reflect: true })
- public isFocused?: boolean;
+ public get theme(): Theme {
+ return this.#theme;
+ }
+ public set theme(value: Theme) {
+ this.#theme = coerceTheme(value);
+ }
+ #theme: Theme = 'primary';
@Prop({ reflect: true })
- public theme?: Theme;
+ public isFocused: boolean = false;
public render() {
return (
);
diff --git a/lib/ui/src/components/atoms/icon-btn/icon-btn.stories.ts b/lib/ui/src/components/atoms/icon-btn/icon-btn.stories.ts
index ebaf2d42..ffb06e05 100644
--- a/lib/ui/src/components/atoms/icon-btn/icon-btn.stories.ts
+++ b/lib/ui/src/components/atoms/icon-btn/icon-btn.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Atoms/Icon Buttons',
diff --git a/lib/ui/src/components/atoms/icons/icons.stories.ts b/lib/ui/src/components/atoms/icons/icons.stories.ts
index c50a2d3d..fc5da15a 100644
--- a/lib/ui/src/components/atoms/icons/icons.stories.ts
+++ b/lib/ui/src/components/atoms/icons/icons.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Atoms/Icons',
diff --git a/lib/ui/src/components/atoms/link-text-btn/link-text-btn.stories.ts b/lib/ui/src/components/atoms/link-text-btn/link-text-btn.stories.ts
index a9fa88ef..b88606fd 100644
--- a/lib/ui/src/components/atoms/link-text-btn/link-text-btn.stories.ts
+++ b/lib/ui/src/components/atoms/link-text-btn/link-text-btn.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Atoms/Link Text Buttons',
diff --git a/lib/ui/src/components/atoms/radio-input/radio-input.stories.ts b/lib/ui/src/components/atoms/radio-input/radio-input.stories.ts
index 9c9029a8..c538dfb6 100644
--- a/lib/ui/src/components/atoms/radio-input/radio-input.stories.ts
+++ b/lib/ui/src/components/atoms/radio-input/radio-input.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Atoms/Radio Inputs',
diff --git a/lib/ui/src/components/atoms/text-area/text-area.stories.ts b/lib/ui/src/components/atoms/text-area/text-area.stories.ts
index e350a129..22a73558 100644
--- a/lib/ui/src/components/atoms/text-area/text-area.stories.ts
+++ b/lib/ui/src/components/atoms/text-area/text-area.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Atoms/Text Areas',
diff --git a/lib/ui/src/components/atoms/text-btn/text-btn.stories.ts b/lib/ui/src/components/atoms/text-btn/text-btn.stories.ts
index 0c4e12cc..4ae155ab 100644
--- a/lib/ui/src/components/atoms/text-btn/text-btn.stories.ts
+++ b/lib/ui/src/components/atoms/text-btn/text-btn.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
import { Theme } from '../../../types';
interface Args {
diff --git a/lib/ui/src/components/atoms/text-input/text-input.stories.ts b/lib/ui/src/components/atoms/text-input/text-input.stories.ts
index 1930e704..3fb4467b 100644
--- a/lib/ui/src/components/atoms/text-input/text-input.stories.ts
+++ b/lib/ui/src/components/atoms/text-input/text-input.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Atoms/Text Inputs',
diff --git a/lib/ui/src/components/molecules/collapsible/collapsible.stories.ts b/lib/ui/src/components/molecules/collapsible/collapsible.stories.ts
index bf90420d..41479b8c 100644
--- a/lib/ui/src/components/molecules/collapsible/collapsible.stories.ts
+++ b/lib/ui/src/components/molecules/collapsible/collapsible.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Molecules/Collapsible',
diff --git a/lib/ui/src/components/molecules/copy-to-clipboard/copy-to-clipboard.stories.ts b/lib/ui/src/components/molecules/copy-to-clipboard/copy-to-clipboard.stories.ts
index 6ed3972b..47683528 100644
--- a/lib/ui/src/components/molecules/copy-to-clipboard/copy-to-clipboard.stories.ts
+++ b/lib/ui/src/components/molecules/copy-to-clipboard/copy-to-clipboard.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Molecules/Copy To Clipboard',
diff --git a/lib/ui/src/components/molecules/dropdown/dropdown.stories.ts b/lib/ui/src/components/molecules/dropdown/dropdown.stories.ts
index af501bfa..33dfdc10 100644
--- a/lib/ui/src/components/molecules/dropdown/dropdown.stories.ts
+++ b/lib/ui/src/components/molecules/dropdown/dropdown.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Molecules/Dropdown',
diff --git a/lib/ui/src/components/molecules/image-uploader-btn/image-uploader-btn.stories.ts b/lib/ui/src/components/molecules/image-uploader-btn/image-uploader-btn.stories.ts
index f128e538..12d755d6 100644
--- a/lib/ui/src/components/molecules/image-uploader-btn/image-uploader-btn.stories.ts
+++ b/lib/ui/src/components/molecules/image-uploader-btn/image-uploader-btn.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Molecules/Image Uploader Button',
diff --git a/lib/ui/src/components/molecules/loading-btn/loading-btn.stories.ts b/lib/ui/src/components/molecules/loading-btn/loading-btn.stories.ts
index 52bfd12d..43b48c04 100644
--- a/lib/ui/src/components/molecules/loading-btn/loading-btn.stories.ts
+++ b/lib/ui/src/components/molecules/loading-btn/loading-btn.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Molecules/Loading Button',
diff --git a/lib/ui/src/components/organisms/footer/footer.stories.ts b/lib/ui/src/components/organisms/footer/footer.stories.ts
index dd21297b..b915335c 100644
--- a/lib/ui/src/components/organisms/footer/footer.stories.ts
+++ b/lib/ui/src/components/organisms/footer/footer.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Organisms/Footer',
diff --git a/lib/ui/src/components/organisms/navbar/navbar.stories.ts b/lib/ui/src/components/organisms/navbar/navbar.stories.ts
index 05a76d8e..2a0287f5 100644
--- a/lib/ui/src/components/organisms/navbar/navbar.stories.ts
+++ b/lib/ui/src/components/organisms/navbar/navbar.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Organisms/Navbar',
diff --git a/lib/ui/src/components/organisms/sidenav/sidenav.stories.ts b/lib/ui/src/components/organisms/sidenav/sidenav.stories.ts
index b78b3f72..5e156629 100644
--- a/lib/ui/src/components/organisms/sidenav/sidenav.stories.ts
+++ b/lib/ui/src/components/organisms/sidenav/sidenav.stories.ts
@@ -1,4 +1,4 @@
-import { Meta, StoryObj } from '@storybook/html';
+import { Meta, StoryObj } from '@storybook/web-components';
const meta: Meta = {
title: 'Organisms/Sidenav',
diff --git a/lib/ui/stencil.config.ts b/lib/ui/stencil.config.ts
index ba0e5f6c..d0bf6cd0 100644
--- a/lib/ui/stencil.config.ts
+++ b/lib/ui/stencil.config.ts
@@ -4,6 +4,7 @@ import { sass } from '@stencil/sass';
export const config: Config = {
namespace: 'cg-ui',
plugins: [sass()],
+ buildDist: true,
outputTargets: [
{
type: 'dist',
@@ -13,6 +14,11 @@ export const config: Config = {
{
type: 'dist-custom-elements',
},
+ {
+ type: 'www',
+ serviceWorker: null,
+ copy: [{ src: '**/*.html' }, { src: '**/*.css' }],
+ },
],
validatePrimaryPackageOutputTarget: true,
};
diff --git a/lib/ui/tsconfig.json b/lib/ui/tsconfig.json
index 3193c2c6..6a4ef268 100644
--- a/lib/ui/tsconfig.json
+++ b/lib/ui/tsconfig.json
@@ -4,7 +4,7 @@
"allowSyntheticDefaultImports": true,
"declaration": false,
"experimentalDecorators": true,
- "lib": ["dom", "es2017"],
+ "lib": ["dom", "es2017", "ESNext.Disposable"],
"moduleResolution": "node",
"module": "esnext",
"target": "es2017",
diff --git a/package.json b/package.json
index fcb65de6..9cd28ac9 100644
--- a/package.json
+++ b/package.json
@@ -10,12 +10,14 @@
"scripts": {
"turbo": "dotenv -- turbo --cache-dir=.turbo",
"build": "pnpm turbo build",
+ "test": "pnpm turbo test",
"lint": "eslint -c .eslintrc.js .",
"lint:fix": "eslint -c .eslintrc.js --fix .",
"format": "prettier --write .",
"format:check": "prettier --check .",
"cloc": "pnpx cloc --exclude-dir=node_modules,target,build,dist,.dfx,.docusaurus --exclude-ext=yaml,yml,md,toml,json .",
- "postinstall": "./scripts/postinstall.sh"
+ "postinstall": "./scripts/postinstall.sh",
+ "playwright-install": "playwright install --with-deps"
},
"dependencies": {
"@angular/animations": "^19.0.5",
@@ -59,6 +61,7 @@
"@hadronous/ic-angular": "0.5.1",
"@hadronous/ic-build-angular": "0.5.1",
"@hadronous/pic": "0.11.0",
+ "@playwright/test": "^1.49.1",
"@types/bun": "^1.1.14",
"@types/jasmine": "~5.1.5",
"@types/node": "^20.17.11",
@@ -83,7 +86,7 @@
"ng-packagr": "^19.0.1",
"prettier": "^3.4.2",
"prettier-plugin-astro": "^0.13.0",
- "turbo": "^1.13.4",
+ "turbo": "^2.3.3",
"typescript": "~5.5.4"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 813a1956..20456365 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -126,6 +126,9 @@ importers:
'@hadronous/pic':
specifier: 0.11.0
version: 0.11.0(@dfinity/agent@2.2.0(@dfinity/candid@2.2.0(@dfinity/principal@2.2.0))(@dfinity/principal@2.2.0))(@dfinity/candid@2.2.0(@dfinity/principal@2.2.0))(@dfinity/identity@2.2.0(@dfinity/agent@2.2.0(@dfinity/candid@2.2.0(@dfinity/principal@2.2.0))(@dfinity/principal@2.2.0))(@dfinity/principal@2.2.0))(@dfinity/principal@2.2.0)
+ '@playwright/test':
+ specifier: ^1.49.1
+ version: 1.49.1
'@types/bun':
specifier: ^1.1.14
version: 1.1.14
@@ -199,8 +202,8 @@ importers:
specifier: ^0.13.0
version: 0.13.0
turbo:
- specifier: ^1.13.4
- version: 1.13.4
+ specifier: ^2.3.3
+ version: 2.3.3
typescript:
specifier: ~5.5.4
version: 5.5.4
@@ -224,35 +227,32 @@ importers:
specifier: workspace:*
version: link:../styles
'@stencil/core':
- specifier: ^4.14.1
- version: 4.23.0
+ specifier: ^4.23.1
+ version: 4.23.1
devDependencies:
+ '@stencil/playwright':
+ specifier: ^0.2.1
+ version: 0.2.1(@playwright/test@1.49.1)(@stencil/core@4.23.1)
'@stencil/sass':
- specifier: ^3.0.11
- version: 3.0.12(@stencil/core@4.23.0)
+ specifier: ^3.0.12
+ version: 3.0.12(@stencil/core@4.23.1)
'@storybook/addon-essentials':
- specifier: ^8.0.6
+ specifier: ^8.4.7
version: 8.4.7(@types/react@18.3.18)(storybook@8.4.7(prettier@3.4.2))
'@storybook/blocks':
- specifier: ^8.0.6
+ specifier: ^8.4.7
version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))
- '@storybook/html':
- specifier: ^8.0.6
- version: 8.4.7(storybook@8.4.7(prettier@3.4.2))
- '@storybook/html-vite':
- specifier: ^8.0.6
- version: 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))
'@storybook/test':
- specifier: ^8.0.6
+ specifier: ^8.4.7
version: 8.4.7(storybook@8.4.7(prettier@3.4.2))
- react:
- specifier: ^18.2.0
- version: 18.3.1
- react-dom:
- specifier: ^18.2.0
- version: 18.3.1(react@18.3.1)
+ '@storybook/web-components':
+ specifier: ^8.4.7
+ version: 8.4.7(lit@3.2.1)(storybook@8.4.7(prettier@3.4.2))
+ '@storybook/web-components-vite':
+ specifier: ^8.4.7
+ version: 8.4.7(lit@3.2.1)(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))
storybook:
- specifier: ^8.0.6
+ specifier: ^8.4.7
version: 8.4.7(prettier@3.4.2)
src/backend/integration:
@@ -317,7 +317,7 @@ importers:
dependencies:
'@astrojs/netlify':
specifier: ^5.2.0
- version: 5.5.4(@types/node@20.17.11)(astro@4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))(encoding@0.1.13)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)
+ version: 5.5.4(@types/node@22.10.3)(astro@4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))(encoding@0.1.13)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)
'@cg/styles':
specifier: workspace:*
version: link:../../lib/styles
@@ -326,10 +326,10 @@ importers:
version: link:../../lib/ui
'@storyblok/astro':
specifier: ^4.0.4
- version: 4.1.1(astro@4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))
+ version: 4.1.1(astro@4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))
astro:
specifier: ^4.5.16
- version: 4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4)
+ version: 4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4)
devDependencies:
'@astrojs/check':
specifier: ^0.5.10
@@ -2385,6 +2385,12 @@ packages:
peerDependencies:
'@inquirer/prompts': '>= 3 < 8'
+ '@lit-labs/ssr-dom-shim@1.2.1':
+ resolution: {integrity: sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==}
+
+ '@lit/reactive-element@2.0.4':
+ resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==}
+
'@lmdb/lmdb-darwin-arm64@3.1.5':
resolution: {integrity: sha512-ue5PSOzHMCIYrfvPP/MRS6hsKKLzqqhcdAvJCO8uFlDdj598EhgnacuOTuqA6uBK5rgiZXfDWyb7DVZSiBKxBA==}
cpu: [arm64]
@@ -2761,6 +2767,11 @@ packages:
resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ '@playwright/test@1.49.1':
+ resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==}
+ engines: {node: '>=18'}
+ hasBin: true
+
'@pnpm/config.env-replace@1.1.0':
resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
engines: {node: '>=12.22.0'}
@@ -3070,11 +3081,18 @@ packages:
'@socket.io/component-emitter@3.1.2':
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
- '@stencil/core@4.23.0':
- resolution: {integrity: sha512-9vI8ywhoqlaDEmrcntejrZ9X76Tddv2JyWakjVpqJAdDNXgf520sYkyjzGT0p8VJfPtSaKm6pMtl5sAH1r9cFg==}
+ '@stencil/core@4.23.1':
+ resolution: {integrity: sha512-VtGgKTZdqaank5zs/gE5LBTcIYg4pE81pI4rfknMl5NFQbGcp83KISgBeJP/eRgcQCPu+ji/XhOq1joaTepAhQ==}
engines: {node: '>=16.0.0', npm: '>=7.10.0'}
hasBin: true
+ '@stencil/playwright@0.2.1':
+ resolution: {integrity: sha512-SMZpS7OGV3IfCie49Lcb31VexsgXxuPUS19r+T20Ru1t2ahhGBmsRYnYYZEFwlDFO9+6R8gqpomZ+obSB7A1KQ==}
+ engines: {node: '>=12.0.0', npm: '>=6.0.0'}
+ peerDependencies:
+ '@playwright/test': '>=1.41.2'
+ '@stencil/core': '>=4.13.0'
+
'@stencil/sass@3.0.12':
resolution: {integrity: sha512-aXMgpG13ftxLYo2dDauapvE9gKzSxTAqCMOfTqbPhKUCZ43JsknkLx+PArRaFtfYeVGSQ8eTS4ck7/Nlec+PNA==}
engines: {node: '>=12.0.0', npm: '>=6.0.0'}
@@ -3184,18 +3202,6 @@ packages:
'@storybook/global@5.0.0':
resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
- '@storybook/html-vite@8.4.7':
- resolution: {integrity: sha512-kViex12pp1hWAUIcTwn7q6imH9EwSHT6QGyp1+M56MClXKzO9ggdaDtZpV6QdwWa0hJxwobyXBNBnOQjfd7UYg==}
- engines: {node: '>=18.0.0'}
- peerDependencies:
- storybook: ^8.4.7
-
- '@storybook/html@8.4.7':
- resolution: {integrity: sha512-2F9+n3/Xujf6/mHlULhtLL7Ha9u92l6GChM0AUTKL9cK8KzQKcAxqnH7JzE6HTFXMr10oj/706AMJSymvcc/SQ==}
- engines: {node: '>=18.0.0'}
- peerDependencies:
- storybook: ^8.4.7
-
'@storybook/icons@1.3.0':
resolution: {integrity: sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A==}
engines: {node: '>=14.0.0'}
@@ -3235,6 +3241,19 @@ packages:
peerDependencies:
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+ '@storybook/web-components-vite@8.4.7':
+ resolution: {integrity: sha512-+EKnJeSc7TB5cw+EEvCfCaHNEN3pRqf9e4YdQYQrd/Qtb2vYknyDD9HSPZqT/92eE+PaRKsg9CYPlqY6T+7HLg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ storybook: ^8.4.7
+
+ '@storybook/web-components@8.4.7':
+ resolution: {integrity: sha512-zR/bUWGkS5uxvqfXnW082ScrC4y5UrTdE1VKasezLGi5bTLub2hz8JP87PJgtWrq+mdrdmkLGzv5O4iJ/tlMAw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ lit: ^2.0.0 || ^3.0.0
+ storybook: ^8.4.7
+
'@svgr/babel-plugin-add-jsx-attribute@6.5.1':
resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==}
engines: {node: '>=10'}
@@ -3546,6 +3565,9 @@ packages:
'@types/supports-color@8.1.3':
resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==}
+ '@types/trusted-types@2.0.7':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
@@ -5332,6 +5354,10 @@ packages:
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ find-up@7.0.0:
+ resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
+ engines: {node: '>=18'}
+
find-yarn-workspace-root2@1.2.16:
resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
@@ -5425,6 +5451,11 @@ packages:
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -6424,6 +6455,15 @@ packages:
resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==}
engines: {node: '>=18.0.0'}
+ lit-element@4.1.1:
+ resolution: {integrity: sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==}
+
+ lit-html@3.2.1:
+ resolution: {integrity: sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==}
+
+ lit@3.2.1:
+ resolution: {integrity: sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==}
+
lmdb@3.1.5:
resolution: {integrity: sha512-46Mch5Drq+A93Ss3gtbg+Xuvf5BOgIuvhKDWoGa3HcPHI6BL2NCOkRdSx1D4VfzwrxhnsjbyIVsLRlQHu6URvw==}
hasBin: true
@@ -7442,6 +7482,16 @@ packages:
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
engines: {node: '>=8'}
+ playwright-core@1.49.1:
+ resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.49.1:
+ resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
polished@4.3.1:
resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==}
engines: {node: '>=10'}
@@ -8835,38 +8885,38 @@ packages:
resolution: {integrity: sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==}
engines: {node: ^18.17.0 || >=20.5.0}
- turbo-darwin-64@1.13.4:
- resolution: {integrity: sha512-A0eKd73R7CGnRinTiS7txkMElg+R5rKFp9HV7baDiEL4xTG1FIg/56Vm7A5RVgg8UNgG2qNnrfatJtb+dRmNdw==}
+ turbo-darwin-64@2.3.3:
+ resolution: {integrity: sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@1.13.4:
- resolution: {integrity: sha512-eG769Q0NF6/Vyjsr3mKCnkG/eW6dKMBZk6dxWOdrHfrg6QgfkBUk0WUUujzdtVPiUIvsh4l46vQrNVd9EOtbyA==}
+ turbo-darwin-arm64@2.3.3:
+ resolution: {integrity: sha512-DYbQwa3NsAuWkCUYVzfOUBbSUBVQzH5HWUFy2Kgi3fGjIWVZOFk86ss+xsWu//rlEAfYwEmopigsPYSmW4X15A==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@1.13.4:
- resolution: {integrity: sha512-Bq0JphDeNw3XEi+Xb/e4xoKhs1DHN7OoLVUbTIQz+gazYjigVZvtwCvgrZI7eW9Xo1eOXM2zw2u1DGLLUfmGkQ==}
+ turbo-linux-64@2.3.3:
+ resolution: {integrity: sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@1.13.4:
- resolution: {integrity: sha512-BJcXw1DDiHO/okYbaNdcWN6szjXyHWx9d460v6fCHY65G8CyqGU3y2uUTPK89o8lq/b2C8NK0yZD+Vp0f9VoIg==}
+ turbo-linux-arm64@2.3.3:
+ resolution: {integrity: sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@1.13.4:
- resolution: {integrity: sha512-OFFhXHOFLN7A78vD/dlVuuSSVEB3s9ZBj18Tm1hk3aW1HTWTuAw0ReN6ZNlVObZUHvGy8d57OAGGxf2bT3etQw==}
+ turbo-windows-64@2.3.3:
+ resolution: {integrity: sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@1.13.4:
- resolution: {integrity: sha512-u5A+VOKHswJJmJ8o8rcilBfU5U3Y1TTAfP9wX8bFh8teYF1ghP0EhtMRLjhtp6RPa+XCxHHVA2CiC3gbh5eg5g==}
+ turbo-windows-arm64@2.3.3:
+ resolution: {integrity: sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag==}
cpu: [arm64]
os: [win32]
- turbo@1.13.4:
- resolution: {integrity: sha512-1q7+9UJABuBAHrcC4Sxp5lOqYS5mvxRrwa33wpIyM18hlOCpRD/fTJNxZ0vhbMcJmz15o9kkVm743mPn7p6jpQ==}
+ turbo@2.3.3:
+ resolution: {integrity: sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA==}
hasBin: true
type-check@0.4.0:
@@ -10009,7 +10059,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.24.7
'@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0)
'@inquirer/confirm': 5.0.2(@types/node@20.17.11)
- '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.4.11(@types/node@20.17.11)(less@4.2.0)(sass@1.80.7)(terser@5.36.0))
+ '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.4.11(@types/node@20.17.11)(less@4.2.0)(sass@1.80.7)(terser@5.37.0))
beasties: 0.1.0
browserslist: 4.24.3
esbuild: 0.24.0
@@ -10252,15 +10302,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@astrojs/netlify@5.5.4(@types/node@20.17.11)(astro@4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))(encoding@0.1.13)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)':
+ '@astrojs/netlify@5.5.4(@types/node@22.10.3)(astro@4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))(encoding@0.1.13)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)':
dependencies:
'@astrojs/internal-helpers': 0.4.1
'@astrojs/underscore-redirects': 0.3.4
'@netlify/functions': 2.8.2
'@vercel/nft': 0.27.10(encoding@0.1.13)(rollup@4.29.1)
- astro: 4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4)
+ astro: 4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4)
esbuild: 0.21.5
- vite: 5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
+ vite: 5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
transitivePeerDependencies:
- '@types/node'
- encoding
@@ -12468,6 +12518,12 @@ snapshots:
'@inquirer/prompts': 7.1.0(@types/node@20.17.11)
'@inquirer/type': 1.5.5
+ '@lit-labs/ssr-dom-shim@1.2.1': {}
+
+ '@lit/reactive-element@2.0.4':
+ dependencies:
+ '@lit-labs/ssr-dom-shim': 1.2.1
+
'@lmdb/lmdb-darwin-arm64@3.1.5':
optional: true
@@ -12845,6 +12901,10 @@ snapshots:
'@pkgr/core@0.1.1': {}
+ '@playwright/test@1.49.1':
+ dependencies:
+ playwright: 1.49.1
+
'@pnpm/config.env-replace@1.1.0': {}
'@pnpm/network.ca-file@1.0.2':
@@ -13097,16 +13157,23 @@ snapshots:
'@socket.io/component-emitter@3.1.2': {}
- '@stencil/core@4.23.0': {}
+ '@stencil/core@4.23.1': {}
+
+ '@stencil/playwright@0.2.1(@playwright/test@1.49.1)(@stencil/core@4.23.1)':
+ dependencies:
+ '@playwright/test': 1.49.1
+ '@stencil/core': 4.23.1
+ deepmerge: 4.3.1
+ find-up: 7.0.0
- '@stencil/sass@3.0.12(@stencil/core@4.23.0)':
+ '@stencil/sass@3.0.12(@stencil/core@4.23.1)':
dependencies:
- '@stencil/core': 4.23.0
+ '@stencil/core': 4.23.1
- '@storyblok/astro@4.1.1(astro@4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))':
+ '@storyblok/astro@4.1.1(astro@4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4))':
dependencies:
'@storyblok/js': 3.2.1
- astro: 4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4)
+ astro: 4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4)
camelcase: 8.0.0
lodash.mergewith: 4.6.2
@@ -13205,13 +13272,13 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@storybook/builder-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))':
+ '@storybook/builder-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))':
dependencies:
'@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.4.2))
browser-assert: 1.2.1
storybook: 8.4.7(prettier@3.4.2)
ts-dedent: 2.2.0
- vite: 5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
+ vite: 5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
'@storybook/components@8.4.7(storybook@8.4.7(prettier@3.4.2))':
dependencies:
@@ -13248,25 +13315,6 @@ snapshots:
'@storybook/global@5.0.0': {}
- '@storybook/html-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))':
- dependencies:
- '@storybook/builder-vite': 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))
- '@storybook/html': 8.4.7(storybook@8.4.7(prettier@3.4.2))
- magic-string: 0.30.17
- storybook: 8.4.7(prettier@3.4.2)
- transitivePeerDependencies:
- - vite
-
- '@storybook/html@8.4.7(storybook@8.4.7(prettier@3.4.2))':
- dependencies:
- '@storybook/components': 8.4.7(storybook@8.4.7(prettier@3.4.2))
- '@storybook/global': 5.0.0
- '@storybook/manager-api': 8.4.7(storybook@8.4.7(prettier@3.4.2))
- '@storybook/preview-api': 8.4.7(storybook@8.4.7(prettier@3.4.2))
- '@storybook/theming': 8.4.7(storybook@8.4.7(prettier@3.4.2))
- storybook: 8.4.7(prettier@3.4.2)
- ts-dedent: 2.2.0
-
'@storybook/icons@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
react: 18.3.1
@@ -13308,6 +13356,28 @@ snapshots:
dependencies:
storybook: 8.4.7(prettier@3.4.2)
+ '@storybook/web-components-vite@8.4.7(lit@3.2.1)(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))':
+ dependencies:
+ '@storybook/builder-vite': 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))
+ '@storybook/web-components': 8.4.7(lit@3.2.1)(storybook@8.4.7(prettier@3.4.2))
+ magic-string: 0.30.17
+ storybook: 8.4.7(prettier@3.4.2)
+ transitivePeerDependencies:
+ - lit
+ - vite
+
+ '@storybook/web-components@8.4.7(lit@3.2.1)(storybook@8.4.7(prettier@3.4.2))':
+ dependencies:
+ '@storybook/components': 8.4.7(storybook@8.4.7(prettier@3.4.2))
+ '@storybook/global': 5.0.0
+ '@storybook/manager-api': 8.4.7(storybook@8.4.7(prettier@3.4.2))
+ '@storybook/preview-api': 8.4.7(storybook@8.4.7(prettier@3.4.2))
+ '@storybook/theming': 8.4.7(storybook@8.4.7(prettier@3.4.2))
+ lit: 3.2.1
+ storybook: 8.4.7(prettier@3.4.2)
+ tiny-invariant: 1.3.3
+ ts-dedent: 2.2.0
+
'@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -13678,6 +13748,8 @@ snapshots:
'@types/supports-color@8.1.3': {}
+ '@types/trusted-types@2.0.7': {}
+
'@types/unist@2.0.11': {}
'@types/unist@3.0.3': {}
@@ -13798,10 +13870,6 @@ snapshots:
- rollup
- supports-color
- '@vitejs/plugin-basic-ssl@1.1.0(vite@5.4.11(@types/node@20.17.11)(less@4.2.0)(sass@1.80.7)(terser@5.36.0))':
- dependencies:
- vite: 5.4.11(@types/node@20.17.11)(less@4.2.0)(sass@1.80.7)(terser@5.36.0)
-
'@vitejs/plugin-basic-ssl@1.1.0(vite@5.4.11(@types/node@20.17.11)(less@4.2.0)(sass@1.80.7)(terser@5.37.0))':
dependencies:
vite: 5.4.11(@types/node@20.17.11)(less@4.2.0)(sass@1.80.7)(terser@5.37.0)
@@ -14200,7 +14268,7 @@ snapshots:
astring@1.9.0: {}
- astro@4.16.18(@types/node@20.17.11)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4):
+ astro@4.16.18(@types/node@22.10.3)(less@4.2.1)(rollup@4.29.1)(sass@1.83.0)(terser@5.37.0)(typescript@5.5.4):
dependencies:
'@astrojs/compiler': 2.10.3
'@astrojs/internal-helpers': 0.4.1
@@ -14256,8 +14324,8 @@ snapshots:
tsconfck: 3.1.4(typescript@5.5.4)
unist-util-visit: 5.0.0
vfile: 6.0.3
- vite: 5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
- vitefu: 1.0.5(vite@5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))
+ vite: 5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
+ vitefu: 1.0.5(vite@5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0))
which-pm: 3.0.0
xxhash-wasm: 1.1.0
yargs-parser: 21.1.1
@@ -15644,7 +15712,7 @@ snapshots:
- bluebird
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
@@ -15666,7 +15734,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -16032,6 +16100,12 @@ snapshots:
locate-path: 7.2.0
path-exists: 5.0.0
+ find-up@7.0.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+ unicorn-magic: 0.1.0
+
find-yarn-workspace-root2@1.2.16:
dependencies:
micromatch: 4.0.8
@@ -16123,6 +16197,9 @@ snapshots:
fs.realpath@1.0.0: {}
+ fsevents@2.3.2:
+ optional: true
+
fsevents@2.3.3:
optional: true
@@ -17257,6 +17334,22 @@ snapshots:
rfdc: 1.4.1
wrap-ansi: 9.0.0
+ lit-element@4.1.1:
+ dependencies:
+ '@lit-labs/ssr-dom-shim': 1.2.1
+ '@lit/reactive-element': 2.0.4
+ lit-html: 3.2.1
+
+ lit-html@3.2.1:
+ dependencies:
+ '@types/trusted-types': 2.0.7
+
+ lit@3.2.1:
+ dependencies:
+ '@lit/reactive-element': 2.0.4
+ lit-element: 4.1.1
+ lit-html: 3.2.1
+
lmdb@3.1.5:
dependencies:
msgpackr: 1.11.2
@@ -18681,6 +18774,14 @@ snapshots:
dependencies:
find-up: 3.0.0
+ playwright-core@1.49.1: {}
+
+ playwright@1.49.1:
+ dependencies:
+ playwright-core: 1.49.1
+ optionalDependencies:
+ fsevents: 2.3.2
+
polished@4.3.1:
dependencies:
'@babel/runtime': 7.26.0
@@ -20243,16 +20344,16 @@ snapshots:
mkdirp: 3.0.1
yallist: 5.0.0
- terser-webpack-plugin@5.3.11(esbuild@0.24.2)(webpack@5.96.1(esbuild@0.24.0)):
+ terser-webpack-plugin@5.3.11(esbuild@0.24.0)(webpack@5.96.1(esbuild@0.24.0)):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1
schema-utils: 4.3.0
serialize-javascript: 6.0.2
- terser: 5.36.0
+ terser: 5.37.0
webpack: 5.96.1(esbuild@0.24.2)
optionalDependencies:
- esbuild: 0.24.2
+ esbuild: 0.24.0
terser-webpack-plugin@5.3.11(esbuild@0.24.2)(webpack@5.97.1(esbuild@0.24.2)):
dependencies:
@@ -20350,32 +20451,32 @@ snapshots:
transitivePeerDependencies:
- supports-color
- turbo-darwin-64@1.13.4:
+ turbo-darwin-64@2.3.3:
optional: true
- turbo-darwin-arm64@1.13.4:
+ turbo-darwin-arm64@2.3.3:
optional: true
- turbo-linux-64@1.13.4:
+ turbo-linux-64@2.3.3:
optional: true
- turbo-linux-arm64@1.13.4:
+ turbo-linux-arm64@2.3.3:
optional: true
- turbo-windows-64@1.13.4:
+ turbo-windows-64@2.3.3:
optional: true
- turbo-windows-arm64@1.13.4:
+ turbo-windows-arm64@2.3.3:
optional: true
- turbo@1.13.4:
+ turbo@2.3.3:
optionalDependencies:
- turbo-darwin-64: 1.13.4
- turbo-darwin-arm64: 1.13.4
- turbo-linux-64: 1.13.4
- turbo-linux-arm64: 1.13.4
- turbo-windows-64: 1.13.4
- turbo-windows-arm64: 1.13.4
+ turbo-darwin-64: 2.3.3
+ turbo-darwin-arm64: 2.3.3
+ turbo-linux-64: 2.3.3
+ turbo-linux-arm64: 2.3.3
+ turbo-windows-64: 2.3.3
+ turbo-windows-arm64: 2.3.3
type-check@0.4.0:
dependencies:
@@ -20731,21 +20832,21 @@ snapshots:
sass: 1.80.7
terser: 5.37.0
- vite@5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0):
+ vite@5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0):
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
rollup: 4.26.0
optionalDependencies:
- '@types/node': 20.17.11
+ '@types/node': 22.10.3
fsevents: 2.3.3
less: 4.2.1
sass: 1.83.0
terser: 5.37.0
- vitefu@1.0.5(vite@5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)):
+ vitefu@1.0.5(vite@5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)):
optionalDependencies:
- vite: 5.4.11(@types/node@20.17.11)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
+ vite: 5.4.11(@types/node@22.10.3)(less@4.2.1)(sass@1.83.0)(terser@5.37.0)
void-elements@2.0.1: {}
@@ -21042,7 +21143,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.11(esbuild@0.24.2)(webpack@5.96.1(esbuild@0.24.0))
+ terser-webpack-plugin: 5.3.11(esbuild@0.24.0)(webpack@5.96.1(esbuild@0.24.0))
watchpack: 2.4.2
webpack-sources: 3.2.3
transitivePeerDependencies:
diff --git a/turbo.json b/turbo.json
index 041682f2..95b844d3 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,6 +1,5 @@
{
"$schema": "https://turbo.build/schema.json",
- "globalDotEnv": [".env"],
"globalDependencies": [
".editorconfig",
".eslintrc.js",
@@ -10,22 +9,20 @@
"angular.json",
"dfx.json",
"prettier.config.cjs",
- "tsconfig.json"
+ "tsconfig.json",
+ ".env"
],
- "pipeline": {
+ "tasks": {
"build": {
- "outputs": ["dist/**", "build/**", ".docusaurus/**"],
- "dotEnv": [".env"],
+ "outputs": ["dist/**", "build/**", ".docusaurus/**", "loader/**", "www"],
"dependsOn": ["^build"]
},
"test": {
"outputs": [],
- "dotEnv": [".env"],
"dependsOn": ["^build"]
},
"start": {
"outputs": [],
- "dotEnv": [".env"],
"dependsOn": ["^build"]
}
}