diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 652c7439af8d2..b53da615a7aae 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,18 +12,11 @@ If this is your first time contributing, you may also find reviewing these guide - Inline Documentation Standards: https://make.wordpress.org/core/handbook/best-practices/inline-documentation-standards/ - Browser Support Policies: https://make.wordpress.org/core/handbook/best-practices/browser-support/ - Proper spelling and grammar related best practices: https://make.wordpress.org/core/handbook/best-practices/spelling/ -- ✨ If you are using AI tools, you must adhere to the AI Guidelines: https://make.wordpress.org/ai/handbook/ai-guidelines/ --> Trac ticket: -## Use of AI Tools - - - --- **This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See [GitHub Pull Requests for Code Review](https://make.wordpress.org/core/handbook/contribute/git/github-pull-requests-for-code-review/) in the Core Handbook for more details.** diff --git a/.github/workflows/commit-built-file-changes.yml b/.github/workflows/commit-built-file-changes.yml index f93cd4bd662ec..f7265274cf520 100644 --- a/.github/workflows/commit-built-file-changes.yml +++ b/.github/workflows/commit-built-file-changes.yml @@ -123,7 +123,7 @@ jobs: rm -f private-key.pem - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 if: ${{ steps.artifact-check.outputs.exists == 'true' }} with: repository: ${{ github.event.workflow_run.head_repository.full_name }} diff --git a/.github/workflows/install-testing.yml b/.github/workflows/install-testing.yml index d3b399bd5bae4..1599ad019d827 100644 --- a/.github/workflows/install-testing.yml +++ b/.github/workflows/install-testing.yml @@ -1,9 +1,6 @@ # Confirms that installing WordPress using WP-CLI works successfully. # # This workflow is not meant to test wordpress-develop checkouts, but rather tagged versions officially available on WordPress.org. -# -# This workflow is triggered for all WordPress versions that are currently receiving security updates. It therefore needs to -# retain support for older PHP and database versions. name: Installation Tests on: @@ -88,18 +85,22 @@ jobs: - db-version: '5.0' - db-version: '5.1' - db-version: '5.5' + # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' # Only test the latest innovation release. - db-version: '9.0' - db-version: '9.1' - db-version: '9.2' - db-version: '9.3' - db-version: '9.4' - - db-version: '9.5' # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. - php: '7.2' - db-version: '9.6' + db-version: '9.5' - php: '7.3' - db-version: '9.6' + db-version: '9.5' services: database: @@ -114,11 +115,11 @@ jobs: -e MYSQL_ROOT_PASSWORD="root" -e MYSQL_DATABASE="test_db" --entrypoint sh ${{ matrix.db-type }}:${{ matrix.db-version }} - -c "exec docker-entrypoint.sh mysqld${{ matrix.db-type == 'mysql' && contains( fromJSON('["5.4", "5.5", "5.6", "7.0", "7.1", "7.2", "7.3"]'), matrix.php ) && ( matrix.db-version == '8.4' && ' --mysql-native-password=ON --authentication-policy=mysql_native_password' || ' --default-authentication-plugin=mysql_native_password' ) || '' }}" + -c "exec docker-entrypoint.sh mysqld${{ matrix.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), matrix.php ) && ' --default-authentication-plugin=mysql_native_password' || '' }}" steps: - name: Set up PHP ${{ matrix.php }} - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 with: php-version: '${{ matrix.php }}' coverage: none diff --git a/.github/workflows/javascript-type-checking.yml b/.github/workflows/javascript-type-checking.yml deleted file mode 100644 index 9dbc33bfb067f..0000000000000 --- a/.github/workflows/javascript-type-checking.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: JavaScript Type Checking - -on: - # JavaScript type checking was introduced in 7.0.0. - push: - branches: - - trunk - - '[7-9].[0-9]' - tags: - - '[7-9].[0-9]' - - '[7-9]+.[0-9].[0-9]+' - pull_request: - branches: - - trunk - - '[7-9].[0-9]' - paths: - # This workflow only scans JavaScript files. - - '**.js' - - '**.ts' - - '**.tsx' - # These files configure npm. Changes could affect the outcome. - - 'package*.json' - - '.nvmrc' - # This file configures TypeScript. Changes could affect the outcome. - - 'tsconfig.json' - # This directory contains TypeScript definitions. Changes could affect the outcome. - - 'typings/**' - # Confirm any changes to relevant workflow files. - - '.github/workflows/javascript-type-checking.yml' - - '.github/workflows/reusable-javascript-type-checking-v1.yml' - workflow_dispatch: - -# Cancels all previous workflow runs for pull requests that have not completed. -concurrency: - # The concurrency group contains the workflow name and the branch name for pull requests - # or the commit hash for any other events. - group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} - cancel-in-progress: true - -# Disable permissions for all available scopes by default. -# Any needed permissions should be configured at the job level. -permissions: {} - -jobs: - # Runs JavaScript type checking. - typecheck: - name: JavaScript type checking - uses: ./.github/workflows/reusable-javascript-type-checking-v1.yml - permissions: - contents: read - if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} - - slack-notifications: - name: Slack Notifications - uses: ./.github/workflows/slack-notifications.yml - permissions: - actions: read - contents: read - needs: [ typecheck ] - if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} - with: - calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} - secrets: - SLACK_GHA_SUCCESS_WEBHOOK: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }} - SLACK_GHA_CANCELLED_WEBHOOK: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }} - SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }} - SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }} - - failed-workflow: - name: Failed workflow tasks - runs-on: ubuntu-24.04 - permissions: - actions: write - needs: [ slack-notifications ] - if: | - always() && - github.repository == 'WordPress/wordpress-develop' && - github.event_name != 'pull_request' && - github.run_attempt < 2 && - ( - contains( needs.*.result, 'cancelled' ) || - contains( needs.*.result, 'failure' ) - ) - - steps: - - name: Dispatch workflow run - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 - with: - retries: 2 - retry-exempt-status-codes: 418 - script: | - github.rest.actions.createWorkflowDispatch({ - owner: context.repo.owner, - repo: context.repo.repo, - workflow_id: 'failed-workflow.yml', - ref: 'trunk', - inputs: { - run_id: `${context.runId}`, - } - }); diff --git a/.github/workflows/local-docker-environment.yml b/.github/workflows/local-docker-environment.yml index 5ddb5f5d6fe57..06638af14a552 100644 --- a/.github/workflows/local-docker-environment.yml +++ b/.github/workflows/local-docker-environment.yml @@ -106,6 +106,11 @@ jobs: - db-version: '9.2' - db-version: '9.3' - db-version: '9.4' + # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '9.5' + - php: '7.3' + db-version: '9.5' # No PHP 8.5 + Memcached support yet. - php: '8.5' memcached: true diff --git a/.github/workflows/phpstan-static-analysis.yml b/.github/workflows/phpstan-static-analysis.yml deleted file mode 100644 index a479e8e371214..0000000000000 --- a/.github/workflows/phpstan-static-analysis.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: PHPStan Static Analysis - -on: - # PHPStan testing was introduced in 7.0.0. - push: - branches: - - trunk - - '[7-9].[0-9]' - tags: - - '[7-9].[0-9]' - - '[7-9]+.[0-9].[0-9]+' - pull_request: - branches: - - trunk - - '[7-9].[0-9]' - paths: - # This workflow only scans PHP files. - - '**.php' - # These files configure Composer. Changes could affect the outcome. - - 'composer.*' - # These files configure PHPStan. Changes could affect the outcome. - - 'phpstan.neon.dist' - - 'tests/phpstan/base.neon' - - 'tests/phpstan/baseline.php' - # Confirm any changes to relevant workflow files. - - '.github/workflows/phpstan-static-analysis.yml' - - '.github/workflows/reusable-phpstan-static-analysis-v1.yml' - workflow_dispatch: - -# Cancels all previous workflow runs for pull requests that have not completed. -concurrency: - # The concurrency group contains the workflow name and the branch name for pull requests - # or the commit hash for any other events. - group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} - cancel-in-progress: true - -# Disable permissions for all available scopes by default. -# Any needed permissions should be configured at the job level. -permissions: {} - -jobs: - # Runs PHPStan Static Analysis. - phpstan: - name: PHP static analysis - uses: ./.github/workflows/reusable-phpstan-static-analysis-v1.yml - permissions: - contents: read - if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} - - slack-notifications: - name: Slack Notifications - uses: ./.github/workflows/slack-notifications.yml - permissions: - actions: read - contents: read - needs: [ phpstan ] - if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} - with: - calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} - secrets: - SLACK_GHA_SUCCESS_WEBHOOK: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }} - SLACK_GHA_CANCELLED_WEBHOOK: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }} - SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }} - SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }} - - failed-workflow: - name: Failed workflow tasks - runs-on: ubuntu-24.04 - permissions: - actions: write - needs: [ slack-notifications ] - if: | - always() && - github.repository == 'WordPress/wordpress-develop' && - github.event_name != 'pull_request' && - github.run_attempt < 2 && - ( - contains( needs.*.result, 'cancelled' ) || - contains( needs.*.result, 'failure' ) - ) - - steps: - - name: Dispatch workflow run - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 - with: - retries: 2 - retry-exempt-status-codes: 418 - script: | - github.rest.actions.createWorkflowDispatch({ - owner: context.repo.owner, - repo: context.repo.repo, - workflow_id: 'failed-workflow.yml', - ref: 'trunk', - inputs: { - run_id: `${context.runId}`, - } - }); diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index de36d5a505187..63615dfad19f8 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -72,7 +72,7 @@ jobs: fail-fast: false matrix: os: [ ubuntu-24.04 ] - php: [ '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] + php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] db-type: [ 'mysql' ] db-version: [ '5.7', '8.0', '8.4' ] tests-domain: [ 'example.org' ] @@ -149,7 +149,7 @@ jobs: fail-fast: false matrix: os: [ ubuntu-24.04 ] - php: [ '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] + php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] db-type: [ 'mariadb' ] db-version: [ '5.5', '10.3', '10.5', '10.6', '10.11', '11.4', '11.8' ] multisite: [ false, true ] @@ -201,19 +201,24 @@ jobs: fail-fast: false matrix: os: [ ubuntu-24.04 ] - php: [ '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] + php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] db-type: [ 'mysql', 'mariadb' ] - db-version: [ '9.6', '12.1' ] + db-version: [ '9.5', '12.0' ] multisite: [ false, true ] memcached: [ false ] db-innovation: [ true ] exclude: + # MySQL 9.0+ will not work on PHP <= 7.3 because mysql_native_password was removed. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '9.5' + - php: '7.3' + db-version: '9.5' # Exclude version combinations that don't exist. - db-type: 'mariadb' - db-version: '9.6' + db-version: '9.5' - db-type: 'mysql' - db-version: '12.1' + db-version: '12.0' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -243,7 +248,7 @@ jobs: strategy: fail-fast: false matrix: - php: [ '7.4', '8.0', '8.4' ] + php: [ '7.2', '7.4', '8.0', '8.4' ] db-type: [ 'mysql' ] db-version: [ '8.4' ] phpunit-test-groups: [ 'html-api-html5lib-tests' ] @@ -272,7 +277,7 @@ jobs: strategy: fail-fast: false matrix: - php: [ '7.4', '8.4' ] + php: [ '7.2', '8.4' ] db-version: [ '8.4', '11.8' ] db-type: [ 'mysql', 'mariadb' ] multisite: [ false ] diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml index da30e2feb7f11..dc7e6e7c7a7e6 100644 --- a/.github/workflows/pull-request-comments.yml +++ b/.github/workflows/pull-request-comments.yml @@ -167,6 +167,7 @@ jobs: [WordPress Playground](https://developer.wordpress.org/playground/) is an experimental project that creates a full WordPress instance entirely within the browser. ### Some things to be aware of + - The Plugin and Theme Directories cannot be accessed within Playground. - All changes will be lost when closing a tab with a Playground instance. - All changes will be lost when refreshing the page. - A fresh instance is created each time the link below is clicked. diff --git a/.github/workflows/reusable-build-package.yml b/.github/workflows/reusable-build-package.yml index 1679f1938df17..8361c1c9e7a99 100644 --- a/.github/workflows/reusable-build-package.yml +++ b/.github/workflows/reusable-build-package.yml @@ -29,13 +29,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -53,7 +53,7 @@ jobs: run: zip -q -r develop.zip wordpress/. - name: Upload ZIP as a GitHub Actions artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: wordpress-develop path: develop.zip diff --git a/.github/workflows/reusable-check-built-files.yml b/.github/workflows/reusable-check-built-files.yml index c1d05d821dec5..f9bcab80343ab 100644 --- a/.github/workflows/reusable-check-built-files.yml +++ b/.github/workflows/reusable-check-built-files.yml @@ -37,12 +37,12 @@ jobs: contents: read steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -103,7 +103,7 @@ jobs: # Uploads the diff file as an artifact. - name: Upload diff file as artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: ${{ steps.built-file-check.outputs.uncommitted_changes == 'true' }} with: name: pr-built-file-changes diff --git a/.github/workflows/reusable-coding-standards-javascript.yml b/.github/workflows/reusable-coding-standards-javascript.yml index 5ad9212e7e58d..e9f41e82d4b3e 100644 --- a/.github/workflows/reusable-coding-standards-javascript.yml +++ b/.github/workflows/reusable-coding-standards-javascript.yml @@ -34,13 +34,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-coding-standards-php.yml b/.github/workflows/reusable-coding-standards-php.yml index 59aacd51d1d44..db343aa5b819c 100644 --- a/.github/workflows/reusable-coding-standards-php.yml +++ b/.github/workflows/reusable-coding-standards-php.yml @@ -46,13 +46,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up PHP - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 with: php-version: ${{ inputs.php-version }} coverage: none @@ -65,7 +65,7 @@ jobs: run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT" - name: Cache PHPCS scan cache - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: | .cache/phpcs-src.json diff --git a/.github/workflows/reusable-end-to-end-tests.yml b/.github/workflows/reusable-end-to-end-tests.yml index 4c8f2214890ec..620949d7a6717 100644 --- a/.github/workflows/reusable-end-to-end-tests.yml +++ b/.github/workflows/reusable-end-to-end-tests.yml @@ -76,13 +76,13 @@ jobs: echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -100,7 +100,7 @@ jobs: - name: Install Playwright browsers if: ${{ inputs.install-playwright }} - run: npx playwright install --with-deps chromium + run: npx playwright install --with-deps - name: Build WordPress run: npm run build @@ -145,7 +145,7 @@ jobs: run: npm run test:e2e - name: Archive debug artifacts (screenshots, HTML snapshots) - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: always() with: name: failures-artifacts${{ inputs.LOCAL_SCRIPT_DEBUG && '-SCRIPT_DEBUG' || '' }}-${{ github.run_id }} diff --git a/.github/workflows/reusable-javascript-tests.yml b/.github/workflows/reusable-javascript-tests.yml index 0b6d28e44a93b..0fa37c589b2f7 100644 --- a/.github/workflows/reusable-javascript-tests.yml +++ b/.github/workflows/reusable-javascript-tests.yml @@ -35,13 +35,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-javascript-type-checking-v1.yml b/.github/workflows/reusable-javascript-type-checking-v1.yml deleted file mode 100644 index 3737bba6abb74..0000000000000 --- a/.github/workflows/reusable-javascript-type-checking-v1.yml +++ /dev/null @@ -1,76 +0,0 @@ -## -# A reusable workflow that runs JavaScript Type Checking. -## -name: JavaScript Type Checking - -on: - workflow_call: - -# Disable permissions for all available scopes by default. -# Any needed permissions should be configured at the job level. -permissions: {} - -jobs: - # Runs JavaScript type checking. - # - # Violations are reported inline with annotations. - # - # Performs the following steps: - # - Checks out the repository. - # - Sets up Node.js. - # - Logs debug information. - # - Installs npm dependencies. - # - Configures caching for TypeScript build info. - # - Runs JavaScript type checking. - # - Saves the TypeScript build info. - # - Ensures version-controlled files are not modified or deleted. - typecheck: - name: Run JavaScript type checking - runs-on: ubuntu-24.04 - permissions: - contents: read - timeout-minutes: 10 - - steps: - - name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - with: - show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - persist-credentials: false - - - name: Set up Node.js - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 - with: - node-version-file: '.nvmrc' - cache: npm - - - name: Log debug information - run: | - npm --version - node --version - - - name: Install npm dependencies - run: npm ci --ignore-scripts - - - name: Cache TypeScript build info - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - path: | - *.tsbuildinfo - key: "ts-build-info-${{ github.run_id }}" - restore-keys: | - ts-build-info- - - - name: Run JavaScript type checking - run: npm run typecheck:js - - - name: "Save result cache" - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - if: ${{ !cancelled() }} - with: - path: | - *.tsbuildinfo - key: "ts-build-info-${{ github.run_id }}" - - - name: Ensure version-controlled files are not modified or deleted - run: git diff --exit-code diff --git a/.github/workflows/reusable-performance-report-v2.yml b/.github/workflows/reusable-performance-report-v2.yml index 8ce3287d70c10..988e60310d950 100644 --- a/.github/workflows/reusable-performance-report-v2.yml +++ b/.github/workflows/reusable-performance-report-v2.yml @@ -55,20 +55,20 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} fetch-depth: ${{ github.event_name == 'workflow_dispatch' && '2' || '1' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm - name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 with: pattern: performance-${{ inputs.multisite && 'multisite' || 'single' }}-${{ inputs.memcached && 'memcached' || 'default' }}-* path: artifacts @@ -104,7 +104,7 @@ jobs: env: BASE_SHA: ${{ steps.base-sha.outputs.result }} CODEVITALS_PROJECT_TOKEN: ${{ secrets.CODEVITALS_PROJECT_TOKEN }} - HOST_NAME: codevitals.run + HOST_NAME: www.codevitals.run run: | if [ -z "$CODEVITALS_PROJECT_TOKEN" ]; then echo "Performance results could not be published. 'CODEVITALS_PROJECT_TOKEN' is not set" diff --git a/.github/workflows/reusable-performance-test-v2.yml b/.github/workflows/reusable-performance-test-v2.yml index cd9e27b38e74f..d900c95844cab 100644 --- a/.github/workflows/reusable-performance-test-v2.yml +++ b/.github/workflows/reusable-performance-test-v2.yml @@ -115,14 +115,14 @@ jobs: echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} fetch-depth: ${{ github.event_name == 'workflow_dispatch' && '2' || '1' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -227,6 +227,9 @@ jobs: - name: Deactivate WordPress Importer plugin run: npm run env:cli -- plugin deactivate wordpress-importer --path="/var/www/${LOCAL_DIR}" + - name: Update permalink structure + run: npm run env:cli -- rewrite structure '/%year%/%monthnum%/%postname%/' --path="/var/www/${LOCAL_DIR}" + - name: Install additional languages run: | npm run env:cli -- language core install de_DE --path="/var/www/${LOCAL_DIR}" @@ -255,7 +258,7 @@ jobs: TEST_RESULTS_PREFIX: ${{ inputs.subject != 'current' && inputs.subject || '' }} - name: Archive artifacts - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: always() with: name: performance-${{ inputs.multisite && 'multisite' || 'single' }}-${{ inputs.memcached && 'memcached' || 'default' }}-${{ inputs.subject }} diff --git a/.github/workflows/reusable-performance.yml b/.github/workflows/reusable-performance.yml index b2c851659ab4c..f211b58890fc3 100644 --- a/.github/workflows/reusable-performance.yml +++ b/.github/workflows/reusable-performance.yml @@ -127,7 +127,7 @@ jobs: echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} fetch-depth: ${{ github.event_name == 'workflow_dispatch' && '2' || '1' }} @@ -139,7 +139,7 @@ jobs: run: echo "TARGET_SHA=$(git rev-parse HEAD^1)" >> "$GITHUB_ENV" - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -203,6 +203,9 @@ jobs: - name: Deactivate WordPress Importer plugin run: npm run env:cli -- plugin deactivate wordpress-importer --path="/var/www/${LOCAL_DIR}" + - name: Update permalink structure + run: npm run env:cli -- rewrite structure '/%year%/%monthnum%/%postname%/' --path="/var/www/${LOCAL_DIR}" + - name: Install additional languages run: | npm run env:cli -- language core install de_DE --path="/var/www/${LOCAL_DIR}" @@ -309,7 +312,7 @@ jobs: run: npm run test:performance - name: Archive artifacts - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: always() with: name: performance-artifacts${{ inputs.multisite && '-multisite' || '' }}${{ inputs.memcached && '-memcached' || '' }}-${{ github.run_id }} @@ -344,7 +347,7 @@ jobs: env: BASE_SHA: ${{ steps.base-sha.outputs.result }} CODEVITALS_PROJECT_TOKEN: ${{ secrets.CODEVITALS_PROJECT_TOKEN }} - HOST_NAME: "codevitals.run" + HOST_NAME: "www.codevitals.run" run: | if [ -z "$CODEVITALS_PROJECT_TOKEN" ]; then echo "Performance results could not be published. 'CODEVITALS_PROJECT_TOKEN' is not set" diff --git a/.github/workflows/reusable-php-compatibility.yml b/.github/workflows/reusable-php-compatibility.yml index 9bec4260c184a..bbb688f040e74 100644 --- a/.github/workflows/reusable-php-compatibility.yml +++ b/.github/workflows/reusable-php-compatibility.yml @@ -40,13 +40,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up PHP - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 with: php-version: ${{ inputs.php-version }} coverage: none @@ -63,7 +63,7 @@ jobs: run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT" - name: Cache PHP compatibility scan cache - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: .cache/phpcompat.json key: ${{ runner.os }}-date-${{ steps.get-date.outputs.date }}-php-${{ inputs.php-version }}-phpcompat-cache-${{ hashFiles('**/composer.json', 'phpcompat.xml.dist') }} diff --git a/.github/workflows/reusable-phpstan-static-analysis-v1.yml b/.github/workflows/reusable-phpstan-static-analysis-v1.yml deleted file mode 100644 index 879c3e5657bc4..0000000000000 --- a/.github/workflows/reusable-phpstan-static-analysis-v1.yml +++ /dev/null @@ -1,109 +0,0 @@ -## -# A reusable workflow that runs PHP Static Analysis tests. -## -name: PHP Static Analysis - -on: - workflow_call: - inputs: - php-version: - description: 'The PHP version to use.' - required: false - type: 'string' - default: 'latest' - -# Disable permissions for all available scopes by default. -# Any needed permissions should be configured at the job level. -permissions: {} - -jobs: - # Runs PHP static analysis tests. - # - # Violations are reported inline with annotations. - # - # Performs the following steps: - # - Checks out the repository. - # - Sets up PHP. - # - Logs debug information. - # - Installs Composer dependencies. - # - Configures caching for PHP static analysis scans. - # - Make Composer packages available globally. - # - Runs PHPStan static analysis (with Pull Request annotations). - # - Saves the PHPStan result cache. - # - Ensures version-controlled files are not modified or deleted. - phpstan: - name: Run PHP static analysis - runs-on: ubuntu-24.04 - permissions: - contents: read - timeout-minutes: 20 - - steps: - - name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - with: - show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - persist-credentials: false - - - name: Set up Node.js - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 - with: - node-version-file: '.nvmrc' - cache: npm - - - name: Set up PHP - uses: shivammathur/setup-php@20529878ed81ef8e78ddf08b480401e6101a850f # v2.35.3 - with: - php-version: ${{ inputs.php-version }} - coverage: none - tools: cs2pr - - # This date is used to ensure that the Composer cache is cleared at least once every week. - # http://man7.org/linux/man-pages/man1/date.1.html - - name: "Get last Monday's date" - id: get-date - run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT" - - - name: General debug information - run: | - npm --version - node --version - composer --version - - # Since Composer dependencies are installed using `composer update` and no lock file is in version control, - # passing a custom cache suffix ensures that the cache is flushed at least once per week. - - name: Install Composer dependencies - uses: ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520 # v3.1.1 - with: - custom-cache-suffix: ${{ steps.get-date.outputs.date }} - - - name: Make Composer packages available globally - run: echo "${PWD}/vendor/bin" >> "$GITHUB_PATH" - - - name: Install npm dependencies - run: npm ci --ignore-scripts - - - name: Build WordPress - run: npm run build:dev - - - name: Cache PHP Static Analysis scan cache - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - path: .cache # This is defined in the base.neon file. - key: "phpstan-result-cache-${{ github.run_id }}" - restore-keys: | - phpstan-result-cache- - - - name: Run PHP static analysis tests - id: phpstan - run: composer run phpstan -- -vvv --error-format=checkstyle | cs2pr --errors-as-warnings --graceful-warnings - - - name: "Save result cache" - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - if: ${{ !cancelled() }} - with: - path: .cache - key: "phpstan-result-cache-${{ github.run_id }}" - - - name: Ensure version-controlled files are not modified or deleted - run: git diff --exit-code diff --git a/.github/workflows/reusable-phpunit-tests-v1.yml b/.github/workflows/reusable-phpunit-tests-v1.yml index 50891ef74e6cd..787e5f521b8b3 100644 --- a/.github/workflows/reusable-phpunit-tests-v1.yml +++ b/.github/workflows/reusable-phpunit-tests-v1.yml @@ -97,13 +97,13 @@ jobs: echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -121,7 +121,7 @@ jobs: - name: Cache Composer dependencies if: ${{ env.COMPOSER_INSTALL == true }} - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 env: cache-name: cache-composer-dependencies with: diff --git a/.github/workflows/reusable-phpunit-tests-v2.yml b/.github/workflows/reusable-phpunit-tests-v2.yml index 523db98096d1d..092d09227131b 100644 --- a/.github/workflows/reusable-phpunit-tests-v2.yml +++ b/.github/workflows/reusable-phpunit-tests-v2.yml @@ -99,13 +99,13 @@ jobs: echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Install Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -118,7 +118,7 @@ jobs: run: echo "composer_dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT" - name: Cache Composer dependencies - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 env: cache-name: cache-composer-dependencies with: diff --git a/.github/workflows/reusable-phpunit-tests-v3.yml b/.github/workflows/reusable-phpunit-tests-v3.yml index 45198c20f5e52..7a51389765c75 100644 --- a/.github/workflows/reusable-phpunit-tests-v3.yml +++ b/.github/workflows/reusable-phpunit-tests-v3.yml @@ -131,13 +131,13 @@ jobs: echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -150,7 +150,7 @@ jobs: # dependency versions are installed and cached. ## - name: Set up PHP - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 with: php-version: '${{ inputs.php }}' coverage: none @@ -165,9 +165,6 @@ jobs: - name: Install npm dependencies run: npm ci - - name: Build WordPress - run: npm run build:dev - - name: General debug information run: | npm --version @@ -237,7 +234,7 @@ jobs: - name: Upload test coverage report to Codecov if: ${{ inputs.coverage-report }} - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }}.xml @@ -246,7 +243,7 @@ jobs: - name: Upload HTML coverage report as artifact if: ${{ inputs.coverage-report }} - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }} path: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }} @@ -257,7 +254,7 @@ jobs: - name: Checkout the WordPress Test Reporter if: ${{ github.ref == 'refs/heads/trunk' && inputs.report }} - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: repository: 'WordPress/phpunit-test-runner' path: 'test-runner' diff --git a/.github/workflows/reusable-support-json-reader-v1.yml b/.github/workflows/reusable-support-json-reader-v1.yml index be5693aac7297..c2f263a093ab9 100644 --- a/.github/workflows/reusable-support-json-reader-v1.yml +++ b/.github/workflows/reusable-support-json-reader-v1.yml @@ -49,7 +49,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: repository: ${{ inputs.repository }} show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} @@ -86,7 +86,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: repository: ${{ inputs.repository }} show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} @@ -129,7 +129,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: repository: ${{ inputs.repository }} show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} diff --git a/.github/workflows/reusable-test-core-build-process.yml b/.github/workflows/reusable-test-core-build-process.yml index 4bec59e285c57..54db09f4fda4e 100644 --- a/.github/workflows/reusable-test-core-build-process.yml +++ b/.github/workflows/reusable-test-core-build-process.yml @@ -39,7 +39,6 @@ on: env: PUPPETEER_SKIP_DOWNLOAD: ${{ true }} - NODE_OPTIONS: --max-old-space-size=4096 # Disable permissions for all available scopes by default. # Any needed permissions should be configured at the job level. @@ -70,7 +69,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false @@ -91,7 +90,7 @@ jobs: custom-cache-suffix: ${{ steps.get-date.outputs.date }} - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -133,7 +132,7 @@ jobs: run: git diff --exit-code - name: Upload ZIP as a GitHub Actions artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: ${{ inputs.save-build || inputs.prepare-playground }} with: name: wordpress-build-${{ github.event_name == 'pull_request' && github.event.number || github.sha }} @@ -151,7 +150,7 @@ jobs: # Uploads the PR number as an artifact for the Pull Request Commenting workflow to download and then # leave a comment detailing how to test the PR within WordPress Playground. - name: Upload PR number as artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: ${{ inputs.prepare-playground && github.repository == 'WordPress/wordpress-develop' && github.event_name == 'pull_request' }} with: name: pr-number diff --git a/.github/workflows/reusable-test-gutenberg-build-process.yml b/.github/workflows/reusable-test-gutenberg-build-process.yml index c0fa87aa3ab20..a0e74d6d00bf5 100644 --- a/.github/workflows/reusable-test-gutenberg-build-process.yml +++ b/.github/workflows/reusable-test-gutenberg-build-process.yml @@ -49,13 +49,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Checkout Gutenberg plugin - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: repository: 'WordPress/gutenberg' path: ${{ env.GUTENBERG_DIRECTORY }} @@ -63,7 +63,7 @@ jobs: persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-test-local-docker-environment-v1.yml b/.github/workflows/reusable-test-local-docker-environment-v1.yml index 698956ff00346..acdd7622f6136 100644 --- a/.github/workflows/reusable-test-local-docker-environment-v1.yml +++ b/.github/workflows/reusable-test-local-docker-environment-v1.yml @@ -86,13 +86,13 @@ jobs: echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -105,7 +105,7 @@ jobs: # dependency versions are installed and cached. ## - name: Set up PHP - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 with: php-version: '${{ inputs.php }}' coverage: none @@ -120,9 +120,6 @@ jobs: - name: Install npm dependencies run: npm ci - - name: Build WordPress - run: npm run build:dev - - name: General debug information run: | npm --version diff --git a/.github/workflows/reusable-upgrade-testing.yml b/.github/workflows/reusable-upgrade-testing.yml index f3659fab3ad26..193802ce9f4ad 100644 --- a/.github/workflows/reusable-upgrade-testing.yml +++ b/.github/workflows/reusable-upgrade-testing.yml @@ -75,10 +75,12 @@ jobs: --health-retries="5" -e MYSQL_ROOT_PASSWORD="root" -e MYSQL_DATABASE="test_db" + --entrypoint sh ${{ inputs.db-type }}:${{ inputs.db-version }} + -c "exec docker-entrypoint.sh mysqld${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && ' --default-authentication-plugin=mysql_native_password' || '' }}" steps: - name: Set up PHP ${{ inputs.php }} - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 with: php-version: '${{ inputs.php }}' coverage: none @@ -114,7 +116,7 @@ jobs: - name: Download build artifact for the current branch if: ${{ inputs.new-version == 'develop' }} - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 with: name: wordpress-develop diff --git a/.github/workflows/reusable-workflow-lint.yml b/.github/workflows/reusable-workflow-lint.yml index 3a538a8a99690..8a83830beb8fd 100644 --- a/.github/workflows/reusable-workflow-lint.yml +++ b/.github/workflows/reusable-workflow-lint.yml @@ -21,7 +21,7 @@ jobs: timeout-minutes: 5 steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} diff --git a/.github/workflows/test-and-zip-default-themes.yml b/.github/workflows/test-and-zip-default-themes.yml index 5af965af0907a..c560a7b0dd21f 100644 --- a/.github/workflows/test-and-zip-default-themes.yml +++ b/.github/workflows/test-and-zip-default-themes.yml @@ -93,7 +93,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }} show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} @@ -137,14 +137,14 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }} show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -176,7 +176,7 @@ jobs: # Uploads the diff file as an artifact. - name: Upload diff file as artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: ${{ steps.built-file-check.outputs.uncommitted_changes == 'true' }} with: name: pr-built-file-changes @@ -221,7 +221,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }} show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} @@ -229,7 +229,7 @@ jobs: - name: Set up Node.js for themes needing minification if: matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version-file: '.nvmrc' cache: npm @@ -246,7 +246,7 @@ jobs: working-directory: src/wp-content/themes/${{ matrix.theme }} - name: Upload theme ZIP as an artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: ${{ matrix.theme }} path: | diff --git a/.github/workflows/test-build-processes.yml b/.github/workflows/test-build-processes.yml index 150c36ef0893c..d4ca4b3ecd424 100644 --- a/.github/workflows/test-build-processes.yml +++ b/.github/workflows/test-build-processes.yml @@ -4,6 +4,7 @@ on: push: branches: - trunk + - 'build/restore-deleted-files-preserving-history' - '3.[7-9]' - '[4-9].[0-9]' tags: @@ -32,6 +33,7 @@ on: # Confirm any changes to relevant workflow files. - '.github/workflows/test-build-processes.yml' - '.github/workflows/reusable-test-core-build-process.yml' + - '.github/workflows/reusable-test-gutenberg-build-process.yml' workflow_dispatch: # Cancels all previous workflow runs for pull requests that have not completed. @@ -97,13 +99,54 @@ jobs: os: ${{ matrix.os }} directory: ${{ matrix.directory }} + # Tests the Gutenberg plugin build process within a wordpress-develop checkout. + test-gutenberg-build-process: + name: Gutenberg running from ${{ matrix.directory }} + uses: ./.github/workflows/reusable-test-gutenberg-build-process.yml + permissions: + contents: read + if: ${{ github.repository == 'WordPress/wordpress-develop' }} + strategy: + fail-fast: false + matrix: + os: [ 'ubuntu-24.04' ] + directory: [ 'src', 'build' ] + with: + os: ${{ matrix.os }} + directory: ${{ matrix.directory }} + + # Tests the Gutenberg plugin build process on additional operating systems. + # + # This is separate from the job above in order to use stricter conditions when determining when to test additional + # operating systems. This avoids unintentionally consuming excessive minutes. Windows-based jobs consume minutes at a + # 2x rate, and MacOS-based jobs at a 10x rate. + # See https://docs.github.com/en/billing/concepts/product-billing/github-actions#per-minute-rates. + # + # The `matrix` and `runner` contexts are not available for use within `if` expressions. So there is + # currently no way to determine the OS being used on a given job. + # See https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability. + test-gutenberg-build-process-additional-os: + name: Gutenberg running from ${{ matrix.directory }} + uses: ./.github/workflows/reusable-test-gutenberg-build-process.yml + permissions: + contents: read + if: ${{ github.repository == 'WordPress/wordpress-develop' }} + strategy: + fail-fast: false + matrix: + os: [ 'macos-15', 'windows-2025' ] + directory: [ 'src', 'build' ] + with: + os: ${{ matrix.os }} + directory: ${{ matrix.directory }} + slack-notifications: name: Slack Notifications uses: ./.github/workflows/slack-notifications.yml permissions: actions: read contents: read - needs: [ test-core-build-process, test-core-build-process-additional-os ] + needs: [ test-core-build-process, test-core-build-process-additional-os, test-gutenberg-build-process, test-gutenberg-build-process-additional-os ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} diff --git a/.github/workflows/upgrade-develop-testing.yml b/.github/workflows/upgrade-develop-testing.yml index b33188106c44f..8d00334c38903 100644 --- a/.github/workflows/upgrade-develop-testing.yml +++ b/.github/workflows/upgrade-develop-testing.yml @@ -63,12 +63,20 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-24.04' ] - php: [ '7.4', '8.4' ] + php: [ '7.2', '8.4' ] db-type: [ 'mysql' ] db-version: [ '5.7', '8.4' ] - # WordPress 5.3 is the oldest version that supports PHP 7.4. - wp: [ '5.3', '6.7', '6.8', '6.9-RC1' ] + # WordPress 4.9 is the oldest version that supports PHP 7.2. + wp: [ '4.9', '6.7', '6.8', '6.9-RC1' ] multisite: [ false, true ] + + exclude: + # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '8.4' + # WordPress 4.9 does not support PHP 8.4. + - php: '8.4' + wp: '4.9' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -90,11 +98,17 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-24.04' ] - php: [ '7.4', '8.4' ] + php: [ '7.2', '8.4' ] db-type: [ 'mysql' ] db-version: [ '8.4' ] + # WordPress 4.9 is the oldest version that supports PHP 7.2. wp: [ '6.7', '6.8' ] multisite: [ false, true ] + + exclude: + # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '8.4' with: os: ${{ matrix.os }} php: ${{ matrix.php }} diff --git a/.github/workflows/upgrade-testing.yml b/.github/workflows/upgrade-testing.yml index 0370c8770bd58..f6ba23c87a328 100644 --- a/.github/workflows/upgrade-testing.yml +++ b/.github/workflows/upgrade-testing.yml @@ -68,11 +68,23 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-24.04' ] - php: [ '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] + php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0', '8.4', '9.6' ] + db-version: [ '5.7', '8.0', '8.4', '9.5' ] wp: [ '6.7', '6.8' ] multisite: [ false, true ] + + exclude: + # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' + # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '9.5' + - php: '7.3' + db-version: '9.5' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -93,11 +105,16 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-24.04' ] - php: [ '7.4', '8.0', '8.4' ] + php: [ '7.2', '7.4', '8.0', '8.4' ] db-type: [ 'mysql' ] db-version: [ '5.7', '8.4' ] wp: [ '6.0', '6.3', '6.4', '6.5' ] multisite: [ false, true ] + + exclude: + # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '8.4' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -107,7 +124,7 @@ jobs: new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} multisite: ${{ matrix.multisite }} - # Tests 5.x releases where the WordPress database version changed on the only supported version of PHP 7. + # Tests 5.x releases where the WordPress database version changed on the oldest and newest supported versions of PHP 7. upgrade-tests-wp-5x-php-7x-mysql: name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }} uses: ./.github/workflows/reusable-upgrade-testing.yml @@ -118,11 +135,16 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-24.04' ] - php: [ '7.4' ] + php: [ '7.2', '7.4' ] db-type: [ 'mysql' ] db-version: [ '5.7', '8.4' ] wp: [ '5.0', '5.1', '5.3', '5.4', '5.5', '5.6', '5.9' ] multisite: [ false, true ] + + exclude: + # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '8.4' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -177,11 +199,23 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-24.04' ] - php: [ '7.4' ] + php: [ '7.2', '7.3', '7.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0', '8.4', '9.6' ] + db-version: [ '5.7', '8.0', '8.4', '9.5' ] wp: [ '4.7' ] multisite: [ false, true ] + + exclude: + # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' + # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '9.5' + - php: '7.3' + db-version: '9.5' with: os: ${{ matrix.os }} php: ${{ matrix.php }} diff --git a/.gitignore b/.gitignore index 81058cebf0f6d..a56d6a0b94d72 100644 --- a/.gitignore +++ b/.gitignore @@ -33,15 +33,15 @@ wp-tests-config.php /src/wp-admin/css/colors/*/*.css /src/wp-admin/js /src/wp-includes/assets/* +!/src/wp-includes/assets/script-loader-packages.min.php +!/src/wp-includes/assets/script-modules-packages.min.php /src/wp-includes/js /src/wp-includes/css/dist /src/wp-includes/css/*.min.css /src/wp-includes/css/*-rtl.css -/src/wp-includes/blocks/* -!/src/wp-includes/blocks/index.php -/src/wp-includes/icons -/src/wp-includes/build -/src/wp-includes/theme.json +/src/wp-includes/blocks/**/*.css +/src/wp-includes/blocks/**/*.js +/src/wp-includes/blocks/**/*.js.map /packagehash.txt /.gutenberg-hash /artifacts diff --git a/.jshintrc b/.jshintrc index 2f1dae4e44dc9..d830a103ee7bd 100644 --- a/.jshintrc +++ b/.jshintrc @@ -3,7 +3,7 @@ "curly": true, "eqeqeq": true, "eqnull": true, - "esversion": 11, + "esversion": 10, "expr": true, "immed": true, "noarg": true, diff --git a/.version-support-mysql.json b/.version-support-mysql.json index 6a3385cf13e28..826942c5785b3 100644 --- a/.version-support-mysql.json +++ b/.version-support-mysql.json @@ -1,6 +1,5 @@ { "7-0": [ - "9.6", "9.5", "9.4", "9.3", diff --git a/.version-support-php.json b/.version-support-php.json index 5374052d2383c..6618a1680b9bf 100644 --- a/.version-support-php.json +++ b/.version-support-php.json @@ -1,5 +1,7 @@ { "7-0": [ + "7.2", + "7.3", "7.4", "8.0", "8.1", diff --git a/Gruntfile.js b/Gruntfile.js index 8603635b28fbc..fd6e1f9051591 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,8 +1,9 @@ /* jshint node:true */ -/* eslint-env es6 */ +/* jshint esversion: 6 */ /* globals Set */ var webpackConfig = require( './webpack.config' ); var installChanged = require( 'install-changed' ); +var json2php = require( 'json2php' ); module.exports = function(grunt) { var path = require('path'), @@ -53,6 +54,7 @@ module.exports = function(grunt) { webpackFiles = [ 'wp-includes/assets/*', 'wp-includes/css/dist', + 'wp-includes/blocks/**/*.css', '!wp-includes/assets/script-loader-packages.min.php', '!wp-includes/assets/script-modules-packages.min.php', ], @@ -106,7 +108,6 @@ module.exports = function(grunt) { 'concat', 'copy', 'cssmin', - 'imagemin', 'jshint', 'qunit', 'uglify', @@ -175,17 +176,6 @@ module.exports = function(grunt) { banner: BANNER_TEXT, linebreak: true }, - codemirror: { - options: { - linebreak: false, - banner: require( './tools/webpack/codemirror-banner' ) - }, - files: { - src: [ - WORKING_DIR + 'wp-includes/js/codemirror/codemirror.min.css' - ] - } - }, files: { src: [ WORKING_DIR + 'wp-admin/css/*.min.css', @@ -282,9 +272,11 @@ module.exports = function(grunt) { src: buildFiles.concat( [ '!wp-includes/assets/**', // Assets is extracted into separate copy tasks. '!js/**', // JavaScript is extracted into separate copy tasks. + '!wp-includes/certificates/cacert.pem*', // Exclude raw root certificate files that are combined into ca-bundle.crt. + '!wp-includes/certificates/legacy-1024bit.pem', '!.{svn,git}', // Exclude version control folders. '!wp-includes/version.php', // Exclude version.php. - '!{wp-admin,wp-includes,wp-content/themes/twenty*,wp-content/plugins/akismet}/**/*.map', // The build doesn't need .map files. + '!**/*.map', // The build doesn't need .map files. '!index.php', '!wp-admin/index.php', '!_index.php', '!wp-admin/_index.php' ] ), @@ -320,40 +312,6 @@ module.exports = function(grunt) { } ] }, - 'codemirror': { - options: { - process: function( content, srcpath ) { - if ( srcpath.includes( 'htmlhint.min.js' ) ) { - return content + '\nif ( window.HTMLHint && window.HTMLHint.HTMLHint ) { window.HTMLHint = window.HTMLHint.HTMLHint; }'; - } - return content; - } - }, - files: [ - { - [ WORKING_DIR + 'wp-includes/js/codemirror/csslint.js' ]: [ './node_modules/csslint/dist/csslint.js' ], - [ WORKING_DIR + 'wp-includes/js/codemirror/esprima.js' ]: [ './node_modules/esprima/dist/esprima.js' ], - [ WORKING_DIR + 'wp-includes/js/codemirror/htmlhint.js' ]: [ './node_modules/htmlhint/dist/htmlhint.min.js' ], - [ WORKING_DIR + 'wp-includes/js/codemirror/jsonlint.js' ]: [ './node_modules/jsonlint/web/jsonlint.js' ], - }, - { - expand: true, - cwd: SOURCE_DIR + 'js/_enqueues/lib/codemirror/', - src: [ - 'htmlhint-kses.js', - ], - dest: WORKING_DIR + 'wp-includes/js/codemirror/' - }, - { - expand: true, - cwd: SOURCE_DIR + 'js/_enqueues/deprecated/', - src: [ - 'fakejshint.js', - ], - dest: WORKING_DIR + 'wp-includes/js/codemirror/' - } - ] - }, 'vendor-js': { files: [ { @@ -586,109 +544,8 @@ module.exports = function(grunt) { }, certificates: { src: 'vendor/composer/ca-bundle/res/cacert.pem', - dest: SOURCE_DIR + 'wp-includes/certificates/ca-bundle.crt' - }, - // Gutenberg PHP infrastructure files (routes.php, pages.php, constants.php, pages/, routes/). - 'gutenberg-php': { - options: { - process: function( content ) { - // Fix boot module asset file path for Core's different directory structure. - return content.replace( - /__DIR__\s*\.\s*(['"])\/..\/\..\/modules\/boot\/index\.min\.asset\.php\1/g, - 'ABSPATH . WPINC . \'/js/dist/script-modules/boot/index.min.asset.php\'' - ); - } - }, - files: [ { - expand: true, - cwd: 'gutenberg/build', - src: [ - 'routes.php', - 'pages.php', - 'constants.php', - 'pages/**/*.php', - 'routes/**/*.php', - ], - dest: WORKING_DIR + 'wp-includes/build/', - } ], - }, - 'gutenberg-js': { - files: [ { - expand: true, - cwd: 'gutenberg/build', - src: [ - 'pages/**/*.js', - 'routes/**/*.js', - ], - dest: WORKING_DIR + 'wp-includes/build/', - } ], - }, - 'gutenberg-modules': { - files: [ { - expand: true, - cwd: 'gutenberg/build/modules', - src: [ '**/*', '!**/*.map' ], - dest: WORKING_DIR + 'wp-includes/js/dist/script-modules/', - } ], - }, - 'gutenberg-styles': { - files: [ { - expand: true, - cwd: 'gutenberg/build/styles', - src: [ '**/*', '!**/*.map' ], - dest: WORKING_DIR + 'wp-includes/css/dist/', - } ], - }, - 'gutenberg-theme-json': { - options: { - process: function( content, srcpath ) { - // Replace the local schema URL with the canonical public URL for Core. - if ( path.basename( srcpath ) === 'theme.json' ) { - return content.replace( - '"$schema": "../schemas/json/theme.json"', - '"$schema": "https://schemas.wp.org/trunk/theme.json"' - ); - } - return content; - } - }, - files: [ - { - src: 'gutenberg/lib/theme.json', - dest: WORKING_DIR + 'wp-includes/theme.json', - }, - { - src: 'gutenberg/lib/theme-i18n.json', - dest: WORKING_DIR + 'wp-includes/theme-i18n.json', - }, - ], - }, - 'gutenberg-icons': { - options: { - process: function( content, srcpath ) { - // Remove the 'gutenberg' text domain from _x() calls in manifest.php. - if ( path.basename( srcpath ) === 'manifest.php' ) { - return content.replace( - /_x\(\s*([^,]+),\s*([^,]+),\s*['"]gutenberg['"]\s*\)/g, - '_x( $1, $2 )' - ); - } - return content; - } - }, - files: [ - { - src: 'gutenberg/packages/icons/src/manifest.php', - dest: WORKING_DIR + 'wp-includes/icons/manifest.php', - }, - { - expand: true, - cwd: 'gutenberg/packages/icons/src/library', - src: '*.svg', - dest: WORKING_DIR + 'wp-includes/icons/library/', - }, - ], - }, + dest: SOURCE_DIR + 'wp-includes/certificates/cacert.pem' + } }, sass: { colors: { @@ -706,22 +563,6 @@ module.exports = function(grunt) { options: { compatibility: 'ie11' }, - codemirror: { - files: { - [ WORKING_DIR + 'wp-includes/js/codemirror/codemirror.min.css' ]: [ - 'node_modules/codemirror/lib/codemirror.css', - 'node_modules/codemirror/addon/hint/show-hint.css', - 'node_modules/codemirror/addon/lint/lint.css', - 'node_modules/codemirror/addon/dialog/dialog.css', - 'node_modules/codemirror/addon/display/fullscreen.css', - 'node_modules/codemirror/addon/fold/foldgutter.css', - 'node_modules/codemirror/addon/merge/merge.css', - 'node_modules/codemirror/addon/scroll/simplescrollbars.css', - 'node_modules/codemirror/addon/search/matchesonscrollbar.css', - 'node_modules/codemirror/addon/tern/tern.css' - ] - } - }, core: { expand: true, cwd: WORKING_DIR, @@ -1031,7 +872,7 @@ module.exports = function(grunt) { 'wp-includes/js/tinymce/plugins/wp*/plugin.js', // Exceptions. - '!{wp-admin,wp-includes}/**/*.min.js', + '!**/*.min.js', '!wp-admin/js/custom-header.js', // Why? We should minify this. '!wp-admin/js/farbtastic.js', '!wp-includes/js/wp-emoji-loader.js', // This is a module. See the emoji-loader task below. @@ -1081,8 +922,7 @@ module.exports = function(grunt) { webpack: { prod: webpackConfig( { environment: 'production', buildTarget: WORKING_DIR } ), dev: webpackConfig( { environment: 'development', buildTarget: WORKING_DIR } ), - watch: webpackConfig( { environment: 'development', watch: true } ), - codemirror: require( './tools/webpack/codemirror.config.js' )( { buildTarget: WORKING_DIR } ), + watch: webpackConfig( { environment: 'development', watch: true } ) }, concat: { tinymce: { @@ -1111,6 +951,16 @@ module.exports = function(grunt) { WORKING_DIR + 'wp-includes/js/wp-emoji.min.js' ], dest: WORKING_DIR + 'wp-includes/js/wp-emoji-release.min.js' + }, + certificates: { + options: { + separator: '\n\n' + }, + src: [ + SOURCE_DIR + 'wp-includes/certificates/legacy-1024bit.pem', + SOURCE_DIR + 'wp-includes/certificates/cacert.pem' + ], + dest: SOURCE_DIR + 'wp-includes/certificates/ca-bundle.crt' } }, patch:{ @@ -1423,21 +1273,12 @@ module.exports = function(grunt) { }, { expand: true, - cwd: BUILD_DIR + 'wp-includes/js/dist/', - src: [ '*.js' ], - dest: BUILD_DIR + 'wp-includes/js/dist/', - }, - { - expand: true, - cwd: BUILD_DIR + 'wp-includes/js/dist/vendor/', - src: [ '**/*.js' ], - dest: BUILD_DIR + 'wp-includes/js/dist/vendor/', - }, - { - expand: true, - cwd: BUILD_DIR + 'wp-includes/js/dist/script-modules/', - src: [ '**/*.js' ], - dest: BUILD_DIR + 'wp-includes/js/dist/script-modules/', + flatten: true, + src: [ + BUILD_DIR + 'wp-includes/js/dist/block-editor.js', + BUILD_DIR + 'wp-includes/js/dist/commands.js', + ], + dest: BUILD_DIR + 'wp-includes/js/dist/' } ] } @@ -1451,9 +1292,7 @@ module.exports = function(grunt) { SOURCE_DIR + '**', '!' + SOURCE_DIR + 'js/**/*.js', // Ignore version control directories. - '!' + SOURCE_DIR + '**/.{svn,git}/**', - // Ignore third-party plugins. - '!' + SOURCE_DIR + 'wp-content/plugins/**' + '!' + SOURCE_DIR + '**/.{svn,git}/**' ], tasks: ['clean:dynamic', 'copy:dynamic'], options: { @@ -1575,53 +1414,6 @@ module.exports = function(grunt) { grunt.task.run( 'wp-packages:refresh-deps' ); } ); - // Gutenberg integration tasks. - grunt.registerTask( 'gutenberg:verify', 'Verifies the installed Gutenberg version matches the expected SHA.', function() { - const done = this.async(); - grunt.util.spawn( { - cmd: 'node', - args: [ 'tools/gutenberg/utils.js' ], - opts: { stdio: 'inherit' } - }, function( error ) { - done( ! error ); - } ); - } ); - - grunt.registerTask( 'gutenberg:download', 'Downloads the built Gutenberg artifact.', function() { - const done = this.async(); - grunt.util.spawn( { - cmd: 'node', - args: [ 'tools/gutenberg/download.js' ], - opts: { stdio: 'inherit' } - }, function( error ) { - done( ! error ); - } ); - } ); - - grunt.registerTask( 'gutenberg:copy', 'Copies Gutenberg JS packages and block assets to WordPress Core.', function() { - const done = this.async(); - const buildDir = grunt.option( 'dev' ) ? 'src' : 'build'; - grunt.util.spawn( { - cmd: 'node', - args: [ 'tools/gutenberg/copy.js', `--build-dir=${ buildDir }` ], - opts: { stdio: 'inherit' } - }, function( error ) { - done( ! error ); - } ); - } ); - - grunt.registerTask( 'copy-vendor-scripts', 'Copies vendor scripts from node_modules to wp-includes/js/dist/vendor/.', function() { - const done = this.async(); - const buildDir = grunt.option( 'dev' ) ? 'src' : 'build'; - grunt.util.spawn( { - cmd: 'node', - args: [ 'tools/vendors/copy-vendors.js', `--build-dir=${ buildDir }` ], - opts: { stdio: 'inherit' } - }, function( error ) { - done( ! error ); - } ); - } ); - grunt.renameTask( 'watch', '_watch' ); grunt.registerTask( 'watch', function() { @@ -1646,7 +1438,6 @@ module.exports = function(grunt) { grunt.registerTask( 'precommit:js', [ 'webpack:prod', 'jshint:corejs', - 'typecheck:js', 'uglify:imgareaselect', 'uglify:jqueryform', 'uglify:moment', @@ -1658,7 +1449,6 @@ module.exports = function(grunt) { ] ); grunt.registerTask( 'precommit:php', [ - 'phpstan', 'phpunit' ] ); @@ -1779,6 +1569,23 @@ module.exports = function(grunt) { } } ); + grunt.registerTask( 'copy:block-json', 'Copies block.json file contents to block-json.php.', function() { + var blocks = {}; + grunt.file.recurse( SOURCE_DIR + 'wp-includes/blocks', function( abspath, rootdir, subdir, filename ) { + if ( /^block\.json$/.test( filename ) ) { + blocks[ subdir ] = grunt.file.readJSON( abspath ); + } + } ); + grunt.file.write( + SOURCE_DIR + 'wp-includes/blocks/blocks-json.php', + '=7.4" + "php": ">=7.2.24" }, "suggest": { "ext-dom": "*" }, "require-dev": { - "composer/ca-bundle": "1.5.10", + "composer/ca-bundle": "1.5.9", "squizlabs/php_codesniffer": "3.13.5", "wp-coding-standards/wpcs": "~3.3.0", "phpcompatibility/phpcompatibility-wp": "~2.1.3", - "phpstan/phpstan": "2.1.39", "yoast/phpunit-polyfills": "^1.1.0" }, "config": { @@ -33,7 +32,6 @@ "lock": false }, "scripts": { - "phpstan": "@php ./vendor/bin/phpstan analyse --memory-limit=2G", "compat": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs --standard=phpcompat.xml.dist --report=summary,source", "format": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcbf --report=summary,source", "lint": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs --report=summary,source", diff --git a/docker-compose.yml b/docker-compose.yml index cc2ed8d94975e..274e106ec8e5c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,6 +79,9 @@ services: - ./tools/local-env/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql - mysql:/var/lib/mysql + # For compatibility with PHP versions that don't support the caching_sha2_password auth plugin used in MySQL 8.0. + command: ${LOCAL_DB_AUTH_OPTION-} + healthcheck: test: [ 'CMD-SHELL', diff --git a/package-lock.json b/package-lock.json index b608b8b07314c..478ca76eda514 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,28 +7,93 @@ "": { "name": "WordPress", "version": "7.0.0", - "hasInstallScript": true, "license": "GPL-2.0-or-later", "dependencies": { - "backbone": "1.6.1", + "@wordpress/a11y": "4.33.1", + "@wordpress/admin-ui": "1.1.4", + "@wordpress/annotations": "3.33.2", + "@wordpress/api-fetch": "7.33.1", + "@wordpress/autop": "4.33.1", + "@wordpress/base-styles": "6.9.1", + "@wordpress/blob": "4.33.1", + "@wordpress/block-directory": "5.33.9", + "@wordpress/block-editor": "15.6.7", + "@wordpress/block-library": "9.33.8", + "@wordpress/block-serialization-default-parser": "5.33.1", + "@wordpress/blocks": "15.6.2", + "@wordpress/commands": "1.33.4", + "@wordpress/components": "30.6.4", + "@wordpress/compose": "7.33.1", + "@wordpress/core-commands": "1.33.7", + "@wordpress/core-data": "7.33.7", + "@wordpress/customize-widgets": "5.33.8", + "@wordpress/data": "10.33.1", + "@wordpress/data-controls": "4.33.1", + "@wordpress/dataviews": "10.1.6", + "@wordpress/date": "5.33.1", + "@wordpress/deprecated": "4.33.1", + "@wordpress/dom": "4.33.1", + "@wordpress/dom-ready": "4.33.1", + "@wordpress/edit-post": "8.33.9", + "@wordpress/edit-site": "6.33.9", + "@wordpress/edit-widgets": "6.33.8", + "@wordpress/editor": "14.33.9", + "@wordpress/element": "6.33.1", + "@wordpress/escape-html": "3.33.1", + "@wordpress/fields": "0.25.9", + "@wordpress/format-library": "5.33.7", + "@wordpress/hooks": "4.33.1", + "@wordpress/html-entities": "4.33.1", + "@wordpress/i18n": "6.6.1", + "@wordpress/icons": "11.0.1", + "@wordpress/interactivity": "6.33.1", + "@wordpress/interactivity-router": "2.33.1", + "@wordpress/interface": "9.18.4", + "@wordpress/is-shallow-equal": "5.33.1", + "@wordpress/keyboard-shortcuts": "5.33.1", + "@wordpress/keycodes": "4.33.1", + "@wordpress/latex-to-mathml": "1.1.2", + "@wordpress/list-reusable-blocks": "5.33.4", + "@wordpress/media-utils": "5.33.1", + "@wordpress/notices": "5.33.1", + "@wordpress/nux": "9.33.4", + "@wordpress/patterns": "2.33.7", + "@wordpress/plugins": "7.33.4", + "@wordpress/preferences": "4.33.4", + "@wordpress/preferences-persistence": "2.33.1", + "@wordpress/primitives": "4.33.1", + "@wordpress/priority-queue": "3.33.1", + "@wordpress/private-apis": "1.33.1", + "@wordpress/redux-routine": "5.33.1", + "@wordpress/reusable-blocks": "5.33.7", + "@wordpress/rich-text": "7.33.2", + "@wordpress/router": "1.33.1", + "@wordpress/server-side-render": "6.9.4", + "@wordpress/shortcode": "4.33.1", + "@wordpress/style-engine": "2.33.1", + "@wordpress/sync": "1.33.1", + "@wordpress/token-list": "3.33.1", + "@wordpress/undo-manager": "1.33.1", + "@wordpress/upload-media": "0.18.4", + "@wordpress/url": "4.33.1", + "@wordpress/viewport": "6.33.1", + "@wordpress/views": "1.0.7", + "@wordpress/warning": "3.33.1", + "@wordpress/widgets": "4.33.7", + "@wordpress/wordcount": "4.33.1", + "backbone": "1.6.0", "clipboard": "2.0.11", - "codemirror": "5.65.20", "core-js-url-browser": "3.6.4", - "csslint": "1.0.5", "element-closest": "3.0.2", - "espree": "9.6.1", - "esprima": "4.0.1", "formdata-polyfill": "4.0.10", "hoverintent": "2.2.1", - "htmlhint": "1.8.0", "imagesloaded": "5.0.0", "jquery": "3.7.1", "jquery-color": "3.0.0", "jquery-form": "4.3.0", "jquery-hoverintent": "1.10.2", "json2php": "0.0.12", - "jsonlint": "1.6.3", - "lodash": "4.17.23", + "lodash": "4.17.21", "masonry-layout": "4.2.2", "moment": "2.30.1", "objectFitPolyfill": "2.3.5", @@ -45,17 +110,15 @@ "@lodder/grunt-postcss": "^3.1.1", "@playwright/test": "1.56.1", "@pmmmwh/react-refresh-webpack-plugin": "0.6.1", - "@types/codemirror": "5.60.17", - "@types/espree": "10.1.0", - "@types/htmlhint": "1.1.5", - "@types/jquery": "3.5.33", - "@types/underscore": "1.11.15", + "@wordpress/babel-preset-default": "8.33.1", + "@wordpress/dependency-extraction-webpack-plugin": "6.33.1", "@wordpress/e2e-test-utils-playwright": "1.33.2", "@wordpress/prettier-config": "4.33.1", "@wordpress/scripts": "30.26.2", "autoprefixer": "10.4.22", "chalk": "5.6.2", "check-node-version": "4.2.1", + "copy-webpack-plugin": "13.0.1", "cssnano": "7.1.2", "dotenv": "17.2.3", "dotenv-expand": "12.0.3", @@ -88,10 +151,11 @@ "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.14", - "typescript": "5.9.3", + "uglify-js": "^3.19.3", "uuid": "13.0.0", "wait-on": "9.0.3", - "webpack": "5.98.0" + "webpack": "5.98.0", + "webpack-livereload-plugin": "3.0.2" }, "engines": { "node": ">=20.10.0", @@ -120,11 +184,45 @@ "node": ">=6.0.0" } }, + "node_modules/@ariakit/core": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.4.14.tgz", + "integrity": "sha512-hpzZvyYzGhP09S9jW1XGsU/FD5K3BKsH1eG/QJ8rfgEeUdPS7BvHPt5lHbOeJ2cMrRzBEvsEzLi1ivfDifHsVA==" + }, + "node_modules/@ariakit/react": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.15.tgz", + "integrity": "sha512-0V2LkNPFrGRT+SEIiObx/LQjR6v3rR+mKEDUu/3tq7jfCZ+7+6Q6EMR1rFaK+XMkaRY1RWUcj/rRDWAUWnsDww==", + "dependencies": { + "@ariakit/react-core": "0.4.15" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ariakit" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@ariakit/react-core": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.15.tgz", + "integrity": "sha512-Up8+U97nAPJdyUh9E8BCEhJYTA+eVztWpHoo1R9zZfHd4cnBWAg5RHxEmMH+MamlvuRxBQA71hFKY/735fDg+A==", + "dependencies": { + "@ariakit/core": "0.4.14", + "@floating-ui/dom": "^1.0.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -223,7 +321,6 @@ "version": "7.26.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", - "dev": true, "dependencies": { "@babel/parser": "^7.26.5", "@babel/types": "^7.26.5", @@ -239,7 +336,6 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -390,7 +486,6 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -488,7 +583,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -498,7 +592,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -545,7 +638,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.28.5" @@ -1987,7 +2079,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1997,7 +2088,6 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -2012,7 +2102,6 @@ "version": "7.26.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.5", @@ -2030,7 +2119,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2202,6 +2290,12 @@ "postcss-selector-parser": "^7.0.0" } }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "license": "MIT" + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2222,6 +2316,163 @@ "url": "https://github.com/sponsors/JounQin" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", + "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "dependencies": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "node_modules/@emotion/css": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.10.6.tgz", + "integrity": "sha512-88Sr+3heKAKpj9PCqq5A1hAmAkoSIvwEq1O2TwDij7fUtsJpdkV4jMTISSTouFeRvsGvXIpuSuDQ4C1YdfNGXw==", + "dependencies": { + "@emotion/babel-plugin": "^11.10.6", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", + "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "node_modules/@emotion/styled": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", + "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, "node_modules/@es-joy/jsdoccomment": { "version": "0.41.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", @@ -2357,6 +2608,46 @@ "resolved": "https://registry.npmjs.org/@financial-times/useragent_parser/-/useragent_parser-1.6.3.tgz", "integrity": "sha512-TlQiXt/vS5ZwY0V3salvlyQzIzMGZEyw9inmJA25A8heL2kBVENbToiEc64R6ETNf5YHa2lwnc2I7iNHP9SqeQ==" }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom/node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==", + "license": "MIT" + }, "node_modules/@formatjs/ecma402-abstract": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.2.tgz", @@ -3433,7 +3724,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -3442,7 +3732,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -3477,14 +3766,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -4092,7 +4379,6 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -4104,15 +4390,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -4128,13 +4412,13 @@ } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { - "node": ">= 12" + "node": ">= 8" } }, "node_modules/@polka/url": { @@ -4143,6 +4427,32 @@ "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, + "node_modules/@preact/signals": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-1.3.2.tgz", + "integrity": "sha512-naxcJgUJ6BTOROJ7C3QML7KvwKwCXQJYTc5L/b0eEsdYgPB6SxwoQ1vDGcS0Q7GVjAenVq/tXrybVdFShHYZWg==", + "license": "MIT", + "dependencies": { + "@preact/signals-core": "^1.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact": "10.x" + } + }, + "node_modules/@preact/signals-core": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.12.1.tgz", + "integrity": "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/@puppeteer/browsers": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", @@ -4329,6 +4639,396 @@ "node": ">=12" } }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@react-spring/animated": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.1.tgz", + "integrity": "sha512-EX5KAD9y7sD43TnLeTNG1MgUVpuRO1YaSJRPawHNRgUWYfILge3s85anny4S4eTJGpdp5OoFV2kx9fsfeo0qsw==", + "dependencies": { + "@react-spring/shared": "~9.7.1", + "@react-spring/types": "~9.7.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.1.tgz", + "integrity": "sha512-8K9/FaRn5VvMa24mbwYxwkALnAAyMRdmQXrARZLcBW2vxLJ6uw9Cy3d06Z8M12kEqF2bDlccaCSDsn2bSz+Q4A==", + "dependencies": { + "@react-spring/animated": "~9.7.1", + "@react-spring/rafz": "~9.7.1", + "@react-spring/shared": "~9.7.1", + "@react-spring/types": "~9.7.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.1.tgz", + "integrity": "sha512-JSsrRfbEJvuE3w/uvU3mCTuWwpQcBXkwoW14lBgzK9XJhuxmscGo59AgJUpFkGOiGAVXFBGB+nEXtSinFsopgw==" + }, + "node_modules/@react-spring/shared": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.1.tgz", + "integrity": "sha512-R2kZ+VOO6IBeIAYTIA3C1XZ0ZVg/dDP5FKtWaY8k5akMer9iqf5H9BU0jyt3Qtxn0qQY7whQdf6MTcWtKeaawg==", + "dependencies": { + "@react-spring/rafz": "~9.7.1", + "@react-spring/types": "~9.7.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/types": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.1.tgz", + "integrity": "sha512-yBcyfKUeZv9wf/ZFrQszvhSPuDx6Py6yMJzpMnS+zxcZmhXPeOCKZSHwqrUz1WxvuRckUhlgb7eNI/x5e1e8CA==" + }, + "node_modules/@react-spring/web": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.1.tgz", + "integrity": "sha512-6uUE5MyKqdrJnIJqlDN/AXf3i8PjOQzUuT26nkpsYxUGOk7c+vZVPcfrExLSoKzTb9kF0i66DcqzO5fXz/Z1AA==", + "dependencies": { + "@react-spring/animated": "~9.7.1", + "@react-spring/core": "~9.7.1", + "@react-spring/shared": "~9.7.1", + "@react-spring/types": "~9.7.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -5054,6 +5754,39 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@tannin/compile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz", + "integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==", + "dependencies": { + "@tannin/evaluate": "^1.2.0", + "@tannin/postfix": "^1.1.0" + } + }, + "node_modules/@tannin/evaluate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz", + "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==" + }, + "node_modules/@tannin/plural-forms": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz", + "integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==", + "dependencies": { + "@tannin/compile": "^1.1.0" + } + }, + "node_modules/@tannin/postfix": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz", + "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==" + }, + "node_modules/@tannin/sprintf": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@tannin/sprintf/-/sprintf-1.3.3.tgz", + "integrity": "sha512-RwARl+hFwhzy0tg9atWcchLFvoQiOh4rrP7uG2N5E4W80BPCUX0ElcUR9St43fxB9EfjsW2df9Qp+UsTbvQDjA==", + "license": "MIT" + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -5138,16 +5871,6 @@ "@types/node": "*" } }, - "node_modules/@types/codemirror": { - "version": "5.60.17", - "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.17.tgz", - "integrity": "sha512-AZq2FIsUHVMlp7VSe2hTfl5w4pcUkoFkM3zVsRKsn1ca8CXRDYvnin04+HP2REkwsxemuHqvDofdlhUWNpbwfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/tern": "*" - } - }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -5189,30 +5912,6 @@ "@types/estree": "*" } }, - "node_modules/@types/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@types/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-uPQZdoUWWMuO6WS8/dwX1stZH/vOBa/wAniGnYEFI0IuU9RmLx6PLmo+VGfNOlbRc5I7hBsQc8H0zcdVI37kxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.12.0", - "eslint-visitor-keys": "^4.0.0" - } - }, - "node_modules/@types/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -5253,13 +5952,17 @@ "@types/node": "*" } }, - "node_modules/@types/htmlhint": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/htmlhint/-/htmlhint-1.1.5.tgz", - "integrity": "sha512-BnMb05tZKcK0M/GK28H1jmCYRDqhmMUbxakbmmrBJ2vNpKPHLmAEWkq4UXdPN3cq3MDySZizhcbmYEg9i9G/QA==", - "dev": true, + "node_modules/@types/gradient-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/gradient-parser/-/gradient-parser-1.1.0.tgz", + "integrity": "sha512-SaEcbgQscHtGJ1QL+ajgDTmmqU2f6T+00jZRcFlVHUW2Asivc84LNUev/UQFyu117AsdyrtI+qpwLvgjJXJxmw==", "license": "MIT" }, + "node_modules/@types/highlight-words-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/highlight-words-core/-/highlight-words-core-1.2.1.tgz", + "integrity": "sha512-9VZUA5omXBfn+hDxFjUDu1FOJTBM3LmvqfDey+Z6Aa8B8/JmF5SMj6FBrjfgJ/Q3YXOZd3qyTDfJyMZSs/wCUA==" + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -5299,16 +6002,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/jquery": { - "version": "3.5.33", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.33.tgz", - "integrity": "sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sizzle": "*" - } - }, "node_modules/@types/jsdom": { "version": "20.0.1", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", @@ -5368,11 +6061,15 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "node_modules/@types/mousetrap": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.11.tgz", + "integrity": "sha512-F0oAily9Q9QQpv9JKxKn0zMKfOo36KHCW7myYsmUyf2t0g+sBTbG3UleTPoguHdE1z3GLFr3p7/wiOio52QFjQ==" + }, "node_modules/@types/node": { "version": "14.14.20", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", - "dev": true + "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==" }, "node_modules/@types/node-forge": { "version": "1.3.11", @@ -5392,8 +6089,12 @@ "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/q": { "version": "1.5.4", @@ -5414,18 +6115,29 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, + "node_modules/@types/react": { + "version": "18.3.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", + "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "license": "MIT" - }, "node_modules/@types/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", @@ -5463,12 +6175,14 @@ "@types/node": "*" } }, - "node_modules/@types/sizzle": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", - "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==", - "dev": true, - "license": "MIT" + "node_modules/@types/simple-peer": { + "version": "9.11.9", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.9.tgz", + "integrity": "sha512-6Gdl7TSS5oh9nuwKD4Pl8cSmaxWycYeZz9HLnJBNvIwWjZuGVsmHe9RwW3+9RxfhC1aIR9Z83DvaJoMw6rhkbg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/sockjs": { "version": "0.3.36", @@ -5485,29 +6199,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "node_modules/@types/tern": { - "version": "0.23.9", - "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", - "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/@types/tough-cookie": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", "dev": true }, - "node_modules/@types/underscore": { - "version": "1.11.15", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.15.tgz", - "integrity": "sha512-HP38xE+GuWGlbSRq9WrZkousaQ7dragtZCruBVMi0oX1migFZavZ3OROKHSkNp/9ouq82zrWtZpg18jFnVN96g==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -5779,6 +6476,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@use-gesture/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", + "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==" + }, + "node_modules/@use-gesture/react": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.1.tgz", + "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", + "dependencies": { + "@use-gesture/core": "10.3.1" + }, + "peerDependencies": { + "react": ">= 16.8.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -5984,6 +6697,93 @@ } } }, + "node_modules/@wordpress/a11y": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-4.33.1.tgz", + "integrity": "sha512-W/MeUMZPSsgYnF6/0cXTYq1JBnCd22dBsWtYJw+Ujgx7s4h52LMnx/dIGE1Xi3XzT4nPUD1DvSw0U3lIMWW5Fg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/dom-ready": "^4.33.1", + "@wordpress/i18n": "^6.6.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/admin-ui": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wordpress/admin-ui/-/admin-ui-1.1.4.tgz", + "integrity": "sha512-AoAuc+YeFKO9bdHKgPqem3Z1viggsG/txOogFunu/RudDGmmhKbqSlUzvnAQIAP6imUI1xeWnaWSgbGqOeIvsg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/base-styles": "^6.9.1", + "@wordpress/components": "^30.6.4", + "@wordpress/element": "^6.33.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/annotations": { + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/@wordpress/annotations/-/annotations-3.33.2.tgz", + "integrity": "sha512-lVpLQdct1svaSk3ptCO74Qf9hS9fKo5rIQo+k9PKZAIzC5GafVoimRFKqShxohNQE27P+2evJMk2+rLk6EeBAQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/data": "^10.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/rich-text": "^7.33.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/annotations/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@wordpress/api-fetch": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.33.1.tgz", + "integrity": "sha512-kxk7Og2CZLOMUZtDfOXSGapem4ToP15JB24PfixJLS0dKfrlUBci4ShjJ3z3jdIx01gf1gfP4NFjqzicJKb+Rg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/i18n": "^6.6.1", + "@wordpress/url": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/autop": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-4.33.1.tgz", + "integrity": "sha512-X3DMHzAIB5lHC3vXrRiH4H+11uTrLU8PnsM5ykizk59/VgbNNRjSurvxHvM2/GM7geOxngDCDlNAz3foisnmHw==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/babel-preset-default": { "version": "8.33.1", "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.33.1.tgz", @@ -6012,13 +6812,263 @@ "version": "6.9.1", "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.9.1.tgz", "integrity": "sha512-UCtTANAdym5jpTEZS17WHrKLu7R52gQRgKuwsRm5uZWUb4g4Vq8NX52CBIesF1viFyKfM++HpmteFkrL7p0SMg==", - "dev": true, "license": "GPL-2.0-or-later", "engines": { "node": ">=18.12.0", "npm": ">=8.19.2" } }, + "node_modules/@wordpress/blob": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-4.33.1.tgz", + "integrity": "sha512-3a0gY6+f1UcF82mbviSFzRDzQ8dEACwISkXNrwvV7Y70ke5F1UHWWkux4S15f7OcaeTs/L4SWTqZ0y5ufzHioA==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/block-directory": { + "version": "5.33.9", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.33.9.tgz", + "integrity": "sha512-ZVmOo6O4a6pSDyUmIF99g8zsr+bKLK7/e3nd0WO7OF+xO7+L0HoSRiTVA7jtiyDFygxafSswNT79YLrRMtLG0A==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/editor": "^14.33.9", + "@wordpress/element": "^6.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/plugins": "^7.33.4", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/url": "^4.33.1", + "change-case": "^4.1.2", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/block-editor": { + "version": "15.6.7", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-15.6.7.tgz", + "integrity": "sha512-r/eKqxC0meRjvourvPq/fiYKa3CaDZMIb/26HjZJKAyb/FvU9yimeV8i9LAN0jXNND2AjACrV+2rMOhV5tHPcA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@emotion/react": "^11.7.1", + "@emotion/styled": "^11.6.0", + "@react-spring/web": "^9.4.5", + "@wordpress/a11y": "^4.33.1", + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/block-serialization-default-parser": "^5.33.1", + "@wordpress/blocks": "^15.6.2", + "@wordpress/commands": "^1.33.4", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/date": "^5.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/escape-html": "^3.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/interactivity": "^6.33.1", + "@wordpress/is-shallow-equal": "^5.33.1", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/preferences": "^4.33.4", + "@wordpress/priority-queue": "^3.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/rich-text": "^7.33.2", + "@wordpress/style-engine": "^2.33.1", + "@wordpress/token-list": "^3.33.1", + "@wordpress/upload-media": "^0.18.4", + "@wordpress/url": "^4.33.1", + "@wordpress/warning": "^3.33.1", + "@wordpress/wordcount": "^4.33.1", + "change-case": "^4.1.2", + "clsx": "^2.1.1", + "colord": "^2.7.0", + "deepmerge": "^4.3.0", + "diff": "^4.0.2", + "fast-deep-equal": "^3.1.3", + "memize": "^2.1.0", + "parsel-js": "^1.1.2", + "postcss": "^8.4.21", + "postcss-prefix-selector": "^1.16.0", + "postcss-urlrebase": "^1.4.0", + "react-autosize-textarea": "^7.1.0", + "react-easy-crop": "^5.0.6", + "remove-accents": "^0.5.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/block-library": { + "version": "9.33.8", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.33.8.tgz", + "integrity": "sha512-7rGpAKbiKsG72xk7vckb8uxJfHjbOnb3VjEEf9Ot9Iw72A2P/b6MsSQO7j93LEC55PNhTTKsJ+59c6VK7OXoSg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/autop": "^4.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/date": "^5.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/escape-html": "^3.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/interactivity": "^6.33.1", + "@wordpress/interactivity-router": "^2.33.1", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/latex-to-mathml": "^1.1.2", + "@wordpress/notices": "^5.33.1", + "@wordpress/patterns": "^2.33.7", + "@wordpress/primitives": "^4.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/reusable-blocks": "^5.33.7", + "@wordpress/rich-text": "^7.33.2", + "@wordpress/server-side-render": "^6.9.4", + "@wordpress/url": "^4.33.1", + "@wordpress/viewport": "^6.33.1", + "@wordpress/wordcount": "^4.33.1", + "change-case": "^4.1.2", + "clsx": "^2.1.1", + "colord": "^2.7.0", + "escape-html": "^1.0.3", + "fast-average-color": "^9.1.1", + "fast-deep-equal": "^3.1.3", + "memize": "^2.1.0", + "remove-accents": "^0.5.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/block-library/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@wordpress/block-serialization-default-parser": { + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.33.1.tgz", + "integrity": "sha512-qzkF9t6JAklS38WHrHSN6N/cbJe8FRnIsjDCLYrfH3dSrEcxrbctJa7mY9urqqCKuUVjWdOszPU/1mkZR0jh5w==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/blocks": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-15.6.2.tgz", + "integrity": "sha512-A8b7dBiarUjr8CEoVpbqyDnsmlhFRQgQhsySdIr3j9aImVzpVFGn/htoO+0Axj37zK9LNkNEeod4w7/COtrUCQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/autop": "^4.33.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/block-serialization-default-parser": "^5.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/is-shallow-equal": "^5.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/rich-text": "^7.33.2", + "@wordpress/shortcode": "^4.33.1", + "@wordpress/warning": "^3.33.1", + "change-case": "^4.1.2", + "colord": "^2.7.0", + "fast-deep-equal": "^3.1.3", + "hpq": "^1.3.0", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0", + "react-is": "^18.3.0", + "remove-accents": "^0.5.0", + "showdown": "^1.9.1", + "simple-html-tokenizer": "^0.5.7", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/blocks/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/browserslist-config": { "version": "6.33.1", "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.33.1.tgz", @@ -6030,6 +7080,360 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/commands": { + "version": "1.33.4", + "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.33.4.tgz", + "integrity": "sha512-RunvR3cv+vvAm9g04ikHcb36ZX25dpfQgUSJMVNwaEfNPcQV5BtWjR+7RhRva9hwTlDeOzoL6WmPXb0PtKVPuA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/base-styles": "^6.9.1", + "@wordpress/components": "^30.6.4", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/private-apis": "^1.33.1", + "clsx": "^2.1.1", + "cmdk": "^1.0.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/components": { + "version": "30.6.4", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-30.6.4.tgz", + "integrity": "sha512-D/NYNnoXx9BdH8w9E65BaTRh5T/mgeJjpkxQ5PsFEkU/QIVh0jfsS921U3jMA2S0piwULe2hCzXH8SehawGu7Q==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ariakit/react": "^0.4.15", + "@emotion/cache": "^11.7.1", + "@emotion/css": "^11.7.1", + "@emotion/react": "^11.7.1", + "@emotion/serialize": "^1.0.2", + "@emotion/styled": "^11.6.0", + "@emotion/utils": "^1.0.0", + "@floating-ui/react-dom": "2.0.8", + "@types/gradient-parser": "1.1.0", + "@types/highlight-words-core": "1.2.1", + "@use-gesture/react": "^10.3.1", + "@wordpress/a11y": "^4.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/compose": "^7.33.1", + "@wordpress/date": "^5.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/escape-html": "^3.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/is-shallow-equal": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/primitives": "^4.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/rich-text": "^7.33.2", + "@wordpress/warning": "^3.33.1", + "change-case": "^4.1.2", + "clsx": "^2.1.1", + "colord": "^2.7.0", + "date-fns": "^3.6.0", + "deepmerge": "^4.3.0", + "fast-deep-equal": "^3.1.3", + "framer-motion": "^11.15.0", + "gradient-parser": "1.1.1", + "highlight-words-core": "^1.2.2", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0", + "path-to-regexp": "^6.2.1", + "re-resizable": "^6.4.0", + "react-colorful": "^5.3.1", + "react-day-picker": "^9.7.0", + "remove-accents": "^0.5.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/components/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@wordpress/compose": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-7.33.1.tgz", + "integrity": "sha512-1satS+7EKlzZOCR++uP8mAy3BJPKX2eeTZHVW3669n0xM1xdmzl9JXyEbtEqaFVYhI3dHTq5kLwrm+aSpn0zag==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@types/mousetrap": "^1.6.8", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/is-shallow-equal": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/priority-queue": "^3.33.1", + "@wordpress/undo-manager": "^1.33.1", + "change-case": "^4.1.2", + "clipboard": "^2.0.11", + "mousetrap": "^1.6.5", + "use-memo-one": "^1.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/core-commands": { + "version": "1.33.7", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.33.7.tgz", + "integrity": "sha512-hjAu6MP6WiTg+Ai/40hswT3qLKZMXc34z3tWZ5iagAKHH5vVqfbGhNJauNyXK/Tftfq1yCFBDZGZ5Tq2bP9s4A==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/block-editor": "^15.6.7", + "@wordpress/commands": "^1.33.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/router": "^1.33.1", + "@wordpress/url": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/core-data": { + "version": "7.33.7", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.33.7.tgz", + "integrity": "sha512-i7r1hMKPs2Z/inK8SUQ44uIwpqSVNlXPliq8Ov4p3DN44xBz0TyN7hKu4mKe61PFrQxv0rwkqXBVRj04I4JieA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/is-shallow-equal": "^5.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/rich-text": "^7.33.2", + "@wordpress/sync": "^1.33.1", + "@wordpress/undo-manager": "^1.33.1", + "@wordpress/url": "^4.33.1", + "@wordpress/warning": "^3.33.1", + "change-case": "^4.1.2", + "equivalent-key-map": "^0.2.2", + "fast-deep-equal": "^3.1.3", + "memize": "^2.1.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/core-data/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@wordpress/customize-widgets": { + "version": "5.33.8", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.33.8.tgz", + "integrity": "sha512-Nf5oL/3wDzU8FicSq2/h19MPt7aLvFGsZ9j3MXpn9zbiUSYBG7zTrch1d0bUm2RGT7Y65XRbiFPUtjTeLl96+Q==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/base-styles": "^6.9.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/block-library": "^9.33.8", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/interface": "^9.18.4", + "@wordpress/is-shallow-equal": "^5.33.1", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/media-utils": "^5.33.1", + "@wordpress/preferences": "^4.33.4", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/widgets": "^4.33.7", + "clsx": "^2.1.1", + "fast-deep-equal": "^3.1.3" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/data": { + "version": "10.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-10.33.1.tgz", + "integrity": "sha512-Y+GlNYFds2ICgkAfwT3UsLCXlagibtUFADBf/UXmTgEvc07/O/lOBHeIW72BiRkb/O4oCqf2ZeXgGkNgJLlyiQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/compose": "^7.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/is-shallow-equal": "^5.33.1", + "@wordpress/priority-queue": "^3.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/redux-routine": "^5.33.1", + "deepmerge": "^4.3.0", + "equivalent-key-map": "^0.2.2", + "is-plain-object": "^5.0.0", + "is-promise": "^4.0.0", + "redux": "^5.0.1", + "rememo": "^4.0.2", + "use-memo-one": "^1.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/data-controls": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/data-controls/-/data-controls-4.33.1.tgz", + "integrity": "sha512-+gD47q6WuZ2MYMxwUBwBTYACMayrZoyG6W6OR1Q2ggOfkmoQb4OlxEWJPdCIC8GxJJwVh8ej9HjzzI3S/tDsJg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/dataviews": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-10.1.6.tgz", + "integrity": "sha512-hDACJEzCSSJxpxvxEXHd7Gh3BzfUMkaB98QVqzZK6rQ+aXcRYCj3J1LruT0ku+FCB2MAcrTjLdmc7Sw/jqtajw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ariakit/react": "^0.4.15", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/date": "^5.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/primitives": "^4.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/url": "^4.33.1", + "@wordpress/warning": "^3.33.1", + "clsx": "^2.1.1", + "colord": "^2.7.0", + "date-fns": "^4.1.0", + "deepmerge": "4.3.1", + "fast-deep-equal": "^3.1.3", + "remove-accents": "^0.5.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/dataviews/node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/@wordpress/date": { + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-5.33.1.tgz", + "integrity": "sha512-8M25DKrC39v3IgjWScy722NiNYdlodjUawjLJBjdtaO73ZEtPXrWVocT+HKFqDVAoTGqF/J43IFxxW020+udXA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/deprecated": "^4.33.1", + "moment": "^2.29.4", + "moment-timezone": "^0.5.40" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { "version": "6.33.1", "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.33.1.tgz", @@ -6054,6 +7458,42 @@ "dev": true, "license": "BSD" }, + "node_modules/@wordpress/deprecated": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-4.33.1.tgz", + "integrity": "sha512-dDOGfYtebSj0iSmOAJD7HiqXacx6lLJZkhRKPeffXG8e990EBVa2qgcRt2jcQHaSO/h9gmOsGmC7trEG66YzMA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/hooks": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/dom": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.33.1.tgz", + "integrity": "sha512-1ow6ikYbE+p2xMCykZecGqRmZBqz0Z90KQ06EbKFr9tJ9tSgp05Jm6J7Op3VclJxJ+6as5js+28ppps3eVzGcg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/deprecated": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/dom-ready": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-4.33.1.tgz", + "integrity": "sha512-jrHN/arTKp2iuYj24byFgabBhZsZ3WUXCSKT16d/1MZUXGQt876XXu6r5rwpLtnVsX2gFiZ/DzdRKCL4RV9Wpg==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/e2e-test-utils-playwright": { "version": "1.33.2", "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.33.2.tgz", @@ -6105,6 +7545,269 @@ "node": ">=10.0.0" } }, + "node_modules/@wordpress/edit-post": { + "version": "8.33.9", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.33.9.tgz", + "integrity": "sha512-Oix8XpI93B5KPlVyI8JUwPpTcu21M1fV3PTDo4IpEMN3wOxjSa4BquKyGCmN0DqhXlxVUYiFYU/FdP3f/G+Whg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/admin-ui": "^1.1.4", + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/block-library": "^9.33.8", + "@wordpress/blocks": "^15.6.2", + "@wordpress/commands": "^1.33.4", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/editor": "^14.33.9", + "@wordpress/element": "^6.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/plugins": "^7.33.4", + "@wordpress/preferences": "^4.33.4", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/url": "^4.33.1", + "@wordpress/viewport": "^6.33.1", + "@wordpress/warning": "^3.33.1", + "@wordpress/widgets": "^4.33.7", + "clsx": "^2.1.1", + "memize": "^2.1.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/edit-site": { + "version": "6.33.9", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.33.9.tgz", + "integrity": "sha512-8dkNDoJY1abBe964ODdM/+Xi44S+7s5flCnPdz9RvGOaAeZWq4WYNGgsljlNP43wzPr8Eq+iPkqjbzpx3bInfA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@react-spring/web": "^9.4.5", + "@wordpress/a11y": "^4.33.1", + "@wordpress/admin-ui": "^1.1.4", + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/block-library": "^9.33.8", + "@wordpress/blocks": "^15.6.2", + "@wordpress/commands": "^1.33.4", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/dataviews": "^10.1.6", + "@wordpress/date": "^5.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/editor": "^14.33.9", + "@wordpress/element": "^6.33.1", + "@wordpress/escape-html": "^3.33.1", + "@wordpress/fields": "^0.25.9", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/media-utils": "^5.33.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/patterns": "^2.33.7", + "@wordpress/plugins": "^7.33.4", + "@wordpress/preferences": "^4.33.4", + "@wordpress/primitives": "^4.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/reusable-blocks": "^5.33.7", + "@wordpress/router": "^1.33.1", + "@wordpress/style-engine": "^2.33.1", + "@wordpress/url": "^4.33.1", + "@wordpress/viewport": "^6.33.1", + "@wordpress/views": "^1.0.7", + "@wordpress/widgets": "^4.33.7", + "@wordpress/wordcount": "^4.33.1", + "change-case": "^4.1.2", + "clsx": "^2.1.1", + "colord": "^2.9.2", + "fast-deep-equal": "^3.1.3", + "memize": "^2.1.0", + "react-autosize-textarea": "^7.1.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/edit-widgets": { + "version": "6.33.8", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.33.8.tgz", + "integrity": "sha512-SFsvQwMwu15WYUemUug0K9ITWIFx46CoDBAYyAbRV7Jy+torSoCrq8VjkiZsal7KYMhDJ/25ectvi4TYV/DOZQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/block-library": "^9.33.8", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/interface": "^9.18.4", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/media-utils": "^5.33.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/patterns": "^2.33.7", + "@wordpress/plugins": "^7.33.4", + "@wordpress/preferences": "^4.33.4", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/reusable-blocks": "^5.33.7", + "@wordpress/url": "^4.33.1", + "@wordpress/widgets": "^4.33.7", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/editor": { + "version": "14.33.9", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.33.9.tgz", + "integrity": "sha512-E1OU5u6PxCOHKxNOl1xWU3tjrsjWGYbaN77u5k0OfL3jGonOmL+XV+GO2Uh50m+/+eKr/9fReQoBv5erIseTEA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@floating-ui/react-dom": "2.0.8", + "@wordpress/a11y": "^4.33.1", + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/commands": "^1.33.4", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/dataviews": "^10.1.6", + "@wordpress/date": "^5.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/dom": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/fields": "^0.25.9", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/interface": "^9.18.4", + "@wordpress/keyboard-shortcuts": "^5.33.1", + "@wordpress/keycodes": "^4.33.1", + "@wordpress/media-utils": "^5.33.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/patterns": "^2.33.7", + "@wordpress/plugins": "^7.33.4", + "@wordpress/preferences": "^4.33.4", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/reusable-blocks": "^5.33.7", + "@wordpress/rich-text": "^7.33.2", + "@wordpress/server-side-render": "^6.9.4", + "@wordpress/url": "^4.33.1", + "@wordpress/warning": "^3.33.1", + "@wordpress/wordcount": "^4.33.1", + "change-case": "^4.1.2", + "client-zip": "^2.4.5", + "clsx": "^2.1.1", + "date-fns": "^3.6.0", + "deepmerge": "^4.3.0", + "fast-deep-equal": "^3.1.3", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0", + "react-autosize-textarea": "^7.1.0", + "remove-accents": "^0.5.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/editor/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@wordpress/element": { + "version": "6.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-6.33.1.tgz", + "integrity": "sha512-8Y2TEkduT1cAGVfh5HoERpJIVvCcfHI1k+PGgG3wzy85me6hjgA/P7l90yBt/9i9Omt5+buGfnklobstECR8zg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@types/react": "^18.2.79", + "@types/react-dom": "^18.2.25", + "@wordpress/escape-html": "^3.33.1", + "change-case": "^4.1.2", + "is-plain-object": "^5.0.0", + "react": "^18.3.0", + "react-dom": "^18.3.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/escape-html": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.33.1.tgz", + "integrity": "sha512-HMBYhNta/2UwopSwwZRD4MvmDOHd9VaxjHS40ay6riPOZk47BkN7ntbnYm9I/vC66Pw1btH+rnhvf8zvtkjm2A==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/eslint-plugin": { "version": "22.19.1", "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-22.19.1.tgz", @@ -6165,6 +7868,200 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@wordpress/fields": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@wordpress/fields/-/fields-0.25.9.tgz", + "integrity": "sha512-HOpF3NGSiy3AmmnW4THvVvR0JQ0Q9GWUkMxxpFkouPsKJKPE6TntlCYqGPjEobmHh9qNbUPFIRevCD4xpAK5Aw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/dataviews": "^10.1.6", + "@wordpress/date": "^5.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/media-utils": "^5.33.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/patterns": "^2.33.7", + "@wordpress/primitives": "^4.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/router": "^1.33.1", + "@wordpress/url": "^4.33.1", + "@wordpress/warning": "^3.33.1", + "change-case": "4.1.2", + "client-zip": "^2.4.5", + "clsx": "2.1.1", + "remove-accents": "^0.5.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/format-library": { + "version": "5.33.7", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.33.7.tgz", + "integrity": "sha512-t8QJP7CKWEUvRhyQEI4nbYVYg19W0FN+3EmpzlxNSI5qahDsWH/8B+NilrT7Uclym+pMRk40WE2eHFAj02Twvg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/latex-to-mathml": "^1.1.2", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/rich-text": "^7.33.2", + "@wordpress/url": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/hooks": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.33.1.tgz", + "integrity": "sha512-p9RbNsZJnsGY45MEV3QfYHS4dMmKe0B1f/RUXEL8ZLa36aUWZrUX7PJxvmmpeuPrboHQwT4MDps9kwHO4V6GVg==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/html-entities": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.33.1.tgz", + "integrity": "sha512-HdpnRRvTMstX58U4Yr+UisIrFLcG97PGegAczMxeq9Q1n3ol5FCkEegBTQIJffAZ5IadBsPZ77fjoVtLK7RViQ==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/i18n": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.6.1.tgz", + "integrity": "sha512-aEFSF+5dp0UhdMGHyNUwhcL0Sg/kp0NtCSMrfcQrXRM6uD/+y8ih0mHeULww5V919NUrzXIZSZGfOaOIiQVXXg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@tannin/sprintf": "^1.3.2", + "@wordpress/hooks": "^4.33.1", + "gettext-parser": "^1.3.1", + "memize": "^2.1.0", + "tannin": "^1.2.0" + }, + "bin": { + "pot-to-php": "tools/pot-to-php.js" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/icons": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-11.0.1.tgz", + "integrity": "sha512-vXkWiAxwDjWBcj72oXbJyuDtIvNvk1JnnmYzQUpIjKjvScRPcj+Kt40nFYk/5kPnNAhBqVNcZ7tWK7NctSslJA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/element": "^6.33.1", + "@wordpress/primitives": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/interactivity": { + "version": "6.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.33.1.tgz", + "integrity": "sha512-MSnOhE7oMlFYWhRrw56j0NS5L8d2hltiKLz1+YP5aHX75MVH3rH00ULqFshlRfHrhqFXlEufmKRoQBD7g3MMHQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@preact/signals": "^1.3.0", + "preact": "^10.24.2" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/interactivity-router": { + "version": "2.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.33.1.tgz", + "integrity": "sha512-j+JfkwkwEylFWk24wYsIo0V6Jd7bonmnwryI1G7Vh0h8buV7XaCvakmItQ7PUliIKA7SRQPNcoFjSrsca719tw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/interactivity": "^6.33.1", + "es-module-lexer": "^1.5.4" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/interface": { + "version": "9.18.4", + "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-9.18.4.tgz", + "integrity": "sha512-dm882d3Jvy+/ItaJvB3G4GUTHQPs9zsgnxSRNoHAaBz1G+wwueD0trxGcjzgW90jbc/qacKQCJ0rPQfnGWJ9/A==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/admin-ui": "^1.1.4", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/plugins": "^7.33.4", + "@wordpress/preferences": "^4.33.4", + "@wordpress/viewport": "^6.33.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/is-shallow-equal": { + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.33.1.tgz", + "integrity": "sha512-QMOwATwFjFr6Z9geS8EjuEVGN0gkpANypjqIBE8iTDtfKhY99LTtxbTaguviqKfVP7l73v1B0GJfHtkPExhJkA==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/jest-console": { "version": "8.33.1", "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-8.33.1.tgz", @@ -6201,6 +8098,108 @@ "jest": ">=29" } }, + "node_modules/@wordpress/keyboard-shortcuts": { + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-5.33.1.tgz", + "integrity": "sha512-ql+qQ+AW9rnaS6jBv3J5MT8ku0qijAYCq6rIvfEiA1W84i5+LB9JYxxzrFH8v5uGU4ZjqqRQEmcDd+lorlT4Vg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/keycodes": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/keycodes": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.33.1.tgz", + "integrity": "sha512-acuH0ogiY92ClslUpezZyEzfm1Ubx2bftevn/PxbsVq52UCOu14CAKgnO9sYqVuMpXT+zXveRMySixyKHB1wnA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/i18n": "^6.6.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/latex-to-mathml": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@wordpress/latex-to-mathml/-/latex-to-mathml-1.1.2.tgz", + "integrity": "sha512-+nTj1Lw/jOyIaYCRfqFlIGxAjxwRg5dTkgSxgtB53wtGGv0kieeeHDLVJdO/C/yU04pAStHMT+25Oi4DXUKRBw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "temml": "^0.10.33" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/list-reusable-blocks": { + "version": "5.33.4", + "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-5.33.4.tgz", + "integrity": "sha512-Szfb9AMHzjVK+ITj0HzDHXowaqLiVh/Y3rDcmpmQOhhVWTabEea1ls00aFjOWRpa9k6jm+7vqYtAEnWd2bIlLQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "change-case": "^4.1.2" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/media-utils": { + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-5.33.1.tgz", + "integrity": "sha512-Ty4gPDoKesy3nTu6b2nU2bee1Vqk90Cf1MHsoalo+6lw/UDlvX+RsogUzTVwUH9n2jG4rYQFPZY1KI/1pxj1rg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/private-apis": "^1.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/notices": { + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-5.33.1.tgz", + "integrity": "sha512-bvw97KGiToFZv9/EHPhom2va7pDXCUR2BNfSuxT3lSAt1tX5DUD5i1+6aa5TIybSAtZNGisCySH4fL/paMDMjQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/data": "^10.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, "node_modules/@wordpress/npm-package-json-lint-config": { "version": "5.33.1", "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.33.1.tgz", @@ -6215,6 +8214,85 @@ "npm-package-json-lint": ">=6.0.0" } }, + "node_modules/@wordpress/nux": { + "version": "9.33.4", + "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-9.33.4.tgz", + "integrity": "sha512-bXGRX4uMrR0bWciCkzXYxClCvFGBUUMs2qUlxbIBdgKxiEbLKY6xpfdroRZHnDzDhE5tr7D1t5Zc3a0gxmQX7g==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/base-styles": "^6.9.1", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/patterns": { + "version": "2.33.7", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.33.7.tgz", + "integrity": "sha512-dq2sCLNK1WWDhCpIfy65e3Z4Eyd9EXe5hE588TuaOmOHhU7uJBcpZnNKOJOBE8Cl9xR43Q8/l60f/nYKsOWiKA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/html-entities": "^4.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/url": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/plugins": { + "version": "7.33.4", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.33.4.tgz", + "integrity": "sha512-1FBLXXOaS27sCqbeaMd8QNgK8Utr0tJtqakKRQQrsKxuOBL6oncMbqsRkq68TVZF/rGOflzcXhaHhwqLylD8iw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/hooks": "^4.33.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/is-shallow-equal": "^5.33.1", + "memize": "^2.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/@wordpress/postcss-plugins-preset": { "version": "5.33.1", "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.33.1.tgz", @@ -6234,6 +8312,46 @@ "postcss": "^8.0.0" } }, + "node_modules/@wordpress/preferences": { + "version": "4.33.4", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.33.4.tgz", + "integrity": "sha512-WfAKKTWbWVPvNFerwrgQtjWxLMq2Kuj4J6mxK/NwBCzu3dWQZXVMlrzuEx8NA4VgKOzGV00a1Jqr9/HUX7DwCQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/private-apis": "^1.33.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/preferences-persistence": { + "version": "2.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/preferences-persistence/-/preferences-persistence-2.33.1.tgz", + "integrity": "sha512-AqMq1eiCqmwRkMqhn9EUjjd9IkCPZjPaQiYDTmISoL5wLcOrUS3rtnJsuvL3kYWJY8LYuETWJJg/bEQb79QlSg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/prettier-config": { "version": "4.33.1", "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.33.1.tgz", @@ -6248,6 +8366,138 @@ "prettier": ">=3" } }, + "node_modules/@wordpress/primitives": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-4.33.1.tgz", + "integrity": "sha512-CVdk+tyyGVB4ube6O/uS9BgdDly2imImqE6SM/Aa5N4O6BI6mIgLhLQoKqj7WBKIdI0qTMndyGHfqqoUWBD5wA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/element": "^6.33.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/priority-queue": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.33.1.tgz", + "integrity": "sha512-m3S+bfVIGmDHVrCzTdQu5oHP6aBIM0pf5AYVpfdA2addJHLICtAMrPYdD+4MXekh8a38DzPekZa03vGv3ws3zQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "requestidlecallback": "^0.3.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/private-apis": { + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.33.1.tgz", + "integrity": "sha512-7y6nbTMu8C7XdRPV0YJnNVBnfYJ9Ioa5cPxR6TxTkbxxK/xrdQwnrRJRLXrSQ8SOE+WIsuGHe9n7IYDJy0W0aw==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/redux-routine": { + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-5.33.1.tgz", + "integrity": "sha512-PdoYe5+78U3JcBVxFa/vxOAJ7ahdQTqr3/25WACRB/bHreeN/3r1CE1YaUiBTUFBVpu4iWQVojFswjkNlSG36w==", + "license": "GPL-2.0-or-later", + "dependencies": { + "is-plain-object": "^5.0.0", + "is-promise": "^4.0.0", + "rungen": "^0.3.2" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "redux": ">=4" + } + }, + "node_modules/@wordpress/reusable-blocks": { + "version": "5.33.7", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.33.7.tgz", + "integrity": "sha512-APZVYydkXtfYDaWRPX7BgXEeog/uhm+XAQWJL+kbTFLWVamCQq0bnhEuD4Pi53Yz7XZRBvw8tzEQqm0cm2YWaw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/base-styles": "^6.9.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/notices": "^5.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/url": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/rich-text": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.33.2.tgz", + "integrity": "sha512-jy8DPBN6f0WeQM1jL+yGX29xHgzDdyrGoXYEGrGt2ngpGYMca2ZrG9ZLcpQlU6S3sLV/n1jtjZntWrFFYRzgQA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/a11y": "^4.33.1", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/escape-html": "^3.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/keycodes": "^4.33.1", + "colord": "2.9.3", + "memize": "^2.1.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/router": { + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-1.33.1.tgz", + "integrity": "sha512-QuC4D4zyPcMJDcZOjXVtl6XhXQ9I8urwgXTPDBIzK6I+jad7tJw54d+X8aEKMP5Ce4NoyegOZY7GaqX4DMjPww==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/compose": "^7.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/url": "^4.33.1", + "history": "^5.3.0", + "route-recognizer": "^0.3.4" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, "node_modules/@wordpress/scripts": { "version": "30.26.2", "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-30.26.2.tgz", @@ -7453,6 +9703,57 @@ "node": ">=8" } }, + "node_modules/@wordpress/server-side-render": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-6.9.4.tgz", + "integrity": "sha512-/2z7nA5eZ6rW54f0LtjYMmFIY5LKnAw3jOjQKLyQ2sZD0OrKe7byfSRcO1pIAmAaQbwry8fI6+hsREAM841xxA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/deprecated": "^4.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/url": "^4.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/shortcode": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-4.33.1.tgz", + "integrity": "sha512-NEcIcHYc5C7egdTUYWZoCuRb8rccuPZTPQRYjg2UuV/eH56EPzsMpl9iRfBDQQyp575zLDOqwdnRog8v4Ni2Zw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "memize": "^2.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/style-engine": { + "version": "2.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-2.33.1.tgz", + "integrity": "sha512-S55fZu1Zp8NpvsSz9q990hgcbbfQB6unHTljOxneYrHVe4R0oSy0POOk/ngLqbDJEhcantgCUbbLWdZKnAYsPg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "change-case": "^4.1.2" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/stylelint-config": { "version": "23.25.1", "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-23.25.1.tgz", @@ -7473,11 +9774,181 @@ "stylelint-scss": "^6.4.0" } }, + "node_modules/@wordpress/sync": { + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-1.33.1.tgz", + "integrity": "sha512-N1O8lTO+NvRI9A2WjWBGAg67XbaQUkGhT+cR3j1PuhUB7IxQHXZiZy0xW/eDiM76U/VMZ3wteOuu6ufgCv3VJQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@types/simple-peer": "^9.11.5", + "@wordpress/hooks": "^4.33.1", + "@wordpress/url": "^4.33.1", + "import-locals": "^2.0.0", + "lib0": "^0.2.42", + "simple-peer": "^9.11.0", + "y-indexeddb": "~9.0.11", + "y-protocols": "^1.0.5", + "y-webrtc": "~10.2.5", + "yjs": "~13.6.6" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/token-list": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-3.33.1.tgz", + "integrity": "sha512-q89DOrcCL7o6ezCCkM4tD5sPV6rV7IosaMa+FH5qT2OK+++wFBGQsojgxyRZCm+tln7m2As58OJOBsmO9J458Q==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/undo-manager": { + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.33.1.tgz", + "integrity": "sha512-oIaZFjPSIy78ELLEdiQZDr68SRfsbr7WnrBX3V6GDZ3WEzhW7qKodQ0RiXn9vpwaax4fEobsW/z7j7D/pY6+Aw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/is-shallow-equal": "^5.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/upload-media": { + "version": "0.18.4", + "resolved": "https://registry.npmjs.org/@wordpress/upload-media/-/upload-media-0.18.4.tgz", + "integrity": "sha512-/slxbD9v3XrYSPTaqCtQ0NqmyeLSBKU43Dk/7M2QOSww2i7ih3tBYU3Lym9QIyr08TZASY/LUY84Rli369WY0w==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/blob": "^4.33.1", + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/preferences": "^4.33.4", + "@wordpress/private-apis": "^1.33.1", + "@wordpress/url": "^4.33.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/upload-media/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@wordpress/url": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.33.1.tgz", + "integrity": "sha512-t4MKPofYLHTIVE+NV36WBmlnzHsnZFkXsACdu/InF0u5pmyc/ZgXmq44qi6h/PmbGoUKnRQisulMIvGfEVBTeA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "remove-accents": "^0.5.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/viewport": { + "version": "6.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-6.33.1.tgz", + "integrity": "sha512-UmXx/UhJZqRYYCj+ZbG2XpObUa/UP2ydxC7hAVj3uc/xYrB8M3OOcYnQ+WQejAoyNs4sTe6VpzDZRn/rdcExMw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/compose": "^7.33.1", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/views": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/views/-/views-1.0.7.tgz", + "integrity": "sha512-rYMKl1+vRIR2u627P9kkyUgEwRuUlEGCUkikHugek7WiayhMzuNqBQhbgb2rNIp7LHjt5kjVGwZ6sZ+qXNAwmg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/data": "^10.33.1", + "@wordpress/dataviews": "^10.1.6", + "@wordpress/element": "^6.33.1", + "@wordpress/preferences": "^4.33.4", + "dequal": "^2.0.3" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/warning": { "version": "3.33.1", "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.33.1.tgz", "integrity": "sha512-ciDPM0AEu1s3xjDUwiTRxWiY0sTKTXI4R8NYO57g9+RuP4M5JnLK5/mdLVFCiWNo27tkUPFAgzHop7ssj3inew==", - "dev": true, + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/widgets": { + "version": "4.33.7", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.33.7.tgz", + "integrity": "sha512-UlFtCJWWCGwgvqxdRGA5g9n785GbdERgzIrYeI77l2+NLX81UFGBOwLfMittEPPXTrt2JLQ8/jIKUYTKNtbdtA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@wordpress/api-fetch": "^7.33.1", + "@wordpress/base-styles": "^6.9.1", + "@wordpress/block-editor": "^15.6.7", + "@wordpress/blocks": "^15.6.2", + "@wordpress/components": "^30.6.4", + "@wordpress/compose": "^7.33.1", + "@wordpress/core-data": "^7.33.7", + "@wordpress/data": "^10.33.1", + "@wordpress/element": "^6.33.1", + "@wordpress/i18n": "^6.6.1", + "@wordpress/icons": "^11.0.1", + "@wordpress/notices": "^5.33.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@wordpress/wordcount": { + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-4.33.1.tgz", + "integrity": "sha512-Qg9+Ah9rEH8vOZAThF8CQS+TrWOmpKbGtRy+ZgLghc+mr2FGpyal3hwsoS3yFW6CUSf23YTWw2k2osEeTf2erQ==", "license": "GPL-2.0-or-later", "engines": { "node": ">=18.12.0", @@ -7527,6 +9998,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -7549,6 +10021,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -7658,9 +10131,9 @@ } }, "node_modules/anser": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.5.tgz", - "integrity": "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.2.tgz", + "integrity": "sha512-PMqBCBvrOVDRqLGooQb+z+t1Q0PiPyurUQeZRR5uHBOVZcW8B04KMmnT12USnhpNX2wCPagWzLVppQMUG3u0Dw==", "dev": true, "license": "MIT" }, @@ -7725,11 +10198,18 @@ "ansi-html": "bin/ansi-html" } }, + "node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -7822,6 +10302,17 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -8221,6 +10712,11 @@ "postcss": "^8.1.0" } }, + "node_modules/autosize": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.4.tgz", + "integrity": "sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ==" + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -8497,6 +10993,20 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.12", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", @@ -8585,9 +11095,9 @@ } }, "node_modules/backbone": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.1.tgz", - "integrity": "sha512-YQzWxOrIgL6BoFnZjThVN99smKYhyEXXFyJJ2lsF1wJLyo4t+QjmkLrH8/fN22FZ4ykF70Xq7PgTugJVR4zS9Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.0.tgz", + "integrity": "sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==", "dependencies": { "underscore": ">=1.8.3" } @@ -8596,6 +11106,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/bare-events": { @@ -8664,7 +11175,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -9559,7 +12069,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -9568,7 +12077,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -9578,7 +12086,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, "engines": { "node": ">=6" } @@ -9646,7 +12153,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -9704,7 +12210,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, "dependencies": { "camel-case": "^4.1.2", "capital-case": "^1.0.4", @@ -10056,6 +12561,12 @@ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, + "node_modules/client-zip": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/client-zip/-/client-zip-2.5.0.tgz", + "integrity": "sha512-ydG4nDZesbFurnNq0VVCp/yyomIBh+X/1fZPI/P24zbnG4dtC4tQAfI5uQsomigsUMeiRO2wiTPizLWQh+IAyQ==", + "license": "MIT" + }, "node_modules/clipboard": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", @@ -10066,13 +12577,14 @@ "tiny-emitter": "^2.0.0" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "license": "MIT", - "engines": { - "node": ">=0.8" + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "node_modules/clone-deep": { @@ -10113,6 +12625,27 @@ "mimic-response": "^1.0.0" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.0.tgz", + "integrity": "sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==", + "dependencies": { + "@radix-ui/react-dialog": "1.0.5", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -10153,12 +12686,6 @@ "node": ">=4" } }, - "node_modules/codemirror": { - "version": "5.65.20", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.20.tgz", - "integrity": "sha512-i5dLDDxwkFCbhjvL2pNjShsojoL3XHyDwsGv1jqETUoW+lzpBKKqNTUWgQwVAOa0tUm4BwekT455ujafi8payA==", - "license": "MIT" - }, "node_modules/coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", @@ -10196,7 +12723,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -10205,14 +12731,12 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { "version": "2.0.20", @@ -10325,6 +12849,11 @@ "node": ">= 0.6" } }, + "node_modules/computed-style": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", + "integrity": "sha512-WpAmaKbMNmS3OProfHIdJiNleNJdgUrJfbKArXua28QF7+0CoZjlLn0lp6vlc+dl5r2/X9GQiQRQQU4BzSa69w==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -10391,7 +12920,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -10429,8 +12957,7 @@ "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.7.1", @@ -10457,6 +12984,96 @@ "node": ">=0.10.0" } }, + "node_modules/copy-webpack-plugin": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/core-js": { "version": "3.38.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", @@ -10507,7 +13124,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -10796,22 +13412,6 @@ "node": ">=4" } }, - "node_modules/csslint": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/csslint/-/csslint-1.0.5.tgz", - "integrity": "sha512-GXGpPqGIuEBKesM4bt2IKFrzDKpemh9wVZRHVuculUErar554QrXHOonhgkBOP3uiZzbAETz0N2A4oWlIoxPuw==", - "license": "MIT", - "dependencies": { - "clone": "~2.1.0", - "parserlib": "~1.1.1" - }, - "bin": { - "csslint": "dist/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cssnano": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.2.tgz", @@ -10960,6 +13560,11 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, "node_modules/currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -11113,6 +13718,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "license": "MIT" + }, "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -11138,7 +13758,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -11156,7 +13775,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11464,7 +14082,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11693,6 +14310,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/desandro-matches-selector": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz", @@ -11747,12 +14373,25 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "node_modules/devtools-protocol": { "version": "0.0.1312386", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==", "dev": true }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -11890,7 +14529,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -12090,6 +14728,11 @@ "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -12109,6 +14752,14 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -12196,6 +14847,17 @@ "node": ">=4" } }, + "node_modules/equivalent-key-map": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz", + "integrity": "sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew==" + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", + "license": "MIT" + }, "node_modules/error": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", @@ -12209,7 +14871,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -12342,7 +15003,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { @@ -12416,8 +15076,7 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "1.0.5", @@ -13365,6 +16024,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -13381,6 +16041,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -13393,7 +16054,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -14014,11 +16675,18 @@ "node >=0.6.0" ] }, + "node_modules/fast-average-color": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/fast-average-color/-/fast-average-color-9.3.0.tgz", + "integrity": "sha512-FlPROSqDMOnoBgkFhWMHJODPvpS0Od0WDpedcKq4U/t0JVapGAkblNwxOr75qT+ZNd0dQM4qlgqrtnXbCJ8cNg==", + "engines": { + "node": ">= 12" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -14199,6 +16867,21 @@ "pend": "~1.2.0" } }, + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fetch-blob": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", @@ -14589,6 +17272,22 @@ "node": ">=8" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/find-versions": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", @@ -14991,6 +17690,33 @@ "node": ">=0.10.0" } }, + "node_modules/framer-motion": { + "version": "11.18.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", + "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", + "license": "MIT", + "dependencies": { + "motion-dom": "^11.18.1", + "motion-utils": "^11.18.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -15066,7 +17792,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -15086,7 +17813,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15141,11 +17867,16 @@ "node": ">=6.9.0" } }, + "node_modules/get-browser-rtc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", + "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==", + "license": "MIT" + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -15175,6 +17906,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -15310,6 +18049,15 @@ "assert-plus": "^1.0.0" } }, + "node_modules/gettext-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz", + "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==", + "dependencies": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, "node_modules/gifsicle": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-4.0.1.tgz", @@ -15433,7 +18181,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -15590,6 +18337,14 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/gradient-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gradient-parser/-/gradient-parser-1.1.1.tgz", + "integrity": "sha512-Hu0YfNU+38EsTmnUfLXUKFMXq9yz7htGYpF4x+dlbBhUCvIvzLt0yVLT/gJRmvLKFJdqNFrz4eKkIUjIXSr7Tw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -16843,15 +19598,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -16985,7 +19731,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -16997,12 +19742,38 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "dev": true, "dependencies": { "capital-case": "^1.0.4", "tslib": "^2.0.3" } }, + "node_modules/highlight-words-core": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz", + "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" + }, + "node_modules/history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -17054,6 +19825,11 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpq": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.3.0.tgz", + "integrity": "sha512-fvYTvdCFOWQupGxqkahrkA+ERBuMdzkxwtUdKrxR6rmMd4Pfl+iZ1QiQYoaZ0B/v0y59MOMnz3XFUWbT50/NWA==" + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -17091,159 +19867,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/htmlhint": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-1.8.0.tgz", - "integrity": "sha512-RT1UsSM3ldlVQ7DDqWnbbRY1Rf6wwudmdYwiJzIyZVapA0jcka5r2lE2RkMLzTDN5c8Vc06yis57TaTpZ6o3Dg==", - "license": "MIT", - "dependencies": { - "async": "3.2.6", - "chalk": "4.1.2", - "commander": "11.1.0", - "glob": "^9.0.0", - "is-glob": "^4.0.3", - "node-sarif-builder": "^3.3.1", - "strip-json-comments": "3.1.1", - "xml": "1.0.1" - }, - "bin": { - "htmlhint": "bin/htmlhint" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "Open Collective", - "url": "https://opencollective.com/htmlhint" - } - }, - "node_modules/htmlhint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/htmlhint/node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/htmlhint/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/htmlhint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/htmlhint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/htmlhint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/htmlhint/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/htmlhint/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/htmlhint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/htmlhint/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/htmlhint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", @@ -17521,7 +20144,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -17545,7 +20167,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -17847,7 +20468,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -17878,6 +20498,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-locals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-locals/-/import-locals-2.0.0.tgz", + "integrity": "sha512-1/bPE89IZhyf7dr5Pkz7b4UyVXy5pEt7PTEfye15UEn3AK8+2zwcDCfKk9Pwun4ltfhOSszOrReSsFcDKw/yoA==", + "license": "MIT" + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -18075,6 +20701,14 @@ "node": ">=4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -18159,8 +20793,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "node_modules/is-async-function": { "version": "2.1.1", @@ -18262,7 +20895,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, "dependencies": { "hasown": "^2.0.2" }, @@ -18362,6 +20994,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18398,7 +21031,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -18448,6 +21080,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -18559,7 +21192,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -18580,6 +21212,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -18846,6 +21484,16 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic.js": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", + "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", + "license": "MIT", + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -21533,7 +24181,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -21605,8 +24252,7 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -21659,21 +24305,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonlint": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", - "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", - "dependencies": { - "JSV": "^4.0.x", - "nomnom": "^1.5.x" - }, - "bin": { - "jsonlint": "lib/cli.js" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -21695,14 +24326,6 @@ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, - "node_modules/JSV": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha512-ZJ6wx9xaKJ3yFUhq5/sk82PJMuUyLk277I8mQeyDgCTjGdjWJIvPfaU5LIXaMuaN2UO1X3kZH4+lgphublZUHw==", - "engines": { - "node": "*" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -21843,6 +24466,27 @@ "node": ">= 0.8.0" } }, + "node_modules/lib0": { + "version": "0.2.114", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.114.tgz", + "integrity": "sha512-gcxmNFzA4hv8UYi8j43uPlQ7CGcyMJ2KQb5kZASw6SnAKAf10hK12i2fjrS3Cl/ugZa5Ui6WwIu1/6MIXiHttQ==", + "license": "MIT", + "dependencies": { + "isomorphic.js": "^0.2.4" + }, + "bin": { + "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js", + "0gentesthtml": "bin/gentesthtml.js", + "0serve": "bin/0serve.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, "node_modules/lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", @@ -22274,11 +24918,21 @@ "url": "https://github.com/sponsors/antonk52" } }, + "node_modules/line-height": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", + "integrity": "sha512-YExecgqPwnp5gplD2+Y8e8A5+jKpr25+DzMbFdI1/1UAr0FJrTFv4VkHLf8/6B590i1wUPJWMKKldkd/bdQ//w==", + "dependencies": { + "computed-style": "~0.1.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/linkify-it": { "version": "3.0.3", @@ -22383,11 +25037,22 @@ "lie": "3.1.1" } }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "license": "MIT" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", @@ -22596,7 +25261,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, "dependencies": { "tslib": "^2.0.3" } @@ -23067,6 +25731,11 @@ "node": ">= 4.0.0" } }, + "node_modules/memize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz", + "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==" + }, "node_modules/meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -23361,15 +26030,6 @@ "node": ">=0.10.0" } }, - "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", @@ -23464,6 +26124,37 @@ "node": "*" } }, + "node_modules/moment-timezone": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/motion-dom": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", + "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^11.18.1" + } + }, + "node_modules/motion-utils": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz", + "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", + "license": "MIT" + }, + "node_modules/mousetrap": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", + "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" + }, "node_modules/mrmime": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", @@ -23476,8 +26167,7 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multicast-dns": { "version": "7.2.5", @@ -23502,7 +26192,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -23626,7 +26315,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -23680,54 +26368,6 @@ "dev": true, "license": "MIT" }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/node-sarif-builder/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/node-sarif-builder/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/node-sarif-builder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/node-watch": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz", @@ -23737,44 +26377,6 @@ "node": ">=6" } }, - "node_modules/nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha512-5s0JxqhDx9/rksG2BTMVN1enjWSvPidpoSgViZU4ZXULyTe+7jxcCRLB6f42Z0l1xYJpleCBtSyY6Lwg3uu5CQ==", - "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.", - "dependencies": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" - } - }, - "node_modules/nomnom/node_modules/ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/nomnom/node_modules/chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/nomnom/node_modules/underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha512-z4o1fvKUojIWh9XuaVLUDdf86RQiq13AC1dmHbTpoyuu+bquHms76v16CjycCbec87J7z0k//SiQVk0sMdFmpQ==" - }, "node_modules/nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -23827,6 +26429,11 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" + }, "node_modules/npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", @@ -24323,7 +26930,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -24808,7 +27414,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -24819,6 +27424,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/p-map-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", @@ -24882,7 +27498,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -24959,7 +27574,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -24969,7 +27583,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -25001,7 +27614,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -25048,11 +27660,10 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/parserlib": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz", - "integrity": "sha512-e1HbF3+7ASJ/uOZirg5/8ZfPljTh100auNterbHB8TUs5egciuWQ2eX/2al8ko0RdV9Xh/5jDei3jqJAmbTDcg==", - "license": "MIT" + "node_modules/parsel-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/parsel-js/-/parsel-js-1.1.2.tgz", + "integrity": "sha512-D66DG2nKx4Yoq66TMEyCUHlR2STGqO7vsBrX7tgyS9cfQyO6XD5JyzOiflwmWN6a4wbUAqpmHqmrxlTQVGZcbA==" }, "node_modules/parseurl": { "version": "1.3.3", @@ -25067,7 +27678,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -25086,7 +27696,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dev": true, "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -25098,6 +27707,14 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -25121,8 +27738,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-root": { "version": "0.1.1", @@ -25145,49 +27761,16 @@ "node": ">=0.10.0" } }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/path-to-regexp": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -25208,7 +27791,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -25387,6 +27969,29 @@ "node": ">=12" } }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -25409,7 +28014,6 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -25968,6 +28572,14 @@ "postcss": "^8.4.32" } }, + "node_modules/postcss-prefix-selector": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz", + "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==", + "peerDependencies": { + "postcss": ">4 <9" + } + }, "node_modules/postcss-reduce-initial": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.5.tgz", @@ -26321,11 +28933,31 @@ "node": ">=4" } }, + "node_modules/postcss-urlrebase": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/postcss-urlrebase/-/postcss-urlrebase-1.4.0.tgz", + "integrity": "sha512-rRaxMmWvXrn8Rk1PqsxmaJwldRHsr0WbbASKKCZYxXwotHkM/5X/6IrwaEe8pdzpbNGCEY86yhYMN0MhgOkADA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.3.0" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/preact": { + "version": "10.27.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", + "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -26451,7 +29083,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -26461,8 +29092,7 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/proto-list": { "version": "1.2.4", @@ -26995,6 +29625,26 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", @@ -27041,7 +29691,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -27084,6 +29733,15 @@ "node": ">=0.10.0" } }, + "node_modules/re-resizable": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.9.tgz", + "integrity": "sha512-l+MBlKZffv/SicxDySKEEh42hR6m5bAHfNu3Tvxks2c4Ah+ldnWjfnVRwxo/nxF27SsUsxDS0raAzFuJNKABXA==", + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -27095,6 +29753,60 @@ "node": ">=0.10.0" } }, + "node_modules/react-autosize-textarea": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-7.1.0.tgz", + "integrity": "sha512-BHpjCDkuOlllZn3nLazY2F8oYO1tS2jHnWhcjTWQdcKiiMU6gHLNt/fzmqMSyerR0eTdKtfSIqtSeTtghNwS+g==", + "dependencies": { + "autosize": "^4.0.2", + "line-height": "^0.3.1", + "prop-types": "^15.5.6" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0", + "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-day-picker": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.11.1.tgz", + "integrity": "sha512-l3ub6o8NlchqIjPKrRFUCkTUEq6KwemQlfv3XZzzwpUeGwmDJ+0u0Upmt38hJyd7D/vn2dQoOoLV/qAp0o3uUw==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "date-fns": "^4.1.0", + "date-fns-jalali": "^4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-day-picker/node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -27107,6 +29819,19 @@ "react": "^18.3.1" } }, + "node_modules/react-easy-crop": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-5.0.7.tgz", + "integrity": "sha512-6d5IUt09M3HwdDGwrcjPVgfrOfYWAOku8sCTn/xU7b1vkEg+lExMLwW8UbR39L8ybQi0hJZTU57yprF9h5Q5Ig==", + "dependencies": { + "normalize-wheel": "^1.0.1", + "tslib": "^2.0.1" + }, + "peerDependencies": { + "react": ">=16.4.0", + "react-dom": ">=16.4.0" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -27121,6 +29846,73 @@ "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -27312,6 +30104,11 @@ "node": ">=0.10.0" } }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -27434,6 +30231,16 @@ "regjsparser": "bin/parser" } }, + "node_modules/rememo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rememo/-/rememo-4.0.2.tgz", + "integrity": "sha512-NVfSP9NstE3QPNs/TnegQY0vnJnstKQSpcrsI2kBTB3dB2PkdfKdTa+abbjMIDqpc63fE5LfjLgfMst0ULMFxQ==" + }, + "node_modules/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" + }, "node_modules/repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -27538,11 +30345,16 @@ "uuid": "bin/uuid" } }, + "node_modules/requestidlecallback": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/requestidlecallback/-/requestidlecallback-0.3.0.tgz", + "integrity": "sha512-TWHFkT7S9p7IxLC5A1hYmAYQx2Eb9w1skrXmQ+dS1URyvR8tenMLl4lHbqEOUnpEYxNKpkVMXUgknVpBZWXXfQ==", + "license": "MIT" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -27556,6 +30368,11 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/requireindex": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", @@ -27585,7 +30402,6 @@ "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -27648,7 +30464,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -27763,6 +30578,12 @@ "node": ">=10.0.0" } }, + "node_modules/route-recognizer": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/route-recognizer/-/route-recognizer-0.3.4.tgz", + "integrity": "sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==", + "license": "MIT" + }, "node_modules/rtlcss": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.6.2.tgz", @@ -27879,6 +30700,12 @@ } ] }, + "node_modules/rungen": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/rungen/-/rungen-0.3.2.tgz", + "integrity": "sha512-zWl10xu2D7zoR8zSC2U6bg5bYF6T/Wk7rxwp8IPaJH7f0Ge21G03kNHVgHR7tyVkSSfAOG0Rqf/Cl38JftSmtw==", + "license": "MIT" + }, "node_modules/rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -27929,7 +30756,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -28002,8 +30828,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { "version": "1.94.0", @@ -28278,7 +31103,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -28388,6 +31212,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -28551,6 +31380,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/showdown": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", + "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", + "dependencies": { + "yargs": "^14.2" + }, + "bin": { + "showdown": "bin/showdown.js" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -28629,6 +31469,78 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-html-tokenizer": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz", + "integrity": "sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==" + }, + "node_modules/simple-peer": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz", + "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "debug": "^4.3.2", + "err-code": "^3.0.1", + "get-browser-rtc": "^1.1.0", + "queue-microtask": "^1.2.3", + "randombytes": "^2.1.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/simple-peer/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/simple-peer/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/sinon": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", @@ -28794,7 +31706,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -29014,7 +31925,6 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -29024,7 +31934,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -29505,6 +32414,19 @@ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", "dev": true }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -29616,15 +32538,14 @@ } }, "node_modules/strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg==", - "license": "MIT", - "bin": { - "strip-ansi": "cli.js" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=6" } }, "node_modules/strip-bom": { @@ -29686,6 +32607,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -30296,6 +33218,11 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -30352,7 +33279,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -30540,6 +33466,14 @@ "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==", "dev": true }, + "node_modules/tannin": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz", + "integrity": "sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==", + "dependencies": { + "@tannin/plural-forms": "^1.1.0" + } + }, "node_modules/tapable": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", @@ -30616,6 +33550,15 @@ "streamx": "^2.15.0" } }, + "node_modules/temml": { + "version": "0.10.34", + "resolved": "https://registry.npmjs.org/temml/-/temml-0.10.34.tgz", + "integrity": "sha512-f3b5CaPwPvMviA+CtHy0qoIGWvzpRrNpXmGRc/Y1jc9gAYy+xOlndJFyn7Vfcz7cBcS8QRvv8z0EEH59sHCQxg==", + "license": "MIT", + "engines": { + "node": ">=18.13.0" + } + }, "node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -30878,6 +33821,36 @@ "ms": "^2.1.1" } }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tldts-core": { "version": "6.1.75", "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.75.tgz", @@ -31082,8 +34055,7 @@ "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -31262,20 +34234,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -31529,7 +34487,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "dev": true, "dependencies": { "tslib": "^2.0.3" } @@ -31538,7 +34495,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dev": true, "dependencies": { "tslib": "^2.0.3" } @@ -31645,6 +34601,63 @@ "node": ">=0.10.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -32289,6 +35302,24 @@ } } }, + "node_modules/webpack-livereload-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/webpack-livereload-plugin/-/webpack-livereload-plugin-3.0.2.tgz", + "integrity": "sha512-5JeZ2dgsvSNG+clrkD/u2sEiPcNk4qwCVZZmW8KpqKcNlkGv7IJjdVrq13+etAmMZYaCF1EGXdHkVFuLgP4zfw==", + "dev": true, + "dependencies": { + "anymatch": "^3.1.1", + "portfinder": "^1.0.17", + "schema-utils": ">1.0.0", + "tiny-lr": "^1.1.1" + }, + "engines": { + "node": ">= 10.18.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, "node_modules/webpack-merge": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", @@ -32557,6 +35588,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "node_modules/which-typed-array": { "version": "1.1.19", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", @@ -32591,6 +35627,19 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -32640,12 +35689,6 @@ "node": ">=8" } }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "license": "MIT" - }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -32694,6 +35737,100 @@ "node": ">=0.4" } }, + "node_modules/y-indexeddb": { + "version": "9.0.12", + "resolved": "https://registry.npmjs.org/y-indexeddb/-/y-indexeddb-9.0.12.tgz", + "integrity": "sha512-9oCFRSPPzBK7/w5vOkJBaVCQZKHXB/v6SIT+WYhnJxlEC61juqG0hBrAf+y3gmSMLFLwICNH9nQ53uscuse6Hg==", + "license": "MIT", + "dependencies": { + "lib0": "^0.2.74" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "yjs": "^13.0.0" + } + }, + "node_modules/y-protocols": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz", + "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==", + "license": "MIT", + "dependencies": { + "lib0": "^0.2.85" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "yjs": "^13.0.0" + } + }, + "node_modules/y-webrtc": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.6.tgz", + "integrity": "sha512-1kZ4YYwksFZi8+l8mTebVX9vW6Q5MnqxMkvNU700X5dBE38usurt/JgeXSIQRpK3NwUYYb9y63Jn9FMpMH6/vA==", + "license": "MIT", + "dependencies": { + "lib0": "^0.2.42", + "simple-peer": "^9.11.0", + "y-protocols": "^1.0.6" + }, + "bin": { + "y-webrtc-signaling": "bin/server.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "optionalDependencies": { + "ws": "^8.14.2" + }, + "peerDependencies": { + "yjs": "^13.6.8" + } + }, + "node_modules/y-webrtc/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -32704,11 +35841,37 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } }, + "node_modules/yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "node_modules/yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -32719,6 +35882,23 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yjs": { + "version": "13.6.27", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.27.tgz", + "integrity": "sha512-OIDwaflOaq4wC6YlPBy2L6ceKeKuF7DeTxx+jPzv1FHn9tCZ0ZwSRnUBxD05E3yed46fv/FWJbvR+Ud7x0L7zw==", + "license": "MIT", + "dependencies": { + "lib0": "^0.2.99" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 4e9b800d7aad9..5981ed7d27b80 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,6 @@ "type": "svn", "url": "https://develop.svn.wordpress.org/trunk" }, - "gutenberg": { - "sha": "8c78d87453509661a9f28f978ba2c242d515563b", - "ghcrRepo": "WordPress/gutenberg/gutenberg-wp-develop-build" - }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" @@ -31,17 +27,15 @@ "@lodder/grunt-postcss": "^3.1.1", "@playwright/test": "1.56.1", "@pmmmwh/react-refresh-webpack-plugin": "0.6.1", - "@types/codemirror": "5.60.17", - "@types/espree": "10.1.0", - "@types/htmlhint": "1.1.5", - "@types/jquery": "3.5.33", - "@types/underscore": "1.11.15", + "@wordpress/babel-preset-default": "8.33.1", + "@wordpress/dependency-extraction-webpack-plugin": "6.33.1", "@wordpress/e2e-test-utils-playwright": "1.33.2", "@wordpress/prettier-config": "4.33.1", "@wordpress/scripts": "30.26.2", "autoprefixer": "10.4.22", "chalk": "5.6.2", "check-node-version": "4.2.1", + "copy-webpack-plugin": "13.0.1", "cssnano": "7.1.2", "dotenv": "17.2.3", "dotenv-expand": "12.0.3", @@ -74,31 +68,98 @@ "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.14", - "typescript": "5.9.3", + "uglify-js": "^3.19.3", "uuid": "13.0.0", "wait-on": "9.0.3", - "webpack": "5.98.0" + "webpack": "5.98.0", + "webpack-livereload-plugin": "3.0.2" }, "dependencies": { - "backbone": "1.6.1", + "@wordpress/a11y": "4.33.1", + "@wordpress/admin-ui": "1.1.4", + "@wordpress/annotations": "3.33.2", + "@wordpress/api-fetch": "7.33.1", + "@wordpress/autop": "4.33.1", + "@wordpress/base-styles": "6.9.1", + "@wordpress/blob": "4.33.1", + "@wordpress/block-directory": "5.33.9", + "@wordpress/block-editor": "15.6.7", + "@wordpress/block-library": "9.33.8", + "@wordpress/block-serialization-default-parser": "5.33.1", + "@wordpress/blocks": "15.6.2", + "@wordpress/commands": "1.33.4", + "@wordpress/components": "30.6.4", + "@wordpress/compose": "7.33.1", + "@wordpress/core-commands": "1.33.7", + "@wordpress/core-data": "7.33.7", + "@wordpress/customize-widgets": "5.33.8", + "@wordpress/data": "10.33.1", + "@wordpress/data-controls": "4.33.1", + "@wordpress/dataviews": "10.1.6", + "@wordpress/date": "5.33.1", + "@wordpress/deprecated": "4.33.1", + "@wordpress/dom": "4.33.1", + "@wordpress/dom-ready": "4.33.1", + "@wordpress/edit-post": "8.33.9", + "@wordpress/edit-site": "6.33.9", + "@wordpress/edit-widgets": "6.33.8", + "@wordpress/editor": "14.33.9", + "@wordpress/element": "6.33.1", + "@wordpress/escape-html": "3.33.1", + "@wordpress/fields": "0.25.9", + "@wordpress/format-library": "5.33.7", + "@wordpress/hooks": "4.33.1", + "@wordpress/html-entities": "4.33.1", + "@wordpress/i18n": "6.6.1", + "@wordpress/icons": "11.0.1", + "@wordpress/interactivity": "6.33.1", + "@wordpress/interactivity-router": "2.33.1", + "@wordpress/interface": "9.18.4", + "@wordpress/is-shallow-equal": "5.33.1", + "@wordpress/keyboard-shortcuts": "5.33.1", + "@wordpress/keycodes": "4.33.1", + "@wordpress/latex-to-mathml": "1.1.2", + "@wordpress/list-reusable-blocks": "5.33.4", + "@wordpress/media-utils": "5.33.1", + "@wordpress/notices": "5.33.1", + "@wordpress/nux": "9.33.4", + "@wordpress/patterns": "2.33.7", + "@wordpress/plugins": "7.33.4", + "@wordpress/preferences": "4.33.4", + "@wordpress/preferences-persistence": "2.33.1", + "@wordpress/primitives": "4.33.1", + "@wordpress/priority-queue": "3.33.1", + "@wordpress/private-apis": "1.33.1", + "@wordpress/redux-routine": "5.33.1", + "@wordpress/reusable-blocks": "5.33.7", + "@wordpress/rich-text": "7.33.2", + "@wordpress/router": "1.33.1", + "@wordpress/server-side-render": "6.9.4", + "@wordpress/shortcode": "4.33.1", + "@wordpress/style-engine": "2.33.1", + "@wordpress/sync": "1.33.1", + "@wordpress/token-list": "3.33.1", + "@wordpress/undo-manager": "1.33.1", + "@wordpress/upload-media": "0.18.4", + "@wordpress/url": "4.33.1", + "@wordpress/viewport": "6.33.1", + "@wordpress/views": "1.0.7", + "@wordpress/warning": "3.33.1", + "@wordpress/widgets": "4.33.7", + "@wordpress/wordcount": "4.33.1", + "backbone": "1.6.0", "clipboard": "2.0.11", - "codemirror": "5.65.20", "core-js-url-browser": "3.6.4", - "csslint": "1.0.5", "element-closest": "3.0.2", - "espree": "9.6.1", - "esprima": "4.0.1", "formdata-polyfill": "4.0.10", "hoverintent": "2.2.1", - "htmlhint": "1.8.0", "imagesloaded": "5.0.0", "jquery": "3.7.1", "jquery-color": "3.0.0", "jquery-form": "4.3.0", "jquery-hoverintent": "1.10.2", "json2php": "0.0.12", - "jsonlint": "1.6.3", - "lodash": "4.17.23", + "lodash": "4.17.21", "masonry-layout": "4.2.2", "moment": "2.30.1", "objectFitPolyfill": "2.3.5", @@ -112,17 +173,14 @@ "wicg-inert": "3.1.3" }, "scripts": { - "postinstall": "npm run gutenberg:verify", "build": "grunt build", "build:dev": "grunt build --dev", - "build:gutenberg": "grunt build:gutenberg", "dev": "grunt watch --dev", "test": "grunt test", "watch": "grunt watch", "grunt": "grunt", "lint:jsdoc": "wp-scripts lint-js", "lint:jsdoc:fix": "wp-scripts lint-js --fix", - "typecheck:js": "tsc --build", "env:start": "node ./tools/local-env/scripts/start.js && node ./tools/local-env/scripts/docker.js run -T --rm php composer update -W", "env:stop": "node ./tools/local-env/scripts/docker.js down", "env:restart": "npm run env:stop && npm run env:start", @@ -138,11 +196,6 @@ "test:coverage": "npm run test:php -- --coverage-html ./coverage/html/ --coverage-php ./coverage/php/report.php --coverage-text=./coverage/text/report.txt", "test:e2e": "wp-scripts test-playwright --config tests/e2e/playwright.config.js", "test:visual": "wp-scripts test-playwright --config tests/visual-regression/playwright.config.js", - "typecheck:php": "node ./tools/local-env/scripts/docker.js run --rm php composer phpstan", - "gutenberg:copy": "node tools/gutenberg/copy.js", - "gutenberg:verify": "node tools/gutenberg/utils.js", - "gutenberg:download": "node tools/gutenberg/download.js", - "vendor:copy": "node tools/vendors/copy-vendors.js", "sync-gutenberg-packages": "grunt sync-gutenberg-packages", "postsync-gutenberg-packages": "grunt wp-packages:sync-stable-blocks && grunt build --dev && grunt build" } diff --git a/phpcompat.xml.dist b/phpcompat.xml.dist index c4ebab64ea19b..a4771be79618b 100644 --- a/phpcompat.xml.dist +++ b/phpcompat.xml.dist @@ -66,8 +66,8 @@ - - + + ^build/* - - /gutenberg/* - /node_modules/* /vendor/* @@ -76,7 +73,6 @@ /src/wp-includes/js/* /src/wp-includes/PHPMailer/* /src/wp-includes/Requests/* - /src/wp-includes/php-ai-client/* /src/wp-includes/SimplePie/* /src/wp-includes/sodium_compat/* /src/wp-includes/Text/* @@ -85,9 +81,6 @@ /tests/phpunit/build* /tests/phpunit/data/* - - /tests/phpstan/* - /tools/* diff --git a/phpstan.neon.dist b/phpstan.neon.dist deleted file mode 100644 index e74e6ec1a441b..0000000000000 --- a/phpstan.neon.dist +++ /dev/null @@ -1,36 +0,0 @@ -# PHPStan configuration for WordPress Core. -# -# To overload this configuration, copy this file to phpstan.neon and adjust as needed. -# -# https://phpstan.org/config-reference - -includes: - # The base configuration file for using PHPStan with the WordPress core codebase. - - tests/phpstan/base.neon - - # The baseline file includes preexisting errors in the codebase that should be ignored. - # https://phpstan.org/user-guide/baseline - - tests/phpstan/baseline.php - -parameters: - # https://phpstan.org/user-guide/rule-levels - level: 0 - reportUnmatchedIgnoredErrors: true - - ignoreErrors: - # Level 0: - - # Inner functions aren't supported by PHPStan. - message: '#Function wxr_[a-z_]+ not found#' - path: src/wp-admin/includes/export.php - - - identifier: function.inner - path: src/wp-admin/includes/export.php - count: 13 - - - identifier: function.inner - path: src/wp-admin/includes/file.php - count: 1 - - - identifier: function.inner - path: src/wp-includes/canonical.php - count: 1 diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 4b6c149867c7d..4b5b0d3ded110 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -47,7 +47,6 @@ src/wp-includes/IXR src/wp-includes/PHPMailer src/wp-includes/Requests - src/wp-includes/php-ai-client src/wp-includes/SimplePie src/wp-includes/sodium_compat src/wp-includes/Text diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php new file mode 100644 index 0000000000000..9650b17034884 --- /dev/null +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -0,0 +1 @@ + array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'cb460b4676c94bd228ed'), 'admin-ui.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-element'), 'version' => 'bc5db43f7e3f0d8adcc8'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '758b80d8a795a222601b'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '3a4d9af2b423048b0dee'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'base-styles.min.js' => array('dependencies' => array(), 'version' => '7529f773be5cb229e3c4'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => '55bdef7bd3137eee623d'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning'), 'version' => '5fc3ad11235679e29400'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-latex-to-mathml', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => 'f7cd30dd531f20693fdb'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode', 'wp-warning'), 'version' => 'de131db49fa830bc97da'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => 'cac8f4817ab7cea0ac49'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => 'ad5cb4227f07a3d422ad'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => '7a9b375d8c19cf9d3d9b'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'effe2d88d7f0c50a8ce9'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url', 'wp-warning'), 'version' => '15baadfe6e1374188072'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => 'd824213342f5e84c8ea3'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => 'f940198280891b0b6318'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => '795a56839718d3ff7eae'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '26edef3be6483da3de2e'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'f011f5ec0075a555ea9c'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-warning', 'wp-widgets'), 'version' => 'b877e769e7f2bce85569'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => 'f0347fefaf37fa0d99ca'), 'editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => 'eb03723c7a53aaeea8fd'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => '6a582b0c827fa25df3dd'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-latex-to-mathml', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => '0811ed891b276a89737b'), 'hooks.min.js' => array('dependencies' => array(), 'version' => 'dd5603f07f9220ed27f1'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => 'e8b78b18a162491d5e5f'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'c26c3dc7bed366793375'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => 'fbc45a34ce65c5723afa'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '34c8fb5e7a594a1c8037'), 'latex-to-mathml.min.js' => array('dependencies' => array(), 'version' => '960cef31b586960935b4'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => 'f203c56da0f227808035'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-private-apis'), 'version' => 'c66754bed5498afe7050'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => 'f62fbf15dcc23301922f'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'df0a4e75f0b99fb17077'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '4131f04a041db58120d8'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => '039ed87b5b9f7036ceee'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => '2ca086aed510c242a1ed'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => 'e954d3a4426d311f7d1a'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => '0b5dcc337aa7cbf75570'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '2d59d091223ee9a33838'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '4f465748bda624774139'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => '8bb92d45458b29590f53'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-url'), 'version' => '6c0ec6e24f166c9b36e7'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '5bdbb44f3039529e3645'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => '2dfc4b954318a03e6a76'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '7db2472793a2abb97aa5'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => '0b3174183b858f2df320'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '7c6fcedc37dadafb8a81'), 'token-list.min.js' => array('dependencies' => array(), 'version' => 'cfdf635a436c3953a965'), 'url.min.js' => array('dependencies' => array(), 'version' => '9e178c9516d1222dc834'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => 'f07b4909c08cfe9de4e2'), 'views.min.js' => array('dependencies' => array('wp-data', 'wp-element', 'wp-preferences'), 'version' => 'ffb9f0d96ccb2a0d04bd'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'd69bc18c456d01c11d5a'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => 'c0e4adfacd4c628b1d02'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => 'c5b97f11206928ea9130')); diff --git a/src/wp-includes/assets/script-modules-packages.min.php b/src/wp-includes/assets/script-modules-packages.min.php new file mode 100644 index 0000000000000..b1a803991701d --- /dev/null +++ b/src/wp-includes/assets/script-modules-packages.min.php @@ -0,0 +1 @@ + array('dependencies' => array(), 'version' => '90f16bd7fc9472806570', 'type' => 'module'), 'interactivity/debug.min.js' => array('dependencies' => array(), 'version' => 'dea7da43ce140b662d0f', 'type' => 'module'), 'interactivity-router/index.min.js' => array('dependencies' => array('@wordpress/interactivity', array('id' => '@wordpress/a11y', 'import' => 'dynamic')), 'version' => '765a6ee8162122b48e6c', 'type' => 'module'), 'a11y/index.min.js' => array('dependencies' => array(), 'version' => 'b7d06936b8bc23cff2ad', 'type' => 'module'), 'block-library/accordion/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => '3a414634555a20667d6c', 'type' => 'module'), 'block-library/file/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => 'f9665632b48682075277', 'type' => 'module'), 'block-library/form/view.min.js' => array('dependencies' => array(), 'version' => 'baaf25398238b4f2a821', 'type' => 'module'), 'block-library/image/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => '292ec2cc397d10d98f6a', 'type' => 'module'), 'block-library/navigation/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => 'b0f909c3ec791c383210', 'type' => 'module'), 'block-library/query/view.min.js' => array('dependencies' => array('@wordpress/interactivity', array('id' => '@wordpress/interactivity-router', 'import' => 'dynamic')), 'version' => 'f55e93a1ad4806e91785', 'type' => 'module'), 'block-library/search/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => '94fc611a7464b5de290a', 'type' => 'module'), 'block-editor/utils/fit-text-frontend.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => 'd6b553b57c3908edc8f8', 'type' => 'module')); diff --git a/src/wp-includes/blocks/accordion-heading/block.json b/src/wp-includes/blocks/accordion-heading/block.json new file mode 100644 index 0000000000000..1fbb33f7e407c --- /dev/null +++ b/src/wp-includes/blocks/accordion-heading/block.json @@ -0,0 +1,94 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/accordion-heading", + "title": "Accordion Heading", + "category": "design", + "description": "Displays a heading that toggles the accordion panel.", + "parent": [ "core/accordion-item" ], + "usesContext": [ + "core/accordion-icon-position", + "core/accordion-show-icon", + "core/accordion-heading-level" + ], + "supports": { + "anchor": true, + "color": { + "background": true, + "gradients": true + }, + "align": false, + "interactivity": true, + "spacing": { + "padding": true, + "__experimentalDefaultControls": { + "padding": true + }, + "__experimentalSkipSerialization": true, + "__experimentalSelector": ".wp-block-accordion-heading__toggle" + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "style": true, + "width": true + } + }, + "typography": { + "__experimentalSkipSerialization": [ + "textDecoration", + "letterSpacing" + ], + "fontSize": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true, + "fontFamily": true + } + }, + "shadow": true, + "blockVisibility": false, + "lock": false + }, + "selectors": { + "typography": { + "letterSpacing": ".wp-block-accordion-heading .wp-block-accordion-heading__toggle-title", + "textDecoration": ".wp-block-accordion-heading .wp-block-accordion-heading__toggle-title" + } + }, + "attributes": { + "openByDefault": { + "type": "boolean", + "default": false + }, + "title": { + "type": "rich-text", + "source": "rich-text", + "selector": ".wp-block-accordion-heading__toggle-title", + "role": "content" + }, + "level": { + "type": "number" + }, + "iconPosition": { + "type": "string", + "enum": [ "left", "right" ], + "default": "right" + }, + "showIcon": { + "type": "boolean", + "default": true + } + }, + "textdomain": "default" +} diff --git a/src/wp-includes/blocks/accordion-item.php b/src/wp-includes/blocks/accordion-item.php new file mode 100644 index 0000000000000..6b6df425111fa --- /dev/null +++ b/src/wp-includes/blocks/accordion-item.php @@ -0,0 +1,74 @@ + function () { + $context = wp_interactivity_get_context(); + return $context['openByDefault']; + }, + ) + ); + + if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-item' ) ) ) { + $open_by_default = $attributes['openByDefault'] ? 'true' : 'false'; + $p->set_attribute( 'data-wp-context', '{ "id": "' . $unique_id . '", "openByDefault": ' . $open_by_default . ' }' ); + $p->set_attribute( 'data-wp-class--is-open', 'state.isOpen' ); + $p->set_attribute( 'data-wp-init', 'callbacks.initAccordionItems' ); + + if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-heading__toggle' ) ) ) { + $p->set_attribute( 'data-wp-on--click', 'actions.toggle' ); + $p->set_attribute( 'data-wp-on--keydown', 'actions.handleKeyDown' ); + $p->set_attribute( 'id', $unique_id ); + $p->set_attribute( 'aria-controls', $unique_id . '-panel' ); + $p->set_attribute( 'data-wp-bind--aria-expanded', 'state.isOpen' ); + + if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-panel' ) ) ) { + $p->set_attribute( 'id', $unique_id . '-panel' ); + $p->set_attribute( 'aria-labelledby', $unique_id ); + $p->set_attribute( 'data-wp-bind--inert', '!state.isOpen' ); + + // Only modify content if all directives have been set. + $content = $p->get_updated_html(); + } + } + } + + return $content; +} + +/** + * Registers the `core/accordion-item` block on server. + * + * @since 6.9.0 + */ +function register_block_core_accordion_item() { + register_block_type_from_metadata( + __DIR__ . '/accordion-item', + array( + 'render_callback' => 'block_core_accordion_item_render', + ) + ); +} +add_action( 'init', 'register_block_core_accordion_item' ); diff --git a/src/wp-includes/blocks/accordion-item/block.json b/src/wp-includes/blocks/accordion-item/block.json new file mode 100644 index 0000000000000..4958a5fde17ae --- /dev/null +++ b/src/wp-includes/blocks/accordion-item/block.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/accordion-item", + "title": "Accordion Item", + "category": "design", + "description": "Wraps the heading and panel in one unit.", + "parent": [ "core/accordion" ], + "allowedBlocks": [ "core/accordion-heading", "core/accordion-panel" ], + "supports": { + "html": false, + "color": { + "background": true, + "gradients": true + }, + "interactivity": true, + "spacing": { + "margin": [ "top", "bottom" ], + "blockGap": true + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "style": true, + "width": true + } + }, + "shadow": true, + "layout": { + "allowEditing": false + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "contentRole": true + }, + "attributes": { + "openByDefault": { + "type": "boolean", + "default": false + } + }, + "textdomain": "default", + "style": "wp-block-accordion-item" +} diff --git a/src/wp-includes/blocks/accordion-panel/block.json b/src/wp-includes/blocks/accordion-panel/block.json new file mode 100644 index 0000000000000..d6b6602619447 --- /dev/null +++ b/src/wp-includes/blocks/accordion-panel/block.json @@ -0,0 +1,75 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/accordion-panel", + "title": "Accordion Panel", + "category": "design", + "description": "Contains the hidden or revealed content beneath the heading.", + "parent": [ "core/accordion-item" ], + "supports": { + "html": false, + "color": { + "background": true, + "gradients": true + }, + "interactivity": true, + "spacing": { + "padding": true, + "blockGap": true, + "__experimentalDefaultControls": { + "padding": true, + "blockGap": true + } + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "style": true, + "width": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "shadow": true, + "layout": { + "allowEditing": false + }, + "blockVisibility": false, + "contentRole": true, + "allowedBlocks": true, + "lock": false + }, + "attributes": { + "templateLock": { + "type": [ "string", "boolean" ], + "enum": [ "all", "insert", "contentOnly", false ], + "default": false + }, + "openByDefault": { + "type": "boolean", + "default": false + }, + "isSelected": { + "type": "boolean", + "default": false + } + }, + "textdomain": "default", + "style": "wp-block-accordion-panel" +} diff --git a/src/wp-includes/blocks/accordion.php b/src/wp-includes/blocks/accordion.php new file mode 100644 index 0000000000000..537904a6e402d --- /dev/null +++ b/src/wp-includes/blocks/accordion.php @@ -0,0 +1,45 @@ +next_tag( array( 'class_name' => 'wp-block-accordion' ) ) ) { + $p->set_attribute( 'data-wp-interactive', 'core/accordion' ); + $p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "accordionItems": [] }' ); + + // Only modify content if directives have been set. + $content = $p->get_updated_html(); + } + + return $content; +} + +/** + * Registers the `core/accordion` block on server. + * + * @since 6.9.0 + */ +function register_block_core_accordion() { + register_block_type_from_metadata( + __DIR__ . '/accordion', + array( + 'render_callback' => 'render_block_core_accordion', + ) + ); +} +add_action( 'init', 'register_block_core_accordion' ); diff --git a/src/wp-includes/blocks/accordion/block.json b/src/wp-includes/blocks/accordion/block.json new file mode 100644 index 0000000000000..4b44b1c9bfa4a --- /dev/null +++ b/src/wp-includes/blocks/accordion/block.json @@ -0,0 +1,89 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/accordion", + "title": "Accordion", + "category": "design", + "description": "Displays a foldable layout that groups content in collapsible sections.", + "example": {}, + "supports": { + "anchor": true, + "html": false, + "align": [ "wide", "full" ], + "background": { + "backgroundImage": true, + "backgroundSize": true, + "__experimentalDefaultControls": { + "backgroundImage": true + } + }, + "color": { + "background": true, + "gradients": true + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "style": true, + "width": true + } + }, + "spacing": { + "padding": true, + "margin": [ "top", "bottom" ], + "blockGap": true + }, + "shadow": true, + "layout": true, + "ariaLabel": true, + "interactivity": true, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "contentRole": true + }, + "attributes": { + "iconPosition": { + "type": "string", + "default": "right" + }, + "showIcon": { + "type": "boolean", + "default": true + }, + "autoclose": { + "type": "boolean", + "default": false + }, + "headingLevel": { + "type": "number", + "default": 3 + }, + "levelOptions": { + "type": "array" + } + }, + "providesContext": { + "core/accordion-icon-position": "iconPosition", + "core/accordion-show-icon": "showIcon", + "core/accordion-heading-level": "headingLevel" + }, + "allowedBlocks": [ "core/accordion-item" ], + "textdomain": "default", + "viewScriptModule": "@wordpress/block-library/accordion/view" +} diff --git a/src/wp-includes/blocks/archives.php b/src/wp-includes/blocks/archives.php new file mode 100644 index 0000000000000..077507f8c9e08 --- /dev/null +++ b/src/wp-includes/blocks/archives.php @@ -0,0 +1,174 @@ + $type, + 'format' => 'option', + 'show_post_count' => $show_post_count, + ) + ); + + $dropdown_args['echo'] = 0; + + $archives = wp_get_archives( $dropdown_args ); + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $class ) ); + + switch ( $dropdown_args['type'] ) { + case 'yearly': + $label = __( 'Select Year' ); + break; + case 'monthly': + $label = __( 'Select Month' ); + break; + case 'daily': + $label = __( 'Select Day' ); + break; + case 'weekly': + $label = __( 'Select Week' ); + break; + default: + $label = __( 'Select Post' ); + break; + } + + $show_label = empty( $attributes['showLabel'] ) ? ' screen-reader-text' : ''; + + $block_content = ' + '; + + // Inject the dropdown script immediately after the select dropdown. + $block_content .= block_core_archives_build_dropdown_script( $dropdown_id ); + + return sprintf( + '
%2$s
', + $wrapper_attributes, + $block_content + ); + } + + /** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */ + $archives_args = apply_filters( + 'widget_archives_args', + array( + 'type' => $type, + 'show_post_count' => $show_post_count, + ) + ); + + $archives_args['echo'] = 0; + + $archives = wp_get_archives( $archives_args ); + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $class ) ); + + if ( empty( $archives ) ) { + return sprintf( + '
%2$s
', + $wrapper_attributes, + __( 'No archives to show.' ) + ); + } + + return sprintf( + '
    %2$s
', + $wrapper_attributes, + $archives + ); +} + +/** + * Generates the inline script for an archives dropdown field. + * + * @since 6.9.0 + * + * @param string $dropdown_id ID of the dropdown field. + * + * @return string Returns the dropdown onChange redirection script. + */ +function block_core_archives_build_dropdown_script( $dropdown_id ) { + ob_start(); + + $exports = array( $dropdown_id, home_url() ); + ?> + + ', '' ), '', ob_get_clean() ) ) . + "\n//# sourceURL=" . rawurlencode( __FUNCTION__ ) + ); +} + +/** + * Register archives block. + * + * @since 5.0.0 + */ +function register_block_core_archives() { + register_block_type_from_metadata( + __DIR__ . '/archives', + array( + 'render_callback' => 'render_block_core_archives', + ) + ); +} +add_action( 'init', 'register_block_core_archives' ); diff --git a/src/wp-includes/blocks/archives/block.json b/src/wp-includes/blocks/archives/block.json new file mode 100644 index 0000000000000..0351a4b694c00 --- /dev/null +++ b/src/wp-includes/blocks/archives/block.json @@ -0,0 +1,71 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/archives", + "title": "Archives", + "category": "widgets", + "description": "Display a date archive of your posts.", + "textdomain": "default", + "attributes": { + "displayAsDropdown": { + "type": "boolean", + "default": false + }, + "showLabel": { + "type": "boolean", + "default": true + }, + "showPostCounts": { + "type": "boolean", + "default": false + }, + "type": { + "type": "string", + "default": "monthly" + } + }, + "supports": { + "align": true, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + }, + "html": false, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-archives-editor" +} diff --git a/src/wp-includes/blocks/audio/block.json b/src/wp-includes/blocks/audio/block.json new file mode 100644 index 0000000000000..9b77efee23cce --- /dev/null +++ b/src/wp-includes/blocks/audio/block.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/audio", + "title": "Audio", + "category": "media", + "description": "Embed a simple audio player.", + "keywords": [ "music", "sound", "podcast", "recording" ], + "textdomain": "default", + "attributes": { + "blob": { + "type": "string", + "role": "local" + }, + "src": { + "type": "string", + "source": "attribute", + "selector": "audio", + "attribute": "src", + "role": "content" + }, + "caption": { + "type": "rich-text", + "source": "rich-text", + "selector": "figcaption", + "role": "content" + }, + "id": { + "type": "number", + "role": "content" + }, + "autoplay": { + "type": "boolean", + "source": "attribute", + "selector": "audio", + "attribute": "autoplay" + }, + "loop": { + "type": "boolean", + "source": "attribute", + "selector": "audio", + "attribute": "loop" + }, + "preload": { + "type": "string", + "source": "attribute", + "selector": "audio", + "attribute": "preload" + } + }, + "supports": { + "anchor": true, + "align": true, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-audio-editor", + "style": "wp-block-audio" +} diff --git a/src/wp-includes/blocks/avatar.php b/src/wp-includes/blocks/avatar.php new file mode 100644 index 0000000000000..d4a01c1c3a1e7 --- /dev/null +++ b/src/wp-includes/blocks/avatar.php @@ -0,0 +1,166 @@ +context['commentId'] ) ) { + if ( isset( $attributes['userId'] ) ) { + $author_id = $attributes['userId']; + } elseif ( isset( $block->context['postId'] ) ) { + $author_id = get_post_field( 'post_author', $block->context['postId'] ); + } else { + $author_id = get_query_var( 'author' ); + } + + if ( empty( $author_id ) ) { + return ''; + } + + $author_name = get_the_author_meta( 'display_name', $author_id ); + // translators: %s: Author name. + $alt = sprintf( __( '%s Avatar' ), $author_name ); + $avatar_block = get_avatar( + $author_id, + $size, + '', + $alt, + array( + 'extra_attr' => $image_styles, + 'class' => $image_classes, + ) + ); + if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) { + $label = ''; + if ( '_blank' === $attributes['linkTarget'] ) { + // translators: %s is the Author name. + $label = 'aria-label="' . esc_attr( sprintf( __( '(%s author archive, opens in a new tab)' ), $author_name ) ) . '"'; + } + // translators: 1: Author archive link. 2: Link target. %3$s Aria label. %4$s Avatar image. + $avatar_block = sprintf( '%4$s', esc_url( get_author_posts_url( $author_id ) ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block ); + } + return sprintf( '
%2s
', $wrapper_attributes, $avatar_block ); + } + $comment = get_comment( $block->context['commentId'] ); + if ( ! $comment ) { + return ''; + } + /* translators: %s: Author name. */ + $alt = sprintf( __( '%s Avatar' ), $comment->comment_author ); + $avatar_block = get_avatar( + $comment, + $size, + '', + $alt, + array( + 'extra_attr' => $image_styles, + 'class' => $image_classes, + ) + ); + if ( isset( $attributes['isLink'] ) && $attributes['isLink'] && isset( $comment->comment_author_url ) && '' !== $comment->comment_author_url ) { + $label = ''; + if ( '_blank' === $attributes['linkTarget'] ) { + // translators: %s: Comment author name. + $label = 'aria-label="' . esc_attr( sprintf( __( '(%s website link, opens in a new tab)' ), $comment->comment_author ) ) . '"'; + } + $avatar_block = sprintf( '%4$s', esc_url( $comment->comment_author_url ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block ); + } + return sprintf( '
%2s
', $wrapper_attributes, $avatar_block ); +} + +/** + * Generates class names and styles to apply the border support styles for + * the Avatar block. + * + * @since 6.3.0 + * + * @param array $attributes The block attributes. + * @return array The border-related classnames and styles for the block. + */ +function get_block_core_avatar_border_attributes( $attributes ) { + $border_styles = array(); + $sides = array( 'top', 'right', 'bottom', 'left' ); + + // Border radius. + if ( isset( $attributes['style']['border']['radius'] ) ) { + $border_styles['radius'] = $attributes['style']['border']['radius']; + } + + // Border style. + if ( isset( $attributes['style']['border']['style'] ) ) { + $border_styles['style'] = $attributes['style']['border']['style']; + } + + // Border width. + if ( isset( $attributes['style']['border']['width'] ) ) { + $border_styles['width'] = $attributes['style']['border']['width']; + } + + // Border color. + $preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null; + $custom_color = $attributes['style']['border']['color'] ?? null; + $border_styles['color'] = $preset_color ? $preset_color : $custom_color; + + // Individual border styles e.g. top, left etc. + foreach ( $sides as $side ) { + $border = $attributes['style']['border'][ $side ] ?? null; + $border_styles[ $side ] = array( + 'color' => isset( $border['color'] ) ? $border['color'] : null, + 'style' => isset( $border['style'] ) ? $border['style'] : null, + 'width' => isset( $border['width'] ) ? $border['width'] : null, + ); + } + + $styles = wp_style_engine_get_styles( array( 'border' => $border_styles ) ); + $attributes = array(); + if ( ! empty( $styles['classnames'] ) ) { + $attributes['class'] = $styles['classnames']; + } + if ( ! empty( $styles['css'] ) ) { + $attributes['style'] = $styles['css']; + } + return $attributes; +} + +/** + * Registers the `core/avatar` block on the server. + * + * @since 6.0.0 + */ +function register_block_core_avatar() { + register_block_type_from_metadata( + __DIR__ . '/avatar', + array( + 'render_callback' => 'render_block_core_avatar', + ) + ); +} +add_action( 'init', 'register_block_core_avatar' ); diff --git a/src/wp-includes/blocks/avatar/block.json b/src/wp-includes/blocks/avatar/block.json new file mode 100644 index 0000000000000..5c13258bb3c11 --- /dev/null +++ b/src/wp-includes/blocks/avatar/block.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/avatar", + "title": "Avatar", + "category": "theme", + "description": "Add a user’s avatar.", + "textdomain": "default", + "attributes": { + "userId": { + "type": "number" + }, + "size": { + "type": "number", + "default": 96 + }, + "isLink": { + "type": "boolean", + "default": false + }, + "linkTarget": { + "type": "string", + "default": "_self" + } + }, + "usesContext": [ "postType", "postId", "commentId" ], + "supports": { + "html": false, + "align": true, + "alignWide": false, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "__experimentalBorder": { + "__experimentalSkipSerialization": true, + "radius": true, + "width": true, + "color": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true + } + }, + "color": { + "text": false, + "background": false + }, + "filter": { + "duotone": true + }, + "interactivity": { + "clientNavigation": true + } + }, + "selectors": { + "border": ".wp-block-avatar img", + "filter": { + "duotone": ".wp-block-avatar img" + } + }, + "editorStyle": "wp-block-avatar-editor", + "style": "wp-block-avatar" +} diff --git a/src/wp-includes/blocks/block.php b/src/wp-includes/blocks/block.php new file mode 100644 index 0000000000000..f09d5367a9c89 --- /dev/null +++ b/src/wp-includes/blocks/block.php @@ -0,0 +1,131 @@ +post_type ) { + return ''; + } + + if ( isset( $seen_refs[ $attributes['ref'] ] ) ) { + // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent + // is set in `wp_debug_mode()`. + $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY; + + return $is_debug ? + // translators: Visible only in the front end, this warning takes the place of a faulty block. + __( '[block rendering halted]' ) : + ''; + } + + if ( 'publish' !== $reusable_block->post_status || ! empty( $reusable_block->post_password ) ) { + return ''; + } + + $seen_refs[ $attributes['ref'] ] = true; + + // Handle embeds for reusable blocks. + global $wp_embed; + $content = $wp_embed->run_shortcode( $reusable_block->post_content ); + $content = $wp_embed->autoembed( $content ); + + // Back compat. + // For blocks that have not been migrated in the editor, add some back compat + // so that front-end rendering continues to work. + + // This matches the `v2` deprecation. Removes the inner `values` property + // from every item. + if ( isset( $attributes['content'] ) ) { + foreach ( $attributes['content'] as &$content_data ) { + if ( isset( $content_data['values'] ) ) { + $is_assoc_array = is_array( $content_data['values'] ) && ! wp_is_numeric_array( $content_data['values'] ); + + if ( $is_assoc_array ) { + $content_data = $content_data['values']; + } + } + } + } + + // This matches the `v1` deprecation. Rename `overrides` to `content`. + if ( isset( $attributes['overrides'] ) && ! isset( $attributes['content'] ) ) { + $attributes['content'] = $attributes['overrides']; + } + + // Apply Block Hooks. + $content = apply_block_hooks_to_content_from_post_object( $content, $reusable_block ); + + /** + * We attach the blocks from $content as inner blocks to the Synced Pattern block instance. + * This ensures that block context available to the Synced Pattern block instance is provided to + * those blocks. + */ + $block_instance->parsed_block['innerBlocks'] = parse_blocks( $content ); + $block_instance->parsed_block['innerContent'] = array_fill( 0, count( $block_instance->parsed_block['innerBlocks'] ), null ); + if ( method_exists( $block_instance, 'refresh_context_dependents' ) ) { + // WP_Block::refresh_context_dependents() was introduced in WordPress 6.8. + $block_instance->refresh_context_dependents(); + } else { + // This branch can be removed once Gutenberg requires WordPress 6.8 or later. + if ( ! class_exists( 'WP_Block_Cloner' ) ) { + // phpcs:ignore Gutenberg.Commenting.SinceTag.MissingClassSinceTag + class WP_Block_Cloner extends WP_Block { + /** + * Static methods of subclasses have access to protected properties + * of instances of the parent class. + * In this case, this gives us access to `available_context` and `registry`. + */ + // phpcs:ignore Gutenberg.Commenting.SinceTag.MissingMethodSinceTag + public static function clone_instance( $instance ) { + return new WP_Block( + $instance->parsed_block, + $instance->available_context, + $instance->registry + ); + } + } + } + $block_instance = WP_Block_Cloner::clone_instance( $block_instance ); + } + + $content = $block_instance->render( array( 'dynamic' => false ) ); + unset( $seen_refs[ $attributes['ref'] ] ); + + return $content; +} + +/** + * Registers the `core/block` block. + * + * @since 5.3.0 + */ +function register_block_core_block() { + register_block_type_from_metadata( + __DIR__ . '/block', + array( + 'render_callback' => 'render_block_core_block', + ) + ); +} +add_action( 'init', 'register_block_core_block' ); diff --git a/src/wp-includes/blocks/block/block.json b/src/wp-includes/blocks/block/block.json new file mode 100644 index 0000000000000..fdce3bcc02e07 --- /dev/null +++ b/src/wp-includes/blocks/block/block.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/block", + "title": "Pattern", + "category": "reusable", + "description": "Reuse this design across your site.", + "keywords": [ "reusable" ], + "textdomain": "default", + "attributes": { + "ref": { + "type": "number" + }, + "content": { + "type": "object", + "default": {} + } + }, + "providesContext": { + "pattern/overrides": "content" + }, + "supports": { + "customClassName": false, + "html": false, + "inserter": false, + "renaming": false, + "interactivity": { + "clientNavigation": true + } + } +} diff --git a/src/wp-includes/blocks/blocks-json.php b/src/wp-includes/blocks/blocks-json.php new file mode 100644 index 0000000000000..f8159a5d2a7a2 --- /dev/null +++ b/src/wp-includes/blocks/blocks-json.php @@ -0,0 +1,8546 @@ + array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/accordion', + 'title' => 'Accordion', + 'category' => 'design', + 'description' => 'Displays a foldable layout that groups content in collapsible sections.', + 'example' => array( + + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'align' => array( + 'wide', + 'full' + ), + 'background' => array( + 'backgroundImage' => true, + 'backgroundSize' => true, + '__experimentalDefaultControls' => array( + 'backgroundImage' => true + ) + ), + 'color' => array( + 'background' => true, + 'gradients' => true + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'spacing' => array( + 'padding' => true, + 'margin' => array( + 'top', + 'bottom' + ), + 'blockGap' => true + ), + 'shadow' => true, + 'layout' => true, + 'ariaLabel' => true, + 'interactivity' => true, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'contentRole' => true, + 'listView' => true + ), + 'attributes' => array( + 'iconPosition' => array( + 'type' => 'string', + 'default' => 'right' + ), + 'showIcon' => array( + 'type' => 'boolean', + 'default' => true + ), + 'autoclose' => array( + 'type' => 'boolean', + 'default' => false + ), + 'headingLevel' => array( + 'type' => 'number', + 'default' => 3 + ), + 'levelOptions' => array( + 'type' => 'array' + ) + ), + 'providesContext' => array( + 'core/accordion-icon-position' => 'iconPosition', + 'core/accordion-show-icon' => 'showIcon', + 'core/accordion-heading-level' => 'headingLevel' + ), + 'allowedBlocks' => array( + 'core/accordion-item' + ), + 'textdomain' => 'default', + 'viewScriptModule' => '@wordpress/block-library/accordion/view' + ), + 'accordion-heading' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/accordion-heading', + 'title' => 'Accordion Heading', + 'category' => 'design', + 'description' => 'Displays a heading that toggles the accordion panel.', + 'parent' => array( + 'core/accordion-item' + ), + 'usesContext' => array( + 'core/accordion-icon-position', + 'core/accordion-show-icon', + 'core/accordion-heading-level' + ), + 'supports' => array( + 'anchor' => true, + 'color' => array( + 'background' => true, + 'gradients' => true + ), + 'align' => false, + 'interactivity' => true, + 'spacing' => array( + 'padding' => true, + '__experimentalDefaultControls' => array( + 'padding' => true + ), + '__experimentalSkipSerialization' => true, + '__experimentalSelector' => '.wp-block-accordion-heading__toggle' + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'typography' => array( + '__experimentalSkipSerialization' => array( + 'textDecoration', + 'letterSpacing' + ), + 'fontSize' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true, + 'fontFamily' => true + ) + ), + 'shadow' => true, + 'visibility' => false, + 'lock' => false + ), + 'selectors' => array( + 'typography' => array( + 'letterSpacing' => '.wp-block-accordion-heading .wp-block-accordion-heading__toggle-title', + 'textDecoration' => '.wp-block-accordion-heading .wp-block-accordion-heading__toggle-title' + ) + ), + 'attributes' => array( + 'openByDefault' => array( + 'type' => 'boolean', + 'default' => false + ), + 'title' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => '.wp-block-accordion-heading__toggle-title', + 'role' => 'content' + ), + 'level' => array( + 'type' => 'number' + ), + 'iconPosition' => array( + 'type' => 'string', + 'enum' => array( + 'left', + 'right' + ), + 'default' => 'right' + ), + 'showIcon' => array( + 'type' => 'boolean', + 'default' => true + ) + ), + 'textdomain' => 'default' + ), + 'accordion-item' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/accordion-item', + 'title' => 'Accordion Item', + 'category' => 'design', + 'description' => 'Wraps the heading and panel in one unit.', + 'parent' => array( + 'core/accordion' + ), + 'allowedBlocks' => array( + 'core/accordion-heading', + 'core/accordion-panel' + ), + 'supports' => array( + 'html' => false, + 'color' => array( + 'background' => true, + 'gradients' => true + ), + 'interactivity' => true, + 'spacing' => array( + 'margin' => array( + 'top', + 'bottom' + ), + 'blockGap' => true + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'shadow' => true, + 'layout' => array( + 'allowEditing' => false + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'contentRole' => true + ), + 'attributes' => array( + 'openByDefault' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'providesContext' => array( + 'core/accordion-open-by-default' => 'openByDefault' + ), + 'textdomain' => 'default', + 'style' => 'wp-block-accordion-item' + ), + 'accordion-panel' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/accordion-panel', + 'title' => 'Accordion Panel', + 'category' => 'design', + 'description' => 'Contains the hidden or revealed content beneath the heading.', + 'parent' => array( + 'core/accordion-item' + ), + 'usesContext' => array( + 'core/accordion-open-by-default' + ), + 'supports' => array( + 'html' => false, + 'color' => array( + 'background' => true, + 'gradients' => true + ), + 'interactivity' => true, + 'spacing' => array( + 'padding' => true, + 'blockGap' => true, + '__experimentalDefaultControls' => array( + 'padding' => true, + 'blockGap' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'shadow' => true, + 'layout' => array( + 'allowEditing' => false + ), + 'visibility' => false, + 'contentRole' => true, + 'allowedBlocks' => true, + 'lock' => false + ), + 'attributes' => array( + 'templateLock' => array( + 'type' => array( + 'string', + 'boolean' + ), + 'enum' => array( + 'all', + 'insert', + 'contentOnly', + false + ), + 'default' => false + ) + ), + 'textdomain' => 'default', + 'style' => 'wp-block-accordion-panel' + ), + 'archives' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/archives', + 'title' => 'Archives', + 'category' => 'widgets', + 'description' => 'Display a date archive of your posts.', + 'textdomain' => 'default', + 'attributes' => array( + 'displayAsDropdown' => array( + 'type' => 'boolean', + 'default' => false + ), + 'showLabel' => array( + 'type' => 'boolean', + 'default' => true + ), + 'showPostCounts' => array( + 'type' => 'boolean', + 'default' => false + ), + 'type' => array( + 'type' => 'string', + 'default' => 'monthly' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ), + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ) + ), + 'audio' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/audio', + 'title' => 'Audio', + 'category' => 'media', + 'description' => 'Embed a simple audio player.', + 'keywords' => array( + 'music', + 'sound', + 'podcast', + 'recording' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'blob' => array( + 'type' => 'string', + 'role' => 'local' + ), + 'src' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'audio', + 'attribute' => 'src', + 'role' => 'content' + ), + 'caption' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'figcaption', + 'role' => 'content' + ), + 'id' => array( + 'type' => 'number', + 'role' => 'content' + ), + 'autoplay' => array( + 'type' => 'boolean', + 'source' => 'attribute', + 'selector' => 'audio', + 'attribute' => 'autoplay' + ), + 'loop' => array( + 'type' => 'boolean', + 'source' => 'attribute', + 'selector' => 'audio', + 'attribute' => 'loop' + ), + 'preload' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'audio', + 'attribute' => 'preload' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-audio-editor', + 'style' => 'wp-block-audio' + ), + 'avatar' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/avatar', + 'title' => 'Avatar', + 'category' => 'theme', + 'description' => 'Add a user’s avatar.', + 'textdomain' => 'default', + 'attributes' => array( + 'userId' => array( + 'type' => 'number' + ), + 'size' => array( + 'type' => 'number', + 'default' => 96 + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => false + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self' + ) + ), + 'usesContext' => array( + 'postType', + 'postId', + 'commentId' + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'align' => true, + 'alignWide' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + '__experimentalBorder' => array( + '__experimentalSkipSerialization' => true, + 'radius' => true, + 'width' => true, + 'color' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true + ) + ), + 'color' => array( + 'text' => false, + 'background' => false + ), + 'filter' => array( + 'duotone' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'selectors' => array( + 'border' => '.wp-block-avatar img', + 'filter' => array( + 'duotone' => '.wp-block-avatar img' + ) + ), + 'editorStyle' => 'wp-block-avatar-editor', + 'style' => 'wp-block-avatar' + ), + 'block' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/block', + 'title' => 'Pattern', + 'category' => 'reusable', + 'description' => 'Reuse this design across your site.', + 'keywords' => array( + 'reusable' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'ref' => array( + 'type' => 'number' + ), + 'content' => array( + 'type' => 'object', + 'default' => array( + + ) + ) + ), + 'providesContext' => array( + 'pattern/overrides' => 'content' + ), + 'supports' => array( + 'customClassName' => false, + 'html' => false, + 'inserter' => false, + 'renaming' => false, + 'interactivity' => array( + 'clientNavigation' => true + ), + 'customCSS' => false + ) + ), + 'breadcrumbs' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/breadcrumbs', + 'title' => 'Breadcrumbs', + 'category' => 'theme', + 'description' => 'Display a breadcrumb trail showing the path to the current page.', + 'textdomain' => 'default', + 'attributes' => array( + 'prefersTaxonomy' => array( + 'type' => 'boolean', + 'default' => false + ), + 'separator' => array( + 'type' => 'string', + 'default' => '/' + ), + 'showHomeItem' => array( + 'type' => 'boolean', + 'default' => true + ), + 'showCurrentItem' => array( + 'type' => 'boolean', + 'default' => true + ), + 'showOnHomePage' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'usesContext' => array( + 'postId', + 'postType', + 'templateSlug' + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'align' => array( + 'wide', + 'full' + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => false, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-breadcrumbs' + ), + 'button' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/button', + 'title' => 'Button', + 'category' => 'design', + 'parent' => array( + 'core/buttons' + ), + 'description' => 'Prompt visitors to take action with a button-style link.', + 'keywords' => array( + 'link' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'tagName' => array( + 'type' => 'string', + 'enum' => array( + 'a', + 'button' + ), + 'default' => 'a' + ), + 'type' => array( + 'type' => 'string', + 'default' => 'button' + ), + 'url' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'a', + 'attribute' => 'href', + 'role' => 'content' + ), + 'title' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'a,button', + 'attribute' => 'title', + 'role' => 'content' + ), + 'text' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'a,button', + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'a', + 'attribute' => 'target', + 'role' => 'content' + ), + 'rel' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'a', + 'attribute' => 'rel', + 'role' => 'content' + ), + 'placeholder' => array( + 'type' => 'string' + ), + 'backgroundColor' => array( + 'type' => 'string' + ), + 'textColor' => array( + 'type' => 'string' + ), + 'gradient' => array( + 'type' => 'string' + ), + 'width' => array( + 'type' => 'number' + ) + ), + 'supports' => array( + 'anchor' => true, + 'splitting' => true, + 'align' => false, + 'alignWide' => false, + 'color' => array( + '__experimentalSkipSerialization' => true, + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'typography' => array( + '__experimentalSkipSerialization' => array( + 'fontSize', + 'lineHeight', + 'textAlign', + 'fontFamily', + 'fontWeight', + 'fontStyle', + 'textTransform', + 'textDecoration', + 'letterSpacing' + ), + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalWritingMode' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'reusable' => false, + 'shadow' => array( + '__experimentalSkipSerialization' => true + ), + 'spacing' => array( + '__experimentalSkipSerialization' => true, + 'padding' => array( + 'horizontal', + 'vertical' + ), + '__experimentalDefaultControls' => array( + 'padding' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalSkipSerialization' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'styles' => array( + array( + 'name' => 'fill', + 'label' => 'Fill', + 'isDefault' => true + ), + array( + 'name' => 'outline', + 'label' => 'Outline' + ) + ), + 'editorStyle' => 'wp-block-button-editor', + 'style' => 'wp-block-button', + 'selectors' => array( + 'root' => '.wp-block-button .wp-block-button__link', + 'typography' => array( + 'writingMode' => '.wp-block-button' + ) + ) + ), + 'buttons' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/buttons', + 'title' => 'Buttons', + 'category' => 'design', + 'allowedBlocks' => array( + 'core/button' + ), + 'description' => 'Prompt visitors to take action with a group of button-style links.', + 'keywords' => array( + 'link' + ), + 'textdomain' => 'default', + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + '__experimentalExposeControlsToChildren' => true, + 'color' => array( + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'spacing' => array( + 'blockGap' => array( + 'horizontal', + 'vertical' + ), + 'padding' => true, + 'margin' => array( + 'top', + 'bottom' + ), + '__experimentalDefaultControls' => array( + 'blockGap' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'layout' => array( + 'allowSwitching' => false, + 'allowInheriting' => false, + 'default' => array( + 'type' => 'flex' + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'listView' => true, + 'contentRole' => true + ), + 'editorStyle' => 'wp-block-buttons-editor', + 'style' => 'wp-block-buttons' + ), + 'calendar' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/calendar', + 'title' => 'Calendar', + 'category' => 'widgets', + 'description' => 'A calendar of your site’s posts.', + 'keywords' => array( + 'posts', + 'archive' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'month' => array( + 'type' => 'integer' + ), + 'year' => array( + 'type' => 'integer' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'html' => false, + 'color' => array( + 'link' => true, + '__experimentalSkipSerialization' => array( + 'text', + 'background' + ), + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ), + '__experimentalSelector' => 'table, th' + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-calendar' + ), + 'categories' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/categories', + 'title' => 'Terms List', + 'category' => 'widgets', + 'description' => 'Display a list of all terms of a given taxonomy.', + 'keywords' => array( + 'categories' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'taxonomy' => array( + 'type' => 'string', + 'default' => 'category' + ), + 'displayAsDropdown' => array( + 'type' => 'boolean', + 'default' => false + ), + 'showHierarchy' => array( + 'type' => 'boolean', + 'default' => false + ), + 'showPostCounts' => array( + 'type' => 'boolean', + 'default' => false + ), + 'showOnlyTopLevel' => array( + 'type' => 'boolean', + 'default' => false + ), + 'showEmpty' => array( + 'type' => 'boolean', + 'default' => false + ), + 'label' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'showLabel' => array( + 'type' => 'boolean', + 'default' => true + ) + ), + 'usesContext' => array( + 'enhancedPagination' + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'editorStyle' => 'wp-block-categories-editor', + 'style' => 'wp-block-categories' + ), + 'code' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/code', + 'title' => 'Code', + 'category' => 'text', + 'description' => 'Display code snippets that respect your spacing and tabs.', + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'code', + '__unstablePreserveWhiteSpace' => true, + 'role' => 'content' + ) + ), + 'supports' => array( + 'align' => array( + 'wide' + ), + 'anchor' => true, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'spacing' => array( + 'margin' => array( + 'top', + 'bottom' + ), + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'width' => true, + 'color' => true + ) + ), + 'color' => array( + 'text' => true, + 'background' => true, + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-code' + ), + 'column' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/column', + 'title' => 'Column', + 'category' => 'design', + 'parent' => array( + 'core/columns' + ), + 'description' => 'A single column within a columns block.', + 'textdomain' => 'default', + 'attributes' => array( + 'verticalAlignment' => array( + 'type' => 'string' + ), + 'width' => array( + 'type' => 'string' + ), + 'templateLock' => array( + 'type' => array( + 'string', + 'boolean' + ), + 'enum' => array( + 'all', + 'insert', + 'contentOnly', + false + ) + ) + ), + 'supports' => array( + '__experimentalOnEnter' => true, + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'heading' => true, + 'button' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'shadow' => true, + 'spacing' => array( + 'blockGap' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'padding' => true, + 'blockGap' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'layout' => true, + 'interactivity' => array( + 'clientNavigation' => true + ), + 'allowedBlocks' => true + ) + ), + 'columns' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/columns', + 'title' => 'Columns', + 'category' => 'design', + 'allowedBlocks' => array( + 'core/column' + ), + 'description' => 'Display content in multiple columns, with blocks added to each column.', + 'textdomain' => 'default', + 'attributes' => array( + 'verticalAlignment' => array( + 'type' => 'string' + ), + 'isStackedOnMobile' => array( + 'type' => 'boolean', + 'default' => true + ), + 'templateLock' => array( + 'type' => array( + 'string', + 'boolean' + ), + 'enum' => array( + 'all', + 'insert', + 'contentOnly', + false + ) + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + 'heading' => true, + 'button' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'blockGap' => array( + '__experimentalDefault' => '2em', + 'sides' => array( + 'horizontal', + 'vertical' + ) + ), + 'margin' => array( + 'top', + 'bottom' + ), + 'padding' => true, + '__experimentalDefaultControls' => array( + 'padding' => true, + 'blockGap' => true + ) + ), + 'layout' => array( + 'allowSwitching' => false, + 'allowInheriting' => false, + 'allowEditing' => false, + 'default' => array( + 'type' => 'flex', + 'flexWrap' => 'nowrap' + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'shadow' => true + ), + 'editorStyle' => 'wp-block-columns-editor', + 'style' => 'wp-block-columns' + ), + 'comment-author-name' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comment-author-name', + 'title' => 'Comment Author Name', + 'category' => 'theme', + 'ancestor' => array( + 'core/comment-template' + ), + 'description' => 'Displays the name of the author of the comment.', + 'textdomain' => 'default', + 'attributes' => array( + 'isLink' => array( + 'type' => 'boolean', + 'default' => true + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self' + ) + ), + 'usesContext' => array( + 'commentId' + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-comment-author-name' + ), + 'comment-content' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comment-content', + 'title' => 'Comment Content', + 'category' => 'theme', + 'ancestor' => array( + 'core/comment-template' + ), + 'description' => 'Displays the contents of a comment.', + 'textdomain' => 'default', + 'usesContext' => array( + 'commentId' + ), + 'supports' => array( + 'anchor' => true, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'spacing' => array( + 'padding' => array( + 'horizontal', + 'vertical' + ), + '__experimentalDefaultControls' => array( + 'padding' => true + ) + ), + 'html' => false + ), + 'style' => 'wp-block-comment-content' + ), + 'comment-date' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comment-date', + 'title' => 'Comment Date', + 'category' => 'theme', + 'ancestor' => array( + 'core/comment-template' + ), + 'description' => 'Displays the date on which the comment was posted.', + 'textdomain' => 'default', + 'attributes' => array( + 'format' => array( + 'type' => 'string' + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => true + ) + ), + 'usesContext' => array( + 'commentId' + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-comment-date' + ), + 'comment-edit-link' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comment-edit-link', + 'title' => 'Comment Edit Link', + 'category' => 'theme', + 'ancestor' => array( + 'core/comment-template' + ), + 'description' => 'Displays a link to edit the comment in the WordPress Dashboard. This link is only visible to users with the edit comment capability.', + 'textdomain' => 'default', + 'usesContext' => array( + 'commentId' + ), + 'attributes' => array( + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self' + ) + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'link' => true, + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'style' => 'wp-block-comment-edit-link' + ), + 'comment-reply-link' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comment-reply-link', + 'title' => 'Comment Reply Link', + 'category' => 'theme', + 'ancestor' => array( + 'core/comment-template' + ), + 'description' => 'Displays a link to reply to a comment.', + 'textdomain' => 'default', + 'usesContext' => array( + 'commentId' + ), + 'supports' => array( + 'anchor' => true, + 'color' => array( + 'gradients' => true, + 'link' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ), + 'html' => false + ), + 'style' => 'wp-block-comment-reply-link' + ), + 'comment-template' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comment-template', + 'title' => 'Comment Template', + 'category' => 'design', + 'parent' => array( + 'core/comments' + ), + 'description' => 'Contains the block elements used to display a comment, like the title, date, author, avatar and more.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId' + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'html' => false, + 'reusable' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-comment-template' + ), + 'comments' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comments', + 'title' => 'Comments', + 'category' => 'theme', + 'description' => 'An advanced block that allows displaying post comments using different visual configurations.', + 'textdomain' => 'default', + 'attributes' => array( + 'tagName' => array( + 'type' => 'string', + 'default' => 'div' + ), + 'legacy' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'gradients' => true, + 'heading' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'editorStyle' => 'wp-block-comments-editor', + 'usesContext' => array( + 'postId', + 'postType' + ) + ), + 'comments-pagination' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comments-pagination', + 'title' => 'Comments Pagination', + 'category' => 'theme', + 'parent' => array( + 'core/comments' + ), + 'allowedBlocks' => array( + 'core/comments-pagination-previous', + 'core/comments-pagination-numbers', + 'core/comments-pagination-next' + ), + 'description' => 'Displays a paginated navigation to next/previous set of comments, when applicable.', + 'textdomain' => 'default', + 'attributes' => array( + 'paginationArrow' => array( + 'type' => 'string', + 'default' => 'none' + ) + ), + 'example' => array( + 'attributes' => array( + 'paginationArrow' => 'none' + ) + ), + 'providesContext' => array( + 'comments/paginationArrow' => 'paginationArrow' + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'layout' => array( + 'allowSwitching' => false, + 'allowInheriting' => false, + 'default' => array( + 'type' => 'flex' + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-comments-pagination-editor', + 'style' => 'wp-block-comments-pagination' + ), + 'comments-pagination-next' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comments-pagination-next', + 'title' => 'Comments Next Page', + 'category' => 'theme', + 'parent' => array( + 'core/comments-pagination' + ), + 'description' => 'Displays the next comment\'s page link.', + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string' + ) + ), + 'usesContext' => array( + 'postId', + 'comments/paginationArrow' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ) + ), + 'comments-pagination-numbers' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comments-pagination-numbers', + 'title' => 'Comments Page Numbers', + 'category' => 'theme', + 'parent' => array( + 'core/comments-pagination' + ), + 'description' => 'Displays a list of page numbers for comments pagination.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'padding' => true + ) + ) + ) + ), + 'comments-pagination-previous' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comments-pagination-previous', + 'title' => 'Comments Previous Page', + 'category' => 'theme', + 'parent' => array( + 'core/comments-pagination' + ), + 'description' => 'Displays the previous comment\'s page link.', + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string' + ) + ), + 'usesContext' => array( + 'postId', + 'comments/paginationArrow' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ) + ), + 'comments-title' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/comments-title', + 'title' => 'Comments Title', + 'category' => 'theme', + 'ancestor' => array( + 'core/comments' + ), + 'description' => 'Displays a title with the number of comments.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId', + 'postType' + ), + 'attributes' => array( + 'showPostTitle' => array( + 'type' => 'boolean', + 'default' => true + ), + 'showCommentsCount' => array( + 'type' => 'boolean', + 'default' => true + ), + 'level' => array( + 'type' => 'number', + 'default' => 2 + ), + 'levelOptions' => array( + 'type' => 'array' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'html' => false, + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ), + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true, + '__experimentalFontFamily' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ) + ), + 'cover' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/cover', + 'title' => 'Cover', + 'category' => 'media', + 'description' => 'Add an image or video with a text overlay.', + 'textdomain' => 'default', + 'attributes' => array( + 'url' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'useFeaturedImage' => array( + 'type' => 'boolean', + 'default' => false + ), + 'id' => array( + 'type' => 'number' + ), + 'alt' => array( + 'type' => 'string', + 'default' => '' + ), + 'hasParallax' => array( + 'type' => 'boolean', + 'default' => false + ), + 'isRepeated' => array( + 'type' => 'boolean', + 'default' => false + ), + 'dimRatio' => array( + 'type' => 'number', + 'default' => 100 + ), + 'overlayColor' => array( + 'type' => 'string' + ), + 'customOverlayColor' => array( + 'type' => 'string' + ), + 'isUserOverlayColor' => array( + 'type' => 'boolean' + ), + 'backgroundType' => array( + 'type' => 'string', + 'default' => 'image' + ), + 'focalPoint' => array( + 'type' => 'object' + ), + 'minHeight' => array( + 'type' => 'number' + ), + 'minHeightUnit' => array( + 'type' => 'string' + ), + 'gradient' => array( + 'type' => 'string' + ), + 'customGradient' => array( + 'type' => 'string' + ), + 'contentPosition' => array( + 'type' => 'string' + ), + 'isDark' => array( + 'type' => 'boolean', + 'default' => true + ), + 'templateLock' => array( + 'type' => array( + 'string', + 'boolean' + ), + 'enum' => array( + 'all', + 'insert', + 'contentOnly', + false + ) + ), + 'tagName' => array( + 'type' => 'string', + 'default' => 'div' + ), + 'sizeSlug' => array( + 'type' => 'string' + ), + 'poster' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'poster' + ) + ), + 'usesContext' => array( + 'postId', + 'postType' + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'html' => false, + 'shadow' => true, + 'spacing' => array( + 'padding' => true, + 'margin' => array( + 'top', + 'bottom' + ), + 'blockGap' => true, + '__experimentalDefaultControls' => array( + 'padding' => true, + 'blockGap' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'color' => array( + 'heading' => true, + 'text' => true, + 'background' => false, + '__experimentalSkipSerialization' => array( + 'gradients' + ), + 'enableContrastChecker' => false + ), + 'dimensions' => array( + 'aspectRatio' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'layout' => array( + 'allowJustification' => false + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'filter' => array( + 'duotone' => true + ), + 'allowedBlocks' => true + ), + 'selectors' => array( + 'filter' => array( + 'duotone' => '.wp-block-cover > .wp-block-cover__image-background, .wp-block-cover > .wp-block-cover__video-background' + ) + ), + 'editorStyle' => 'wp-block-cover-editor', + 'style' => 'wp-block-cover' + ), + 'details' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/details', + 'title' => 'Details', + 'category' => 'text', + 'description' => 'Hide and show additional content.', + 'keywords' => array( + 'summary', + 'toggle', + 'disclosure' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'showContent' => array( + 'type' => 'boolean', + 'default' => false + ), + 'summary' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'summary', + 'role' => 'content' + ), + 'name' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'name', + 'selector' => '.wp-block-details' + ), + 'placeholder' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + '__experimentalOnEnter' => true, + 'align' => array( + 'wide', + 'full' + ), + 'anchor' => true, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'width' => true, + 'style' => true + ), + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + 'blockGap' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'layout' => array( + 'allowEditing' => false + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'allowedBlocks' => true + ), + 'editorStyle' => 'wp-block-details-editor', + 'style' => 'wp-block-details' + ), + 'embed' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/embed', + 'title' => 'Embed', + 'category' => 'embed', + 'description' => 'Add a block that displays content pulled from other sites, like Twitter or YouTube.', + 'textdomain' => 'default', + 'attributes' => array( + 'url' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'caption' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'figcaption', + 'role' => 'content' + ), + 'type' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'providerNameSlug' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'allowResponsive' => array( + 'type' => 'boolean', + 'default' => true + ), + 'responsive' => array( + 'type' => 'boolean', + 'default' => false, + 'role' => 'content' + ), + 'previewable' => array( + 'type' => 'boolean', + 'default' => true, + 'role' => 'content' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'spacing' => array( + 'margin' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-embed-editor', + 'style' => 'wp-block-embed' + ), + 'file' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/file', + 'title' => 'File', + 'category' => 'media', + 'description' => 'Add a link to a downloadable file.', + 'keywords' => array( + 'document', + 'pdf', + 'download' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'id' => array( + 'type' => 'number' + ), + 'blob' => array( + 'type' => 'string', + 'role' => 'local' + ), + 'href' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'fileId' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'a:not([download])', + 'attribute' => 'id' + ), + 'fileName' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'a:not([download])', + 'role' => 'content' + ), + 'textLinkHref' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'a:not([download])', + 'attribute' => 'href', + 'role' => 'content' + ), + 'textLinkTarget' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'a:not([download])', + 'attribute' => 'target' + ), + 'showDownloadButton' => array( + 'type' => 'boolean', + 'default' => true + ), + 'downloadButtonText' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'a[download]', + 'role' => 'content' + ), + 'displayPreview' => array( + 'type' => 'boolean' + ), + 'previewHeight' => array( + 'type' => 'number', + 'default' => 600 + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true, + 'link' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'interactivity' => true + ), + 'editorStyle' => 'wp-block-file-editor', + 'style' => 'wp-block-file' + ), + 'footnotes' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/footnotes', + 'title' => 'Footnotes', + 'category' => 'text', + 'description' => 'Display footnotes added to the page.', + 'keywords' => array( + 'references' + ), + 'textdomain' => 'default', + 'usesContext' => array( + 'postId', + 'postType' + ), + 'supports' => array( + 'anchor' => true, + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => false, + 'color' => false, + 'width' => false, + 'style' => false + ) + ), + 'color' => array( + 'background' => true, + 'link' => true, + 'text' => true, + '__experimentalDefaultControls' => array( + 'link' => true, + 'text' => true + ) + ), + 'html' => false, + 'multiple' => false, + 'reusable' => false, + 'inserter' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalTextDecoration' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextTransform' => true, + '__experimentalWritingMode' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-footnotes' + ), + 'freeform' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/freeform', + 'title' => 'Classic', + 'category' => 'text', + 'description' => 'Use the classic WordPress editor.', + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'string', + 'source' => 'raw' + ) + ), + 'supports' => array( + 'className' => false, + 'customClassName' => false, + 'lock' => false, + 'reusable' => false, + 'renaming' => false, + 'visibility' => false, + 'customCSS' => false + ), + 'editorStyle' => 'wp-block-freeform-editor' + ), + 'gallery' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/gallery', + 'title' => 'Gallery', + 'category' => 'media', + 'usesContext' => array( + 'galleryId' + ), + 'allowedBlocks' => array( + 'core/image' + ), + 'description' => 'Display multiple images in a rich gallery.', + 'keywords' => array( + 'images', + 'photos' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'images' => array( + 'type' => 'array', + 'default' => array( + + ), + 'source' => 'query', + 'selector' => '.blocks-gallery-item', + 'query' => array( + 'url' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'src' + ), + 'fullUrl' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'data-full-url' + ), + 'link' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'data-link' + ), + 'alt' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'alt', + 'default' => '' + ), + 'id' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'data-id' + ), + 'caption' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => '.blocks-gallery-item__caption' + ) + ) + ), + 'ids' => array( + 'type' => 'array', + 'items' => array( + 'type' => 'number' + ), + 'default' => array( + + ) + ), + 'navigationButtonType' => array( + 'type' => 'string', + 'default' => 'icon', + 'enum' => array( + 'icon', + 'text', + 'both' + ) + ), + 'shortCodeTransforms' => array( + 'type' => 'array', + 'items' => array( + 'type' => 'object' + ), + 'default' => array( + + ) + ), + 'columns' => array( + 'type' => 'number', + 'minimum' => 1, + 'maximum' => 8 + ), + 'caption' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => '.blocks-gallery-caption', + 'role' => 'content' + ), + 'imageCrop' => array( + 'type' => 'boolean', + 'default' => true + ), + 'randomOrder' => array( + 'type' => 'boolean', + 'default' => false + ), + 'fixedHeight' => array( + 'type' => 'boolean', + 'default' => true + ), + 'linkTarget' => array( + 'type' => 'string' + ), + 'linkTo' => array( + 'type' => 'string' + ), + 'sizeSlug' => array( + 'type' => 'string', + 'default' => 'large' + ), + 'allowResize' => array( + 'type' => 'boolean', + 'default' => false + ), + 'aspectRatio' => array( + 'type' => 'string', + 'default' => 'auto' + ) + ), + 'providesContext' => array( + 'allowResize' => 'allowResize', + 'imageCrop' => 'imageCrop', + 'fixedHeight' => 'fixedHeight', + 'navigationButtonType' => 'navigationButtonType' + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true + ) + ), + 'html' => false, + 'units' => array( + 'px', + 'em', + 'rem', + 'vh', + 'vw' + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + 'blockGap' => array( + 'horizontal', + 'vertical' + ), + '__experimentalSkipSerialization' => array( + 'blockGap' + ), + '__experimentalDefaultControls' => array( + 'blockGap' => true, + 'margin' => false, + 'padding' => false + ) + ), + 'color' => array( + 'text' => false, + 'background' => true, + 'gradients' => true + ), + 'layout' => array( + 'allowSwitching' => false, + 'allowInheriting' => false, + 'allowEditing' => false, + 'default' => array( + 'type' => 'flex' + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'listView' => true + ), + 'editorStyle' => 'wp-block-gallery-editor', + 'style' => 'wp-block-gallery' + ), + 'group' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/group', + 'title' => 'Group', + 'category' => 'design', + 'description' => 'Gather blocks in a layout container.', + 'keywords' => array( + 'container', + 'wrapper', + 'row', + 'section' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'tagName' => array( + 'type' => 'string', + 'default' => 'div' + ), + 'templateLock' => array( + 'type' => array( + 'string', + 'boolean' + ), + 'enum' => array( + 'all', + 'insert', + 'contentOnly', + false + ) + ) + ), + 'supports' => array( + '__experimentalOnEnter' => true, + '__experimentalOnMerge' => true, + '__experimentalSettings' => true, + 'align' => array( + 'wide', + 'full' + ), + 'anchor' => true, + 'ariaLabel' => true, + 'html' => false, + 'background' => array( + 'backgroundImage' => true, + 'backgroundSize' => true, + '__experimentalDefaultControls' => array( + 'backgroundImage' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'heading' => true, + 'button' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'shadow' => true, + 'spacing' => array( + 'margin' => array( + 'top', + 'bottom' + ), + 'padding' => true, + 'blockGap' => true, + '__experimentalDefaultControls' => array( + 'padding' => true, + 'blockGap' => true + ) + ), + 'dimensions' => array( + 'minHeight' => true + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'position' => array( + 'sticky' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'layout' => array( + 'allowSizingOnChildren' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'allowedBlocks' => true + ), + 'editorStyle' => 'wp-block-group-editor', + 'style' => 'wp-block-group' + ), + 'heading' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/heading', + 'title' => 'Heading', + 'category' => 'text', + 'description' => 'Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.', + 'keywords' => array( + 'title', + 'subtitle' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'h1,h2,h3,h4,h5,h6', + 'role' => 'content' + ), + 'level' => array( + 'type' => 'number', + 'default' => 2 + ), + 'levelOptions' => array( + 'type' => 'array' + ), + 'placeholder' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'align' => array( + 'wide', + 'full' + ), + 'anchor' => true, + 'className' => true, + 'splitting' => true, + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalWritingMode' => true, + 'fitText' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__unstablePasteTextInline' => true, + '__experimentalSlashInserter' => true, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-heading-editor', + 'style' => 'wp-block-heading' + ), + 'home-link' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/home-link', + 'category' => 'design', + 'parent' => array( + 'core/navigation' + ), + 'title' => 'Home Link', + 'description' => 'Create a link that always points to the homepage of the site. Usually not necessary if there is already a site title link present in the header.', + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string', + 'role' => 'content' + ) + ), + 'usesContext' => array( + 'textColor', + 'customTextColor', + 'backgroundColor', + 'customBackgroundColor', + 'fontSize', + 'customFontSize', + 'style' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-home-link-editor', + 'style' => 'wp-block-home-link' + ), + 'html' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/html', + 'title' => 'Custom HTML', + 'category' => 'widgets', + 'description' => 'Add custom HTML code and preview it as you edit.', + 'keywords' => array( + 'embed' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'string', + 'source' => 'raw', + 'role' => 'content' + ) + ), + 'supports' => array( + 'customClassName' => false, + 'className' => false, + 'html' => false, + 'interactivity' => array( + 'clientNavigation' => true + ), + 'customCSS' => false, + 'visibility' => false + ), + 'editorStyle' => 'wp-block-html-editor' + ), + 'icon' => array( + 'apiVersion' => 3, + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'name' => 'core/icon', + 'title' => 'Icon', + 'category' => 'media', + 'description' => 'Insert an SVG icon.', + 'keywords' => array( + 'icon', + 'svg' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'icon' => array( + 'type' => 'string', + 'role' => 'content' + ) + ), + 'supports' => array( + 'anchor' => true, + 'ariaLabel' => array( + '__experimentalSkipSerialization' => true + ), + 'align' => array( + 'left', + 'center', + 'right' + ), + 'html' => false, + 'color' => array( + 'background' => true, + 'text' => true, + '__experimentalSkipSerialization' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalSkipSerialization' => true, + '__experimentalDefaultControls' => array( + 'color' => false, + 'radius' => false, + 'style' => false, + 'width' => false + ) + ), + 'spacing' => array( + 'padding' => true, + 'margin' => true, + '__experimentalSkipSerialization' => array( + 'padding' + ), + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'dimensions' => array( + 'width' => true, + '__experimentalSkipSerialization' => array( + 'width' + ), + '__experimentalDefaultControls' => array( + 'width' => true + ) + ) + ), + 'selectors' => array( + 'root' => '.wp-block-icon svg', + 'css' => '.wp-block-icon', + 'spacing' => array( + 'margin' => '.wp-block-icon' + ) + ), + 'style' => 'wp-block-icon', + 'editorStyle' => 'wp-block-icon-editor' + ), + 'image' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/image', + 'title' => 'Image', + 'category' => 'media', + 'usesContext' => array( + 'allowResize', + 'imageCrop', + 'fixedHeight', + 'navigationButtonType', + 'postId', + 'postType', + 'queryId', + 'galleryId' + ), + 'description' => 'Insert an image to make a visual statement.', + 'keywords' => array( + 'img', + 'photo', + 'picture' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'blob' => array( + 'type' => 'string', + 'role' => 'local' + ), + 'url' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'src', + 'role' => 'content' + ), + 'alt' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'alt', + 'default' => '', + 'role' => 'content' + ), + 'caption' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'figcaption', + 'role' => 'content' + ), + 'lightbox' => array( + 'type' => 'object', + 'enabled' => array( + 'type' => 'boolean' + ) + ), + 'title' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'img', + 'attribute' => 'title', + 'role' => 'content' + ), + 'href' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure > a', + 'attribute' => 'href', + 'role' => 'content' + ), + 'rel' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure > a', + 'attribute' => 'rel' + ), + 'linkClass' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure > a', + 'attribute' => 'class' + ), + 'id' => array( + 'type' => 'number', + 'role' => 'content' + ), + 'width' => array( + 'type' => 'string' + ), + 'height' => array( + 'type' => 'string' + ), + 'aspectRatio' => array( + 'type' => 'string' + ), + 'scale' => array( + 'type' => 'string' + ), + 'focalPoint' => array( + 'type' => 'object' + ), + 'sizeSlug' => array( + 'type' => 'string' + ), + 'linkDestination' => array( + 'type' => 'string' + ), + 'linkTarget' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure > a', + 'attribute' => 'target' + ) + ), + 'supports' => array( + 'interactivity' => true, + 'align' => array( + 'left', + 'center', + 'right', + 'wide', + 'full' + ), + 'anchor' => true, + 'color' => array( + 'text' => false, + 'background' => false + ), + 'filter' => array( + 'duotone' => true + ), + 'spacing' => array( + 'margin' => true + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'width' => true, + '__experimentalSkipSerialization' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'width' => true + ) + ), + 'shadow' => array( + '__experimentalSkipSerialization' => true + ) + ), + 'selectors' => array( + 'border' => '.wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder', + 'shadow' => '.wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder', + 'filter' => array( + 'duotone' => '.wp-block-image img, .wp-block-image .components-placeholder' + ) + ), + 'styles' => array( + array( + 'name' => 'default', + 'label' => 'Default', + 'isDefault' => true + ), + array( + 'name' => 'rounded', + 'label' => 'Rounded' + ) + ), + 'editorStyle' => 'wp-block-image-editor', + 'style' => 'wp-block-image' + ), + 'latest-comments' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/latest-comments', + 'title' => 'Latest Comments', + 'category' => 'widgets', + 'description' => 'Display a list of your most recent comments.', + 'keywords' => array( + 'recent comments' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'commentsToShow' => array( + 'type' => 'number', + 'default' => 5, + 'minimum' => 1, + 'maximum' => 100 + ), + 'displayAvatar' => array( + 'type' => 'boolean', + 'default' => true + ), + 'displayDate' => array( + 'type' => 'boolean', + 'default' => true + ), + 'displayContent' => array( + 'type' => 'string', + 'default' => 'excerpt', + 'enum' => array( + 'none', + 'excerpt', + 'full' + ) + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-latest-comments' + ), + 'latest-posts' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/latest-posts', + 'title' => 'Latest Posts', + 'category' => 'widgets', + 'description' => 'Display a list of your most recent posts.', + 'keywords' => array( + 'recent posts' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'categories' => array( + 'type' => 'array', + 'items' => array( + 'type' => 'object' + ) + ), + 'selectedAuthor' => array( + 'type' => 'number' + ), + 'postsToShow' => array( + 'type' => 'number', + 'default' => 5 + ), + 'displayPostContent' => array( + 'type' => 'boolean', + 'default' => false + ), + 'displayPostContentRadio' => array( + 'type' => 'string', + 'default' => 'excerpt' + ), + 'excerptLength' => array( + 'type' => 'number', + 'default' => 55 + ), + 'displayAuthor' => array( + 'type' => 'boolean', + 'default' => false + ), + 'displayPostDate' => array( + 'type' => 'boolean', + 'default' => false + ), + 'postLayout' => array( + 'type' => 'string', + 'default' => 'list' + ), + 'columns' => array( + 'type' => 'number', + 'default' => 3 + ), + 'order' => array( + 'type' => 'string', + 'default' => 'desc' + ), + 'orderBy' => array( + 'type' => 'string', + 'default' => 'date' + ), + 'displayFeaturedImage' => array( + 'type' => 'boolean', + 'default' => false + ), + 'featuredImageAlign' => array( + 'type' => 'string', + 'enum' => array( + 'left', + 'center', + 'right' + ) + ), + 'featuredImageSizeSlug' => array( + 'type' => 'string', + 'default' => 'thumbnail' + ), + 'featuredImageSizeWidth' => array( + 'type' => 'number', + 'default' => null + ), + 'featuredImageSizeHeight' => array( + 'type' => 'number', + 'default' => null + ), + 'addLinkToFeaturedImage' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-latest-posts-editor', + 'style' => 'wp-block-latest-posts' + ), + 'legacy-widget' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/legacy-widget', + 'title' => 'Legacy Widget', + 'category' => 'widgets', + 'description' => 'Display a legacy widget.', + 'textdomain' => 'default', + 'attributes' => array( + 'id' => array( + 'type' => 'string', + 'default' => null + ), + 'idBase' => array( + 'type' => 'string', + 'default' => null + ), + 'instance' => array( + 'type' => 'object', + 'default' => null + ) + ), + 'supports' => array( + 'html' => false, + 'customClassName' => false, + 'reusable' => false + ), + 'editorStyle' => 'wp-block-legacy-widget-editor' + ), + 'list' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/list', + 'title' => 'List', + 'category' => 'text', + 'allowedBlocks' => array( + 'core/list-item' + ), + 'description' => 'An organized collection of items displayed in a specific order.', + 'keywords' => array( + 'bullet list', + 'ordered list', + 'numbered list' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'ordered' => array( + 'type' => 'boolean', + 'default' => false, + 'role' => 'content' + ), + 'values' => array( + 'type' => 'string', + 'source' => 'html', + 'selector' => 'ol,ul', + 'multiline' => 'li', + 'default' => '', + 'role' => 'content' + ), + 'type' => array( + 'type' => 'string' + ), + 'start' => array( + 'type' => 'number' + ), + 'reversed' => array( + 'type' => 'boolean' + ), + 'placeholder' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + '__unstablePasteTextInline' => true, + '__experimentalOnMerge' => true, + '__experimentalSlashInserter' => true, + 'interactivity' => array( + 'clientNavigation' => true + ), + 'listView' => true + ), + 'selectors' => array( + 'border' => '.wp-block-list:not(.wp-block-list .wp-block-list)' + ), + 'editorStyle' => 'wp-block-list-editor', + 'style' => 'wp-block-list' + ), + 'list-item' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/list-item', + 'title' => 'List Item', + 'category' => 'text', + 'parent' => array( + 'core/list' + ), + 'allowedBlocks' => array( + 'core/list' + ), + 'description' => 'An individual item within a list.', + 'textdomain' => 'default', + 'attributes' => array( + 'placeholder' => array( + 'type' => 'string' + ), + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'li', + 'role' => 'content' + ) + ), + 'supports' => array( + 'anchor' => true, + 'className' => false, + 'splitting' => true, + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + 'background' => true, + '__experimentalDefaultControls' => array( + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'selectors' => array( + 'root' => '.wp-block-list > li', + 'border' => '.wp-block-list:not(.wp-block-list .wp-block-list) > li' + ) + ), + 'loginout' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/loginout', + 'title' => 'Login/out', + 'category' => 'theme', + 'description' => 'Show login & logout links.', + 'keywords' => array( + 'login', + 'logout', + 'form' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'displayLoginAsForm' => array( + 'type' => 'boolean', + 'default' => false + ), + 'redirectToCurrent' => array( + 'type' => 'boolean', + 'default' => true + ) + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'className' => true, + 'color' => array( + 'background' => true, + 'text' => false, + 'gradients' => true, + 'link' => true + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-loginout' + ), + 'math' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/math', + 'title' => 'Math', + 'category' => 'text', + 'description' => 'Display mathematical notation using LaTeX.', + 'keywords' => array( + 'equation', + 'formula', + 'latex', + 'mathematics' + ), + 'textdomain' => 'default', + 'supports' => array( + 'anchor' => true, + 'html' => false, + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ), + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ) + ), + 'attributes' => array( + 'latex' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'mathML' => array( + 'type' => 'string', + 'source' => 'html', + 'selector' => 'math' + ) + ) + ), + 'media-text' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/media-text', + 'title' => 'Media & Text', + 'category' => 'media', + 'description' => 'Set media and words side-by-side for a richer layout.', + 'keywords' => array( + 'image', + 'video' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'align' => array( + 'type' => 'string', + 'default' => 'none' + ), + 'mediaAlt' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure img', + 'attribute' => 'alt', + 'default' => '', + 'role' => 'content' + ), + 'mediaPosition' => array( + 'type' => 'string', + 'default' => 'left' + ), + 'mediaId' => array( + 'type' => 'number', + 'role' => 'content' + ), + 'mediaUrl' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure video,figure img', + 'attribute' => 'src', + 'role' => 'content' + ), + 'mediaLink' => array( + 'type' => 'string' + ), + 'linkDestination' => array( + 'type' => 'string' + ), + 'linkTarget' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure a', + 'attribute' => 'target' + ), + 'href' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure a', + 'attribute' => 'href', + 'role' => 'content' + ), + 'rel' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure a', + 'attribute' => 'rel' + ), + 'linkClass' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'figure a', + 'attribute' => 'class' + ), + 'mediaType' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'mediaWidth' => array( + 'type' => 'number', + 'default' => 50 + ), + 'mediaSizeSlug' => array( + 'type' => 'string' + ), + 'isStackedOnMobile' => array( + 'type' => 'boolean', + 'default' => true + ), + 'verticalAlignment' => array( + 'type' => 'string' + ), + 'imageFill' => array( + 'type' => 'boolean' + ), + 'focalPoint' => array( + 'type' => 'object' + ), + 'useFeaturedImage' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'usesContext' => array( + 'postId', + 'postType' + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'heading' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'allowedBlocks' => true + ), + 'editorStyle' => 'wp-block-media-text-editor', + 'style' => 'wp-block-media-text' + ), + 'missing' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/missing', + 'title' => 'Unsupported', + 'category' => 'text', + 'description' => 'Your site doesn’t include support for this block.', + 'textdomain' => 'default', + 'attributes' => array( + 'originalName' => array( + 'type' => 'string' + ), + 'originalUndelimitedContent' => array( + 'type' => 'string' + ), + 'originalContent' => array( + 'type' => 'string', + 'source' => 'raw' + ) + ), + 'supports' => array( + 'className' => false, + 'customClassName' => false, + 'inserter' => false, + 'html' => false, + 'lock' => false, + 'reusable' => false, + 'renaming' => false, + 'visibility' => false, + 'interactivity' => array( + 'clientNavigation' => true + ), + 'customCSS' => false + ) + ), + 'more' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/more', + 'title' => 'More', + 'category' => 'design', + 'description' => 'Content before this block will be shown in the excerpt on your archives page.', + 'keywords' => array( + 'read more' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'customText' => array( + 'type' => 'string', + 'default' => '', + 'role' => 'content' + ), + 'noTeaser' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'supports' => array( + 'customClassName' => false, + 'className' => false, + 'html' => false, + 'multiple' => false, + 'visibility' => false, + 'interactivity' => array( + 'clientNavigation' => true + ), + 'customCSS' => false + ), + 'editorStyle' => 'wp-block-more-editor' + ), + 'navigation' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/navigation', + 'title' => 'Navigation', + 'category' => 'theme', + 'allowedBlocks' => array( + 'core/navigation-link', + 'core/search', + 'core/social-links', + 'core/page-list', + 'core/spacer', + 'core/home-link', + 'core/icon', + 'core/site-title', + 'core/site-logo', + 'core/navigation-submenu', + 'core/loginout', + 'core/buttons' + ), + 'description' => 'A collection of blocks that allow visitors to get around your site.', + 'keywords' => array( + 'menu', + 'navigation', + 'links' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'ref' => array( + 'type' => 'number' + ), + 'textColor' => array( + 'type' => 'string' + ), + 'customTextColor' => array( + 'type' => 'string' + ), + 'rgbTextColor' => array( + 'type' => 'string' + ), + 'backgroundColor' => array( + 'type' => 'string' + ), + 'customBackgroundColor' => array( + 'type' => 'string' + ), + 'rgbBackgroundColor' => array( + 'type' => 'string' + ), + 'showSubmenuIcon' => array( + 'type' => 'boolean', + 'default' => true + ), + 'submenuVisibility' => array( + 'type' => 'string', + 'enum' => array( + 'hover', + 'click', + 'always' + ), + 'default' => 'hover' + ), + 'overlayMenu' => array( + 'type' => 'string', + 'default' => 'mobile' + ), + 'overlay' => array( + 'type' => 'string' + ), + 'icon' => array( + 'type' => 'string', + 'default' => 'handle' + ), + 'hasIcon' => array( + 'type' => 'boolean', + 'default' => true + ), + '__unstableLocation' => array( + 'type' => 'string' + ), + 'overlayBackgroundColor' => array( + 'type' => 'string' + ), + 'customOverlayBackgroundColor' => array( + 'type' => 'string' + ), + 'overlayTextColor' => array( + 'type' => 'string' + ), + 'customOverlayTextColor' => array( + 'type' => 'string' + ), + 'maxNestingLevel' => array( + 'type' => 'number', + 'default' => 5 + ), + 'templateLock' => array( + 'type' => array( + 'string', + 'boolean' + ), + 'enum' => array( + 'all', + 'insert', + 'contentOnly', + false + ) + ) + ), + 'providesContext' => array( + 'textColor' => 'textColor', + 'customTextColor' => 'customTextColor', + 'backgroundColor' => 'backgroundColor', + 'customBackgroundColor' => 'customBackgroundColor', + 'overlayTextColor' => 'overlayTextColor', + 'customOverlayTextColor' => 'customOverlayTextColor', + 'overlayBackgroundColor' => 'overlayBackgroundColor', + 'customOverlayBackgroundColor' => 'customOverlayBackgroundColor', + 'fontSize' => 'fontSize', + 'customFontSize' => 'customFontSize', + 'showSubmenuIcon' => 'showSubmenuIcon', + 'submenuVisibility' => 'submenuVisibility', + 'openSubmenusOnClick' => 'openSubmenusOnClick', + 'style' => 'style', + 'maxNestingLevel' => 'maxNestingLevel' + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'ariaLabel' => true, + 'contentRole' => true, + 'html' => false, + 'inserter' => true, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalTextTransform' => true, + '__experimentalFontFamily' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextDecoration' => true, + '__experimentalSkipSerialization' => array( + 'textDecoration' + ), + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'spacing' => array( + 'blockGap' => true, + 'units' => array( + 'px', + 'em', + 'rem', + 'vh', + 'vw' + ), + '__experimentalDefaultControls' => array( + 'blockGap' => true + ) + ), + 'layout' => array( + 'allowSwitching' => false, + 'allowInheriting' => false, + 'allowVerticalAlignment' => false, + 'allowSizingOnChildren' => true, + 'default' => array( + 'type' => 'flex' + ) + ), + 'interactivity' => true, + 'renaming' => false + ), + 'editorStyle' => 'wp-block-navigation-editor', + 'style' => 'wp-block-navigation' + ), + 'navigation-link' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/navigation-link', + 'title' => 'Custom Link', + 'category' => 'design', + 'parent' => array( + 'core/navigation' + ), + 'allowedBlocks' => array( + 'core/navigation-link', + 'core/navigation-submenu', + 'core/page-list' + ), + 'description' => 'Add a page, link, or another item to your navigation.', + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'type' => array( + 'type' => 'string' + ), + 'description' => array( + 'type' => 'string' + ), + 'rel' => array( + 'type' => 'string' + ), + 'id' => array( + 'type' => 'number' + ), + 'opensInNewTab' => array( + 'type' => 'boolean', + 'default' => false + ), + 'url' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'title' => array( + 'type' => 'string' + ), + 'kind' => array( + 'type' => 'string' + ), + 'isTopLevelLink' => array( + 'type' => 'boolean' + ) + ), + 'usesContext' => array( + 'textColor', + 'customTextColor', + 'backgroundColor', + 'customBackgroundColor', + 'overlayTextColor', + 'customOverlayTextColor', + 'overlayBackgroundColor', + 'customOverlayBackgroundColor', + 'fontSize', + 'customFontSize', + 'showSubmenuIcon', + 'maxNestingLevel', + 'style' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + '__experimentalSlashInserter' => true, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'renaming' => false, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-navigation-link-editor', + 'style' => 'wp-block-navigation-link' + ), + 'navigation-overlay-close' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/navigation-overlay-close', + 'title' => 'Navigation Overlay Close', + 'category' => 'design', + 'description' => 'A customizable button to close overlays.', + 'keywords' => array( + 'close', + 'overlay', + 'navigation', + 'menu' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'displayMode' => array( + 'type' => 'string', + 'enum' => array( + 'icon', + 'text', + 'both' + ), + 'default' => 'icon' + ), + 'text' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'color' => array( + 'gradients' => false, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'padding' => true, + '__experimentalDefaultControls' => array( + 'padding' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ) + ), + 'style' => 'wp-block-navigation-overlay-close' + ), + 'navigation-submenu' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/navigation-submenu', + 'title' => 'Submenu', + 'category' => 'design', + 'parent' => array( + 'core/navigation' + ), + 'description' => 'Add a submenu to your navigation.', + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'type' => array( + 'type' => 'string' + ), + 'description' => array( + 'type' => 'string' + ), + 'rel' => array( + 'type' => 'string' + ), + 'id' => array( + 'type' => 'number' + ), + 'opensInNewTab' => array( + 'type' => 'boolean', + 'default' => false + ), + 'url' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'title' => array( + 'type' => 'string' + ), + 'kind' => array( + 'type' => 'string' + ), + 'isTopLevelItem' => array( + 'type' => 'boolean' + ) + ), + 'usesContext' => array( + 'textColor', + 'customTextColor', + 'backgroundColor', + 'customBackgroundColor', + 'overlayTextColor', + 'customOverlayTextColor', + 'overlayBackgroundColor', + 'customOverlayBackgroundColor', + 'fontSize', + 'customFontSize', + 'showSubmenuIcon', + 'maxNestingLevel', + 'openSubmenusOnClick', + 'submenuVisibility', + 'style' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-navigation-submenu-editor', + 'style' => 'wp-block-navigation-submenu' + ), + 'nextpage' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/nextpage', + 'title' => 'Page Break', + 'category' => 'design', + 'description' => 'Separate your content into a multi-page experience.', + 'keywords' => array( + 'next page', + 'pagination' + ), + 'parent' => array( + 'core/post-content' + ), + 'textdomain' => 'default', + 'supports' => array( + 'anchor' => true, + 'customClassName' => false, + 'className' => false, + 'html' => false, + 'visibility' => false, + 'interactivity' => array( + 'clientNavigation' => true + ), + 'customCSS' => false + ), + 'editorStyle' => 'wp-block-nextpage-editor' + ), + 'page-list' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/page-list', + 'title' => 'Page List', + 'category' => 'widgets', + 'allowedBlocks' => array( + 'core/page-list-item' + ), + 'description' => 'Display a list of all pages.', + 'keywords' => array( + 'menu', + 'navigation' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'parentPageID' => array( + 'type' => 'integer', + 'default' => 0 + ), + 'isNested' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'usesContext' => array( + 'textColor', + 'customTextColor', + 'backgroundColor', + 'customBackgroundColor', + 'overlayTextColor', + 'customOverlayTextColor', + 'overlayBackgroundColor', + 'customOverlayBackgroundColor', + 'fontSize', + 'customFontSize', + 'showSubmenuIcon', + 'style', + 'openSubmenusOnClick', + 'submenuVisibility' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'color' => array( + 'text' => true, + 'background' => true, + 'link' => true, + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ), + 'spacing' => array( + 'padding' => true, + 'margin' => true, + '__experimentalDefaultControls' => array( + 'padding' => false, + 'margin' => false + ) + ), + 'contentRole' => true + ), + 'editorStyle' => 'wp-block-page-list-editor', + 'style' => 'wp-block-page-list' + ), + 'page-list-item' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/page-list-item', + 'title' => 'Page List Item', + 'category' => 'widgets', + 'parent' => array( + 'core/page-list' + ), + 'description' => 'Displays a page inside a list of all pages.', + 'keywords' => array( + 'page', + 'menu', + 'navigation' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'id' => array( + 'type' => 'number' + ), + 'label' => array( + 'type' => 'string' + ), + 'title' => array( + 'type' => 'string' + ), + 'link' => array( + 'type' => 'string' + ), + 'hasChildren' => array( + 'type' => 'boolean' + ) + ), + 'usesContext' => array( + 'textColor', + 'customTextColor', + 'backgroundColor', + 'customBackgroundColor', + 'overlayTextColor', + 'customOverlayTextColor', + 'overlayBackgroundColor', + 'customOverlayBackgroundColor', + 'fontSize', + 'customFontSize', + 'showSubmenuIcon', + 'style', + 'openSubmenusOnClick', + 'submenuVisibility' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'lock' => false, + 'inserter' => false, + '__experimentalToolbar' => false, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-page-list-editor', + 'style' => 'wp-block-page-list' + ), + 'paragraph' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/paragraph', + 'title' => 'Paragraph', + 'category' => 'text', + 'description' => 'Start with the basic building block of all narrative.', + 'keywords' => array( + 'text' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'p', + 'role' => 'content' + ), + 'dropCap' => array( + 'type' => 'boolean', + 'default' => false + ), + 'placeholder' => array( + 'type' => 'string' + ), + 'direction' => array( + 'type' => 'string', + 'enum' => array( + 'ltr', + 'rtl' + ) + ) + ), + 'supports' => array( + 'align' => array( + 'wide', + 'full' + ), + 'splitting' => true, + 'anchor' => true, + 'className' => false, + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + 'textColumns' => true, + 'textIndent' => true, + '__experimentalFontFamily' => true, + '__experimentalTextDecoration' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextTransform' => true, + '__experimentalWritingMode' => true, + 'fitText' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalSelector' => 'p', + '__unstablePasteTextInline' => true, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'selectors' => array( + 'root' => 'p', + 'typography' => array( + 'textIndent' => '.wp-block-paragraph + .wp-block-paragraph' + ) + ), + 'editorStyle' => 'wp-block-paragraph-editor', + 'style' => 'wp-block-paragraph' + ), + 'pattern' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/pattern', + 'title' => 'Pattern Placeholder', + 'category' => 'theme', + 'description' => 'Show a block pattern.', + 'supports' => array( + 'html' => false, + 'inserter' => false, + 'renaming' => false, + 'visibility' => false, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'textdomain' => 'default', + 'attributes' => array( + 'slug' => array( + 'type' => 'string' + ) + ) + ), + 'post-author' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-author', + 'title' => 'Author (deprecated)', + 'category' => 'theme', + 'description' => 'This block is deprecated. Please use the Avatar block, the Author Name block, and the Author Biography block instead.', + 'textdomain' => 'default', + 'attributes' => array( + 'textAlign' => array( + 'type' => 'string' + ), + 'avatarSize' => array( + 'type' => 'number', + 'default' => 48 + ), + 'showAvatar' => array( + 'type' => 'boolean', + 'default' => true + ), + 'showBio' => array( + 'type' => 'boolean' + ), + 'byline' => array( + 'type' => 'string' + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => false, + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self', + 'role' => 'content' + ) + ), + 'usesContext' => array( + 'postType', + 'postId', + 'queryId' + ), + 'supports' => array( + 'inserter' => false, + 'anchor' => true, + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'filter' => array( + 'duotone' => true + ) + ), + 'selectors' => array( + 'filter' => array( + 'duotone' => '.wp-block-post-author .wp-block-post-author__avatar img' + ) + ), + 'editorStyle' => 'wp-block-post-author-editor', + 'style' => 'wp-block-post-author' + ), + 'post-author-biography' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-author-biography', + 'title' => 'Author Biography', + 'category' => 'theme', + 'description' => 'The author biography.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postType', + 'postId' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-post-author-biography' + ), + 'post-author-name' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-author-name', + 'title' => 'Author Name', + 'category' => 'theme', + 'description' => 'The author name.', + 'textdomain' => 'default', + 'attributes' => array( + 'isLink' => array( + 'type' => 'boolean', + 'default' => false, + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self', + 'role' => 'content' + ) + ), + 'usesContext' => array( + 'postType', + 'postId' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-post-author-name' + ), + 'post-comments-count' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-comments-count', + 'title' => 'Comments Count', + 'category' => 'theme', + 'description' => 'Display a post\'s comments count.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-post-comments-count' + ), + 'post-comments-form' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-comments-form', + 'title' => 'Comments Form', + 'category' => 'theme', + 'description' => 'Display a post\'s comments form.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId', + 'postType' + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'heading' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextTransform' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'editorStyle' => 'wp-block-post-comments-form-editor', + 'style' => array( + 'wp-block-post-comments-form', + 'wp-block-buttons', + 'wp-block-button' + ), + 'example' => array( + 'attributes' => array( + 'style' => array( + 'typography' => array( + 'textAlign' => 'center' + ) + ) + ) + ) + ), + 'post-comments-link' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-comments-link', + 'title' => 'Comments Link', + 'category' => 'theme', + 'description' => 'Displays the link to the current post comments.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postType', + 'postId' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'link' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-post-comments-link' + ), + 'post-content' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-content', + 'title' => 'Content', + 'category' => 'theme', + 'description' => 'Displays the contents of a post or page.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId', + 'postType', + 'queryId' + ), + 'attributes' => array( + 'tagName' => array( + 'type' => 'string', + 'default' => 'div' + ) + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'layout' => true, + 'background' => array( + 'backgroundImage' => true, + 'backgroundSize' => true, + '__experimentalDefaultControls' => array( + 'backgroundImage' => true + ) + ), + 'dimensions' => array( + 'minHeight' => true + ), + 'spacing' => array( + 'blockGap' => true, + 'padding' => true, + 'margin' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'color' => array( + 'gradients' => true, + 'heading' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => false, + 'text' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-post-content', + 'editorStyle' => 'wp-block-post-content-editor' + ), + 'post-date' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-date', + 'title' => 'Date', + 'category' => 'theme', + 'description' => 'Display a custom date.', + 'textdomain' => 'default', + 'attributes' => array( + 'datetime' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'textAlign' => array( + 'type' => 'string' + ), + 'format' => array( + 'type' => 'string' + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => false, + 'role' => 'content' + ) + ), + 'usesContext' => array( + 'postId', + 'postType', + 'queryId' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ) + ), + 'post-excerpt' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-excerpt', + 'title' => 'Excerpt', + 'category' => 'theme', + 'description' => 'Display the excerpt.', + 'textdomain' => 'default', + 'attributes' => array( + 'textAlign' => array( + 'type' => 'string' + ), + 'moreText' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'showMoreOnNewLine' => array( + 'type' => 'boolean', + 'default' => true + ), + 'excerptLength' => array( + 'type' => 'number', + 'default' => 55 + ) + ), + 'usesContext' => array( + 'postId', + 'postType', + 'queryId' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textColumns' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'editorStyle' => 'wp-block-post-excerpt-editor', + 'style' => 'wp-block-post-excerpt' + ), + 'post-featured-image' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-featured-image', + 'title' => 'Featured Image', + 'category' => 'theme', + 'description' => 'Display a post\'s featured image.', + 'textdomain' => 'default', + 'attributes' => array( + 'isLink' => array( + 'type' => 'boolean', + 'default' => false, + 'role' => 'content' + ), + 'aspectRatio' => array( + 'type' => 'string' + ), + 'width' => array( + 'type' => 'string' + ), + 'height' => array( + 'type' => 'string' + ), + 'scale' => array( + 'type' => 'string', + 'default' => 'cover' + ), + 'sizeSlug' => array( + 'type' => 'string' + ), + 'rel' => array( + 'type' => 'string', + 'attribute' => 'rel', + 'default' => '', + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self', + 'role' => 'content' + ), + 'overlayColor' => array( + 'type' => 'string' + ), + 'customOverlayColor' => array( + 'type' => 'string' + ), + 'dimRatio' => array( + 'type' => 'number', + 'default' => 0 + ), + 'gradient' => array( + 'type' => 'string' + ), + 'customGradient' => array( + 'type' => 'string' + ), + 'useFirstImageFromPost' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'usesContext' => array( + 'postId', + 'postType', + 'queryId' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'left', + 'right', + 'center', + 'wide', + 'full' + ), + 'color' => array( + 'text' => false, + 'background' => false + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'width' => true, + '__experimentalSkipSerialization' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'width' => true + ) + ), + 'filter' => array( + 'duotone' => true + ), + 'shadow' => array( + '__experimentalSkipSerialization' => true + ), + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'selectors' => array( + 'border' => '.wp-block-post-featured-image img, .wp-block-post-featured-image .block-editor-media-placeholder, .wp-block-post-featured-image .wp-block-post-featured-image__overlay', + 'shadow' => '.wp-block-post-featured-image img, .wp-block-post-featured-image .components-placeholder', + 'filter' => array( + 'duotone' => '.wp-block-post-featured-image img, .wp-block-post-featured-image .wp-block-post-featured-image__placeholder, .wp-block-post-featured-image .components-placeholder__illustration, .wp-block-post-featured-image .components-placeholder::before' + ) + ), + 'editorStyle' => 'wp-block-post-featured-image-editor', + 'style' => 'wp-block-post-featured-image' + ), + 'post-navigation-link' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-navigation-link', + 'title' => 'Post Navigation Link', + 'category' => 'theme', + 'description' => 'Displays the next or previous post link that is adjacent to the current post.', + 'textdomain' => 'default', + 'attributes' => array( + 'textAlign' => array( + 'type' => 'string' + ), + 'type' => array( + 'type' => 'string', + 'default' => 'next' + ), + 'label' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'showTitle' => array( + 'type' => 'boolean', + 'default' => false + ), + 'linkLabel' => array( + 'type' => 'boolean', + 'default' => false + ), + 'arrow' => array( + 'type' => 'string', + 'default' => 'none' + ), + 'taxonomy' => array( + 'type' => 'string', + 'default' => '' + ) + ), + 'usesContext' => array( + 'postType' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'link' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalWritingMode' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-post-navigation-link' + ), + 'post-template' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-template', + 'title' => 'Post Template', + 'category' => 'theme', + 'ancestor' => array( + 'core/query' + ), + 'description' => 'Contains the block elements used to render a post, like the title, date, featured image, content or excerpt, and more.', + 'textdomain' => 'default', + 'usesContext' => array( + 'queryId', + 'query', + 'displayLayout', + 'templateSlug', + 'previewPostType', + 'enhancedPagination', + 'postType' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'align' => array( + 'wide', + 'full' + ), + 'layout' => true, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + 'blockGap' => array( + '__experimentalDefault' => '1.25em' + ), + '__experimentalDefaultControls' => array( + 'blockGap' => true, + 'padding' => false, + 'margin' => false + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'style' => 'wp-block-post-template', + 'editorStyle' => 'wp-block-post-template-editor' + ), + 'post-terms' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-terms', + 'title' => 'Post Terms', + 'category' => 'theme', + 'description' => 'Post terms.', + 'textdomain' => 'default', + 'attributes' => array( + 'term' => array( + 'type' => 'string' + ), + 'separator' => array( + 'type' => 'string', + 'default' => ', ' + ), + 'prefix' => array( + 'type' => 'string', + 'default' => '', + 'role' => 'content' + ), + 'suffix' => array( + 'type' => 'string', + 'default' => '', + 'role' => 'content' + ) + ), + 'usesContext' => array( + 'postId', + 'postType' + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-post-terms' + ), + 'post-time-to-read' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-time-to-read', + 'title' => 'Time to Read', + 'category' => 'theme', + 'description' => 'Show minutes required to finish reading the post. Can also show a word count.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId', + 'postType' + ), + 'attributes' => array( + 'displayAsRange' => array( + 'type' => 'boolean', + 'default' => true + ), + 'displayMode' => array( + 'type' => 'string', + 'default' => 'time' + ), + 'averageReadingSpeed' => array( + 'type' => 'number', + 'default' => 189 + ) + ), + 'supports' => array( + 'anchor' => true, + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'post-title' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/post-title', + 'title' => 'Title', + 'category' => 'theme', + 'description' => 'Displays the title of a post, page, or any other content-type.', + 'textdomain' => 'default', + 'usesContext' => array( + 'postId', + 'postType', + 'queryId' + ), + 'attributes' => array( + 'textAlign' => array( + 'type' => 'string' + ), + 'level' => array( + 'type' => 'number', + 'default' => 2 + ), + 'levelOptions' => array( + 'type' => 'array' + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => false, + 'role' => 'content' + ), + 'rel' => array( + 'type' => 'string', + 'attribute' => 'rel', + 'default' => '', + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self', + 'role' => 'content' + ) + ), + 'example' => array( + 'viewportWidth' => 350 + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-post-title' + ), + 'preformatted' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/preformatted', + 'title' => 'Preformatted', + 'category' => 'text', + 'description' => 'Add text that respects your spacing and tabs, and also allows styling.', + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'pre', + '__unstablePreserveWhiteSpace' => true, + 'role' => 'content' + ) + ), + 'supports' => array( + 'anchor' => true, + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'padding' => true, + 'margin' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-preformatted' + ), + 'pullquote' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/pullquote', + 'title' => 'Pullquote', + 'category' => 'text', + 'description' => 'Give special visual emphasis to a quote from your text.', + 'textdomain' => 'default', + 'attributes' => array( + 'value' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'p', + 'role' => 'content' + ), + 'citation' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'cite', + 'role' => 'content' + ), + 'textAlign' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'left', + 'right', + 'wide', + 'full' + ), + 'background' => array( + 'backgroundImage' => true, + 'backgroundSize' => true, + '__experimentalDefaultControls' => array( + 'backgroundImage' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'background' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'dimensions' => array( + 'minHeight' => true, + '__experimentalDefaultControls' => array( + 'minHeight' => false + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + '__experimentalStyle' => array( + 'typography' => array( + 'fontSize' => '1.5em', + 'lineHeight' => '1.6' + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-pullquote-editor', + 'style' => 'wp-block-pullquote' + ), + 'query' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query', + 'title' => 'Query Loop', + 'category' => 'theme', + 'description' => 'An advanced block that allows displaying post types based on different query parameters and visual configurations.', + 'keywords' => array( + 'posts', + 'list', + 'blog', + 'blogs', + 'custom post types' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'queryId' => array( + 'type' => 'number' + ), + 'query' => array( + 'type' => 'object', + 'default' => array( + 'perPage' => null, + 'pages' => 0, + 'offset' => 0, + 'postType' => 'post', + 'order' => 'desc', + 'orderBy' => 'date', + 'author' => '', + 'search' => '', + 'exclude' => array( + + ), + 'sticky' => '', + 'inherit' => true, + 'taxQuery' => null, + 'parents' => array( + + ), + 'format' => array( + + ) + ) + ), + 'tagName' => array( + 'type' => 'string', + 'default' => 'div' + ), + 'namespace' => array( + 'type' => 'string' + ), + 'enhancedPagination' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'usesContext' => array( + 'templateSlug' + ), + 'providesContext' => array( + 'queryId' => 'queryId', + 'query' => 'query', + 'displayLayout' => 'displayLayout', + 'enhancedPagination' => 'enhancedPagination' + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'layout' => true, + 'interactivity' => true + ), + 'editorStyle' => 'wp-block-query-editor' + ), + 'query-no-results' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query-no-results', + 'title' => 'No Results', + 'category' => 'theme', + 'description' => 'Contains the block elements used to render content when no query results are found.', + 'ancestor' => array( + 'core/query' + ), + 'textdomain' => 'default', + 'usesContext' => array( + 'queryId', + 'query' + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ) + ), + 'query-pagination' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query-pagination', + 'title' => 'Pagination', + 'category' => 'theme', + 'ancestor' => array( + 'core/query' + ), + 'allowedBlocks' => array( + 'core/query-pagination-previous', + 'core/query-pagination-numbers', + 'core/query-pagination-next' + ), + 'description' => 'Displays a paginated navigation to next/previous set of posts, when applicable.', + 'textdomain' => 'default', + 'attributes' => array( + 'paginationArrow' => array( + 'type' => 'string', + 'default' => 'none' + ), + 'showLabel' => array( + 'type' => 'boolean', + 'default' => true + ) + ), + 'usesContext' => array( + 'queryId', + 'query' + ), + 'providesContext' => array( + 'paginationArrow' => 'paginationArrow', + 'showLabel' => 'showLabel' + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'layout' => array( + 'allowSwitching' => false, + 'allowInheriting' => false, + 'default' => array( + 'type' => 'flex' + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-query-pagination-editor', + 'style' => 'wp-block-query-pagination' + ), + 'query-pagination-next' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query-pagination-next', + 'title' => 'Next Page', + 'category' => 'theme', + 'parent' => array( + 'core/query-pagination' + ), + 'description' => 'Displays the next posts page link.', + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string' + ) + ), + 'usesContext' => array( + 'queryId', + 'query', + 'paginationArrow', + 'showLabel', + 'enhancedPagination' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ) + ), + 'query-pagination-numbers' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query-pagination-numbers', + 'title' => 'Page Numbers', + 'category' => 'theme', + 'parent' => array( + 'core/query-pagination' + ), + 'description' => 'Displays a list of page numbers for pagination.', + 'textdomain' => 'default', + 'attributes' => array( + 'midSize' => array( + 'type' => 'number', + 'default' => 2 + ) + ), + 'usesContext' => array( + 'queryId', + 'query', + 'enhancedPagination' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-query-pagination-numbers-editor' + ), + 'query-pagination-previous' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query-pagination-previous', + 'title' => 'Previous Page', + 'category' => 'theme', + 'parent' => array( + 'core/query-pagination' + ), + 'description' => 'Displays the previous posts page link.', + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string' + ) + ), + 'usesContext' => array( + 'queryId', + 'query', + 'paginationArrow', + 'showLabel', + 'enhancedPagination' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ) + ), + 'query-title' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query-title', + 'title' => 'Query Title', + 'category' => 'theme', + 'description' => 'Display the query title.', + 'textdomain' => 'default', + 'attributes' => array( + 'type' => array( + 'type' => 'string' + ), + 'textAlign' => array( + 'type' => 'string' + ), + 'level' => array( + 'type' => 'number', + 'default' => 1 + ), + 'levelOptions' => array( + 'type' => 'array' + ), + 'showPrefix' => array( + 'type' => 'boolean', + 'default' => true + ), + 'showSearchTerm' => array( + 'type' => 'boolean', + 'default' => true + ) + ), + 'example' => array( + 'attributes' => array( + 'type' => 'search' + ) + ), + 'usesContext' => array( + 'query' + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-query-title' + ), + 'query-total' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/query-total', + 'title' => 'Query Total', + 'category' => 'theme', + 'ancestor' => array( + 'core/query' + ), + 'description' => 'Display the total number of results in a query.', + 'textdomain' => 'default', + 'attributes' => array( + 'displayType' => array( + 'type' => 'string', + 'default' => 'total-results' + ) + ), + 'usesContext' => array( + 'queryId', + 'query' + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-query-total' + ), + 'quote' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/quote', + 'title' => 'Quote', + 'category' => 'text', + 'description' => 'Give quoted text visual emphasis. "In quoting others, we cite ourselves." — Julio Cortázar', + 'keywords' => array( + 'blockquote', + 'cite' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'value' => array( + 'type' => 'string', + 'source' => 'html', + 'selector' => 'blockquote', + 'multiline' => 'p', + 'default' => '', + 'role' => 'content' + ), + 'citation' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'cite', + 'role' => 'content' + ), + 'textAlign' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'left', + 'right', + 'wide', + 'full' + ), + 'html' => false, + 'background' => array( + 'backgroundImage' => true, + 'backgroundSize' => true, + '__experimentalDefaultControls' => array( + 'backgroundImage' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'style' => true, + 'width' => true + ) + ), + 'dimensions' => array( + 'minHeight' => true, + '__experimentalDefaultControls' => array( + 'minHeight' => false + ) + ), + '__experimentalOnEnter' => true, + '__experimentalOnMerge' => true, + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'heading' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'layout' => array( + 'allowEditing' => false + ), + 'spacing' => array( + 'blockGap' => true, + 'padding' => true, + 'margin' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'allowedBlocks' => true + ), + 'styles' => array( + array( + 'name' => 'default', + 'label' => 'Default', + 'isDefault' => true + ), + array( + 'name' => 'plain', + 'label' => 'Plain' + ) + ), + 'editorStyle' => 'wp-block-quote-editor', + 'style' => 'wp-block-quote' + ), + 'read-more' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/read-more', + 'title' => 'Read More', + 'category' => 'theme', + 'description' => 'Displays the link of a post, page, or any other content-type.', + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self' + ) + ), + 'usesContext' => array( + 'postId' + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + 'text' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextDecoration' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true, + 'textDecoration' => true + ) + ), + 'spacing' => array( + 'margin' => array( + 'top', + 'bottom' + ), + 'padding' => true, + '__experimentalDefaultControls' => array( + 'padding' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'width' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-read-more' + ), + 'rss' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/rss', + 'title' => 'RSS', + 'category' => 'widgets', + 'description' => 'Display entries from any RSS or Atom feed.', + 'keywords' => array( + 'atom', + 'feed' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'columns' => array( + 'type' => 'number', + 'default' => 2 + ), + 'blockLayout' => array( + 'type' => 'string', + 'default' => 'list' + ), + 'feedURL' => array( + 'type' => 'string', + 'default' => '', + 'role' => 'content' + ), + 'itemsToShow' => array( + 'type' => 'number', + 'default' => 5 + ), + 'displayExcerpt' => array( + 'type' => 'boolean', + 'default' => false + ), + 'displayAuthor' => array( + 'type' => 'boolean', + 'default' => false + ), + 'displayDate' => array( + 'type' => 'boolean', + 'default' => false + ), + 'excerptLength' => array( + 'type' => 'number', + 'default' => 55 + ), + 'openInNewTab' => array( + 'type' => 'boolean', + 'default' => false + ), + 'rel' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'html' => false, + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'padding' => false, + 'margin' => false + ) + ), + 'color' => array( + 'background' => true, + 'text' => true, + 'gradients' => true, + 'link' => true + ) + ), + 'editorStyle' => 'wp-block-rss-editor', + 'style' => 'wp-block-rss' + ), + 'search' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/search', + 'title' => 'Search', + 'category' => 'widgets', + 'description' => 'Help visitors find your content.', + 'keywords' => array( + 'find' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'label' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'showLabel' => array( + 'type' => 'boolean', + 'default' => true + ), + 'placeholder' => array( + 'type' => 'string', + 'default' => '', + 'role' => 'content' + ), + 'width' => array( + 'type' => 'number' + ), + 'widthUnit' => array( + 'type' => 'string' + ), + 'buttonText' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'buttonPosition' => array( + 'type' => 'string', + 'default' => 'button-outside' + ), + 'buttonUseIcon' => array( + 'type' => 'boolean', + 'default' => false + ), + 'query' => array( + 'type' => 'object', + 'default' => array( + + ) + ), + 'isSearchFieldHidden' => array( + 'type' => 'boolean', + 'default' => false + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'left', + 'center', + 'right' + ), + 'color' => array( + 'gradients' => true, + '__experimentalSkipSerialization' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'interactivity' => true, + 'typography' => array( + '__experimentalSkipSerialization' => true, + '__experimentalSelector' => '.wp-block-search__label, .wp-block-search__input, .wp-block-search__button', + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + 'color' => true, + 'radius' => true, + 'width' => true, + '__experimentalSkipSerialization' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'radius' => true, + 'width' => true + ) + ), + 'spacing' => array( + 'margin' => true + ), + 'html' => false + ), + 'editorStyle' => 'wp-block-search-editor', + 'style' => 'wp-block-search' + ), + 'separator' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/separator', + 'title' => 'Separator', + 'category' => 'design', + 'description' => 'Create a break between ideas or sections with a horizontal separator.', + 'keywords' => array( + 'horizontal-line', + 'hr', + 'divider' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'opacity' => array( + 'type' => 'string', + 'default' => 'alpha-channel' + ), + 'tagName' => array( + 'type' => 'string', + 'enum' => array( + 'hr', + 'div' + ), + 'default' => 'hr' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'center', + 'wide', + 'full' + ), + 'color' => array( + 'enableContrastChecker' => false, + '__experimentalSkipSerialization' => true, + 'gradients' => true, + 'background' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => true + ) + ), + 'spacing' => array( + 'margin' => array( + 'top', + 'bottom' + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'styles' => array( + array( + 'name' => 'default', + 'label' => 'Default', + 'isDefault' => true + ), + array( + 'name' => 'wide', + 'label' => 'Wide Line' + ), + array( + 'name' => 'dots', + 'label' => 'Dots' + ) + ), + 'editorStyle' => 'wp-block-separator-editor', + 'style' => 'wp-block-separator' + ), + 'shortcode' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/shortcode', + 'title' => 'Shortcode', + 'category' => 'widgets', + 'description' => 'Insert additional custom elements with a WordPress shortcode.', + 'textdomain' => 'default', + 'attributes' => array( + 'text' => array( + 'type' => 'string', + 'source' => 'raw', + 'role' => 'content' + ) + ), + 'supports' => array( + 'className' => false, + 'customClassName' => false, + 'html' => false, + 'customCSS' => false, + 'visibility' => false + ), + 'editorStyle' => 'wp-block-shortcode-editor' + ), + 'site-logo' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/site-logo', + 'title' => 'Site Logo', + 'category' => 'theme', + 'description' => 'Display an image to represent this site. Update this block and the changes apply everywhere.', + 'textdomain' => 'default', + 'attributes' => array( + 'width' => array( + 'type' => 'number' + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => true, + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self', + 'role' => 'content' + ), + 'shouldSyncIcon' => array( + 'type' => 'boolean' + ) + ), + 'example' => array( + 'viewportWidth' => 500, + 'attributes' => array( + 'width' => 350, + 'className' => 'block-editor-block-types-list__site-logo-example' + ) + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'align' => true, + 'alignWide' => false, + 'color' => array( + 'text' => false, + 'background' => false + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + 'filter' => array( + 'duotone' => true + ) + ), + 'styles' => array( + array( + 'name' => 'default', + 'label' => 'Default', + 'isDefault' => true + ), + array( + 'name' => 'rounded', + 'label' => 'Rounded' + ) + ), + 'selectors' => array( + 'filter' => array( + 'duotone' => '.wp-block-site-logo img, .wp-block-site-logo .components-placeholder__illustration, .wp-block-site-logo .components-placeholder::before' + ) + ), + 'editorStyle' => 'wp-block-site-logo-editor', + 'style' => 'wp-block-site-logo' + ), + 'site-tagline' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/site-tagline', + 'title' => 'Site Tagline', + 'category' => 'theme', + 'description' => 'Describe in a few words what this site is about. This is important for search results, sharing on social media, and gives overall clarity to visitors.', + 'keywords' => array( + 'description' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'textAlign' => array( + 'type' => 'string' + ), + 'level' => array( + 'type' => 'number', + 'default' => 0 + ), + 'levelOptions' => array( + 'type' => 'array', + 'default' => array( + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ) + ) + ), + 'example' => array( + 'viewportWidth' => 350, + 'attributes' => array( + 'textAlign' => 'center' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'contentRole' => true, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalWritingMode' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'editorStyle' => 'wp-block-site-tagline-editor', + 'style' => 'wp-block-site-tagline' + ), + 'site-title' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/site-title', + 'title' => 'Site Title', + 'category' => 'theme', + 'description' => 'Displays the name of this site. Update the block, and the changes apply everywhere it’s used. This will also appear in the browser title bar and in search results.', + 'textdomain' => 'default', + 'attributes' => array( + 'level' => array( + 'type' => 'number', + 'default' => 1 + ), + 'levelOptions' => array( + 'type' => 'array', + 'default' => array( + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ) + ), + 'textAlign' => array( + 'type' => 'string' + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => true, + 'role' => 'content' + ), + 'linkTarget' => array( + 'type' => 'string', + 'default' => '_self', + 'role' => 'content' + ) + ), + 'example' => array( + 'viewportWidth' => 500 + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'padding' => true, + 'margin' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalWritingMode' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'editorStyle' => 'wp-block-site-title-editor', + 'style' => 'wp-block-site-title' + ), + 'social-link' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/social-link', + 'title' => 'Social Icon', + 'category' => 'widgets', + 'parent' => array( + 'core/social-links' + ), + 'description' => 'Display an icon linking to a social profile or site.', + 'textdomain' => 'default', + 'attributes' => array( + 'url' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'service' => array( + 'type' => 'string' + ), + 'label' => array( + 'type' => 'string', + 'role' => 'content' + ), + 'rel' => array( + 'type' => 'string' + ) + ), + 'usesContext' => array( + 'openInNewTab', + 'showLabels', + 'iconColor', + 'iconColorValue', + 'iconBackgroundColor', + 'iconBackgroundColorValue' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-social-link-editor' + ), + 'social-links' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/social-links', + 'title' => 'Social Icons', + 'category' => 'widgets', + 'allowedBlocks' => array( + 'core/social-link' + ), + 'description' => 'Display icons linking to your social profiles or sites.', + 'keywords' => array( + 'links' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'iconColor' => array( + 'type' => 'string' + ), + 'customIconColor' => array( + 'type' => 'string' + ), + 'iconColorValue' => array( + 'type' => 'string' + ), + 'iconBackgroundColor' => array( + 'type' => 'string' + ), + 'customIconBackgroundColor' => array( + 'type' => 'string' + ), + 'iconBackgroundColorValue' => array( + 'type' => 'string' + ), + 'openInNewTab' => array( + 'type' => 'boolean', + 'default' => false + ), + 'showLabels' => array( + 'type' => 'boolean', + 'default' => false + ), + 'size' => array( + 'type' => 'string' + ) + ), + 'providesContext' => array( + 'openInNewTab' => 'openInNewTab', + 'showLabels' => 'showLabels', + 'iconColor' => 'iconColor', + 'iconColorValue' => 'iconColorValue', + 'iconBackgroundColor' => 'iconBackgroundColor', + 'iconBackgroundColorValue' => 'iconBackgroundColorValue' + ), + 'supports' => array( + 'align' => array( + 'left', + 'center', + 'right' + ), + 'anchor' => true, + 'html' => false, + '__experimentalExposeControlsToChildren' => true, + 'layout' => array( + 'allowSwitching' => false, + 'allowInheriting' => false, + 'allowVerticalAlignment' => false, + 'default' => array( + 'type' => 'flex' + ) + ), + 'color' => array( + 'enableContrastChecker' => false, + 'background' => true, + 'gradients' => true, + 'text' => false, + '__experimentalDefaultControls' => array( + 'background' => false + ) + ), + 'spacing' => array( + 'blockGap' => array( + 'horizontal', + 'vertical' + ), + 'margin' => true, + 'padding' => true, + 'units' => array( + 'px', + 'em', + 'rem', + 'vh', + 'vw' + ), + '__experimentalDefaultControls' => array( + 'blockGap' => true, + 'margin' => true, + 'padding' => false + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'contentRole' => true, + 'listView' => true + ), + 'styles' => array( + array( + 'name' => 'default', + 'label' => 'Default', + 'isDefault' => true + ), + array( + 'name' => 'logos-only', + 'label' => 'Logos Only' + ), + array( + 'name' => 'pill-shape', + 'label' => 'Pill Shape' + ) + ), + 'editorStyle' => 'wp-block-social-links-editor', + 'style' => 'wp-block-social-links' + ), + 'spacer' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/spacer', + 'title' => 'Spacer', + 'category' => 'design', + 'description' => 'Add white space between blocks and customize its height.', + 'textdomain' => 'default', + 'attributes' => array( + 'height' => array( + 'type' => 'string', + 'default' => '100px' + ), + 'width' => array( + 'type' => 'string' + ) + ), + 'usesContext' => array( + 'orientation' + ), + 'supports' => array( + 'anchor' => true, + 'spacing' => array( + 'margin' => array( + 'top', + 'bottom' + ), + '__experimentalDefaultControls' => array( + 'margin' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-spacer-editor', + 'style' => 'wp-block-spacer' + ), + 'table' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/table', + 'title' => 'Table', + 'category' => 'text', + 'description' => 'Create structured content in rows and columns to display information.', + 'textdomain' => 'default', + 'attributes' => array( + 'hasFixedLayout' => array( + 'type' => 'boolean', + 'default' => true + ), + 'caption' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'figcaption', + 'role' => 'content' + ), + 'head' => array( + 'type' => 'array', + 'default' => array( + + ), + 'source' => 'query', + 'selector' => 'thead tr', + 'query' => array( + 'cells' => array( + 'type' => 'array', + 'default' => array( + + ), + 'source' => 'query', + 'selector' => 'td,th', + 'query' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'role' => 'content' + ), + 'tag' => array( + 'type' => 'string', + 'default' => 'td', + 'source' => 'tag' + ), + 'scope' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'scope' + ), + 'align' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'data-align' + ), + 'colspan' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'colspan' + ), + 'rowspan' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'rowspan' + ) + ) + ) + ) + ), + 'body' => array( + 'type' => 'array', + 'default' => array( + + ), + 'source' => 'query', + 'selector' => 'tbody tr', + 'query' => array( + 'cells' => array( + 'type' => 'array', + 'default' => array( + + ), + 'source' => 'query', + 'selector' => 'td,th', + 'query' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'role' => 'content' + ), + 'tag' => array( + 'type' => 'string', + 'default' => 'td', + 'source' => 'tag' + ), + 'scope' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'scope' + ), + 'align' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'data-align' + ), + 'colspan' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'colspan' + ), + 'rowspan' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'rowspan' + ) + ) + ) + ) + ), + 'foot' => array( + 'type' => 'array', + 'default' => array( + + ), + 'source' => 'query', + 'selector' => 'tfoot tr', + 'query' => array( + 'cells' => array( + 'type' => 'array', + 'default' => array( + + ), + 'source' => 'query', + 'selector' => 'td,th', + 'query' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'role' => 'content' + ), + 'tag' => array( + 'type' => 'string', + 'default' => 'td', + 'source' => 'tag' + ), + 'scope' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'scope' + ), + 'align' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'data-align' + ), + 'colspan' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'colspan' + ), + 'rowspan' => array( + 'type' => 'string', + 'source' => 'attribute', + 'attribute' => 'rowspan' + ) + ) + ) + ) + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'color' => array( + '__experimentalSkipSerialization' => true, + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + '__experimentalBorder' => array( + '__experimentalSkipSerialization' => true, + 'color' => true, + 'style' => true, + 'width' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'style' => true, + 'width' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'selectors' => array( + 'root' => '.wp-block-table > table', + 'spacing' => '.wp-block-table' + ), + 'styles' => array( + array( + 'name' => 'regular', + 'label' => 'Default', + 'isDefault' => true + ), + array( + 'name' => 'stripes', + 'label' => 'Stripes' + ) + ), + 'editorStyle' => 'wp-block-table-editor', + 'style' => 'wp-block-table' + ), + 'tag-cloud' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/tag-cloud', + 'title' => 'Tag Cloud', + 'category' => 'widgets', + 'description' => 'A cloud of popular keywords, each sized by how often it appears.', + 'textdomain' => 'default', + 'attributes' => array( + 'numberOfTags' => array( + 'type' => 'number', + 'default' => 45, + 'minimum' => 1, + 'maximum' => 100 + ), + 'taxonomy' => array( + 'type' => 'string', + 'default' => 'post_tag' + ), + 'showTagCounts' => array( + 'type' => 'boolean', + 'default' => false + ), + 'smallestFontSize' => array( + 'type' => 'string', + 'default' => '8pt' + ), + 'largestFontSize' => array( + 'type' => 'string', + 'default' => '22pt' + ) + ), + 'styles' => array( + array( + 'name' => 'default', + 'label' => 'Default', + 'isDefault' => true + ), + array( + 'name' => 'outline', + 'label' => 'Outline' + ) + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'align' => true, + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), + 'typography' => array( + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalLetterSpacing' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ) + ), + 'template-part' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/template-part', + 'title' => 'Template Part', + 'category' => 'theme', + 'description' => 'Edit the different global regions of your site, like the header, footer, sidebar, or create your own.', + 'textdomain' => 'default', + 'attributes' => array( + 'slug' => array( + 'type' => 'string' + ), + 'theme' => array( + 'type' => 'string' + ), + 'tagName' => array( + 'type' => 'string' + ), + 'area' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'align' => true, + 'html' => false, + 'reusable' => false, + 'renaming' => false, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-template-part-editor' + ), + 'term-count' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/term-count', + 'title' => 'Term Count', + 'category' => 'theme', + 'description' => 'Displays the post count of a taxonomy term.', + 'textdomain' => 'default', + 'usesContext' => array( + 'termId', + 'taxonomy' + ), + 'attributes' => array( + 'bracketType' => array( + 'type' => 'string', + 'enum' => array( + 'none', + 'round', + 'square', + 'curly', + 'angle' + ), + 'default' => 'round' + ) + ), + 'supports' => array( + 'anchor' => true, + 'html' => false, + 'color' => array( + 'gradients' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-term-count' + ), + 'term-description' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/term-description', + 'title' => 'Term Description', + 'category' => 'theme', + 'description' => 'Display the description of categories, tags and custom taxonomies when viewing an archive.', + 'textdomain' => 'default', + 'usesContext' => array( + 'termId', + 'taxonomy' + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'spacing' => array( + 'padding' => true, + 'margin' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ) + ), + 'term-name' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/term-name', + 'title' => 'Term Name', + 'category' => 'theme', + 'description' => 'Displays the name of a taxonomy term.', + 'keywords' => array( + 'term title' + ), + 'textdomain' => 'default', + 'usesContext' => array( + 'termId', + 'taxonomy' + ), + 'attributes' => array( + 'textAlign' => array( + 'type' => 'string' + ), + 'level' => array( + 'type' => 'number', + 'default' => 0 + ), + 'isLink' => array( + 'type' => 'boolean', + 'default' => false + ), + 'levelOptions' => array( + 'type' => 'array' + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true, + 'link' => true + ) + ), + 'spacing' => array( + 'padding' => true + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true, + '__experimentalDefaultControls' => array( + 'color' => true, + 'width' => true, + 'style' => true + ) + ) + ), + 'style' => 'wp-block-term-name' + ), + 'term-template' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/term-template', + 'title' => 'Term Template', + 'category' => 'theme', + 'ancestor' => array( + 'core/terms-query' + ), + 'description' => 'Contains the block elements used to render a taxonomy term, like the name, description, and more.', + 'textdomain' => 'default', + 'usesContext' => array( + 'termQuery' + ), + 'supports' => array( + 'anchor' => true, + 'reusable' => false, + 'html' => false, + 'align' => array( + 'wide', + 'full' + ), + 'layout' => true, + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'typography' => array( + 'fontSize' => true, + 'lineHeight' => true, + '__experimentalFontFamily' => true, + '__experimentalFontWeight' => true, + '__experimentalFontStyle' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalLetterSpacing' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + 'blockGap' => array( + '__experimentalDefault' => '1.25em' + ), + '__experimentalDefaultControls' => array( + 'blockGap' => true, + 'padding' => false, + 'margin' => false + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ), + '__experimentalBorder' => array( + 'radius' => true, + 'color' => true, + 'width' => true, + 'style' => true + ) + ), + 'style' => 'wp-block-term-template', + 'editorStyle' => 'wp-block-term-template-editor' + ), + 'terms-query' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/terms-query', + 'title' => 'Terms Query', + 'category' => 'theme', + 'description' => 'An advanced block that allows displaying taxonomy terms based on different query parameters and visual configurations.', + 'keywords' => array( + 'terms', + 'taxonomy', + 'categories', + 'tags', + 'list' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'termQuery' => array( + 'type' => 'object', + 'default' => array( + 'perPage' => 10, + 'taxonomy' => 'category', + 'order' => 'asc', + 'orderBy' => 'name', + 'include' => array( + + ), + 'hideEmpty' => true, + 'showNested' => false, + 'inherit' => false + ) + ), + 'tagName' => array( + 'type' => 'string', + 'default' => 'div' + ) + ), + 'usesContext' => array( + 'templateSlug' + ), + 'providesContext' => array( + 'termQuery' => 'termQuery' + ), + 'supports' => array( + 'anchor' => true, + 'align' => array( + 'wide', + 'full' + ), + 'html' => false, + 'layout' => true, + 'interactivity' => true + ) + ), + 'text-columns' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/text-columns', + 'title' => 'Text Columns (deprecated)', + 'icon' => 'columns', + 'category' => 'design', + 'description' => 'This block is deprecated. Please use the Columns block instead.', + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'array', + 'source' => 'query', + 'selector' => 'p', + 'query' => array( + 'children' => array( + 'type' => 'string', + 'source' => 'html' + ) + ), + 'default' => array( + array( + + ), + array( + + ) + ) + ), + 'columns' => array( + 'type' => 'number', + 'default' => 2 + ), + 'width' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'inserter' => false, + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-text-columns-editor', + 'style' => 'wp-block-text-columns' + ), + 'verse' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/verse', + 'title' => 'Poetry', + 'category' => 'text', + 'description' => 'Insert poetry. Use special spacing formats. Or quote song lyrics.', + 'keywords' => array( + 'poetry', + 'poem', + 'verse', + 'stanza', + 'song', + 'lyrics' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'content' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'pre', + '__unstablePreserveWhiteSpace' => true, + 'role' => 'content' + ) + ), + 'supports' => array( + 'anchor' => true, + 'background' => array( + 'backgroundImage' => true, + 'backgroundSize' => true, + '__experimentalDefaultControls' => array( + 'backgroundImage' => true + ) + ), + 'color' => array( + 'gradients' => true, + 'link' => true, + '__experimentalDefaultControls' => array( + 'background' => true, + 'text' => true + ) + ), + 'dimensions' => array( + 'minHeight' => true, + '__experimentalDefaultControls' => array( + 'minHeight' => false + ) + ), + 'typography' => array( + 'fontSize' => true, + '__experimentalFontFamily' => true, + 'lineHeight' => true, + 'textAlign' => true, + '__experimentalFontStyle' => true, + '__experimentalFontWeight' => true, + '__experimentalLetterSpacing' => true, + '__experimentalTextTransform' => true, + '__experimentalTextDecoration' => true, + '__experimentalWritingMode' => true, + '__experimentalDefaultControls' => array( + 'fontSize' => true + ) + ), + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + '__experimentalBorder' => array( + 'radius' => true, + 'width' => true, + 'color' => true, + 'style' => true + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'style' => 'wp-block-verse', + 'editorStyle' => 'wp-block-verse-editor' + ), + 'video' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/video', + 'title' => 'Video', + 'category' => 'media', + 'description' => 'Embed a video from your media library or upload a new one.', + 'keywords' => array( + 'movie' + ), + 'textdomain' => 'default', + 'attributes' => array( + 'autoplay' => array( + 'type' => 'boolean', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'autoplay' + ), + 'caption' => array( + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'figcaption', + 'role' => 'content' + ), + 'controls' => array( + 'type' => 'boolean', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'controls', + 'default' => true + ), + 'id' => array( + 'type' => 'number', + 'role' => 'content' + ), + 'loop' => array( + 'type' => 'boolean', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'loop' + ), + 'muted' => array( + 'type' => 'boolean', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'muted' + ), + 'poster' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'poster' + ), + 'preload' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'preload', + 'default' => 'metadata' + ), + 'blob' => array( + 'type' => 'string', + 'role' => 'local' + ), + 'src' => array( + 'type' => 'string', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'src', + 'role' => 'content' + ), + 'playsInline' => array( + 'type' => 'boolean', + 'source' => 'attribute', + 'selector' => 'video', + 'attribute' => 'playsinline' + ), + 'tracks' => array( + 'role' => 'content', + 'type' => 'array', + 'items' => array( + 'type' => 'object' + ), + 'default' => array( + + ) + ) + ), + 'supports' => array( + 'anchor' => true, + 'align' => true, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), + 'interactivity' => array( + 'clientNavigation' => true + ) + ), + 'editorStyle' => 'wp-block-video-editor', + 'style' => 'wp-block-video' + ), + 'widget-group' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', + 'apiVersion' => 3, + 'name' => 'core/widget-group', + 'title' => 'Widget Group', + 'category' => 'widgets', + 'attributes' => array( + 'title' => array( + 'type' => 'string' + ) + ), + 'supports' => array( + 'html' => false, + 'inserter' => true, + 'customClassName' => true, + 'reusable' => false + ), + 'editorStyle' => 'wp-block-widget-group-editor', + 'style' => 'wp-block-widget-group' + ) +); \ No newline at end of file diff --git a/src/wp-includes/blocks/breadcrumbs.php b/src/wp-includes/blocks/breadcrumbs.php new file mode 100644 index 0000000000000..c2e5a7f9513e3 --- /dev/null +++ b/src/wp-includes/blocks/breadcrumbs.php @@ -0,0 +1,611 @@ + 1 ) ) { + $breadcrumb_items[] = array( + 'label' => __( 'Home' ), + 'url' => home_url( '/' ), + ); + } else { + $breadcrumb_items[] = block_core_breadcrumbs_create_item( __( 'Home' ), block_core_breadcrumbs_is_paged() ); + } + } + + // Handle home. + if ( $is_home ) { + // These checks are explicitly nested in order not to execute the `else` branch. + if ( $page_for_posts ) { + $breadcrumb_items[] = block_core_breadcrumbs_create_item( block_core_breadcrumbs_get_post_title( $page_for_posts ), block_core_breadcrumbs_is_paged() ); + } + if ( block_core_breadcrumbs_is_paged() ) { + $breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item(); + } + } elseif ( $is_front_page ) { + // Handle front page. + // This check is explicitly nested in order not to execute the `else` branch. + // If front page is set to custom page and is paged, add the page number. + if ( (int) get_query_var( 'page' ) > 1 ) { + $breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item( 'page' ); + } + } elseif ( is_search() ) { + // Handle search results. + $is_paged = block_core_breadcrumbs_is_paged(); + /* translators: %s: search query */ + $text = sprintf( __( 'Search results for: "%s"' ), wp_trim_words( get_search_query(), 10 ) ); + $breadcrumb_items[] = block_core_breadcrumbs_create_item( $text, $is_paged ); + // Add the "Page X" as the current page if paginated. + if ( $is_paged ) { + $breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item(); + } + } elseif ( is_404() ) { + // Handle 404 pages. + $breadcrumb_items[] = array( + 'label' => __( 'Page not found' ), + ); + } elseif ( is_archive() ) { + // Handle archive pages (taxonomy, post type, date, author archives). + $archive_breadcrumbs = block_core_breadcrumbs_get_archive_breadcrumbs(); + if ( ! empty( $archive_breadcrumbs ) ) { + $breadcrumb_items = array_merge( $breadcrumb_items, $archive_breadcrumbs ); + } + } else { + // Handle single post/page breadcrumbs. + if ( ! isset( $block->context['postId'] ) || ! isset( $block->context['postType'] ) ) { + return ''; + } + + $post_id = $block->context['postId']; + $post_type = $block->context['postType']; + + $post = get_post( $post_id ); + if ( ! $post ) { + return ''; + } + + // For non-hierarchical post types with parents (e.g., attachments), build trail for the parent. + $post_parent = $post->post_parent; + $parent_post = null; + if ( ! is_post_type_hierarchical( $post_type ) && $post_parent ) { + $parent_post = get_post( $post_parent ); + if ( $parent_post ) { + $post_id = $parent_post->ID; + $post_type = $parent_post->post_type; + $post_parent = $parent_post->post_parent; + } + } + + // Determine breadcrumb type. + // Some non-hierarchical post types (e.g., attachments) can have parents. + // Use hierarchical breadcrumbs if a parent exists, otherwise use taxonomy breadcrumbs. + $show_terms = false; + if ( ! is_post_type_hierarchical( $post_type ) && ! $post_parent ) { + $show_terms = true; + } elseif ( empty( get_object_taxonomies( $post_type, 'objects' ) ) ) { + $show_terms = false; + } else { + $show_terms = $attributes['prefersTaxonomy']; + } + + // Add post type archive link if applicable. + $post_type_object = get_post_type_object( $post_type ); + $archive_link = get_post_type_archive_link( $post_type ); + if ( $archive_link && untrailingslashit( home_url() ) !== untrailingslashit( $archive_link ) ) { + $label = $post_type_object->labels->archives; + if ( 'post' === $post_type && $page_for_posts ) { + $label = block_core_breadcrumbs_get_post_title( $page_for_posts ); + } + $breadcrumb_items[] = array( + 'label' => $label, + 'url' => $archive_link, + ); + } + // Build breadcrumb trail based on hierarchical structure or taxonomy terms. + if ( ! $show_terms ) { + $breadcrumb_items = array_merge( $breadcrumb_items, block_core_breadcrumbs_get_hierarchical_post_type_breadcrumbs( $post_id ) ); + } else { + $breadcrumb_items = array_merge( $breadcrumb_items, block_core_breadcrumbs_get_terms_breadcrumbs( $post_id, $post_type ) ); + } + + // Add post title: linked when viewing a paginated page, plain text otherwise. + $is_paged = (int) get_query_var( 'page' ) > 1 || (int) get_query_var( 'cpage' ) > 1; + $title = block_core_breadcrumbs_get_post_title( $post ); + + if ( $is_paged ) { + $breadcrumb_items[] = array( + 'label' => $title, + 'url' => get_permalink( $post ), + 'allow_html' => true, + ); + $breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item( (int) get_query_var( 'cpage' ) > 1 ? 'cpage' : 'page' ); + } else { + $breadcrumb_items[] = array( + 'label' => $title, + 'allow_html' => true, + ); + } + } + + // Remove current item if disabled. + if ( ! $attributes['showCurrentItem'] && ! empty( $breadcrumb_items ) ) { + array_pop( $breadcrumb_items ); + } + + /** + * Filters the breadcrumb items array before rendering. + * + * Allows developers to modify, add, or remove breadcrumb items. + * + * @since 7.0.0 + * + * @param array[] $breadcrumb_items { + * Array of breadcrumb item data. + * + * @type string $label The breadcrumb text. + * @type string $url Optional. The breadcrumb link URL. + * @type bool $allow_html Optional. Whether to allow HTML in the label. + * When true, the label will be sanitized with wp_kses_post(), + * allowing only safe HTML tags. When false or omitted, all HTML + * will be escaped with esc_html(). Default false. + * } + */ + $breadcrumb_items = apply_filters( 'block_core_breadcrumbs_items', $breadcrumb_items ); + + if ( empty( $breadcrumb_items ) ) { + return ''; + } + + $wrapper_attributes = get_block_wrapper_attributes( + array( + 'style' => '--separator: "' . addcslashes( $attributes['separator'], '\\"' ) . '";', + 'aria-label' => __( 'Breadcrumbs' ), + ) + ); + + $breadcrumb_html = sprintf( + '', + $wrapper_attributes, + implode( + '', + array_map( + static function ( $item ) { + $label = ! empty( $item['allow_html'] ) ? wp_kses_post( $item['label'] ) : esc_html( $item['label'] ); + if ( ! empty( $item['url'] ) ) { + return '
  • ' . $label . '
  • '; + } + return '
  • ' . $label . '
  • '; + }, + $breadcrumb_items + ) + ) + ); + + return $breadcrumb_html; +} + +/** + * Checks if we're on a paginated view (page 2 or higher). + * + * @since 7.0.0 + * + * @return bool True if paged > 1, false otherwise. + */ +function block_core_breadcrumbs_is_paged() { + $paged = (int) get_query_var( 'paged' ); + return $paged > 1; +} + +/** + * Creates a "Page X" breadcrumb item for paginated views. + * + * @since 7.0.0 + * @param string $query_var Optional. Query variable to get current page number. Default 'paged'. + * @return array The "Page X" breadcrumb item data. + */ +function block_core_breadcrumbs_create_page_number_item( $query_var = 'paged' ) { + $paged = (int) get_query_var( $query_var ); + + if ( 'cpage' === $query_var ) { + return array( + 'label' => sprintf( + /* translators: %s: comment page number */ + __( 'Comments Page %s' ), + number_format_i18n( $paged ) + ), + ); + } + + return array( + 'label' => sprintf( + /* translators: %s: page number */ + __( 'Page %s' ), + number_format_i18n( $paged ) + ), + ); +} + + +/** + * Creates a breadcrumb item that's either a link or current page item. + * + * When paginated (is_paged is true), creates a link to page 1. + * Otherwise, creates a span marked as the current page. + * + * @since 7.0.0 + * + * @param string $text The text content. + * @param bool $is_paged Whether we're on a paginated view. + * + * @return array The breadcrumb item data. + */ +function block_core_breadcrumbs_create_item( $text, $is_paged = false ) { + $item = array( 'label' => $text ); + if ( $is_paged ) { + $item['url'] = get_pagenum_link( 1 ); + } + return $item; +} + +/** + * Gets a post title with fallback for empty titles. + * + * @since 7.0.0 + * + * @param int|WP_Post $post_id_or_object The post ID or post object. + * + * @return string The post title or fallback text. + */ +function block_core_breadcrumbs_get_post_title( $post_id_or_object ) { + $title = get_the_title( $post_id_or_object ); + if ( strlen( $title ) === 0 ) { + $title = __( '(no title)' ); + } + return $title; +} + +/** + * Generates breadcrumb items from hierarchical post type ancestors. + * + * @since 7.0.0 + * + * @param int $post_id The post ID. + * + * @return array Array of breadcrumb item data. + */ +function block_core_breadcrumbs_get_hierarchical_post_type_breadcrumbs( $post_id ) { + $breadcrumb_items = array(); + $ancestors = get_post_ancestors( $post_id ); + $ancestors = array_reverse( $ancestors ); + + foreach ( $ancestors as $ancestor_id ) { + $breadcrumb_items[] = array( + 'label' => block_core_breadcrumbs_get_post_title( $ancestor_id ), + 'url' => get_permalink( $ancestor_id ), + 'allow_html' => true, + ); + } + return $breadcrumb_items; +} + +/** + * Generates breadcrumb items for hierarchical term ancestors. + * + * For hierarchical taxonomies, retrieves and formats ancestor terms as breadcrumb links. + * + * @since 7.0.0 + * + * @param int $term_id The term ID. + * @param string $taxonomy The taxonomy name. + * + * @return array Array of breadcrumb item data for ancestors. + */ +function block_core_breadcrumbs_get_term_ancestors_items( $term_id, $taxonomy ) { + $breadcrumb_items = array(); + + // Check if taxonomy is hierarchical and add ancestor term links. + if ( is_taxonomy_hierarchical( $taxonomy ) ) { + $term_ancestors = get_ancestors( $term_id, $taxonomy, 'taxonomy' ); + $term_ancestors = array_reverse( $term_ancestors ); + foreach ( $term_ancestors as $ancestor_id ) { + $ancestor_term = get_term( $ancestor_id, $taxonomy ); + if ( $ancestor_term && ! is_wp_error( $ancestor_term ) ) { + $breadcrumb_items[] = array( + 'label' => $ancestor_term->name, + 'url' => get_term_link( $ancestor_term ), + ); + } + } + } + + return $breadcrumb_items; +} + +/** + * Generates breadcrumb items for archive pages. + * + * Handles taxonomy archives, post type archives, date archives, and author archives. + * For hierarchical taxonomies, includes ancestor terms in the breadcrumb trail. + * + * @since 7.0.0 + * + * @return array Array of breadcrumb item data. + */ +function block_core_breadcrumbs_get_archive_breadcrumbs() { + $breadcrumb_items = array(); + + // Date archive (check first since it doesn't have a queried object). + if ( is_date() ) { + $year = get_query_var( 'year' ); + $month = get_query_var( 'monthnum' ); + $day = get_query_var( 'day' ); + + // Fallback to 'm' query var for plain permalinks. + // Plain permalinks use ?m=YYYYMMDD format instead of separate query vars. + if ( ! $year ) { + $m = get_query_var( 'm' ); + if ( $m ) { + $year = substr( $m, 0, 4 ); + $month = substr( $m, 4, 2 ); + $day = (int) substr( $m, 6, 2 ); + } + } + + $is_paged = block_core_breadcrumbs_is_paged(); + + if ( $year ) { + if ( $month ) { + // Year is linked if we have month. + $breadcrumb_items[] = array( + 'label' => $year, + 'url' => get_year_link( $year ), + ); + + if ( $day ) { + // Month is linked if we have day. + $breadcrumb_items[] = array( + 'label' => date_i18n( 'F', mktime( 0, 0, 0, $month, 1, $year ) ), + 'url' => get_month_link( $year, $month ), + ); + // Add day (current if not paginated, link if paginated). + $breadcrumb_items[] = block_core_breadcrumbs_create_item( + $day, + $is_paged + ); + } else { + // Add month (current if not paginated, link if paginated). + $breadcrumb_items[] = block_core_breadcrumbs_create_item( + date_i18n( 'F', mktime( 0, 0, 0, $month, 1, $year ) ), + $is_paged + ); + } + } else { + // Add year (current if not paginated, link if paginated). + $breadcrumb_items[] = block_core_breadcrumbs_create_item( + $year, + $is_paged + ); + } + } + + // Add pagination breadcrumb if on a paged date archive. + if ( $is_paged ) { + $breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item(); + } + + return $breadcrumb_items; + } + + // For other archive types, we need a queried object. + $queried_object = get_queried_object(); + + if ( ! $queried_object ) { + return array(); + } + + $is_paged = block_core_breadcrumbs_is_paged(); + + // Taxonomy archive (category, tag, custom taxonomy). + if ( $queried_object instanceof WP_Term ) { + $term = $queried_object; + $taxonomy = $term->taxonomy; + + // Add hierarchical term ancestors if applicable. + $breadcrumb_items = array_merge( + $breadcrumb_items, + block_core_breadcrumbs_get_term_ancestors_items( $term->term_id, $taxonomy ) + ); + + // Add current term (current if not paginated, link if paginated). + $breadcrumb_items[] = block_core_breadcrumbs_create_item( + $term->name, + $is_paged + ); + } elseif ( is_post_type_archive() ) { + // Post type archive. + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + $post_type_object = get_post_type_object( $post_type ); + + /** This filter is documented in wp-includes/general-template.php */ + $title = apply_filters( 'post_type_archive_title', $post_type_object->labels->archives, $post_type ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound + + if ( $post_type_object ) { + // Add post type (current if not paginated, link if paginated). + $breadcrumb_items[] = block_core_breadcrumbs_create_item( + $title ? $title : $post_type_object->labels->archives, + $is_paged + ); + } + } elseif ( is_author() ) { + // Author archive. + $author = $queried_object; + // Add author (current if not paginated, link if paginated). + $breadcrumb_items[] = block_core_breadcrumbs_create_item( + $author->display_name, + $is_paged + ); + } + + // Add pagination breadcrumb if on a paged archive. + if ( $is_paged ) { + $breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item(); + } + + return $breadcrumb_items; +} + +/** + * Generates breadcrumb items from taxonomy terms. + * + * Finds the first publicly queryable taxonomy with terms assigned to the post + * and generates breadcrumb links, including hierarchical term ancestors if applicable. + * + * @since 7.0.0 + * + * @param int $post_id The post ID. + * @param string $post_type The post type name. + * + * @return array Array of breadcrumb item data. + */ +function block_core_breadcrumbs_get_terms_breadcrumbs( $post_id, $post_type ) { + $breadcrumb_items = array(); + + // Get public taxonomies for this post type. + $taxonomies = wp_filter_object_list( + get_object_taxonomies( $post_type, 'objects' ), + array( + 'publicly_queryable' => true, + 'show_in_rest' => true, + ) + ); + + if ( empty( $taxonomies ) ) { + return $breadcrumb_items; + } + + /** + * Filters breadcrumb settings (taxonomy and term selection) for a post or post type. + * + * Allows developers to specify which taxonomy and term should be used in the + * breadcrumb trail when a post type has multiple taxonomies or when a post is + * assigned to multiple terms within a taxonomy. + * + * @since 7.0.0 + * + * @param array $settings { + * Array of breadcrumb settings. Default empty array. + * + * @type string $taxonomy Optional. Taxonomy slug to use for breadcrumbs. + * The taxonomy must be registered for the post type and have + * terms assigned to the post. If not found or has no terms, + * fall back to the first available taxonomy with terms. + * @type string $term Optional. Term slug to use when the post has multiple terms + * in the selected taxonomy. If the term is not found or not + * assigned to the post, fall back to the first term. If the + * post has only one term, that term is used regardless. + * } + * @param string $post_type The post type slug. + * @param int $post_id The post ID. + */ + $settings = apply_filters( 'block_core_breadcrumbs_post_type_settings', array(), $post_type, $post_id ); + + $taxonomy_name = null; + $terms = array(); + + // Try preferred taxonomy first if specified. + if ( ! empty( $settings['taxonomy'] ) ) { + foreach ( $taxonomies as $taxonomy ) { + if ( $taxonomy->name === $settings['taxonomy'] ) { + $post_terms = get_the_terms( $post_id, $taxonomy->name ); + if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) { + $taxonomy_name = $taxonomy->name; + $terms = $post_terms; + } + break; + } + } + } + + // If no preferred taxonomy or it didn't have terms, find the first taxonomy with terms. + if ( empty( $terms ) ) { + foreach ( $taxonomies as $taxonomy ) { + $post_terms = get_the_terms( $post_id, $taxonomy->name ); + if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) { + $taxonomy_name = $taxonomy->name; + $terms = $post_terms; + break; + } + } + } + + if ( ! empty( $terms ) ) { + // Select which term to use. + $term = reset( $terms ); + + // Try preferred term if specified and post has multiple terms. + if ( ! empty( $settings['term'] ) && count( $terms ) > 1 ) { + foreach ( $terms as $candidate_term ) { + if ( $candidate_term->slug === $settings['term'] ) { + $term = $candidate_term; + break; + } + } + } + + // Add hierarchical term ancestors if applicable. + $breadcrumb_items = array_merge( + $breadcrumb_items, + block_core_breadcrumbs_get_term_ancestors_items( $term->term_id, $taxonomy_name ) + ); + $breadcrumb_items[] = array( + 'label' => $term->name, + 'url' => get_term_link( $term ), + ); + } + return $breadcrumb_items; +} + +/** + * Registers the `core/breadcrumbs` block on the server. + * + * @since 7.0.0 + */ +function register_block_core_breadcrumbs() { + register_block_type_from_metadata( + __DIR__ . '/breadcrumbs', + array( + 'render_callback' => 'render_block_core_breadcrumbs', + ) + ); +} +add_action( 'init', 'register_block_core_breadcrumbs' ); diff --git a/src/wp-includes/blocks/breadcrumbs/block.json b/src/wp-includes/blocks/breadcrumbs/block.json new file mode 100644 index 0000000000000..597e36c41ae50 --- /dev/null +++ b/src/wp-includes/blocks/breadcrumbs/block.json @@ -0,0 +1,78 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/breadcrumbs", + "title": "Breadcrumbs", + "category": "theme", + "description": "Display a breadcrumb trail showing the path to the current page.", + "textdomain": "default", + "attributes": { + "prefersTaxonomy": { + "type": "boolean", + "default": false + }, + "separator": { + "type": "string", + "default": "/" + }, + "showHomeItem": { + "type": "boolean", + "default": true + }, + "showCurrentItem": { + "type": "boolean", + "default": true + }, + "showOnHomePage": { + "type": "boolean", + "default": false + } + }, + "usesContext": [ "postId", "postType", "templateSlug" ], + "supports": { + "anchor": true, + "html": false, + "align": [ "wide", "full" ], + "spacing": { + "margin": true, + "padding": true + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": false, + "color": true, + "width": true, + "style": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "style": "wp-block-breadcrumbs" +} diff --git a/src/wp-includes/blocks/button.php b/src/wp-includes/blocks/button.php new file mode 100644 index 0000000000000..0d03440b1cb0f --- /dev/null +++ b/src/wp-includes/blocks/button.php @@ -0,0 +1,79 @@ +` or `'; + + $body_content = preg_replace( '/]+>/', $button, $body_content ); + + add_action( 'wp_footer', 'block_core_image_print_lightbox_overlay' ); + + return $body_content; +} + +/** + * @since 6.5.0 + */ +function block_core_image_print_lightbox_overlay() { + $close_button_label = esc_attr__( 'Close' ); + + // If the current theme does NOT have a `theme.json`, or the colors are not + // defined, it needs to set the background color & close button color to some + // default values because it can't get them from the Global Styles. + $background_color = '#fff'; + $close_button_color = '#000'; + if ( wp_theme_has_theme_json() ) { + $global_styles_color = wp_get_global_styles( array( 'color' ) ); + if ( ! empty( $global_styles_color['background'] ) ) { + $background_color = esc_attr( $global_styles_color['background'] ); + } + if ( ! empty( $global_styles_color['text'] ) ) { + $close_button_color = esc_attr( $global_styles_color['text'] ); + } + } + + echo << + + + + + +HTML; +} + +/** + * Registers the `core/image` block on server. + * + * @since 5.9.0 + */ +function register_block_core_image() { + register_block_type_from_metadata( + __DIR__ . '/image', + array( + 'render_callback' => 'render_block_core_image', + ) + ); +} +add_action( 'init', 'register_block_core_image' ); diff --git a/src/wp-includes/blocks/image/block.json b/src/wp-includes/blocks/image/block.json new file mode 100644 index 0000000000000..26835df9e856c --- /dev/null +++ b/src/wp-includes/blocks/image/block.json @@ -0,0 +1,151 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/image", + "title": "Image", + "category": "media", + "usesContext": [ + "allowResize", + "imageCrop", + "fixedHeight", + "postId", + "postType", + "queryId" + ], + "description": "Insert an image to make a visual statement.", + "keywords": [ "img", "photo", "picture" ], + "textdomain": "default", + "attributes": { + "blob": { + "type": "string", + "role": "local" + }, + "url": { + "type": "string", + "source": "attribute", + "selector": "img", + "attribute": "src", + "role": "content" + }, + "alt": { + "type": "string", + "source": "attribute", + "selector": "img", + "attribute": "alt", + "default": "", + "role": "content" + }, + "caption": { + "type": "rich-text", + "source": "rich-text", + "selector": "figcaption", + "role": "content" + }, + "lightbox": { + "type": "object", + "enabled": { + "type": "boolean" + } + }, + "title": { + "type": "string", + "source": "attribute", + "selector": "img", + "attribute": "title", + "role": "content" + }, + "href": { + "type": "string", + "source": "attribute", + "selector": "figure > a", + "attribute": "href", + "role": "content" + }, + "rel": { + "type": "string", + "source": "attribute", + "selector": "figure > a", + "attribute": "rel" + }, + "linkClass": { + "type": "string", + "source": "attribute", + "selector": "figure > a", + "attribute": "class" + }, + "id": { + "type": "number", + "role": "content" + }, + "width": { + "type": "string" + }, + "height": { + "type": "string" + }, + "aspectRatio": { + "type": "string" + }, + "scale": { + "type": "string" + }, + "sizeSlug": { + "type": "string" + }, + "linkDestination": { + "type": "string" + }, + "linkTarget": { + "type": "string", + "source": "attribute", + "selector": "figure > a", + "attribute": "target" + } + }, + "supports": { + "interactivity": true, + "align": [ "left", "center", "right", "wide", "full" ], + "anchor": true, + "color": { + "text": false, + "background": false + }, + "filter": { + "duotone": true + }, + "spacing": { + "margin": true + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "width": true, + "__experimentalSkipSerialization": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "width": true + } + }, + "shadow": { + "__experimentalSkipSerialization": true + } + }, + "selectors": { + "border": ".wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder", + "shadow": ".wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder", + "filter": { + "duotone": ".wp-block-image img, .wp-block-image .components-placeholder" + } + }, + "styles": [ + { + "name": "default", + "label": "Default", + "isDefault": true + }, + { "name": "rounded", "label": "Rounded" } + ], + "editorStyle": "wp-block-image-editor", + "style": "wp-block-image" +} diff --git a/src/wp-includes/blocks/latest-comments.php b/src/wp-includes/blocks/latest-comments.php new file mode 100644 index 0000000000000..bbe82b8b18f9a --- /dev/null +++ b/src/wp-includes/blocks/latest-comments.php @@ -0,0 +1,162 @@ + $attributes['commentsToShow'], + 'status' => 'approve', + 'post_status' => 'publish', + ), + array() + ) + ); + + $list_items_markup = ''; + if ( ! empty( $comments ) ) { + // Prime the cache for associated posts. This is copied from \WP_Widget_Recent_Comments::widget(). + $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) ); + _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false ); + + foreach ( $comments as $comment ) { + $list_items_markup .= '
  • '; + if ( $attributes['displayAvatar'] ) { + $avatar = get_avatar( + $comment, + 48, + '', + '', + array( + 'class' => 'wp-block-latest-comments__comment-avatar', + ) + ); + if ( $avatar ) { + $list_items_markup .= $avatar; + } + } + + $list_items_markup .= '
    '; + $list_items_markup .= ''; + if ( $attributes['displayExcerpt'] ) { + $list_items_markup .= '
    ' . wpautop( get_comment_excerpt( $comment ) ) . '
    '; + } + $list_items_markup .= '
  • '; + } + } + + $classnames = array(); + if ( $attributes['displayAvatar'] ) { + $classnames[] = 'has-avatars'; + } + if ( $attributes['displayDate'] ) { + $classnames[] = 'has-dates'; + } + if ( $attributes['displayExcerpt'] ) { + $classnames[] = 'has-excerpts'; + } + if ( empty( $comments ) ) { + $classnames[] = 'no-comments'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classnames ) ) ); + + return ! empty( $comments ) ? sprintf( + '
      %2$s
    ', + $wrapper_attributes, + $list_items_markup + ) : sprintf( + '
    %2$s
    ', + $wrapper_attributes, + __( 'No comments to show.' ) + ); +} + +/** + * Registers the `core/latest-comments` block. + * + * @since 5.3.0 + */ +function register_block_core_latest_comments() { + register_block_type_from_metadata( + __DIR__ . '/latest-comments', + array( + 'render_callback' => 'render_block_core_latest_comments', + ) + ); +} + +add_action( 'init', 'register_block_core_latest_comments' ); diff --git a/src/wp-includes/blocks/latest-comments/block.json b/src/wp-includes/blocks/latest-comments/block.json new file mode 100644 index 0000000000000..543512ddf3ce7 --- /dev/null +++ b/src/wp-includes/blocks/latest-comments/block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/latest-comments", + "title": "Latest Comments", + "category": "widgets", + "description": "Display a list of your most recent comments.", + "keywords": [ "recent comments" ], + "textdomain": "default", + "attributes": { + "commentsToShow": { + "type": "number", + "default": 5, + "minimum": 1, + "maximum": 100 + }, + "displayAvatar": { + "type": "boolean", + "default": true + }, + "displayDate": { + "type": "boolean", + "default": true + }, + "displayExcerpt": { + "type": "boolean", + "default": true + } + }, + "supports": { + "align": true, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "html": false, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-latest-comments-editor", + "style": "wp-block-latest-comments" +} diff --git a/src/wp-includes/blocks/latest-posts.php b/src/wp-includes/blocks/latest-posts.php new file mode 100644 index 0000000000000..b970f486bb6a1 --- /dev/null +++ b/src/wp-includes/blocks/latest-posts.php @@ -0,0 +1,273 @@ + $attributes['postsToShow'], + 'post_status' => 'publish', + 'order' => $attributes['order'], + 'orderby' => $attributes['orderBy'], + 'ignore_sticky_posts' => true, + 'no_found_rows' => true, + ); + + $block_core_latest_posts_excerpt_length = $attributes['excerptLength']; + add_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 ); + + if ( ! empty( $attributes['categories'] ) ) { + $args['category__in'] = array_column( $attributes['categories'], 'id' ); + } + if ( isset( $attributes['selectedAuthor'] ) ) { + $args['author'] = $attributes['selectedAuthor']; + } + + $query = new WP_Query(); + $recent_posts = $query->query( $args ); + + if ( isset( $attributes['displayFeaturedImage'] ) && $attributes['displayFeaturedImage'] ) { + update_post_thumbnail_cache( $query ); + } + + $list_items_markup = ''; + + foreach ( $recent_posts as $post ) { + $post_link = esc_url( get_permalink( $post ) ); + $title = get_the_title( $post ); + + if ( ! $title ) { + $title = __( '(no title)' ); + } + + $list_items_markup .= '
  • '; + + if ( $attributes['displayFeaturedImage'] && has_post_thumbnail( $post ) ) { + $image_style = ''; + if ( isset( $attributes['featuredImageSizeWidth'] ) ) { + $image_style .= sprintf( 'max-width:%spx;', $attributes['featuredImageSizeWidth'] ); + } + if ( isset( $attributes['featuredImageSizeHeight'] ) ) { + $image_style .= sprintf( 'max-height:%spx;', $attributes['featuredImageSizeHeight'] ); + } + + $image_classes = 'wp-block-latest-posts__featured-image'; + if ( isset( $attributes['featuredImageAlign'] ) ) { + $image_classes .= ' align' . $attributes['featuredImageAlign']; + } + + $featured_image = get_the_post_thumbnail( + $post, + $attributes['featuredImageSizeSlug'], + array( + 'style' => esc_attr( $image_style ), + ) + ); + if ( $attributes['addLinkToFeaturedImage'] ) { + $featured_image = sprintf( + '%3$s', + esc_url( $post_link ), + esc_attr( $title ), + $featured_image + ); + } + $list_items_markup .= sprintf( + '
    %2$s
    ', + esc_attr( $image_classes ), + $featured_image + ); + } + + $list_items_markup .= sprintf( + '%2$s', + esc_url( $post_link ), + $title + ); + + if ( isset( $attributes['displayAuthor'] ) && $attributes['displayAuthor'] ) { + $author_display_name = get_the_author_meta( 'display_name', $post->post_author ); + + /* translators: byline. %s: author. */ + $byline = sprintf( __( 'by %s' ), $author_display_name ); + + if ( ! empty( $author_display_name ) ) { + $list_items_markup .= sprintf( + '', + $byline + ); + } + } + + if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) { + $list_items_markup .= sprintf( + '', + esc_attr( get_the_date( 'c', $post ) ), + get_the_date( '', $post ) + ); + } + + if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent'] + && isset( $attributes['displayPostContentRadio'] ) && 'excerpt' === $attributes['displayPostContentRadio'] ) { + + $trimmed_excerpt = get_the_excerpt( $post ); + + /* + * Adds a "Read more" link with screen reader text. + * […] is the default excerpt ending from wp_trim_excerpt() in Core. + */ + if ( str_ends_with( $trimmed_excerpt, ' […]' ) ) { + /** This filter is documented in wp-includes/formatting.php */ + $excerpt_length = (int) apply_filters( 'excerpt_length', $block_core_latest_posts_excerpt_length ); + if ( $excerpt_length <= $block_core_latest_posts_excerpt_length ) { + $trimmed_excerpt = substr( $trimmed_excerpt, 0, -11 ); + $trimmed_excerpt .= sprintf( + /* translators: 1: A URL to a post, 2: Hidden accessibility text: Post title */ + __( '… Read more: %2$s' ), + esc_url( $post_link ), + esc_html( $title ) + ); + } + } + + if ( post_password_required( $post ) ) { + $trimmed_excerpt = __( 'This content is password protected.' ); + } + + $list_items_markup .= sprintf( + '
    %1$s
    ', + $trimmed_excerpt + ); + } + + if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent'] + && isset( $attributes['displayPostContentRadio'] ) && 'full_post' === $attributes['displayPostContentRadio'] ) { + + $post_content = html_entity_decode( $post->post_content, ENT_QUOTES, get_option( 'blog_charset' ) ); + + if ( post_password_required( $post ) ) { + $post_content = __( 'This content is password protected.' ); + } + + $list_items_markup .= sprintf( + '
    %1$s
    ', + wp_kses_post( $post_content ) + ); + } + + $list_items_markup .= "
  • \n"; + } + + remove_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 ); + + $classes = array( 'wp-block-latest-posts__list' ); + if ( isset( $attributes['postLayout'] ) && 'grid' === $attributes['postLayout'] ) { + $classes[] = 'is-grid'; + } + if ( isset( $attributes['columns'] ) && 'grid' === $attributes['postLayout'] ) { + $classes[] = 'columns-' . $attributes['columns']; + } + if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) { + $classes[] = 'has-dates'; + } + if ( isset( $attributes['displayAuthor'] ) && $attributes['displayAuthor'] ) { + $classes[] = 'has-author'; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + return sprintf( + '
      %2$s
    ', + $wrapper_attributes, + $list_items_markup + ); +} + +/** + * Registers the `core/latest-posts` block on server. + * + * @since 5.0.0 + */ +function register_block_core_latest_posts() { + register_block_type_from_metadata( + __DIR__ . '/latest-posts', + array( + 'render_callback' => 'render_block_core_latest_posts', + ) + ); +} +add_action( 'init', 'register_block_core_latest_posts' ); + +/** + * Handles outdated versions of the `core/latest-posts` block by converting + * attribute `categories` from a numeric string to an array with key `id`. + * + * This is done to accommodate the changes introduced in #20781 that sought to + * add support for multiple categories to the block. However, given that this + * block is dynamic, the usual provisions for block migration are insufficient, + * as they only act when a block is loaded in the editor. + * + * TODO: Remove when and if the bottom client-side deprecation for this block + * is removed. + * + * @since 5.5.0 + * + * @param array $block A single parsed block object. + * + * @return array The migrated block object. + */ +function block_core_latest_posts_migrate_categories( $block ) { + if ( + 'core/latest-posts' === $block['blockName'] && + ! empty( $block['attrs']['categories'] ) && + is_string( $block['attrs']['categories'] ) + ) { + $block['attrs']['categories'] = array( + array( 'id' => absint( $block['attrs']['categories'] ) ), + ); + } + + return $block; +} +add_filter( 'render_block_data', 'block_core_latest_posts_migrate_categories' ); diff --git a/src/wp-includes/blocks/latest-posts/block.json b/src/wp-includes/blocks/latest-posts/block.json new file mode 100644 index 0000000000000..58b1c6da81ca3 --- /dev/null +++ b/src/wp-includes/blocks/latest-posts/block.json @@ -0,0 +1,132 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/latest-posts", + "title": "Latest Posts", + "category": "widgets", + "description": "Display a list of your most recent posts.", + "keywords": [ "recent posts" ], + "textdomain": "default", + "attributes": { + "categories": { + "type": "array", + "items": { + "type": "object" + } + }, + "selectedAuthor": { + "type": "number" + }, + "postsToShow": { + "type": "number", + "default": 5 + }, + "displayPostContent": { + "type": "boolean", + "default": false + }, + "displayPostContentRadio": { + "type": "string", + "default": "excerpt" + }, + "excerptLength": { + "type": "number", + "default": 55 + }, + "displayAuthor": { + "type": "boolean", + "default": false + }, + "displayPostDate": { + "type": "boolean", + "default": false + }, + "postLayout": { + "type": "string", + "default": "list" + }, + "columns": { + "type": "number", + "default": 3 + }, + "order": { + "type": "string", + "default": "desc" + }, + "orderBy": { + "type": "string", + "default": "date" + }, + "displayFeaturedImage": { + "type": "boolean", + "default": false + }, + "featuredImageAlign": { + "type": "string", + "enum": [ "left", "center", "right" ] + }, + "featuredImageSizeSlug": { + "type": "string", + "default": "thumbnail" + }, + "featuredImageSizeWidth": { + "type": "number", + "default": null + }, + "featuredImageSizeHeight": { + "type": "number", + "default": null + }, + "addLinkToFeaturedImage": { + "type": "boolean", + "default": false + } + }, + "supports": { + "align": true, + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-latest-posts-editor", + "style": "wp-block-latest-posts" +} diff --git a/src/wp-includes/blocks/legacy-widget.php b/src/wp-includes/blocks/legacy-widget.php new file mode 100644 index 0000000000000..bec1b16b6ba8c --- /dev/null +++ b/src/wp-includes/blocks/legacy-widget.php @@ -0,0 +1,157 @@ +get_widget_key( $id_base ); + $widget_object = $wp_widget_factory->get_widget_object( $id_base ); + + if ( ! $widget_key || ! $widget_object ) { + return ''; + } + + if ( isset( $attributes['instance']['encoded'], $attributes['instance']['hash'] ) ) { + $serialized_instance = base64_decode( $attributes['instance']['encoded'] ); + if ( ! hash_equals( wp_hash( $serialized_instance ), (string) $attributes['instance']['hash'] ) ) { + return ''; + } + $instance = unserialize( $serialized_instance ); + } else { + $instance = array(); + } + + $args = array( + 'widget_id' => $widget_object->id, + 'widget_name' => $widget_object->name, + ); + + ob_start(); + the_widget( $widget_key, $instance, $args ); + return ob_get_clean(); +} + +/** + * Registers the 'core/legacy-widget' block. + * + * @since 5.8.0 + */ +function register_block_core_legacy_widget() { + register_block_type_from_metadata( + __DIR__ . '/legacy-widget', + array( + 'render_callback' => 'render_block_core_legacy_widget', + ) + ); +} + +add_action( 'init', 'register_block_core_legacy_widget' ); + +/** + * Intercepts any request with legacy-widget-preview in the query param and, if + * set, renders a page containing a preview of the requested Legacy Widget + * block. + * + * @since 5.8.0 + */ +function handle_legacy_widget_preview_iframe() { + if ( empty( $_GET['legacy-widget-preview'] ) ) { + return; + } + + if ( ! current_user_can( 'edit_theme_options' ) ) { + return; + } + + define( 'IFRAME_REQUEST', true ); + + ?> + + > + + + + + + + + > +
    +
    + get_registered( 'core/legacy-widget' ); + echo $block->render( $_GET['legacy-widget-preview'] ); + ?> +
    +
    + + + + li", + "border": ".wp-block-list:not(.wp-block-list .wp-block-list) > li" + } +} diff --git a/src/wp-includes/blocks/list.php b/src/wp-includes/blocks/list.php new file mode 100644 index 0000000000000..1bffd81324857 --- /dev/null +++ b/src/wp-includes/blocks/list.php @@ -0,0 +1,54 @@ + is transformed to
      . + * + * @since 6.6.0 + * + * @see https://github.com/WordPress/gutenberg/issues/12420 + * + * @param array $attributes Attributes of the block being rendered. + * @param string $content Content of the block being rendered. + * + * @return string The content of the block being rendered. + */ +function block_core_list_render( $attributes, $content ) { + if ( ! $content ) { + return $content; + } + + $processor = new WP_HTML_Tag_Processor( $content ); + + $list_tags = array( 'OL', 'UL' ); + while ( $processor->next_tag() ) { + if ( in_array( $processor->get_tag(), $list_tags, true ) ) { + $processor->add_class( 'wp-block-list' ); + break; + } + } + + return $processor->get_updated_html(); +} + +/** + * Registers the `core/list` block on server. + * + * @since 6.6.0 + */ +function register_block_core_list() { + register_block_type_from_metadata( + __DIR__ . '/list', + array( + 'render_callback' => 'block_core_list_render', + ) + ); +} + +add_action( 'init', 'register_block_core_list' ); diff --git a/src/wp-includes/blocks/list/block.json b/src/wp-includes/blocks/list/block.json new file mode 100644 index 0000000000000..bd696c30c334c --- /dev/null +++ b/src/wp-includes/blocks/list/block.json @@ -0,0 +1,88 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/list", + "title": "List", + "category": "text", + "allowedBlocks": [ "core/list-item" ], + "description": "An organized collection of items displayed in a specific order.", + "keywords": [ "bullet list", "ordered list", "numbered list" ], + "textdomain": "default", + "attributes": { + "ordered": { + "type": "boolean", + "default": false, + "role": "content" + }, + "values": { + "type": "string", + "source": "html", + "selector": "ol,ul", + "multiline": "li", + "default": "", + "role": "content" + }, + "type": { + "type": "string" + }, + "start": { + "type": "number" + }, + "reversed": { + "type": "boolean" + }, + "placeholder": { + "type": "string" + } + }, + "supports": { + "anchor": true, + "html": false, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "__unstablePasteTextInline": true, + "__experimentalOnMerge": true, + "__experimentalSlashInserter": true, + "interactivity": { + "clientNavigation": true + } + }, + "selectors": { + "border": ".wp-block-list:not(.wp-block-list .wp-block-list)" + }, + "editorStyle": "wp-block-list-editor", + "style": "wp-block-list" +} diff --git a/src/wp-includes/blocks/loginout.php b/src/wp-includes/blocks/loginout.php new file mode 100644 index 0000000000000..f83d8be424ece --- /dev/null +++ b/src/wp-includes/blocks/loginout.php @@ -0,0 +1,61 @@ + false ) ); + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) ); + + return '
      ' . $contents . '
      '; +} + +/** + * Registers the `core/loginout` block on server. + * + * @since 5.8.0 + */ +function register_block_core_loginout() { + register_block_type_from_metadata( + __DIR__ . '/loginout', + array( + 'render_callback' => 'render_block_core_loginout', + ) + ); +} +add_action( 'init', 'register_block_core_loginout' ); diff --git a/src/wp-includes/blocks/loginout/block.json b/src/wp-includes/blocks/loginout/block.json new file mode 100644 index 0000000000000..f2aaafd60fde0 --- /dev/null +++ b/src/wp-includes/blocks/loginout/block.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/loginout", + "title": "Login/out", + "category": "theme", + "description": "Show login & logout links.", + "keywords": [ "login", "logout", "form" ], + "textdomain": "default", + "attributes": { + "displayLoginAsForm": { + "type": "boolean", + "default": false + }, + "redirectToCurrent": { + "type": "boolean", + "default": true + } + }, + "example": { + "viewportWidth": 350 + }, + "supports": { + "className": true, + "color": { + "background": true, + "text": false, + "gradients": true, + "link": true + }, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + }, + "interactivity": { + "clientNavigation": true + } + }, + "style": "wp-block-loginout" +} diff --git a/src/wp-includes/blocks/math/block.json b/src/wp-includes/blocks/math/block.json new file mode 100644 index 0000000000000..4b47761307c4c --- /dev/null +++ b/src/wp-includes/blocks/math/block.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/math", + "title": "Math", + "category": "text", + "description": "Display mathematical notation using LaTeX.", + "keywords": [ "equation", "formula", "latex", "mathematics" ], + "textdomain": "default", + "supports": { + "html": false + }, + "attributes": { + "latex": { + "type": "string", + "role": "content" + }, + "mathML": { + "type": "string", + "source": "html", + "selector": "math" + } + } +} diff --git a/src/wp-includes/blocks/media-text.php b/src/wp-includes/blocks/media-text.php new file mode 100644 index 0000000000000..b65137b150ba5 --- /dev/null +++ b/src/wp-includes/blocks/media-text.php @@ -0,0 +1,131 @@ + 'div', + 'class_name' => 'wp-block-media-text', + ); + + while ( $block_tag_processor->next_tag( $block_query ) ) { + if ( $image_fill ) { + // The markup below does not work with the deprecated `is-image-fill` class. + $block_tag_processor->remove_class( 'is-image-fill' ); + $block_tag_processor->add_class( 'is-image-fill-element' ); + } + } + + $content = $block_tag_processor->get_updated_html(); + + $media_tag_processor = new WP_HTML_Tag_Processor( $content ); + $wrapping_figure_query = array( + 'tag_name' => 'figure', + 'class_name' => 'wp-block-media-text__media', + ); + + if ( $has_media_on_right ) { + // Loop through all the figure tags and set a bookmark on the last figure tag. + while ( $media_tag_processor->next_tag( $wrapping_figure_query ) ) { + $media_tag_processor->set_bookmark( 'last_figure' ); + } + if ( $media_tag_processor->has_bookmark( 'last_figure' ) ) { + $media_tag_processor->seek( 'last_figure' ); + // Insert a unique ID to identify the figure tag. + $media_tag_processor->set_attribute( 'id', $unique_id ); + } + } else { + if ( $media_tag_processor->next_tag( $wrapping_figure_query ) ) { + // Insert a unique ID to identify the figure tag. + $media_tag_processor->set_attribute( 'id', $unique_id ); + } + } + + $content = $media_tag_processor->get_updated_html(); + + // Add the image tag inside the figure tag, and update the image attributes + // in order to display the featured image. + $media_size_slug = isset( $attributes['mediaSizeSlug'] ) ? $attributes['mediaSizeSlug'] : 'full'; + $image_tag = ''; + $content = preg_replace( + '/()/', + '$1' . $image_tag, + $content + ); + + $image_tag_processor = new WP_HTML_Tag_Processor( $content ); + if ( $image_tag_processor->next_tag( + array( + 'tag_name' => 'figure', + 'id' => $unique_id, + ) + ) ) { + // The ID is only used to ensure that the correct figure tag is selected, + // and can now be removed. + $image_tag_processor->remove_attribute( 'id' ); + if ( $image_tag_processor->next_tag( + array( + 'tag_name' => 'img', + 'class_name' => 'wp-block-media-text__featured_image', + ) + ) ) { + $image_tag_processor->set_attribute( 'src', esc_url( $current_featured_image ) ); + $image_tag_processor->set_attribute( 'class', 'wp-image-' . get_post_thumbnail_id() . ' size-' . $media_size_slug ); + $image_tag_processor->set_attribute( 'alt', trim( strip_tags( get_post_meta( get_post_thumbnail_id(), '_wp_attachment_image_alt', true ) ) ) ); + if ( $image_fill ) { + $image_tag_processor->set_attribute( 'style', 'object-position:' . $focal_point . ';' ); + } + + $content = $image_tag_processor->get_updated_html(); + } + } + + return $content; +} + +/** + * Registers the `core/media-text` block renderer on server. + * + * @since 6.6.0 + */ +function register_block_core_media_text() { + register_block_type_from_metadata( + __DIR__ . '/media-text', + array( + 'render_callback' => 'render_block_core_media_text', + ) + ); +} +add_action( 'init', 'register_block_core_media_text' ); diff --git a/src/wp-includes/blocks/media-text/block.json b/src/wp-includes/blocks/media-text/block.json new file mode 100644 index 0000000000000..249a5d43032c8 --- /dev/null +++ b/src/wp-includes/blocks/media-text/block.json @@ -0,0 +1,148 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/media-text", + "title": "Media & Text", + "category": "media", + "description": "Set media and words side-by-side for a richer layout.", + "keywords": [ "image", "video" ], + "textdomain": "default", + "attributes": { + "align": { + "type": "string", + "default": "none" + }, + "mediaAlt": { + "type": "string", + "source": "attribute", + "selector": "figure img", + "attribute": "alt", + "default": "", + "role": "content" + }, + "mediaPosition": { + "type": "string", + "default": "left" + }, + "mediaId": { + "type": "number", + "role": "content" + }, + "mediaUrl": { + "type": "string", + "source": "attribute", + "selector": "figure video,figure img", + "attribute": "src", + "role": "content" + }, + "mediaLink": { + "type": "string" + }, + "linkDestination": { + "type": "string" + }, + "linkTarget": { + "type": "string", + "source": "attribute", + "selector": "figure a", + "attribute": "target" + }, + "href": { + "type": "string", + "source": "attribute", + "selector": "figure a", + "attribute": "href", + "role": "content" + }, + "rel": { + "type": "string", + "source": "attribute", + "selector": "figure a", + "attribute": "rel" + }, + "linkClass": { + "type": "string", + "source": "attribute", + "selector": "figure a", + "attribute": "class" + }, + "mediaType": { + "type": "string", + "role": "content" + }, + "mediaWidth": { + "type": "number", + "default": 50 + }, + "mediaSizeSlug": { + "type": "string" + }, + "isStackedOnMobile": { + "type": "boolean", + "default": true + }, + "verticalAlignment": { + "type": "string" + }, + "imageFill": { + "type": "boolean" + }, + "focalPoint": { + "type": "object" + }, + "useFeaturedImage": { + "type": "boolean", + "default": false + } + }, + "usesContext": [ "postId", "postType" ], + "supports": { + "anchor": true, + "align": [ "wide", "full" ], + "html": false, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "style": true, + "width": true + } + }, + "color": { + "gradients": true, + "heading": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "allowedBlocks": true + }, + "editorStyle": "wp-block-media-text-editor", + "style": "wp-block-media-text" +} diff --git a/src/wp-includes/blocks/missing/block.json b/src/wp-includes/blocks/missing/block.json new file mode 100644 index 0000000000000..94051f20be7e5 --- /dev/null +++ b/src/wp-includes/blocks/missing/block.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/missing", + "title": "Unsupported", + "category": "text", + "description": "Your site doesn’t include support for this block.", + "textdomain": "default", + "attributes": { + "originalName": { + "type": "string" + }, + "originalUndelimitedContent": { + "type": "string" + }, + "originalContent": { + "type": "string", + "source": "raw" + } + }, + "supports": { + "className": false, + "customClassName": false, + "inserter": false, + "html": false, + "lock": false, + "reusable": false, + "renaming": false, + "blockVisibility": false, + "interactivity": { + "clientNavigation": true + } + } +} diff --git a/src/wp-includes/blocks/more/block.json b/src/wp-includes/blocks/more/block.json new file mode 100644 index 0000000000000..01c4b3ce961e5 --- /dev/null +++ b/src/wp-includes/blocks/more/block.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/more", + "title": "More", + "category": "design", + "description": "Content before this block will be shown in the excerpt on your archives page.", + "keywords": [ "read more" ], + "textdomain": "default", + "attributes": { + "customText": { + "type": "string", + "default": "", + "role": "content" + }, + "noTeaser": { + "type": "boolean", + "default": false + } + }, + "supports": { + "customClassName": false, + "className": false, + "html": false, + "multiple": false, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-more-editor" +} diff --git a/src/wp-includes/blocks/navigation-link.php b/src/wp-includes/blocks/navigation-link.php new file mode 100644 index 0000000000000..111598ea4c486 --- /dev/null +++ b/src/wp-includes/blocks/navigation-link.php @@ -0,0 +1,446 @@ + array(), + 'inline_styles' => '', + ); + + // Text color. + $named_text_color = null; + $custom_text_color = null; + + if ( $is_sub_menu && array_key_exists( 'customOverlayTextColor', $context ) ) { + $custom_text_color = $context['customOverlayTextColor']; + } elseif ( $is_sub_menu && array_key_exists( 'overlayTextColor', $context ) ) { + $named_text_color = $context['overlayTextColor']; + } elseif ( array_key_exists( 'customTextColor', $context ) ) { + $custom_text_color = $context['customTextColor']; + } elseif ( array_key_exists( 'textColor', $context ) ) { + $named_text_color = $context['textColor']; + } elseif ( isset( $context['style']['color']['text'] ) ) { + $custom_text_color = $context['style']['color']['text']; + } + + // If has text color. + if ( ! is_null( $named_text_color ) ) { + // Add the color class. + array_push( $colors['css_classes'], 'has-text-color', sprintf( 'has-%s-color', $named_text_color ) ); + } elseif ( ! is_null( $custom_text_color ) ) { + // Add the custom color inline style. + $colors['css_classes'][] = 'has-text-color'; + $colors['inline_styles'] .= sprintf( 'color: %s;', $custom_text_color ); + } + + // Background color. + $named_background_color = null; + $custom_background_color = null; + + if ( $is_sub_menu && array_key_exists( 'customOverlayBackgroundColor', $context ) ) { + $custom_background_color = $context['customOverlayBackgroundColor']; + } elseif ( $is_sub_menu && array_key_exists( 'overlayBackgroundColor', $context ) ) { + $named_background_color = $context['overlayBackgroundColor']; + } elseif ( array_key_exists( 'customBackgroundColor', $context ) ) { + $custom_background_color = $context['customBackgroundColor']; + } elseif ( array_key_exists( 'backgroundColor', $context ) ) { + $named_background_color = $context['backgroundColor']; + } elseif ( isset( $context['style']['color']['background'] ) ) { + $custom_background_color = $context['style']['color']['background']; + } + + // If has background color. + if ( ! is_null( $named_background_color ) ) { + // Add the background-color class. + array_push( $colors['css_classes'], 'has-background', sprintf( 'has-%s-background-color', $named_background_color ) ); + } elseif ( ! is_null( $custom_background_color ) ) { + // Add the custom background-color inline style. + $colors['css_classes'][] = 'has-background'; + $colors['inline_styles'] .= sprintf( 'background-color: %s;', $custom_background_color ); + } + + return $colors; +} + +/** + * Build an array with CSS classes and inline styles defining the font sizes + * which will be applied to the navigation markup in the front-end. + * + * @since 5.9.0 + * + * @param array $context Navigation block context. + * @return array Font size CSS classes and inline styles. + */ +function block_core_navigation_link_build_css_font_sizes( $context ) { + // CSS classes. + $font_sizes = array( + 'css_classes' => array(), + 'inline_styles' => '', + ); + + $has_named_font_size = array_key_exists( 'fontSize', $context ); + $has_custom_font_size = isset( $context['style']['typography']['fontSize'] ); + + if ( $has_named_font_size ) { + // Add the font size class. + $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] ); + } elseif ( $has_custom_font_size ) { + // Add the custom font size inline style. + $font_sizes['inline_styles'] = sprintf( + 'font-size: %s;', + wp_get_typography_font_size_value( + array( + 'size' => $context['style']['typography']['fontSize'], + ) + ) + ); + } + + return $font_sizes; +} + +/** + * Returns the top-level submenu SVG chevron icon. + * + * @since 5.9.0 + * + * @return string + */ +function block_core_navigation_link_render_submenu_icon() { + return ''; +} + +/** + * Decodes a url if it's encoded, returning the same url if not. + * + * @since 6.2.0 + * + * @param string $url The url to decode. + * + * @return string $url Returns the decoded url. + */ +function block_core_navigation_link_maybe_urldecode( $url ) { + $is_url_encoded = false; + $query = parse_url( $url, PHP_URL_QUERY ); + $query_params = wp_parse_args( $query ); + + foreach ( $query_params as $query_param ) { + $can_query_param_be_encoded = is_string( $query_param ) && ! empty( $query_param ); + if ( ! $can_query_param_be_encoded ) { + continue; + } + if ( rawurldecode( $query_param ) !== $query_param ) { + $is_url_encoded = true; + break; + } + } + + if ( $is_url_encoded ) { + return rawurldecode( $url ); + } + + return $url; +} + + +/** + * Renders the `core/navigation-link` block. + * + * @since 5.9.0 + * + * @param array $attributes The block attributes. + * @param string $content The saved content. + * @param WP_Block $block The parsed block. + * + * @return string Returns the post content with the legacy widget added. + */ +function render_block_core_navigation_link( $attributes, $content, $block ) { + $navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] ); + $is_post_type = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind']; + $is_post_type = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] ); + + // Don't render the block's subtree if it is a draft or if the ID does not exist. + if ( $is_post_type && $navigation_link_has_id ) { + $post = get_post( $attributes['id'] ); + /** + * Filter allowed post_status for navigation link block to render. + * + * @since 6.8.0 + * + * @param array $post_status + * @param array $attributes + * @param WP_Block $block + */ + $allowed_post_status = (array) apply_filters( + 'render_block_core_navigation_link_allowed_post_status', + array( 'publish' ), + $attributes, + $block + ); + if ( ! $post || ! in_array( $post->post_status, $allowed_post_status, true ) ) { + return ''; + } + } + + // Don't render the block's subtree if it has no label. + if ( empty( $attributes['label'] ) ) { + return ''; + } + + $font_sizes = block_core_navigation_link_build_css_font_sizes( $block->context ); + $classes = array_merge( + $font_sizes['css_classes'] + ); + $style_attribute = $font_sizes['inline_styles']; + + $css_classes = trim( implode( ' ', $classes ) ); + $has_submenu = count( $block->inner_blocks ) > 0; + $kind = empty( $attributes['kind'] ) ? 'post_type' : str_replace( '-', '_', $attributes['kind'] ); + $is_active = ! empty( $attributes['id'] ) && get_queried_object_id() === (int) $attributes['id'] && ! empty( get_queried_object()->$kind ); + + if ( is_post_type_archive() && ! empty( $attributes['url'] ) ) { + $queried_archive_link = get_post_type_archive_link( get_queried_object()->name ); + if ( $attributes['url'] === $queried_archive_link ) { + $is_active = true; + } + } + + $wrapper_attributes = get_block_wrapper_attributes( + array( + 'class' => $css_classes . ' wp-block-navigation-item' . ( $has_submenu ? ' has-child' : '' ) . + ( $is_active ? ' current-menu-item' : '' ), + 'style' => $style_attribute, + ) + ); + $html = '
    1. ' . + ''; + + if ( isset( $attributes['label'] ) ) { + $html .= wp_kses_post( $attributes['label'] ); + } + + $html .= ''; + + // Add description if available. + if ( ! empty( $attributes['description'] ) ) { + $html .= ''; + $html .= wp_kses_post( $attributes['description'] ); + $html .= ''; + } + + $html .= ''; + // End anchor tag content. + + if ( isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'] && $has_submenu ) { + // The submenu icon can be hidden by a CSS rule on the Navigation Block. + $html .= '' . block_core_navigation_link_render_submenu_icon() . ''; + } + + if ( $has_submenu ) { + $inner_blocks_html = ''; + foreach ( $block->inner_blocks as $inner_block ) { + $inner_blocks_html .= $inner_block->render(); + } + + $html .= sprintf( + '
        %s
      ', + $inner_blocks_html + ); + } + + $html .= '
    2. '; + + return $html; +} + +/** + * Returns a navigation link variation + * + * @since 5.9.0 + * + * @param WP_Taxonomy|WP_Post_Type $entity post type or taxonomy entity. + * @param string $kind string of value 'taxonomy' or 'post-type'. + * + * @return array + */ +function build_variation_for_navigation_link( $entity, $kind ) { + $title = ''; + $description = ''; + + if ( property_exists( $entity->labels, 'item_link' ) ) { + $title = $entity->labels->item_link; + } + if ( property_exists( $entity->labels, 'item_link_description' ) ) { + $description = $entity->labels->item_link_description; + } + + $variation = array( + 'name' => $entity->name, + 'title' => $title, + 'description' => $description, + 'attributes' => array( + 'type' => $entity->name, + 'kind' => $kind, + ), + ); + + // Tweak some value for the variations. + $variation_overrides = array( + 'post_tag' => array( + 'name' => 'tag', + 'attributes' => array( + 'type' => 'tag', + 'kind' => $kind, + ), + ), + 'post_format' => array( + // The item_link and item_link_description for post formats is the + // same as for tags, so need to be overridden. + 'title' => __( 'Post Format Link' ), + 'description' => __( 'A link to a post format' ), + 'attributes' => array( + 'type' => 'post_format', + 'kind' => $kind, + ), + ), + ); + + if ( array_key_exists( $entity->name, $variation_overrides ) ) { + $variation = array_merge( + $variation, + $variation_overrides[ $entity->name ] + ); + } + + return $variation; +} + +/** + * Filters the registered variations for a block type. + * Returns the dynamically built variations for all post-types and taxonomies. + * + * @since 6.5.0 + * + * @param array $variations Array of registered variations for a block type. + * @param WP_Block_Type $block_type The full block type object. + */ +function block_core_navigation_link_filter_variations( $variations, $block_type ) { + if ( 'core/navigation-link' !== $block_type->name ) { + return $variations; + } + + $generated_variations = block_core_navigation_link_build_variations(); + return array_merge( $variations, $generated_variations ); +} + +/** + * Returns an array of variations for the navigation link block. + * + * @since 6.5.0 + * + * @return array + */ +function block_core_navigation_link_build_variations() { + $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' ); + $taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'objects' ); + + /* + * Use two separate arrays as a way to order the variations in the UI. + * Known variations (like Post Link and Page Link) are added to the + * `built_ins` array. Variations for custom post types and taxonomies are + * added to the `variations` array and will always appear after `built-ins. + */ + $built_ins = array(); + $variations = array(); + + if ( $post_types ) { + foreach ( $post_types as $post_type ) { + $variation = build_variation_for_navigation_link( $post_type, 'post-type' ); + if ( $post_type->_builtin ) { + $built_ins[] = $variation; + } else { + $variations[] = $variation; + } + } + } + if ( $taxonomies ) { + foreach ( $taxonomies as $taxonomy ) { + $variation = build_variation_for_navigation_link( $taxonomy, 'taxonomy' ); + if ( $taxonomy->_builtin ) { + $built_ins[] = $variation; + } else { + $variations[] = $variation; + } + } + } + + return array_merge( $built_ins, $variations ); +} + +/** + * Registers the navigation link block. + * + * @since 5.9.0 + * + * @uses render_block_core_navigation_link() + * @throws WP_Error An WP_Error exception parsing the block definition. + */ +function register_block_core_navigation_link() { + register_block_type_from_metadata( + __DIR__ . '/navigation-link', + array( + 'render_callback' => 'render_block_core_navigation_link', + ) + ); +} +add_action( 'init', 'register_block_core_navigation_link' ); +/** + * Creates all variations for post types / taxonomies dynamically (= each time when variations are requested). + * Do not use variation_callback, to also account for unregistering post types/taxonomies later on. + */ +add_action( 'get_block_type_variations', 'block_core_navigation_link_filter_variations', 10, 2 ); diff --git a/src/wp-includes/blocks/navigation-link/block.json b/src/wp-includes/blocks/navigation-link/block.json new file mode 100644 index 0000000000000..5f2d10b97dabe --- /dev/null +++ b/src/wp-includes/blocks/navigation-link/block.json @@ -0,0 +1,88 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/navigation-link", + "title": "Custom Link", + "category": "design", + "parent": [ "core/navigation" ], + "allowedBlocks": [ + "core/navigation-link", + "core/navigation-submenu", + "core/page-list" + ], + "description": "Add a page, link, or another item to your navigation.", + "textdomain": "default", + "attributes": { + "label": { + "type": "string", + "role": "content" + }, + "type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "rel": { + "type": "string" + }, + "id": { + "type": "number" + }, + "opensInNewTab": { + "type": "boolean", + "default": false + }, + "url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "isTopLevelLink": { + "type": "boolean" + } + }, + "usesContext": [ + "textColor", + "customTextColor", + "backgroundColor", + "customBackgroundColor", + "overlayTextColor", + "customOverlayTextColor", + "overlayBackgroundColor", + "customOverlayBackgroundColor", + "fontSize", + "customFontSize", + "showSubmenuIcon", + "maxNestingLevel", + "style" + ], + "supports": { + "reusable": false, + "html": false, + "__experimentalSlashInserter": true, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "renaming": false, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-navigation-link-editor", + "style": "wp-block-navigation-link" +} diff --git a/src/wp-includes/blocks/navigation-link/shared/item-should-render.php b/src/wp-includes/blocks/navigation-link/shared/item-should-render.php new file mode 100644 index 0000000000000..c6c55b04e47eb --- /dev/null +++ b/src/wp-includes/blocks/navigation-link/shared/item-should-render.php @@ -0,0 +1,46 @@ +post_status, $allowed_post_status, true ) ) { + return false; + } + } + + return true; +} diff --git a/src/wp-includes/blocks/navigation-link/shared/render-submenu-icon.php b/src/wp-includes/blocks/navigation-link/shared/render-submenu-icon.php new file mode 100644 index 0000000000000..62d09e28abe43 --- /dev/null +++ b/src/wp-includes/blocks/navigation-link/shared/render-submenu-icon.php @@ -0,0 +1,17 @@ +'; +} diff --git a/src/wp-includes/blocks/navigation-overlay-close.php b/src/wp-includes/blocks/navigation-overlay-close.php new file mode 100644 index 0000000000000..1945cc4069eef --- /dev/null +++ b/src/wp-includes/blocks/navigation-overlay-close.php @@ -0,0 +1,56 @@ +'; + } + + if ( $show_text ) { + $button_text .= '' . wp_kses_post( $text ) . ''; + } + + $wrapper_attributes = get_block_wrapper_attributes(); + $html_content = sprintf( + '', + $wrapper_attributes, + ! $show_text ? 'aria-label="' . __( 'Close' ) . '"' : '', + $button_text + ); + + return $html_content; +} + +/** + * Registers the navigation overlay close block. + * + * @since 7.0.0 + */ +function register_block_core_navigation_overlay_close() { + register_block_type_from_metadata( + __DIR__ . '/navigation-overlay-close', + array( + 'render_callback' => 'render_block_core_navigation_overlay_close', + ) + ); +} +add_action( 'init', 'register_block_core_navigation_overlay_close' ); diff --git a/src/wp-includes/blocks/navigation-overlay-close/block.json b/src/wp-includes/blocks/navigation-overlay-close/block.json new file mode 100644 index 0000000000000..39bf2ce75b99a --- /dev/null +++ b/src/wp-includes/blocks/navigation-overlay-close/block.json @@ -0,0 +1,49 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/navigation-overlay-close", + "title": "Navigation Overlay Close", + "category": "design", + "description": "A customizable button to close overlays.", + "keywords": [ "close", "overlay", "navigation", "menu" ], + "textdomain": "default", + "attributes": { + "displayMode": { + "type": "string", + "enum": [ "icon", "text", "both" ], + "default": "icon" + }, + "text": { + "type": "string" + } + }, + "supports": { + "color": { + "gradients": false, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "padding": true, + "__experimentalDefaultControls": { + "padding": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + } + }, + "style": "wp-block-navigation-overlay-close" +} diff --git a/src/wp-includes/blocks/navigation-submenu.php b/src/wp-includes/blocks/navigation-submenu.php new file mode 100644 index 0000000000000..77f2c1fa635fc --- /dev/null +++ b/src/wp-includes/blocks/navigation-submenu.php @@ -0,0 +1,300 @@ + array(), + 'inline_styles' => '', + ); + + $has_named_font_size = array_key_exists( 'fontSize', $context ); + $has_custom_font_size = isset( $context['style']['typography']['fontSize'] ); + + if ( $has_named_font_size ) { + // Add the font size class. + $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] ); + } elseif ( $has_custom_font_size ) { + // Add the custom font size inline style. + $font_sizes['inline_styles'] = sprintf( + 'font-size: %s;', + wp_get_typography_font_size_value( + array( + 'size' => $context['style']['typography']['fontSize'], + ) + ) + ); + } + + return $font_sizes; +} + +/** + * Returns the top-level submenu SVG chevron icon. + * + * @since 5.9.0 + * + * @return string + */ +function block_core_navigation_submenu_render_submenu_icon() { + return ''; +} + +/** + * Renders the `core/navigation-submenu` block. + * + * @since 5.9.0 + * + * @param array $attributes The block attributes. + * @param string $content The saved content. + * @param WP_Block $block The parsed block. + * + * @return string Returns the post content with the legacy widget added. + */ +function render_block_core_navigation_submenu( $attributes, $content, $block ) { + $navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] ); + $is_post_type = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind']; + $is_post_type = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] ); + + // Don't render the block's subtree if it is a draft. + if ( $is_post_type && $navigation_link_has_id && 'publish' !== get_post_status( $attributes['id'] ) ) { + return ''; + } + + // Don't render the block's subtree if it has no label. + if ( empty( $attributes['label'] ) ) { + return ''; + } + + $font_sizes = block_core_navigation_submenu_build_css_font_sizes( $block->context ); + $style_attribute = $font_sizes['inline_styles']; + + $has_submenu = count( $block->inner_blocks ) > 0; + $kind = empty( $attributes['kind'] ) ? 'post_type' : str_replace( '-', '_', $attributes['kind'] ); + $is_active = ! empty( $attributes['id'] ) && get_queried_object_id() === (int) $attributes['id'] && ! empty( get_queried_object()->$kind ); + + if ( is_post_type_archive() && ! empty( $attributes['url'] ) ) { + $queried_archive_link = get_post_type_archive_link( get_queried_object()->name ); + if ( $attributes['url'] === $queried_archive_link ) { + $is_active = true; + } + } + + $show_submenu_indicators = isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon']; + $open_on_click = isset( $block->context['openSubmenusOnClick'] ) && $block->context['openSubmenusOnClick']; + $open_on_hover_and_click = isset( $block->context['openSubmenusOnClick'] ) && ! $block->context['openSubmenusOnClick'] && + $show_submenu_indicators; + + $classes = array( + 'wp-block-navigation-item', + ); + $classes = array_merge( + $classes, + $font_sizes['css_classes'] + ); + if ( $has_submenu ) { + $classes[] = 'has-child'; + } + if ( $open_on_click ) { + $classes[] = 'open-on-click'; + } + if ( $open_on_hover_and_click ) { + $classes[] = 'open-on-hover-click'; + } + if ( $is_active ) { + $classes[] = 'current-menu-item'; + } + + $wrapper_attributes = get_block_wrapper_attributes( + array( + 'class' => implode( ' ', $classes ), + 'style' => $style_attribute, + ) + ); + + $label = ''; + + if ( isset( $attributes['label'] ) ) { + $label .= wp_kses_post( $attributes['label'] ); + } + + $aria_label = sprintf( + /* translators: Accessibility text. %s: Parent page title. */ + __( '%s submenu' ), + wp_strip_all_tags( $label ) + ); + + $html = '
    3. '; + + // If Submenus open on hover, we render an anchor tag with attributes. + // If submenu icons are set to show, we also render a submenu button, so the submenu can be opened on click. + if ( ! $open_on_click ) { + $item_url = isset( $attributes['url'] ) ? $attributes['url'] : ''; + // Start appending HTML attributes to anchor tag. + $html .= '
    4. ' . $title . ''; + } + + if ( isset( $page['children'] ) ) { + if ( $is_navigation_child && $show_submenu_icons && ! $open_submenus_on_click ) { + $markup .= ''; + } + $markup .= '
        '; + $markup .= block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $page['children'], $is_nested, $active_page_ancestor_ids, $colors, $depth + 1 ); + $markup .= '
      '; + } + $markup .= '
    5. '; + } + return $markup; +} + +/** + * Outputs nested array of pages + * + * @since 5.8.0 + * + * @param array $current_level The level being iterated through. + * @param array $children The children grouped by parent post ID. + * + * @return array The nested array of pages. + */ +function block_core_page_list_nest_pages( $current_level, $children ) { + if ( empty( $current_level ) ) { + return; + } + foreach ( (array) $current_level as $key => $current ) { + if ( isset( $children[ $key ] ) ) { + $current_level[ $key ]['children'] = block_core_page_list_nest_pages( $children[ $key ], $children ); + } + } + return $current_level; +} + +/** + * Renders the `core/page-list` block on server. + * + * @since 5.8.0 + * + * @param array $attributes The block attributes. + * @param string $content The saved content. + * @param WP_Block $block The parsed block. + * + * @return string Returns the page list markup. + */ +function render_block_core_page_list( $attributes, $content, $block ) { + static $block_id = 0; + ++$block_id; + + $parent_page_id = $attributes['parentPageID']; + $is_nested = $attributes['isNested']; + + $all_pages = get_pages( + array( + 'sort_column' => 'menu_order,post_title', + 'order' => 'asc', + ) + ); + + // If there are no pages, there is nothing to show. + if ( empty( $all_pages ) ) { + return; + } + + $top_level_pages = array(); + + $pages_with_children = array(); + + $active_page_ancestor_ids = array(); + + foreach ( (array) $all_pages as $page ) { + $is_active = ! empty( $page->ID ) && ( get_queried_object_id() === $page->ID ); + + if ( $is_active ) { + $active_page_ancestor_ids = get_post_ancestors( $page->ID ); + } + + if ( $page->post_parent ) { + $pages_with_children[ $page->post_parent ][ $page->ID ] = array( + 'page_id' => $page->ID, + 'title' => $page->post_title, + 'link' => get_permalink( $page ), + 'is_active' => $is_active, + ); + } else { + $top_level_pages[ $page->ID ] = array( + 'page_id' => $page->ID, + 'title' => $page->post_title, + 'link' => get_permalink( $page ), + 'is_active' => $is_active, + ); + + } + } + + $colors = block_core_page_list_build_css_colors( $attributes, $block->context ); + $font_sizes = block_core_page_list_build_css_font_sizes( $block->context ); + $classes = array_merge( + $colors['css_classes'], + $font_sizes['css_classes'] + ); + $style_attribute = ( $colors['inline_styles'] . $font_sizes['inline_styles'] ); + $css_classes = trim( implode( ' ', $classes ) ); + + $nested_pages = block_core_page_list_nest_pages( $top_level_pages, $pages_with_children ); + + if ( 0 !== $parent_page_id ) { + // If the parent page has no child pages, there is nothing to show. + if ( ! array_key_exists( $parent_page_id, $pages_with_children ) ) { + return; + } + + $nested_pages = block_core_page_list_nest_pages( + $pages_with_children[ $parent_page_id ], + $pages_with_children + ); + } + + $is_navigation_child = array_key_exists( 'showSubmenuIcon', $block->context ); + + $open_submenus_on_click = array_key_exists( 'openSubmenusOnClick', $block->context ) ? $block->context['openSubmenusOnClick'] : false; + + $show_submenu_icons = array_key_exists( 'showSubmenuIcon', $block->context ) ? $block->context['showSubmenuIcon'] : false; + + $wrapper_markup = $is_nested ? '%2$s' : '
        %2$s
      '; + + $items_markup = block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $nested_pages, $is_nested, $active_page_ancestor_ids, $colors ); + + $wrapper_attributes = get_block_wrapper_attributes( + array( + 'class' => $css_classes, + 'style' => $style_attribute, + ) + ); + + return sprintf( + $wrapper_markup, + $wrapper_attributes, + $items_markup + ); +} + +/** + * Registers the `core/pages` block on server. + * + * @since 5.8.0 + */ +function register_block_core_page_list() { + register_block_type_from_metadata( + __DIR__ . '/page-list', + array( + 'render_callback' => 'render_block_core_page_list', + ) + ); +} +add_action( 'init', 'register_block_core_page_list' ); diff --git a/src/wp-includes/blocks/page-list/block.json b/src/wp-includes/blocks/page-list/block.json new file mode 100644 index 0000000000000..317502b1200b4 --- /dev/null +++ b/src/wp-includes/blocks/page-list/block.json @@ -0,0 +1,84 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/page-list", + "title": "Page List", + "category": "widgets", + "allowedBlocks": [ "core/page-list-item" ], + "description": "Display a list of all pages.", + "keywords": [ "menu", "navigation" ], + "textdomain": "default", + "attributes": { + "parentPageID": { + "type": "integer", + "default": 0 + }, + "isNested": { + "type": "boolean", + "default": false + } + }, + "usesContext": [ + "textColor", + "customTextColor", + "backgroundColor", + "customBackgroundColor", + "overlayTextColor", + "customOverlayTextColor", + "overlayBackgroundColor", + "customOverlayBackgroundColor", + "fontSize", + "customFontSize", + "showSubmenuIcon", + "style", + "openSubmenusOnClick" + ], + "supports": { + "reusable": false, + "html": false, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "color": { + "text": true, + "background": true, + "link": true, + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + }, + "spacing": { + "padding": true, + "margin": true, + "__experimentalDefaultControls": { + "padding": false, + "margin": false + } + }, + "contentRole": true + }, + "editorStyle": "wp-block-page-list-editor", + "style": "wp-block-page-list" +} diff --git a/src/wp-includes/blocks/paragraph.php b/src/wp-includes/blocks/paragraph.php new file mode 100644 index 0000000000000..f72ca085a2048 --- /dev/null +++ b/src/wp-includes/blocks/paragraph.php @@ -0,0 +1,48 @@ +Hello World

      + * + * Would be transformed to: + *

      Hello World

      + * + * @since 7.0.0 + * + * @param string $block_content The block content. + * + * @return string Filtered block content. + */ +function block_core_paragraph_add_class( $block_content ) { + if ( ! $block_content ) { + return $block_content; + } + + $processor = new WP_HTML_Tag_Processor( $block_content ); + + if ( $processor->next_tag( 'p' ) ) { + $processor->add_class( 'wp-block-paragraph' ); + } + + return $processor->get_updated_html(); +} + +add_filter( 'render_block_core/paragraph', 'block_core_paragraph_add_class' ); + +/** + * Registers the `core/paragraph` block on server. + * + * @since 7.0.0 + */ +function register_block_core_paragraph() { + register_block_type_from_metadata( __DIR__ . '/paragraph' ); +} +add_action( 'init', 'register_block_core_paragraph' ); diff --git a/src/wp-includes/blocks/paragraph/block.json b/src/wp-includes/blocks/paragraph/block.json new file mode 100644 index 0000000000000..9617627ef5d0d --- /dev/null +++ b/src/wp-includes/blocks/paragraph/block.json @@ -0,0 +1,81 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/paragraph", + "title": "Paragraph", + "category": "text", + "description": "Start with the basic building block of all narrative.", + "keywords": [ "text" ], + "textdomain": "default", + "attributes": { + "align": { + "type": "string" + }, + "content": { + "type": "rich-text", + "source": "rich-text", + "selector": "p", + "role": "content" + }, + "dropCap": { + "type": "boolean", + "default": false + }, + "placeholder": { + "type": "string" + }, + "direction": { + "type": "string", + "enum": [ "ltr", "rtl" ] + } + }, + "supports": { + "splitting": true, + "anchor": true, + "className": false, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalTextDecoration": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalTextTransform": true, + "__experimentalWritingMode": true, + "fitText": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalSelector": "p", + "__unstablePasteTextInline": true, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-paragraph-editor", + "style": "wp-block-paragraph" +} diff --git a/src/wp-includes/blocks/pattern.php b/src/wp-includes/blocks/pattern.php new file mode 100644 index 0000000000000..870313eb5e86d --- /dev/null +++ b/src/wp-includes/blocks/pattern.php @@ -0,0 +1,72 @@ + 'render_block_core_pattern', + ) + ); +} + +/** + * Renders the `core/pattern` block on the server. + * + * @since 6.3.0 Backwards compatibility: blocks with no `syncStatus` attribute do not receive block wrapper. + * + * @global WP_Embed $wp_embed Used to process embedded content within patterns + * + * @param array $attributes Block attributes. + * + * @return string Returns the output of the pattern. + */ +function render_block_core_pattern( $attributes ) { + static $seen_refs = array(); + + if ( empty( $attributes['slug'] ) ) { + return ''; + } + + $slug = $attributes['slug']; + $registry = WP_Block_Patterns_Registry::get_instance(); + + if ( ! $registry->is_registered( $slug ) ) { + return ''; + } + + if ( isset( $seen_refs[ $attributes['slug'] ] ) ) { + // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent + // is set in `wp_debug_mode()`. + $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY; + + return $is_debug ? + // translators: Visible only in the front end, this warning takes the place of a faulty block. %s represents a pattern's slug. + sprintf( __( '[block rendering halted for pattern "%s"]' ), $slug ) : + ''; + } + + $pattern = $registry->get_registered( $slug ); + $content = $pattern['content']; + + $seen_refs[ $attributes['slug'] ] = true; + + $content = do_blocks( $content ); + + global $wp_embed; + $content = $wp_embed->autoembed( $content ); + + unset( $seen_refs[ $attributes['slug'] ] ); + return $content; +} + +add_action( 'init', 'register_block_core_pattern' ); diff --git a/src/wp-includes/blocks/pattern/block.json b/src/wp-includes/blocks/pattern/block.json new file mode 100644 index 0000000000000..2a761dfd643ba --- /dev/null +++ b/src/wp-includes/blocks/pattern/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/pattern", + "title": "Pattern Placeholder", + "category": "theme", + "description": "Show a block pattern.", + "supports": { + "html": false, + "inserter": false, + "renaming": false, + "blockVisibility": false, + "interactivity": { + "clientNavigation": true + } + }, + "textdomain": "default", + "attributes": { + "slug": { + "type": "string" + } + } +} diff --git a/src/wp-includes/blocks/post-author-biography.php b/src/wp-includes/blocks/post-author-biography.php new file mode 100644 index 0000000000000..bd983f79e7609 --- /dev/null +++ b/src/wp-includes/blocks/post-author-biography.php @@ -0,0 +1,53 @@ +context['postId'] ) ) { + $author_id = get_post_field( 'post_author', $block->context['postId'] ); + } else { + $author_id = get_query_var( 'author' ); + } + + if ( empty( $author_id ) ) { + return ''; + } + + $author_biography = get_the_author_meta( 'description', $author_id ); + if ( empty( $author_biography ) ) { + return ''; + } + + $align_class_name = empty( $attributes['textAlign'] ) ? '' : "has-text-align-{$attributes['textAlign']}"; + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) ); + + return sprintf( '
      ', $wrapper_attributes ) . $author_biography . '
      '; +} + +/** + * Registers the `core/post-author-biography` block on the server. + * + * @since 6.0.0 + */ +function register_block_core_post_author_biography() { + register_block_type_from_metadata( + __DIR__ . '/post-author-biography', + array( + 'render_callback' => 'render_block_core_post_author_biography', + ) + ); +} +add_action( 'init', 'register_block_core_post_author_biography' ); diff --git a/src/wp-includes/blocks/post-author-biography/block.json b/src/wp-includes/blocks/post-author-biography/block.json new file mode 100644 index 0000000000000..c6e27bc484dfd --- /dev/null +++ b/src/wp-includes/blocks/post-author-biography/block.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-author-biography", + "title": "Author Biography", + "category": "theme", + "description": "The author biography.", + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + } + }, + "usesContext": [ "postType", "postId" ], + "example": { + "viewportWidth": 350 + }, + "supports": { + "spacing": { + "margin": true, + "padding": true + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-post-author-biography" +} diff --git a/src/wp-includes/blocks/post-author-name.php b/src/wp-includes/blocks/post-author-name.php new file mode 100644 index 0000000000000..ac514401f5cc2 --- /dev/null +++ b/src/wp-includes/blocks/post-author-name.php @@ -0,0 +1,63 @@ +context['postId'] ) ) { + $author_id = get_post_field( 'post_author', $block->context['postId'] ); + } else { + $author_id = get_query_var( 'author' ); + } + + if ( empty( $author_id ) ) { + return ''; + } + + if ( isset( $block->context['postType'] ) && ! post_type_supports( $block->context['postType'], 'author' ) ) { + return ''; + } + + $author_name = get_the_author_meta( 'display_name', $author_id ); + if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) { + $author_name = sprintf( '', get_author_posts_url( $author_id ), esc_attr( $attributes['linkTarget'] ), $author_name ); + } + + $classes = array(); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + return sprintf( '
      %2$s
      ', $wrapper_attributes, $author_name ); +} + +/** + * Registers the `core/post-author-name` block on the server. + * + * @since 6.2.0 + */ +function register_block_core_post_author_name() { + register_block_type_from_metadata( + __DIR__ . '/post-author-name', + array( + 'render_callback' => 'render_block_core_post_author_name', + ) + ); +} +add_action( 'init', 'register_block_core_post_author_name' ); diff --git a/src/wp-includes/blocks/post-author-name/block.json b/src/wp-includes/blocks/post-author-name/block.json new file mode 100644 index 0000000000000..23211f0bf5bf4 --- /dev/null +++ b/src/wp-includes/blocks/post-author-name/block.json @@ -0,0 +1,73 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-author-name", + "title": "Author Name", + "category": "theme", + "description": "The author name.", + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + }, + "isLink": { + "type": "boolean", + "default": false, + "role": "content" + }, + "linkTarget": { + "type": "string", + "default": "_self", + "role": "content" + } + }, + "usesContext": [ "postType", "postId" ], + "example": { + "viewportWidth": 350 + }, + "supports": { + "html": false, + "spacing": { + "margin": true, + "padding": true + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-post-author-name" +} diff --git a/src/wp-includes/blocks/post-author.php b/src/wp-includes/blocks/post-author.php new file mode 100644 index 0000000000000..a4880f8a9e744 --- /dev/null +++ b/src/wp-includes/blocks/post-author.php @@ -0,0 +1,81 @@ +context['postId'] ) ) { + $author_id = get_query_var( 'author' ); + } else { + $author_id = get_post_field( 'post_author', $block->context['postId'] ); + } + + if ( empty( $author_id ) ) { + return ''; + } + + if ( isset( $block->context['postType'] ) && ! post_type_supports( $block->context['postType'], 'author' ) ) { + return ''; + } + + $avatar = ! empty( $attributes['avatarSize'] ) ? get_avatar( + $author_id, + $attributes['avatarSize'] + ) : null; + + $link = get_author_posts_url( $author_id ); + $author_name = get_the_author_meta( 'display_name', $author_id ); + if ( ! empty( $attributes['isLink'] && ! empty( $attributes['linkTarget'] ) ) ) { + $author_name = sprintf( '%3$s', esc_url( $link ), esc_attr( $attributes['linkTarget'] ), $author_name ); + } + + $byline = ! empty( $attributes['byline'] ) ? $attributes['byline'] : false; + $classes = array(); + if ( isset( $attributes['itemsJustification'] ) ) { + $classes[] = 'items-justified-' . $attributes['itemsJustification']; + } + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + return sprintf( '
      ', $wrapper_attributes ) . + ( ! empty( $attributes['showAvatar'] ) ? '' : '' ) . + '' . + '
      '; +} + +/** + * Registers the `core/post-author` block on the server. + * + * @since 5.9.0 + */ +function register_block_core_post_author() { + register_block_type_from_metadata( + __DIR__ . '/post-author', + array( + 'render_callback' => 'render_block_core_post_author', + ) + ); +} +add_action( 'init', 'register_block_core_post_author' ); diff --git a/src/wp-includes/blocks/post-author/block.json b/src/wp-includes/blocks/post-author/block.json new file mode 100644 index 0000000000000..a83bb48bd840a --- /dev/null +++ b/src/wp-includes/blocks/post-author/block.json @@ -0,0 +1,92 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-author", + "title": "Author", + "category": "theme", + "description": "Display post author details such as name, avatar, and bio.", + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + }, + "avatarSize": { + "type": "number", + "default": 48 + }, + "showAvatar": { + "type": "boolean", + "default": true + }, + "showBio": { + "type": "boolean" + }, + "byline": { + "type": "string" + }, + "isLink": { + "type": "boolean", + "default": false, + "role": "content" + }, + "linkTarget": { + "type": "string", + "default": "_self", + "role": "content" + } + }, + "usesContext": [ "postType", "postId", "queryId" ], + "supports": { + "html": false, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "filter": { + "duotone": true + } + }, + "selectors": { + "filter": { + "duotone": ".wp-block-post-author .wp-block-post-author__avatar img" + } + }, + "editorStyle": "wp-block-post-author-editor", + "style": "wp-block-post-author" +} diff --git a/src/wp-includes/blocks/post-comments-count.php b/src/wp-includes/blocks/post-comments-count.php new file mode 100644 index 0000000000000..bf12d6f0f9c4c --- /dev/null +++ b/src/wp-includes/blocks/post-comments-count.php @@ -0,0 +1,49 @@ +context['postId'] ) ) { + return ''; + } + + $classes = ''; + if ( isset( $attributes['textAlign'] ) ) { + $classes .= 'has-text-align-' . $attributes['textAlign']; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) ); + return sprintf( + '
      %2$s
      ', + $wrapper_attributes, + get_comments_number( $block->context['postId'] ) + ); +} + +/** + * Registers the `core/post-comments-count` block on the server. + * + * @since 6.9.0 + */ +function register_block_core_post_comments_count() { + register_block_type_from_metadata( + __DIR__ . '/post-comments-count', + array( + 'render_callback' => 'render_block_core_post_comments_count', + ) + ); +} +add_action( 'init', 'register_block_core_post_comments_count' ); diff --git a/src/wp-includes/blocks/post-comments-count/block.json b/src/wp-includes/blocks/post-comments-count/block.json new file mode 100644 index 0000000000000..fa8ade2f2c12f --- /dev/null +++ b/src/wp-includes/blocks/post-comments-count/block.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-comments-count", + "title": "Comments Count", + "category": "theme", + "description": "Display a post's comments count.", + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + } + }, + "usesContext": [ "postId" ], + "example": { + "viewportWidth": 350 + }, + "supports": { + "html": false, + "color": { + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + }, + "interactivity": { + "clientNavigation": true + } + }, + "style": "wp-block-post-comments-count" +} diff --git a/src/wp-includes/blocks/post-comments-form.php b/src/wp-includes/blocks/post-comments-form.php new file mode 100644 index 0000000000000..dfbf4c59f264a --- /dev/null +++ b/src/wp-includes/blocks/post-comments-form.php @@ -0,0 +1,88 @@ +context['postId'] ) ) { + return ''; + } + + if ( post_password_required( $block->context['postId'] ) ) { + return; + } + + $classes = array( 'comment-respond' ); // See comment further below. + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + add_filter( 'comment_form_defaults', 'post_comments_form_block_form_defaults' ); + + ob_start(); + comment_form( array(), $block->context['postId'] ); + $form = ob_get_clean(); + + remove_filter( 'comment_form_defaults', 'post_comments_form_block_form_defaults' ); + + // We use the outermost wrapping `
      ` returned by `comment_form()` + // which is identified by its default classname `comment-respond` to inject + // our wrapper attributes. This way, it is guaranteed that all styling applied + // to the block is carried along when the comment form is moved to the location + // of the 'Reply' link that the user clicked by Core's `comment-reply.js` script. + $form = str_replace( 'class="comment-respond"', $wrapper_attributes, $form ); + + // Enqueue the comment-reply script. + wp_enqueue_script( 'comment-reply' ); + + return $form; +} + +/** + * Registers the `core/post-comments-form` block on the server. + * + * @since 6.0.0 + */ +function register_block_core_post_comments_form() { + register_block_type_from_metadata( + __DIR__ . '/post-comments-form', + array( + 'render_callback' => 'render_block_core_post_comments_form', + ) + ); +} +add_action( 'init', 'register_block_core_post_comments_form' ); + +/** + * Use the button block classes for the form-submit button. + * + * @since 6.0.0 + * + * @param array $fields The default comment form arguments. + * + * @return array Returns the modified fields. + */ +function post_comments_form_block_form_defaults( $fields ) { + if ( wp_is_block_theme() ) { + $fields['submit_button'] = ''; + $fields['submit_field'] = '

      %1$s %2$s

      '; + } + + return $fields; +} diff --git a/src/wp-includes/blocks/post-comments-form/block.json b/src/wp-includes/blocks/post-comments-form/block.json new file mode 100644 index 0000000000000..4b6b333b75cfa --- /dev/null +++ b/src/wp-includes/blocks/post-comments-form/block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-comments-form", + "title": "Comments Form", + "category": "theme", + "description": "Display a post's comments form.", + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + } + }, + "usesContext": [ "postId", "postType" ], + "supports": { + "html": false, + "color": { + "gradients": true, + "heading": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalTextTransform": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "editorStyle": "wp-block-post-comments-form-editor", + "style": [ + "wp-block-post-comments-form", + "wp-block-buttons", + "wp-block-button" + ], + "example": { + "attributes": { + "textAlign": "center" + } + } +} diff --git a/src/wp-includes/blocks/post-comments-link.php b/src/wp-includes/blocks/post-comments-link.php new file mode 100644 index 0000000000000..c6d33eb0cd65c --- /dev/null +++ b/src/wp-includes/blocks/post-comments-link.php @@ -0,0 +1,75 @@ +context['postId'] ) || + isset( $block->context['postId'] ) && + ! comments_open( $block->context['postId'] ) + ) { + return ''; + } + + $classes = array(); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + $comments_number = (int) get_comments_number( $block->context['postId'] ); + $comments_link = get_comments_link( $block->context['postId'] ); + $post_title = get_the_title( $block->context['postId'] ); + $comment_html = ''; + + if ( 0 === $comments_number ) { + $comment_html = sprintf( + /* translators: %s post title */ + __( 'No comments on %s' ), + $post_title + ); + } else { + $comment_html = sprintf( + /* translators: 1: Number of comments, 2: post title */ + _n( + '%1$s comment on %2$s', + '%1$s comments on %2$s', + $comments_number + ), + esc_html( number_format_i18n( $comments_number ) ), + $post_title + ); + } + + return ''; +} + +/** + * Registers the `core/post-comments-link` block on the server. + * + * @since 6.9.0 + */ +function register_block_core_post_comments_link() { + register_block_type_from_metadata( + __DIR__ . '/post-comments-link', + array( + 'render_callback' => 'render_block_core_post_comments_link', + ) + ); +} +add_action( 'init', 'register_block_core_post_comments_link' ); diff --git a/src/wp-includes/blocks/post-comments-link/block.json b/src/wp-includes/blocks/post-comments-link/block.json new file mode 100644 index 0000000000000..e0dcdb9afa03d --- /dev/null +++ b/src/wp-includes/blocks/post-comments-link/block.json @@ -0,0 +1,62 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-comments-link", + "title": "Comments Link", + "category": "theme", + "description": "Displays the link to the current post comments.", + "textdomain": "default", + "usesContext": [ "postType", "postId" ], + "attributes": { + "textAlign": { + "type": "string" + } + }, + "example": { + "viewportWidth": 350 + }, + "supports": { + "html": false, + "color": { + "link": true, + "text": false, + "__experimentalDefaultControls": { + "background": true, + "link": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-post-comments-link" +} diff --git a/src/wp-includes/blocks/post-content.php b/src/wp-includes/blocks/post-content.php new file mode 100644 index 0000000000000..0be1a8730f605 --- /dev/null +++ b/src/wp-includes/blocks/post-content.php @@ -0,0 +1,86 @@ +context['postId'] ) ) { + return ''; + } + + $post_id = $block->context['postId']; + + if ( isset( $seen_ids[ $post_id ] ) ) { + // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent + // is set in `wp_debug_mode()`. + $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY; + + return $is_debug ? + // translators: Visible only in the front end, this warning takes the place of a faulty block. + __( '[block rendering halted]' ) : + ''; + } + + $seen_ids[ $post_id ] = true; + + // When inside the main loop, we want to use queried object + // so that `the_preview` for the current post can apply. + // We force this behavior by omitting the third argument (post ID) from the `get_the_content`. + $content = get_the_content(); + // Check for nextpage to display page links for paginated posts. + if ( has_block( 'core/nextpage' ) ) { + $content .= wp_link_pages( array( 'echo' => 0 ) ); + } + + /** This filter is documented in wp-includes/post-template.php */ + $content = apply_filters( 'the_content', str_replace( ']]>', ']]>', $content ) ); + unset( $seen_ids[ $post_id ] ); + + if ( empty( $content ) ) { + return ''; + } + + $tag_name = 'div'; + + if ( ! empty( $attributes['tagName'] ) && tag_escape( $attributes['tagName'] ) === $attributes['tagName'] ) { + $tag_name = $attributes['tagName']; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => 'entry-content' ) ); + + return sprintf( + '<%1$s %2$s>%3$s', + $tag_name, + $wrapper_attributes, + $content + ); +} + +/** + * Registers the `core/post-content` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_post_content() { + register_block_type_from_metadata( + __DIR__ . '/post-content', + array( + 'render_callback' => 'render_block_core_post_content', + ) + ); +} +add_action( 'init', 'register_block_core_post_content' ); diff --git a/src/wp-includes/blocks/post-content/block.json b/src/wp-includes/blocks/post-content/block.json new file mode 100644 index 0000000000000..264f6959304fe --- /dev/null +++ b/src/wp-includes/blocks/post-content/block.json @@ -0,0 +1,82 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-content", + "title": "Content", + "category": "theme", + "description": "Displays the contents of a post or page.", + "textdomain": "default", + "usesContext": [ "postId", "postType", "queryId" ], + "attributes": { + "tagName": { + "type": "string", + "default": "div" + } + }, + "example": { + "viewportWidth": 350 + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "layout": true, + "background": { + "backgroundImage": true, + "backgroundSize": true, + "__experimentalDefaultControls": { + "backgroundImage": true + } + }, + "dimensions": { + "minHeight": true + }, + "spacing": { + "blockGap": true, + "padding": true, + "margin": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "color": { + "gradients": true, + "heading": true, + "link": true, + "__experimentalDefaultControls": { + "background": false, + "text": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-post-content", + "editorStyle": "wp-block-post-content-editor" +} diff --git a/src/wp-includes/blocks/post-date.php b/src/wp-includes/blocks/post-date.php new file mode 100644 index 0000000000000..e12a26eda7c12 --- /dev/null +++ b/src/wp-includes/blocks/post-date.php @@ -0,0 +1,109 @@ + 'modified', + ); + } else { + $source_args = array( + 'field' => 'date', + ); + } + $attributes['datetime'] = $source->get_value( $source_args, $block, 'datetime' ); + } + + if ( isset( $source_args['field'] ) && 'modified' === $source_args['field'] ) { + $classes[] = 'wp-block-post-date__modified-date'; + } + + if ( empty( $attributes['datetime'] ) ) { + // If the `datetime` attribute is set but empty, it could be because Block Bindings + // set it that way. This can happen e.g. if the block is bound to the + // post's last modified date, and the latter lies before the publish date. + // (See https://github.com/WordPress/gutenberg/pull/46839 where this logic was originally + // implemented.) + // In this case, we have to respect and return the empty value. + return ''; + } + + $unformatted_date = $attributes['datetime']; + $post_timestamp = strtotime( $unformatted_date ); + + if ( isset( $attributes['format'] ) && 'human-diff' === $attributes['format'] ) { + if ( $post_timestamp > time() ) { + // translators: %s: human-readable time difference. + $formatted_date = sprintf( __( '%s from now' ), human_time_diff( $post_timestamp ) ); + } else { + // translators: %s: human-readable time difference. + $formatted_date = sprintf( __( '%s ago' ), human_time_diff( $post_timestamp ) ); + } + } else { + $format = empty( $attributes['format'] ) ? get_option( 'date_format' ) : $attributes['format']; + $formatted_date = wp_date( $format, $post_timestamp ); + } + + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + if ( isset( $attributes['isLink'] ) && $attributes['isLink'] && isset( $block->context['postId'] ) ) { + $formatted_date = sprintf( '%2s', get_the_permalink( $block->context['postId'] ), $formatted_date ); + } + + return sprintf( + '
      ', + $wrapper_attributes, + $unformatted_date, + $formatted_date + ); +} + +/** + * Registers the `core/post-date` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_post_date() { + register_block_type_from_metadata( + __DIR__ . '/post-date', + array( + 'render_callback' => 'render_block_core_post_date', + ) + ); +} +add_action( 'init', 'register_block_core_post_date' ); diff --git a/src/wp-includes/blocks/post-date/block.json b/src/wp-includes/blocks/post-date/block.json new file mode 100644 index 0000000000000..ea99f6ab5ff8d --- /dev/null +++ b/src/wp-includes/blocks/post-date/block.json @@ -0,0 +1,74 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-date", + "title": "Date", + "category": "theme", + "description": "Display a custom date.", + "textdomain": "default", + "attributes": { + "datetime": { + "type": "string", + "role": "content" + }, + "textAlign": { + "type": "string" + }, + "format": { + "type": "string" + }, + "isLink": { + "type": "boolean", + "default": false, + "role": "content" + } + }, + "usesContext": [ "postId", "postType", "queryId" ], + "example": { + "viewportWidth": 350 + }, + "supports": { + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + } +} diff --git a/src/wp-includes/blocks/post-excerpt.php b/src/wp-includes/blocks/post-excerpt.php new file mode 100644 index 0000000000000..28aab46a01294 --- /dev/null +++ b/src/wp-includes/blocks/post-excerpt.php @@ -0,0 +1,103 @@ +context['postId'] ) ) { + return ''; + } + + $more_text = ! empty( $attributes['moreText'] ) ? '' . wp_kses_post( $attributes['moreText'] ) . '' : ''; + $filter_excerpt_more = static function ( $more ) use ( $more_text ) { + return empty( $more_text ) ? $more : ''; + }; + /** + * Some themes might use `excerpt_more` filter to handle the + * `more` link displayed after a trimmed excerpt. Since the + * block has a `more text` attribute we have to check and + * override if needed the return value from this filter. + * So if the block's attribute is not empty override the + * `excerpt_more` filter and return nothing. This will + * result in showing only one `read more` link at a time. + * + * This hook needs to be applied before the excerpt is retrieved with get_the_excerpt. + * Otherwise, the read more link filter from the theme is not removed. + */ + add_filter( 'excerpt_more', $filter_excerpt_more ); + + /* + * The purpose of the excerpt length setting is to limit the length of both + * automatically generated and user-created excerpts. + * Because the excerpt_length filter only applies to auto generated excerpts, + * wp_trim_words is used instead. + */ + $excerpt_length = $attributes['excerptLength']; + $excerpt = get_the_excerpt( $block->context['postId'] ); + if ( isset( $excerpt_length ) ) { + $excerpt = wp_trim_words( $excerpt, $excerpt_length ); + } + + $classes = array(); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + $content = '

      ' . $excerpt; + $show_more_on_new_line = ! isset( $attributes['showMoreOnNewLine'] ) || $attributes['showMoreOnNewLine']; + if ( $show_more_on_new_line && ! empty( $more_text ) ) { + $content .= '

      ' . $more_text . '

      '; + } else { + $content .= " $more_text

      "; + } + remove_filter( 'excerpt_more', $filter_excerpt_more ); + return sprintf( '
      %2$s
      ', $wrapper_attributes, $content ); +} + +/** + * Registers the `core/post-excerpt` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_post_excerpt() { + register_block_type_from_metadata( + __DIR__ . '/post-excerpt', + array( + 'render_callback' => 'render_block_core_post_excerpt', + ) + ); +} +add_action( 'init', 'register_block_core_post_excerpt' ); + +/** + * If themes or plugins filter the excerpt_length, we need to + * override the filter in the editor, otherwise + * the excerpt length block setting has no effect. + * Returns 100 because 100 is the max length in the setting. + */ +if ( is_admin() || + defined( 'REST_REQUEST' ) && REST_REQUEST ) { + add_filter( + 'excerpt_length', + static function () { + return 100; + }, + PHP_INT_MAX + ); +} diff --git a/src/wp-includes/blocks/post-excerpt/block.json b/src/wp-includes/blocks/post-excerpt/block.json new file mode 100644 index 0000000000000..c0037b0e5b39c --- /dev/null +++ b/src/wp-includes/blocks/post-excerpt/block.json @@ -0,0 +1,76 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-excerpt", + "title": "Excerpt", + "category": "theme", + "description": "Display the excerpt.", + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + }, + "moreText": { + "type": "string", + "role": "content" + }, + "showMoreOnNewLine": { + "type": "boolean", + "default": true + }, + "excerptLength": { + "type": "number", + "default": 55 + } + }, + "usesContext": [ "postId", "postType", "queryId" ], + "example": { + "viewportWidth": 350 + }, + "supports": { + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "editorStyle": "wp-block-post-excerpt-editor", + "style": "wp-block-post-excerpt" +} diff --git a/src/wp-includes/blocks/post-featured-image.php b/src/wp-includes/blocks/post-featured-image.php new file mode 100644 index 0000000000000..dc8bcba194a79 --- /dev/null +++ b/src/wp-includes/blocks/post-featured-image.php @@ -0,0 +1,269 @@ +context['postId'] ) ) { + return ''; + } + $post_ID = $block->context['postId']; + + $is_link = isset( $attributes['isLink'] ) && $attributes['isLink']; + $size_slug = isset( $attributes['sizeSlug'] ) ? $attributes['sizeSlug'] : 'post-thumbnail'; + $attr = get_block_core_post_featured_image_border_attributes( $attributes ); + $overlay_markup = get_block_core_post_featured_image_overlay_element_markup( $attributes ); + + if ( $is_link ) { + $title = get_the_title( $post_ID ); + if ( $title ) { + $attr['alt'] = trim( strip_tags( $title ) ); + } else { + $attr['alt'] = sprintf( + // translators: %d is the post ID. + __( 'Untitled post %d' ), + $post_ID + ); + } + } + + $extra_styles = ''; + + // Aspect ratio with a height set needs to override the default width/height. + if ( ! empty( $attributes['aspectRatio'] ) ) { + $extra_styles .= 'width:100%;height:100%;'; + } elseif ( ! empty( $attributes['height'] ) ) { + $extra_styles .= "height:{$attributes['height']};"; + } + + if ( ! empty( $attributes['scale'] ) ) { + $extra_styles .= "object-fit:{$attributes['scale']};"; + } + if ( ! empty( $attributes['style']['shadow'] ) ) { + $shadow_styles = wp_style_engine_get_styles( array( 'shadow' => $attributes['style']['shadow'] ) ); + + if ( ! empty( $shadow_styles['css'] ) ) { + $extra_styles .= $shadow_styles['css']; + } + } + + if ( ! empty( $extra_styles ) ) { + $attr['style'] = empty( $attr['style'] ) ? $extra_styles : $attr['style'] . $extra_styles; + } + + $featured_image = get_the_post_thumbnail( $post_ID, $size_slug, $attr ); + + // Get the first image from the post. + if ( $attributes['useFirstImageFromPost'] && ! $featured_image ) { + $content_post = get_post( $post_ID ); + $content = $content_post->post_content; + $processor = new WP_HTML_Tag_Processor( $content ); + + /* + * Transfer the image tag from the post into a new text snippet. + * Because the HTML API doesn't currently expose a way to extract + * HTML substrings this is necessary as a workaround. Of note, this + * is different than directly extracting the IMG tag: + * - If there are duplicate attributes in the source there will only be one in the output. + * - If there are single-quoted or unquoted attributes they will be double-quoted in the output. + * - If there are named character references in the attribute values they may be replaced with their direct code points. E.g. `…` becomes `…`. + * In the future there will likely be a mechanism to copy snippets of HTML from + * one document into another, via the HTML Processor's `get_outer_html()` or + * equivalent. When that happens it would be appropriate to replace this custom + * code with that canonical code. + */ + if ( $processor->next_tag( 'img' ) ) { + $tag_html = new WP_HTML_Tag_Processor( '' ); + $tag_html->next_tag(); + foreach ( $processor->get_attribute_names_with_prefix( '' ) as $name ) { + $tag_html->set_attribute( $name, $processor->get_attribute( $name ) ); + } + $featured_image = $tag_html->get_updated_html(); + } + } + + if ( ! $featured_image ) { + return ''; + } + + if ( $is_link ) { + $link_target = $attributes['linkTarget']; + $rel = ! empty( $attributes['rel'] ) ? 'rel="' . esc_attr( $attributes['rel'] ) . '"' : ''; + $height = ! empty( $attributes['height'] ) ? 'style="' . esc_attr( safecss_filter_attr( 'height:' . $attributes['height'] ) ) . '"' : ''; + $featured_image = sprintf( + '%5$s%6$s', + get_the_permalink( $post_ID ), + esc_attr( $link_target ), + $rel, + $height, + $featured_image, + $overlay_markup + ); + } else { + $featured_image = $featured_image . $overlay_markup; + } + + $aspect_ratio = ! empty( $attributes['aspectRatio'] ) + ? esc_attr( safecss_filter_attr( 'aspect-ratio:' . $attributes['aspectRatio'] ) ) . ';' + : ''; + $width = ! empty( $attributes['width'] ) + ? esc_attr( safecss_filter_attr( 'width:' . $attributes['width'] ) ) . ';' + : ''; + $height = ! empty( $attributes['height'] ) + ? esc_attr( safecss_filter_attr( 'height:' . $attributes['height'] ) ) . ';' + : ''; + if ( ! $height && ! $width && ! $aspect_ratio ) { + $wrapper_attributes = get_block_wrapper_attributes(); + } else { + $wrapper_attributes = get_block_wrapper_attributes( array( 'style' => $aspect_ratio . $width . $height ) ); + } + return "
      {$featured_image}
      "; +} + +/** + * Generate markup for the HTML element that will be used for the overlay. + * + * @since 6.1.0 + * + * @param array $attributes Block attributes. + * + * @return string HTML markup in string format. + */ +function get_block_core_post_featured_image_overlay_element_markup( $attributes ) { + $has_dim_background = isset( $attributes['dimRatio'] ) && $attributes['dimRatio']; + $has_gradient = isset( $attributes['gradient'] ) && $attributes['gradient']; + $has_custom_gradient = isset( $attributes['customGradient'] ) && $attributes['customGradient']; + $has_solid_overlay = isset( $attributes['overlayColor'] ) && $attributes['overlayColor']; + $has_custom_overlay = isset( $attributes['customOverlayColor'] ) && $attributes['customOverlayColor']; + $class_names = array( 'wp-block-post-featured-image__overlay' ); + $styles = array(); + + if ( ! $has_dim_background ) { + return ''; + } + + // Apply border classes and styles. + $border_attributes = get_block_core_post_featured_image_border_attributes( $attributes ); + + if ( ! empty( $border_attributes['class'] ) ) { + $class_names[] = $border_attributes['class']; + } + + if ( ! empty( $border_attributes['style'] ) ) { + $styles[] = $border_attributes['style']; + } + + // Apply overlay and gradient classes. + if ( $has_dim_background ) { + $class_names[] = 'has-background-dim'; + $class_names[] = "has-background-dim-{$attributes['dimRatio']}"; + } + + if ( $has_solid_overlay ) { + $class_names[] = "has-{$attributes['overlayColor']}-background-color"; + } + + if ( $has_gradient || $has_custom_gradient ) { + $class_names[] = 'has-background-gradient'; + } + + if ( $has_gradient ) { + $class_names[] = "has-{$attributes['gradient']}-gradient-background"; + } + + // Apply background styles. + if ( $has_custom_gradient ) { + $styles[] = sprintf( 'background-image: %s;', $attributes['customGradient'] ); + } + + if ( $has_custom_overlay ) { + $styles[] = sprintf( 'background-color: %s;', $attributes['customOverlayColor'] ); + } + + return sprintf( + '', + esc_attr( implode( ' ', $class_names ) ), + esc_attr( safecss_filter_attr( implode( ' ', $styles ) ) ) + ); +} + +/** + * Generates class names and styles to apply the border support styles for + * the Post Featured Image block. + * + * @since 6.1.0 + * + * @param array $attributes The block attributes. + * @return array The border-related classnames and styles for the block. + */ +function get_block_core_post_featured_image_border_attributes( $attributes ) { + $border_styles = array(); + $sides = array( 'top', 'right', 'bottom', 'left' ); + + // Border radius. + if ( isset( $attributes['style']['border']['radius'] ) ) { + $border_styles['radius'] = $attributes['style']['border']['radius']; + } + + // Border style. + if ( isset( $attributes['style']['border']['style'] ) ) { + $border_styles['style'] = $attributes['style']['border']['style']; + } + + // Border width. + if ( isset( $attributes['style']['border']['width'] ) ) { + $border_styles['width'] = $attributes['style']['border']['width']; + } + + // Border color. + $preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null; + $custom_color = $attributes['style']['border']['color'] ?? null; + $border_styles['color'] = $preset_color ? $preset_color : $custom_color; + + // Individual border styles e.g. top, left etc. + foreach ( $sides as $side ) { + $border = $attributes['style']['border'][ $side ] ?? null; + $border_styles[ $side ] = array( + 'color' => isset( $border['color'] ) ? $border['color'] : null, + 'style' => isset( $border['style'] ) ? $border['style'] : null, + 'width' => isset( $border['width'] ) ? $border['width'] : null, + ); + } + + $styles = wp_style_engine_get_styles( array( 'border' => $border_styles ) ); + $attributes = array(); + if ( ! empty( $styles['classnames'] ) ) { + $attributes['class'] = $styles['classnames']; + } + if ( ! empty( $styles['css'] ) ) { + $attributes['style'] = $styles['css']; + } + return $attributes; +} + +/** + * Registers the `core/post-featured-image` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_post_featured_image() { + register_block_type_from_metadata( + __DIR__ . '/post-featured-image', + array( + 'render_callback' => 'render_block_core_post_featured_image', + ) + ); +} +add_action( 'init', 'register_block_core_post_featured_image' ); diff --git a/src/wp-includes/blocks/post-featured-image/block.json b/src/wp-includes/blocks/post-featured-image/block.json new file mode 100644 index 0000000000000..3cd144caa0cf4 --- /dev/null +++ b/src/wp-includes/blocks/post-featured-image/block.json @@ -0,0 +1,108 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-featured-image", + "title": "Featured Image", + "category": "theme", + "description": "Display a post's featured image.", + "textdomain": "default", + "attributes": { + "isLink": { + "type": "boolean", + "default": false, + "role": "content" + }, + "aspectRatio": { + "type": "string" + }, + "width": { + "type": "string" + }, + "height": { + "type": "string" + }, + "scale": { + "type": "string", + "default": "cover" + }, + "sizeSlug": { + "type": "string" + }, + "rel": { + "type": "string", + "attribute": "rel", + "default": "", + "role": "content" + }, + "linkTarget": { + "type": "string", + "default": "_self", + "role": "content" + }, + "overlayColor": { + "type": "string" + }, + "customOverlayColor": { + "type": "string" + }, + "dimRatio": { + "type": "number", + "default": 0 + }, + "gradient": { + "type": "string" + }, + "customGradient": { + "type": "string" + }, + "useFirstImageFromPost": { + "type": "boolean", + "default": false + } + }, + "usesContext": [ "postId", "postType", "queryId" ], + "example": { + "viewportWidth": 350 + }, + "supports": { + "align": [ "left", "right", "center", "wide", "full" ], + "color": { + "text": false, + "background": false + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "width": true, + "__experimentalSkipSerialization": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "width": true + } + }, + "filter": { + "duotone": true + }, + "shadow": { + "__experimentalSkipSerialization": true + }, + "html": false, + "spacing": { + "margin": true, + "padding": true + }, + "interactivity": { + "clientNavigation": true + } + }, + "selectors": { + "border": ".wp-block-post-featured-image img, .wp-block-post-featured-image .block-editor-media-placeholder, .wp-block-post-featured-image .wp-block-post-featured-image__overlay", + "shadow": ".wp-block-post-featured-image img, .wp-block-post-featured-image .components-placeholder", + "filter": { + "duotone": ".wp-block-post-featured-image img, .wp-block-post-featured-image .wp-block-post-featured-image__placeholder, .wp-block-post-featured-image .components-placeholder__illustration, .wp-block-post-featured-image .components-placeholder::before" + } + }, + "editorStyle": "wp-block-post-featured-image-editor", + "style": "wp-block-post-featured-image" +} diff --git a/src/wp-includes/blocks/post-navigation-link.php b/src/wp-includes/blocks/post-navigation-link.php new file mode 100644 index 0000000000000..8162b74d8af17 --- /dev/null +++ b/src/wp-includes/blocks/post-navigation-link.php @@ -0,0 +1,139 @@ + $classes, + ) + ); + // Set default values. + $format = '%link'; + $link = 'next' === $navigation_type ? _x( 'Next', 'label for next post link' ) : _x( 'Previous', 'label for previous post link' ); + $label = ''; + + // Only use hardcoded values here, otherwise we need to add escaping where these values are used. + $arrow_map = array( + 'none' => '', + 'arrow' => array( + 'next' => '→', + 'previous' => '←', + ), + 'chevron' => array( + 'next' => '»', + 'previous' => '«', + ), + ); + + // If a custom label is provided, make this a link. + // `$label` is used to prepend the provided label, if we want to show the page title as well. + if ( isset( $attributes['label'] ) && ! empty( $attributes['label'] ) ) { + $label = "{$attributes['label']}"; + $link = $label; + } + + // If we want to also show the page title, make the page title a link and prepend the label. + if ( isset( $attributes['showTitle'] ) && $attributes['showTitle'] ) { + /* + * If the label link option is not enabled but there is a custom label, + * display the custom label as text before the linked title. + */ + if ( ! $attributes['linkLabel'] ) { + if ( $label ) { + $format = '' . wp_kses_post( $label ) . ' %link'; + } + $link = '%title'; + } elseif ( isset( $attributes['linkLabel'] ) && $attributes['linkLabel'] ) { + // If the label link option is enabled and there is a custom label, display it before the title. + if ( $label ) { + $link = '' . wp_kses_post( $label ) . ' %title'; + } else { + /* + * If the label link option is enabled and there is no custom label, + * add a colon between the label and the post title. + */ + $label = 'next' === $navigation_type ? _x( 'Next:', 'label before the title of the next post' ) : _x( 'Previous:', 'label before the title of the previous post' ); + $link = sprintf( + '%1$s %2$s', + wp_kses_post( $label ), + '%title' + ); + } + } + } + + // Display arrows. + if ( isset( $attributes['arrow'] ) && 'none' !== $attributes['arrow'] && isset( $arrow_map[ $attributes['arrow'] ] ) ) { + $arrow = $arrow_map[ $attributes['arrow'] ][ $navigation_type ]; + + if ( 'next' === $navigation_type ) { + $format = '%link'; + } else { + $format = '%link'; + } + } + + /* + * The dynamic portion of the function name, `$navigation_type`, + * Refers to the type of adjacency, 'next' or 'previous'. + * + * @see https://developer.wordpress.org/reference/functions/get_previous_post_link/ + * @see https://developer.wordpress.org/reference/functions/get_next_post_link/ + */ + $get_link_function = "get_{$navigation_type}_post_link"; + + if ( ! empty( $attributes['taxonomy'] ) ) { + $content = $get_link_function( $format, $link, true, '', $attributes['taxonomy'] ); + } else { + $content = $get_link_function( $format, $link ); + } + + return sprintf( + '
      %2$s
      ', + $wrapper_attributes, + $content + ); +} + +/** + * Registers the `core/post-navigation-link` block on the server. + * + * @since 5.9.0 + */ +function register_block_core_post_navigation_link() { + register_block_type_from_metadata( + __DIR__ . '/post-navigation-link', + array( + 'render_callback' => 'render_block_core_post_navigation_link', + ) + ); +} +add_action( 'init', 'register_block_core_post_navigation_link' ); diff --git a/src/wp-includes/blocks/post-navigation-link/block.json b/src/wp-includes/blocks/post-navigation-link/block.json new file mode 100644 index 0000000000000..2fda6a01cf516 --- /dev/null +++ b/src/wp-includes/blocks/post-navigation-link/block.json @@ -0,0 +1,64 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-navigation-link", + "title": "Post Navigation Link", + "category": "theme", + "description": "Displays the next or previous post link that is adjacent to the current post.", + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + }, + "type": { + "type": "string", + "default": "next" + }, + "label": { + "type": "string", + "role": "content" + }, + "showTitle": { + "type": "boolean", + "default": false + }, + "linkLabel": { + "type": "boolean", + "default": false + }, + "arrow": { + "type": "string", + "default": "none" + }, + "taxonomy": { + "type": "string", + "default": "" + } + }, + "usesContext": [ "postType" ], + "supports": { + "reusable": false, + "html": false, + "color": { + "link": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalWritingMode": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "style": "wp-block-post-navigation-link" +} diff --git a/src/wp-includes/blocks/post-template.php b/src/wp-includes/blocks/post-template.php new file mode 100644 index 0000000000000..9126355c096a5 --- /dev/null +++ b/src/wp-includes/blocks/post-template.php @@ -0,0 +1,162 @@ +name ) { + return true; + } + if ( + 'core/cover' === $block->name && + ! empty( $block->attributes['useFeaturedImage'] ) + ) { + return true; + } + if ( $block->inner_blocks && block_core_post_template_uses_featured_image( $block->inner_blocks ) ) { + return true; + } + } + + return false; +} + +/** + * Renders the `core/post-template` block on the server. + * + * @since 6.3.0 Changed render_block_context priority to `1`. + * + * @global WP_Query $wp_query WordPress Query object. + * + * @param array $attributes Block attributes. + * @param string $content Block default content. + * @param WP_Block $block Block instance. + * + * @return string Returns the output of the query, structured using the layout defined by the block's inner blocks. + */ +function render_block_core_post_template( $attributes, $content, $block ) { + $page_key = isset( $block->context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page'; + $enhanced_pagination = isset( $block->context['enhancedPagination'] ) && $block->context['enhancedPagination']; + $page = empty( $_GET[ $page_key ] ) ? 1 : (int) $_GET[ $page_key ]; + + // Use global query if needed. + $use_global_query = ( isset( $block->context['query']['inherit'] ) && $block->context['query']['inherit'] ); + if ( $use_global_query ) { + global $wp_query; + + /* + * If already in the main query loop, duplicate the query instance to not tamper with the main instance. + * Since this is a nested query, it should start at the beginning, therefore rewind posts. + * Otherwise, the main query loop has not started yet and this block is responsible for doing so. + */ + if ( in_the_loop() ) { + $query = clone $wp_query; + $query->rewind_posts(); + } else { + $query = $wp_query; + } + } else { + $query_args = build_query_vars_from_query_block( $block, $page ); + $query = new WP_Query( $query_args ); + } + + if ( ! $query->have_posts() ) { + return ''; + } + + if ( block_core_post_template_uses_featured_image( $block->inner_blocks ) ) { + update_post_thumbnail_cache( $query ); + } + + $classnames = ''; + if ( isset( $block->context['displayLayout'] ) && isset( $block->context['query'] ) ) { + if ( isset( $block->context['displayLayout']['type'] ) && 'flex' === $block->context['displayLayout']['type'] ) { + $classnames = "is-flex-container columns-{$block->context['displayLayout']['columns']}"; + } + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classnames .= ' has-link-color'; + } + + // Ensure backwards compatibility by flagging the number of columns via classname when using grid layout. + if ( isset( $attributes['layout']['type'] ) && 'grid' === $attributes['layout']['type'] && ! empty( $attributes['layout']['columnCount'] ) ) { + $classnames .= ' ' . sanitize_title( 'columns-' . $attributes['layout']['columnCount'] ); + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => trim( $classnames ) ) ); + + $content = ''; + while ( $query->have_posts() ) { + $query->the_post(); + + // Get an instance of the current Post Template block. + $block_instance = $block->parsed_block; + + // Set the block name to one that does not correspond to an existing registered block. + // This ensures that for the inner instances of the Post Template block, we do not render any block supports. + $block_instance['blockName'] = 'core/null'; + + $post_id = get_the_ID(); + $post_type = get_post_type(); + $filter_block_context = static function ( $context ) use ( $post_id, $post_type ) { + $context['postType'] = $post_type; + $context['postId'] = $post_id; + return $context; + }; + + // Use an early priority to so that other 'render_block_context' filters have access to the values. + add_filter( 'render_block_context', $filter_block_context, 1 ); + // Render the inner blocks of the Post Template block with `dynamic` set to `false` to prevent calling + // `render_callback` and ensure that no wrapper markup is included. + $block_content = ( new WP_Block( $block_instance ) )->render( array( 'dynamic' => false ) ); + remove_filter( 'render_block_context', $filter_block_context, 1 ); + + // Wrap the render inner blocks in a `li` element with the appropriate post classes. + $post_classes = implode( ' ', get_post_class( 'wp-block-post' ) ); + + $inner_block_directives = $enhanced_pagination ? ' data-wp-key="post-template-item-' . $post_id . '"' : ''; + + $content .= '' . $block_content . ''; + } + + /* + * Use this function to restore the context of the template tags + * from a secondary query loop back to the main query loop. + * Since we use two custom loops, it's safest to always restore. + */ + wp_reset_postdata(); + + return sprintf( + '
        %2$s
      ', + $wrapper_attributes, + $content + ); +} + +/** + * Registers the `core/post-template` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_post_template() { + register_block_type_from_metadata( + __DIR__ . '/post-template', + array( + 'render_callback' => 'render_block_core_post_template', + 'skip_inner_blocks' => true, + ) + ); +} +add_action( 'init', 'register_block_core_post_template' ); diff --git a/src/wp-includes/blocks/post-template/block.json b/src/wp-includes/blocks/post-template/block.json new file mode 100644 index 0000000000000..d379a46d3142f --- /dev/null +++ b/src/wp-includes/blocks/post-template/block.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-template", + "title": "Post Template", + "category": "theme", + "ancestor": [ "core/query" ], + "description": "Contains the block elements used to render a post, like the title, date, featured image, content or excerpt, and more.", + "textdomain": "default", + "usesContext": [ + "queryId", + "query", + "displayLayout", + "templateSlug", + "previewPostType", + "enhancedPagination", + "postType" + ], + "supports": { + "reusable": false, + "html": false, + "align": [ "wide", "full" ], + "layout": true, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "spacing": { + "margin": true, + "padding": true, + "blockGap": { + "__experimentalDefault": "1.25em" + }, + "__experimentalDefaultControls": { + "blockGap": true, + "padding": false, + "margin": false + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "style": "wp-block-post-template", + "editorStyle": "wp-block-post-template-editor" +} diff --git a/src/wp-includes/blocks/post-terms.php b/src/wp-includes/blocks/post-terms.php new file mode 100644 index 0000000000000..3e7a05f10117e --- /dev/null +++ b/src/wp-includes/blocks/post-terms.php @@ -0,0 +1,130 @@ +context['postId'] ) || ! isset( $attributes['term'] ) ) { + return ''; + } + + if ( ! is_taxonomy_viewable( $attributes['term'] ) ) { + return ''; + } + + $classes = array( 'taxonomy-' . $attributes['term'] ); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + + $separator = empty( $attributes['separator'] ) ? ' ' : $attributes['separator']; + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + $prefix = "
      "; + if ( isset( $attributes['prefix'] ) && $attributes['prefix'] ) { + $prefix .= '' . $attributes['prefix'] . ''; + } + + $suffix = '
      '; + if ( isset( $attributes['suffix'] ) && $attributes['suffix'] ) { + $suffix = '' . $attributes['suffix'] . '' . $suffix; + } + + $post_terms = get_the_term_list( + $block->context['postId'], + $attributes['term'], + wp_kses_post( $prefix ), + '' . esc_html( $separator ) . '', + wp_kses_post( $suffix ) + ); + + if ( is_wp_error( $post_terms ) || empty( $post_terms ) ) { + return ''; + } + + return $post_terms; +} + +/** + * Returns the available variations for the `core/post-terms` block. + * + * @since 6.5.0 + * + * @return array The available variations for the block. + */ +function block_core_post_terms_build_variations() { + $taxonomies = get_taxonomies( + array( + 'publicly_queryable' => true, + 'show_in_rest' => true, + ), + 'objects' + ); + + // Split the available taxonomies to `built_in` and custom ones, + // in order to prioritize the `built_in` taxonomies at the + // search results. + $built_ins = array(); + $custom_variations = array(); + + // Create and register the eligible taxonomies variations. + foreach ( $taxonomies as $taxonomy ) { + $variation = array( + 'name' => $taxonomy->name, + 'title' => $taxonomy->label, + 'description' => sprintf( + /* translators: %s: taxonomy's label */ + __( 'Display a list of assigned terms from the taxonomy: %s' ), + $taxonomy->label + ), + 'attributes' => array( + 'term' => $taxonomy->name, + ), + 'isActive' => array( 'term' ), + 'scope' => array( 'inserter', 'transform' ), + ); + // Set the category variation as the default one. + if ( 'category' === $taxonomy->name ) { + $variation['isDefault'] = true; + } + if ( $taxonomy->_builtin ) { + $built_ins[] = $variation; + } else { + $custom_variations[] = $variation; + } + } + + return array_merge( $built_ins, $custom_variations ); +} + +/** + * Registers the `core/post-terms` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_post_terms() { + register_block_type_from_metadata( + __DIR__ . '/post-terms', + array( + 'render_callback' => 'render_block_core_post_terms', + 'variation_callback' => 'block_core_post_terms_build_variations', + ) + ); +} +add_action( 'init', 'register_block_core_post_terms' ); diff --git a/src/wp-includes/blocks/post-terms/block.json b/src/wp-includes/blocks/post-terms/block.json new file mode 100644 index 0000000000000..e7567ba657c3b --- /dev/null +++ b/src/wp-includes/blocks/post-terms/block.json @@ -0,0 +1,80 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-terms", + "title": "Post Terms", + "category": "theme", + "description": "Post terms.", + "textdomain": "default", + "attributes": { + "term": { + "type": "string" + }, + "textAlign": { + "type": "string" + }, + "separator": { + "type": "string", + "default": ", " + }, + "prefix": { + "type": "string", + "default": "", + "role": "content" + }, + "suffix": { + "type": "string", + "default": "", + "role": "content" + } + }, + "usesContext": [ "postId", "postType" ], + "example": { + "viewportWidth": 350 + }, + "supports": { + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-post-terms" +} diff --git a/src/wp-includes/blocks/post-time-to-read.php b/src/wp-includes/blocks/post-time-to-read.php new file mode 100644 index 0000000000000..bce545a2927d2 --- /dev/null +++ b/src/wp-includes/blocks/post-time-to-read.php @@ -0,0 +1,185 @@ + '/<\/?[a-z][^>]*?>/i', + 'html_comment_regexp' => '//', + 'space_regexp' => '/ | /i', + 'html_entity_regexp' => '/&\S+?;/', + 'connector_regexp' => "/--|\x{2014}/u", + 'remove_regexp' => "/[\x{0021}-\x{0040}\x{005B}-\x{0060}\x{007B}-\x{007E}\x{0080}-\x{00BF}\x{00D7}\x{00F7}\x{2000}-\x{2BFF}\x{2E00}-\x{2E7F}]/u", + 'astral_regexp' => "/[\x{010000}-\x{10FFFF}]/u", + 'words_regexp' => '/\S\s+/u', + 'characters_excluding_spaces_regexp' => '/\S/u', + 'characters_including_spaces_regexp' => "/[^\f\n\r\t\v\x{00AD}\x{2028}\x{2029}]/u", + ); + + $count = 0; + + if ( '' === trim( $text ) ) { + return $count; + } + + // Sanitize type to one of three possibilities: 'words', 'characters_excluding_spaces' or 'characters_including_spaces'. + if ( 'characters_excluding_spaces' !== $type && 'characters_including_spaces' !== $type ) { + $type = 'words'; + } + + $text .= "\n"; + + // Replace all HTML with a new-line. + $text = preg_replace( $settings['html_regexp'], "\n", $text ); + + // Remove all HTML comments. + $text = preg_replace( $settings['html_comment_regexp'], '', $text ); + + // If a shortcode regular expression has been provided use it to remove shortcodes. + if ( ! empty( $settings['shortcodes_regexp'] ) ) { + $text = preg_replace( $settings['shortcodes_regexp'], "\n", $text ); + } + + // Normalize non-breaking space to a normal space. + $text = preg_replace( $settings['space_regexp'], ' ', $text ); + + if ( 'words' === $type ) { + // Remove HTML Entities. + $text = preg_replace( $settings['html_entity_regexp'], '', $text ); + + // Convert connectors to spaces to count attached text as words. + $text = preg_replace( $settings['connector_regexp'], ' ', $text ); + + // Remove unwanted characters. + $text = preg_replace( $settings['remove_regexp'], '', $text ); + } else { + // Convert HTML Entities to "a". + $text = preg_replace( $settings['html_entity_regexp'], 'a', $text ); + + // Remove surrogate points. + $text = preg_replace( $settings['astral_regexp'], 'a', $text ); + } + + // Match with the selected type regular expression to count the items. + return (int) preg_match_all( $settings[ $type . '_regexp' ], $text ); +} + +/** + * Renders the `core/post-time-to-read` block on the server. + * + * @since 6.9.0 + * + * @param array $attributes Block attributes. + * @param string $content Block default content. + * @param WP_Block $block Block instance. + * @return string Returns the rendered post author name block. + */ +function render_block_core_post_time_to_read( $attributes, $content, $block ) { + if ( ! isset( $block->context['postId'] ) ) { + return ''; + } + + $content = get_the_content(); + $average_reading_rate = isset( $attributes['averageReadingSpeed'] ) ? $attributes['averageReadingSpeed'] : 189; + + $display_mode = isset( $attributes['displayMode'] ) ? $attributes['displayMode'] : 'time'; + + $word_count_type = wp_get_word_count_type(); + $total_words = block_core_post_time_to_read_word_count( $content, $word_count_type ); + + $parts = array(); + + // Add "time to read" part, if enabled. + if ( 'time' === $display_mode ) { + if ( ! empty( $attributes['displayAsRange'] ) ) { + // Calculate faster reading rate with 20% speed = lower minutes, + // and slower reading rate with 20% speed = higher minutes. + $min_minutes = max( 1, (int) round( $total_words / $average_reading_rate * 0.8 ) ); + $max_minutes = max( 1, (int) round( $total_words / $average_reading_rate * 1.2 ) ); + if ( $min_minutes === $max_minutes ) { + $max_minutes = $min_minutes + 1; + } + /* translators: 1: minimum minutes, 2: maximum minutes to read the post. */ + $time_string = sprintf( + /* translators: 1: minimum minutes, 2: maximum minutes to read the post. */ + _x( '%1$s–%2$s minutes', 'Range of minutes to read' ), + $min_minutes, + $max_minutes + ); + } else { + $minutes_to_read = max( 1, (int) round( $total_words / $average_reading_rate ) ); + $time_string = sprintf( + /* translators: %s: the number of minutes to read the post. */ + _n( '%s minute', '%s minutes', $minutes_to_read ), + $minutes_to_read + ); + } + $parts[] = $time_string; + } + + // Add "word count" part, if enabled. + if ( 'words' === $display_mode ) { + $word_count_string = 'words' === $word_count_type ? sprintf( + /* translators: %s: the number of words in the post. */ + _n( '%s word', '%s words', $total_words ), + number_format_i18n( $total_words ) + ) : sprintf( + /* translators: %s: the number of characters in the post. */ + _n( '%s character', '%s characters', $total_words ), + number_format_i18n( $total_words ) + ); + $parts[] = $word_count_string; + } + + $display_string = implode( '
      ', $parts ); + + $align_class_name = empty( $attributes['textAlign'] ) ? '' : "has-text-align-{$attributes['textAlign']}"; + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) ); + + return sprintf( + '
      %2$s
      ', + $wrapper_attributes, + $display_string + ); +} + + +/** + * Registers the `core/post-time-to-read` block on the server. + * + * @since 6.9.0 + */ +function register_block_core_post_time_to_read() { + register_block_type_from_metadata( + __DIR__ . '/post-time-to-read', + array( + 'render_callback' => 'render_block_core_post_time_to_read', + ) + ); +} + +add_action( 'init', 'register_block_core_post_time_to_read' ); diff --git a/src/wp-includes/blocks/post-time-to-read/block.json b/src/wp-includes/blocks/post-time-to-read/block.json new file mode 100644 index 0000000000000..386312e00434e --- /dev/null +++ b/src/wp-includes/blocks/post-time-to-read/block.json @@ -0,0 +1,67 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-time-to-read", + "title": "Time to Read", + "category": "theme", + "description": "Show minutes required to finish reading the post. Can also show a word count.", + "textdomain": "default", + "usesContext": [ "postId", "postType" ], + "attributes": { + "textAlign": { + "type": "string" + }, + "displayAsRange": { + "type": "boolean", + "default": true + }, + "displayMode": { + "type": "string", + "default": "time" + }, + "averageReadingSpeed": { + "type": "number", + "default": 189 + } + }, + "supports": { + "color": { + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "html": false, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } +} diff --git a/src/wp-includes/blocks/post-title.php b/src/wp-includes/blocks/post-title.php new file mode 100644 index 0000000000000..ed27f2e4158eb --- /dev/null +++ b/src/wp-includes/blocks/post-title.php @@ -0,0 +1,74 @@ +context['postId'] ) ) { + return ''; + } + + /** + * The `$post` argument is intentionally omitted so that changes are reflected when previewing a post. + * See: https://github.com/WordPress/gutenberg/pull/37622#issuecomment-1000932816. + */ + $title = get_the_title(); + + if ( ! $title ) { + return ''; + } + + $tag_name = 'h2'; + if ( isset( $attributes['level'] ) ) { + $tag_name = 0 === $attributes['level'] ? 'p' : 'h' . (int) $attributes['level']; + } + + if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) { + $rel = ! empty( $attributes['rel'] ) ? 'rel="' . esc_attr( $attributes['rel'] ) . '"' : ''; + $title = sprintf( '%4$s', esc_url( get_the_permalink( $block->context['postId'] ) ), esc_attr( $attributes['linkTarget'] ), $rel, $title ); + } + + $classes = array(); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + return sprintf( + '<%1$s %2$s>%3$s', + $tag_name, + $wrapper_attributes, + $title + ); +} + +/** + * Registers the `core/post-title` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_post_title() { + register_block_type_from_metadata( + __DIR__ . '/post-title', + array( + 'render_callback' => 'render_block_core_post_title', + ) + ); +} +add_action( 'init', 'register_block_core_post_title' ); diff --git a/src/wp-includes/blocks/post-title/block.json b/src/wp-includes/blocks/post-title/block.json new file mode 100644 index 0000000000000..5587d71b148d0 --- /dev/null +++ b/src/wp-includes/blocks/post-title/block.json @@ -0,0 +1,87 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-title", + "title": "Title", + "category": "theme", + "description": "Displays the title of a post, page, or any other content-type.", + "textdomain": "default", + "usesContext": [ "postId", "postType", "queryId" ], + "attributes": { + "textAlign": { + "type": "string" + }, + "level": { + "type": "number", + "default": 2 + }, + "levelOptions": { + "type": "array" + }, + "isLink": { + "type": "boolean", + "default": false, + "role": "content" + }, + "rel": { + "type": "string", + "attribute": "rel", + "default": "", + "role": "content" + }, + "linkTarget": { + "type": "string", + "default": "_self", + "role": "content" + } + }, + "example": { + "viewportWidth": 350 + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-post-title" +} diff --git a/src/wp-includes/blocks/preformatted/block.json b/src/wp-includes/blocks/preformatted/block.json new file mode 100644 index 0000000000000..c25b8ce37093a --- /dev/null +++ b/src/wp-includes/blocks/preformatted/block.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/preformatted", + "title": "Preformatted", + "category": "text", + "description": "Add text that respects your spacing and tabs, and also allows styling.", + "textdomain": "default", + "attributes": { + "content": { + "type": "rich-text", + "source": "rich-text", + "selector": "pre", + "__unstablePreserveWhiteSpace": true, + "role": "content" + } + }, + "supports": { + "anchor": true, + "color": { + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "padding": true, + "margin": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-preformatted" +} diff --git a/src/wp-includes/blocks/pullquote/block.json b/src/wp-includes/blocks/pullquote/block.json new file mode 100644 index 0000000000000..271bba74d0252 --- /dev/null +++ b/src/wp-includes/blocks/pullquote/block.json @@ -0,0 +1,92 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/pullquote", + "title": "Pullquote", + "category": "text", + "description": "Give special visual emphasis to a quote from your text.", + "textdomain": "default", + "attributes": { + "value": { + "type": "rich-text", + "source": "rich-text", + "selector": "p", + "role": "content" + }, + "citation": { + "type": "rich-text", + "source": "rich-text", + "selector": "cite", + "role": "content" + }, + "textAlign": { + "type": "string" + } + }, + "supports": { + "anchor": true, + "align": [ "left", "right", "wide", "full" ], + "background": { + "backgroundImage": true, + "backgroundSize": true, + "__experimentalDefaultControls": { + "backgroundImage": true + } + }, + "color": { + "gradients": true, + "background": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "dimensions": { + "minHeight": true, + "__experimentalDefaultControls": { + "minHeight": false + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "style": true, + "width": true + } + }, + "__experimentalStyle": { + "typography": { + "fontSize": "1.5em", + "lineHeight": "1.6" + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-pullquote-editor", + "style": "wp-block-pullquote" +} diff --git a/src/wp-includes/blocks/query-no-results.php b/src/wp-includes/blocks/query-no-results.php new file mode 100644 index 0000000000000..34d6b321cbd6b --- /dev/null +++ b/src/wp-includes/blocks/query-no-results.php @@ -0,0 +1,65 @@ +context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page'; + $page = empty( $_GET[ $page_key ] ) ? 1 : (int) $_GET[ $page_key ]; + + // Override the custom query with the global query if needed. + $use_global_query = ( isset( $block->context['query']['inherit'] ) && $block->context['query']['inherit'] ); + if ( $use_global_query ) { + global $wp_query; + $query = $wp_query; + } else { + $query_args = build_query_vars_from_query_block( $block, $page ); + $query = new WP_Query( $query_args ); + } + + if ( $query->post_count > 0 ) { + return ''; + } + + $classes = ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) ? 'has-link-color' : ''; + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) ); + return sprintf( + '
      %2$s
      ', + $wrapper_attributes, + $content + ); +} + +/** + * Registers the `core/query-no-results` block on the server. + * + * @since 6.0.0 + */ +function register_block_core_query_no_results() { + register_block_type_from_metadata( + __DIR__ . '/query-no-results', + array( + 'render_callback' => 'render_block_core_query_no_results', + ) + ); +} +add_action( 'init', 'register_block_core_query_no_results' ); diff --git a/src/wp-includes/blocks/query-no-results/block.json b/src/wp-includes/blocks/query-no-results/block.json new file mode 100644 index 0000000000000..44d2ceef987e2 --- /dev/null +++ b/src/wp-includes/blocks/query-no-results/block.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query-no-results", + "title": "No Results", + "category": "theme", + "description": "Contains the block elements used to render content when no query results are found.", + "ancestor": [ "core/query" ], + "textdomain": "default", + "usesContext": [ "queryId", "query" ], + "supports": { + "align": true, + "reusable": false, + "html": false, + "color": { + "gradients": true, + "link": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + } +} diff --git a/src/wp-includes/blocks/query-pagination-next.php b/src/wp-includes/blocks/query-pagination-next.php new file mode 100644 index 0000000000000..d574f94093846 --- /dev/null +++ b/src/wp-includes/blocks/query-pagination-next.php @@ -0,0 +1,102 @@ +context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page'; + $enhanced_pagination = isset( $block->context['enhancedPagination'] ) && $block->context['enhancedPagination']; + $page = empty( $_GET[ $page_key ] ) ? 1 : (int) $_GET[ $page_key ]; + $max_page = isset( $block->context['query']['pages'] ) ? (int) $block->context['query']['pages'] : 0; + + $wrapper_attributes = get_block_wrapper_attributes(); + $show_label = isset( $block->context['showLabel'] ) ? (bool) $block->context['showLabel'] : true; + $default_label = __( 'Next Page' ); + $label_text = isset( $attributes['label'] ) && ! empty( $attributes['label'] ) ? esc_html( $attributes['label'] ) : $default_label; + $label = $show_label ? $label_text : ''; + $pagination_arrow = get_query_pagination_arrow( $block, true ); + + if ( ! $label ) { + $wrapper_attributes .= ' aria-label="' . $label_text . '"'; + } + if ( $pagination_arrow ) { + $label .= $pagination_arrow; + } + $content = ''; + + // Check if the pagination is for Query that inherits the global context. + if ( isset( $block->context['query']['inherit'] ) && $block->context['query']['inherit'] ) { + $filter_link_attributes = static function () use ( $wrapper_attributes ) { + return $wrapper_attributes; + }; + add_filter( 'next_posts_link_attributes', $filter_link_attributes ); + // Take into account if we have set a bigger `max page` + // than what the query has. + global $wp_query; + if ( $max_page > $wp_query->max_num_pages ) { + $max_page = $wp_query->max_num_pages; + } + $content = get_next_posts_link( $label, $max_page ); + remove_filter( 'next_posts_link_attributes', $filter_link_attributes ); + } elseif ( ! $max_page || $max_page > $page ) { + $custom_query = new WP_Query( build_query_vars_from_query_block( $block, $page ) ); + $custom_query_max_pages = (int) $custom_query->max_num_pages; + if ( $custom_query_max_pages && $custom_query_max_pages !== $page ) { + $content = sprintf( + '%3$s', + esc_url( add_query_arg( $page_key, $page + 1 ) ), + $wrapper_attributes, + $label + ); + } + wp_reset_postdata(); // Restore original Post Data. + } + + if ( $enhanced_pagination && isset( $content ) ) { + $p = new WP_HTML_Tag_Processor( $content ); + if ( $p->next_tag( + array( + 'tag_name' => 'a', + 'class_name' => 'wp-block-query-pagination-next', + ) + ) ) { + $p->set_attribute( 'data-wp-key', 'query-pagination-next' ); + $p->set_attribute( 'data-wp-on--click', 'core/query::actions.navigate' ); + $p->set_attribute( 'data-wp-on--mouseenter', 'core/query::actions.prefetch' ); + $p->set_attribute( 'data-wp-watch', 'core/query::callbacks.prefetch' ); + $content = $p->get_updated_html(); + } + } + + return $content; +} + +/** + * Registers the `core/query-pagination-next` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_query_pagination_next() { + register_block_type_from_metadata( + __DIR__ . '/query-pagination-next', + array( + 'render_callback' => 'render_block_core_query_pagination_next', + ) + ); +} +add_action( 'init', 'register_block_core_query_pagination_next' ); diff --git a/src/wp-includes/blocks/query-pagination-next/block.json b/src/wp-includes/blocks/query-pagination-next/block.json new file mode 100644 index 0000000000000..ec56125ee3b76 --- /dev/null +++ b/src/wp-includes/blocks/query-pagination-next/block.json @@ -0,0 +1,49 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query-pagination-next", + "title": "Next Page", + "category": "theme", + "parent": [ "core/query-pagination" ], + "description": "Displays the next posts page link.", + "textdomain": "default", + "attributes": { + "label": { + "type": "string" + } + }, + "usesContext": [ + "queryId", + "query", + "paginationArrow", + "showLabel", + "enhancedPagination" + ], + "supports": { + "reusable": false, + "html": false, + "color": { + "gradients": true, + "text": false, + "__experimentalDefaultControls": { + "background": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + } +} diff --git a/src/wp-includes/blocks/query-pagination-numbers.php b/src/wp-includes/blocks/query-pagination-numbers.php new file mode 100644 index 0000000000000..fddf28660fe4f --- /dev/null +++ b/src/wp-includes/blocks/query-pagination-numbers.php @@ -0,0 +1,133 @@ +context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page'; + $enhanced_pagination = isset( $block->context['enhancedPagination'] ) && $block->context['enhancedPagination']; + $page = empty( $_GET[ $page_key ] ) ? 1 : (int) $_GET[ $page_key ]; + $max_page = isset( $block->context['query']['pages'] ) ? (int) $block->context['query']['pages'] : 0; + + $wrapper_attributes = get_block_wrapper_attributes(); + $content = ''; + global $wp_query; + $mid_size = isset( $block->attributes['midSize'] ) ? (int) $block->attributes['midSize'] : null; + if ( isset( $block->context['query']['inherit'] ) && $block->context['query']['inherit'] ) { + // Take into account if we have set a bigger `max page` + // than what the query has. + $total = ! $max_page || $max_page > $wp_query->max_num_pages ? $wp_query->max_num_pages : $max_page; + $paginate_args = array( + 'prev_next' => false, + 'total' => $total, + ); + if ( null !== $mid_size ) { + $paginate_args['mid_size'] = $mid_size; + } + $content = paginate_links( $paginate_args ); + } else { + $block_query = new WP_Query( build_query_vars_from_query_block( $block, $page ) ); + // `paginate_links` works with the global $wp_query, so we have to + // temporarily switch it with our custom query. + $prev_wp_query = $wp_query; + $wp_query = $block_query; + $total = ! $max_page || $max_page > $wp_query->max_num_pages ? $wp_query->max_num_pages : $max_page; + $paginate_args = array( + 'base' => '%_%', + 'format' => "?$page_key=%#%", + 'current' => max( 1, $page ), + 'total' => $total, + 'prev_next' => false, + ); + if ( null !== $mid_size ) { + $paginate_args['mid_size'] = $mid_size; + } + if ( 1 !== $page ) { + /** + * `paginate_links` doesn't use the provided `format` when the page is `1`. + * This is great for the main query as it removes the extra query params + * making the URL shorter, but in the case of multiple custom queries is + * problematic. It results in returning an empty link which ends up with + * a link to the current page. + * + * A way to address this is to add a `fake` query arg with no value that + * is the same for all custom queries. This way the link is not empty and + * preserves all the other existent query args. + * + * @see https://developer.wordpress.org/reference/functions/paginate_links/ + * + * The proper fix of this should be in core. Track Ticket: + * @see https://core.trac.wordpress.org/ticket/53868 + * + * TODO: After two WP versions (starting from the WP version the core patch landed), + * we should remove this and call `paginate_links` with the proper new arg. + */ + $paginate_args['add_args'] = array( 'cst' => '' ); + } + // We still need to preserve `paged` query param if exists, as is used + // for Queries that inherit from global context. + $paged = empty( $_GET['paged'] ) ? null : (int) $_GET['paged']; + if ( $paged ) { + $paginate_args['add_args'] = array( 'paged' => $paged ); + } + $content = paginate_links( $paginate_args ); + wp_reset_postdata(); // Restore original Post Data. + $wp_query = $prev_wp_query; + } + + if ( empty( $content ) ) { + return ''; + } + + if ( $enhanced_pagination ) { + $p = new WP_HTML_Tag_Processor( $content ); + $tag_index = 0; + while ( $p->next_tag( + array( 'class_name' => 'page-numbers' ) + ) ) { + if ( null === $p->get_attribute( 'data-wp-key' ) ) { + $p->set_attribute( 'data-wp-key', 'index-' . $tag_index++ ); + } + if ( 'A' === $p->get_tag() ) { + $p->set_attribute( 'data-wp-on--click', 'core/query::actions.navigate' ); + } + } + $content = $p->get_updated_html(); + } + + return sprintf( + '
      %2$s
      ', + $wrapper_attributes, + $content + ); +} + +/** + * Registers the `core/query-pagination-numbers` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_query_pagination_numbers() { + register_block_type_from_metadata( + __DIR__ . '/query-pagination-numbers', + array( + 'render_callback' => 'render_block_core_query_pagination_numbers', + ) + ); +} +add_action( 'init', 'register_block_core_query_pagination_numbers' ); diff --git a/src/wp-includes/blocks/query-pagination-numbers/block.json b/src/wp-includes/blocks/query-pagination-numbers/block.json new file mode 100644 index 0000000000000..8a9f0ee69f14e --- /dev/null +++ b/src/wp-includes/blocks/query-pagination-numbers/block.json @@ -0,0 +1,45 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query-pagination-numbers", + "title": "Page Numbers", + "category": "theme", + "parent": [ "core/query-pagination" ], + "description": "Displays a list of page numbers for pagination.", + "textdomain": "default", + "attributes": { + "midSize": { + "type": "number", + "default": 2 + } + }, + "usesContext": [ "queryId", "query", "enhancedPagination" ], + "supports": { + "reusable": false, + "html": false, + "color": { + "gradients": true, + "text": false, + "__experimentalDefaultControls": { + "background": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-query-pagination-numbers-editor" +} diff --git a/src/wp-includes/blocks/query-pagination-previous.php b/src/wp-includes/blocks/query-pagination-previous.php new file mode 100644 index 0000000000000..ec3de8921d519 --- /dev/null +++ b/src/wp-includes/blocks/query-pagination-previous.php @@ -0,0 +1,95 @@ +context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page'; + $enhanced_pagination = isset( $block->context['enhancedPagination'] ) && $block->context['enhancedPagination']; + $max_page = isset( $block->context['query']['pages'] ) ? (int) $block->context['query']['pages'] : 0; + $page = empty( $_GET[ $page_key ] ) ? 1 : (int) $_GET[ $page_key ]; + $wrapper_attributes = get_block_wrapper_attributes(); + $show_label = isset( $block->context['showLabel'] ) ? (bool) $block->context['showLabel'] : true; + $default_label = __( 'Previous Page' ); + $label_text = isset( $attributes['label'] ) && ! empty( $attributes['label'] ) ? esc_html( $attributes['label'] ) : $default_label; + $label = $show_label ? $label_text : ''; + $pagination_arrow = get_query_pagination_arrow( $block, false ); + if ( ! $label ) { + $wrapper_attributes .= ' aria-label="' . $label_text . '"'; + } + if ( $pagination_arrow ) { + $label = $pagination_arrow . $label; + } + $content = ''; + // Check if the pagination is for Query that inherits the global context + // and handle appropriately. + if ( isset( $block->context['query']['inherit'] ) && $block->context['query']['inherit'] ) { + $filter_link_attributes = static function () use ( $wrapper_attributes ) { + return $wrapper_attributes; + }; + + add_filter( 'previous_posts_link_attributes', $filter_link_attributes ); + $content = get_previous_posts_link( $label ); + remove_filter( 'previous_posts_link_attributes', $filter_link_attributes ); + } else { + $block_query = new WP_Query( build_query_vars_from_query_block( $block, $page ) ); + $block_max_pages = $block_query->max_num_pages; + $total = ! $max_page || $max_page > $block_max_pages ? $block_max_pages : $max_page; + wp_reset_postdata(); + + if ( 1 < $page && $page <= $total ) { + $content = sprintf( + '%3$s', + esc_url( add_query_arg( $page_key, $page - 1 ) ), + $wrapper_attributes, + $label + ); + } + } + + if ( $enhanced_pagination && isset( $content ) ) { + $p = new WP_HTML_Tag_Processor( $content ); + if ( $p->next_tag( + array( + 'tag_name' => 'a', + 'class_name' => 'wp-block-query-pagination-previous', + ) + ) ) { + $p->set_attribute( 'data-wp-key', 'query-pagination-previous' ); + $p->set_attribute( 'data-wp-on--click', 'core/query::actions.navigate' ); + $p->set_attribute( 'data-wp-on--mouseenter', 'core/query::actions.prefetch' ); + $p->set_attribute( 'data-wp-watch', 'core/query::callbacks.prefetch' ); + $content = $p->get_updated_html(); + } + } + + return $content; +} + +/** + * Registers the `core/query-pagination-previous` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_query_pagination_previous() { + register_block_type_from_metadata( + __DIR__ . '/query-pagination-previous', + array( + 'render_callback' => 'render_block_core_query_pagination_previous', + ) + ); +} +add_action( 'init', 'register_block_core_query_pagination_previous' ); diff --git a/src/wp-includes/blocks/query-pagination-previous/block.json b/src/wp-includes/blocks/query-pagination-previous/block.json new file mode 100644 index 0000000000000..d1e34c8630250 --- /dev/null +++ b/src/wp-includes/blocks/query-pagination-previous/block.json @@ -0,0 +1,49 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query-pagination-previous", + "title": "Previous Page", + "category": "theme", + "parent": [ "core/query-pagination" ], + "description": "Displays the previous posts page link.", + "textdomain": "default", + "attributes": { + "label": { + "type": "string" + } + }, + "usesContext": [ + "queryId", + "query", + "paginationArrow", + "showLabel", + "enhancedPagination" + ], + "supports": { + "reusable": false, + "html": false, + "color": { + "gradients": true, + "text": false, + "__experimentalDefaultControls": { + "background": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + } +} diff --git a/src/wp-includes/blocks/query-pagination.php b/src/wp-includes/blocks/query-pagination.php new file mode 100644 index 0000000000000..acafe968c0bec --- /dev/null +++ b/src/wp-includes/blocks/query-pagination.php @@ -0,0 +1,51 @@ + __( 'Pagination' ), + 'class' => $classes, + ) + ); + + return sprintf( + '', + $wrapper_attributes, + $content + ); +} + +/** + * Registers the `core/query-pagination` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_query_pagination() { + register_block_type_from_metadata( + __DIR__ . '/query-pagination', + array( + 'render_callback' => 'render_block_core_query_pagination', + ) + ); +} +add_action( 'init', 'register_block_core_query_pagination' ); diff --git a/src/wp-includes/blocks/query-pagination/block.json b/src/wp-includes/blocks/query-pagination/block.json new file mode 100644 index 0000000000000..355b188e442d8 --- /dev/null +++ b/src/wp-includes/blocks/query-pagination/block.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query-pagination", + "title": "Pagination", + "category": "theme", + "ancestor": [ "core/query" ], + "allowedBlocks": [ + "core/query-pagination-previous", + "core/query-pagination-numbers", + "core/query-pagination-next" + ], + "description": "Displays a paginated navigation to next/previous set of posts, when applicable.", + "textdomain": "default", + "attributes": { + "paginationArrow": { + "type": "string", + "default": "none" + }, + "showLabel": { + "type": "boolean", + "default": true + } + }, + "usesContext": [ "queryId", "query" ], + "providesContext": { + "paginationArrow": "paginationArrow", + "showLabel": "showLabel" + }, + "supports": { + "align": true, + "reusable": false, + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "layout": { + "allowSwitching": false, + "allowInheriting": false, + "default": { + "type": "flex" + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-query-pagination-editor", + "style": "wp-block-query-pagination" +} diff --git a/src/wp-includes/blocks/query-title.php b/src/wp-includes/blocks/query-title.php new file mode 100644 index 0000000000000..980e1c5f58f44 --- /dev/null +++ b/src/wp-includes/blocks/query-title.php @@ -0,0 +1,103 @@ +context['query']['postType'] ) ? $block->context['query']['postType'] : get_post_type(); + + if ( ! $type || + ( 'archive' === $type && ! $is_archive ) || + ( 'search' === $type && ! $is_search ) || + ( 'post-type' === $type && ! $post_type ) + ) { + return ''; + } + $title = ''; + if ( $is_archive ) { + $show_prefix = isset( $attributes['showPrefix'] ) ? $attributes['showPrefix'] : true; + if ( ! $show_prefix ) { + add_filter( 'get_the_archive_title_prefix', '__return_empty_string', 1 ); + $title = get_the_archive_title(); + remove_filter( 'get_the_archive_title_prefix', '__return_empty_string', 1 ); + } else { + $title = get_the_archive_title(); + } + } + if ( $is_search ) { + $title = __( 'Search results' ); + + if ( isset( $attributes['showSearchTerm'] ) && $attributes['showSearchTerm'] ) { + $title = sprintf( + /* translators: %s is the search term. */ + __( 'Search results for: "%s"' ), + get_search_query() + ); + } + } + if ( 'post-type' === $type ) { + $post_type_object = get_post_type_object( $post_type ); + + if ( ! $post_type_object ) { + return ''; + } + + $post_type_name = $post_type_object->labels->singular_name; + $show_prefix = isset( $attributes['showPrefix'] ) ? $attributes['showPrefix'] : true; + + if ( $show_prefix ) { + $title = sprintf( + /* translators: %s is the post type name. */ + __( 'Post Type: "%s"' ), + $post_type_name + ); + } else { + $title = $post_type_name; + } + } + + $level = isset( $attributes['level'] ) ? (int) $attributes['level'] : 1; + $tag_name = 0 === $level ? 'p' : 'h' . (int) $attributes['level']; + + $align_class_name = empty( $attributes['textAlign'] ) ? '' : "has-text-align-{$attributes['textAlign']}"; + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) ); + return sprintf( + '<%1$s %2$s>%3$s', + $tag_name, + $wrapper_attributes, + $title + ); +} + +/** + * Registers the `core/query-title` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_query_title() { + register_block_type_from_metadata( + __DIR__ . '/query-title', + array( + 'render_callback' => 'render_block_core_query_title', + ) + ); +} +add_action( 'init', 'register_block_core_query_title' ); diff --git a/src/wp-includes/blocks/query-title/block.json b/src/wp-includes/blocks/query-title/block.json new file mode 100644 index 0000000000000..549451bbfc67b --- /dev/null +++ b/src/wp-includes/blocks/query-title/block.json @@ -0,0 +1,82 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query-title", + "title": "Query Title", + "category": "theme", + "description": "Display the query title.", + "textdomain": "default", + "attributes": { + "type": { + "type": "string" + }, + "textAlign": { + "type": "string" + }, + "level": { + "type": "number", + "default": 1 + }, + "levelOptions": { + "type": "array" + }, + "showPrefix": { + "type": "boolean", + "default": true + }, + "showSearchTerm": { + "type": "boolean", + "default": true + } + }, + "example": { + "attributes": { + "type": "search" + } + }, + "usesContext": [ "query" ], + "supports": { + "align": [ "wide", "full" ], + "html": false, + "color": { + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-query-title" +} diff --git a/src/wp-includes/blocks/query-total.php b/src/wp-includes/blocks/query-total.php new file mode 100644 index 0000000000000..f63bb1b98eac0 --- /dev/null +++ b/src/wp-includes/blocks/query-total.php @@ -0,0 +1,90 @@ +context['query']['inherit'] ) && $block->context['query']['inherit'] ) { + $query_to_use = $wp_query; + $current_page = max( 1, (int) get_query_var( 'paged', 1 ) ); + } else { + $page_key = isset( $block->context['queryId'] ) ? 'query-' . $block->context['queryId'] . '-page' : 'query-page'; + $current_page = isset( $_GET[ $page_key ] ) ? (int) $_GET[ $page_key ] : 1; + $query_to_use = new WP_Query( build_query_vars_from_query_block( $block, $current_page ) ); + } + + $max_rows = $query_to_use->found_posts; + $posts_per_page = (int) $query_to_use->get( 'posts_per_page' ); + + // Calculate the range of posts being displayed. + $start = ( 0 === $max_rows ) ? 0 : ( ( $current_page - 1 ) * $posts_per_page + 1 ); + $end = min( $start + $posts_per_page - 1, $max_rows ); + + // Prepare the display based on the `displayType` attribute. + $output = ''; + switch ( $attributes['displayType'] ) { + case 'range-display': + if ( $start === $end ) { + $output = sprintf( + /* translators: 1: Start index of posts, 2: Total number of posts */ + __( 'Displaying %1$s of %2$s' ), + $start, + $max_rows + ); + } else { + $output = sprintf( + /* translators: 1: Start index of posts, 2: End index of posts, 3: Total number of posts */ + __( 'Displaying %1$s – %2$s of %3$s' ), + $start, + $end, + $max_rows + ); + } + + break; + + case 'total-results': + default: + // translators: %d: number of results. + $output = sprintf( _n( '%d result found', '%d results found', $max_rows ), $max_rows ); + break; + } + + return sprintf( + '
      %2$s
      ', + $wrapper_attributes, + $output + ); +} + +/** + * Registers the `query-total` block. + * + * @since 6.8.0 + */ +function register_block_core_query_total() { + register_block_type_from_metadata( + __DIR__ . '/query-total', + array( + 'render_callback' => 'render_block_core_query_total', + ) + ); +} +add_action( 'init', 'register_block_core_query_total' ); diff --git a/src/wp-includes/blocks/query-total/block.json b/src/wp-includes/blocks/query-total/block.json new file mode 100644 index 0000000000000..21f6ba0673903 --- /dev/null +++ b/src/wp-includes/blocks/query-total/block.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query-total", + "title": "Query Total", + "category": "theme", + "ancestor": [ "core/query" ], + "description": "Display the total number of results in a query.", + "textdomain": "default", + "attributes": { + "displayType": { + "type": "string", + "default": "total-results" + } + }, + "usesContext": [ "queryId", "query" ], + "supports": { + "align": [ "wide", "full" ], + "html": false, + "spacing": { + "margin": true, + "padding": true + }, + "color": { + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "style": "wp-block-query-total" +} diff --git a/src/wp-includes/blocks/query.php b/src/wp-includes/blocks/query.php new file mode 100644 index 0000000000000..6b544cd99ae8c --- /dev/null +++ b/src/wp-includes/blocks/query.php @@ -0,0 +1,152 @@ +next_tag() ) { + // Add the necessary directives. + $p->set_attribute( 'data-wp-interactive', 'core/query' ); + $p->set_attribute( 'data-wp-router-region', 'query-' . $attributes['queryId'] ); + $p->set_attribute( 'data-wp-context', '{}' ); + $p->set_attribute( 'data-wp-key', $attributes['queryId'] ); + $content = $p->get_updated_html(); + } + } + + // Add the styles to the block type if the block is interactive and remove + // them if it's not. + $style_asset = 'wp-block-query'; + if ( ! wp_style_is( $style_asset ) ) { + $style_handles = $block->block_type->style_handles; + // If the styles are not needed, and they are still in the `style_handles`, remove them. + if ( ! $is_interactive && in_array( $style_asset, $style_handles, true ) ) { + $block->block_type->style_handles = array_diff( $style_handles, array( $style_asset ) ); + } + // If the styles are needed, but they were previously removed, add them again. + if ( $is_interactive && ! in_array( $style_asset, $style_handles, true ) ) { + $block->block_type->style_handles = array_merge( $style_handles, array( $style_asset ) ); + } + } + + return $content; +} + +/** + * Registers the `core/query` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_query() { + register_block_type_from_metadata( + __DIR__ . '/query', + array( + 'render_callback' => 'render_block_core_query', + ) + ); +} +add_action( 'init', 'register_block_core_query' ); + +/** + * Traverse the tree of blocks looking for any plugin block (i.e., a block from + * an installed plugin) inside a Query block with the enhanced pagination + * enabled. If at least one is found, the enhanced pagination is effectively + * disabled to prevent any potential incompatibilities. + * + * @since 6.4.0 + * + * @param array $parsed_block The block being rendered. + * @return array Returns the parsed block, unmodified. + */ +function block_core_query_disable_enhanced_pagination( $parsed_block ) { + static $enhanced_query_stack = array(); + static $dirty_enhanced_queries = array(); + static $render_query_callback = null; + + $block_name = $parsed_block['blockName']; + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block_name ); + $has_enhanced_pagination = isset( $parsed_block['attrs']['enhancedPagination'] ) && true === $parsed_block['attrs']['enhancedPagination'] && isset( $parsed_block['attrs']['queryId'] ); + /* + * Client side navigation can be true in two states: + * - supports.interactivity = true; + * - supports.interactivity.clientNavigation = true; + */ + $supports_client_navigation = ( isset( $block_type->supports['interactivity']['clientNavigation'] ) && true === $block_type->supports['interactivity']['clientNavigation'] ) + || ( isset( $block_type->supports['interactivity'] ) && true === $block_type->supports['interactivity'] ); + + if ( 'core/query' === $block_name && $has_enhanced_pagination ) { + $enhanced_query_stack[] = $parsed_block['attrs']['queryId']; + + if ( ! isset( $render_query_callback ) ) { + /** + * Filter that disables the enhanced pagination feature during block + * rendering when a plugin block has been found inside. It does so + * by adding an attribute called `data-wp-navigation-disabled` which + * is later handled by the front-end logic. + * + * @param string $content The block content. + * @param array $block The full block, including name and attributes. + * @return string Returns the modified output of the query block. + */ + $render_query_callback = static function ( $content, $block ) use ( &$enhanced_query_stack, &$dirty_enhanced_queries, &$render_query_callback ) { + $has_enhanced_pagination = isset( $block['attrs']['enhancedPagination'] ) && true === $block['attrs']['enhancedPagination'] && isset( $block['attrs']['queryId'] ); + + if ( ! $has_enhanced_pagination ) { + return $content; + } + + if ( isset( $dirty_enhanced_queries[ $block['attrs']['queryId'] ] ) ) { + // Disable navigation in the router store config. + wp_interactivity_config( 'core/router', array( 'clientNavigationDisabled' => true ) ); + $dirty_enhanced_queries[ $block['attrs']['queryId'] ] = null; + } + + array_pop( $enhanced_query_stack ); + + if ( empty( $enhanced_query_stack ) ) { + remove_filter( 'render_block_core/query', $render_query_callback ); + $render_query_callback = null; + } + + return $content; + }; + + add_filter( 'render_block_core/query', $render_query_callback, 10, 2 ); + } + } elseif ( + ! empty( $enhanced_query_stack ) && + isset( $block_name ) && + ( ! $supports_client_navigation ) + ) { + foreach ( $enhanced_query_stack as $query_id ) { + $dirty_enhanced_queries[ $query_id ] = true; + } + } + + return $parsed_block; +} + +add_filter( 'render_block_data', 'block_core_query_disable_enhanced_pagination', 10, 1 ); diff --git a/src/wp-includes/blocks/query/block.json b/src/wp-includes/blocks/query/block.json new file mode 100644 index 0000000000000..33ba8bfd925ca --- /dev/null +++ b/src/wp-includes/blocks/query/block.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/query", + "title": "Query Loop", + "category": "theme", + "description": "An advanced block that allows displaying post types based on different query parameters and visual configurations.", + "keywords": [ "posts", "list", "blog", "blogs", "custom post types" ], + "textdomain": "default", + "attributes": { + "queryId": { + "type": "number" + }, + "query": { + "type": "object", + "default": { + "perPage": null, + "pages": 0, + "offset": 0, + "postType": "post", + "order": "desc", + "orderBy": "date", + "author": "", + "search": "", + "exclude": [], + "sticky": "", + "inherit": true, + "taxQuery": null, + "parents": [], + "format": [] + } + }, + "tagName": { + "type": "string", + "default": "div" + }, + "namespace": { + "type": "string" + }, + "enhancedPagination": { + "type": "boolean", + "default": false + } + }, + "usesContext": [ "templateSlug" ], + "providesContext": { + "queryId": "queryId", + "query": "query", + "displayLayout": "displayLayout", + "enhancedPagination": "enhancedPagination" + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "layout": true, + "interactivity": true, + "contentRole": true + }, + "editorStyle": "wp-block-query-editor" +} diff --git a/src/wp-includes/blocks/quote/block.json b/src/wp-includes/blocks/quote/block.json new file mode 100644 index 0000000000000..52609ee57d12a --- /dev/null +++ b/src/wp-includes/blocks/quote/block.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/quote", + "title": "Quote", + "category": "text", + "description": "Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" — Julio Cortázar", + "keywords": [ "blockquote", "cite" ], + "textdomain": "default", + "attributes": { + "value": { + "type": "string", + "source": "html", + "selector": "blockquote", + "multiline": "p", + "default": "", + "role": "content" + }, + "citation": { + "type": "rich-text", + "source": "rich-text", + "selector": "cite", + "role": "content" + }, + "textAlign": { + "type": "string" + } + }, + "supports": { + "anchor": true, + "align": [ "left", "right", "wide", "full" ], + "html": false, + "background": { + "backgroundImage": true, + "backgroundSize": true, + "__experimentalDefaultControls": { + "backgroundImage": true + } + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "style": true, + "width": true + } + }, + "dimensions": { + "minHeight": true, + "__experimentalDefaultControls": { + "minHeight": false + } + }, + "__experimentalOnEnter": true, + "__experimentalOnMerge": true, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "color": { + "gradients": true, + "heading": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "layout": { + "allowEditing": false + }, + "spacing": { + "blockGap": true, + "padding": true, + "margin": true + }, + "interactivity": { + "clientNavigation": true + }, + "allowedBlocks": true + }, + "styles": [ + { + "name": "default", + "label": "Default", + "isDefault": true + }, + { "name": "plain", "label": "Plain" } + ], + "editorStyle": "wp-block-quote-editor", + "style": "wp-block-quote" +} diff --git a/src/wp-includes/blocks/read-more.php b/src/wp-includes/blocks/read-more.php new file mode 100644 index 0000000000000..c01a0a377fc93 --- /dev/null +++ b/src/wp-includes/blocks/read-more.php @@ -0,0 +1,63 @@ +context['postId'] ) ) { + return ''; + } + + $post_ID = $block->context['postId']; + $post_title = get_the_title( $post_ID ); + if ( '' === $post_title ) { + $post_title = sprintf( + /* translators: %s is post ID to describe the link for screen readers. */ + __( 'untitled post %s' ), + $post_ID + ); + } + $screen_reader_text = sprintf( + /* translators: %s is either the post title or post ID to describe the link for screen readers. */ + __( ': %s' ), + $post_title + ); + $justify_class_name = empty( $attributes['justifyContent'] ) ? '' : "is-justified-{$attributes['justifyContent']}"; + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $justify_class_name ) ); + $more_text = ! empty( $attributes['content'] ) ? wp_kses_post( $attributes['content'] ) : __( 'Read more' ); + return sprintf( + '%4s%5s', + $wrapper_attributes, + get_the_permalink( $post_ID ), + esc_attr( $attributes['linkTarget'] ), + $more_text, + $screen_reader_text + ); +} + +/** + * Registers the `core/read-more` block on the server. + * + * @since 6.0.0 + */ +function register_block_core_read_more() { + register_block_type_from_metadata( + __DIR__ . '/read-more', + array( + 'render_callback' => 'render_block_core_read_more', + ) + ); +} +add_action( 'init', 'register_block_core_read_more' ); diff --git a/src/wp-includes/blocks/read-more/block.json b/src/wp-includes/blocks/read-more/block.json new file mode 100644 index 0000000000000..eabc7acf3e3a3 --- /dev/null +++ b/src/wp-includes/blocks/read-more/block.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/read-more", + "title": "Read More", + "category": "theme", + "description": "Displays the link of a post, page, or any other content-type.", + "textdomain": "default", + "attributes": { + "content": { + "type": "string", + "role": "content" + }, + "linkTarget": { + "type": "string", + "default": "_self" + } + }, + "usesContext": [ "postId" ], + "supports": { + "html": false, + "color": { + "gradients": true, + "text": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalLetterSpacing": true, + "__experimentalTextDecoration": true, + "__experimentalDefaultControls": { + "fontSize": true, + "textDecoration": true + } + }, + "spacing": { + "margin": [ "top", "bottom" ], + "padding": true, + "__experimentalDefaultControls": { + "padding": true + } + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "width": true, + "__experimentalDefaultControls": { + "width": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "style": "wp-block-read-more" +} diff --git a/src/wp-includes/blocks/require-dynamic-blocks.php b/src/wp-includes/blocks/require-dynamic-blocks.php new file mode 100644 index 0000000000000..48fa6cb90b9c8 --- /dev/null +++ b/src/wp-includes/blocks/require-dynamic-blocks.php @@ -0,0 +1,85 @@ +
      ' . __( 'Adding an RSS feed to this site’s homepage is not supported, as it could lead to a loop that slows down your site. Try using another block, like the Latest Posts block, to list posts from the site.' ) . '
      '; + } + + $rss = fetch_feed( $attributes['feedURL'] ); + + if ( is_wp_error( $rss ) ) { + return '
      ' . __( 'RSS Error:' ) . ' ' . esc_html( $rss->get_error_message() ) . '
      '; + } + + if ( ! $rss->get_item_quantity() ) { + return '
      ' . __( 'An error has occurred, which probably means the feed is down. Try again later.' ) . '
      '; + } + + $rss_items = $rss->get_items( 0, $attributes['itemsToShow'] ); + $list_items = ''; + + $open_in_new_tab = ! empty( $attributes['openInNewTab'] ); + $rel = ! empty( $attributes['rel'] ) ? trim( $attributes['rel'] ) : ''; + + $link_attributes = ''; + + if ( $open_in_new_tab ) { + $link_attributes .= ' target="_blank"'; + } + + if ( '' !== $rel ) { + $link_attributes .= ' rel="' . esc_attr( $rel ) . '"'; + } + + foreach ( $rss_items as $item ) { + $title = esc_html( trim( strip_tags( html_entity_decode( $item->get_title() ) ) ) ); + + if ( empty( $title ) ) { + $title = __( '(no title)' ); + } + $link = $item->get_link(); + $link = esc_url( $link ); + + if ( $link ) { + $title = "{$title}"; + } + $title = "
      {$title}
      "; + + $date_markup = ''; + if ( ! empty( $attributes['displayDate'] ) ) { + $timestamp = $item->get_date( 'U' ); + + if ( $timestamp ) { + $gmt_offset = get_option( 'gmt_offset' ); + $timestamp += (int) ( (float) $gmt_offset * HOUR_IN_SECONDS ); + + $date_markup = sprintf( + ' ', + esc_attr( date_i18n( 'c', $timestamp ) ), + esc_html( date_i18n( get_option( 'date_format' ), $timestamp ) ) + ); + } + } + + $author = ''; + if ( $attributes['displayAuthor'] ) { + $author = $item->get_author(); + if ( is_object( $author ) ) { + $author = $author->get_name(); + if ( ! empty( $author ) ) { + $author = '' . sprintf( + /* translators: byline. %s: author. */ + __( 'by %s' ), + esc_html( strip_tags( $author ) ) + ) . ''; + } + } + } + + $excerpt = ''; + $description = $item->get_description(); + if ( $attributes['displayExcerpt'] && ! empty( $description ) ) { + $excerpt = html_entity_decode( $description, ENT_QUOTES, get_option( 'blog_charset' ) ); + $excerpt = esc_attr( wp_trim_words( $excerpt, $attributes['excerptLength'], ' […]' ) ); + + // Change existing [...] to […]. + if ( '[...]' === substr( $excerpt, -5 ) ) { + $excerpt = substr( $excerpt, 0, -5 ) . '[…]'; + } + + $excerpt = '
      ' . esc_html( $excerpt ) . '
      '; + } + + $list_items .= "
    6. {$title}{$date_markup}{$author}{$excerpt}
    7. "; + } + + $classnames = array(); + if ( isset( $attributes['blockLayout'] ) && 'grid' === $attributes['blockLayout'] ) { + $classnames[] = 'is-grid'; + } + if ( isset( $attributes['columns'] ) && 'grid' === $attributes['blockLayout'] ) { + $classnames[] = 'columns-' . $attributes['columns']; + } + if ( $attributes['displayDate'] ) { + $classnames[] = 'has-dates'; + } + if ( $attributes['displayAuthor'] ) { + $classnames[] = 'has-authors'; + } + if ( $attributes['displayExcerpt'] ) { + $classnames[] = 'has-excerpts'; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classnames ) ) ); + + return sprintf( '
        %s
      ', $wrapper_attributes, $list_items ); +} + +/** + * Registers the `core/rss` block on server. + * + * @since 5.2.0 + */ +function register_block_core_rss() { + register_block_type_from_metadata( + __DIR__ . '/rss', + array( + 'render_callback' => 'render_block_core_rss', + ) + ); +} +add_action( 'init', 'register_block_core_rss' ); diff --git a/src/wp-includes/blocks/rss/block.json b/src/wp-includes/blocks/rss/block.json new file mode 100644 index 0000000000000..fc49e1d858e89 --- /dev/null +++ b/src/wp-includes/blocks/rss/block.json @@ -0,0 +1,81 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/rss", + "title": "RSS", + "category": "widgets", + "description": "Display entries from any RSS or Atom feed.", + "keywords": [ "atom", "feed" ], + "textdomain": "default", + "attributes": { + "columns": { + "type": "number", + "default": 2 + }, + "blockLayout": { + "type": "string", + "default": "list" + }, + "feedURL": { + "type": "string", + "default": "", + "role": "content" + }, + "itemsToShow": { + "type": "number", + "default": 5 + }, + "displayExcerpt": { + "type": "boolean", + "default": false + }, + "displayAuthor": { + "type": "boolean", + "default": false + }, + "displayDate": { + "type": "boolean", + "default": false + }, + "excerptLength": { + "type": "number", + "default": 55 + }, + "openInNewTab": { + "type": "boolean", + "default": false + }, + "rel": { + "type": "string" + } + }, + "supports": { + "align": true, + "html": false, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + }, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "padding": false, + "margin": false + } + }, + "color": { + "background": true, + "text": true, + "gradients": true, + "link": true + } + }, + "editorStyle": "wp-block-rss-editor", + "style": "wp-block-rss" +} diff --git a/src/wp-includes/blocks/search.php b/src/wp-includes/blocks/search.php new file mode 100644 index 0000000000000..7073d6ce8ab3f --- /dev/null +++ b/src/wp-includes/blocks/search.php @@ -0,0 +1,621 @@ +`. Support these by defaulting an undefined label and + // buttonText to `__( 'Search' )`. + $attributes = wp_parse_args( + $attributes, + array( + 'label' => __( 'Search' ), + 'buttonText' => __( 'Search' ), + ) + ); + + $input_id = wp_unique_id( 'wp-block-search__input-' ); + $classnames = classnames_for_block_core_search( $attributes ); + $show_label = ! empty( $attributes['showLabel'] ); + $use_icon_button = ! empty( $attributes['buttonUseIcon'] ); + $show_button = ( ! empty( $attributes['buttonPosition'] ) && 'no-button' === $attributes['buttonPosition'] ) ? false : true; + $button_position = $show_button ? $attributes['buttonPosition'] : null; + $query_params = ( ! empty( $attributes['query'] ) ) ? $attributes['query'] : array(); + $button = ''; + $query_params_markup = ''; + $inline_styles = styles_for_block_core_search( $attributes ); + $color_classes = get_color_classes_for_block_core_search( $attributes ); + $typography_classes = get_typography_classes_for_block_core_search( $attributes ); + $is_button_inside = ! empty( $attributes['buttonPosition'] ) && + 'button-inside' === $attributes['buttonPosition']; + // Border color classes need to be applied to the elements that have a border color. + $border_color_classes = get_border_color_classes_for_block_core_search( $attributes ); + // This variable is a constant and its value is always false at this moment. + // It is defined this way because some values depend on it, in case it changes in the future. + $open_by_default = false; + + $label_inner_html = empty( $attributes['label'] ) ? __( 'Search' ) : wp_kses_post( $attributes['label'] ); + $label = new WP_HTML_Tag_Processor( sprintf( '', $inline_styles['label'], $label_inner_html ) ); + if ( $label->next_tag() ) { + $label->set_attribute( 'for', $input_id ); + $label->add_class( 'wp-block-search__label' ); + if ( $show_label && ! empty( $attributes['label'] ) ) { + if ( ! empty( $typography_classes ) ) { + $label->add_class( $typography_classes ); + } + } else { + $label->add_class( 'screen-reader-text' ); + } + } + + $input = new WP_HTML_Tag_Processor( sprintf( '', $inline_styles['input'] ) ); + $input_classes = array( 'wp-block-search__input' ); + if ( ! $is_button_inside && ! empty( $border_color_classes ) ) { + $input_classes[] = $border_color_classes; + } + if ( ! empty( $typography_classes ) ) { + $input_classes[] = $typography_classes; + } + if ( $input->next_tag() ) { + $input->add_class( implode( ' ', $input_classes ) ); + $input->set_attribute( 'id', $input_id ); + $input->set_attribute( 'value', get_search_query() ); + $input->set_attribute( 'placeholder', $attributes['placeholder'] ); + + // If it's interactive, enqueue the script module and add the directives. + $is_expandable_searchfield = 'button-only' === $button_position; + if ( $is_expandable_searchfield ) { + wp_enqueue_script_module( '@wordpress/block-library/search/view' ); + + $input->set_attribute( 'data-wp-bind--aria-hidden', '!context.isSearchInputVisible' ); + $input->set_attribute( 'data-wp-bind--tabindex', 'state.tabindex' ); + + // Adding these attributes manually is needed until the Interactivity API + // SSR logic is added to core. + $input->set_attribute( 'aria-hidden', 'true' ); + $input->set_attribute( 'tabindex', '-1' ); + } + } + + if ( count( $query_params ) > 0 ) { + foreach ( $query_params as $param => $value ) { + $query_params_markup .= sprintf( + '', + esc_attr( $param ), + esc_attr( $value ) + ); + } + } + + if ( $show_button ) { + $button_classes = array( 'wp-block-search__button' ); + $button_internal_markup = ''; + if ( ! empty( $color_classes ) ) { + $button_classes[] = $color_classes; + } + if ( ! empty( $typography_classes ) ) { + $button_classes[] = $typography_classes; + } + + if ( ! $is_button_inside && ! empty( $border_color_classes ) ) { + $button_classes[] = $border_color_classes; + } + if ( ! $use_icon_button ) { + if ( ! empty( $attributes['buttonText'] ) ) { + $button_internal_markup = wp_kses_post( $attributes['buttonText'] ); + } + } else { + $button_classes[] = 'has-icon'; + $button_internal_markup = + ' + + '; + } + + // Include the button element class. + $button_classes[] = wp_theme_get_element_class_name( 'button' ); + $button = new WP_HTML_Tag_Processor( sprintf( '', $inline_styles['button'], $button_internal_markup ) ); + + if ( $button->next_tag() ) { + $button->add_class( implode( ' ', $button_classes ) ); + if ( 'button-only' === $attributes['buttonPosition'] ) { + $button->set_attribute( 'data-wp-bind--aria-label', 'state.ariaLabel' ); + $button->set_attribute( 'data-wp-bind--aria-controls', 'state.ariaControls' ); + $button->set_attribute( 'data-wp-bind--aria-expanded', 'context.isSearchInputVisible' ); + $button->set_attribute( 'data-wp-bind--type', 'state.type' ); + $button->set_attribute( 'data-wp-on--click', 'actions.openSearchInput' ); + + // Adding these attributes manually is needed until the Interactivity + // API SSR logic is added to core. + $button->set_attribute( 'aria-label', __( 'Expand search field' ) ); + $button->set_attribute( 'aria-controls', 'wp-block-search__input-' . $input_id ); + $button->set_attribute( 'aria-expanded', 'false' ); + $button->set_attribute( 'type', 'button' ); + } else { + $button->set_attribute( 'aria-label', wp_strip_all_tags( $attributes['buttonText'] ) ); + } + } + } + + $field_markup_classes = array( + 'wp-block-search__inside-wrapper', + ); + if ( $is_button_inside && ! empty( $border_color_classes ) ) { + $field_markup_classes[] = $border_color_classes; + } + $field_markup = sprintf( + '
      %s
      ', + esc_attr( implode( ' ', $field_markup_classes ) ), + $inline_styles['wrapper'], + $input . $query_params_markup . $button + ); + $wrapper_attributes = get_block_wrapper_attributes( + array( 'class' => $classnames ) + ); + $form_directives = ''; + + // If it's interactive, add the directives. + if ( $is_expandable_searchfield ) { + $aria_label_expanded = __( 'Submit Search' ); + $aria_label_collapsed = __( 'Expand search field' ); + $form_context = wp_interactivity_data_wp_context( + array( + 'isSearchInputVisible' => $open_by_default, + 'inputId' => $input_id, + 'ariaLabelExpanded' => $aria_label_expanded, + 'ariaLabelCollapsed' => $aria_label_collapsed, + ) + ); + $form_directives = ' + data-wp-interactive="core/search" + ' . $form_context . ' + data-wp-class--wp-block-search__searchfield-hidden="!context.isSearchInputVisible" + data-wp-on--keydown="actions.handleSearchKeydown" + data-wp-on--focusout="actions.handleSearchFocusout" + '; + } + + return sprintf( + '
      %4s
      ', + esc_url( home_url( '/' ) ), + $wrapper_attributes, + $form_directives, + $label . $field_markup + ); +} + +/** + * Registers the `core/search` block on the server. + * + * @since 5.2.0 + */ +function register_block_core_search() { + register_block_type_from_metadata( + __DIR__ . '/search', + array( + 'render_callback' => 'render_block_core_search', + ) + ); +} +add_action( 'init', 'register_block_core_search' ); + +/** + * Builds the correct top level classnames for the 'core/search' block. + * + * @since 5.6.0 + * + * @param array $attributes The block attributes. + * + * @return string The classnames used in the block. + */ +function classnames_for_block_core_search( $attributes ) { + $classnames = array(); + + if ( ! empty( $attributes['buttonPosition'] ) ) { + if ( 'button-inside' === $attributes['buttonPosition'] ) { + $classnames[] = 'wp-block-search__button-inside'; + } + + if ( 'button-outside' === $attributes['buttonPosition'] ) { + $classnames[] = 'wp-block-search__button-outside'; + } + + if ( 'no-button' === $attributes['buttonPosition'] ) { + $classnames[] = 'wp-block-search__no-button'; + } + + if ( 'button-only' === $attributes['buttonPosition'] ) { + $classnames[] = 'wp-block-search__button-only wp-block-search__searchfield-hidden'; + } + } + + if ( isset( $attributes['buttonUseIcon'] ) ) { + if ( ! empty( $attributes['buttonPosition'] ) && 'no-button' !== $attributes['buttonPosition'] ) { + if ( $attributes['buttonUseIcon'] ) { + $classnames[] = 'wp-block-search__icon-button'; + } else { + $classnames[] = 'wp-block-search__text-button'; + } + } + } + + return implode( ' ', $classnames ); +} + +/** + * This generates a CSS rule for the given border property and side if provided. + * Based on whether the Search block is configured to display the button inside + * or not, the generated rule is injected into the appropriate collection of + * styles for later application in the block's markup. + * + * @since 6.1.0 + * + * @param array $attributes The block attributes. + * @param string $property Border property to generate rule for e.g. width or color. + * @param string $side Optional side border. The dictates the value retrieved and final CSS property. + * @param array $wrapper_styles Current collection of wrapper styles. + * @param array $button_styles Current collection of button styles. + * @param array $input_styles Current collection of input styles. + */ +function apply_block_core_search_border_style( $attributes, $property, $side, &$wrapper_styles, &$button_styles, &$input_styles ) { + $is_button_inside = isset( $attributes['buttonPosition'] ) && 'button-inside' === $attributes['buttonPosition']; + + $path = array( 'style', 'border', $property ); + + if ( $side ) { + array_splice( $path, 2, 0, $side ); + } + + $value = _wp_array_get( $attributes, $path, false ); + + if ( empty( $value ) ) { + return; + } + + if ( 'color' === $property && $side ) { + $has_color_preset = str_contains( $value, 'var:preset|color|' ); + if ( $has_color_preset ) { + $named_color_value = substr( $value, strrpos( $value, '|' ) + 1 ); + $value = sprintf( 'var(--wp--preset--color--%s)', $named_color_value ); + } + } + + $property_suffix = $side ? sprintf( '%s-%s', $side, $property ) : $property; + + if ( $is_button_inside ) { + $wrapper_styles[] = sprintf( 'border-%s: %s;', $property_suffix, esc_attr( $value ) ); + } else { + $button_styles[] = sprintf( 'border-%s: %s;', $property_suffix, esc_attr( $value ) ); + $input_styles[] = sprintf( 'border-%s: %s;', $property_suffix, esc_attr( $value ) ); + } +} + +/** + * This adds CSS rules for a given border property e.g. width or color. It + * injects rules into the provided wrapper, button and input style arrays for + * uniform "flat" borders or those with individual sides configured. + * + * @since 6.1.0 + * + * @param array $attributes The block attributes. + * @param string $property Border property to generate rule for e.g. width or color. + * @param array $wrapper_styles Current collection of wrapper styles. + * @param array $button_styles Current collection of button styles. + * @param array $input_styles Current collection of input styles. + */ +function apply_block_core_search_border_styles( $attributes, $property, &$wrapper_styles, &$button_styles, &$input_styles ) { + apply_block_core_search_border_style( $attributes, $property, null, $wrapper_styles, $button_styles, $input_styles ); + apply_block_core_search_border_style( $attributes, $property, 'top', $wrapper_styles, $button_styles, $input_styles ); + apply_block_core_search_border_style( $attributes, $property, 'right', $wrapper_styles, $button_styles, $input_styles ); + apply_block_core_search_border_style( $attributes, $property, 'bottom', $wrapper_styles, $button_styles, $input_styles ); + apply_block_core_search_border_style( $attributes, $property, 'left', $wrapper_styles, $button_styles, $input_styles ); +} + +/** + * Builds an array of inline styles for the search block. + * + * The result will contain one entry for shared styles such as those for the + * inner input or button and a second for the inner wrapper should the block + * be positioning the button "inside". + * + * @since 5.8.0 + * + * @param array $attributes The block attributes. + * + * @return array Style HTML attribute. + */ +function styles_for_block_core_search( $attributes ) { + $wrapper_styles = array(); + $button_styles = array(); + $input_styles = array(); + $label_styles = array(); + $is_button_inside = ! empty( $attributes['buttonPosition'] ) && + 'button-inside' === $attributes['buttonPosition']; + $show_label = ( isset( $attributes['showLabel'] ) ) && false !== $attributes['showLabel']; + + // Add width styles. + $has_width = ! empty( $attributes['width'] ) && ! empty( $attributes['widthUnit'] ); + + if ( $has_width ) { + $wrapper_styles[] = sprintf( + 'width: %d%s;', + esc_attr( $attributes['width'] ), + esc_attr( $attributes['widthUnit'] ) + ); + } + + // Add border width and color styles. + apply_block_core_search_border_styles( $attributes, 'width', $wrapper_styles, $button_styles, $input_styles ); + apply_block_core_search_border_styles( $attributes, 'color', $wrapper_styles, $button_styles, $input_styles ); + apply_block_core_search_border_styles( $attributes, 'style', $wrapper_styles, $button_styles, $input_styles ); + + // Add border radius styles. + $has_border_radius = ! empty( $attributes['style']['border']['radius'] ); + + if ( $has_border_radius ) { + $default_padding = '4px'; + $border_radius = $attributes['style']['border']['radius']; + + if ( is_array( $border_radius ) ) { + // Apply styles for individual corner border radii. + foreach ( $border_radius as $key => $value ) { + // Get border-radius CSS variable from preset value if provided. + if ( is_string( $value ) && str_contains( $value, 'var:preset|border-radius|' ) ) { + $index_to_splice = strrpos( $value, '|' ) + 1; + $slug = _wp_to_kebab_case( substr( $value, $index_to_splice ) ); + $value = "var(--wp--preset--border-radius--$slug)"; + } + + if ( null !== $value ) { + // Convert camelCase key to kebab-case. + $name = strtolower( preg_replace( '/(? ! empty( $input_styles ) ? sprintf( ' style="%s"', esc_attr( safecss_filter_attr( implode( ' ', $input_styles ) ) ) ) : '', + 'button' => ! empty( $button_styles ) ? sprintf( ' style="%s"', esc_attr( safecss_filter_attr( implode( ' ', $button_styles ) ) ) ) : '', + 'wrapper' => ! empty( $wrapper_styles ) ? sprintf( ' style="%s"', esc_attr( safecss_filter_attr( implode( ' ', $wrapper_styles ) ) ) ) : '', + 'label' => ! empty( $label_styles ) ? sprintf( ' style="%s"', esc_attr( safecss_filter_attr( implode( ' ', $label_styles ) ) ) ) : '', + ); +} + +/** + * Returns typography classnames depending on whether there are named font sizes/families. + * + * @since 6.1.0 + * + * @param array $attributes The block attributes. + * + * @return string The typography color classnames to be applied to the block elements. + */ +function get_typography_classes_for_block_core_search( $attributes ) { + $typography_classes = array(); + $has_named_font_family = ! empty( $attributes['fontFamily'] ); + $has_named_font_size = ! empty( $attributes['fontSize'] ); + + if ( $has_named_font_size ) { + $typography_classes[] = sprintf( 'has-%s-font-size', esc_attr( $attributes['fontSize'] ) ); + } + + if ( $has_named_font_family ) { + $typography_classes[] = sprintf( 'has-%s-font-family', esc_attr( $attributes['fontFamily'] ) ); + } + + return implode( ' ', $typography_classes ); +} + +/** + * Returns typography styles to be included in an HTML style tag. + * This excludes text-decoration, which is applied only to the label and button elements of the search block. + * + * @since 6.1.0 + * + * @param array $attributes The block attributes. + * + * @return string A string of typography CSS declarations. + */ +function get_typography_styles_for_block_core_search( $attributes ) { + $typography_styles = array(); + + // Add typography styles. + if ( ! empty( $attributes['style']['typography']['fontSize'] ) ) { + $typography_styles[] = sprintf( + 'font-size: %s;', + wp_get_typography_font_size_value( + array( + 'size' => $attributes['style']['typography']['fontSize'], + ) + ) + ); + + } + + if ( ! empty( $attributes['style']['typography']['fontFamily'] ) ) { + $typography_styles[] = sprintf( 'font-family: %s;', $attributes['style']['typography']['fontFamily'] ); + } + + if ( ! empty( $attributes['style']['typography']['letterSpacing'] ) ) { + $typography_styles[] = sprintf( 'letter-spacing: %s;', $attributes['style']['typography']['letterSpacing'] ); + } + + if ( ! empty( $attributes['style']['typography']['fontWeight'] ) ) { + $typography_styles[] = sprintf( 'font-weight: %s;', $attributes['style']['typography']['fontWeight'] ); + } + + if ( ! empty( $attributes['style']['typography']['fontStyle'] ) ) { + $typography_styles[] = sprintf( 'font-style: %s;', $attributes['style']['typography']['fontStyle'] ); + } + + if ( ! empty( $attributes['style']['typography']['lineHeight'] ) ) { + $typography_styles[] = sprintf( 'line-height: %s;', $attributes['style']['typography']['lineHeight'] ); + } + + if ( ! empty( $attributes['style']['typography']['textTransform'] ) ) { + $typography_styles[] = sprintf( 'text-transform: %s;', $attributes['style']['typography']['textTransform'] ); + } + + return implode( '', $typography_styles ); +} + +/** + * Returns border color classnames depending on whether there are named or custom border colors. + * + * @since 5.9.0 + * + * @param array $attributes The block attributes. + * + * @return string The border color classnames to be applied to the block elements. + */ +function get_border_color_classes_for_block_core_search( $attributes ) { + $border_color_classes = array(); + $has_custom_border_color = ! empty( $attributes['style']['border']['color'] ); + $has_named_border_color = ! empty( $attributes['borderColor'] ); + + if ( $has_custom_border_color || $has_named_border_color ) { + $border_color_classes[] = 'has-border-color'; + } + + if ( $has_named_border_color ) { + $border_color_classes[] = sprintf( 'has-%s-border-color', esc_attr( $attributes['borderColor'] ) ); + } + + return implode( ' ', $border_color_classes ); +} + +/** + * Returns color classnames depending on whether there are named or custom text and background colors. + * + * @since 5.9.0 + * + * @param array $attributes The block attributes. + * + * @return string The color classnames to be applied to the block elements. + */ +function get_color_classes_for_block_core_search( $attributes ) { + $classnames = array(); + + // Text color. + $has_named_text_color = ! empty( $attributes['textColor'] ); + $has_custom_text_color = ! empty( $attributes['style']['color']['text'] ); + if ( $has_named_text_color ) { + $classnames[] = sprintf( 'has-text-color has-%s-color', $attributes['textColor'] ); + } elseif ( $has_custom_text_color ) { + // If a custom 'textColor' was selected instead of a preset, still add the generic `has-text-color` class. + $classnames[] = 'has-text-color'; + } + + // Background color. + $has_named_background_color = ! empty( $attributes['backgroundColor'] ); + $has_custom_background_color = ! empty( $attributes['style']['color']['background'] ); + $has_named_gradient = ! empty( $attributes['gradient'] ); + $has_custom_gradient = ! empty( $attributes['style']['color']['gradient'] ); + if ( + $has_named_background_color || + $has_custom_background_color || + $has_named_gradient || + $has_custom_gradient + ) { + $classnames[] = 'has-background'; + } + if ( $has_named_background_color ) { + $classnames[] = sprintf( 'has-%s-background-color', $attributes['backgroundColor'] ); + } + if ( $has_named_gradient ) { + $classnames[] = sprintf( 'has-%s-gradient-background', $attributes['gradient'] ); + } + + return implode( ' ', $classnames ); +} diff --git a/src/wp-includes/blocks/search/block.json b/src/wp-includes/blocks/search/block.json new file mode 100644 index 0000000000000..c5af5a29d21be --- /dev/null +++ b/src/wp-includes/blocks/search/block.json @@ -0,0 +1,95 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/search", + "title": "Search", + "category": "widgets", + "description": "Help visitors find your content.", + "keywords": [ "find" ], + "textdomain": "default", + "attributes": { + "label": { + "type": "string", + "role": "content" + }, + "showLabel": { + "type": "boolean", + "default": true + }, + "placeholder": { + "type": "string", + "default": "", + "role": "content" + }, + "width": { + "type": "number" + }, + "widthUnit": { + "type": "string" + }, + "buttonText": { + "type": "string", + "role": "content" + }, + "buttonPosition": { + "type": "string", + "default": "button-outside" + }, + "buttonUseIcon": { + "type": "boolean", + "default": false + }, + "query": { + "type": "object", + "default": {} + }, + "isSearchFieldHidden": { + "type": "boolean", + "default": false + } + }, + "supports": { + "align": [ "left", "center", "right" ], + "color": { + "gradients": true, + "__experimentalSkipSerialization": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "interactivity": true, + "typography": { + "__experimentalSkipSerialization": true, + "__experimentalSelector": ".wp-block-search__label, .wp-block-search__input, .wp-block-search__button", + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "width": true, + "__experimentalSkipSerialization": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "width": true + } + }, + "spacing": { + "margin": true + }, + "html": false + }, + "editorStyle": "wp-block-search-editor", + "style": "wp-block-search" +} diff --git a/src/wp-includes/blocks/separator/block.json b/src/wp-includes/blocks/separator/block.json new file mode 100644 index 0000000000000..926d978b7e4d5 --- /dev/null +++ b/src/wp-includes/blocks/separator/block.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/separator", + "title": "Separator", + "category": "design", + "description": "Create a break between ideas or sections with a horizontal separator.", + "keywords": [ "horizontal-line", "hr", "divider" ], + "textdomain": "default", + "attributes": { + "opacity": { + "type": "string", + "default": "alpha-channel" + }, + "tagName": { + "type": "string", + "enum": [ "hr", "div" ], + "default": "hr" + } + }, + "supports": { + "anchor": true, + "align": [ "center", "wide", "full" ], + "color": { + "enableContrastChecker": false, + "__experimentalSkipSerialization": true, + "gradients": true, + "background": true, + "text": false, + "__experimentalDefaultControls": { + "background": true + } + }, + "spacing": { + "margin": [ "top", "bottom" ] + }, + "interactivity": { + "clientNavigation": true + } + }, + "styles": [ + { "name": "default", "label": "Default", "isDefault": true }, + { "name": "wide", "label": "Wide Line" }, + { "name": "dots", "label": "Dots" } + ], + "editorStyle": "wp-block-separator-editor", + "style": "wp-block-separator" +} diff --git a/src/wp-includes/blocks/shortcode.php b/src/wp-includes/blocks/shortcode.php new file mode 100644 index 0000000000000..d96acfc55fa64 --- /dev/null +++ b/src/wp-includes/blocks/shortcode.php @@ -0,0 +1,35 @@ + 'render_block_core_shortcode', + ) + ); +} +add_action( 'init', 'register_block_core_shortcode' ); diff --git a/src/wp-includes/blocks/shortcode/block.json b/src/wp-includes/blocks/shortcode/block.json new file mode 100644 index 0000000000000..6e30210b7c081 --- /dev/null +++ b/src/wp-includes/blocks/shortcode/block.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/shortcode", + "title": "Shortcode", + "category": "widgets", + "description": "Insert additional custom elements with a WordPress shortcode.", + "textdomain": "default", + "attributes": { + "text": { + "type": "string", + "source": "raw", + "role": "content" + } + }, + "supports": { + "className": false, + "customClassName": false, + "html": false + }, + "editorStyle": "wp-block-shortcode-editor" +} diff --git a/src/wp-includes/blocks/site-logo.php b/src/wp-includes/blocks/site-logo.php new file mode 100644 index 0000000000000..915563461e30c --- /dev/null +++ b/src/wp-includes/blocks/site-logo.php @@ -0,0 +1,234 @@ +(.*?)#i', '\1', $custom_logo ); + } + + if ( $attributes['isLink'] && '_blank' === $attributes['linkTarget'] ) { + // Add the link target after the rel="home". + // Add an aria-label for informing that the page opens in a new tab. + $processor = new WP_HTML_Tag_Processor( $custom_logo ); + $processor->next_tag( 'a' ); + if ( 'home' === $processor->get_attribute( 'rel' ) ) { + $processor->set_attribute( 'aria-label', __( '(Home link, opens in a new tab)' ) ); + $processor->set_attribute( 'target', $attributes['linkTarget'] ); + } + $custom_logo = $processor->get_updated_html(); + } + + $classnames = array(); + if ( empty( $attributes['width'] ) ) { + $classnames[] = 'is-default-size'; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classnames ) ) ); + $html = sprintf( '
      %s
      ', $wrapper_attributes, $custom_logo ); + return $html; +} + +/** + * Register a core site setting for a site logo + * + * @since 5.8.0 + */ +function register_block_core_site_logo_setting() { + register_setting( + 'general', + 'site_logo', + array( + 'show_in_rest' => array( + 'name' => 'site_logo', + ), + 'type' => 'integer', + 'label' => __( 'Logo' ), + 'description' => __( 'Site logo.' ), + ) + ); +} + +add_action( 'rest_api_init', 'register_block_core_site_logo_setting', 10 ); + +/** + * Register a core site setting for a site icon + * + * @since 5.9.0 + */ +function register_block_core_site_icon_setting() { + register_setting( + 'general', + 'site_icon', + array( + 'show_in_rest' => true, + 'type' => 'integer', + 'label' => __( 'Icon' ), + 'description' => __( 'Site icon.' ), + ) + ); +} + +add_action( 'rest_api_init', 'register_block_core_site_icon_setting', 10 ); + +/** + * Registers the `core/site-logo` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_site_logo() { + register_block_type_from_metadata( + __DIR__ . '/site-logo', + array( + 'render_callback' => 'render_block_core_site_logo', + ) + ); +} + +add_action( 'init', 'register_block_core_site_logo' ); + +/** + * Overrides the custom logo with a site logo, if the option is set. + * + * @since 5.8.0 + * + * @param string $custom_logo The custom logo set by a theme. + * + * @return string The site logo if set. + */ +function _override_custom_logo_theme_mod( $custom_logo ) { + $site_logo = get_option( 'site_logo' ); + return false === $site_logo ? $custom_logo : $site_logo; +} + +add_filter( 'theme_mod_custom_logo', '_override_custom_logo_theme_mod' ); + +/** + * Updates the site_logo option when the custom_logo theme-mod gets updated. + * + * @since 5.8.0 + * + * @param mixed $value Attachment ID of the custom logo or an empty value. + * @return mixed + */ +function _sync_custom_logo_to_site_logo( $value ) { + if ( empty( $value ) ) { + delete_option( 'site_logo' ); + } else { + update_option( 'site_logo', $value ); + } + + return $value; +} + +add_filter( 'pre_set_theme_mod_custom_logo', '_sync_custom_logo_to_site_logo' ); + +/** + * Deletes the site_logo when the custom_logo theme mod is removed. + * + * @since 5.8.0 + * + * @global array $_ignore_site_logo_changes + * + * @param array $old_value Previous theme mod settings. + * @param array $value Updated theme mod settings. + */ +function _delete_site_logo_on_remove_custom_logo( $old_value, $value ) { + global $_ignore_site_logo_changes; + + if ( $_ignore_site_logo_changes ) { + return; + } + + // If the custom_logo is being unset, it's being removed from theme mods. + if ( isset( $old_value['custom_logo'] ) && ! isset( $value['custom_logo'] ) ) { + delete_option( 'site_logo' ); + } +} + +/** + * Deletes the site logo when all theme mods are being removed. + * + * @since 5.8.0 + * + * @global array $_ignore_site_logo_changes + */ +function _delete_site_logo_on_remove_theme_mods() { + global $_ignore_site_logo_changes; + + if ( $_ignore_site_logo_changes ) { + return; + } + + if ( false !== get_theme_support( 'custom-logo' ) ) { + delete_option( 'site_logo' ); + } +} + +/** + * Hooks `_delete_site_logo_on_remove_custom_logo` in `update_option_theme_mods_$theme`. + * Hooks `_delete_site_logo_on_remove_theme_mods` in `delete_option_theme_mods_$theme`. + * + * Runs on `setup_theme` to account for dynamically-switched themes in the Customizer. + * + * @since 5.8.0 + */ +function _delete_site_logo_on_remove_custom_logo_on_setup_theme() { + $theme = get_option( 'stylesheet' ); + add_action( "update_option_theme_mods_$theme", '_delete_site_logo_on_remove_custom_logo', 10, 2 ); + add_action( "delete_option_theme_mods_$theme", '_delete_site_logo_on_remove_theme_mods' ); +} +add_action( 'setup_theme', '_delete_site_logo_on_remove_custom_logo_on_setup_theme', 11 ); + +/** + * Removes the custom_logo theme-mod when the site_logo option gets deleted. + * + * @since 5.9.0 + * + * @global array $_ignore_site_logo_changes + */ +function _delete_custom_logo_on_remove_site_logo() { + global $_ignore_site_logo_changes; + + // Prevent _delete_site_logo_on_remove_custom_logo and + // _delete_site_logo_on_remove_theme_mods from firing and causing an + // infinite loop. + $_ignore_site_logo_changes = true; + + // Remove the custom logo. + remove_theme_mod( 'custom_logo' ); + + $_ignore_site_logo_changes = false; +} +add_action( 'delete_option_site_logo', '_delete_custom_logo_on_remove_site_logo' ); diff --git a/src/wp-includes/blocks/site-logo/block.json b/src/wp-includes/blocks/site-logo/block.json new file mode 100644 index 0000000000000..b49588d3716fa --- /dev/null +++ b/src/wp-includes/blocks/site-logo/block.json @@ -0,0 +1,72 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/site-logo", + "title": "Site Logo", + "category": "theme", + "description": "Display an image to represent this site. Update this block and the changes apply everywhere.", + "textdomain": "default", + "attributes": { + "width": { + "type": "number" + }, + "isLink": { + "type": "boolean", + "default": true, + "role": "content" + }, + "linkTarget": { + "type": "string", + "default": "_self", + "role": "content" + }, + "shouldSyncIcon": { + "type": "boolean" + } + }, + "example": { + "viewportWidth": 500, + "attributes": { + "width": 350, + "className": "block-editor-block-types-list__site-logo-example" + } + }, + "supports": { + "html": false, + "align": true, + "alignWide": false, + "color": { + "text": false, + "background": false + }, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "interactivity": { + "clientNavigation": true + }, + "filter": { + "duotone": true + } + }, + "styles": [ + { + "name": "default", + "label": "Default", + "isDefault": true + }, + { "name": "rounded", "label": "Rounded" } + ], + "selectors": { + "filter": { + "duotone": ".wp-block-site-logo img, .wp-block-site-logo .components-placeholder__illustration, .wp-block-site-logo .components-placeholder::before" + } + }, + "editorStyle": "wp-block-site-logo-editor", + "style": "wp-block-site-logo" +} diff --git a/src/wp-includes/blocks/site-tagline.php b/src/wp-includes/blocks/site-tagline.php new file mode 100644 index 0000000000000..b59e1e556c320 --- /dev/null +++ b/src/wp-includes/blocks/site-tagline.php @@ -0,0 +1,53 @@ + $align_class_name ) ); + + if ( isset( $attributes['level'] ) && 0 !== $attributes['level'] ) { + $tag_name = 'h' . (int) $attributes['level']; + } + + return sprintf( + '<%1$s %2$s>%3$s', + $tag_name, + $wrapper_attributes, + $site_tagline + ); +} + +/** + * Registers the `core/site-tagline` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_site_tagline() { + register_block_type_from_metadata( + __DIR__ . '/site-tagline', + array( + 'render_callback' => 'render_block_core_site_tagline', + ) + ); +} + +add_action( 'init', 'register_block_core_site_tagline' ); diff --git a/src/wp-includes/blocks/site-tagline/block.json b/src/wp-includes/blocks/site-tagline/block.json new file mode 100644 index 0000000000000..7f94d962e9cbc --- /dev/null +++ b/src/wp-includes/blocks/site-tagline/block.json @@ -0,0 +1,74 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/site-tagline", + "title": "Site Tagline", + "category": "theme", + "description": "Describe in a few words what this site is about. This is important for search results, sharing on social media, and gives overall clarity to visitors.", + "keywords": [ "description" ], + "textdomain": "default", + "attributes": { + "textAlign": { + "type": "string" + }, + "level": { + "type": "number", + "default": 0 + }, + "levelOptions": { + "type": "array", + "default": [ 0, 1, 2, 3, 4, 5, 6 ] + } + }, + "example": { + "viewportWidth": 350, + "attributes": { + "textAlign": "center" + } + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "color": { + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "contentRole": true, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalWritingMode": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "editorStyle": "wp-block-site-tagline-editor", + "style": "wp-block-site-tagline" +} diff --git a/src/wp-includes/blocks/site-title.php b/src/wp-includes/blocks/site-title.php new file mode 100644 index 0000000000000..297d99894e104 --- /dev/null +++ b/src/wp-includes/blocks/site-title.php @@ -0,0 +1,69 @@ +%4$s', + esc_url( home_url() ), + esc_attr( $link_target ), + $aria_current, + esc_html( $site_title ) + ); + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => trim( $classes ) ) ); + + return sprintf( + '<%1$s %2$s>%3$s', + $tag_name, + $wrapper_attributes, + // already pre-escaped if it is a link. + $attributes['isLink'] ? $site_title : esc_html( $site_title ) + ); +} + +/** + * Registers the `core/site-title` block on the server. + * + * @since 5.8.0 + */ +function register_block_core_site_title() { + register_block_type_from_metadata( + __DIR__ . '/site-title', + array( + 'render_callback' => 'render_block_core_site_title', + ) + ); +} +add_action( 'init', 'register_block_core_site_title' ); diff --git a/src/wp-includes/blocks/site-title/block.json b/src/wp-includes/blocks/site-title/block.json new file mode 100644 index 0000000000000..8edf6b945f9ce --- /dev/null +++ b/src/wp-includes/blocks/site-title/block.json @@ -0,0 +1,81 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/site-title", + "title": "Site Title", + "category": "theme", + "description": "Displays the name of this site. Update the block, and the changes apply everywhere it’s used. This will also appear in the browser title bar and in search results.", + "textdomain": "default", + "attributes": { + "level": { + "type": "number", + "default": 1 + }, + "levelOptions": { + "type": "array", + "default": [ 0, 1, 2, 3, 4, 5, 6 ] + }, + "textAlign": { + "type": "string" + }, + "isLink": { + "type": "boolean", + "default": true, + "role": "content" + }, + "linkTarget": { + "type": "string", + "default": "_self", + "role": "content" + } + }, + "example": { + "viewportWidth": 500 + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "padding": true, + "margin": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalWritingMode": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "editorStyle": "wp-block-site-title-editor", + "style": "wp-block-site-title" +} diff --git a/src/wp-includes/blocks/social-link.php b/src/wp-includes/blocks/social-link.php new file mode 100644 index 0000000000000..3673504bc9396 --- /dev/null +++ b/src/wp-includes/blocks/social-link.php @@ -0,0 +1,408 @@ +context['openInNewTab'] ) ? $block->context['openInNewTab'] : false; + + $text = ! empty( $attributes['label'] ) ? trim( $attributes['label'] ) : ''; + + $service = isset( $attributes['service'] ) ? $attributes['service'] : 'Icon'; + $url = isset( $attributes['url'] ) ? $attributes['url'] : false; + $text = $text ? $text : block_core_social_link_get_name( $service ); + $rel = isset( $attributes['rel'] ) ? $attributes['rel'] : ''; + $show_labels = array_key_exists( 'showLabels', $block->context ) ? $block->context['showLabels'] : false; + + // Don't render a link if there is no URL set. + if ( ! $url ) { + return ''; + } + + /** + * Prepend emails with `mailto:` if not set. + * The `is_email` returns false for emails with schema. + */ + if ( is_email( $url ) ) { + $url = 'mailto:' . antispambot( $url ); + } + + /** + * Prepend URL with https:// if it doesn't appear to contain a scheme + * and it's not a relative link or a fragment. + */ + if ( ! parse_url( $url, PHP_URL_SCHEME ) && ! str_starts_with( $url, '//' ) && ! str_starts_with( $url, '#' ) ) { + $url = 'https://' . $url; + } + + $icon = block_core_social_link_get_icon( $service ); + $wrapper_attributes = get_block_wrapper_attributes( + array( + 'class' => 'wp-social-link wp-social-link-' . $service . block_core_social_link_get_color_classes( $block->context ), + 'style' => block_core_social_link_get_color_styles( $block->context ), + ) + ); + + $link = '
    8. '; + $link .= ''; + $link .= $icon; + $link .= '' . esc_html( $text ) . ''; + $link .= '
    9. '; + + $processor = new WP_HTML_Tag_Processor( $link ); + $processor->next_tag( 'a' ); + if ( $open_in_new_tab ) { + $processor->set_attribute( 'rel', trim( $rel . ' noopener nofollow' ) ); + $processor->set_attribute( 'target', '_blank' ); + } elseif ( '' !== $rel ) { + $processor->set_attribute( 'rel', trim( $rel ) ); + } + return $processor->get_updated_html(); +} + +/** + * Registers the `core/social-link` blocks. + * + * @since 5.4.0 + */ +function register_block_core_social_link() { + register_block_type_from_metadata( + __DIR__ . '/social-link', + array( + 'render_callback' => 'render_block_core_social_link', + ) + ); +} +add_action( 'init', 'register_block_core_social_link' ); + + +/** + * Returns the SVG for social link. + * + * @since 5.4.0 + * + * @param string $service The service icon. + * + * @return string SVG Element for service icon. + */ +function block_core_social_link_get_icon( $service ) { + $services = block_core_social_link_services(); + if ( isset( $services[ $service ] ) && isset( $services[ $service ]['icon'] ) ) { + return $services[ $service ]['icon']; + } + + return $services['share']['icon']; +} + +/** + * Returns the brand name for social link. + * + * @since 5.4.0 + * + * @param string $service The service icon. + * + * @return string Brand label. + */ +function block_core_social_link_get_name( $service ) { + $services = block_core_social_link_services(); + if ( isset( $services[ $service ] ) && isset( $services[ $service ]['name'] ) ) { + return $services[ $service ]['name']; + } + + return $services['share']['name']; +} + +/** + * Returns the SVG for social link. + * + * @since 5.4.0 + * + * @param string $service The service slug to extract data from. + * @param string $field The field ('name', 'icon', etc) to extract for a service. + * + * @return array|string + */ +function block_core_social_link_services( $service = '', $field = '' ) { + $services_data = array( + 'fivehundredpx' => array( + 'name' => _x( '500px', 'social link block variation name' ), + 'icon' => '', + ), + 'amazon' => array( + 'name' => _x( 'Amazon', 'social link block variation name' ), + 'icon' => '', + ), + 'bandcamp' => array( + 'name' => _x( 'Bandcamp', 'social link block variation name' ), + 'icon' => '', + ), + 'behance' => array( + 'name' => _x( 'Behance', 'social link block variation name' ), + 'icon' => '', + ), + 'bluesky' => array( + 'name' => _x( 'Bluesky', 'social link block variation name' ), + 'icon' => '', + ), + 'chain' => array( + 'name' => _x( 'Link', 'social link block variation name' ), + 'icon' => '', + ), + 'codepen' => array( + 'name' => _x( 'CodePen', 'social link block variation name' ), + 'icon' => '', + ), + 'deviantart' => array( + 'name' => _x( 'DeviantArt', 'social link block variation name' ), + 'icon' => '', + ), + 'discord' => array( + 'name' => _x( 'Discord', 'social link block variation name' ), + 'icon' => '', + ), + 'dribbble' => array( + 'name' => _x( 'Dribbble', 'social link block variation name' ), + 'icon' => '', + ), + 'dropbox' => array( + 'name' => _x( 'Dropbox', 'social link block variation name' ), + 'icon' => '', + ), + 'etsy' => array( + 'name' => _x( 'Etsy', 'social link block variation name' ), + 'icon' => '', + ), + 'facebook' => array( + 'name' => _x( 'Facebook', 'social link block variation name' ), + 'icon' => '', + ), + 'feed' => array( + 'name' => _x( 'RSS Feed', 'social link block variation name' ), + 'icon' => '', + ), + 'flickr' => array( + 'name' => _x( 'Flickr', 'social link block variation name' ), + 'icon' => '', + ), + 'foursquare' => array( + 'name' => _x( 'Foursquare', 'social link block variation name' ), + 'icon' => '', + ), + 'goodreads' => array( + 'name' => _x( 'Goodreads', 'social link block variation name' ), + 'icon' => '', + ), + 'google' => array( + 'name' => _x( 'Google', 'social link block variation name' ), + 'icon' => '', + ), + 'github' => array( + 'name' => _x( 'GitHub', 'social link block variation name' ), + 'icon' => '', + ), + 'gravatar' => array( + 'name' => _x( 'Gravatar', 'social link block variation name' ), + 'icon' => '', + ), + 'instagram' => array( + 'name' => _x( 'Instagram', 'social link block variation name' ), + 'icon' => '', + ), + 'lastfm' => array( + 'name' => _x( 'Last.fm', 'social link block variation name' ), + 'icon' => '', + ), + 'linkedin' => array( + 'name' => _x( 'LinkedIn', 'social link block variation name' ), + 'icon' => '', + ), + 'mail' => array( + 'name' => _x( 'Mail', 'social link block variation name' ), + 'icon' => '', + ), + 'mastodon' => array( + 'name' => _x( 'Mastodon', 'social link block variation name' ), + 'icon' => '', + ), + 'meetup' => array( + 'name' => _x( 'Meetup', 'social link block variation name' ), + 'icon' => '', + ), + 'medium' => array( + 'name' => _x( 'Medium', 'social link block variation name' ), + 'icon' => '', + ), + 'patreon' => array( + 'name' => _x( 'Patreon', 'social link block variation name' ), + 'icon' => '', + ), + 'pinterest' => array( + 'name' => _x( 'Pinterest', 'social link block variation name' ), + 'icon' => '', + ), + 'pocket' => array( + 'name' => _x( 'Pocket', 'social link block variation name' ), + 'icon' => '', + ), + 'reddit' => array( + 'name' => _x( 'Reddit', 'social link block variation name' ), + 'icon' => '', + ), + 'share' => array( + 'name' => _x( 'Share Icon', 'social link block variation name' ), + 'icon' => '', + ), + 'skype' => array( + 'name' => _x( 'Skype', 'social link block variation name' ), + 'icon' => '', + ), + 'snapchat' => array( + 'name' => _x( 'Snapchat', 'social link block variation name' ), + 'icon' => '', + ), + 'soundcloud' => array( + 'name' => _x( 'SoundCloud', 'social link block variation name' ), + 'icon' => '', + ), + 'spotify' => array( + 'name' => _x( 'Spotify', 'social link block variation name' ), + 'icon' => '', + ), + 'telegram' => array( + 'name' => _x( 'Telegram', 'social link block variation name' ), + 'icon' => '', + ), + 'threads' => array( + 'name' => _x( 'Threads', 'social link block variation name' ), + 'icon' => '', + ), + 'tiktok' => array( + 'name' => _x( 'TikTok', 'social link block variation name' ), + 'icon' => '', + ), + 'tumblr' => array( + 'name' => _x( 'Tumblr', 'social link block variation name' ), + 'icon' => '
      ', + ), + 'twitch' => array( + 'name' => _x( 'Twitch', 'social link block variation name' ), + 'icon' => '', + ), + 'twitter' => array( + 'name' => _x( 'Twitter', 'social link block variation name' ), + 'icon' => '', + ), + 'vimeo' => array( + 'name' => _x( 'Vimeo', 'social link block variation name' ), + 'icon' => '', + ), + 'vk' => array( + 'name' => _x( 'VK', 'social link block variation name' ), + 'icon' => '', + ), + 'wordpress' => array( + 'name' => _x( 'WordPress', 'social link block variation name' ), + 'icon' => '', + ), + 'whatsapp' => array( + 'name' => _x( 'WhatsApp', 'social link block variation name' ), + 'icon' => '', + ), + 'x' => array( + 'name' => _x( 'X', 'social link block variation name' ), + 'icon' => '', + ), + 'yelp' => array( + 'name' => _x( 'Yelp', 'social link block variation name' ), + 'icon' => '', + ), + 'youtube' => array( + 'name' => _x( 'YouTube', 'social link block variation name' ), + 'icon' => '', + ), + ); + + /** + * Filter the list of available social service. + * + * This can be used to change icons or add custom icons (additionally to variations in the editor). + * Icons should be directly renderable - therefore SVGs work best. + * + * @since 6.9.0 + * + * @param array $services_data The list of services. Each item is an array containing a 'name' and 'icon' key. + * @return array The list of social services. + */ + $services_data = apply_filters( 'block_core_social_link_get_services', $services_data ); + + if ( ! empty( $service ) + && ! empty( $field ) + && isset( $services_data[ $service ] ) + && ( 'icon' === $field || 'name' === $field ) + ) { + return $services_data[ $service ][ $field ]; + } elseif ( ! empty( $service ) && isset( $services_data[ $service ] ) ) { + return $services_data[ $service ]; + } + + return $services_data; +} + +/** + * Returns CSS styles for icon and icon background colors. + * + * @since 5.7.0 + * + * @param array $context Block context passed to Social Link. + * + * @return string Inline CSS styles for link's icon and background colors. + */ +function block_core_social_link_get_color_styles( $context ) { + $styles = array(); + + if ( array_key_exists( 'iconColorValue', $context ) ) { + $styles[] = 'color:' . $context['iconColorValue'] . ';'; + } + + if ( array_key_exists( 'iconBackgroundColorValue', $context ) ) { + $styles[] = 'background-color:' . $context['iconBackgroundColorValue'] . ';'; + } + + return implode( '', $styles ); +} + +/** + * Returns CSS classes for icon and icon background colors. + * + * @since 6.3.0 + * + * @param array $context Block context passed to Social Sharing Link. + * + * @return string CSS classes for link's icon and background colors. + */ +function block_core_social_link_get_color_classes( $context ) { + $classes = array(); + + if ( array_key_exists( 'iconColor', $context ) ) { + $classes[] = 'has-' . $context['iconColor'] . '-color'; + } + + if ( array_key_exists( 'iconBackgroundColor', $context ) ) { + $classes[] = 'has-' . $context['iconBackgroundColor'] . '-background-color'; + } + + return ' ' . implode( ' ', $classes ); +} diff --git a/src/wp-includes/blocks/social-link/block.json b/src/wp-includes/blocks/social-link/block.json new file mode 100644 index 0000000000000..667fd74b208f2 --- /dev/null +++ b/src/wp-includes/blocks/social-link/block.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/social-link", + "title": "Social Icon", + "category": "widgets", + "parent": [ "core/social-links" ], + "description": "Display an icon linking to a social profile or site.", + "textdomain": "default", + "attributes": { + "url": { + "type": "string", + "role": "content" + }, + "service": { + "type": "string" + }, + "label": { + "type": "string", + "role": "content" + }, + "rel": { + "type": "string" + } + }, + "usesContext": [ + "openInNewTab", + "showLabels", + "iconColor", + "iconColorValue", + "iconBackgroundColor", + "iconBackgroundColorValue" + ], + "supports": { + "reusable": false, + "html": false, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-social-link-editor" +} diff --git a/src/wp-includes/blocks/social-links/block.json b/src/wp-includes/blocks/social-links/block.json new file mode 100644 index 0000000000000..8caa8f5bf8abb --- /dev/null +++ b/src/wp-includes/blocks/social-links/block.json @@ -0,0 +1,107 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/social-links", + "title": "Social Icons", + "category": "widgets", + "allowedBlocks": [ "core/social-link" ], + "description": "Display icons linking to your social profiles or sites.", + "keywords": [ "links" ], + "textdomain": "default", + "attributes": { + "iconColor": { + "type": "string" + }, + "customIconColor": { + "type": "string" + }, + "iconColorValue": { + "type": "string" + }, + "iconBackgroundColor": { + "type": "string" + }, + "customIconBackgroundColor": { + "type": "string" + }, + "iconBackgroundColorValue": { + "type": "string" + }, + "openInNewTab": { + "type": "boolean", + "default": false + }, + "showLabels": { + "type": "boolean", + "default": false + }, + "size": { + "type": "string" + } + }, + "providesContext": { + "openInNewTab": "openInNewTab", + "showLabels": "showLabels", + "iconColor": "iconColor", + "iconColorValue": "iconColorValue", + "iconBackgroundColor": "iconBackgroundColor", + "iconBackgroundColorValue": "iconBackgroundColorValue" + }, + "supports": { + "align": [ "left", "center", "right" ], + "anchor": true, + "html": false, + "__experimentalExposeControlsToChildren": true, + "layout": { + "allowSwitching": false, + "allowInheriting": false, + "allowVerticalAlignment": false, + "default": { + "type": "flex" + } + }, + "color": { + "enableContrastChecker": false, + "background": true, + "gradients": true, + "text": false, + "__experimentalDefaultControls": { + "background": false + } + }, + "spacing": { + "blockGap": [ "horizontal", "vertical" ], + "margin": true, + "padding": true, + "units": [ "px", "em", "rem", "vh", "vw" ], + "__experimentalDefaultControls": { + "blockGap": true, + "margin": true, + "padding": false + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "contentRole": true + }, + "styles": [ + { "name": "default", "label": "Default", "isDefault": true }, + { "name": "logos-only", "label": "Logos Only" }, + { "name": "pill-shape", "label": "Pill Shape" } + ], + "editorStyle": "wp-block-social-links-editor", + "style": "wp-block-social-links" +} diff --git a/src/wp-includes/blocks/spacer/block.json b/src/wp-includes/blocks/spacer/block.json new file mode 100644 index 0000000000000..447ea99cc0b67 --- /dev/null +++ b/src/wp-includes/blocks/spacer/block.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/spacer", + "title": "Spacer", + "category": "design", + "description": "Add white space between blocks and customize its height.", + "textdomain": "default", + "attributes": { + "height": { + "type": "string", + "default": "100px" + }, + "width": { + "type": "string" + } + }, + "usesContext": [ "orientation" ], + "supports": { + "anchor": true, + "spacing": { + "margin": [ "top", "bottom" ], + "__experimentalDefaultControls": { + "margin": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-spacer-editor", + "style": "wp-block-spacer" +} diff --git a/src/wp-includes/blocks/table/block.json b/src/wp-includes/blocks/table/block.json new file mode 100644 index 0000000000000..84f2783d3ff8c --- /dev/null +++ b/src/wp-includes/blocks/table/block.json @@ -0,0 +1,220 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/table", + "title": "Table", + "category": "text", + "description": "Create structured content in rows and columns to display information.", + "textdomain": "default", + "attributes": { + "hasFixedLayout": { + "type": "boolean", + "default": true + }, + "caption": { + "type": "rich-text", + "source": "rich-text", + "selector": "figcaption", + "role": "content" + }, + "head": { + "type": "array", + "default": [], + "source": "query", + "selector": "thead tr", + "query": { + "cells": { + "type": "array", + "default": [], + "source": "query", + "selector": "td,th", + "query": { + "content": { + "type": "rich-text", + "source": "rich-text", + "role": "content" + }, + "tag": { + "type": "string", + "default": "td", + "source": "tag" + }, + "scope": { + "type": "string", + "source": "attribute", + "attribute": "scope" + }, + "align": { + "type": "string", + "source": "attribute", + "attribute": "data-align" + }, + "colspan": { + "type": "string", + "source": "attribute", + "attribute": "colspan" + }, + "rowspan": { + "type": "string", + "source": "attribute", + "attribute": "rowspan" + } + } + } + } + }, + "body": { + "type": "array", + "default": [], + "source": "query", + "selector": "tbody tr", + "query": { + "cells": { + "type": "array", + "default": [], + "source": "query", + "selector": "td,th", + "query": { + "content": { + "type": "rich-text", + "source": "rich-text", + "role": "content" + }, + "tag": { + "type": "string", + "default": "td", + "source": "tag" + }, + "scope": { + "type": "string", + "source": "attribute", + "attribute": "scope" + }, + "align": { + "type": "string", + "source": "attribute", + "attribute": "data-align" + }, + "colspan": { + "type": "string", + "source": "attribute", + "attribute": "colspan" + }, + "rowspan": { + "type": "string", + "source": "attribute", + "attribute": "rowspan" + } + } + } + } + }, + "foot": { + "type": "array", + "default": [], + "source": "query", + "selector": "tfoot tr", + "query": { + "cells": { + "type": "array", + "default": [], + "source": "query", + "selector": "td,th", + "query": { + "content": { + "type": "rich-text", + "source": "rich-text", + "role": "content" + }, + "tag": { + "type": "string", + "default": "td", + "source": "tag" + }, + "scope": { + "type": "string", + "source": "attribute", + "attribute": "scope" + }, + "align": { + "type": "string", + "source": "attribute", + "attribute": "data-align" + }, + "colspan": { + "type": "string", + "source": "attribute", + "attribute": "colspan" + }, + "rowspan": { + "type": "string", + "source": "attribute", + "attribute": "rowspan" + } + } + } + } + } + }, + "supports": { + "anchor": true, + "align": true, + "color": { + "__experimentalSkipSerialization": true, + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "__experimentalSkipSerialization": true, + "color": true, + "style": true, + "width": true, + "__experimentalDefaultControls": { + "color": true, + "style": true, + "width": true + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "selectors": { + "root": ".wp-block-table > table", + "spacing": ".wp-block-table" + }, + "styles": [ + { + "name": "regular", + "label": "Default", + "isDefault": true + }, + { "name": "stripes", "label": "Stripes" } + ], + "editorStyle": "wp-block-table-editor", + "style": "wp-block-table" +} diff --git a/src/wp-includes/blocks/tag-cloud.php b/src/wp-includes/blocks/tag-cloud.php new file mode 100644 index 0000000000000..8949dd8e5b11f --- /dev/null +++ b/src/wp-includes/blocks/tag-cloud.php @@ -0,0 +1,63 @@ +[a-z%]+)$/i', $smallest_font_size, $m ) ? $m['unit'] : 'pt' ); + + $args = array( + 'echo' => false, + 'unit' => $unit, + 'taxonomy' => $attributes['taxonomy'], + 'show_count' => $attributes['showTagCounts'], + 'number' => $attributes['numberOfTags'], + 'smallest' => floatVal( $attributes['smallestFontSize'] ), + 'largest' => floatVal( $attributes['largestFontSize'] ), + ); + $tag_cloud = wp_tag_cloud( $args ); + + if ( empty( $tag_cloud ) ) { + // Display placeholder content when there are no tags only in editor. + if ( wp_is_serving_rest_request() ) { + $tag_cloud = __( 'There’s no content to show here yet.' ); + } else { + return ''; + } + } + + $wrapper_attributes = get_block_wrapper_attributes(); + + return sprintf( + '

      %2$s

      ', + $wrapper_attributes, + $tag_cloud + ); +} + +/** + * Registers the `core/tag-cloud` block on server. + * + * @since 5.2.0 + */ +function register_block_core_tag_cloud() { + register_block_type_from_metadata( + __DIR__ . '/tag-cloud', + array( + 'render_callback' => 'render_block_core_tag_cloud', + ) + ); +} +add_action( 'init', 'register_block_core_tag_cloud' ); diff --git a/src/wp-includes/blocks/tag-cloud/block.json b/src/wp-includes/blocks/tag-cloud/block.json new file mode 100644 index 0000000000000..044bc0c533376 --- /dev/null +++ b/src/wp-includes/blocks/tag-cloud/block.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/tag-cloud", + "title": "Tag Cloud", + "category": "widgets", + "description": "A cloud of popular keywords, each sized by how often it appears.", + "textdomain": "default", + "attributes": { + "numberOfTags": { + "type": "number", + "default": 45, + "minimum": 1, + "maximum": 100 + }, + "taxonomy": { + "type": "string", + "default": "post_tag" + }, + "showTagCounts": { + "type": "boolean", + "default": false + }, + "smallestFontSize": { + "type": "string", + "default": "8pt" + }, + "largestFontSize": { + "type": "string", + "default": "22pt" + } + }, + "styles": [ + { "name": "default", "label": "Default", "isDefault": true }, + { "name": "outline", "label": "Outline" } + ], + "supports": { + "html": false, + "align": true, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalLetterSpacing": true + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + }, + "editorStyle": "wp-block-tag-cloud-editor" +} diff --git a/src/wp-includes/blocks/template-part.php b/src/wp-includes/blocks/template-part.php new file mode 100644 index 0000000000000..c73b64408733d --- /dev/null +++ b/src/wp-includes/blocks/template-part.php @@ -0,0 +1,303 @@ + 'wp_template_part', + 'post_status' => 'publish', + 'post_name__in' => array( $attributes['slug'] ), + 'tax_query' => array( + array( + 'taxonomy' => 'wp_theme', + 'field' => 'name', + 'terms' => $theme, + ), + ), + 'posts_per_page' => 1, + 'no_found_rows' => true, + 'lazy_load_term_meta' => false, // Do not lazy load term meta, as template parts only have one term. + ) + ); + $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null; + if ( $template_part_post ) { + // A published post might already exist if this template part was customized elsewhere + // or if it's part of a customized template. + $block_template = _build_block_template_result_from_post( $template_part_post ); + $content = $block_template->content; + if ( isset( $block_template->area ) ) { + $area = $block_template->area; + } + /** + * Fires when a block template part is loaded from a template post stored in the database. + * + * @since 5.9.0 + * + * @param string $template_part_id The requested template part namespaced to the theme. + * @param array $attributes The block attributes. + * @param WP_Post $template_part_post The template part post object. + * @param string $content The template part content. + */ + do_action( 'render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content ); + } else { + $template_part_file_path = ''; + // Else, if the template part was provided by the active theme, + // render the corresponding file content. + if ( 0 === validate_file( $attributes['slug'] ) ) { + $block_template = get_block_file_template( $template_part_id, 'wp_template_part' ); + + if ( isset( $block_template->content ) ) { + $content = $block_template->content; + } + if ( isset( $block_template->area ) ) { + $area = $block_template->area; + } + + // Needed for the `render_block_core_template_part_file` and `render_block_core_template_part_none` actions below. + $block_template_file = _get_block_template_file( 'wp_template_part', $attributes['slug'] ); + if ( $block_template_file ) { + $template_part_file_path = $block_template_file['path']; + } + } + + if ( '' !== $content && null !== $content ) { + /** + * Fires when a block template part is loaded from a template part in the theme. + * + * @since 5.9.0 + * + * @param string $template_part_id The requested template part namespaced to the theme. + * @param array $attributes The block attributes. + * @param string $template_part_file_path Absolute path to the template path. + * @param string $content The template part content. + */ + do_action( 'render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content ); + } else { + /** + * Fires when a requested block template part does not exist in the database nor in the theme. + * + * @since 5.9.0 + * + * @param string $template_part_id The requested template part namespaced to the theme. + * @param array $attributes The block attributes. + * @param string $template_part_file_path Absolute path to the not found template path. + */ + do_action( 'render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path ); + } + } + } + + // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent + // is set in `wp_debug_mode()`. + $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY; + + if ( is_null( $content ) ) { + if ( $is_debug && isset( $attributes['slug'] ) ) { + return sprintf( + /* translators: %s: Template part slug. */ + __( 'Template part has been deleted or is unavailable: %s' ), + $attributes['slug'] + ); + } + + return ''; + } + + if ( isset( $seen_ids[ $template_part_id ] ) ) { + return $is_debug ? + // translators: Visible only in the front end, this warning takes the place of a faulty block. + __( '[block rendering halted]' ) : + ''; + } + + // Look up area definition. + $area_definition = null; + $defined_areas = get_allowed_block_template_part_areas(); + foreach ( $defined_areas as $defined_area ) { + if ( $defined_area['area'] === $area ) { + $area_definition = $defined_area; + break; + } + } + + // If $area is not allowed, set it back to the uncategorized default. + if ( ! $area_definition ) { + $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED; + } + + // Run through the actions that are typically taken on the_content. + $content = shortcode_unautop( $content ); + $content = do_shortcode( $content ); + $seen_ids[ $template_part_id ] = true; + $content = do_blocks( $content ); + unset( $seen_ids[ $template_part_id ] ); + $content = wptexturize( $content ); + $content = convert_smilies( $content ); + $content = wp_filter_content_tags( $content, "template_part_{$area}" ); + + // Handle embeds for block template parts. + global $wp_embed; + $content = $wp_embed->autoembed( $content ); + + if ( empty( $attributes['tagName'] ) || tag_escape( $attributes['tagName'] ) !== $attributes['tagName'] ) { + $area_tag = 'div'; + if ( $area_definition && isset( $area_definition['area_tag'] ) ) { + $area_tag = $area_definition['area_tag']; + } + $html_tag = $area_tag; + } else { + $html_tag = esc_attr( $attributes['tagName'] ); + } + $wrapper_attributes = get_block_wrapper_attributes(); + + return "<$html_tag $wrapper_attributes>" . str_replace( ']]>', ']]>', $content ) . ""; +} + +/** + * Returns an array of area variation objects for the template part block. + * + * @since 6.1.0 + * + * @param array $instance_variations The variations for instances. + * + * @return array Array containing the block variation objects. + */ +function build_template_part_block_area_variations( $instance_variations ) { + $variations = array(); + $defined_areas = get_allowed_block_template_part_areas(); + + foreach ( $defined_areas as $area ) { + if ( 'uncategorized' !== $area['area'] ) { + $has_instance_for_area = false; + foreach ( $instance_variations as $variation ) { + if ( $variation['attributes']['area'] === $area['area'] ) { + $has_instance_for_area = true; + break; + } + } + + $scope = $has_instance_for_area ? array() : array( 'inserter' ); + + $variations[] = array( + 'name' => 'area_' . $area['area'], + 'title' => $area['label'], + 'description' => $area['description'], + 'attributes' => array( + 'area' => $area['area'], + ), + 'scope' => $scope, + 'icon' => $area['icon'], + ); + } + } + return $variations; +} + +/** + * Returns an array of instance variation objects for the template part block + * + * @since 6.1.0 + * + * @return array Array containing the block variation objects. + */ +function build_template_part_block_instance_variations() { + // Block themes are unavailable during installation. + if ( wp_installing() ) { + return array(); + } + + if ( ! current_theme_supports( 'block-templates' ) && ! current_theme_supports( 'block-template-parts' ) ) { + return array(); + } + + $variations = array(); + $template_parts = get_block_templates( + array( + 'post_type' => 'wp_template_part', + ), + 'wp_template_part' + ); + + $defined_areas = get_allowed_block_template_part_areas(); + $icon_by_area = array_combine( array_column( $defined_areas, 'area' ), array_column( $defined_areas, 'icon' ) ); + + foreach ( $template_parts as $template_part ) { + $variations[] = array( + 'name' => 'instance_' . sanitize_title( $template_part->slug ), + 'title' => $template_part->title, + // If there's no description for the template part don't show the + // block description. This is a bit hacky, but prevent the fallback + // by using a non-breaking space so that the value of description + // isn't falsey. + 'description' => $template_part->description || ' ', + 'attributes' => array( + 'slug' => $template_part->slug, + 'theme' => $template_part->theme, + 'area' => $template_part->area, + ), + 'scope' => array( 'inserter' ), + 'icon' => isset( $icon_by_area[ $template_part->area ] ) ? $icon_by_area[ $template_part->area ] : null, + 'example' => array( + 'attributes' => array( + 'slug' => $template_part->slug, + 'theme' => $template_part->theme, + 'area' => $template_part->area, + ), + ), + ); + } + return $variations; +} + +/** + * Returns an array of all template part block variations. + * + * @since 5.9.0 + * + * @return array Array containing the block variation objects. + */ +function build_template_part_block_variations() { + $instance_variations = build_template_part_block_instance_variations(); + $area_variations = build_template_part_block_area_variations( $instance_variations ); + return array_merge( $area_variations, $instance_variations ); +} + +/** + * Registers the `core/template-part` block on the server. + * + * @since 5.9.0 + */ +function register_block_core_template_part() { + register_block_type_from_metadata( + __DIR__ . '/template-part', + array( + 'render_callback' => 'render_block_core_template_part', + 'variation_callback' => 'build_template_part_block_variations', + ) + ); +} +add_action( 'init', 'register_block_core_template_part' ); diff --git a/src/wp-includes/blocks/template-part/block.json b/src/wp-includes/blocks/template-part/block.json new file mode 100644 index 0000000000000..9710bdeee2e53 --- /dev/null +++ b/src/wp-includes/blocks/template-part/block.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/template-part", + "title": "Template Part", + "category": "theme", + "description": "Edit the different global regions of your site, like the header, footer, sidebar, or create your own.", + "textdomain": "default", + "attributes": { + "slug": { + "type": "string" + }, + "theme": { + "type": "string" + }, + "tagName": { + "type": "string" + }, + "area": { + "type": "string" + } + }, + "supports": { + "align": true, + "html": false, + "reusable": false, + "renaming": false, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-template-part-editor" +} diff --git a/src/wp-includes/blocks/term-count.php b/src/wp-includes/blocks/term-count.php new file mode 100644 index 0000000000000..9794896524eb4 --- /dev/null +++ b/src/wp-includes/blocks/term-count.php @@ -0,0 +1,80 @@ +context['termId'] ) && isset( $block->context['taxonomy'] ) ) { + $term = get_term( $block->context['termId'], $block->context['taxonomy'] ); + } else { + $term = get_queried_object(); + if ( ! $term instanceof WP_Term ) { + $term = null; + } + } + + if ( ! $term || is_wp_error( $term ) ) { + return ''; + } + + $term_count = $term->count; + + // Format the term count based on bracket type. + switch ( $attributes['bracketType'] ) { + case 'none': + // No formatting needed. + break; + case 'round': + $term_count = "({$term_count})"; + break; + case 'square': + $term_count = "[{$term_count}]"; + break; + case 'curly': + $term_count = "{{$term_count}}"; + break; + case 'angle': + $term_count = "<{$term_count}>"; + break; + default: + // Default to no formatting for unknown types. + break; + } + + $wrapper_attributes = get_block_wrapper_attributes(); + + return sprintf( + '
      %2$s
      ', + $wrapper_attributes, + $term_count + ); +} + +/** + * Registers the `core/term-count` block on the server. + * + * @since 6.9.0 + */ +function register_block_core_term_count() { + register_block_type_from_metadata( + __DIR__ . '/term-count', + array( + 'render_callback' => 'render_block_core_term_count', + ) + ); +} +add_action( 'init', 'register_block_core_term_count' ); diff --git a/src/wp-includes/blocks/term-count/block.json b/src/wp-includes/blocks/term-count/block.json new file mode 100644 index 0000000000000..c4de1e61f8d1f --- /dev/null +++ b/src/wp-includes/blocks/term-count/block.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/term-count", + "title": "Term Count", + "category": "theme", + "description": "Displays the post count of a taxonomy term.", + "textdomain": "default", + "usesContext": [ "termId", "taxonomy" ], + "attributes": { + "bracketType": { + "type": "string", + "enum": [ "none", "round", "square", "curly", "angle" ], + "default": "round" + } + }, + "supports": { + "html": false, + "color": { + "gradients": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-term-count" +} diff --git a/src/wp-includes/blocks/term-description.php b/src/wp-includes/blocks/term-description.php new file mode 100644 index 0000000000000..9f61dbba07fbc --- /dev/null +++ b/src/wp-includes/blocks/term-description.php @@ -0,0 +1,61 @@ +context['termId'] ) && isset( $block->context['taxonomy'] ) ) { + $term = get_term( $block->context['termId'], $block->context['taxonomy'] ); + if ( $term && ! is_wp_error( $term ) ) { + $term_description = $term->description; + } + } elseif ( is_category() || is_tag() || is_tax() ) { + $term_description = term_description(); + } + + if ( empty( $term_description ) ) { + return ''; + } + + $classes = array(); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + return '
      ' . $term_description . '
      '; +} + +/** + * Registers the `core/term-description` block on the server. + * + * @since 5.9.0 + */ +function register_block_core_term_description() { + register_block_type_from_metadata( + __DIR__ . '/term-description', + array( + 'render_callback' => 'render_block_core_term_description', + ) + ); +} +add_action( 'init', 'register_block_core_term_description' ); diff --git a/src/wp-includes/blocks/term-description/block.json b/src/wp-includes/blocks/term-description/block.json new file mode 100644 index 0000000000000..a882625ad6f50 --- /dev/null +++ b/src/wp-includes/blocks/term-description/block.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/term-description", + "title": "Term Description", + "category": "theme", + "description": "Display the description of categories, tags and custom taxonomies when viewing an archive.", + "textdomain": "default", + "usesContext": [ "termId", "taxonomy" ], + "attributes": { + "textAlign": { + "type": "string" + } + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "color": { + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "padding": true, + "margin": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "radius": true, + "color": true, + "width": true, + "style": true + } + } + } +} diff --git a/src/wp-includes/blocks/term-name.php b/src/wp-includes/blocks/term-name.php new file mode 100644 index 0000000000000..3a2bf18bb5f21 --- /dev/null +++ b/src/wp-includes/blocks/term-name.php @@ -0,0 +1,81 @@ +context['termId'] ) && isset( $block->context['taxonomy'] ) ) { + $term = get_term( $block->context['termId'], $block->context['taxonomy'] ); + } else { + $term = get_queried_object(); + if ( ! $term instanceof WP_Term ) { + $term = null; + } + } + + if ( ! $term || is_wp_error( $term ) ) { + return ''; + } + + $term_name = $term->name; + $level = isset( $attributes['level'] ) ? $attributes['level'] : 0; + $tag_name = 0 === $level ? 'p' : 'h' . (int) $level; + + if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) { + $term_link = get_term_link( $term ); + if ( ! is_wp_error( $term_link ) ) { + $term_name = sprintf( + '%2$s', + esc_url( $term_link ), + $term_name + ); + } + } + + $classes = array(); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + return sprintf( + '<%1$s %2$s>%3$s', + $tag_name, + $wrapper_attributes, + $term_name + ); +} + +/** + * Registers the `core/term-name` block on the server. + * + * @since 6.9.0 + */ +function register_block_core_term_name() { + register_block_type_from_metadata( + __DIR__ . '/term-name', + array( + 'render_callback' => 'render_block_core_term_name', + ) + ); +} +add_action( 'init', 'register_block_core_term_name' ); diff --git a/src/wp-includes/blocks/term-name/block.json b/src/wp-includes/blocks/term-name/block.json new file mode 100644 index 0000000000000..29b0cbe22b77e --- /dev/null +++ b/src/wp-includes/blocks/term-name/block.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/term-name", + "title": "Term Name", + "category": "theme", + "description": "Displays the name of a taxonomy term.", + "keywords": [ "term title" ], + "textdomain": "default", + "usesContext": [ "termId", "taxonomy" ], + "attributes": { + "textAlign": { + "type": "string" + }, + "level": { + "type": "number", + "default": 0 + }, + "isLink": { + "type": "boolean", + "default": false + } + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "color": true, + "width": true, + "style": true + } + } + }, + "style": "wp-block-term-name" +} diff --git a/src/wp-includes/blocks/term-template.php b/src/wp-includes/blocks/term-template.php new file mode 100644 index 0000000000000..3cbe21f60c0d4 --- /dev/null +++ b/src/wp-includes/blocks/term-template.php @@ -0,0 +1,137 @@ +context ) || empty( $block->context['termQuery'] ) ) { + return ''; + } + + $query = $block->context['termQuery']; + + $query_args = array( + 'number' => $query['perPage'], + 'order' => $query['order'], + 'orderby' => $query['orderBy'], + 'hide_empty' => $query['hideEmpty'], + ); + + $inherit_query = isset( $query['inherit'] ) + && $query['inherit'] + && ( is_tax() || is_category() || is_tag() ); + + if ( $inherit_query ) { + // Get the current term and taxonomy from the queried object. + $queried_object = get_queried_object(); + + // For hierarchical taxonomies, show children of the current term. + // For non-hierarchical taxonomies, show all terms (don't set parent). + if ( is_taxonomy_hierarchical( $queried_object->taxonomy ) ) { + // If showNested is true, use child_of to include nested terms. + // Otherwise, use parent to show only direct children. + if ( ! empty( $query['showNested'] ) ) { + $query_args['child_of'] = $queried_object->term_id; + } else { + $query_args['parent'] = $queried_object->term_id; + } + } + $query_args['taxonomy'] = $queried_object->taxonomy; + } else { + // If not inheriting set `taxonomy` from the block attribute. + $query_args['taxonomy'] = $query['taxonomy']; + + // If we are including specific terms we ignore `showNested` argument. + if ( ! empty( $query['include'] ) ) { + $query_args['include'] = array_unique( array_map( 'intval', $query['include'] ) ); + $query_args['orderby'] = 'include'; + $query_args['order'] = 'asc'; + } elseif ( empty( $query['showNested'] ) ) { + // We set parent only when inheriting from the taxonomy archive context or not + // showing nested terms, otherwise nested terms are not displayed. + $query_args['parent'] = 0; + } + } + + $terms_query = new WP_Term_Query( $query_args ); + $terms = $terms_query->get_terms(); + + if ( ! $terms || is_wp_error( $terms ) ) { + return ''; + } + + $content = ''; + foreach ( $terms as $term ) { + // Get an instance of the current Term Template block. + $block_instance = $block->parsed_block; + + // Set the block name to one that does not correspond to an existing registered block. + // This ensures that for the inner instances of the Term Template block, we do not render any block supports. + $block_instance['blockName'] = 'core/null'; + + $term_id = $term->term_id; + $taxonomy = $term->taxonomy; + + $filter_block_context = static function ( $context ) use ( $term_id, $taxonomy ) { + $context['termId'] = $term_id; + $context['taxonomy'] = $taxonomy; + return $context; + }; + + // Use an early priority to so that other 'render_block_context' filters have access to the values. + add_filter( 'render_block_context', $filter_block_context, 1 ); + + // Render the inner blocks of the Term Template block with `dynamic` set to `false` to prevent calling + // `render_callback` and ensure that no wrapper markup is included. + $block_content = ( new WP_Block( $block_instance ) )->render( array( 'dynamic' => false ) ); + + remove_filter( 'render_block_context', $filter_block_context, 1 ); + + // Wrap the render inner blocks in a `li` element with the appropriate term classes. + $term_classes = "wp-block-term term-{$term->term_id} {$term->taxonomy} taxonomy-{$term->taxonomy}"; + + $content .= '
    10. ' . $block_content . '
    11. '; + } + + $classnames = ''; + + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classnames .= 'has-link-color'; + } + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => trim( $classnames ) ) ); + + return sprintf( + '
        %s
      ', + $wrapper_attributes, + $content + ); +} + +/** + * Registers the `core/term-template` block on the server. + * + * @since 6.9.0 + */ +function register_block_core_term_template() { + register_block_type_from_metadata( + __DIR__ . '/term-template', + array( + 'render_callback' => 'render_block_core_term_template', + ) + ); +} +add_action( 'init', 'register_block_core_term_template' ); diff --git a/src/wp-includes/blocks/term-template/block.json b/src/wp-includes/blocks/term-template/block.json new file mode 100644 index 0000000000000..2f4b9838c71bd --- /dev/null +++ b/src/wp-includes/blocks/term-template/block.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/term-template", + "title": "Term Template", + "category": "theme", + "ancestor": [ "core/terms-query" ], + "description": "Contains the block elements used to render a taxonomy term, like the name, description, and more.", + "textdomain": "default", + "usesContext": [ "termQuery" ], + "supports": { + "reusable": false, + "html": false, + "align": [ "wide", "full" ], + "layout": true, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "spacing": { + "margin": true, + "padding": true, + "blockGap": { + "__experimentalDefault": "1.25em" + }, + "__experimentalDefaultControls": { + "blockGap": true, + "padding": false, + "margin": false + } + }, + "interactivity": { + "clientNavigation": true + }, + "__experimentalBorder": { + "radius": true, + "color": true, + "width": true, + "style": true + } + }, + "style": "wp-block-term-template", + "editorStyle": "wp-block-term-template-editor" +} diff --git a/src/wp-includes/blocks/terms-query/block.json b/src/wp-includes/blocks/terms-query/block.json new file mode 100644 index 0000000000000..05b7a2c12e22f --- /dev/null +++ b/src/wp-includes/blocks/terms-query/block.json @@ -0,0 +1,39 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/terms-query", + "title": "Terms Query", + "category": "theme", + "description": "An advanced block that allows displaying taxonomy terms based on different query parameters and visual configurations.", + "keywords": [ "terms", "taxonomy", "categories", "tags", "list" ], + "textdomain": "default", + "attributes": { + "termQuery": { + "type": "object", + "default": { + "perPage": 10, + "taxonomy": "category", + "order": "asc", + "orderBy": "name", + "include": [], + "hideEmpty": true, + "showNested": false, + "inherit": false + } + }, + "tagName": { + "type": "string", + "default": "div" + } + }, + "usesContext": [ "templateSlug" ], + "providesContext": { + "termQuery": "termQuery" + }, + "supports": { + "align": [ "wide", "full" ], + "html": false, + "layout": true, + "interactivity": true + } +} diff --git a/src/wp-includes/blocks/text-columns/block.json b/src/wp-includes/blocks/text-columns/block.json new file mode 100644 index 0000000000000..2599df111d34b --- /dev/null +++ b/src/wp-includes/blocks/text-columns/block.json @@ -0,0 +1,39 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/text-columns", + "title": "Text Columns (deprecated)", + "icon": "columns", + "category": "design", + "description": "This block is deprecated. Please use the Columns block instead.", + "textdomain": "default", + "attributes": { + "content": { + "type": "array", + "source": "query", + "selector": "p", + "query": { + "children": { + "type": "string", + "source": "html" + } + }, + "default": [ {}, {} ] + }, + "columns": { + "type": "number", + "default": 2 + }, + "width": { + "type": "string" + } + }, + "supports": { + "inserter": false, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-text-columns-editor", + "style": "wp-block-text-columns" +} diff --git a/src/wp-includes/blocks/verse/block.json b/src/wp-includes/blocks/verse/block.json new file mode 100644 index 0000000000000..81cccd72965b1 --- /dev/null +++ b/src/wp-includes/blocks/verse/block.json @@ -0,0 +1,79 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/verse", + "title": "Verse", + "category": "text", + "description": "Insert poetry. Use special spacing formats. Or quote song lyrics.", + "keywords": [ "poetry", "poem" ], + "textdomain": "default", + "attributes": { + "content": { + "type": "rich-text", + "source": "rich-text", + "selector": "pre", + "__unstablePreserveWhiteSpace": true, + "role": "content" + }, + "textAlign": { + "type": "string" + } + }, + "supports": { + "anchor": true, + "background": { + "backgroundImage": true, + "backgroundSize": true, + "__experimentalDefaultControls": { + "backgroundImage": true + } + }, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "dimensions": { + "minHeight": true, + "__experimentalDefaultControls": { + "minHeight": false + } + }, + "typography": { + "fontSize": true, + "__experimentalFontFamily": true, + "lineHeight": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalWritingMode": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "__experimentalBorder": { + "radius": true, + "width": true, + "color": true, + "style": true + }, + "interactivity": { + "clientNavigation": true + } + }, + "style": "wp-block-verse", + "editorStyle": "wp-block-verse-editor" +} diff --git a/src/wp-includes/blocks/video.php b/src/wp-includes/blocks/video.php new file mode 100644 index 0000000000000..3696bdca3b2e8 --- /dev/null +++ b/src/wp-includes/blocks/video.php @@ -0,0 +1,91 @@ + 0 && $metadata['height'] > 0 ) + ) { + return $content; + } + + // Locate the VIDEO tag to add the dimensions. + $p = new WP_HTML_Tag_Processor( $content ); + if ( ! $p->next_tag( array( 'tag_name' => 'VIDEO' ) ) ) { + return $content; + } + + $p->set_attribute( 'width', (string) $metadata['width'] ); + $p->set_attribute( 'height', (string) $metadata['height'] ); + + /* + * The aspect-ratio style is needed due to an issue with the CSS spec: . + * Note that a style rule using attr() like the following cannot currently be used: + * + * .wp-block-video video[width][height] { + * aspect-ratio: attr(width type()) / attr(height type()); + * } + * + * This is because this attr() is yet only implemented in Chromium: . + */ + $style = $p->get_attribute( 'style' ); + if ( ! is_string( $style ) ) { + $style = ''; + } + $aspect_ratio_style = sprintf( 'aspect-ratio: %d / %d;', $metadata['width'], $metadata['height'] ); + $p->set_attribute( 'style', $aspect_ratio_style . $style ); + + return $p->get_updated_html(); +} + +/** + * Registers the `core/video` block on server. + * + * @since 6.9.0 + */ +function register_block_core_video(): void { + register_block_type_from_metadata( + __DIR__ . '/video', + array( + 'render_callback' => 'render_block_core_video', + ) + ); +} +add_action( 'init', 'register_block_core_video' ); diff --git a/src/wp-includes/blocks/video/block.json b/src/wp-includes/blocks/video/block.json new file mode 100644 index 0000000000000..d2dcd95365c3b --- /dev/null +++ b/src/wp-includes/blocks/video/block.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/video", + "title": "Video", + "category": "media", + "description": "Embed a video from your media library or upload a new one.", + "keywords": [ "movie" ], + "textdomain": "default", + "attributes": { + "autoplay": { + "type": "boolean", + "source": "attribute", + "selector": "video", + "attribute": "autoplay" + }, + "caption": { + "type": "rich-text", + "source": "rich-text", + "selector": "figcaption", + "role": "content" + }, + "controls": { + "type": "boolean", + "source": "attribute", + "selector": "video", + "attribute": "controls", + "default": true + }, + "id": { + "type": "number", + "role": "content" + }, + "loop": { + "type": "boolean", + "source": "attribute", + "selector": "video", + "attribute": "loop" + }, + "muted": { + "type": "boolean", + "source": "attribute", + "selector": "video", + "attribute": "muted" + }, + "poster": { + "type": "string", + "source": "attribute", + "selector": "video", + "attribute": "poster" + }, + "preload": { + "type": "string", + "source": "attribute", + "selector": "video", + "attribute": "preload", + "default": "metadata" + }, + "blob": { + "type": "string", + "role": "local" + }, + "src": { + "type": "string", + "source": "attribute", + "selector": "video", + "attribute": "src", + "role": "content" + }, + "playsInline": { + "type": "boolean", + "source": "attribute", + "selector": "video", + "attribute": "playsinline" + }, + "tracks": { + "role": "content", + "type": "array", + "items": { + "type": "object" + }, + "default": [] + } + }, + "supports": { + "anchor": true, + "align": true, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, + "interactivity": { + "clientNavigation": true + } + }, + "editorStyle": "wp-block-video-editor", + "style": "wp-block-video" +} diff --git a/src/wp-includes/blocks/widget-group.php b/src/wp-includes/blocks/widget-group.php new file mode 100644 index 0000000000000..e8769612a2f17 --- /dev/null +++ b/src/wp-includes/blocks/widget-group.php @@ -0,0 +1,93 @@ +'; + $after_title = ''; + } + + $html = ''; + + if ( ! empty( $attributes['title'] ) ) { + $html .= $before_title . esc_html( $attributes['title'] ) . $after_title; + } + + $html .= '
      '; + foreach ( $block->inner_blocks as $inner_block ) { + $html .= $inner_block->render(); + } + $html .= '
      '; + + return $html; +} + +/** + * Registers the 'core/widget-group' block. + * + * @since 5.9.0 + */ +function register_block_core_widget_group() { + register_block_type_from_metadata( + __DIR__ . '/widget-group', + array( + 'render_callback' => 'render_block_core_widget_group', + ) + ); +} + +add_action( 'init', 'register_block_core_widget_group' ); + +/** + * Make a note of the sidebar being rendered before WordPress starts rendering + * it. This lets us get to the current sidebar in + * render_block_core_widget_group(). + * + * @since 5.9.0 + * + * @global int|string $_sidebar_being_rendered + * + * @param int|string $index Index, name, or ID of the dynamic sidebar. + */ +function note_sidebar_being_rendered( $index ) { + global $_sidebar_being_rendered; + $_sidebar_being_rendered = $index; +} +add_action( 'dynamic_sidebar_before', 'note_sidebar_being_rendered' ); + +/** + * Clear whatever we set in note_sidebar_being_rendered() after WordPress + * finishes rendering a sidebar. + * + * @since 5.9.0 + * + * @global int|string $_sidebar_being_rendered + */ +function discard_sidebar_being_rendered() { + global $_sidebar_being_rendered; + unset( $_sidebar_being_rendered ); +} +add_action( 'dynamic_sidebar_after', 'discard_sidebar_being_rendered' ); diff --git a/src/wp-includes/blocks/widget-group/block.json b/src/wp-includes/blocks/widget-group/block.json new file mode 100644 index 0000000000000..6e7ba57b38dbc --- /dev/null +++ b/src/wp-includes/blocks/widget-group/block.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/widget-group", + "title": "Widget Group", + "category": "widgets", + "attributes": { + "title": { + "type": "string" + } + }, + "supports": { + "html": false, + "inserter": true, + "customClassName": true, + "reusable": false + }, + "editorStyle": "wp-block-widget-group-editor", + "style": "wp-block-widget-group" +} diff --git a/src/wp-includes/build/constants.php b/src/wp-includes/build/constants.php new file mode 100644 index 0000000000000..37c81b5ccc21b --- /dev/null +++ b/src/wp-includes/build/constants.php @@ -0,0 +1,14 @@ + '22.6.0-rc.1', + 'build_url' => includes_url( 'build/' ), +); diff --git a/src/wp-includes/build/pages.php b/src/wp-includes/build/pages.php new file mode 100644 index 0000000000000..14ca6a08fbbc1 --- /dev/null +++ b/src/wp-includes/build/pages.php @@ -0,0 +1,12 @@ + $path ); + if ( ! empty( $content_module ) ) { + $route['content_module'] = $content_module; + } + if ( ! empty( $route_module ) ) { + $route['route_module'] = $route_module; + } + + $wp_font_library_wp_admin_routes[] = $route; +} + +/** + * Register a menu item for the font-library-wp-admin page. + * Note: Menu items are registered but not displayed in single-page mode. + * + * @param string $id Menu item ID. + * @param string $label Display label. + * @param string $to Route path to navigate to. + * @param string $parent_id Optional. Parent menu item ID. + */ +function wp_register_font_library_wp_admin_menu_item( $id, $label, $to, $parent_id = '' ) { + global $wp_font_library_wp_admin_menu_items; + + $menu_item = array( + 'id' => $id, + 'label' => $label, + 'to' => $to, + ); + + if ( ! empty( $parent_id ) ) { + $menu_item['parent'] = $parent_id; + } + + $wp_font_library_wp_admin_menu_items[] = $menu_item; +} + +/** + * Get all registered routes for the font-library-wp-admin page. + * + * @return array Array of route objects. + */ +function wp_get_font_library_wp_admin_routes() { + global $wp_font_library_wp_admin_routes; + return $wp_font_library_wp_admin_routes ?? array(); +} + +/** + * Get all registered menu items for the font-library-wp-admin page. + * + * @return array Array of menu item objects. + */ +function wp_get_font_library_wp_admin_menu_items() { + global $wp_font_library_wp_admin_menu_items; + return $wp_font_library_wp_admin_menu_items ?? array(); +} + +/** + * Preload REST API data for the font-library-wp-admin page. + * Automatically called during page rendering. + */ +function wp_font_library_wp_admin_preload_data() { + // Define paths to preload - same for all pages + // Please also change packages/core-data/src/entities.js when changing this. + $preload_paths = array( + '/?_fields=description,gmt_offset,home,image_sizes,image_size_threshold,image_output_formats,jpeg_interlaced,png_interlaced,gif_interlaced,name,site_icon,site_icon_url,site_logo,timezone_string,url,page_for_posts,page_on_front,show_on_front', + array( '/wp/v2/settings', 'OPTIONS' ), + ); + + // Use rest_preload_api_request to gather the preloaded data + $preload_data = array_reduce( + $preload_paths, + 'rest_preload_api_request', + array() + ); + + // Register the preloading middleware with wp-api-fetch + wp_add_inline_script( + 'wp-api-fetch', + sprintf( + 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', + wp_json_encode( $preload_data ) + ), + 'after' + ); +} + +/** + * Enqueue scripts and styles for the font-library-wp-admin page. + * Hooked to admin_enqueue_scripts. + * + * @param string $hook_suffix The current admin page. + */ +function wp_font_library_wp_admin_enqueue_scripts( $hook_suffix ) { + // Check all possible ways this page can be accessed: + // 1. Menu page via admin.php?page=font-library-wp-admin (plugin) + // 2. Direct file via font-library.php (Core) - screen ID will be 'font-library' + $current_screen = get_current_screen(); + $is_our_page = ( + ( isset( $_GET['page'] ) && 'font-library-wp-admin' === $_GET['page'] ) || // phpcs:ignore WordPress.Security.NonceVerification.Recommended + ( $current_screen && 'font-library' === $current_screen->id ) + ); + + if ( ! $is_our_page ) { + return; + } + + // Load build constants + $build_constants = require __DIR__ . '/../../constants.php'; + + // Fire init action for extensions to register routes and menu items + do_action( 'font-library-wp-admin_init' ); + + // Preload REST API data + wp_font_library_wp_admin_preload_data(); + + // Get all registered routes + $routes = wp_get_font_library_wp_admin_routes(); + + // Get boot module asset file for dependencies + $asset_file = ABSPATH . WPINC . '/js/dist/script-modules/boot/index.min.asset.php'; + if ( file_exists( $asset_file ) ) { + $asset = require $asset_file; + + // This script serves two purposes: + // 1. It ensures all the globals that are made available to the modules are loaded. + // 2. It initializes the boot module as an inline script. + wp_register_script( 'font-library-wp-admin-prerequisites', '', $asset['dependencies'], $asset['version'], true ); + + // Add inline script to initialize the app using initSinglePage (no menuItems) + wp_add_inline_script( + 'font-library-wp-admin-prerequisites', + sprintf( + 'import("@wordpress/boot").then(mod => mod.initSinglePage({mountId: "%s", routes: %s}));', + 'font-library-wp-admin-app', + wp_json_encode( $routes, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) + ) + ); + + // Register prerequisites style by filtering script dependencies to find registered styles + $style_dependencies = array_filter( + $asset['dependencies'], + function ( $handle ) { + return wp_style_is( $handle, 'registered' ); + } + ); + wp_register_style( 'font-library-wp-admin-prerequisites', false, $style_dependencies, $asset['version'] ); + + // Build dependencies for font-library-wp-admin module + $boot_dependencies = array( + array( + 'import' => 'static', + 'id' => '@wordpress/boot', + ), + ); + + // Add all registered routes as dependencies + foreach ( $routes as $route ) { + if ( isset( $route['route_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'static', + 'id' => $route['route_module'], + ); + } + if ( isset( $route['content_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'dynamic', + 'id' => $route['content_module'], + ); + } + } + + // Dummy script module to ensure dependencies are loaded + wp_register_script_module( + 'font-library-wp-admin', + $build_constants['build_url'] . 'pages/font-library/loader.js', + $boot_dependencies + ); + + // Enqueue the boot scripts and styles + wp_enqueue_script( 'font-library-wp-admin-prerequisites' ); + wp_enqueue_script_module( 'font-library-wp-admin' ); + wp_enqueue_style( 'font-library-wp-admin-prerequisites' ); + } +} + +/** + * Render the font-library-wp-admin page. + * Call this function from add_menu_page or add_submenu_page. + * This renders within the normal WordPress admin interface. + */ +function wp_font_library_wp_admin_render_page() { + ?> + +
      + $path ); + if ( ! empty( $content_module ) ) { + $route['content_module'] = $content_module; + } + if ( ! empty( $route_module ) ) { + $route['route_module'] = $route_module; + } + + $wp_font_library_routes[] = $route; +} + +/** + * Register a menu item for the font-library page. + * + * @param string $id Menu item ID. + * @param string $label Display label. + * @param string $to Route path to navigate to. + * @param string $parent_id Optional. Parent menu item ID. + * @param string $parent_type Optional. Parent type: 'drilldown' or 'dropdown'. + */ +function wp_register_font_library_menu_item( $id, $label, $to, $parent_id = '', $parent_type = '' ) { + global $wp_font_library_menu_items; + + $menu_item = array( + 'id' => $id, + 'label' => $label, + 'to' => $to, + ); + + if ( ! empty( $parent_id ) ) { + $menu_item['parent'] = $parent_id; + } + + if ( ! empty( $parent_type ) && in_array( $parent_type, array( 'drilldown', 'dropdown' ), true ) ) { + $menu_item['parent_type'] = $parent_type; + } + + $wp_font_library_menu_items[] = $menu_item; +} + +/** + * Get all registered routes for the font-library page. + * + * @return array Array of route objects. + */ +function wp_get_font_library_routes() { + global $wp_font_library_routes; + return $wp_font_library_routes ?? array(); +} + +/** + * Get all registered menu items for the font-library page. + * + * @return array Array of menu item objects. + */ +function wp_get_font_library_menu_items() { + global $wp_font_library_menu_items; + return $wp_font_library_menu_items ?? array(); +} + +/** + * Preload REST API data for the font-library page. + * Automatically called during page rendering. + */ +function wp_font_library_preload_data() { + // Define paths to preload - same for all pages + // Please also change packages/core-data/src/entities.js when changing this. + $preload_paths = array( + '/?_fields=description,gmt_offset,home,image_sizes,image_size_threshold,image_output_formats,jpeg_interlaced,png_interlaced,gif_interlaced,name,site_icon,site_icon_url,site_logo,timezone_string,url,page_for_posts,page_on_front,show_on_front', + array( '/wp/v2/settings', 'OPTIONS' ), + ); + + // Use rest_preload_api_request to gather the preloaded data + $preload_data = array_reduce( + $preload_paths, + 'rest_preload_api_request', + array() + ); + + // Register the preloading middleware with wp-api-fetch + wp_add_inline_script( + 'wp-api-fetch', + sprintf( + 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', + wp_json_encode( $preload_data ) + ), + 'after' + ); +} + +/** + * Render the font-library page. + * Call this function from add_menu_page or add_submenu_page. + */ +function wp_font_library_render_page() { + // Load build constants + $build_constants = require __DIR__ . '/../../constants.php'; + + // Set current screen + set_current_screen(); + + // Remove unwanted deprecated handler + remove_action( 'admin_head', 'wp_admin_bar_header' ); + + // Remove unwanted scripts and styles that were enqueued during `admin_init` + foreach ( wp_scripts()->queue as $script ) { + wp_dequeue_script( $script ); + } + foreach ( wp_styles()->queue as $style ) { + wp_dequeue_style( $style ); + } + + // Fire init action for extensions to register routes and menu items + do_action( 'font-library_init' ); + + // Enqueue command palette assets for boot-based pages + if ( function_exists( 'wp_enqueue_command_palette_assets' ) ) { + wp_enqueue_command_palette_assets(); + } + + // Preload REST API data + wp_font_library_preload_data(); + + // Get all registered routes and menu items + $menu_items = wp_get_font_library_menu_items(); + $routes = wp_get_font_library_routes(); + + // Get boot module asset file for dependencies + $asset_file = ABSPATH . WPINC . '/js/dist/script-modules/boot/index.min.asset.php'; + if ( file_exists( $asset_file ) ) { + $asset = require $asset_file; + + // This script serves two purposes: + // 1. It ensures all the globals that are made available to the modules are loaded. + // 2. It initializes the boot module as an inline script. + wp_register_script( 'font-library-prerequisites', '', $asset['dependencies'], $asset['version'], true ); + + // Add inline script to initialize the app + $init_modules = []; + wp_add_inline_script( + 'font-library-prerequisites', + sprintf( + 'import("@wordpress/boot").then(mod => mod.init({mountId: "%s", menuItems: %s, routes: %s, initModules: %s, dashboardLink: "%s"}));', + 'font-library-app', + wp_json_encode( $menu_items, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), + wp_json_encode( $routes, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), + wp_json_encode( $init_modules, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), + esc_url( admin_url( '/' ) ) + ) + ); + + // Register prerequisites style by filtering script dependencies to find registered styles + $style_dependencies = array_filter( + $asset['dependencies'], + function ( $handle ) { + return wp_style_is( $handle, 'registered' ); + } + ); + wp_register_style( 'font-library-prerequisites', false, $style_dependencies, $asset['version'] ); + + // Build dependencies for font-library module + $boot_dependencies = array( + array( + 'import' => 'static', + 'id' => '@wordpress/boot', + ), + ); + + // Add init modules as static dependencies + // No init modules configured + + // Add all registered routes as dependencies + foreach ( $routes as $route ) { + if ( isset( $route['route_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'static', + 'id' => $route['route_module'], + ); + } + if ( isset( $route['content_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'dynamic', + 'id' => $route['content_module'], + ); + } + } + + // Dummy script module to ensure dependencies are loaded + wp_register_script_module( + 'font-library', + $build_constants['build_url'] . 'pages/font-library/loader.js', + $boot_dependencies + ); + + // Enqueue the boot scripts and styles + wp_enqueue_script( 'font-library-prerequisites' ); + wp_enqueue_script_module( 'font-library' ); + wp_enqueue_style( 'font-library-prerequisites' ); + } + + // Output the HTML + ?> + + > + + + + <?php echo esc_html( get_admin_page_title() ); ?> + + + + +
      + print_import_map(); + print_footer_scripts(); + wp_script_modules()->print_enqueued_script_modules(); + wp_script_modules()->print_script_module_preloads(); + wp_script_modules()->print_script_module_data(); + + /** + * Prints scripts or data after the default footer scripts. + * + * @since 2.8.0 + */ + do_action( "admin_footer-{$hook_suffix}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + // END see wp-admin/admin-footer.php + ?> + + + $path ); + if ( ! empty( $content_module ) ) { + $route['content_module'] = $content_module; + } + if ( ! empty( $route_module ) ) { + $route['route_module'] = $route_module; + } + + $wp_options_connectors_wp_admin_routes[] = $route; +} + +/** + * Register a menu item for the options-connectors-wp-admin page. + * Note: Menu items are registered but not displayed in single-page mode. + * + * @param string $id Menu item ID. + * @param string $label Display label. + * @param string $to Route path to navigate to. + * @param string $parent_id Optional. Parent menu item ID. + */ +function wp_register_options_connectors_wp_admin_menu_item( $id, $label, $to, $parent_id = '' ) { + global $wp_options_connectors_wp_admin_menu_items; + + $menu_item = array( + 'id' => $id, + 'label' => $label, + 'to' => $to, + ); + + if ( ! empty( $parent_id ) ) { + $menu_item['parent'] = $parent_id; + } + + $wp_options_connectors_wp_admin_menu_items[] = $menu_item; +} + +/** + * Get all registered routes for the options-connectors-wp-admin page. + * + * @return array Array of route objects. + */ +function wp_get_options_connectors_wp_admin_routes() { + global $wp_options_connectors_wp_admin_routes; + return $wp_options_connectors_wp_admin_routes ?? array(); +} + +/** + * Get all registered menu items for the options-connectors-wp-admin page. + * + * @return array Array of menu item objects. + */ +function wp_get_options_connectors_wp_admin_menu_items() { + global $wp_options_connectors_wp_admin_menu_items; + return $wp_options_connectors_wp_admin_menu_items ?? array(); +} + +/** + * Preload REST API data for the options-connectors-wp-admin page. + * Automatically called during page rendering. + */ +function wp_options_connectors_wp_admin_preload_data() { + // Define paths to preload - same for all pages + // Please also change packages/core-data/src/entities.js when changing this. + $preload_paths = array( + '/?_fields=description,gmt_offset,home,image_sizes,image_size_threshold,image_output_formats,jpeg_interlaced,png_interlaced,gif_interlaced,name,site_icon,site_icon_url,site_logo,timezone_string,url,page_for_posts,page_on_front,show_on_front', + array( '/wp/v2/settings', 'OPTIONS' ), + ); + + // Use rest_preload_api_request to gather the preloaded data + $preload_data = array_reduce( + $preload_paths, + 'rest_preload_api_request', + array() + ); + + // Register the preloading middleware with wp-api-fetch + wp_add_inline_script( + 'wp-api-fetch', + sprintf( + 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', + wp_json_encode( $preload_data ) + ), + 'after' + ); +} + +/** + * Enqueue scripts and styles for the options-connectors-wp-admin page. + * Hooked to admin_enqueue_scripts. + * + * @param string $hook_suffix The current admin page. + */ +function wp_options_connectors_wp_admin_enqueue_scripts( $hook_suffix ) { + // Check all possible ways this page can be accessed: + // 1. Menu page via admin.php?page=options-connectors-wp-admin (plugin) + // 2. Direct file via options-connectors.php (Core) - screen ID will be 'options-connectors' + $current_screen = get_current_screen(); + $is_our_page = ( + ( isset( $_GET['page'] ) && 'options-connectors-wp-admin' === $_GET['page'] ) || // phpcs:ignore WordPress.Security.NonceVerification.Recommended + ( $current_screen && 'options-connectors' === $current_screen->id ) + ); + + if ( ! $is_our_page ) { + return; + } + + // Load build constants + $build_constants = require __DIR__ . '/../../constants.php'; + + // Fire init action for extensions to register routes and menu items + do_action( 'options-connectors-wp-admin_init' ); + + // Preload REST API data + wp_options_connectors_wp_admin_preload_data(); + + // Get all registered routes + $routes = wp_get_options_connectors_wp_admin_routes(); + + // Get boot module asset file for dependencies + $asset_file = ABSPATH . WPINC . '/js/dist/script-modules/boot/index.min.asset.php'; + if ( file_exists( $asset_file ) ) { + $asset = require $asset_file; + + // This script serves two purposes: + // 1. It ensures all the globals that are made available to the modules are loaded. + // 2. It initializes the boot module as an inline script. + wp_register_script( 'options-connectors-wp-admin-prerequisites', '', $asset['dependencies'], $asset['version'], true ); + + // Add inline script to initialize the app using initSinglePage (no menuItems) + wp_add_inline_script( + 'options-connectors-wp-admin-prerequisites', + sprintf( + 'import("@wordpress/boot").then(mod => mod.initSinglePage({mountId: "%s", routes: %s}));', + 'options-connectors-wp-admin-app', + wp_json_encode( $routes, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) + ) + ); + + // Register prerequisites style by filtering script dependencies to find registered styles + $style_dependencies = array_filter( + $asset['dependencies'], + function ( $handle ) { + return wp_style_is( $handle, 'registered' ); + } + ); + wp_register_style( 'options-connectors-wp-admin-prerequisites', false, $style_dependencies, $asset['version'] ); + + // Build dependencies for options-connectors-wp-admin module + $boot_dependencies = array( + array( + 'import' => 'static', + 'id' => '@wordpress/boot', + ), + ); + + // Add all registered routes as dependencies + foreach ( $routes as $route ) { + if ( isset( $route['route_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'static', + 'id' => $route['route_module'], + ); + } + if ( isset( $route['content_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'dynamic', + 'id' => $route['content_module'], + ); + } + } + + // Dummy script module to ensure dependencies are loaded + wp_register_script_module( + 'options-connectors-wp-admin', + $build_constants['build_url'] . 'pages/options-connectors/loader.js', + $boot_dependencies + ); + + // Enqueue the boot scripts and styles + wp_enqueue_script( 'options-connectors-wp-admin-prerequisites' ); + wp_enqueue_script_module( 'options-connectors-wp-admin' ); + wp_enqueue_style( 'options-connectors-wp-admin-prerequisites' ); + } +} + +/** + * Render the options-connectors-wp-admin page. + * Call this function from add_menu_page or add_submenu_page. + * This renders within the normal WordPress admin interface. + */ +function wp_options_connectors_wp_admin_render_page() { + ?> + +
      + $path ); + if ( ! empty( $content_module ) ) { + $route['content_module'] = $content_module; + } + if ( ! empty( $route_module ) ) { + $route['route_module'] = $route_module; + } + + $wp_options_connectors_routes[] = $route; +} + +/** + * Register a menu item for the options-connectors page. + * + * @param string $id Menu item ID. + * @param string $label Display label. + * @param string $to Route path to navigate to. + * @param string $parent_id Optional. Parent menu item ID. + * @param string $parent_type Optional. Parent type: 'drilldown' or 'dropdown'. + */ +function wp_register_options_connectors_menu_item( $id, $label, $to, $parent_id = '', $parent_type = '' ) { + global $wp_options_connectors_menu_items; + + $menu_item = array( + 'id' => $id, + 'label' => $label, + 'to' => $to, + ); + + if ( ! empty( $parent_id ) ) { + $menu_item['parent'] = $parent_id; + } + + if ( ! empty( $parent_type ) && in_array( $parent_type, array( 'drilldown', 'dropdown' ), true ) ) { + $menu_item['parent_type'] = $parent_type; + } + + $wp_options_connectors_menu_items[] = $menu_item; +} + +/** + * Get all registered routes for the options-connectors page. + * + * @return array Array of route objects. + */ +function wp_get_options_connectors_routes() { + global $wp_options_connectors_routes; + return $wp_options_connectors_routes ?? array(); +} + +/** + * Get all registered menu items for the options-connectors page. + * + * @return array Array of menu item objects. + */ +function wp_get_options_connectors_menu_items() { + global $wp_options_connectors_menu_items; + return $wp_options_connectors_menu_items ?? array(); +} + +/** + * Preload REST API data for the options-connectors page. + * Automatically called during page rendering. + */ +function wp_options_connectors_preload_data() { + // Define paths to preload - same for all pages + // Please also change packages/core-data/src/entities.js when changing this. + $preload_paths = array( + '/?_fields=description,gmt_offset,home,image_sizes,image_size_threshold,image_output_formats,jpeg_interlaced,png_interlaced,gif_interlaced,name,site_icon,site_icon_url,site_logo,timezone_string,url,page_for_posts,page_on_front,show_on_front', + array( '/wp/v2/settings', 'OPTIONS' ), + ); + + // Use rest_preload_api_request to gather the preloaded data + $preload_data = array_reduce( + $preload_paths, + 'rest_preload_api_request', + array() + ); + + // Register the preloading middleware with wp-api-fetch + wp_add_inline_script( + 'wp-api-fetch', + sprintf( + 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', + wp_json_encode( $preload_data ) + ), + 'after' + ); +} + +/** + * Render the options-connectors page. + * Call this function from add_menu_page or add_submenu_page. + */ +function wp_options_connectors_render_page() { + // Load build constants + $build_constants = require __DIR__ . '/../../constants.php'; + + // Set current screen + set_current_screen(); + + // Remove unwanted deprecated handler + remove_action( 'admin_head', 'wp_admin_bar_header' ); + + // Remove unwanted scripts and styles that were enqueued during `admin_init` + foreach ( wp_scripts()->queue as $script ) { + wp_dequeue_script( $script ); + } + foreach ( wp_styles()->queue as $style ) { + wp_dequeue_style( $style ); + } + + // Fire init action for extensions to register routes and menu items + do_action( 'options-connectors_init' ); + + // Enqueue command palette assets for boot-based pages + if ( function_exists( 'wp_enqueue_command_palette_assets' ) ) { + wp_enqueue_command_palette_assets(); + } + + // Preload REST API data + wp_options_connectors_preload_data(); + + // Get all registered routes and menu items + $menu_items = wp_get_options_connectors_menu_items(); + $routes = wp_get_options_connectors_routes(); + + // Get boot module asset file for dependencies + $asset_file = ABSPATH . WPINC . '/js/dist/script-modules/boot/index.min.asset.php'; + if ( file_exists( $asset_file ) ) { + $asset = require $asset_file; + + // This script serves two purposes: + // 1. It ensures all the globals that are made available to the modules are loaded. + // 2. It initializes the boot module as an inline script. + wp_register_script( 'options-connectors-prerequisites', '', $asset['dependencies'], $asset['version'], true ); + + // Add inline script to initialize the app + $init_modules = []; + wp_add_inline_script( + 'options-connectors-prerequisites', + sprintf( + 'import("@wordpress/boot").then(mod => mod.init({mountId: "%s", menuItems: %s, routes: %s, initModules: %s, dashboardLink: "%s"}));', + 'options-connectors-app', + wp_json_encode( $menu_items, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), + wp_json_encode( $routes, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), + wp_json_encode( $init_modules, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), + esc_url( admin_url( '/' ) ) + ) + ); + + // Register prerequisites style by filtering script dependencies to find registered styles + $style_dependencies = array_filter( + $asset['dependencies'], + function ( $handle ) { + return wp_style_is( $handle, 'registered' ); + } + ); + wp_register_style( 'options-connectors-prerequisites', false, $style_dependencies, $asset['version'] ); + + // Build dependencies for options-connectors module + $boot_dependencies = array( + array( + 'import' => 'static', + 'id' => '@wordpress/boot', + ), + ); + + // Add init modules as static dependencies + // No init modules configured + + // Add all registered routes as dependencies + foreach ( $routes as $route ) { + if ( isset( $route['route_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'static', + 'id' => $route['route_module'], + ); + } + if ( isset( $route['content_module'] ) ) { + $boot_dependencies[] = array( + 'import' => 'dynamic', + 'id' => $route['content_module'], + ); + } + } + + // Dummy script module to ensure dependencies are loaded + wp_register_script_module( + 'options-connectors', + $build_constants['build_url'] . 'pages/options-connectors/loader.js', + $boot_dependencies + ); + + // Enqueue the boot scripts and styles + wp_enqueue_script( 'options-connectors-prerequisites' ); + wp_enqueue_script_module( 'options-connectors' ); + wp_enqueue_style( 'options-connectors-prerequisites' ); + } + + // Output the HTML + ?> + + > + + + + <?php echo esc_html( get_admin_page_title() ); ?> + + + + +
      + print_import_map(); + print_footer_scripts(); + wp_script_modules()->print_enqueued_script_modules(); + wp_script_modules()->print_script_module_preloads(); + wp_script_modules()->print_script_module_data(); + + /** + * Prints scripts or data after the default footer scripts. + * + * @since 2.8.0 + */ + do_action( "admin_footer-{$hook_suffix}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + // END see wp-admin/admin-footer.php + ?> + + + $page_routes ) { + $page_slug_underscore = str_replace( '-', '_', $page_slug ); + $global_name = 'wp_' . $page_slug_underscore . '_routes_data'; + $GLOBALS[ $global_name ] = $page_routes; +} + +/** + * Generic helper function to register routes for a page. + * + * @param array $page_routes Array of route data for the page. + * @param string $register_function_name Name of the function to call for registering each route. + */ +function wp_register_page_routes( $page_routes, $register_function_name ) { + // Load build constants + $build_constants = require __DIR__ . '/constants.php'; + + foreach ( $page_routes as $route ) { + $content_handle = null; + $route_handle = null; + + // Register content module if exists + if ( $route['has_content'] ) { + $content_asset_path = __DIR__ . "/routes/{$route['name']}/content.min.asset.php"; + if ( file_exists( $content_asset_path ) ) { + $content_asset = require $content_asset_path; + $content_handle = 'wp/routes/' . $route['name'] . '/content'; + $extension = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '.js' : '.min.js'; + // Deregister first to override any previously registered version + // (e.g., Core's default modules when running as a plugin). + wp_deregister_script_module( $content_handle ); + wp_register_script_module( + $content_handle, + $build_constants['build_url'] . 'routes/' . $route['name'] . '/content' . $extension, + $content_asset['module_dependencies'] ?? array(), + $content_asset['version'] ?? false + ); + } + } + + // Register route module if exists + if ( $route['has_route'] ) { + $route_asset_path = __DIR__ . "/routes/{$route['name']}/route.min.asset.php"; + if ( file_exists( $route_asset_path ) ) { + $route_asset = require $route_asset_path; + $route_handle = 'wp/routes/' . $route['name'] . '/route'; + $extension = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '.js' : '.min.js'; + // Deregister first to override any previously registered version + // (e.g., Core's default modules when running as a plugin). + wp_deregister_script_module( $route_handle ); + wp_register_script_module( + $route_handle, + $build_constants['build_url'] . 'routes/' . $route['name'] . '/route' . $extension, + $route_asset['module_dependencies'] ?? array(), + $route_asset['version'] ?? false + ); + } + } + + // Register route with page + if ( function_exists( $register_function_name ) ) { + call_user_func( $register_function_name, $route['path'], $content_handle, $route_handle ); + } + } +} + +// Page-specific route registration functions +// Page-specific route registration functions for options-connectors +/** + * Register routes for options-connectors page (full-page mode). + */ +function wp_register_options_connectors_page_routes() { + global $wp_options_connectors_routes_data; + wp_register_page_routes( $wp_options_connectors_routes_data, 'wp_register_options_connectors_route' ); +} +add_action( 'options-connectors_init', 'wp_register_options_connectors_page_routes' ); + +/** + * Register routes for options-connectors page (wp-admin mode). + */ +function wp_register_options_connectors_wp_admin_page_routes() { + global $wp_options_connectors_routes_data; + wp_register_page_routes( $wp_options_connectors_routes_data, 'wp_register_options_connectors_wp_admin_route' ); +} +add_action( 'options-connectors-wp-admin_init', 'wp_register_options_connectors_wp_admin_page_routes' ); + +// Page-specific route registration functions for font-library +/** + * Register routes for font-library page (full-page mode). + */ +function wp_register_font_library_page_routes() { + global $wp_font_library_routes_data; + wp_register_page_routes( $wp_font_library_routes_data, 'wp_register_font_library_route' ); +} +add_action( 'font-library_init', 'wp_register_font_library_page_routes' ); + +/** + * Register routes for font-library page (wp-admin mode). + */ +function wp_register_font_library_wp_admin_page_routes() { + global $wp_font_library_routes_data; + wp_register_page_routes( $wp_font_library_routes_data, 'wp_register_font_library_wp_admin_route' ); +} +add_action( 'font-library-wp-admin_init', 'wp_register_font_library_wp_admin_page_routes' ); + diff --git a/src/wp-includes/build/routes/connectors-home/content.js b/src/wp-includes/build/routes/connectors-home/content.js new file mode 100644 index 0000000000000..852f600e4b037 --- /dev/null +++ b/src/wp-includes/build/routes/connectors-home/content.js @@ -0,0 +1,1458 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// vendor-external:react +var require_react = __commonJS({ + "vendor-external:react"(exports, module) { + module.exports = window.React; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// node_modules/clsx/dist/clsx.mjs +function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; +} +function clsx() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; +} +var clsx_default = clsx; + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element = __toESM(require_element(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components2 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_components2.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + import_components2.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/connectors-home/stage.tsx +var import_components5 = __toESM(require_components()); +var import_data3 = __toESM(require_data()); +var import_element5 = __toESM(require_element()); +var import_i18n4 = __toESM(require_i18n()); +var import_core_data3 = __toESM(require_core_data()); +import { + privateApis as connectorsPrivateApis +} from "@wordpress/connectors"; + +// routes/connectors-home/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='f68f821d0d']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "f68f821d0d"); + style.appendChild(document.createTextNode(".connectors-page{box-sizing:border-box;margin:0 auto;max-width:680px;padding:24px;width:100%}.connectors-page .components-item{background:#fff;border:1px solid #ddd;border-radius:8px;overflow:hidden;padding:20px}.connectors-page .connector-settings .components-text-control__input{font-family:monospace}.connectors-page--empty{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:32px;justify-content:center;text-align:center}.connectors-page .ai-plugin-callout{background:linear-gradient(90deg,#fff9,#fff9),linear-gradient(90deg,#89dcdc,#c7eb5c 46.15%,#a920c1);border-radius:8px;overflow:hidden;padding:24px 220px 24px 24px;position:relative}.connectors-page .ai-plugin-callout__content{display:flex;flex-direction:column;gap:12px;padding-top:2px}.connectors-page .ai-plugin-callout__content p{font-size:13px;line-height:20px;margin:0}.connectors-page .ai-plugin-callout__actions{align-items:center;display:flex;gap:12px}.connectors-page .ai-plugin-callout__decoration{height:248px;position:absolute;right:8px;top:-15px;width:248px}.connectors-page>p{color:#949494;text-align:center}@media (max-width:680px){.connectors-page .ai-plugin-callout{padding:12px 84px 12px 12px}.connectors-page .ai-plugin-callout__decoration{height:134px;right:4px;top:-8px;width:134px}}@media (max-width:480px){.connectors-page{padding:8px}.connectors-page .components-item{padding:12px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child svg{height:32px;width:32px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child>.components-h-stack:last-child{align-items:flex-end;flex-direction:column}}")); + document.head.appendChild(style); +} + +// routes/connectors-home/ai-plugin-callout.tsx +var import_components4 = __toESM(require_components()); +var import_core_data2 = __toESM(require_core_data()); +var import_data2 = __toESM(require_data()); +var import_element4 = __toESM(require_element()); +var import_i18n3 = __toESM(require_i18n()); + +// routes/connectors-home/default-connectors.tsx +var import_components3 = __toESM(require_components()); +var import_i18n2 = __toESM(require_i18n()); +import { + __experimentalRegisterConnector as registerConnector, + __experimentalConnectorItem as ConnectorItem, + __experimentalDefaultConnectorSettings as DefaultConnectorSettings +} from "@wordpress/connectors"; + +// node_modules/@base-ui/utils/esm/useRefWithInit.js +var React2 = __toESM(require_react(), 1); +var UNINITIALIZED = {}; +function useRefWithInit(init, initArg) { + const ref = React2.useRef(UNINITIALIZED); + if (ref.current === UNINITIALIZED) { + ref.current = init(initArg); + } + return ref; +} + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var React5 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/useMergedRefs.js +function useMergedRefs(a, b, c, d) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChange(forkRef, a, b, c, d)) { + update(forkRef, [a, b, c, d]); + } + return forkRef.callback; +} +function useMergedRefsN(refs) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChangeN(forkRef, refs)) { + update(forkRef, refs); + } + return forkRef.callback; +} +function createForkRef() { + return { + callback: null, + cleanup: null, + refs: [] + }; +} +function didChange(forkRef, a, b, c, d) { + return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d; +} +function didChangeN(forkRef, newRefs) { + return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]); +} +function update(forkRef, refs) { + forkRef.refs = refs; + if (refs.every((ref) => ref == null)) { + forkRef.callback = null; + return; + } + forkRef.callback = (instance) => { + if (forkRef.cleanup) { + forkRef.cleanup(); + forkRef.cleanup = null; + } + if (instance != null) { + const cleanupCallbacks = Array(refs.length).fill(null); + for (let i = 0; i < refs.length; i += 1) { + const ref = refs[i]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const refCleanup = ref(instance); + if (typeof refCleanup === "function") { + cleanupCallbacks[i] = refCleanup; + } + break; + } + case "object": { + ref.current = instance; + break; + } + default: + } + } + forkRef.cleanup = () => { + for (let i = 0; i < refs.length; i += 1) { + const ref = refs[i]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const cleanupCallback = cleanupCallbacks[i]; + if (typeof cleanupCallback === "function") { + cleanupCallback(); + } else { + ref(null); + } + break; + } + case "object": { + ref.current = null; + break; + } + default: + } + } + }; + } + }; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +var React4 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/reactVersion.js +var React3 = __toESM(require_react(), 1); +var majorVersion = parseInt(React3.version, 10); +function isReactVersionAtLeast(reactVersionToCheck) { + return majorVersion >= reactVersionToCheck; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +function getReactElementRef(element) { + if (!/* @__PURE__ */ React4.isValidElement(element)) { + return null; + } + const reactElement = element; + const propsWithRef = reactElement.props; + return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; +} + +// node_modules/@base-ui/utils/esm/mergeObjects.js +function mergeObjects(a, b) { + if (a && !b) { + return a; + } + if (!a && b) { + return b; + } + if (a || b) { + return { + ...a, + ...b + }; + } + return void 0; +} + +// node_modules/@base-ui/react/esm/utils/getStateAttributesProps.js +function getStateAttributesProps(state, customMapping) { + const props = {}; + for (const key in state) { + const value = state[key]; + if (customMapping?.hasOwnProperty(key)) { + const customProps = customMapping[key](value); + if (customProps != null) { + Object.assign(props, customProps); + } + continue; + } + if (value === true) { + props[`data-${key.toLowerCase()}`] = ""; + } else if (value) { + props[`data-${key.toLowerCase()}`] = value.toString(); + } + } + return props; +} + +// node_modules/@base-ui/react/esm/utils/resolveClassName.js +function resolveClassName(className, state) { + return typeof className === "function" ? className(state) : className; +} + +// node_modules/@base-ui/react/esm/utils/resolveStyle.js +function resolveStyle(style, state) { + return typeof style === "function" ? style(state) : style; +} + +// node_modules/@base-ui/react/esm/merge-props/mergeProps.js +var EMPTY_PROPS = {}; +function mergeProps(a, b, c, d, e) { + let merged = { + ...resolvePropsGetter(a, EMPTY_PROPS) + }; + if (b) { + merged = mergeOne(merged, b); + } + if (c) { + merged = mergeOne(merged, c); + } + if (d) { + merged = mergeOne(merged, d); + } + if (e) { + merged = mergeOne(merged, e); + } + return merged; +} +function mergePropsN(props) { + if (props.length === 0) { + return EMPTY_PROPS; + } + if (props.length === 1) { + return resolvePropsGetter(props[0], EMPTY_PROPS); + } + let merged = { + ...resolvePropsGetter(props[0], EMPTY_PROPS) + }; + for (let i = 1; i < props.length; i += 1) { + merged = mergeOne(merged, props[i]); + } + return merged; +} +function mergeOne(merged, inputProps) { + if (isPropsGetter(inputProps)) { + return inputProps(merged); + } + return mutablyMergeInto(merged, inputProps); +} +function mutablyMergeInto(mergedProps, externalProps) { + if (!externalProps) { + return mergedProps; + } + for (const propName in externalProps) { + const externalPropValue = externalProps[propName]; + switch (propName) { + case "style": { + mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); + break; + } + case "className": { + mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); + break; + } + default: { + if (isEventHandler(propName, externalPropValue)) { + mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); + } else { + mergedProps[propName] = externalPropValue; + } + } + } + } + return mergedProps; +} +function isEventHandler(key, value) { + const code0 = key.charCodeAt(0); + const code1 = key.charCodeAt(1); + const code2 = key.charCodeAt(2); + return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); +} +function isPropsGetter(inputProps) { + return typeof inputProps === "function"; +} +function resolvePropsGetter(inputProps, previousProps) { + if (isPropsGetter(inputProps)) { + return inputProps(previousProps); + } + return inputProps ?? EMPTY_PROPS; +} +function mergeEventHandlers(ourHandler, theirHandler) { + if (!theirHandler) { + return ourHandler; + } + if (!ourHandler) { + return theirHandler; + } + return (event) => { + if (isSyntheticEvent(event)) { + const baseUIEvent = event; + makeEventPreventable(baseUIEvent); + const result2 = theirHandler(baseUIEvent); + if (!baseUIEvent.baseUIHandlerPrevented) { + ourHandler?.(baseUIEvent); + } + return result2; + } + const result = theirHandler(event); + ourHandler?.(event); + return result; + }; +} +function makeEventPreventable(event) { + event.preventBaseUIHandler = () => { + event.baseUIHandlerPrevented = true; + }; + return event; +} +function mergeClassNames(ourClassName, theirClassName) { + if (theirClassName) { + if (ourClassName) { + return theirClassName + " " + ourClassName; + } + return theirClassName; + } + return ourClassName; +} +function isSyntheticEvent(event) { + return event != null && typeof event === "object" && "nativeEvent" in event; +} + +// node_modules/@base-ui/utils/esm/empty.js +var EMPTY_ARRAY = Object.freeze([]); +var EMPTY_OBJECT = Object.freeze({}); + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var import_react = __toESM(require_react(), 1); +function useRenderElement(element, componentProps, params = {}) { + const renderProp = componentProps.render; + const outProps = useRenderElementProps(componentProps, params); + if (params.enabled === false) { + return null; + } + const state = params.state ?? EMPTY_OBJECT; + return evaluateRenderProp(element, renderProp, outProps, state); +} +function useRenderElementProps(componentProps, params = {}) { + const { + className: classNameProp, + style: styleProp, + render: renderProp + } = componentProps; + const { + state = EMPTY_OBJECT, + ref, + props, + stateAttributesMapping, + enabled = true + } = params; + const className = enabled ? resolveClassName(classNameProp, state) : void 0; + const style = enabled ? resolveStyle(styleProp, state) : void 0; + const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; + const outProps = enabled ? mergeObjects(stateProps, Array.isArray(props) ? mergePropsN(props) : props) ?? EMPTY_OBJECT : EMPTY_OBJECT; + if (typeof document !== "undefined") { + if (!enabled) { + useMergedRefs(null, null); + } else if (Array.isArray(ref)) { + outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); + } else { + outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); + } + } + if (!enabled) { + return EMPTY_OBJECT; + } + if (className !== void 0) { + outProps.className = mergeClassNames(outProps.className, className); + } + if (style !== void 0) { + outProps.style = mergeObjects(outProps.style, style); + } + return outProps; +} +function evaluateRenderProp(element, render, props, state) { + if (render) { + if (typeof render === "function") { + return render(props, state); + } + const mergedProps = mergeProps(props, render.props); + mergedProps.ref = props.ref; + return /* @__PURE__ */ React5.cloneElement(render, mergedProps); + } + if (element) { + if (typeof element === "string") { + return renderTag(element, props); + } + } + throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage(8)); +} +function renderTag(Tag, props) { + if (Tag === "button") { + return /* @__PURE__ */ (0, import_react.createElement)("button", { + type: "button", + ...props, + key: props.key + }); + } + if (Tag === "img") { + return /* @__PURE__ */ (0, import_react.createElement)("img", { + alt: "", + ...props, + key: props.key + }); + } + return /* @__PURE__ */ React5.createElement(Tag, props); +} + +// node_modules/@base-ui/react/esm/use-render/useRender.js +function useRender(params) { + return useRenderElement(params.defaultTagName ?? "div", params, params); +} + +// packages/ui/build-module/badge/badge.mjs +var import_element2 = __toESM(require_element(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='244b5c59c0']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "244b5c59c0"); + style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._96e6251aad1a6136__badge{border-radius:var(--wpds-border-radius-lg,8px);font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-sm,12px);font-weight:var(--wpds-font-weight-regular,400);line-height:var(--wpds-font-line-height-xs,16px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wpds-dimension-padding-sm,8px)}._99f7158cb520f750__is-high-intent{background-color:var(--wpds-color-bg-surface-error,#f6e6e3);color:var(--wpds-color-fg-content-error,#470000)}.c20ebef2365bc8b7__is-medium-intent{background-color:var(--wpds-color-bg-surface-warning,#fde6bd);color:var(--wpds-color-fg-content-warning,#2e1900)}._365e1626c6202e52__is-low-intent{background-color:var(--wpds-color-bg-surface-caution,#fee994);color:var(--wpds-color-fg-content-caution,#281d00)}._33f8198127ddf4ef__is-stable-intent{background-color:var(--wpds-color-bg-surface-success,#c5f7cc);color:var(--wpds-color-fg-content-success,#002900)}._04c1aca8fc449412__is-informational-intent{background-color:var(--wpds-color-bg-surface-info,#deebfa);color:var(--wpds-color-fg-content-info,#001b4f)}._90726e69d495ec19__is-draft-intent{background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}._898f4a544993bd39__is-none-intent{background-color:var(--wpds-color-bg-surface-neutral,#f8f8f8);color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}}')); + document.head.appendChild(style); +} +var style_default = { "badge": "_96e6251aad1a6136__badge", "is-high-intent": "_99f7158cb520f750__is-high-intent", "is-medium-intent": "c20ebef2365bc8b7__is-medium-intent", "is-low-intent": "_365e1626c6202e52__is-low-intent", "is-stable-intent": "_33f8198127ddf4ef__is-stable-intent", "is-informational-intent": "_04c1aca8fc449412__is-informational-intent", "is-draft-intent": "_90726e69d495ec19__is-draft-intent", "is-none-intent": "_898f4a544993bd39__is-none-intent" }; +var Badge = (0, import_element2.forwardRef)(function Badge2({ children, intent = "none", render, className, ...props }, ref) { + const element = useRender({ + render, + defaultTagName: "span", + ref, + props: mergeProps(props, { + className: clsx_default( + style_default.badge, + style_default[`is-${intent}-intent`], + className + ), + children + }) + }); + return element; +}); + +// routes/connectors-home/use-connector-plugin.ts +var import_core_data = __toESM(require_core_data()); +var import_data = __toESM(require_data()); +var import_element3 = __toESM(require_element()); +var import_i18n = __toESM(require_i18n()); +function useConnectorPlugin({ + pluginSlug, + settingName, + isInstalled, + isActivated, + keySource = "none", + initialIsConnected = false +}) { + const [isExpanded, setIsExpanded] = (0, import_element3.useState)(false); + const [isBusy, setIsBusy] = (0, import_element3.useState)(false); + const [connectedState, setConnectedState] = (0, import_element3.useState)(initialIsConnected); + const [pluginStatusOverride, setPluginStatusOverride] = (0, import_element3.useState)(null); + const { + derivedPluginStatus, + canManagePlugins, + currentApiKey, + canInstallPlugins + } = (0, import_data.useSelect)( + (select) => { + const store2 = select(import_core_data.store); + const siteSettings = store2.getEntityRecord("root", "site"); + const apiKey = siteSettings?.[settingName] ?? ""; + const canCreate = !!store2.canUser("create", { + kind: "root", + name: "plugin" + }); + if (!pluginSlug) { + const hasLoaded = store2.hasFinishedResolution( + "getEntityRecord", + ["root", "site"] + ); + return { + derivedPluginStatus: hasLoaded ? "active" : "checking", + canManagePlugins: void 0, + currentApiKey: apiKey, + canInstallPlugins: canCreate + }; + } + const plugins = store2.getEntityRecords( + "root", + "plugin" + ); + if (plugins === null) { + const hasFinished = store2.hasFinishedResolution( + "getEntityRecords", + ["root", "plugin"] + ); + if (!hasFinished) { + return { + derivedPluginStatus: "checking", + canManagePlugins: void 0, + currentApiKey: apiKey, + canInstallPlugins: canCreate + }; + } + let status2 = "not-installed"; + if (isActivated) { + status2 = "active"; + } else if (isInstalled) { + status2 = "inactive"; + } + return { + derivedPluginStatus: status2, + canManagePlugins: false, + currentApiKey: apiKey, + canInstallPlugins: canCreate + }; + } + const plugin = plugins.find( + (p) => p.plugin === `${pluginSlug}/plugin` + ); + let status = "not-installed"; + if (plugin) { + status = plugin.status === "active" ? "active" : "inactive"; + } + return { + derivedPluginStatus: status, + canManagePlugins: true, + currentApiKey: apiKey, + canInstallPlugins: canCreate + }; + }, + [pluginSlug, settingName, isInstalled, isActivated] + ); + const pluginStatus = pluginStatusOverride ?? derivedPluginStatus; + const canActivatePlugins = canManagePlugins; + const isConnected = pluginStatus === "active" && connectedState || // After install/activate, if settings re-fetch reveals an existing key, + // update connected state (mirrors what the server would report on page load). + pluginStatusOverride === "active" && !!currentApiKey; + const { saveEntityRecord, invalidateResolution } = (0, import_data.useDispatch)(import_core_data.store); + const installPlugin = async () => { + if (!pluginSlug) { + return; + } + setIsBusy(true); + try { + await saveEntityRecord( + "root", + "plugin", + { slug: pluginSlug, status: "active" }, + { throwOnError: true } + ); + setPluginStatusOverride("active"); + invalidateResolution("getEntityRecord", ["root", "site"]); + setIsExpanded(true); + } catch { + } finally { + setIsBusy(false); + } + }; + const activatePlugin = async () => { + if (!pluginSlug) { + return; + } + setIsBusy(true); + try { + await saveEntityRecord( + "root", + "plugin", + { plugin: `${pluginSlug}/plugin`, status: "active" }, + { throwOnError: true } + ); + setPluginStatusOverride("active"); + invalidateResolution("getEntityRecord", ["root", "site"]); + setIsExpanded(true); + } catch { + } finally { + setIsBusy(false); + } + }; + const handleButtonClick = () => { + if (pluginStatus === "not-installed") { + if (canInstallPlugins === false) { + return; + } + installPlugin(); + } else if (pluginStatus === "inactive") { + if (canActivatePlugins === false) { + return; + } + activatePlugin(); + } else { + setIsExpanded(!isExpanded); + } + }; + const getButtonLabel = () => { + if (isBusy) { + return pluginStatus === "not-installed" ? (0, import_i18n.__)("Installing\u2026") : (0, import_i18n.__)("Activating\u2026"); + } + if (isExpanded) { + return (0, import_i18n.__)("Cancel"); + } + if (isConnected) { + return (0, import_i18n.__)("Edit"); + } + switch (pluginStatus) { + case "checking": + return (0, import_i18n.__)("Checking\u2026"); + case "not-installed": + return (0, import_i18n.__)("Install"); + case "inactive": + return (0, import_i18n.__)("Activate"); + case "active": + return (0, import_i18n.__)("Set up"); + } + }; + const saveApiKey = async (apiKey) => { + const previousApiKey = currentApiKey; + try { + const updatedRecord = await saveEntityRecord( + "root", + "site", + { [settingName]: apiKey }, + { throwOnError: true } + ); + const record = updatedRecord; + const returnedKey = record?.[settingName]; + if (apiKey && (returnedKey === previousApiKey || !returnedKey)) { + throw new Error( + "It was not possible to connect to the provider using this key." + ); + } + setConnectedState(true); + } catch (error) { + console.error("Failed to save API key:", error); + throw error; + } + }; + const removeApiKey = async () => { + try { + await saveEntityRecord( + "root", + "site", + { [settingName]: "" }, + { throwOnError: true } + ); + setConnectedState(false); + } catch (error) { + console.error("Failed to remove API key:", error); + throw error; + } + }; + return { + pluginStatus, + canInstallPlugins, + canActivatePlugins, + isExpanded, + setIsExpanded, + isBusy, + isConnected, + currentApiKey, + keySource, + handleButtonClick, + getButtonLabel, + saveApiKey, + removeApiKey + }; +} + +// routes/connectors-home/logos.tsx +var OpenAILogo = () => /* @__PURE__ */ React.createElement( + "svg", + { + width: "40", + height: "40", + viewBox: "0 0 24 24", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, + /* @__PURE__ */ React.createElement( + "path", + { + d: "M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364l2.0201-1.1685a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4043-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z", + fill: "currentColor" + } + ) +); +var ClaudeLogo = () => /* @__PURE__ */ React.createElement( + "svg", + { + width: "40", + height: "40", + viewBox: "0 0 32 32", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, + /* @__PURE__ */ React.createElement( + "path", + { + d: "M6.2 21.024L12.416 17.536L12.52 17.232L12.416 17.064H12.112L11.072 17L7.52 16.904L4.44 16.776L1.456 16.616L0.704 16.456L0 15.528L0.072 15.064L0.704 14.64L1.608 14.72L3.608 14.856L6.608 15.064L8.784 15.192L12.008 15.528H12.52L12.592 15.32L12.416 15.192L12.28 15.064L9.176 12.96L5.816 10.736L4.056 9.456L3.104 8.808L2.624 8.2L2.416 6.872L3.28 5.92L4.44 6L4.736 6.08L5.912 6.984L8.424 8.928L11.704 11.344L12.184 11.744L12.376 11.608L12.4 11.512L12.184 11.152L10.4 7.928L8.496 4.648L7.648 3.288L7.424 2.472C7.344 2.136 7.288 1.856 7.288 1.512L8.272 0.176L8.816 0L10.128 0.176L10.68 0.656L11.496 2.52L12.816 5.456L14.864 9.448L15.464 10.632L15.784 11.728L15.904 12.064H16.112V11.872L16.28 9.624L16.592 6.864L16.896 3.312L17 2.312L17.496 1.112L18.48 0.464L19.248 0.832L19.88 1.736L19.792 2.32L19.416 4.76L18.68 8.584L18.2 11.144H18.48L18.8 10.824L20.096 9.104L22.272 6.384L23.232 5.304L24.352 4.112L25.072 3.544H26.432L27.432 5.032L26.984 6.568L25.584 8.344L24.424 9.848L22.76 12.088L21.72 13.88L21.816 14.024L22.064 14L25.824 13.2L27.856 12.832L30.28 12.416L31.376 12.928L31.496 13.448L31.064 14.512L28.472 15.152L25.432 15.76L20.904 16.832L20.848 16.872L20.912 16.952L22.952 17.144L23.824 17.192H25.96L29.936 17.488L30.976 18.176L31.6 19.016L31.496 19.656L29.896 20.472L27.736 19.96L22.696 18.76L20.968 18.328H20.728V18.472L22.168 19.88L24.808 22.264L28.112 25.336L28.28 26.096L27.856 26.696L27.408 26.632L24.504 24.448L23.384 23.464L20.848 21.328H20.68V21.552L21.264 22.408L24.352 27.048L24.512 28.472L24.288 28.936L23.488 29.216L22.608 29.056L20.8 26.52L18.936 23.664L17.432 21.104L17.248 21.208L16.36 30.768L15.944 31.256L14.984 31.624L14.184 31.016L13.76 30.032L14.184 28.088L14.696 25.552L15.112 23.536L15.488 21.032L15.712 20.2L15.696 20.144L15.512 20.168L13.624 22.76L10.752 26.64L8.48 29.072L7.936 29.288L6.992 28.8L7.08 27.928L7.608 27.152L10.752 23.152L12.648 20.672L13.872 19.24L13.864 19.032H13.792L5.44 24.456L3.952 24.648L3.312 24.048L3.392 23.064L3.696 22.744L6.208 21.016L6.2 21.024Z", + fill: "#D97757" + } + ) +); +var DefaultConnectorLogo = () => /* @__PURE__ */ React.createElement( + "svg", + { + width: "40", + height: "40", + viewBox: "0 0 32 32", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, + /* @__PURE__ */ React.createElement( + "path", + { + d: "M0 4C0 1.79086 1.79086 0 4 0H28C30.2091 0 32 1.79086 32 4V28C32 30.2091 30.2091 32 28 32H4C1.79086 32 0 30.2091 0 28V4Z", + fill: "#F0F0F0" + } + ), + /* @__PURE__ */ React.createElement( + "path", + { + d: "M14.5 8V12H17.5V8H19V12H20.5C20.7652 12 21.0196 12.1054 21.2071 12.2929C21.3946 12.4804 21.5 12.7348 21.5 13V17L18.5 21V23C18.5 23.2652 18.3946 23.5196 18.2071 23.7071C18.0196 23.8946 17.7652 24 17.5 24H14.5C14.2348 24 13.9804 23.8946 13.7929 23.7071C13.6054 23.5196 13.5 23.2652 13.5 23V21L10.5 17V13C10.5 12.7348 10.6054 12.4804 10.7929 12.2929C10.9804 12.1054 11.2348 12 11.5 12H13V8H14.5ZM15 20.5V22.5H17V20.5L20 16.5V13.5H12V16.5L15 20.5Z", + fill: "#949494" + } + ) +); +var GeminiLogo = () => /* @__PURE__ */ React.createElement( + "svg", + { + width: "40", + height: "40", + style: { flex: "none", lineHeight: 1 }, + viewBox: "0 0 24 24", + xmlns: "http://www.w3.org/2000/svg" + }, + /* @__PURE__ */ React.createElement( + "path", + { + d: "M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z", + fill: "#3186FF" + } + ), + /* @__PURE__ */ React.createElement( + "path", + { + d: "M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z", + fill: "url(#lobe-icons-gemini-fill-0)" + } + ), + /* @__PURE__ */ React.createElement( + "path", + { + d: "M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z", + fill: "url(#lobe-icons-gemini-fill-1)" + } + ), + /* @__PURE__ */ React.createElement( + "path", + { + d: "M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z", + fill: "url(#lobe-icons-gemini-fill-2)" + } + ), + /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement( + "linearGradient", + { + gradientUnits: "userSpaceOnUse", + id: "lobe-icons-gemini-fill-0", + x1: "7", + x2: "11", + y1: "15.5", + y2: "12" + }, + /* @__PURE__ */ React.createElement("stop", { stopColor: "#08B962" }), + /* @__PURE__ */ React.createElement("stop", { offset: "1", stopColor: "#08B962", stopOpacity: "0" }) + ), /* @__PURE__ */ React.createElement( + "linearGradient", + { + gradientUnits: "userSpaceOnUse", + id: "lobe-icons-gemini-fill-1", + x1: "8", + x2: "11.5", + y1: "5.5", + y2: "11" + }, + /* @__PURE__ */ React.createElement("stop", { stopColor: "#F94543" }), + /* @__PURE__ */ React.createElement("stop", { offset: "1", stopColor: "#F94543", stopOpacity: "0" }) + ), /* @__PURE__ */ React.createElement( + "linearGradient", + { + gradientUnits: "userSpaceOnUse", + id: "lobe-icons-gemini-fill-2", + x1: "3.5", + x2: "17.5", + y1: "13.5", + y2: "12" + }, + /* @__PURE__ */ React.createElement("stop", { stopColor: "#FABC12" }), + /* @__PURE__ */ React.createElement("stop", { offset: ".46", stopColor: "#FABC12", stopOpacity: "0" }) + )) +); + +// routes/connectors-home/default-connectors.tsx +function getConnectorData() { + try { + const parsed = JSON.parse( + document.getElementById( + "wp-script-module-data-options-connectors-wp-admin" + )?.textContent ?? "" + ); + return parsed?.connectors ?? {}; + } catch { + return {}; + } +} +var CONNECTOR_LOGOS = { + google: GeminiLogo, + openai: OpenAILogo, + anthropic: ClaudeLogo +}; +function getConnectorLogo(connectorId, name, logoUrl) { + if (logoUrl) { + return /* @__PURE__ */ React.createElement("img", { src: logoUrl, alt: name, width: 40, height: 40 }); + } + const Logo = CONNECTOR_LOGOS[connectorId]; + if (Logo) { + return /* @__PURE__ */ React.createElement(Logo, null); + } + return /* @__PURE__ */ React.createElement(DefaultConnectorLogo, null); +} +var ConnectedBadge = () => /* @__PURE__ */ React.createElement( + "span", + { + style: { + color: "#345b37", + backgroundColor: "#eff8f0", + padding: "4px 12px", + borderRadius: "2px", + fontSize: "13px", + fontWeight: 500, + whiteSpace: "nowrap" + } + }, + (0, import_i18n2.__)("Connected") +); +var UnavailableActionBadge = () => /* @__PURE__ */ React.createElement(Badge, null, (0, import_i18n2.__)("Not available")); +function ApiKeyConnector({ + label, + description, + pluginSlug, + settingName, + helpUrl, + icon, + isInstalled, + isActivated, + keySource: initialKeySource, + initialIsConnected +}) { + let helpLabel; + try { + if (helpUrl) { + helpLabel = new URL(helpUrl).hostname; + } + } catch { + } + const { + pluginStatus, + canInstallPlugins, + canActivatePlugins, + isExpanded, + setIsExpanded, + isBusy, + isConnected, + currentApiKey, + keySource, + handleButtonClick, + getButtonLabel, + saveApiKey, + removeApiKey + } = useConnectorPlugin({ + pluginSlug, + settingName, + isInstalled, + isActivated, + keySource: initialKeySource, + initialIsConnected + }); + const isExternallyConfigured = keySource === "env" || keySource === "constant"; + const showUnavailableBadge = pluginStatus === "not-installed" && canInstallPlugins === false || pluginStatus === "inactive" && canActivatePlugins === false; + const showActionButton = !showUnavailableBadge; + return /* @__PURE__ */ React.createElement( + ConnectorItem, + { + className: pluginSlug ? `connector-item--${pluginSlug}` : void 0, + icon, + name: label, + description, + actionArea: /* @__PURE__ */ React.createElement(import_components3.__experimentalHStack, { spacing: 3, expanded: false }, isConnected && /* @__PURE__ */ React.createElement(ConnectedBadge, null), showUnavailableBadge && /* @__PURE__ */ React.createElement(UnavailableActionBadge, null), showActionButton && /* @__PURE__ */ React.createElement( + import_components3.Button, + { + variant: isExpanded || isConnected ? "tertiary" : "secondary", + size: isExpanded || isConnected ? void 0 : "compact", + onClick: handleButtonClick, + disabled: pluginStatus === "checking" || isBusy, + isBusy, + "aria-expanded": isExpanded + }, + getButtonLabel() + )) + }, + isExpanded && pluginStatus === "active" && /* @__PURE__ */ React.createElement( + DefaultConnectorSettings, + { + key: isConnected ? "connected" : "setup", + initialValue: isExternallyConfigured ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : currentApiKey, + helpUrl, + helpLabel, + readOnly: isConnected || isExternallyConfigured, + keySource, + onRemove: isExternallyConfigured ? void 0 : removeApiKey, + onSave: async (apiKey) => { + await saveApiKey(apiKey); + setIsExpanded(false); + } + } + ) + ); +} +function registerDefaultConnectors() { + const connectors = getConnectorData(); + const sanitize = (s) => s.replace(/[^a-z0-9-]/gi, "-"); + for (const [connectorId, data] of Object.entries(connectors)) { + const { authentication } = data; + if (data.type !== "ai_provider" || authentication.method !== "api_key") { + continue; + } + const connectorName = `${sanitize(data.type)}/${sanitize( + connectorId + )}`; + registerConnector(connectorName, { + label: data.name, + description: data.description, + render: (props) => /* @__PURE__ */ React.createElement( + ApiKeyConnector, + { + ...props, + pluginSlug: data.plugin?.slug, + settingName: authentication.settingName, + helpUrl: authentication.credentialsUrl ?? void 0, + icon: getConnectorLogo( + connectorId, + data.name, + data.logoUrl + ), + isInstalled: data.plugin?.isInstalled, + isActivated: data.plugin?.isActivated, + keySource: authentication.keySource, + initialIsConnected: authentication.isConnected + } + ) + }); + } +} + +// routes/connectors-home/wp-logo-decoration.tsx +function WpLogoDecoration() { + return /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout__decoration", "aria-hidden": "true" }, /* @__PURE__ */ React.createElement( + "svg", + { + viewBox: "0 0 248 248", + xmlns: "http://www.w3.org/2000/svg", + xmlnsXlink: "http://www.w3.org/1999/xlink", + focusable: "false", + style: { width: "100%", height: "100%" } + }, + /* @__PURE__ */ React.createElement( + "image", + { + href: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAAD4CAYAAADB0SsLAACAAElEQVR4XuzdB7hlRZEH8D73zRBniJLDzBAEVFQMKCaCWXENa1oTYM45hwXEtOa0ZgVzWnPOBHPWVcxgzjnrGvb/O91n5s5lZnjAe4Bw6vvqO3XPPed0rO6q6urqUkYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUaYD3RdtxY9/XuEEUb4F4aBoWdxhBFG+BeHxsxg0+BmwSXBrYPbBTfOI3Dz4NKZV0cYYYTFhMlkskGcm5tbC6f/m5mtlwavGLxacKt8+k7BY4N7B/cLHhbceTrtaRi+A2bTX7JkSY9Lly4tG220UY8jjDDCmcAsM8/iLHOfCYObtS8bPCi4ZfCIJPHw4J6lMvlVgzuslYEpmP7WbPoDc08z+MYbEwpGGGGEdcIUo24V3CG4WXB5o103R4fBtgpuFkRvm3ubBrcPXiTMuElw+66K4uhdgrt3VUx33Se4PMltF1wRREOMTmTfrNHL2/s7BLfMtzdq+dgmaW4UBt8+zH2RYHh7o+2C24fBl45MPsKFGsx8U4w8O+MO918U/FnwLsGH5f5Pcz0ueJT7YbAXB68f/HnwncGr5pmfBD/Z1Rn79OA3ggcEP5N3fpzrFYLvDqKvkaycEPxx8BbBxwd/Erxv8F6NflKeu0lL+1W5HtzS/lDKcLlcfxLm/lLw0mHq0zbZZJOf5rqPmVwZlWWEES5UQJwddNdp0RozTGPuvTb4z+B9MXbu/SPXpwbv6n7efV3wxo3+SPDQPPPP4Le6ysi/C/46ePk8813Phb5K8FPtuesnO28K/jNIbH9Wox8RfEijn5fnbtWef2fwmi1Pn096Vwz+I+X4Ucp0uTD1bzbddNN/ht5vGMC6kcFHuDCBma3prBuHCTYJg4QPJht1VQyeBKfp/YJmZeL1KnSe3TO4W967Wt6/WK475nrl4KVCbx28XJ7bv6u6tpkbbtHumdXd913PbVOqHn75UkX13RvN4LYjOs+sCBL56e/7JO1tglcJXiq4ZdK7StK+fHDLlOmg4JVCL8/9jfO/ciwp1VK/SamWela4gR5hhH9tMEPDaWNUcJsw+qeDX8l/FwsjvC2McGoQc704+OXQ1w4eG/x88NbBu6Pz7IOCN897X8w3n5ZvHZDvvCLX/8zvTlrDzDkfPDNoz+2bb94r12sEr9TyQbowaHw2ab4vaNY+JfhJ94Nme2U6KJ95WfDLwesGn9ToO86kMe88jTDC+QKGDovh4MDowR2iqxJ/idaXy3+no/Psobme0uj/yPWVjX5g8AnoPPtszIbOd94ZvFrE4q9E7315mHzO9+fL5GcGU8/K49OCBprrlZqnrwWv1OhfJs0Dg3/xO1ez/XfRQXr+xxp9y+DrG82KP8II/5owy0wzDM76fI3gdXOPZZoYfr2uOqBcIa/TjYnIl87vfwvuEbxYoy+e5/fMezcMQxONt8v1KpnFLxWcLOQ69FT+ifX7BnfuqjX9Bl1VF1juD09erhFkVb9O8Lru5//Duqrjs8QbCAwMuwUvU2r5LjqV1AgjnH9hihFW/27XywQ/GDw+nX6fMOP7g28JE+yR6+uC7wi9V/573qSKtEReDLRvXqc3n2GggNODxSD2L5aTyWzasygv68Lh/wZPDb6j1PX2Bzf634J3Dn6wXW/caA44PQzvD+mMMML5Da5Vqgj7veAV0WFCIuwBYc5eRE/HZeH+YXuOjnux0Ga/nWaZaejomHuawReLuQeYzcNsfoY8zTJ4A5z5pVLF8lsF39zoBwSf0eint9/o99TXRhjhfA6YNJfb5nqjdPrtgrcOI9wiuG3wdsE7BTmi3Cx4Z88Ht+qqKMx3fPaT/4qAwc3OdwnuFbx68K7BSwYvGzyyVMs9l1m0/0cY4XwFNwy+vNROzGqMfmhwn+DzgkeHWVeEwZ87qcaqLaZnu2HGm8WzA9Oz5/R31kcPvwfw/rruLxIwuj0/eJMgAyP69qUyvDq0Hq8O0U8pdbltLVhMyWWEEQZ4bKni5f+U6jCC/mTw2o3+QddEdBgm2nl9DA7OBcY6v8BLSq2TZwYf1GgiPFEe/flSZ3T0r4LLvDSoJwNSU0YYYTHhysFHBm8QvHipS0A6KSeSxwTvE6bdNddjgo/oquPJWoys016QYT2D1+Glusdep1TJB81llpFRHd62VOebhwXvHrRpZrXOf27ZIEa48IClK3qkjRjEcmvTDGkHBh9VqmWYkQx9ZH1l3TDfWXp9IvN63t++VAeSm5Wa12NKzQtbgBmSpIFhMMvjSl2qunWjDyiV4dCHBA8uleGIzxcpVRrxzFowSCDrgvXdnwdcotR8367U/KI5+rBNPC7fPSYMbpPL7cLYd2uOQz3DjzDCOQEd3Hout84TShUd6YZ0xVkR/Yv1lTUwzNrrYc6FgP2Dny1VzLXe3KsEwcsFf9doS1XfCP6j1AHJ0pT79ogTmf8ePK7UwcH915VqACNGW85aLyxg2ejhsyL6T7vq6deXKcy8f5j6pE033fSrYfCLmskHS/4II5xdGLZW8qUmSjIKEcuJmK8olUno2oOBqIeh029otlsgMIPfo1T1gD/5k4P/Fdyl1PVlTLqy1CWp/y6Vce8QfG6pUsi/l2oUNFsLAoE2w29bahkNGgsK6xkQBkMlMZ2R7YTgf3V1m+szU4dPCYPvFLxjGPu+uVqVWMueMcII8wE9Rae3rLOqVLdLsxjGMCuarV0XC8xe0iOyWlIygPB00+mJ4oeWyryYlHcYRqS33jCdfMtcbx68aegt3CuV8bcO8nO/TakDAi+62wQNXNJwn5pBD3bfrOm/I0stP3FfntSLAU+euLDauOKZO4R23wBoVcHz5xiadGD14XbB/5irnnP/Eea+Q64XsfyY+3fLM7u1Z2c/McIIZxAzWb6+XqpYiFne1ej7lDq7oc1+iwU8vqTB+8tMTHx+TqmztPtvK1XMJm5/IXi1dv/npTJrL86mPGbe37bf3Ea/1u7Tud/X7hOLbXRBm+3/s9FmUrow+pRSZ3fpnV6qtOL+H/MtA92QnkHoR+05g9Q5htYuBp4+jTD0AWHovzVaOKre9z3X6w9tODL5CGvBdMeY6hyDm6XObI80mrhqVqe/mqV6GN5xXSBRnGHs7aXq/WbEt5bKbGZutIGG3v2WUq31DID2dxt0VgRfXarqwAf8Bf5L3jxjR5fBgbOJMtnNZnAgCbjPsGbGRyufVQK0lQLSBPppeWfP4JuDx3d1nf9Vwf9xv9SBSB4x5VmGaVF7qk12Db43/705TL1H8JXBtwf3zr1nd3W/uu2x62rHES7MMHSorsYvu2ZXN3YQec1GGMymiUuXKgqvnHp1IQDD0uUFRJSeWVl6VAGDCesxhmWxX1mqVZuOjJHAwaUyHkeQQ4IHdjViKoOaAA8bdzXo4qHBTXOPjzy3WKK7TSzKy6Nuj/y+VlfFXGkS5cVss3nEzM1X3juet1dc+KerT+r+cOGiRHs5LLh5V7eV+haVgE6tTMR1hsobBQ0O82bA4VntBMPUS+fqJhcbXOxLt/nlepO60UVZb9xVnX3eaYxwAQVLLHPNvzsdxM6pX5Qq7mE8Vmli4U1LnbnQROaFAmrAD0r9rln0w6WKtjdP+sN20fsHe2eaXPlv03s9/4ZSBwD3P93Vvdfu/zC0wQj9f6EvGSS29+JzcPANx8CD2kEyMPN7hnhu7RnNsv4f7ZkPlDVWbdtFe7E8dfbb1N2l+dn7PVe3wH6/vW8g+kR7h5pjpQH98K4xrHqfdlxZH3h+aKfgdhtvvHGfXt65Qn6fjs73rpPnTkbnehfvDOmMcCEEwQEHRwmdKx3FTETU+2yudNeXlbrkpaNaEvvfUg1ZPeg8CwBvDH66VJH52UEhlQ4OPjJ5+EyuDGW37yoT37OreqZnHt3VKC1ooZVEakG/MbgyeFLwg/nGykkNKuG/iwZPaGl4l3X60/nfrHz/dp//PMOZ9B7c1YHuU8Gnhr6U+6FfkXeIxp9Knb07uGrp0qUnpQ4/HnqvoDzIuy2vVht865Cg0FPu3xbTDQw+MPlArw+mvNe2Tpt9IvjV/L543nlTvvXloNmbuP7ZIGPj6ll/ZPILGWDuhkvSUQ5Ip7l0OstmwUunMxwYXJYOQty0AYQ/pB6i982bq3WwBt4jRhO7fcsVQ6PttSY2C9dEdL3spEZS3SV4mUn1Xb9IkGHJdVlQHncKinluhqYDA9FULhrsgqLFQExz0eAlQ4sRtYf352pYpV2DB4QWqdWGGOltHbRP/TK5L4KqjS/S3j3oHXqu0FG+JVSUaC6CTeyfOrxUrsRn4aSUw7sGgsvP1b3vK3O9Yq7b57rLXA0UsWve2d5MHNx72AK7Phj+D05auiLZTFp+klx38eCVJrWuVoW+wmTKPXiECwFMMTfcWbDAXP8RRr9sOk5vkU2nob/qLFfv6tLPmcLQiQbs1uiAK0oVTX2bB9mPct9vrq1f9p+OGHw/Ou/eMOkfj04HvmfwGHTuPSn/sXh7nlGr35Ka6ylBa9nob+W5SwT/lPd+h9ly7UXmSWVgszH66vmvD7o4qUtP/fbNXB8SNJujbZCxJCa9t4em16OFbbpUe/dHZtHU3e9Fqgl9qdTht9r7dOOTGn2T4Ksafc/ctzKA/q+800epyXtvxbwkqpk2KtMwMPmSNqPPrb0OztovX7cJUjHQx3rGs6Nb6wUc0glncdugkL/fTuPrqJ9KRxAa2F5tgQb76CVTzLpOGDrb0OFcW4dzNUDQrz8QevdcPx78elcNW+/r6p5xMyzR93t59xrpwE9Mxxax9DbB+yRfGOlhwZtOapTUZ4QW9PAHwf9JmvsHvx8UG22vvPP14FeCewQ/EfTcfvn/rZ4LfcXg8/PdH+a/64d+VO5/L/Sdg3d0P/eOC17LfcyS62W9G/pdue4T/G5Qfe2Z508Nnp539wmenHveF1r5da1M1879ZylHrrcLPlTeXYNHpKw/zn8vnmXu6baaBv8tmWHw1kbE9Z/k3k1yNSCqk/svnRk4RrgAwtDIraH7WVnHCb1f8OIbV3F9WToNy2wv902q6LdB2c7frZP1hwFMqhjtN9GXWKsjEkUxt2fpyHu1DrnbpIrV7u8U3DfPTZbWAwX2TX42ynULdHB5/tskKELMRZZUERW9k7LlundwBTqI6aDyuuc/z+y8tDJhF9wGnf/ncl2WK3rTliYXUOl2eeeiwe2UsTH2zgOd+6vad/du70jboEJ0ByuCF8/vTYPySZQXhVX5hJraMbhVkKFuRXAT17TFTsFNguhdg5MNMab6a4OpqK4izCrDnsHLJf0dllafdfVxEd9RLyNcgGBgQh0wjXuJzTff/J9m7jT2PhHRf77ZZpv9tnWm1eJfY9rZT60Fw8zeGPrf8x0i4at0/txnpPO/JTdWbzMf77PPBL9vBs+zH096f8x9NoA3h/5T8ned5OM5y5Ytk8c7Bh8W/L/cPy7/39ozwRcHD8tzf87994W+TPAPob8Y3DfP/yz44/x/0eBXQ/vuJfPMibmir5r7r5RGrjfJ/0+QRvDewbu3tJ+a566f//+a914XPDB5/EOuH871Yrn/x/z/jSV1ADBL/8z93Pt8/pPHKwTfpXy5d3juvaR9987BY6WXe653bvePz2/qyZ/znfekXa6inVJHn8h12RZbbNFtvfXW6xWjWhtMt/NLg38J3j/4qKaKvSB0/7/nRrgAAUbUqDphGvivaejTghj81+lg/5frqnSyszW6N0bnIPL7XF+dNPbG7KEFecDg7w5y1LDTi+eZ00VW5ven2qDAQEUH/XPwOsnDfyc/f0+HxOAP1dFz7zHBW+e5v+SZ4zG4d3PvA43BlYmovE/K83sDV+i98v63vJ//L5HfH27PXTnffk1L40Z55om+FRqD38P9XJ+W567nft55w5IaA13+PpZ63BdThj5trsaWI8b/Iv/vl3tf8E7oA0O/W37znesHj2/fvVPwuDbIPjpp3jmI2V+c3zfwbr75pm233dZ6Ouv4u8PYy5YvXz4JkjzWqvtpwOD+14bBl+d76udBwUdKI9cX+n8YvOEIFxBIZ7EMVk2uc3MXx4StI+yajrAinW8uOPvafIA12/c5yoiCyvKuE7EWO99LpyO6C6roOYcZENPRLLx763Bz9ZwxIrrnic/EcqLm8iDG2WJJtfQTf1meged3XVqtymhLVsq0dzr0UL6VS9eIz7vkmYHe1v383wU3a7SDxojsewc395x6WrJmU4e8DiK6mXsQ0VnqIXrPuWZdD+yeq7omolMPpkV0EsX2GzURXRtsWeEyO+6448X33nvvXXbdddfL7rDDDpcIbp4ZfKuUact8S/vNtsFqaGWGxH9l3Trv7L60ShS84Bw6YbVgUKVmPzHCvwJgoCngcnla8I1pUC6bX83/p6ShN9IZzNzzZe6Z73Lx/Gap2yyl4bvWpVeG/mKuzvTipfaRUoMK8u5iWf7frsZh4275rUk16L1kUq3gTi55XDrjd4O3SP7uGSQCPyj//XueOT30U5dUI9u3g68JMrJ9K9cPYrA8/6XgF/P+qlw/vFE1gBkA3pDnTltSZ+Nn5t53gtcKPiTPSO+I3Bc/ThoPDx7imfx+TtK9RPL7zeAbQhvIHNIgWuyqXD8e/EJotgXl/HresZzHcCi9w4JPaWW6VfABrUwPDDoe6bQ894S0wWG5vi//PWqPPfa4Yhj6HsH7hcF53X0k+Ml81+DWq1Hrg4HJl9aBzGD08HxXOVjUbx36By1v40x+AYHBC+ujpe7I+nPwO2lY67Z9Jzib4LA+37UFUxo2hfDDlsZfSnUeMXN7hpcZ495PvdPVo4GGZTLM8F50rg4VfBE617sG+YGjn5j/jmjPvDp4zUZ/ODh4lp0+V2dPevMfl1T9+IftfZb6YZmMiym7wLCExZEHfb9gv2yV/5/Z1fjmaM4ydpcpx6fy23KfTSynRqTm0vqtMNQ/w6DW+DkH/WVSl+747Hv/8CDfeGncJSi4hPuPDfLtVwf0496RJ3k/ZtWqVZblMOq9d9llF8clSfunKQ9j5Jnq0NrUIOC5vMsHX3qW/npvwK76tq9mcDjCvy5QrK3d2nwBdMqViG4Dy1/zALHCbK8cwNKXGbunG3PrPOhBLEdzcEG7x88bzQ+cUwk1giOLdWuWeGeCcRzhjMLxhTsoxxMqh3PGOJMs9cxcXQNnXefMgil6m8Nc3YHV52NSHV04w+wYxPREXtZnNKu/b3Ga6QNE5vtm7kG96B1r0PnuJTF0ROdNw+QXD+6PjjRk7Z1PgeOGe0eXSRWHV0yqE5FDE5SPEwqVwYrAQXnvotG7t4u+fdUVK1Zc/sADD7xYmPzKwcuvXLlyh4juB3kuuJH8tzJMVf0Zwf8NV03qkicnHSsXh6YM6kddL2l4pt8b4TwGHW8KbBSx/nx0qQz9mlJFaWAP87xh5rtmbSK3/dP2SfPTFgrJrM1Z5dhS90vbjvncvOsc7/el81APeHdx5Xx/V0X3F3XVrdQSGtfRU7p6OCAf9A8Hr593uHYST4VXvm67/6iubvrw/LPyP1fVk7vqALMy+J7gu4J2YTlL7ORJ9ez67/YckfdRk+okc1Dwjo3m4umklZO66s9tgwiV4phSB68PBZ9tFu3qmvMTdtppJ3r4HYP32X777TGQ3WZcWA18T/N+VzeBiEkn7zbz3LGrIvedgjbbeOZhGTCunPffmm89EpNnkHgk9SHfNSC+Jfi2fJc9g5eeQcsgVzYE/p/GfOMWwY+F/q/gYcHPTep5awakM5UMRjj/AP2YWPfaUiOSfC5oEwfgXXZ2AxI8s9TvCo98VKkbRGyRPLjdJ2oTYYmBHFrsDvtns6qbrf7a/jNjswt4xwaRE9t9Hb73ZAt9j+Ax6EllnKFMNm70m02CzgS3E83zorhyi3X/r6ENOj9r//ElJz6jr1LqVlO0M8AdQIA2sNiKiqZ2GCR9y8YU+8ypIP+bvBgwPfMmBrHQGOOe2223HWmEDt5b0UvdR/73rpbJAOsdwRl6T7bg40MbHOX1FfmGlQhlfUukAd6EnIPevPnmm5O+nIVOxCcJOAPt0EmVcCS/QZhibni/UvNhABS3XXrfwOCYm2i/8QbW3Ec4/4CoJWZYMw/QSUQ4PaewMohBlpfqT07/ZTwDBhJr3QBD2OChUxFT+ZzraDZ6XBldKmMbGID901xjHb3LWGXLpeN7DQR2f60Kbh/E2NxoSQC2ctKNqQqeF6WFlMAecGhXfdylZYsoK78Z2ekp6D1DH9KesWXUu3zwWRsx1+CiSxde2Wi73pyRRkQ/eKuttrrirrvuuv0222xzYKN3yEB2UBjl6mESPvXqw2YWZ6/Jsx1fVhGkTRqxxEbKYHe4VN7hQ3696N1XiEi+XdK4dvCq+eZWuX+Dhr5LbfEs0bplbcPQ1XaADJo8Aq/SBot/z/VaSWcJ5macw+AMryOc/wCT2OLI2GNWMxPesVSR/DFTz50p6AxTIAADSWDYI/7CUju+2UtABfuczdTuC2uESRjKHtlVeGHwGa2DMV4dH9SDqAwvL1Wk5wNOwpD3I7tqgcf8RFoBHGwjxYRokUZtWEH/Z1cZhq83kdggJkKLvOyY/54efEVX93nbDopemSsRXNrEezPny7o6GCjjS4M36qo7LVrwB3vR0UR74Z9Z/Y+L+CxG2n3CJA/IDG4ftjK/IPekQcp5ZX4bXH1DHg8tdQuuvDvZ5TDPBO/aBgT5eGTe78JokzAazz4edWutXw84X+jq4Opqw8vjg06aoZ5YWXhivu845ncnvdfmuiUmPwfG1xEWCXQWFlOd6IhSLb3TkUZfPzyowc8CiK7iffuaHx0kZhNlndDhPnHWMhkRlh6OMdwngpMkiIH2Z1tPdh+amb/XaDM5ewFagASMh753njEIoA0QgwWYPjqIz1SPIYQSC/0gokN68K8bjclObbTB6R2NFiCh32xSqn3hno2mdgxqALXD7I+mdhhQerUjaBecaK2nRpQ2ONlS+tOUl2QxlImILkor+m7BJzaaqC4MlRUHzE9k/k2QjrxaHx6WuzD5wNRnhbl9Z4rBDZREcqsS/WaaXG091Xf+2ZyCth2W2UY4fwFmYg3eps0g9m/r/ERYoY/6pRdwFhkc8+oMgDRgABmsMVfrqp4NMMQQqggDCsQAHLtLPJWupSczGKBCkDj0VnkT7JDoTbwXiGFFVw1iZnQMujLXo4KeZUM4MnjdUoMuouVxy1IjovquLa83KfWctM1yvWapARjdl4Y6Qa9o70qb6uEdhj+VhCYtAPk+WDnaDHh46jnkhJRxo2XLlhGfGeluGeYQQIOqwBipfujNR5Qa0UVZlMmecX4Jt/fd4KpSDZb/Lg2I0RYCWp4hEd1aOBHdPoC7B29OXE9Z7h48Knnn+LPBtfYRziXQcFOgsxNTWYOJz2Y/nX1eMPOtB5b6LQYlIuwjShWlGdDMQnaZYZojg/ZGG+69Iw8APaT9kOC9G83I86hGE+dJBAYgDh+P7apF/fBSDyIws9N7Hx+kR5tFn5ArxpQvMyDR1/LfE0pVJTDTMaWuHmB8+fBd+SUBPKarujy1wnMs4gxi8oTBfEtZ3ROmyTq8QQmn+SbGnAseE8a4X5iAzeBBwYeEKTyPQY9OfcjHkaWmh6kNFMpEmjJb9mUq1YahHAaCRYXG4NNoKfLpwQckv/sGn57yHJfrMrP+IEGMcP4BDEn0E0nE7E3cIzKfHRjEWYYsVmtiOaagV7oPzOSnlLo01u/JLtVjbWWpZ2qJAmNQcJ8YiuGI8X5jpO+jG+N+tNEGk94ppFQ1gO0AzXpvQEC/tauRUdF820kK6J93dXZEQ4OcOkAbLL7aaBLAOxttMBxEdOKyAQMtwowZGE1E37/RvNkGFeSPYY6VpZVpUh1gqB2s4kR0W2P/VuoAQT3qreilMrTVB6L6oBJQGRYdZhjcQClPXw0z9yJ66D9N6lr97IA/wvkAdEgzIlGZWPnYUkXdHs5igzHOmckcJIDJ6afE85WlDh6ilJi1b1aqYQxgjkMafUSp+QB3KFUMBZjUt4DvPLjUI5EsVwn4L71rlTWRTDEvQ9ohpZaJocxAQ7Q9OnhE/jNYuM8LjZpCYvBdAwqmVQ4zuPSk4b68eYbxTDoGE0BMx3QGB7O2+4e0/xgC6bCcQh4UvEuQRf5ewfuFVg5lFe5JXbFRGBDlj2QjbQOFEM6McaQTA5K8q8cezmI7nWUYGLyrjkXDDE5cf0zwYZMaPHLR8zHCemCm4hlwdBy6Nr0S82D0swo6M2bAHJgME5ltzMCYDHNoeLqvNC1HyQidk1gN6LFmStAvYbWOQgc3Mw/P+BYwC2N8yp48c2bBfNK7a6lMjKmJvWZEM6Q80qUxDUYk+hKH0b7rfYMIcZw+TvS19oxmwDMIodkVjipV515Zms5eaoRWxsRhSRGNCUHv3KNMYYKjgjdvjMJ2QHQ34MnPHUJTO9QBpxZ1KD15Mvv7Hiu+pUNlUr5BtZlt30WBgcmnmF0Iqwd01flG3VJ39AX1OcK5CTMdgPhMxHtUqbP3/5VqkT2rQH8cxFnr3KKqEj110t5vu5zRio4p3Gdx9s6fgu9O/uiy7ltP3SUXQQn91lmIpmidiDiLNih8pNEGDyK65+jt7AjuP6tMieilDg5oIjrmQf+srLF2QzOzMvmWwe8r7f7BZY2IznL99EYbJAYR3T2iPNqz+6BTtm91TUS3xzr0yvYMml3gh42WHhFd2qQFji5oZaB/e8fVIGpvwFtKg3ODwcEMg/d1mOtvuqkjn0u1dYxwbsJMByASnlBqJzILHF+qcaeHs9BZrEvbdMF9dM9SR+8XdHWGOSL4nK46a9DVdH4xyHX6pwZtkiAae/+2G220kW8RZ2+y2Wabmel9ywAE6NR0XrMd8dUS29aldnS2A7O2gcP6OlGWNd6aOkY0iLy41FnRLIj2be94BsOQJujP1tvNwu69sN0fysQf3uz9vFIZ1yBmADHQWAVQPmlt2t4nfbA4yff98i5ruR1mNovwY39qrpbxOLQcXeqApz4MGGgDgjI9t1SjGhVE2sqGmZTbwNLDWWizcwzSaihIhzX7Z3V1oJJX9UZiG+HchJkOoMPQ3zCljo52bz5AjLRsBOmMOpylIDT9kJhufze90TIX0Zb4fmhQZ6Zzes4sDdDyAGymsMRlhhC8QEcGmNYgAYjdOjvAsAYoTGX92gytc2EODEbPN+sTgZWPWE7cP6RUyQBtkKNDe97SFakE8xoclNWM7D6a6E+94L0m/yza7lNVzGbyMYD6AMpnw4k24F1niRBNbOdJ5xnlmy4TT7Y+amypaVg+k961Uy+WAQ0EpBZ10UP7zrkCbfZ2pX5x+uFFuE1QP2BvUIfnap5GWBuIfkQps6HZA/3K4c8zaZhBlCY6YpoflSqWY4RPt/8wGjWAGGkmZwF2n95P3PxdqbMR5hrEWaIxUfUTpTKl+57DlKzpfptdv91ozHZSo6V3QqnWZ0azYxttVh3E5zeXqk/L62fKmrPJ5J9o7D5VxYz88/bfFUq16ruP0d7e7rMk+/YfSl3CM+u6Txrx3Z+W6qSiTO6fWuoAJI3fpn4FhHCfeMs1d1A7MPegdhjQXl5qPd+u1OU5ao6ykcA888bS4EzabEFhSky3Q4/ziyW/YcWgVzvkZ8ARzn0gCr+v1NlWZz2lVFG0B423ATAbv7ehGfK1pW76wHBEZ0zH4EW8lobZkFHM0huR04yPoTGiAeLdperoBg6DwtNKnV3tp35tV4/84SpqmcvsT+TFaBj/P0vd1CFthsIPlbq8hCFOLJW5zXTK51ki9MmliuMYWV7ZHpTDdyw7Eb+HMmFQ4rLvmi2PafQhpRq/5F0dKhP6iPaO5a0HlFqm95Sa3opS6+M1XZ2Nlcc7JA6DnbTV7TGllo/IK/9vK1UkNzjRuUkdBlP3V7fZuclIUwxul5pddQyHewTfFnxXV89FW83g52beLsyACQ4uVXQ0Ew7i7/kWdIzWkfadNNG9q9Z3TAQwBEZlUf+XgNmO3zq/2d0MCHYsdZABBjRi+gCCUWwa/V15Ob9QRc4TmGLyAW3xPSRoxxoVjYplI1Afjmtk8kUAFT8FJ5YqQtGdzRjoo6cfOD+BDjF4RrE85xanEBtBvoYulSnMjsTnYTntfA+zzN06/ndKLRNj3QcbTQoa2kn5qAK/L21dPfiLUo2j5xkMzK2NchX62dbUv01qUI1hZaDfBTgy+CLATKWyMH+5VHHSYXZiod11eOasNIBGnX5vQ/R80TftRtpss836WG/Q7xYr7KPBL3KHzLOvC34haKajB3+uqwcJzhtm056+tz76nKLyDT7itlUOO68wR/5/e1fLZDMNcf7zpRoeqR10clKKdvtoWSOif7hMDdDSOC9gGISDu0W6EGPui5Ma9ea9ydNXurpuf57l78IEq4I2KnDSoL9a++Vffb6qfIyNAYLLgg5WwBiCBoqgilEweZ/vUh1MhiUZS1KcQ87X4vqwbzrX3cLgO7fdXkJBDXor67nVhtlXZ4EeP1jqz1NoDA4uAic1jJWVA3v6+yi58yjPCOcQGGX+mIo2AzyTFberYYxWzzDnNgxpD2hGa8y91bJly07OldENM/wyKOKJ0L1OwvxbV9erxR5XDgYwFnqzmqWa8wXMlg8zY/Dg1inbH9o2S2GbvxzG+EfKJpjD21uZ2EweF/x2K5/3iesMlgyJPy7VqNnDedF+AzQGd4KM3WYOMjRgCdD596C95KvrYITFA8tg9CLW2Cemsi3XPHSo+POig0x3funrKJg8M/ZyzJ3ri8IMjub5etApIAIRfiDP/zR4kVIdVZxTRh/njspbTec/38B0GYfy2UGW8n03+KOUy0z+0fwnvJI1bo4jPwuy7Bu0hItmUKOHf6vU3XbXDH6j1COKpw1daxI+F2Fg8MbcfBkwOFH9l5MaNHKtehhhAaBVJM+vqvhVcY5ex0tsYwzS1SWo86zSk64DEIij/UaFdAR7ih0kgMmdibWs6eEOL9i8ibPDe7Of8x+/8NU/p2j3h3rgAUdNWRToasaoCa7O5+UAQq3o1YuUwYClTLsGd0KnyLZakk4GJrCddObLZwBqSv/d4MZ5v4+Pdh4yuait8iAQow3v+wVFYTUoa2NRZvW786y/XSBgpoE/UKooZ1mJRfbbpXp1nWcj6kz+eND9Knl4Q1fPpf51GOCjwZXp+L8Ic38jV4f8OfnTDE63s54uXjoPMiLqV0p18aR6KCOD2y1LjQxjLdo69Q9KXYs+tFQnFmv4PSwCQ5AseKZZwuL08stSI6CKy/bLMMCpKcuKzN6nB50QuuPSenaZGZwebs1fm5FKrN0rh+/cttTjlInovPe+k+eenG8K+ywC7RMGBjcQnhcg7YZ2DX4p+ItJndGdCPvrrm4gOtf73AUKZjrsJyc1+D14RanLLBxbejgfVLSADfRN0TqJd/TsLwb3oHOn8/88nd8xPc4MswRD4uAtZ2mMOyRxVvkYDQGnFc4smMH9h5XK+H8q1Qfduqz7LNM9LEIdGGwwpPXrPj15Doqb/reUwekkznRzvpvy7tJ0cMuAq/IcBx95ZDnns8+LjwWdY5D7LOvsDPaPvzDvXHKzzTb7bN5/xsBgGP28gCkGF/DRUcnKLhjlR1s92N67GHV+4YEZBmdhZowCNnPodNP+0uc18FNn2bc8ZL+0s7oEJCS27hymdhYYevPc78/Fap1jPtNu7w/dgHOMGR+YGVcMfyxCZ5M31n1Xde4QBIEVtc2eKccuGDBlNHM7iw1D2ojSW85bfqbzPk2TDgbwzUFER+8wVT+LCUO5BpVnzR9rGNzhCMptiUwebUqxDXi6jCOcHZipPP7QXyy1Uz+50fMyQg0NsdCNMTMAyQs/7edP6trpV4Jv1Pkzg38p6GRPZ4ifmPufbe++LPip9j4jFPdPHl82h/A3HzagmOm5rFoz/kKpPtx8zr9Uqo93Dwtdvhk4MGgt2Nr9ykk1PL0/DL1tyqRsnzZw5b/Xd3UdnH2Aq652Mhg/sNQAkcrAzVc5SCeMbF/M84JaOCCBTwNpZlHabAakTW1g0GTjWQ1T6Ysg+6GWL3X+6uDXQnt3sfN3wYaZysM8xNmDy5qIoEcNf84w27kCM/nDgP8I6gx2YxHDvxmkv/6TCBt6qyARm4hnZtTJlYMkgtmtDKws1Yfbfb7ndy11YwYdlojuPvH9sFLrA/OfG3D1Ust3alfj3SnPr1LvnEL6DTShxVf/JrrUTTZsDGiDwwsbTa0ymPnWI0qtN/dfWupg5v4w6C02DPXJ9rHWLD7F4GZqnnbajLpikPLO+WYJ818WZhjIbMbohBn4N9NPOYOcX2AwSBHhWMadJ2YtmNi6D2Nbo1lgual6x6i0PjVj+v6glwMbN8yOgIPPRaf+W2wgmgptZEAlpfTlm9Rzx3rRvatbageHHRaygQaYfgCrIIMFzT57bUnhvlxZEwJrsUGbHVKqNHSGGaKVR0gqvugOjKBiqHOTzLSKMcLZgSkGV/ncU80IGuNMYWZwMBh8vNRZcrFkKjPqB0s9jocawbrtbDJLRoxNg9h5QqnqBniQ5xvN+PSkUvN3eKm70TCvvL+91DV/xio7xe5d1vivP7FU24TtnWbEM+iTCwQGWPXvLDS2hfdmsHr5pJ40QmwlmnuO+vSG9o7yEX9tpLl9qTvvMDDJZNi9pnzqiuFNGtSUJ5TK5CeVKhIvVpmk/aFS+1Y/2Mz0m9Uz+RRY3fAOKU25rOtvO/3ACPMABhuzwzCKljWbGOald88Anda73y7rGKnPLsjfFFAXpMGqTc/s0+vaIQG5/qWrMc+J1f5j3MGg1I1hJnOfSI/Rib1ESMzs/nGlLsURYQ0Qh7b7ny2V2T9W6qCwPongnMK1Si2HkE29iM57LXWw86SubviP8Y9O+7dSZ7gT3S91LzoRHH2bskYFObZUxkdTOwxyaIMxaUhdUVsWrEwzbaY+padMvT+CfscYOg1TDO5lTjnagIhOCqG6cLUdYb7QrLFrMXmpBhGVOi2uzheIiRpTJ10sWFHq7raDS3U+MQsL9i//hwSv0MphFjbqA5tMVjYamBEGmBZTzXpDJ6cHSktnE0WF2Ey0pef6dg9TnXKhwCzlQAJlSbNMRGQZyid//UaMsrZITpUY8sQ5ybZeDxF11ZNvMipeo1TVQxlFmVEW93m8abMFL0wD56SJ2qIsfX9rqx4bOnABQ+uH4sl7yKC93odHmIGhonPdMtcXB1ltHR97bNC5VcS4+XRgnYaoSEw045hBHj38OY/3zwmYhRmVGMbMagI7PK79d0ypUWGA2cv6NtBxHtpo4p9ZHLPw4/a+GQ0TiA3HUEWffX5oMdJ2L9XV9Uk6nbItdPm6qovq1Dz1xA2XtkMN3H9sWaNq3L2sOQeOtZzqQC8nlj+rVGnDIEV9odZoz+eX6rZqRlRvnHqUT5l8d5BwFgSGusnVQZD61H+mPM4151L84lyXYfJ1ONl48ehS+5KBi3RFhVjMieOCBVMMbm11EP0cunc6urT90uvqwDP3BtH2Q6WKfsSq73rMn+t6fwHB7CRt6WFKFme/zWLyQYTlcsof232zgAgnPMUES8DQ7mMQe6bRBgiMjSaKYw60LaZmRrSIoMN6clkoaN8jldgPbbC111u7/KmrEV36diqVkb9TqmhtcDq51NBOBqdXtGdYzakbaNc7Nvo1papfaCsDDKpo3npWHBYE1iWipwxfy/1D0fbrp60cfbUuJxuVOrSZfsgeoqz3W/3AAtb7BRKmGJzxRmD9+3b1ZMxbB9Gr5tmBzdqYHHMTfRlxMEwP83j/nAAPsLuU6korIZ2aPg3MZAOtExPlgdnrOo1mUfacdzGNUzgxEiYTg5xIbIC4fWgi7Rapp7vnesSkOmbMduRzDF3VUfmM2zJpFhc//KatLZRzKNPBpdo8AIPocN+gwNvPILey1DoR78xAQJKxBu6/O5XaZspNGqCzLxawjzjg8Rapr53S7+4bxr7zXN1Nti4GB1yHvUNqunap/cqgPMJ8YOicweWTesrEcZPq9qixH9vV2WM+DErPNUOY9TTGsaWuKZ8bwKr9yFI7K2OaWXhIW2dWFsAybiAAmN1sBujfdytVvF8RvE8rN2Z4YFfDBxlEHpbrrVI/26UzOg/s/sElg+1ioaExM7Q2/IiuBdlwLTW/wKw4lA8DGGTp09QOore2IJY/pNQBAJMJ2mEN3ECs3jC1Qe5RpQaBZHchqhP9DXILBeqZ2mawstR3bPAhkxqyaTWDz/Q17XVcV0MrG7z0MTaDEeYDUwxurZgoOzgYsM4SjSytzFZ6DzP37lGq+GRph4HOu0TmcwPMYn8Onl7qUpe0B8vyIM4Sy4mzRHbGtg+2+wam5zaa0Y4HGFoHN3ug2RZ6ET1l5lHWi+icaUJzhV3NjAsJwze7JqJvsskm0jeYDWUyw7N6ozHuRxutPl7Z6KPKmvPW6O53bvRry5rDHIjoyqRuflzqgOC+39NGvHMK+pJ24byjj/VqR+pw62kGnxksv9nekVciunyNIvp8YYrBzeBmb/uEdRYd/Wmlit7zqcjLl2rMYrwh3j6xTDXEIsPKUhnynmaDUo1tZi9gg8VgWDNTmckAQ83wDMMamhWa6M7zi5Wa4enoru5k4jBDohEJVISYJ0esfNSkwmIzuBn8cUHShN/aZigHBn5Eo81wZmTitkFWPSiPZbNjuxqeyiyK4ZXJ7K7eSDlmcOvh6oG1He05Us1CwT6lHYCYtHdLvT0l9XhMroJBnoHBW1nl5+ldPRCDdCi/4ww+X1CZTcTcfFLPv7pb0AYOot89usrs8+m8OtIdSnVmoK8eWapuR88jNupEay94LhwQKY8MHr506VJWZstLh7cOQmwlmgOz1LCur8P4b4CBxuQ37upMib5F6AO66jF2m9TNNUPb8XT7oCUfsyhxWV2REuZTV/OCln9IB7/dVJnMZkM5zITsB4AITj9Xz2Z9ARYx7qpS7SHKbEY20GESbXNEqYMBUfyorkbtwdRHNqTyLBRoJ2lcP3UnPNOd0veOCG48q4NPld2pMLa1Wq1Q1iPLeLzR/GGKwW3S6EU/FRnsrZddO8RPZc/CzD16ofd5SbHievfrpXY69/9Q6syyGHBoqWmcmrJYFvqlFYHQ9GaiOxFPR/92e87MNYjoJI9BRNfxLfOhzWCYAv0/Kcs1Gs2KbkZUPtFTGOD6eguuap2yLARMfUuZfP93pUpHvSpVqnGR2sFyrtN/uN1XH4OIbmClt6JJIOwU6Gkr+ifKmuOYifyMWEOZqDM9LEC5BjXny12VJnrnnbTTVtMM3vrjgPdIv3QiqXK/vtT9+UcOH/TMCBuAQTRSyXNtHXxS44hbOnpLVx075tO4vMl0qsH4Y5nmmFINOa8q9RCABVt+mQFqhEMBjt5ss82sHT84ZXhIaNFNnhx8Ycs/8dW6r56ko1sPNuiYEblPEl8tTb2ktCORu+rqiklIMi/vqrFrZfBVQaLjitw/IdeXBm3+mE9dzQumvmNwUofPKnWN+smlLu0BZZJ3UhNJ6cWlDmAGq+ODwhCz/MufM91IMS8rVbQnMr+8VH8ADKT9iNBmWvd9ay0j2wKUTdrUnj31tTD2C3IVdWetGXyKwRk4SUrKJ8/PLvN0nx6hrMXgLJmHB28yqadOWJ4RMqh35JgHGOmJuYP4ZLRmwOJ1RFS/eqneYAsKA0PpIBnpl2y77bYGqkuFuS+lXJtssgld2pKQx3VoMzYw8AwdBZObiYGOxGNM2enzB3dVTBQwwplgwz5lZ6cdPKmB+q/bVbFzwdfEwfC94dtBA/DgeUfsHjz19ih1+csL1Cz+DLZfsh8c0tXlT2eVYRrtpEzEcyqIdnb+mQGOiI/muacODBACLpytKKfD8111rVWHIqaK3KLOrpN2sq13LQYHA5MPaQZXtb+00QjzgSkGt+mfGM0yLFSORqdvir82+1oPM/dZZ1ld31GaiF7q2Vw8kNz/dWmzwfq+d3YhnaMLQ0+22GKLTXLtO0Hy/+Ctttpqd5bnUsVCuieLrN869/sbTa8bRPQjgw9uNGMOqzqaxdkA5Tsi3Qwi+g9TbxhencGVQ6dcSGj1ZVcZBu2aQxL1h41AHfuN0U9q9KF5zAzclyn0o9G5EtXv0GjhnSyVeeYjXVM1cv1OVwcP9/nzo6kG/ttfXlp+5gXD8+0dhk3qhP35vYie+7+eayL6rE86GBi8Aeck+TrCD/cXuq4vcDDF4NsE3xn8SCpNDDAdykjbHx8zDzBLnxJ8tE4RPDnIvRLDnRx8U9cCAi5Go4S5J8uWLVtKRM/3bx285zbbbLNtV10jxfUyuDjKl+5t+Uyn/0CpjEGtcN9sbaY6satGrYNzD80/QPSYk3K1u4t32Sm5vjb15UigD6RzfiDXHdc1E50TUF8Nt5vUIITD/WcG/SC2s3vQxw1KIseKiPKAVg6zNaelk9rVoK1tWOQN4gaFp3RVSnFffRlIPpi03pkr//G3hjYIrOzOAoMPz04h9eCUXJ+fOhKG6iOpr7cGxc5bHfd9Gmb6yrGlthnpYjWDL0Z/usCAztg6pdC1YlMfGrQuaYdDj7PvTAFdz95de5OHM6V0FOIeURGjs2oTeXtxeFKdGkRA3dB3zzKEubt0ELO4b18sHWWfVrZ9kqb9zzqEfBJve4Zp+UMTY9HKu2nwEkHeagI1XnpSd3ChL5dv+q5lnSvk25cJLk/nvFLSvEpw0/X4VJ8jGDrxFJK2iN3yzn9BnQ+0iKSeMSBgIuUhDotSus2keiweMKll4oVHAhnet6f+Yt5P+S6Xcvgt4unlcr1ycBP/wTOD9j3PGiy0/96h+dT7zqXn6qx91dTXQblulbY7aNNNN71K2m3TWSaf+h5PPCoE9Ul7KEM/6M0nTxdKGESjXLfL9Ve5JZjfZdc3E6lIld2ApZmY9exgL87mf4Y5M5/7RDEiOvrHrYGvkO9eKUyx8QZ2EJ1lcKpJKws9lBj31XQaA9APuhq0j+fUqf4LrRO/u9FEbwZAtGVC68vK8bigNX30K4O9FT15N+v0Inqu3056l046f2MNTnlWmIXgQkPr4JAc+ykrHl31rvtSqXk3QL0PnbxePXg8Ovk9MvTR7f7RwSPb/eNDE5nd/1De7dspND/xvfK/gxV+nzLumSuffe/sp0+sq19Mg/8nrZ8Eecb1/SJIylNvnw7ytPtnyvGj4OVb/XHm2Ws4fgpo06Hspe7T/3tX3XYPzn9PzTevOZ88XSgBY0/hNqnozwe/m4ref7g/C0PDNeBwYW8vhw9r0N9JpT8v9OVT4afl+qagGdQzAvRvlWcuke9fMrhkIRnBYNHytqLUuGTEaYa0jwRPDb1j0n9H8ndarnvk9wtz/WauJA0dX7inm+T/OyWP3871fsEbyHuuT85/B+X+6cHX5jcD3mmhT0y6pIWvpUN+LeXZxewz4ELC0Mm7GnqKmPqJSZ2l39HKIdoLpv1G8mdWfELydnquNw7ewzO53jPXGyuH/0NfKfitvPPSSW0ndfDu/LdL3hV2+vNLawDLTwYNZntiOLghwGyTNdLGEUF1/ry8d1i+89185y25Xj74ndTZx1JXjKJfDZ6Welw5zeD64NS3XhQ8Pd+6ZZA09aD8Pkh6cIQp0EiNibeAqWxB9S+TCr9Crn6vd4/uwOBd1dXo6TunggXgPyC4a3BpEBPsMVcBvV/SWaKTJI29gwvK4FMMINM80+jJfu8V1Hl1AlFJ924dgqMFsVHH2aLdnyypR+zuvaQelsABY9+g882S9aUXD64Mkj4MUvumDETKSwcPCG4eXBlUvk0XsnwDtLpXplUt78TUla1MPOz2SF67oB1aewVZqB2awFbgCtCCN3qnj0bb3ldup6XoF3ulfHu2fnDR/L5UrnPtv9lsnQGmmHKX4IHSaWleTj3mW0JaX67V25Zh6MsGD9y0wmoGB/LW8kqyIAGyF4kqe8lW5pHBp0FlwUY/JBV9P42ZSv1+dNl/pMIx+joZXKMNzFTqOvfvU7lPyndu3sSs1y+p50z9KXhKkBfSH3PPEUL75du/zHN/zvdXSmMRmIBH3U+DXyt12ei0oGCFjqj9TAvGeInk5y1BftDE2ae3PB6RZx7YynFs6FsG/xx8SX4f5n7y+0EdM/iX0KemPPvnm79L3f3cTJTrt4Oeu/z66vAcAss5C7pjlwygn25lInW9I/in4NWT7vPb+WW3CT5cWXN9WO7ftpWvn1GDyk0KMHj9Kfc/l+suy5cv/2vK8ZP83jHX70nDwKw8Z1YmzDbF4HcNSuO1+e5123c+HLxy8K/Bb2DuzN6/Sr7+EHqPaQaXlr5qUAn9llam2+XeE5POn4OPHxh86NMXelARDY3oD0iF3TuVt8cm9cSMP2Fwz62rIWcYnK/zb1K5T8x3/j2NhRleHfrKuffb4Id0nPz+XfArG9UZ78dpvF8vIoNbAvtJqQyO2b+evDolgy75yaT3R8yQ/Lyx5fEawacF5bFn8JRfOY4O/kfu/T7XFwYPUzd5/70Y3HeC/4vBMTdmCH3JIFEdo1x2PswwX2j1DawAYPDv5p7Z91NJ4w/J56WCb1PXSyuDP7eV47YYu5XjYcHbtPvPyb1DPZ9vvCUoAMPv8t6n8t+Oeea3wR/k93atX/wxtFn9TGdwzDbD4Or2VcHrSjv1c3K+ww7zh9Bfyz2z90/D5L8+EwZ/kz6W37cNYmyTy2OlBz03QlmzNJYKyWVul1x3TgWyPhPD6EbzFdFZbS8zqfot0RbjONbWd1mid5+r505h8r3y/Um+2evgaailmHt9aZwD0Mr8yKkPk+C+ycfFWplXzK0xFDnkbt+WP8Y/1nHnYy2fq5byLZZUcX0Q0Ym61Izdk+eNcr1Y8n/R4EbpoBcPXiL0ZsqX/y4b7KOUnBkznE1wTJHlQAy0x6Qe+qAc2pIoDIjD6E2DVBC0MimH57dt9UB3H8TcVcEdllSG6l1UG0MT2/fVfsrj/zODgcHlaVJtMlSg1SJ6kD3GIMhIuWXq74Aw9eWCm2HuTaZsGC0/rr2InqujhqmCxHUbgkYRfRpaY/adPGhkfclcDTX82aDjcTDqOjunRpsCftvf6aqR6nDv5jtcD+nljoB961zV8b6b/z6R7+2RBmXdPj1Xhpx1prEQ0KQMy1+2dzL47Zl8vF8eJ3UZ7GUtj4dOqsUc/R/Buzf6wXPVq+87uT5jSVU7HKnz+uT5UsHvJ/8fCe6TzvgtM3dos+An8ox6oB8ueMczaOXCYg55op3Y8msZ7FUtv4cE7dRC3zx430bfJ3izRhNxlUn7vWJS/R6+HXxf7l0k5WCU+8JcXTJ1yIKyGwDmVaZW//DI4Hfz3RflvWvmm98Pvi31d0V0rh9PvV0q9ffNMPa3c3X22mrJTv+Q3qQOGIyB3w/eIvf0OfQj23/zyteFAoYKCdqy994gEU2n/1Eagz53WZWFyWdBo03BY0tdouGTbSuf5RAOLXaUuf+p/L4EujXsvmnMP6QB/d7d9+VjoUEeW/ms+/5qrp7dZRb/Sql55F//HnRXd2jxT0eLaMO3G/34SVtSmtRlsmFJ6eTku9+YsbRa1englnfomZj6e0Ma82WGswJdDfhIheJXYPfaN0pNz2pAv4Em1+vl90sbfYfQgyfbMaFv3+iXBPsy5co5pt8Dnv+tOOyWfDsL7deTuo5tj7jnhhjtNTNnAl1lcBFY+n4RtOtN//pkkAehfsCqzl7x54jo9PO9MPfA4EMfgflWvx8819vn99Pbd58y/L/Qdf0vC0OFTNY4dej8xDjnMRvVBWCcT4XZoMA7SSfwLUH1iI+Al9Rg6WVFHxxP6IqXCT3xX3t29rvnCIa8tzQ4a7DiOpbW+jfpAr1n0rURw7G08izvZnwOMO7bBspBxPvEQQ461JG9llTr+mWaqOnI4gNy4fRCpOcY4zBEjjLzZob5groKkl9xgIq7VMuvo505gsij7aV80dG2tiqT9nDlGILmocYJyfsr2ne5oqoXtLoaHIE4Cqmf+QaYNDPQvXyfc5Hdibwj7XG4qvTnqopwFYNlkEX9oOBVgpvPSnZDmvIUPLirquGqRrvOJ08XHhg63qT6Tn882BvDgu+eq+LYeh0aZiryLqXGB7eLSWV/vKuBCexFdv9FXe1I0nhzvseV84NBbp4a5m155vNlgWNsDeWbq3r0iUGSBG8tO84+KX9ddfX8RFc9o4RismXyRrkeWWqccGGQ+Gork5nPJhXums9J59PxnXr5+sw0LNknJQ11uEee49b5qW6Nl9xUzhYcMNEbS82jOvzvVg57AYRfUg6z5h3bM3fIlcSCFrbpQHTuqQv1g7ZLjpfch0O/B13q/gL/8TFYJ6jvKRDogy/Cw0uN4vKpUiPQYvRPT6qobfDR196u76VOnbf2sdTjrpjbzA1mvmvWVrf29wvL5bvCa/V/zjx74YWBAYJ9KKBUkCUts9xv/M51veLlUJkNeLLZm2wLn+ACvvX2rp0VlqtD7vq9zEnr55OqB9ts4D+i+w/QpcZHWzCYKt9FMhv4vvTNVKej5S94cqMFOHgZutSBqhdngyLbYAy0UNK2j/4peHJ0xWGzCecMjPVX6aRsjhf6WfsP88zW10KDnV7q0GYe23U/Wmp+MdVrGn235KH3OCw1Uuxd0V3d7tqHbMrVe8O+dnVkJQJtL72VCP1Cu+kv64SZcooE5H3bcfv0gvza5WvoF4eg1VeQ4axvp7k1fgr9h2aYdtjDf+dSz3dHP3P4c2TwBipPZeRKjLxerteeq6FrrxFkLOtjZA2j6AZgVanx0HtLZqk7s9zT4M52ZsGWFo+pfvvmpAbvPyjXuVzNNN5fyMB+0wy+tKubLWxOYJDiK48mwtJj0daV7ZiyNdLMtbLUCCcrSo15do18hwWZ2nJYmPvS22+//dZbbbXVlYOX22abbZYHrpq64jpJTDZ4+K5tmbMdf6EBFxxcat6lRy+nV/PVxow2lhBnlcU2TaK4Zbarl3qmm+2th5W6711j+1a/nbar7sZsKdIweKiTNd4nGwaDt1nWVX9As3tQ5UgQ+gZ1ga2AHwJbybVSv/qi0GGrmbVbu/7kzbe4IGszwUhcR5iGYYQM9tFB0zEfnqvln5enI789v/dcH4PPVDjDmigbfLb5Mr+21BC3lqmIw49OQ1lrf32+99+hbWg5IVeBE4QLErTA+3us/uICgDw2tH/5lcE3dlUXNNoTac1Q1vDdN3OZZQRWxBBm9P8pNeSwTi5/95rUM6sZ2x6w00477Zcy3S14ux133JGdgS/+CSmbYBPPa2ksaJnWA/RwW12lR1IifSgHRmfcUg7MTLpCCwd9aKnnmtlBR/pQPuI8pkGbfQWY0JYnlLpL7UWlfpfNZZ2gvqfgiFKPYzbTGhhs8xQXj3HSfeK6IB1vzpUax3agv8iXOlwfg2sz75sUqBu+e9Tw58yzF16YYnBul58M0lP5A/diUmjri7Ov9TBTiU8qVUzSyXorev63iaOPOppG+lpXZ8QhAinf8D4NjVpqBM//KzUo4IKBPDakP/bpBRmJBpWApMFGgNb5X43uaoA/Yqz7z8pvNgbi75snbaOETpiZm0Ryp/wumcEPaM//1SCQa79hp6wJILGYIIDCz0tND+PSSdE3LZXp5Zfa8ZR2X3v1mz9KPW/NDIj2Xt9mpYZs6lW3hgYOqgkRfb22kpl+YSD1rogwbBloW1pv3GibfuQX/atuzUES8nvRof3AzHdPac8ZnIj/aBuFeph59sILUwzOqeM6RPO5KqJbXzwyVzP7OnXwGdChzd5GY5E/b1ZqyF01/W9dtbwaja8zqZZljWBE7/fzlipOYrA+WOFCwdBBumptNsLfJfS2pRqc7PNGE92PKPXMKzaA23YtwB86yKK8Mld7qA/MIGhjxy0zCB6y5557rsjva2XQOni33XbbKWL7DfPfjVNfRFhBD32X6L/YwNR8y1KNaAYzM5u8E4Utm/VlKpVhlYM1fEWpgSyIu+pB3LmDuxoSySBtICMZaEvBK+n5yqSdtyjzAzO1PGFcA4TZliog7duXGiJLAA71RKogMciT/PZx+7p1M7jy+e5FS80/eojQM8IAUwwuprftdocFeQc9bq6K0tbH18ngMxXO8PTkUkP6qPQnlhqFVCNZI7+954OCQNyr0US1o0tdSrEbzayisc8NIIqaXeiiZhYqAobWsVlo2QQMQNb1r1+qqEtkvVXqwgYPPvd32nbbbYnlDwzeMTM4Zjom+Jj8tuRG18c4a4GyD2LnAgMRWh7U531LLROGxjDKRDq6dqnlMKCSLJ5a6sDKgIY2APJcQz+41MFJu2pDqtRxpX7XILJOUL4pIBkwvBok1CmaxKOu0dp9z0ZTK6gH+oH02QhWw8x3zdzeMSBTpdCkghGmYYrBrUta1jo6tN1Xf83fRGnr4evskDMVrlFYWolLZoJBFOsdQYJEdKMz2jleZgYir98alc/4X8oijcIzebWk1IuzXdVDe3E29H8Eiatonnn/hS5V9BvES0tfjDtEVb7fOq373+OFVWodeJ8KQppR/gV3sl8HaCCd3exICvpSqfnCvHRV9H1KZRw0UZ3Ijn5D8juIzJ8pa0R0baIMaGiwoEahL1nmB6LMeP74Ug/EQNviShJA2ycgz+jfljVpQxPF+uAjpT6jXXrnpFLPD+9hpr0v3NBmaLHQDwteLSi8kbPIHhF68HOefW0WLIeZkem0HCuMzMQonVvDsu6qeAargdb5btfeF/nTmqlZYrGBOGIG4KnGWGSGe2RXbQHEUjQHEFZwM70ymXFEUb1+6sqs/9DgLcLULMBCIh0VGmMxaEEiM1CX50Zvk4ayrCi1zonnymdmJoE8olSm1E7WpK0iYF5tZla3+vHQUgcEbWD2Jk4TxdkjDA5D+Ty31uy6AdAHjilVwrNagTabY16GMmK6PMurbxsYDa4PKRvuC9SRY0v9pvyTLEglI6wLBiaGXfWEIkY/pKteXPMZEc1kxEKziI6GqQ8ulZk04mHtO8Sp/ntdXQvFXEDHYvQhEg6dc5/230KD0YqYqBPLqw6nU/Hc0lkMTpiBSCtemYiklmB0dFFTrQwYjG6a+tLR0UeEpo4oN+yXHdZTb0eUxT9XS70q06quBlSUdzOwGfL+XV2bVyZ5Z4NQD9pPm2Bk9w2+jHeYW5kwu4HRd9dSPWbKybCnfJbW9AsDAnWHhIM2ext40NIYBhffph5IW343ZI/RZt65dKnfVafoEdYHjbmhHUW9mNRtIBb6zL1B9CMu6VzE72kR3VZNzNsfE9veHUQxnesXjcZUnytV1MX0iwFmOOnJI/GwF9FLzffr0cmfGYQdwX0rA4N4+Y6uOWkE/7ervvasyr/o6nq6+75rJloffKLU5+4/3JiHhHRW4dRS88WmMIjopDK6OFp79SJ67ln2Gso0LaL/tKwtopNiqG6+i6lWw0xfeGupzx9d1qg5J5Q1VnsiuoEefXZFdA45nlEGA8J3y+LW578+DIzcVecP65PP66of82wDrguIgf9dqvOBmYHuxdpqFKbv3bF957hujZGN2MiwAjDUM7q6nKXR6L3z1fPOKphdzTAvSHpmEjPUC0qdAUgP7rMmKxObgs6v46GP6urMR9+7X1fP9FJundnsg3GU12y3PpCe9eRDZu6fI5hpI9KJ/HJcOaLRZlMHHsg7kdlgqp7ZTKgnaAOZcjBaaR8zNaPak9p97frSMrMOPpM20V75iMys5Ohbljqjo/kaaFu0WVja8mdZckWp6UmHzWZ9QJz3/lVLXd9nBKQOjLA+aEyHZITSqTXKfEMlE/8872qmZrQx4gOdyUzg+8RdrqJo4rwGAhrfIXiWs9BmnrU60QKC4d0y2W1K7URmEGd/22ii06Mx/rCkpDOuzNWARSLZvtSyHtLVM8ictkEMXl5quYmgyrE+kB6m29AMdZZhpp2IxCQSkoQ8o9kODE7yTv2xN4CUpD2Uw6xqILMCIGQ0hmFLUCb9oVc75gH0fOVTf/s3msVenaLZNKg5BlMqkfqUP2kYUIjf2l99rg8OKfVblt5GOIug07MSE4GIneuEmQ5FFPtDqeKsxvLuu8sakYvIqFHRvym1IQdRzKhNHETrjER09GKK6EN6mO3jjZbv16JTNjPgait6fg8i+tu6NRbnL5RqZ0D7nk48XabVMFNXg3hJtOxh5v+zBTPfGKzoGOVNjbYZY1ClzMirHV26umlDuakrfTm6ehyxAcEz1A6MuE6YSXtQCRgoH9/oF5e1HV0GK7p+cWijf1XmL6IPji7sASOcRdis1POo3lbqEtY6YaZRjyh1p9GdS20knYqhxPt0PCLUpqW6SdrpxPj2slJ3LDHkcPEUZhljENWkbTZdDDATKd8HSxUV5U3ezTz3bbQZHsOjGQlZ/tEP7qpL69tLHQDMIGi2B+u59M+3lBlmmKmrxwTfWdacCrogMJUGgohL1yUN0U3lkVMRKUTdWhIk2srrPbq6PRR9TKlr6eheTA6NYV/bbeC4opl7mE75SATqEM2AZrZGP7LUgRz9tFKlO/QJpTK1vJocNmTHoNp5x8A0wtkA4jNRClNqDI0z36URyxs6FmYFGGKg6YQcRXQKPt3DEThoHleYj2hvVDfLnxswlE9n1tnQxNc9SmVs1nWdnthre6mlL+Jrf5RwVzdpWHaSd4Pj5sOH1wOkIiL9UCeLDeoTM7NvsKmoW+WhSvXt1NUY6wZmYjRgZdcmvSrV1SVDYa9mmXldYNBUvpWlfg9tIGQtp66xdRgA1bNBXH9RtweX9Rwr3dK1SqEPesY3zs06vEAB3YeVmbVURQ7ingqdD5jx/lyqqGag8O7nu3q++LBd1F7fXhSb1DjeP0DnGcz2iVJFwpsOHWqRraKfLjWPjE2vRHf1OJ9evMyVL/ogXpJMBoszcVanRP+kVCMUKYCdgRqwGmYY48RS32FMnP1vMcCMLT0i+aB2KBtjl/KtPpssV6JvbzkPfXpXBzl7ErST8NLrbIuZ/L++1DQeXqq0gmZE69MrVSoa6vDzperTaH3uDIN6qx+gbzDcYXRivndGy/nZACMk8QejGXWJ0pZP1isyz1Qu0ZNeS9Q2cvvOi7u6BfPTwbfNzc1tnU4joubH52o8a5s4Phdk/GEd/WyeO7Q17oIzwcz3Tih1ADKLHNtoDjn2T6OtGzM6of+rq8EK0Md31SEG/a6uHs5oQDwg2Ec8mU5rwFLtFDo249zsfwsCM9+ib3+2VJGZqIy+c1f17s/kyrHHsUUGOgEfzK6CKbwm7SHayqeCH56rkX7O4La8jjJod+U7otRAIGiOQWwXaPvrSYdouwlJNGhMi3nXgvZdYFurfJKSnlnqO1SNmTdGWCfMNNSq4V6p1mzrnhuyavbQ3qVT78/91W9M29W9yP5zwICwR31kzKVrTsjYc65GkhFbiUgsPJKwSSs16qSe3DE7kJxt8J2pshJFiaH2TlMf0PJOnL3ipPrjG5zQ8rb1pJ66KlILvZQ7L0a3r32os9XpBHOrj+piw42NOHZJEel9UxpCR1EJFqx8M0BMvnype8OVy+GJ1AwOTTad9KfGdlUVWb1qos4bQ4s4K358v214msHbe1AbCxclDVs+lY8aYGsuelVX+wBa+T2nnqlo0rxCV+vHvv216rD9BuqQX4Y6HNLot5ROPz/CemBgoK42/A+JZSo1f32yVJHZDLfOytxss8364HjtfcswxKeXdlWs+l3wpNYoInWI5CkW+h9sHQ2TXzQzuWin/hNN5sOeCx6ee724F/q+Q/50snMKOulUeT+cW0RQM+rx6Fzvnd/Wyvtgfl3dLuq+We2G8pfrh4MHy3d+i2Yqbtvq+nFtaei0X2zvKxPVBX1kaGvo6CcM+VmI8k3no1TDpvZQhr5M+e/YroZtUg7SFW829wXeNMgRy7+aeto97TScTSbC6ur8zdThye27JB8GR/SDgkc32kmsd2zpvTFoSdR9IaNIRP8Ifr+rA8/qvA/fn9SgIP3qSq7e7cuU+2IO9M9MDzwjrAPaaK0BnTr5+dBC0RqZiesqX0Osk8G32GKL1Yf+5R3WWiLrcekYDC5fDv5PVy3k35urkTT7M6822WST7+SZlUT14E+W1LO+3hT80Vzd3eZ4WfSdpvI3k/pZh+nOGdoGkh+1Tve0rp71fcf8flCuDko8Jmht/Ie5Pm+uRr358Vw9JMCsLn+fmdRjj/pvDmk0dHyTI3g91x8G2NK72aSGaUY/3HtwIcrnO1Nt9cJcHbxoC+aD81u7PmBSQw4r65NDO6DiB7m+KteVyYMBXmyA3dM+P871tCXtiKN1MfikMq1y3LirTlLq6m7B+7f7j8nzQlGjhea+ZqPfEezrsKsHVPYSxNDHpr5PsjP4eEdknRc2WqTY1XU+wgZgaDw4VyOfiqYp6uiqVDjrN5F5nQwOnMsdhp3bdtttt86MvtfOO++8Q0b/OSdU5JuOufXunrnu2tJxhNBw5hXawQJOSli1pMZjt0d9ZVDk1T4Iv061EDB8q6GyOhZX1NGVk3o0MPHU+WVoV+dfocUDdx6WU1f7QxHmav6ESZb31Xmcqk/nnIlW630hsPacq7HupCEsMbpXW4Z3FwK0U6tze9s5s1AtGMpENd0qaW08V+OeKY9nbX0dDkHQBn046+Bm2sI3/R5gyG/Dvg7navmGOhRrf6hD5VReYbj39NykRqkl/pN8qGHiuS+VZziThsMcPNun0fJKten71fD8CBsAESwbCl37zeCv52p44BPTOX4dFMtrnQy+1VZbdWHsuS233HLjvO/MZ0f93G7rrbc2g5+ed96Z7+xdqs+2IPo6kNNLf9xE9C9kMHDUjtMu3hP8bfC6wZdtVI/jufvAMBr8nMIU88H3LqnH9two+Jzgb1t6j5R28vD40Hdo908IHp77jv/x3lVz/ze5fnluJsT01PedVvixVo5rB82SvnXr4JOXVvH3WM961/Wcgu8MHT/4cunlqgwOBxDj/GGhb6McSe/ZoQ8Oam8Rby/W6v/zU2U4Q76GvDZ8l3LM1cMUiOOOsbp37jsDTR0+OfTtWrlfGdS2jjH6YO45J9yZcV+Z1Jhsqxl26vsOOxRtVX6vm3de1tIQv75/Xn5G2AAsXcPgjg/+sbBNqUyzCz3pT92abZ6zr2LwyTbbbDMXht4k73NP1Ci3yu9Lt80lJ06qhfwPuX59rp58+bM8+5vgPhvXc6noemJjfyj4f6GvH3y193PVWVaP6OcUlHPoPKFPSSdU1psFnbrxl1zvlfvHtLR1zju2+05/uYH7ecfBB1cL/j3oGF6z4hkYPO8vybOf805+Xye/39C+5VytZ7TDHx7jWe+6nlPwjaHTB1+vfGmDO+feMdoy10fm/hEtbWrQocG/hn5Xrpdo5aaDmznPkKfh20MZg+9v5btF8LnSyPV++cYj2reent9HtjQcSnm9lvZHcu8q+d5fgqevj8Hz/lzK8On2joCMbCHecfrMOIPPF3R8lRkkchGJ6OOcOzg+sF6uk8FBmHlu2bJlG+24447bZybfd7fddtt9+fLlm6SBBSbsI8P41qSGTNZBnO8FibCOS7pkcBN0/nN4AIZhZWd4cyzxJLjRpKoNs8mfZRg6T3A4p4xK4MyrK87VpTtipZh0RFXH6qKJtIxNjtthWV6+pB4r7LhdsK7vO8KXyuG7RNghDSKrM9uca+26IIPXAMP3JvVYYasXLP4s2ftjpPy3yaSeBT6I6J4Z9v+rj/70kvbf6u+2/913fpuDH5xTZta/QgbqbcOEjoVG7xSm3C14hfy3Ms8R2dXhcB6a1QeHbRC50UR27XsGBm91qL7VlfzynaC7O1duZPD5whSDq0w6Ef1IfHPbPQ9dH4MT0cPMvQ6e5z3HCPLg/Kb7fa6rsbct1xDDPhTU4J9NOl/Mde9cPxh0BpaTLozO35irp30+K/e+taSKd2K5PXRSLdfrzMdZhaED6cStI1sH/mauZpv7J0+n5/qI4K1z75u5PjN47dw/LejYYYPT6u9Mgzz65pIK71COuTpTPrd969/naiTb03Jl0OvfWYhyDTB8c/hu0O6tr+Z6z9y7Yf7/Wq7HTeoRTtrmJZPK6J5h1OqG98FA5z3tfJugWdrgLSKqE1b/LeV5TGgnq94pzM3KTWJ7VPAWee4bQaHArq4+cn1D0BKZ/uUwibUmkVZ/cC74VnUVZKjkfKSdbjedvxHOBDB4KpDV1xoljyzLFl8pdZnlerPPDxDmLptvvnn/fiqbvzOR8BWh7Rb7ffAToenj7rN+mvX+THScq2us3/PfXGXij6FzFcCQH7v7lq0Om9TzpwRuXDBG0IGGTtK15ZdcWX/5qMvHM4McRNA6ZL/ZJO99UUcfOuE0DJ3UN+eq8a2vw9wTs673LMt/R4V+TrvPgWbByjQNQ121bw+bTY7u6sktaMx5SKM/0NXdc5ZFT+uae6pvDN9qaNmKD/txTnTpqp/+LyLB3Sp10S/9RXJ7QP6z4USUWXp+v0zW1T0HfP3RHG0Obmn/pGvLZFPprB5QAr1HZa7/Nlmz1NifZtKe6fM4wplAGoje5SAEaOsgD7bDSvUf1ku09hmGTBXcOhPHCaMyi3l/yMCkWm6tB6MZ7nR6YipkzWUddVYVMZIjhlmaUwZx0qmfK1rjW6PlM77gzNC+yfGCMXH3SV0PtiRDjJW+mcOJJUReNHEzl7U715CvroL/PUQEFdCSw44yWXcmLqsjNCcTr6nXhS3Y2rCy1IMHOJrYFszRpZ81G23LLPqypW4j7V8arkB5g/qIo4T3zMC+LAP8ZSPFHbbffvvtue+++15uxYoV17xEYPfdd7/YFltscViecWAENeSwSbWWUwWUWz/RXw7uquNK7wEojVz7ypvU+sPgVDXtoQ6pjfpFn9/p/I0wD2gVDLmtvjR4Uql+5WYArqdmsTPAUNlTlW6jiV1NdpDpxMTz1wZXBN+RBnvPpJ5r/Wr/dZXBnp3nT+yqBHFc8OSuujkarYlxIpP035fPcwoz3zg2KD1OL3cKntLVABXSd//Y4CHuT6pY6lC91d+YGuSs51JtPjapXm7PD548qae5PKZUxx/+Asp0cqnBMexP5+L7n0NmFqF8dwq+q9RtpDaa2LXFR3xVqT7iHGHs4uI2qt17UEbQyuZqsObDflLE8stnUjgmZX9VGPqaYeZbZva+3W677Xbj7bff/lZ59v1h7vvkGa6xyv3YIMlOnzq+a3U4ja0eLcvankv6OyBIteFchLGn++iQzRHmC1OVZpQ/vVRxSHQOzEqcIrL2MNsJZyrdO57/cle3WRJNLbldYm5NWCgz9o8areH5vfsPU/Xhf7q6H9v2RTT9a8EYfKaDDOGGOIQMGzOInMPe6bd2Na7cUKYzMHjrnKQNIYiIlMpEvPxH7qsPDPb3/H/7UiPJ9CJzqdso/1bqWWI9zOTtbMFMHT251H37RGeba6RNTTBj/zX4obImTNP3S5MmhnxM1bt+8W3PRQy/Vn7/T/CzO+2000223HLLm3s2s/otwuh9vaUOnhcG50lnA5OzyW7Y0qB797P2kIb8tnokWfy6vX9I17wB8z9dvn9uIdr/wg6USzuNNJqNJzqr0Z/BbD5ArLe5nxfcFqWe2mm5TRTXG8Cubrm0dZAXFHHt0FID7fPTtjvrZqWen6UTyofrgsHQsRpcqdTyWdKji6JtHvEbLT8rS82HGbhXvodvNIOQzulophsEb5rfnGSI5zfNTLZzfjuP7ab5TYrhQCTgv33Q6lRZF7R8M2DzD5fjYeuvPQbDzjebPvZstPY4uNFnYPCuAo++m0bv3jni+aHbbLPNzQ466KADg9ddtWrVTa5xjWtce//997/q1ltvfYswvXO/rY7cPGV2HhmVZ4iEc4Y6bLYgqps6vPlcXdWgFt1y0mL1j8y9MGCkthvp1aV2ADMb+urTD20AdCBbMB14sDJXYp3Ya3QnLpT8oDU20f8VpTLSMfn9qlI3SNw3iLZN8IhGi8TZw9ApzgnMfEO8NOVjUMTQaOlJHy0/9k2jH1/W3zmX5WrWso5vuZGl+hURX3m9UTFelv90dGL5K7vqXy1NdXXn/mNT3z0nMPMNAwhf8cNKjYVGXQC4RfAF22KBwRiuBb7VkJHticFXRETfP2V9UMrzor322uuwHXfc8dZh+nvsscceN95hhx04vrx4o402OjLPsG1YTXlAUNtqyyeW2sdWw2wdBl+Xb+w3qdZ+Kyw2+owMvkBgdO8t3KVGOTmp0UTm+QAxm1j2ja6dO5Xr77u6rXIQ0c1YP2+0WUMoJDRRmF6IvlepouQgMi8YzDBAn16pwQANbOjnlTWHBPj/po0WEXQ1g+twc2uWdbYZzndLZ2dL+F90xFaMzLf/j5NqRSeiE8uPKVVs9g5L/oLBDCM8o9Q06PmkkG+VWk5BIdzXvsDAbLA9AyhrV20z+sXfwoDXye++X2yxxRa3DTNzDHp3GP8+ocWSt2rynOCwH/w9pe4HZ6mX/voYfGubkbyTeqV39ysRufJpny3XCGcTNOQdSo16SoxkKDHLEV/nA3uUGsLHZg2np1h/dSYYjyVGLPuStyv1LCqzh22TZhm6mxnG3nK0AQHzYzQi/GKBjoe5zTDEdWW1d5mYjjbLXqzU+jiyzDA4bB10k3TuO2T2vsfOO++8avvtt79hOutt995770tGZL1e/rt7GIDDB6Pb3bvqK47J2Dakt1jAsIbRMDD1SXuuaP8Rl5UbbNpwndBVEJDyHikrZ5YbBu+57bbbXiyi+jVD3yn6+EH57Tjle6Ssh+Y5thbr4uwQVAXSoL6lj62GKQbfNHiH4H1ST8RyBjubZHoHnJHBFwcYSohVB5YaPVVDnSEKxzTo/I0BbDx4YvBhk7pJ4JiunlXGamsQeHzoVaV2cuKvDk+EZezCCDojWtifa5RqdNNBepDGAoP0lNUVs6MZxs4ArYzCTdsBx4nDzquHp6M+OmLrxdPBbxZmv+VlLnOZq2y33XY3z3+PJtrmWbPfY1MXGI+EY+0dAwC6MkZcLGBMu1/Qcp+B6ohSRff1gWf8Tz8XmEHYaNtc9wgeFXxCpJYDUi4OPMdmQDs0ZWaAe2zq4UYpszZ8QqkHBa4XSEENbXLhUvukSd1cYoCghy9obIAR1oZPlypmmQWM/Eb9DRrcGnND6+n/JLqGps/34ldXAwX8sv0+JNhbS0sVhYmznjFzi4TiPpHyYY0mMvewCAxONJeGcENmb/SJ0w+AxtxQbDED1qPSMUkuvRU9M9nBZnPP7rrrrofnv170T6cnydCHWdQNdqzo0qCbrix1SfJI7y0SULOkR/XRHoJQPn2tJ9YGMzrRHpMyuH6/1LbB8KcE/x5mPCK/2RGI1Ta2GLDsY2Bv0Wf+L3hy+946Yaq/sKL/sdRvHTKpfuecjri3jgy+UDDDONZRzaKYVegcxrIzGGOmYWiMSY3k8l9tBucscmxX15V9Q7RSszbGILI+IWjTyuoZvFQbAI8vgwox1v3FNLhZysGM0jXDmsGPmn4AeKehQBmCE14xzLttyvfglPWYPfbY42KZyW5qBj/ggAOunBncppZj2wzOEm9dmJMHf//HlaqWbFJqmvutndqCAumAqmGFQ3q3nfl/FnjzkDIYBzkkDTM4/4bbo1MeOwnF0kPbiKN8nuGVqA0NDmcqdbnf8vSwrnr5SUNQTisvfRSXkcEXCGYagdGMwYtoTkx+YKlLR+uFKQang98reGRXl8Po33fpmg5e6oxCXGdco3djdsx8z64yuyU6aRP1zDho//ewvs5yVmDmGwYRkoMrZkAT19cHW5Wa77vO1dNaGZzusssuu+wepr7B5ptvfuvo4PtFB7+W+xtvvLG95bzK1AEvMsxMBcJEpCPfMsj0sBDlmwE2FQ42Qlb5ONVAva4PGFzvmketJFhmE7mHu6rQTIyH7Cv82A9r7cxjkaca+pDWhtpMmfrCrKNM1D5qA9QXqA0cjaQxPZiu9dII5wBmKvMTpVrF6aIvK1XEM7P1sK6KHxi8a1b0ICs6y/kgojPs9Fb0Uk8LmRbRB6u2zj5Y0aXHEMYKy6+7h3WlfVZh5huDSjBtRf/Q8Ofw7NQ7GMYzRFWMokx/CmMbkPqVgeXLlzu8UJn+mGeI6MR/77Cgi0KKPr6scUJR3z0sQvkw6m9KDTp5SKnpfWDq/1ng3tq3Wakeit9Gd2tEdPQRpS71oR/VVYnE8y8u1bai76wW0ddRJuvwQxrsPL9qtMF9ZO7FgJkKpYNZxjmkVHHVerDllvXC0Chdjcn2xuALgjYoiJ4KzdTWYF/e1cB6x5S6NozxMRadlLRAXEezspu50XTjHhai4We+obPyKiNd6MTKSmLpYXh26p0dSu3Iz8+AtjL3nxx8ie2T+f2o4AkR03nwUUFOyJVIru5eXur3+RagzaoGCAMo42MPC1G+GZAeGwA1x4qFtmDZXh9QyQx6L+vqmWyPy1U7WVXwnjVuYrh1fPThXV0R0U7qUhnfWOpg1sM6yjTUIZQn/cL7JMYRzgXYvNTzyihAZmGzLKYkvtkcQjdb6wXg3gzqLIIXQsYU1mTea0S/Q0r1fiOWmfWJ7KuC/NTRNhpofDRbwGKBpTkdlHg+eJnRi3sYyjlVJlb0fws64G9ZGJpjxw2W1NBTopagRX2x2eLwXIVPsqHF8+wQRFK09WcrE9QB5V8rvQWElaWmZ7UCiJ67oRURVnTLhJYStfNhpapsZnY2BO1nmdPgpG1ET8X8+ogZfz6wrNTvQ3kxkHt/8LwbYZFBZ9ew9E0zGpGLN5Q1VbuDuJSuszMO9xti2F4U6+pM/ZP2++CuRc8slcmJ4OjVvuilLqGZ2dBvKosH/11qGlQDuiP6/cOf1A4wVaZevJzUKKvq6Rel+p8r3+CLjumHlYFblaZ2hCaemwWlYSY1mLA4f1gaCwUz7cLAJr3XlXrE1KPLhg1t2py/uvyKT/6tRl+za44uuXqfFOK7jyi1b6CJ7fOBWRH9Z41ePbCOsLhAnNa4y0vtIHSvo/zu6k6w3hiyPvBfQ9sFBRR4T+h9g68JnthVxsBYJ3X17O1jStXZWLLpcOijSh3Vdaqj65cXBgambXD/Uk8voatKD/3k4c+hLIONISjqi91xdpEZwHRq+6vN/ganD7XyWQ5TVh5unH1OLHUwM2OjOfwQdenDVgoWDGbKx0j20VLrmGhMVLf2vj7YtNTTaj6YPOsHxGjlsD5NHbHzziD/kEb7vrYySK0W/dXZBoAU866GZv83lGqHUG8jnJvQ1QD2ZlziJdRhN+hlNMUMwgWJxUV0Jc7aL321Sd0iyKvLt4h+mB/tkICVQe/Yq22ppE/Pc6Va8i85m945BD1x6I3TdL1RmdtOqF0n1XFHuCHlEKGVr7YBj5Vc0AT2B4H90b0YG7TX3q4z20kNmPbOo+13591FBVpZqiun2YwV+twGDSltebFMJt+Wq5RbO1kWXBakNtnPb3lQm1h6M9hrs4PLhk8KtcxqpYK6hdaWjGrUOHCGuh/h3IHBWvrw4LHoNK4oLj0Tz60jwsZwf66GH/7bknrmlVhcvdNErgYMI7bv2nlmBEdbPuL4gT62q0s1f8n1JV01VBHjzBqrZ9XFhCGNrg5sjw59j6CgBpwy/jypAQl+VGp+zT6fabSObxaUX3oqIxL6/rnPYIh+dqkSC/rtpc7mROMvlwaLXb4p2LXUfPyuVPGZ2qEcBhv5QR+W/FBderUj9PHoXB1X1PeLXF86fHBoI9hgOL/uh6W6yv6pVPVkgw5UIywCtE49/HxK8LuT6mF093Tsb89VV9Rpd8Opt9dyQ9wtzP0VmHc5fAifK16X2Y+4bnOKjmPn2Te7uqWS3m0PtvRYmtGPznuss5ahjh86zmIzgO83NNveNVfbIFcmL0JCf3pSY8m/P3hqV2dvu6DsfSbOPqWrMciIs9QANL9u2yKV1YkgZrGvljoAEFVPLVP2hoUon3oacPr3DJCO1O1H89+OuZ48qfHaGAeFXvr6pEotL07exZa7fvBxadfTc8/hEQat73RTIamGuptKnzHTxh2edKQw6Rk8VrY8jHBeQBpm4zTU8kkNVk//FNReWB6HAdj7u85g/n6nA4jBs1lw07kas8y5ZKJ2iOLKWQIjEN2J40472WrjjTfecaONNrrk8uXLd7jIRS6y3bJlyy651VZb7bbNNtts6f6kelStq5MuOAydNKgO+pBO7be8WxaTD7O75UA0x56VjSbSOrMLLWCE54bOTqzt46CVelopUR3sFuw9uIb0z2Xoz07r6tZeIjiafzi3Ufu2SWS82LS9gy1si+Xso29YXSDSTzO4OmCQVQ8s5yzvpALqCNHcas25XsgRGgyNNTRYGvTxAijm+qw0rAio/wi+DzO3zr7W++5P4f+3dy/AmhTVHcB77iLC3c2yBhZQF3YvPsDoSpnSKJa6gEpekkppLOOrQFETX4SKEo1GBY2SxKI0vlIqiQjxDRrK4Ks0IBQqiRqVSolGixXEoAZ8RTSJ0ZzfnOm9w8e9y33iZe1/1ak533zz6Jnp033O6dOnpR7eOai3bOyPB/0kyDpe77A/zj8xiJf363HMs4OeMBz/grivoRs937vdq153NTFUUiSPu3LITirvnAT+355KIVcmCQfNB5e0n9rKJjcn/n+7HB4z0eR/YitC7GneYZfzrI9xbsnx5Ls7t6Sav+v+txKMjlDPv9Glr+Ga4Tmkv7Zc00/W5aIJ/2h/vIvHxDO8GR/04r2GhJbdqL4MJKOrZ6UZcKZ61p0lI9ka1gJ8KB+PMImtDrox6Mx1uQaVVS4u8H/9wJOoghi0Mc67MsiiCJIy8qx/L7aivtjY3w8y3ZT3WTrlp8SxvM7u+9Tp6enj4r8vBJ07uubE3VYW9dm7XAXVSiHW1dKTXxO0cyp79M/F/zdM5frnH44yeQ5ONIE+eMNLJmTgxXI/MY4R5XdakHhvUWYCUeCGMjtXe9UF3POhkt51vgSNlSmbX4oyet4jpjI/mhVTHhT7zvf9gh4VAv4GE4pC43rhMO1zV3nrdYN+e3huZoyZep6PWt4EfC2hCtNUJqCnYpsSKpE9/rCpXDpXgr4+d9kkfPy9Mrc4L7ShM55oqjaVm4qu17BowH7r168/ONTzIw899NCZ7du3HzEzM3PUEUcc8Stbt269Y6jr26NibVORamVaTYwqqmejskov5bdtjZvmIa/LJvOQGwnAa330jPUadfleNM4LzrNeoeJLbdX/qNvVwqg8yPfYNvAaLg2W94yntTBTmGZMqf3iW2mwLS65Ye9cd26u69bREtemklPPxeILpmlYCxgEu5K44/+MrVlgHE7XB1GZ2Vo8x3oumLzMTXrc4RgZP77dZYyzWG35sh8XJHCCI+dpUYF+z71i+8yNGzceF/u/FP9b82vVBdwzjIiH/Lqgy7q0tzkHOaEI+eVBVs0URMIh9a0uI7skjRTYY2iIQ83z9U62Yb+gF0NGris01Pl60Y/0BSi3qoB7jmu7fCZCfkXQdV0OX1ox1XeidcmK6/tbk65P2ECwoxef77rm9DvXeHd91s+V1oOvHVRhGj6YgAy22RuCFzDBvvpIlwEwx3Y55xsmL9NjdB3SWeecC/wQCy5a7qQukwW4x3Pj3ifG7w/FlmlQh5QEzqx65Z+A8WH35gnnLf9B0A1BhpcsHOA9zARdNhynQfj7gdcwvWzgTcN98sB7TsKPF2WmZ8OL8LtVMHwLtDXesXf+nS57W4LomcxA6yfQdOkv+NDAP9k3UDcI+W7g23qmT5aMUjNxyFApr33DWsGoIvRrXnXZ4lNNOZNUeKq537vUy/lQr1VyvFV8NO/qtiAedTHcB4Yw3ztU9QP3339/XvQjN23atCV68A2xnzd3ZjifOrC6Rvgs3NBEiOoJt+293V0G6rBhQRTYOJ56HPM9rtRj3vH1OcSJ12vdGujq9wiS8JB/Ac/z7V0L5GGa+Da85Lzhpryap7C7Rtbz+JP5cZ+SATBUdN9bDP6t9d0aFopRRagfVuCJcVuqqGgzvZt84irFYlXo1wRRCznVBLd8Pnjjq0JHBbY8PwR/R8neTYir4Rb3Fu99U/1w5fDQoC+WXBhA7/rZkmPUbGxluqjLJBj2/XNJoWVq8IIb7jIjT3mN/+q1nS/JgzBRvKAe6ZQcI5bbOc51v60lx4kvKhn5VlYByuX5Lozrs60/E3TZVPpDqOW+gXFwQUhXBIlsm6wDPSZ++2YcaQKWjPN7Pqp9E+q1jokPae52rzJ3mQqY6mahOUvQ7Eqqt0Cwx12rRrKJcDqtyyyr9p8VvJlH9guUqKrtzrKCAj6utCVnULnHp0qq6D+N/6+JLSefZ/3vMut9dhx1XRw7Xk/1roE3BfYVA+/5TnKtkvHuRw/7LxjO+UnJVFZ6PPu/U3JG12TZVgK82p5jZ5ez9njE/bayqiEzvJ77y/iS00An68Bc6E23klNGzRL7cclnWnBlaFgb0OP46Bxr1HMzqCz1WofUdjlhFgC9CUG4Y0l1XYwyj72ZTbKFCMBwITzHD6F2jJDH1YJ7E4IaX03V7MMqu1zA4LBhvzJX3jnbBp6nWE9cwYlWMd7PVGGmAE2hBsfwZ4gJ7wVqkRrRQkBl9nxUbvcQQ9/fL+5lDjunKZODc8y3XZBjLL654/T23pX3cUzJOPfdtgoNaxRD5ZDN5KNRMV4XdM/4yJcFWQZWUvte2BcBs6w4cx5T0kHFA6vnE954YdDpXc6lxhs/Xq2eQaUUI0591juLLWdKqPTnlszIAq8u6SSjghrDp9JS3fXUeMJMw5FAwzU1ZvbTSNjceNNkqfh6vZfHO9Ngnh909lRGia3GmL9GyjRdJo+IMkk6qNLm+5t/wPzx3HPCdx+hzgNn1jCfzgl6zuzfDbdJDMKN2M68sFT0XvXbd999/d6kYk5UhluC6YlUPIJVVXR2KfsVf0lJjyx1lsq8Wio6DzA1nH2tcXFv3mVqOR4R5OtLqtzGvNmbeA0QgXbM0WVWRX9KyamV+DNLPgez4/1Do2X/Z6enp2diewOVOUiYb79s8wrDdzJywasN7q3sBP/G4XdNEnFL0AA7/k9K5mJj2y90bnjDWsVIwKmVhrhk1dw/KuTjgx4ZfB9vvUgBpxI+oaS6SmiMpVaw6fSCajtnjt+rBR5wQ3Psb6i9EzAN6n7lrD0Ys6Xy+5WbJjek4lfYX9Uaz1MDZR4YDeM9Q6jXhZAfFZrP/aI372hAGzZULX7FoHGiRTB1wHtG+5RMRMGWdsxCQEvxfrbFMzBZCLkGpOG2jpGQV/KRzwrZNrPIpAVq9FllaWOfR5dUITm8VKI3lFRn8ZIknl5ysoae44/LrC27EjAsJoHDH5Yc7nllySygQBX/04HnbHzpwGuYXj7wvOV4Kr2e8GUlEx1sHngCz7xwzG/ts88+JmqcEu/t+EMOOeTgEOrfDOF+2KZNm9YLJNm4caGytmBsK/k+PYsG81UltQoCPicmGmqmFM2KYB9b8nzfqWFPw4SA64Gpaz8MXiWm9vk9djItFKLanCtopHq1P1FyeSM89VIPenlJ7/pSGpH50I8MlBy6Iuye45slG5GqzqrxNwy/NQKGtqi9HGfvKWlGGCoi0I6R6kgGFPv/sqQmYP/b9t57bwEm7w0BP3XLli3UdXb3joMOOugAfgwq+oSALRd1JMIogHdYvxOtaSGoJojG9UUls8saJmzYEzEScCrai0tmQiVwTx9oKW5gSQKkTqY66rX/qMsEEXptvekJJVVhPgA284rZ4yV7WpFnvPvwuBGvPHpoIMBUeaC2116MZ12ZQC9ejwfOw2pUU5MFmfBeHx8q+v03b958h+jBH0hFp65T0asvYwWFvL5DjY53+LySjjFlXQiYRxJYmI8gaeRzulwyevK4hj0YejuVhrBT/U4uqVbzHi8W4rv16NRg3l2qJfVZg4LXEKyEiv7ckgJIwJWbcw84yB4x8AS6+gaOKenxB3Yn2xX0+hoFMFxUGwHQCNgHBMxQI+G1iMKxoa7fLgTaVMvjqO4hQGbZ8XH06vMyhIhG9VclnWL8Bd4bk2deTNzL+3a+kQDP8+IuM63yIUjrNLPCjVDDWsPExyWIVZ2Fbw2/tfiLxYklz/1USbvPNanonFT2I8K+KOg5Rzix5HXeVdIMMH+Z+q83tv/a4bjvDb/hGyWDOQgfL7r9MyWz0QoYoYbzD3yuzDoFHcNu52xzrghA59j/+RBynvofhHALNqEFyYTymW4Yi16MAM3zfJ8t2TAxFb5d5rG75xDW+nw0J15y5sjphDu0jL/pMqXy5DkNezCofpwvotPYqKeWjODSeywW1HUOO8LCRsUTEtd6VZcTYZYb9WU4jL2sd9KDu/7jh//M/tLbQt3Co8rswgzUbaou6M3rWPDWksNj1XPOZCHQwIZ96FBmPare2jNYc/vpA/+0kmu59Scs4/k0rIYhfQeBKG8qOYR3s0CF+h4n7uU5OR6ZIoRchKGEFvwHZv6JfJs8p+EXCFRTKrYeimBQD4VJLhldzq2mvloiqI/bXkYFI3SGiEyo0auxoetQF0/x9oHXwFQBJbw1ok5PX4edNBCVV6A6rAaG0mohjy6zDZ7IQPOnPQN7VgARvtd46nNN9MorDtcf7muYU4NjvW9lpIHwS/ROQKjvu9Jql61h7YIDjBda8IiKT02k7vEqLxldZv4UVEOdrUkYJg+bFxMVUuX9bkn1k/NM+ajohBhPHQf8DwfePr/Z/zzuTAe9Iy+6/Q8qmZPc8Rq3x5ZU/f+iZI/qGBFzAkyovIJEmBr2f7fLVMt94AleeXnVFxHnf4uo74wjr9Lg9JPoon++Lld7vRRf0ha/2fmLee8Nex72LjkefkHJWVQi1Qy1LDggovYsMKpUxto/EHRel1M3l1PRDB29taQ6bVjvnJJON57lvytpb7p+bxIM/EtKjskDFdYzelYONuqwnnxHySEkw1EEmWrMqy6Y5i0lZ5uJDT+7pCORynx2l5lZ3cOMvbNC8G7Ho14zqEwmWlgIxu+n8oMw7xLu6rWfSrw+6B/iOOaLMfsPlWHiyRirEErbcBsHYeKh5lHnKKMOU3sFhdivEdgtagWdpGXA3GzeYM5BoErX8XvJD2R/VfGlMer5LueC67GBwPKeg2EwAl0x5o0IVImggdTxe+bAzPAc8sBJeuh+spc+gOAFHR7Cfd+g6clUSYvF6J0Jsjkq7vFrQesF2cT2d4P2i3sfHfQ7QWLUl/t+G35BoJbwyFJV2eXvK6n6cSYZhvlO0J+rTCr47tTRUSVdicp3Ysly6MVpFuLELynDWlpRlquDNgX9LATLbyu3XDecI0BE3DqeAPPEU9cNuXFk2W946qSSqjhn4zEDT6vRsDnGvPit+BAw2Vu38Kb7He/h7sG/a/369VfE/e9FuHf3bm4Jo/cmwu7SdZkh9/ANGzb09zMOH7+/io9jJMdciXfcsKdiVDkw55acP62S81xfVtJ7zb77WMm10Ppzhp6ynnszVNVyBUCVNmvslC4nf1xcMnzTOO/Hg86NsuwbFf/DQRfGPTmhpEeW/IGKbcTg4yVDUnnTL+4y4b+xcfuptob4XJdaTkuxn5rPicXGfWOXyxpdEtd/X9DmEOKPhDBfGttDYvvCUM3fGPzMcm3x+n67HIpjdpwR99vifkGfDl4q6PPiWa+I5z5q0CYmL9PQMCfYmYjkqujmEG+OCtWv6RXbg6KnkgKKjd2ngkKrAKo0gawgODUIhYe/TgS5S5TpThqSqPCHxDF3HmzVzVHpa7ZVHv2ZgTdkx94mFFTgnh+Ar2PPVPqqonsPdT64lWAOH9Tye8f97nO7BP6ooP2WIuCj9+j+Gh9RdMp3v9jeN+5JK6GqS5NsgYq9ggTeTDXhblgqONt4ik8o6Xyr6qx48NOi8j1c5VLZOZZQqKo9LQUTFfWUkvcDfgE96tjDbeVQKjeV+StRhjtHw/OzuLf84AfGvq/F/9R1DREthDrLln77wNNKziiprhsWpKG4Ls3gN0oGm5xf0t7H/0ucIx+5+32DkEev/X3Tb0OYjwy+V5nj3g9ZiIBrkMbk2QcBF9WmHJ+O3/wD1wddG//jr/XfVK5osssJ19CwVAha+feSIZ8CPwwVGdeWqfVFDlA5VeaxcKOo+KPLLAwTlZWq/E8lc8wJpmE7KwPHnwgySRDuEXRVCNXFBDzu+6Wgf4vyUJ8vjbJdFaQXf09c+6rY3jvIemtXTeVa4a5n/wldpk7eGb8FsjBPvlIybbJG4aogyxLLWnN1nEtNPjzucWUI9s649/bgPxHb/1g363Qr88H7qsdUqkIexDHoud8W+4zfG+KTAprW8umgq4P6deCbcDcsF8aQRb31avtUOq+6DRs2bJzKZPsbh97qgBDwO4Rw7RW0NWhLCHi3FCGfD50aPQvjwN0gEIdEOQ5UjhC2rVGOQzU28dvUTmmHHXPAVC4EgeeBtoYZO11GUsKyb5ceawLMWedeHHiG0oAdX9f3Wh/XnB4EU2acXwqyeIQloCTSsNbbbEkn4L9BoJ1roQrneRYLFljEwP/MESMC9v/yVC4LrLzmpjI36vppDQ0rh9prBJ0YvOWCXhKV8TiqcQjzB0OwHjw9Pf3ToCtDyPcZBG2XKokGIanq6JIxXIP6fUGU4fVxn21RhhuCriPkcfsrY3tj7L9rCNHHgn4Q939AbM+JfZZpMvuN2SFo5VlBT4/r/FfsPzNIdNuHS86+u8k963NUQR0auDl74/GzVhqde4r3Fr//OniLFwjA6RuskuP0r43y8xfIzbZ9KlMlL/u9NTTMi1HlfeaQ+um1se8R0XP+OCrjB0OoHmwoJ/77YvzeR8Wvlb3SZIWfD5PHTQrJQGKtec3fFPcyjPTDuPf1ce+7RVm+Yo2uKJ+VUy2o+KPY7ojf7xjKbgUYQ383xjVMrzw5zrH/NVM5zdKIwUsny+O+VbgnBXzy+ebC6Bonxzk/Cv71se3fW/CnB22Lw/42jjszrmuJoSrg/fJT8123oWHZqJV7KpctpqKbH03F5GS6a9D6oF8NYpOaL02VR2ArMb+eSM+En3PNtIVAWaYyFfQBcZ9Ncb8uBPvgENKDBj9An2plaJQsq2uJZeozNVrZmRtGAbZ1uVQydX1bbKnAyiXPevXaLwhVALtU+V2PaWPrPlT82w/3YmJI4MhZdtBeuT7cYVEma8T1Jk/wUmxJC8VT3id4bGhYdRDwCZLvjTPr3KiYDwjhtsTtR6NiWrTw6tj/hfifM0ygyNe6XIHF+PTXu5yrvOReSaVXBj2o4JLq6GP742vAySDku7ZoaCAmNYKb7J+rXHX/XDT8D0JH318ynbT0S9eUDNaRTuqa2Pe8Lp16X+1yjNscgH8N/o2T5ajP2NBwq2FCEJ5Ycqjq4iDBItRiywwbv+3X1Qo6Moit67c837zghqqOnbj0olEFFxFmgl0FnYCPhXpMk0JEQOt2TItFl+B9Fz0nh/m7Sz7rs6fSJMCLlzc0Zzjs7JIJK6SYslhFXw7lbmj4uWEkHAJKOInutS7VXymNBMRswAfdHx//3z/oQVO54ikhV/l56OmeuijSNBe/1nRT5amSX8tZ99f/DGmZXkrdp708ZCqXHpoJevCwZQIIIuJHYAqY2urYJTUsDVWRoScAAAP6SURBVA0rjtrbjGnUS1qw8ElBjw26Uwj9R2P7yTjGsNQ7u1zeV1CHGV/i383iOn3gzfh6xsCbxbXrfnVb+Xrfyrs31F568ph67lKo5Piz6bRmbgmZvahkskmRbu8tOdXWyieeyfNJGPHSoMvj/o+JMh0fWsY5sX208oyu29CwNjGPcCOrkZ4R9GfBc8D1EyXiOCufCtbwm4pOQPCE+p0DLwBFJpiqwv7cMQij4TNlYm4IgDGH3m/BN+xs/MPKMLkljjHHnOAzYU6Nd/GM6enpr4WQn1oboDkakYaGtY1BwG8fdI+gu69Ldf34oEdNpZdab22BBIEkZodJqSTunADhDys58wtvvvPPFSMB5A2XCumYIKbGw4N+3f6SGWDY0qa27oh9jw4SRcfRZkjOexDA8tAQ9LvxF3hPDQ23SdSefD7P9Qg8zjXBxLMG3rxzGWXwJ5SMff9AyZlgxqgvLDl91VRO+wWGmCgidlzACBv47OE4DcWrh+PYuUJs8XpaOdjwQnE1OI5Xhh0Dz2SQz0ziitd1ObHlvKA3x3PcKejsoLfH/pk4Tgis8vbzyz1jpardjJ2BqKHhNo0q2Lcg4FeUVG2lTSKc+OeXnJeNl3FFRhY8YSSIeOf1XvuSyf3rJBRkkYfvD/zRQV8eeBqBABa8Oe5vGXgRbacN/Lklh7RMQrm0ZL4z6vbOKLuY+Lq+25HD8f7TS39z+K1MNxPwsQnTPOQNezQmBNxkEon+9bqSMMjOarqkHh1vjFh2FceY5bUtSGipRRUOLjkppar75ndrKPB6Zf85Rlaap5bMAqPnNiNOj69RIOicfe6BJ8TK8uySmoPQUQs7/H4I6YFBzwxyH88hqeQfBLmf4cKTy9Jyyzc0NAzYu6S9zu7dVjL18wtKCqLppK8YeHHkEj1QnzUUeOr6SfgQSur6I2NrP6HX87oWxxjjWHooqZ56TPbG4x56osFqaGhYBgidnp7zbUdJtVgqqV59HoiKLltqVdH7udolVfSLBl4v/taB5wdgb/9fmV1HnNDr2XuMhXkuAW+C3tAwByZt8vn4CeiVqcVbS9rqbHbqN0F9Wcke3Pj5K4dj2fB6ag6wJw28HlzeObze+5iSyR6o9tKi3qWket9DOeu2er9rbz7+v6GhoaGhoaGhoeEXHGMVf2wHL4SHsWq9G5OgoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhDeL/AbL/6dpoj+OHAAAAAElFTkSuQmCC", + width: "248", + height: "248", + style: { mixBlendMode: "multiply" } + } + ), + /* @__PURE__ */ React.createElement("rect", { x: "184.055", y: "54.995", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "170.059", y: "44.06", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "200.238", y: "77.302", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "212.048", y: "87.8", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "206.799", y: "83.425", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "204.175", y: "85.612", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "219.046", y: "103.108", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "154.751", y: "30.064", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "188.866", y: "63.742", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "148.189", y: "34", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "134.051", y: "31.707", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "126.124", y: "24.771", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "115.385", y: "29.19", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "95.702", y: "31.376", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "91.766", y: "27.002", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "90.454", y: "32.688", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "184.389", y: "45.58", width: "2.187", height: "2.187" }), + /* @__PURE__ */ React.createElement("rect", { x: "162.185", y: "41.873", width: "2.187", height: "2.187" }) + )); +} + +// routes/connectors-home/ai-plugin-callout.tsx +var AI_PLUGIN_SLUG = "ai"; +var AI_PLUGIN_ID = "ai/ai"; +var AI_PLUGIN_URL = "https://wordpress.org/plugins/ai/"; +var connectorDataValues = Object.values(getConnectorData()); +var hasAiProviders = connectorDataValues.some( + (c) => c.type === "ai_provider" +); +var aiProviderSettingNames = []; +for (const c of connectorDataValues) { + if (c.type === "ai_provider" && c.authentication.method === "api_key") { + aiProviderSettingNames.push(c.authentication.settingName); + } +} +function AiPluginCallout() { + const [isBusy, setIsBusy] = (0, import_element4.useState)(false); + const [justActivated, setJustActivated] = (0, import_element4.useState)(false); + const initialHasConnectedProvider = (0, import_element4.useRef)( + connectorDataValues.some( + (c) => c.type === "ai_provider" && c.authentication.method === "api_key" && c.authentication.isConnected + ) + ).current; + const { + pluginStatus, + canInstallPlugins, + canManagePlugins, + hasConnectedProvider + } = (0, import_data2.useSelect)((select) => { + const store2 = select(import_core_data2.store); + const canCreate = !!store2.canUser("create", { + kind: "root", + name: "plugin" + }); + const siteSettings = store2.getEntityRecord("root", "site"); + const hasConnected = initialHasConnectedProvider || aiProviderSettingNames.some( + (name) => !!siteSettings?.[name] + ); + const plugin = store2.getEntityRecord( + "root", + "plugin", + AI_PLUGIN_ID + ); + const hasFinished = store2.hasFinishedResolution("getEntityRecord", [ + "root", + "plugin", + AI_PLUGIN_ID + ]); + if (!hasFinished) { + return { + pluginStatus: "checking", + canInstallPlugins: canCreate, + canManagePlugins: void 0, + hasConnectedProvider: hasConnected + }; + } + if (!plugin) { + return { + pluginStatus: "not-installed", + canInstallPlugins: canCreate, + canManagePlugins: canCreate, + hasConnectedProvider: hasConnected + }; + } + return { + pluginStatus: plugin.status === "active" ? "active" : "inactive", + canInstallPlugins: canCreate, + canManagePlugins: true, + hasConnectedProvider: hasConnected + }; + }, []); + const { saveEntityRecord } = (0, import_data2.useDispatch)(import_core_data2.store); + const installPlugin = async () => { + setIsBusy(true); + try { + await saveEntityRecord( + "root", + "plugin", + { slug: AI_PLUGIN_SLUG, status: "active" }, + { throwOnError: true } + ); + setJustActivated(true); + } catch { + } finally { + setIsBusy(false); + } + }; + const activatePlugin = async () => { + setIsBusy(true); + try { + await saveEntityRecord( + "root", + "plugin", + { plugin: AI_PLUGIN_ID, status: "active" }, + { throwOnError: true } + ); + setJustActivated(true); + } catch { + } finally { + setIsBusy(false); + } + }; + if (!hasAiProviders) { + return null; + } + if (pluginStatus === "checking") { + return null; + } + if (pluginStatus === "active" && initialHasConnectedProvider && !justActivated) { + return null; + } + if (pluginStatus === "not-installed" && canInstallPlugins === false) { + return null; + } + if (pluginStatus === "inactive" && canManagePlugins === false) { + return null; + } + const isActiveNoProvider = pluginStatus === "active" && !hasConnectedProvider; + const isJustConnected = pluginStatus === "active" && hasConnectedProvider && (!initialHasConnectedProvider || justActivated); + const showInstallActivate = pluginStatus === "not-installed" || pluginStatus === "inactive"; + const getMessage = () => { + if (isJustConnected) { + return (0, import_i18n3.__)( + "The AI plugin is ready to use. You can use it to generate featured images, alt text, titles, excerpts and more." + ); + } + if (isActiveNoProvider) { + return (0, import_i18n3.__)( + "The AI plugin is installed. Connect a provider below to generate featured images, alt text, titles, excerpts, and more." + ); + } + return (0, import_i18n3.__)( + "The AI plugin can use your connectors to generate featured images, alt text, titles, excerpts and more." + ); + }; + const getPrimaryButtonProps = () => { + if (pluginStatus === "not-installed") { + return { + label: isBusy ? (0, import_i18n3.__)("Installing\u2026") : (0, import_i18n3.__)("Install AI Experiments"), + disabled: isBusy, + onClick: isBusy ? void 0 : installPlugin + }; + } + return { + label: isBusy ? (0, import_i18n3.__)("Activating\u2026") : (0, import_i18n3.__)("Activate AI Experiments"), + disabled: isBusy, + onClick: isBusy ? void 0 : activatePlugin + }; + }; + return /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout" }, /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout__content" }, /* @__PURE__ */ React.createElement("p", null, (0, import_element4.createInterpolateElement)(getMessage(), { + strong: /* @__PURE__ */ React.createElement("strong", null) + })), /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout__actions" }, showInstallActivate && /* @__PURE__ */ React.createElement( + import_components4.Button, + { + variant: "primary", + size: "compact", + isBusy, + disabled: getPrimaryButtonProps().disabled, + accessibleWhenDisabled: true, + onClick: getPrimaryButtonProps().onClick + }, + getPrimaryButtonProps().label + ), /* @__PURE__ */ React.createElement( + import_components4.Button, + { + variant: "tertiary", + href: AI_PLUGIN_URL, + target: "_blank", + rel: "noopener noreferrer" + }, + (0, import_i18n3.__)("Learn more") + ))), /* @__PURE__ */ React.createElement(WpLogoDecoration, null)); +} + +// routes/lock-unlock.ts +var import_private_apis = __toESM(require_private_apis()); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// routes/connectors-home/stage.tsx +var { store } = unlock(connectorsPrivateApis); +registerDefaultConnectors(); +function ConnectorsPage() { + const { connectors, canInstallPlugins } = (0, import_data3.useSelect)( + (select) => ({ + connectors: unlock(select(store)).getConnectors(), + canInstallPlugins: select(import_core_data3.store).canUser("create", { + kind: "root", + name: "plugin" + }) + }), + [] + ); + const isEmpty = connectors.length === 0; + return /* @__PURE__ */ React.createElement( + page_default, + { + title: (0, import_i18n4.__)("Connectors"), + subTitle: (0, import_i18n4.__)( + "All of your API keys and credentials are stored here and shared across plugins. Configure once and use everywhere." + ) + }, + /* @__PURE__ */ React.createElement( + "div", + { + className: `connectors-page${isEmpty ? " connectors-page--empty" : ""}` + }, + isEmpty ? /* @__PURE__ */ React.createElement( + import_components5.__experimentalVStack, + { + alignment: "center", + spacing: 3, + style: { maxWidth: 480 } + }, + /* @__PURE__ */ React.createElement(import_components5.__experimentalVStack, { alignment: "center", spacing: 2 }, /* @__PURE__ */ React.createElement(import_components5.__experimentalHeading, { level: 2, size: 15, weight: 600 }, (0, import_i18n4.__)("No connectors yet")), /* @__PURE__ */ React.createElement(import_components5.__experimentalText, { size: 12 }, (0, import_i18n4.__)( + "Connectors appear here when you install plugins that use external services. Each plugin registers the API keys it needs, and you manage them all in one place." + ))), + /* @__PURE__ */ React.createElement(import_components5.Button, { variant: "secondary", href: "plugin-install.php" }, (0, import_i18n4.__)("Learn more")) + ) : /* @__PURE__ */ React.createElement(import_components5.__experimentalVStack, { spacing: 3 }, /* @__PURE__ */ React.createElement(AiPluginCallout, null), connectors.map((connector) => { + if (connector.render) { + return /* @__PURE__ */ React.createElement( + connector.render, + { + key: connector.slug, + slug: connector.slug, + label: connector.label, + description: connector.description + } + ); + } + return null; + })), + canInstallPlugins && /* @__PURE__ */ React.createElement("p", null, (0, import_element5.createInterpolateElement)( + (0, import_i18n4.__)( + "Find more connectors in the plugin directory" + ), + { + a: ( + // eslint-disable-next-line jsx-a11y/anchor-has-content + /* @__PURE__ */ React.createElement("a", { href: "plugin-install.php" }) + ) + } + )) + ) + ); +} +function Stage() { + return /* @__PURE__ */ React.createElement(ConnectorsPage, null); +} +var stage = Stage; +export { + stage +}; diff --git a/src/wp-includes/build/routes/connectors-home/content.min.asset.php b/src/wp-includes/build/routes/connectors-home/content.min.asset.php new file mode 100644 index 0000000000000..0d6732e898b85 --- /dev/null +++ b/src/wp-includes/build/routes/connectors-home/content.min.asset.php @@ -0,0 +1 @@ + array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-theme'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/connectors', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'bfe6c795b4a54b6001ac'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/connectors-home/content.min.js b/src/wp-includes/build/routes/connectors-home/content.min.js new file mode 100644 index 0000000000000..daf4f6e9150bc --- /dev/null +++ b/src/wp-includes/build/routes/connectors-home/content.min.js @@ -0,0 +1 @@ +var zt=Object.create;var je=Object.defineProperty;var Mt=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var Dt=Object.getPrototypeOf,jt=Object.prototype.hasOwnProperty;var z=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Ht=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ot(t))!jt.call(e,o)&&o!==n&&je(e,o,{get:()=>t[o],enumerable:!(r=Mt(t,o))||r.enumerable});return e};var i=(e,t,n)=>(n=e!=null?zt(Dt(e)):{},Ht(t||!e||!e.__esModule?je(n,"default",{value:e,enumerable:!0}):n,e));var C=z((ln,He)=>{He.exports=window.wp.i18n});var N=z((dn,Be)=>{Be.exports=window.wp.components});var J=z((un,Re)=>{Re.exports=window.ReactJSXRuntime});var Y=z((pn,Ve)=>{Ve.exports=window.wp.element});var F=z((Mn,Ke)=>{Ke.exports=window.wp.data});var _=z((On,We)=>{We.exports=window.wp.coreData});var S=z((Dn,Ie)=>{Ie.exports=window.React});var ut=z((cr,dt)=>{dt.exports=window.wp.privateApis});function qe(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t(0,Ne.jsx)(r,{ref:a,className:X("admin-ui-navigable-region",t),"aria-label":n,role:"region",tabIndex:"-1",...o,children:e}));Xe.displayName="NavigableRegion";var Ye=Xe;var M=i(N(),1);var Se=i(N(),1),{Fill:Ze,Slot:Ae}=(0,Se.createSlotFill)("SidebarToggle");var w=i(J(),1);function Ce({breadcrumbs:e,badges:t,title:n,subTitle:r,actions:o,showSidebarToggle:a=!0}){return(0,w.jsxs)(M.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,w.jsxs)(M.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,w.jsxs)(M.__experimentalHStack,{spacing:2,justify:"left",children:[a&&(0,w.jsx)(Ae,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),n&&(0,w.jsx)(M.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:n}),e,t]}),(0,w.jsx)(M.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:o})]}),r&&(0,w.jsx)("p",{className:"admin-ui-page__header-subtitle",children:r})]})}var E=i(J(),1);function Ee({breadcrumbs:e,badges:t,title:n,subTitle:r,children:o,className:a,actions:s,hasPadding:d=!1,showSidebarToggle:g=!0}){let c=X("admin-ui-page",a);return(0,E.jsxs)(Ye,{className:c,ariaLabel:n,children:[(n||e||t)&&(0,E.jsx)(Ce,{breadcrumbs:e,badges:t,title:n,subTitle:r,actions:s,showSidebarToggle:g}),d?(0,E.jsx)("div",{className:"admin-ui-page__content has-padding",children:o}):o]})}Ee.SidebarToggleFill=Ze;var se=Ee;var P=i(N()),yt=i(F()),Gt=i(Y()),V=i(C()),xt=i(_());import{privateApis as tn}from"@wordpress/connectors";if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='f68f821d0d']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","f68f821d0d"),e.appendChild(document.createTextNode(".connectors-page{box-sizing:border-box;margin:0 auto;max-width:680px;padding:24px;width:100%}.connectors-page .components-item{background:#fff;border:1px solid #ddd;border-radius:8px;overflow:hidden;padding:20px}.connectors-page .connector-settings .components-text-control__input{font-family:monospace}.connectors-page--empty{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:32px;justify-content:center;text-align:center}.connectors-page .ai-plugin-callout{background:linear-gradient(90deg,#fff9,#fff9),linear-gradient(90deg,#89dcdc,#c7eb5c 46.15%,#a920c1);border-radius:8px;overflow:hidden;padding:24px 220px 24px 24px;position:relative}.connectors-page .ai-plugin-callout__content{display:flex;flex-direction:column;gap:12px;padding-top:2px}.connectors-page .ai-plugin-callout__content p{font-size:13px;line-height:20px;margin:0}.connectors-page .ai-plugin-callout__actions{align-items:center;display:flex;gap:12px}.connectors-page .ai-plugin-callout__decoration{height:248px;position:absolute;right:8px;top:-15px;width:248px}.connectors-page>p{color:#949494;text-align:center}@media (max-width:680px){.connectors-page .ai-plugin-callout{padding:12px 84px 12px 12px}.connectors-page .ai-plugin-callout__decoration{height:134px;right:4px;top:-8px;width:134px}}@media (max-width:480px){.connectors-page{padding:8px}.connectors-page .components-item{padding:12px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child svg{height:32px;width:32px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child>.components-h-stack:last-child{align-items:flex-end;flex-direction:column}}")),document.head.appendChild(e)}var we=i(N()),Le=i(_()),re=i(F()),q=i(Y()),y=i(C());var ne=i(N()),he=i(C());import{__experimentalRegisterConnector as Kt,__experimentalConnectorItem as Wt,__experimentalDefaultConnectorSettings as It}from"@wordpress/connectors";var Ue=i(S(),1),ke={};function ce(e,t){let n=Ue.useRef(ke);return n.current===ke&&(n.current=e(t)),n}function le(e,...t){let n=new URL(`https://base-ui.com/production-error/${e}`);return t.forEach(r=>n.searchParams.append("args[]",r)),`Base UI error #${e}; visit ${n} for the full message.`}var ee=i(S(),1);function de(e,t,n,r){let o=ce(Je).current;return Rt(o,e,t,n,r)&&Fe(o,[e,t,n,r]),o.callback}function Qe(e){let t=ce(Je).current;return qt(t,e)&&Fe(t,e),t.callback}function Je(){return{callback:null,cleanup:null,refs:[]}}function Rt(e,t,n,r,o){return e.refs[0]!==t||e.refs[1]!==n||e.refs[2]!==r||e.refs[3]!==o}function qt(e,t){return e.refs.length!==t.length||e.refs.some((n,r)=>n!==t[r])}function Fe(e,t){if(e.refs=t,t.every(n=>n==null)){e.callback=null;return}e.callback=n=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),n!=null){let r=Array(t.length).fill(null);for(let o=0;o{for(let o=0;o=e}function ue(e){if(!et.isValidElement(e))return null;let t=e,n=t.props;return($e(19)?n?.ref:t.ref)??null}function K(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}function tt(e,t){let n={};for(let r in e){let o=e[r];if(t?.hasOwnProperty(r)){let a=t[r](o);a!=null&&Object.assign(n,a);continue}o===!0?n[`data-${r.toLowerCase()}`]="":o&&(n[`data-${r.toLowerCase()}`]=o.toString())}return n}function nt(e,t){return typeof e=="function"?e(t):e}function rt(e,t){return typeof e=="function"?e(t):e}var I={};function $(e,t,n,r,o){let a={...fe(e,I)};return t&&(a=W(a,t)),n&&(a=W(a,n)),r&&(a=W(a,r)),o&&(a=W(a,o)),a}function ot(e){if(e.length===0)return I;if(e.length===1)return fe(e[0],I);let t={...fe(e[0],I)};for(let n=1;n=65&&o<=90&&(typeof t=="function"||typeof t>"u")}function at(e){return typeof e=="function"}function fe(e,t){return at(e)?e(t):e??I}function Xt(e,t){return t?e?n=>{if(St(n)){let o=n;Yt(o);let a=t(o);return o.baseUIHandlerPrevented||e?.(o),a}let r=t(n);return e?.(n),r}:t:e}function Yt(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function pe(e,t){return t?e?t+" "+e:t:e}function St(e){return e!=null&&typeof e=="object"&&"nativeEvent"in e}var Zt=Object.freeze([]),O=Object.freeze({});var ge=i(S(),1);function it(e,t,n={}){let r=t.render,o=At(t,n);if(n.enabled===!1)return null;let a=n.state??O;return Ct(e,r,o,a)}function At(e,t={}){let{className:n,style:r,render:o}=e,{state:a=O,ref:s,props:d,stateAttributesMapping:g,enabled:c=!0}=t,b=c?nt(n,a):void 0,p=c?rt(r,a):void 0,G=c?tt(a,g):O,l=c?K(G,Array.isArray(d)?ot(d):d)??O:O;return typeof document<"u"&&(c?Array.isArray(s)?l.ref=Qe([l.ref,ue(o),...s]):l.ref=de(l.ref,ue(o),s):de(null,null)),c?(b!==void 0&&(l.className=pe(l.className,b)),p!==void 0&&(l.style=K(l.style,p)),l):O}function Ct(e,t,n,r){if(t){if(typeof t=="function")return t(n,r);let o=$(n,t.props);return o.ref=n.ref,ee.cloneElement(t,o)}if(e&&typeof e=="string")return Et(e,n);throw new Error(le(8))}function Et(e,t){return e==="button"?(0,ge.createElement)("button",{type:"button",...t,key:t.key}):e==="img"?(0,ge.createElement)("img",{alt:"",...t,key:t.key}):ee.createElement(e,t)}function st(e){return it(e.defaultTagName??"div",e,e)}var lt=i(Y(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='244b5c59c0']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","244b5c59c0"),e.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._96e6251aad1a6136__badge{border-radius:var(--wpds-border-radius-lg,8px);font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-sm,12px);font-weight:var(--wpds-font-weight-regular,400);line-height:var(--wpds-font-line-height-xs,16px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wpds-dimension-padding-sm,8px)}._99f7158cb520f750__is-high-intent{background-color:var(--wpds-color-bg-surface-error,#f6e6e3);color:var(--wpds-color-fg-content-error,#470000)}.c20ebef2365bc8b7__is-medium-intent{background-color:var(--wpds-color-bg-surface-warning,#fde6bd);color:var(--wpds-color-fg-content-warning,#2e1900)}._365e1626c6202e52__is-low-intent{background-color:var(--wpds-color-bg-surface-caution,#fee994);color:var(--wpds-color-fg-content-caution,#281d00)}._33f8198127ddf4ef__is-stable-intent{background-color:var(--wpds-color-bg-surface-success,#c5f7cc);color:var(--wpds-color-fg-content-success,#002900)}._04c1aca8fc449412__is-informational-intent{background-color:var(--wpds-color-bg-surface-info,#deebfa);color:var(--wpds-color-fg-content-info,#001b4f)}._90726e69d495ec19__is-draft-intent{background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}._898f4a544993bd39__is-none-intent{background-color:var(--wpds-color-bg-surface-neutral,#f8f8f8);color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}}')),document.head.appendChild(e)}var ct={badge:"_96e6251aad1a6136__badge","is-high-intent":"_99f7158cb520f750__is-high-intent","is-medium-intent":"c20ebef2365bc8b7__is-medium-intent","is-low-intent":"_365e1626c6202e52__is-low-intent","is-stable-intent":"_33f8198127ddf4ef__is-stable-intent","is-informational-intent":"_04c1aca8fc449412__is-informational-intent","is-draft-intent":"_90726e69d495ec19__is-draft-intent","is-none-intent":"_898f4a544993bd39__is-none-intent"},me=(0,lt.forwardRef)(function({children:t,intent:n="none",render:r,className:o,...a},s){return st({render:r,defaultTagName:"span",ref:s,props:$(a,{className:X(ct.badge,ct[`is-${n}-intent`],o),children:t})})});var ve=i(_()),te=i(F()),k=i(Y()),L=i(C());function ft({pluginSlug:e,settingName:t,isInstalled:n,isActivated:r,keySource:o="none",initialIsConnected:a=!1}){let[s,d]=(0,k.useState)(!1),[g,c]=(0,k.useState)(!1),[b,p]=(0,k.useState)(a),[G,l]=(0,k.useState)(null),{derivedPluginStatus:x,canManagePlugins:Z,currentApiKey:v,canInstallPlugins:u}=(0,te.useSelect)(H=>{let B=H(ve.store),A=B.getEntityRecord("root","site")?.[t]??"",R=!!B.canUser("create",{kind:"root",name:"plugin"});if(!e)return{derivedPluginStatus:B.hasFinishedResolution("getEntityRecord",["root","site"])?"active":"checking",canManagePlugins:void 0,currentApiKey:A,canInstallPlugins:R};let Me=B.getEntityRecords("root","plugin");if(Me===null){if(!B.hasFinishedResolution("getEntityRecords",["root","plugin"]))return{derivedPluginStatus:"checking",canManagePlugins:void 0,currentApiKey:A,canInstallPlugins:R};let ie="not-installed";return r?ie="active":n&&(ie="inactive"),{derivedPluginStatus:ie,canManagePlugins:!1,currentApiKey:A,canInstallPlugins:R}}let Oe=Me.find(ae=>ae.plugin===`${e}/plugin`),De="not-installed";return Oe&&(De=Oe.status==="active"?"active":"inactive"),{derivedPluginStatus:De,canManagePlugins:!0,currentApiKey:A,canInstallPlugins:R}},[e,t,n,r]),f=G??x,m=Z,T=f==="active"&&b||G==="active"&&!!v,{saveEntityRecord:h,invalidateResolution:D}=(0,te.useDispatch)(ve.store),U=async()=>{if(e){c(!0);try{await h("root","plugin",{slug:e,status:"active"},{throwOnError:!0}),l("active"),D("getEntityRecord",["root","site"]),d(!0)}catch{}finally{c(!1)}}},j=async()=>{if(e){c(!0);try{await h("root","plugin",{plugin:`${e}/plugin`,status:"active"},{throwOnError:!0}),l("active"),D("getEntityRecord",["root","site"]),d(!0)}catch{}finally{c(!1)}}};return{pluginStatus:f,canInstallPlugins:u,canActivatePlugins:m,isExpanded:s,setIsExpanded:d,isBusy:g,isConnected:T,currentApiKey:v,keySource:o,handleButtonClick:()=>{if(f==="not-installed"){if(u===!1)return;U()}else if(f==="inactive"){if(m===!1)return;j()}else d(!s)},getButtonLabel:()=>{if(g)return f==="not-installed"?(0,L.__)("Installing\u2026"):(0,L.__)("Activating\u2026");if(s)return(0,L.__)("Cancel");if(T)return(0,L.__)("Edit");switch(f){case"checking":return(0,L.__)("Checking\u2026");case"not-installed":return(0,L.__)("Install");case"inactive":return(0,L.__)("Activate");case"active":return(0,L.__)("Set up")}},saveApiKey:async H=>{let B=v;try{let R=(await h("root","site",{[t]:H},{throwOnError:!0}))?.[t];if(H&&(R===B||!R))throw new Error("It was not possible to connect to the provider using this key.");p(!0)}catch(Q){throw console.error("Failed to save API key:",Q),Q}},removeApiKey:async()=>{try{await h("root","site",{[t]:""},{throwOnError:!0}),p(!1)}catch(H){throw console.error("Failed to remove API key:",H),H}}}}var pt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364l2.0201-1.1685a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4043-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z",fill:"currentColor"})),gt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M6.2 21.024L12.416 17.536L12.52 17.232L12.416 17.064H12.112L11.072 17L7.52 16.904L4.44 16.776L1.456 16.616L0.704 16.456L0 15.528L0.072 15.064L0.704 14.64L1.608 14.72L3.608 14.856L6.608 15.064L8.784 15.192L12.008 15.528H12.52L12.592 15.32L12.416 15.192L12.28 15.064L9.176 12.96L5.816 10.736L4.056 9.456L3.104 8.808L2.624 8.2L2.416 6.872L3.28 5.92L4.44 6L4.736 6.08L5.912 6.984L8.424 8.928L11.704 11.344L12.184 11.744L12.376 11.608L12.4 11.512L12.184 11.152L10.4 7.928L8.496 4.648L7.648 3.288L7.424 2.472C7.344 2.136 7.288 1.856 7.288 1.512L8.272 0.176L8.816 0L10.128 0.176L10.68 0.656L11.496 2.52L12.816 5.456L14.864 9.448L15.464 10.632L15.784 11.728L15.904 12.064H16.112V11.872L16.28 9.624L16.592 6.864L16.896 3.312L17 2.312L17.496 1.112L18.48 0.464L19.248 0.832L19.88 1.736L19.792 2.32L19.416 4.76L18.68 8.584L18.2 11.144H18.48L18.8 10.824L20.096 9.104L22.272 6.384L23.232 5.304L24.352 4.112L25.072 3.544H26.432L27.432 5.032L26.984 6.568L25.584 8.344L24.424 9.848L22.76 12.088L21.72 13.88L21.816 14.024L22.064 14L25.824 13.2L27.856 12.832L30.28 12.416L31.376 12.928L31.496 13.448L31.064 14.512L28.472 15.152L25.432 15.76L20.904 16.832L20.848 16.872L20.912 16.952L22.952 17.144L23.824 17.192H25.96L29.936 17.488L30.976 18.176L31.6 19.016L31.496 19.656L29.896 20.472L27.736 19.96L22.696 18.76L20.968 18.328H20.728V18.472L22.168 19.88L24.808 22.264L28.112 25.336L28.28 26.096L27.856 26.696L27.408 26.632L24.504 24.448L23.384 23.464L20.848 21.328H20.68V21.552L21.264 22.408L24.352 27.048L24.512 28.472L24.288 28.936L23.488 29.216L22.608 29.056L20.8 26.52L18.936 23.664L17.432 21.104L17.248 21.208L16.36 30.768L15.944 31.256L14.984 31.624L14.184 31.016L13.76 30.032L14.184 28.088L14.696 25.552L15.112 23.536L15.488 21.032L15.712 20.2L15.696 20.144L15.512 20.168L13.624 22.76L10.752 26.64L8.48 29.072L7.936 29.288L6.992 28.8L7.08 27.928L7.608 27.152L10.752 23.152L12.648 20.672L13.872 19.24L13.864 19.032H13.792L5.44 24.456L3.952 24.648L3.312 24.048L3.392 23.064L3.696 22.744L6.208 21.016L6.2 21.024Z",fill:"#D97757"})),mt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M0 4C0 1.79086 1.79086 0 4 0H28C30.2091 0 32 1.79086 32 4V28C32 30.2091 30.2091 32 28 32H4C1.79086 32 0 30.2091 0 28V4Z",fill:"#F0F0F0"}),React.createElement("path",{d:"M14.5 8V12H17.5V8H19V12H20.5C20.7652 12 21.0196 12.1054 21.2071 12.2929C21.3946 12.4804 21.5 12.7348 21.5 13V17L18.5 21V23C18.5 23.2652 18.3946 23.5196 18.2071 23.7071C18.0196 23.8946 17.7652 24 17.5 24H14.5C14.2348 24 13.9804 23.8946 13.7929 23.7071C13.6054 23.5196 13.5 23.2652 13.5 23V21L10.5 17V13C10.5 12.7348 10.6054 12.4804 10.7929 12.2929C10.9804 12.1054 11.2348 12 11.5 12H13V8H14.5ZM15 20.5V22.5H17V20.5L20 16.5V13.5H12V16.5L15 20.5Z",fill:"#949494"})),vt=()=>React.createElement("svg",{width:"40",height:"40",style:{flex:"none",lineHeight:1},viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"#3186FF"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-0)"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-1)"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-2)"}),React.createElement("defs",null,React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-0",x1:"7",x2:"11",y1:"15.5",y2:"12"},React.createElement("stop",{stopColor:"#08B962"}),React.createElement("stop",{offset:"1",stopColor:"#08B962",stopOpacity:"0"})),React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-1",x1:"8",x2:"11.5",y1:"5.5",y2:"11"},React.createElement("stop",{stopColor:"#F94543"}),React.createElement("stop",{offset:"1",stopColor:"#F94543",stopOpacity:"0"})),React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-2",x1:"3.5",x2:"17.5",y1:"13.5",y2:"12"},React.createElement("stop",{stopColor:"#FABC12"}),React.createElement("stop",{offset:".46",stopColor:"#FABC12",stopOpacity:"0"}))));function Pe(){try{return JSON.parse(document.getElementById("wp-script-module-data-options-connectors-wp-admin")?.textContent??"")?.connectors??{}}catch{return{}}}var kt={google:vt,openai:pt,anthropic:gt};function Ut(e,t,n){if(n)return React.createElement("img",{src:n,alt:t,width:40,height:40});let r=kt[e];return React.createElement(r||mt,null)}var Qt=()=>React.createElement("span",{style:{color:"#345b37",backgroundColor:"#eff8f0",padding:"4px 12px",borderRadius:"2px",fontSize:"13px",fontWeight:500,whiteSpace:"nowrap"}},(0,he.__)("Connected")),Jt=()=>React.createElement(me,null,(0,he.__)("Not available"));function Ft({label:e,description:t,pluginSlug:n,settingName:r,helpUrl:o,icon:a,isInstalled:s,isActivated:d,keySource:g,initialIsConnected:c}){let b;try{o&&(b=new URL(o).hostname)}catch{}let{pluginStatus:p,canInstallPlugins:G,canActivatePlugins:l,isExpanded:x,setIsExpanded:Z,isBusy:v,isConnected:u,currentApiKey:f,keySource:m,handleButtonClick:T,getButtonLabel:h,saveApiKey:D,removeApiKey:U}=ft({pluginSlug:n,settingName:r,isInstalled:s,isActivated:d,keySource:g,initialIsConnected:c}),j=m==="env"||m==="constant",oe=p==="not-installed"&&G===!1||p==="inactive"&&l===!1,xe=!oe;return React.createElement(Wt,{className:n?`connector-item--${n}`:void 0,icon:a,name:e,description:t,actionArea:React.createElement(ne.__experimentalHStack,{spacing:3,expanded:!1},u&&React.createElement(Qt,null),oe&&React.createElement(Jt,null),xe&&React.createElement(ne.Button,{variant:x||u?"tertiary":"secondary",size:x||u?void 0:"compact",onClick:T,disabled:p==="checking"||v,isBusy:v,"aria-expanded":x},h()))},x&&p==="active"&&React.createElement(It,{key:u?"connected":"setup",initialValue:j?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":f,helpUrl:o,helpLabel:b,readOnly:u||j,keySource:m,onRemove:j?void 0:U,onSave:async ze=>{await D(ze),Z(!1)}}))}function ht(){let e=Pe(),t=n=>n.replace(/[^a-z0-9-]/gi,"-");for(let[n,r]of Object.entries(e)){let{authentication:o}=r;if(r.type!=="ai_provider"||o.method!=="api_key")continue;let a=`${t(r.type)}/${t(n)}`;Kt(a,{label:r.name,description:r.description,render:s=>React.createElement(Ft,{...s,pluginSlug:r.plugin?.slug,settingName:o.settingName,helpUrl:o.credentialsUrl??void 0,icon:Ut(n,r.name,r.logoUrl),isInstalled:r.plugin?.isInstalled,isActivated:r.plugin?.isActivated,keySource:o.keySource,initialIsConnected:o.isConnected})})}}function Pt(){return React.createElement("div",{className:"ai-plugin-callout__decoration","aria-hidden":"true"},React.createElement("svg",{viewBox:"0 0 248 248",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",focusable:"false",style:{width:"100%",height:"100%"}},React.createElement("image",{href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAAD4CAYAAADB0SsLAACAAElEQVR4XuzdB7hlRZEH8D73zRBniJLDzBAEVFQMKCaCWXENa1oTYM45hwXEtOa0ZgVzWnPOBHPWVcxgzjnrGvb/O91n5s5lZnjAe4Bw6vvqO3XPPed0rO6q6urqUkYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEEUaYD3RdtxY9/XuEEUb4F4aBoWdxhBFG+BeHxsxg0+BmwSXBrYPbBTfOI3Dz4NKZV0cYYYTFhMlkskGcm5tbC6f/m5mtlwavGLxacKt8+k7BY4N7B/cLHhbceTrtaRi+A2bTX7JkSY9Lly4tG220UY8jjDDCmcAsM8/iLHOfCYObtS8bPCi4ZfCIJPHw4J6lMvlVgzuslYEpmP7WbPoDc08z+MYbEwpGGGGEdcIUo24V3CG4WXB5o103R4fBtgpuFkRvm3ubBrcPXiTMuElw+66K4uhdgrt3VUx33Se4PMltF1wRREOMTmTfrNHL2/s7BLfMtzdq+dgmaW4UBt8+zH2RYHh7o+2C24fBl45MPsKFGsx8U4w8O+MO918U/FnwLsGH5f5Pcz0ueJT7YbAXB68f/HnwncGr5pmfBD/Z1Rn79OA3ggcEP5N3fpzrFYLvDqKvkaycEPxx8BbBxwd/Erxv8F6NflKeu0lL+1W5HtzS/lDKcLlcfxLm/lLw0mHq0zbZZJOf5rqPmVwZlWWEES5UQJwddNdp0RozTGPuvTb4z+B9MXbu/SPXpwbv6n7efV3wxo3+SPDQPPPP4Le6ysi/C/46ePk8813Phb5K8FPtuesnO28K/jNIbH9Wox8RfEijn5fnbtWef2fwmi1Pn096Vwz+I+X4Ucp0uTD1bzbddNN/ht5vGMC6kcFHuDCBma3prBuHCTYJg4QPJht1VQyeBKfp/YJmZeL1KnSe3TO4W967Wt6/WK475nrl4KVCbx28XJ7bv6u6tpkbbtHumdXd913PbVOqHn75UkX13RvN4LYjOs+sCBL56e/7JO1tglcJXiq4ZdK7StK+fHDLlOmg4JVCL8/9jfO/ciwp1VK/SamWela4gR5hhH9tMEPDaWNUcJsw+qeDX8l/FwsjvC2McGoQc704+OXQ1w4eG/x88NbBu6Pz7IOCN897X8w3n5ZvHZDvvCLX/8zvTlrDzDkfPDNoz+2bb94r12sEr9TyQbowaHw2ab4vaNY+JfhJ94Nme2U6KJ95WfDLwesGn9ToO86kMe88jTDC+QKGDovh4MDowR2iqxJ/idaXy3+no/Psobme0uj/yPWVjX5g8AnoPPtszIbOd94ZvFrE4q9E7315mHzO9+fL5GcGU8/K49OCBprrlZqnrwWv1OhfJs0Dg3/xO1ez/XfRQXr+xxp9y+DrG82KP8II/5owy0wzDM76fI3gdXOPZZoYfr2uOqBcIa/TjYnIl87vfwvuEbxYoy+e5/fMezcMQxONt8v1KpnFLxWcLOQ69FT+ifX7BnfuqjX9Bl1VF1juD09erhFkVb9O8Lru5//Duqrjs8QbCAwMuwUvU2r5LjqV1AgjnH9hihFW/27XywQ/GDw+nX6fMOP7g28JE+yR6+uC7wi9V/573qSKtEReDLRvXqc3n2GggNODxSD2L5aTyWzasygv68Lh/wZPDb6j1PX2Bzf634J3Dn6wXW/caA44PQzvD+mMMML5Da5Vqgj7veAV0WFCIuwBYc5eRE/HZeH+YXuOjnux0Ga/nWaZaejomHuawReLuQeYzcNsfoY8zTJ4A5z5pVLF8lsF39zoBwSf0eint9/o99TXRhjhfA6YNJfb5nqjdPrtgrcOI9wiuG3wdsE7BTmi3Cx4Z88Ht+qqKMx3fPaT/4qAwc3OdwnuFbx68K7BSwYvGzyyVMs9l1m0/0cY4XwFNwy+vNROzGqMfmhwn+DzgkeHWVeEwZ87qcaqLaZnu2HGm8WzA9Oz5/R31kcPvwfw/rruLxIwuj0/eJMgAyP69qUyvDq0Hq8O0U8pdbltLVhMyWWEEQZ4bKni5f+U6jCC/mTw2o3+QddEdBgm2nl9DA7OBcY6v8BLSq2TZwYf1GgiPFEe/flSZ3T0r4LLvDSoJwNSU0YYYTHhysFHBm8QvHipS0A6KSeSxwTvE6bdNddjgo/oquPJWoys016QYT2D1+Glusdep1TJB81llpFRHd62VOebhwXvHrRpZrXOf27ZIEa48IClK3qkjRjEcmvTDGkHBh9VqmWYkQx9ZH1l3TDfWXp9IvN63t++VAeSm5Wa12NKzQtbgBmSpIFhMMvjSl2qunWjDyiV4dCHBA8uleGIzxcpVRrxzFowSCDrgvXdnwdcotR8367U/KI5+rBNPC7fPSYMbpPL7cLYd2uOQz3DjzDCOQEd3Hout84TShUd6YZ0xVkR/Yv1lTUwzNrrYc6FgP2Dny1VzLXe3KsEwcsFf9doS1XfCP6j1AHJ0pT79ogTmf8ePK7UwcH915VqACNGW85aLyxg2ejhsyL6T7vq6deXKcy8f5j6pE033fSrYfCLmskHS/4II5xdGLZW8qUmSjIKEcuJmK8olUno2oOBqIeh029otlsgMIPfo1T1gD/5k4P/Fdyl1PVlTLqy1CWp/y6Vce8QfG6pUsi/l2oUNFsLAoE2w29bahkNGgsK6xkQBkMlMZ2R7YTgf3V1m+szU4dPCYPvFLxjGPu+uVqVWMueMcII8wE9Rae3rLOqVLdLsxjGMCuarV0XC8xe0iOyWlIygPB00+mJ4oeWyryYlHcYRqS33jCdfMtcbx68aegt3CuV8bcO8nO/TakDAi+62wQNXNJwn5pBD3bfrOm/I0stP3FfntSLAU+euLDauOKZO4R23wBoVcHz5xiadGD14XbB/5irnnP/Eea+Q64XsfyY+3fLM7u1Z2c/McIIZxAzWb6+XqpYiFne1ej7lDq7oc1+iwU8vqTB+8tMTHx+TqmztPtvK1XMJm5/IXi1dv/npTJrL86mPGbe37bf3Ea/1u7Tud/X7hOLbXRBm+3/s9FmUrow+pRSZ3fpnV6qtOL+H/MtA92QnkHoR+05g9Q5htYuBp4+jTD0AWHovzVaOKre9z3X6w9tODL5CGvBdMeY6hyDm6XObI80mrhqVqe/mqV6GN5xXSBRnGHs7aXq/WbEt5bKbGZutIGG3v2WUq31DID2dxt0VgRfXarqwAf8Bf5L3jxjR5fBgbOJMtnNZnAgCbjPsGbGRyufVQK0lQLSBPppeWfP4JuDx3d1nf9Vwf9xv9SBSB4x5VmGaVF7qk12Db43/705TL1H8JXBtwf3zr1nd3W/uu2x62rHES7MMHSorsYvu2ZXN3YQec1GGMymiUuXKgqvnHp1IQDD0uUFRJSeWVl6VAGDCesxhmWxX1mqVZuOjJHAwaUyHkeQQ4IHdjViKoOaAA8bdzXo4qHBTXOPjzy3WKK7TSzKy6Nuj/y+VlfFXGkS5cVss3nEzM1X3juet1dc+KerT+r+cOGiRHs5LLh5V7eV+haVgE6tTMR1hsobBQ0O82bA4VntBMPUS+fqJhcbXOxLt/nlepO60UVZb9xVnX3eaYxwAQVLLHPNvzsdxM6pX5Qq7mE8Vmli4U1LnbnQROaFAmrAD0r9rln0w6WKtjdP+sN20fsHe2eaXPlv03s9/4ZSBwD3P93Vvdfu/zC0wQj9f6EvGSS29+JzcPANx8CD2kEyMPN7hnhu7RnNsv4f7ZkPlDVWbdtFe7E8dfbb1N2l+dn7PVe3wH6/vW8g+kR7h5pjpQH98K4xrHqfdlxZH3h+aKfgdhtvvHGfXt65Qn6fjs73rpPnTkbnehfvDOmMcCEEwQEHRwmdKx3FTETU+2yudNeXlbrkpaNaEvvfUg1ZPeg8CwBvDH66VJH52UEhlQ4OPjJ5+EyuDGW37yoT37OreqZnHt3VKC1ooZVEakG/MbgyeFLwg/nGykkNKuG/iwZPaGl4l3X60/nfrHz/dp//PMOZ9B7c1YHuU8Gnhr6U+6FfkXeIxp9Knb07uGrp0qUnpQ4/HnqvoDzIuy2vVht865Cg0FPu3xbTDQw+MPlArw+mvNe2Tpt9IvjV/L543nlTvvXloNmbuP7ZIGPj6ll/ZPILGWDuhkvSUQ5Ip7l0OstmwUunMxwYXJYOQty0AYQ/pB6i982bq3WwBt4jRhO7fcsVQ6PttSY2C9dEdL3spEZS3SV4mUn1Xb9IkGHJdVlQHncKinluhqYDA9FULhrsgqLFQExz0eAlQ4sRtYf352pYpV2DB4QWqdWGGOltHbRP/TK5L4KqjS/S3j3oHXqu0FG+JVSUaC6CTeyfOrxUrsRn4aSUw7sGgsvP1b3vK3O9Yq7b57rLXA0UsWve2d5MHNx72AK7Phj+D05auiLZTFp+klx38eCVJrWuVoW+wmTKPXiECwFMMTfcWbDAXP8RRr9sOk5vkU2nob/qLFfv6tLPmcLQiQbs1uiAK0oVTX2bB9mPct9vrq1f9p+OGHw/Ou/eMOkfj04HvmfwGHTuPSn/sXh7nlGr35Ka6ylBa9nob+W5SwT/lPd+h9ly7UXmSWVgszH66vmvD7o4qUtP/fbNXB8SNJujbZCxJCa9t4em16OFbbpUe/dHZtHU3e9Fqgl9qdTht9r7dOOTGn2T4Ksafc/ctzKA/q+800epyXtvxbwkqpk2KtMwMPmSNqPPrb0OztovX7cJUjHQx3rGs6Nb6wUc0glncdugkL/fTuPrqJ9KRxAa2F5tgQb76CVTzLpOGDrb0OFcW4dzNUDQrz8QevdcPx78elcNW+/r6p5xMyzR93t59xrpwE9Mxxax9DbB+yRfGOlhwZtOapTUZ4QW9PAHwf9JmvsHvx8UG22vvPP14FeCewQ/EfTcfvn/rZ4LfcXg8/PdH+a/64d+VO5/L/Sdg3d0P/eOC17LfcyS62W9G/pdue4T/G5Qfe2Z508Nnp539wmenHveF1r5da1M1879ZylHrrcLPlTeXYNHpKw/zn8vnmXu6baaBv8tmWHw1kbE9Z/k3k1yNSCqk/svnRk4RrgAwtDIraH7WVnHCb1f8OIbV3F9WToNy2wv902q6LdB2c7frZP1hwFMqhjtN9GXWKsjEkUxt2fpyHu1DrnbpIrV7u8U3DfPTZbWAwX2TX42ynULdHB5/tskKELMRZZUERW9k7LlundwBTqI6aDyuuc/z+y8tDJhF9wGnf/ncl2WK3rTliYXUOl2eeeiwe2UsTH2zgOd+6vad/du70jboEJ0ByuCF8/vTYPySZQXhVX5hJraMbhVkKFuRXAT17TFTsFNguhdg5MNMab6a4OpqK4izCrDnsHLJf0dllafdfVxEd9RLyNcgGBgQh0wjXuJzTff/J9m7jT2PhHRf77ZZpv9tnWm1eJfY9rZT60Fw8zeGPrf8x0i4at0/txnpPO/JTdWbzMf77PPBL9vBs+zH096f8x9NoA3h/5T8ned5OM5y5Ytk8c7Bh8W/L/cPy7/39ozwRcHD8tzf87994W+TPAPob8Y3DfP/yz44/x/0eBXQ/vuJfPMibmir5r7r5RGrjfJ/0+QRvDewbu3tJ+a566f//+a914XPDB5/EOuH871Yrn/x/z/jSV1ADBL/8z93Pt8/pPHKwTfpXy5d3juvaR9987BY6WXe653bvePz2/qyZ/znfekXa6inVJHn8h12RZbbNFtvfXW6xWjWhtMt/NLg38J3j/4qKaKvSB0/7/nRrgAAUbUqDphGvivaejTghj81+lg/5frqnSyszW6N0bnIPL7XF+dNPbG7KEFecDg7w5y1LDTi+eZ00VW5ven2qDAQEUH/XPwOsnDfyc/f0+HxOAP1dFz7zHBW+e5v+SZ4zG4d3PvA43BlYmovE/K83sDV+i98v63vJ//L5HfH27PXTnffk1L40Z55om+FRqD38P9XJ+W567nft55w5IaA13+PpZ63BdThj5trsaWI8b/Iv/vl3tf8E7oA0O/W37znesHj2/fvVPwuDbIPjpp3jmI2V+c3zfwbr75pm233dZ6Ouv4u8PYy5YvXz4JkjzWqvtpwOD+14bBl+d76udBwUdKI9cX+n8YvOEIFxBIZ7EMVk2uc3MXx4StI+yajrAinW8uOPvafIA12/c5yoiCyvKuE7EWO99LpyO6C6roOYcZENPRLLx763Bz9ZwxIrrnic/EcqLm8iDG2WJJtfQTf1meged3XVqtymhLVsq0dzr0UL6VS9eIz7vkmYHe1v383wU3a7SDxojsewc395x6WrJmU4e8DiK6mXsQ0VnqIXrPuWZdD+yeq7omolMPpkV0EsX2GzURXRtsWeEyO+6448X33nvvXXbdddfL7rDDDpcIbp4ZfKuUact8S/vNtsFqaGWGxH9l3Trv7L60ShS84Bw6YbVgUKVmPzHCvwJgoCngcnla8I1pUC6bX83/p6ShN9IZzNzzZe6Z73Lx/Gap2yyl4bvWpVeG/mKuzvTipfaRUoMK8u5iWf7frsZh4275rUk16L1kUq3gTi55XDrjd4O3SP7uGSQCPyj//XueOT30U5dUI9u3g68JMrJ9K9cPYrA8/6XgF/P+qlw/vFE1gBkA3pDnTltSZ+Nn5t53gtcKPiTPSO+I3Bc/ThoPDx7imfx+TtK9RPL7zeAbQhvIHNIgWuyqXD8e/EJotgXl/HresZzHcCi9w4JPaWW6VfABrUwPDDoe6bQ894S0wWG5vi//PWqPPfa4Yhj6HsH7hcF53X0k+Ml81+DWq1Hrg4HJl9aBzGD08HxXOVjUbx36By1v40x+AYHBC+ujpe7I+nPwO2lY67Z9Jzib4LA+37UFUxo2hfDDlsZfSnUeMXN7hpcZ495PvdPVo4GGZTLM8F50rg4VfBE617sG+YGjn5j/jmjPvDp4zUZ/ODh4lp0+V2dPevMfl1T9+IftfZb6YZmMiym7wLCExZEHfb9gv2yV/5/Z1fjmaM4ydpcpx6fy23KfTSynRqTm0vqtMNQ/w6DW+DkH/WVSl+747Hv/8CDfeGncJSi4hPuPDfLtVwf0496RJ3k/ZtWqVZblMOq9d9llF8clSfunKQ9j5Jnq0NrUIOC5vMsHX3qW/npvwK76tq9mcDjCvy5QrK3d2nwBdMqViG4Dy1/zALHCbK8cwNKXGbunG3PrPOhBLEdzcEG7x88bzQ+cUwk1giOLdWuWeGeCcRzhjMLxhTsoxxMqh3PGOJMs9cxcXQNnXefMgil6m8Nc3YHV52NSHV04w+wYxPREXtZnNKu/b3Ga6QNE5vtm7kG96B1r0PnuJTF0ROdNw+QXD+6PjjRk7Z1PgeOGe0eXSRWHV0yqE5FDE5SPEwqVwYrAQXnvotG7t4u+fdUVK1Zc/sADD7xYmPzKwcuvXLlyh4juB3kuuJH8tzJMVf0Zwf8NV03qkicnHSsXh6YM6kddL2l4pt8b4TwGHW8KbBSx/nx0qQz9mlJFaWAP87xh5rtmbSK3/dP2SfPTFgrJrM1Z5dhS90vbjvncvOsc7/el81APeHdx5Xx/V0X3F3XVrdQSGtfRU7p6OCAf9A8Hr593uHYST4VXvm67/6iubvrw/LPyP1fVk7vqALMy+J7gu4J2YTlL7ORJ9ez67/YckfdRk+okc1Dwjo3m4umklZO66s9tgwiV4phSB68PBZ9tFu3qmvMTdtppJ3r4HYP32X777TGQ3WZcWA18T/N+VzeBiEkn7zbz3LGrIvedgjbbeOZhGTCunPffmm89EpNnkHgk9SHfNSC+Jfi2fJc9g5eeQcsgVzYE/p/GfOMWwY+F/q/gYcHPTep5awakM5UMRjj/AP2YWPfaUiOSfC5oEwfgXXZ2AxI8s9TvCo98VKkbRGyRPLjdJ2oTYYmBHFrsDvtns6qbrf7a/jNjswt4xwaRE9t9Hb73ZAt9j+Ax6EllnKFMNm70m02CzgS3E83zorhyi3X/r6ENOj9r//ElJz6jr1LqVlO0M8AdQIA2sNiKiqZ2GCR9y8YU+8ypIP+bvBgwPfMmBrHQGOOe2223HWmEDt5b0UvdR/73rpbJAOsdwRl6T7bg40MbHOX1FfmGlQhlfUukAd6EnIPevPnmm5O+nIVOxCcJOAPt0EmVcCS/QZhibni/UvNhABS3XXrfwOCYm2i/8QbW3Ec4/4CoJWZYMw/QSUQ4PaewMohBlpfqT07/ZTwDBhJr3QBD2OChUxFT+ZzraDZ6XBldKmMbGID901xjHb3LWGXLpeN7DQR2f60Kbh/E2NxoSQC2ctKNqQqeF6WFlMAecGhXfdylZYsoK78Z2ekp6D1DH9KesWXUu3zwWRsx1+CiSxde2Wi73pyRRkQ/eKuttrrirrvuuv0222xzYKN3yEB2UBjl6mESPvXqw2YWZ6/Jsx1fVhGkTRqxxEbKYHe4VN7hQ3696N1XiEi+XdK4dvCq+eZWuX+Dhr5LbfEs0bplbcPQ1XaADJo8Aq/SBot/z/VaSWcJ5macw+AMryOc/wCT2OLI2GNWMxPesVSR/DFTz50p6AxTIAADSWDYI/7CUju+2UtABfuczdTuC2uESRjKHtlVeGHwGa2DMV4dH9SDqAwvL1Wk5wNOwpD3I7tqgcf8RFoBHGwjxYRokUZtWEH/Z1cZhq83kdggJkKLvOyY/54efEVX93nbDopemSsRXNrEezPny7o6GCjjS4M36qo7LVrwB3vR0UR74Z9Z/Y+L+CxG2n3CJA/IDG4ftjK/IPekQcp5ZX4bXH1DHg8tdQuuvDvZ5TDPBO/aBgT5eGTe78JokzAazz4edWutXw84X+jq4Opqw8vjg06aoZ5YWXhivu845ncnvdfmuiUmPwfG1xEWCXQWFlOd6IhSLb3TkUZfPzyowc8CiK7iffuaHx0kZhNlndDhPnHWMhkRlh6OMdwngpMkiIH2Z1tPdh+amb/XaDM5ewFagASMh753njEIoA0QgwWYPjqIz1SPIYQSC/0gokN68K8bjclObbTB6R2NFiCh32xSqn3hno2mdgxqALXD7I+mdhhQerUjaBecaK2nRpQ2ONlS+tOUl2QxlImILkor+m7BJzaaqC4MlRUHzE9k/k2QjrxaHx6WuzD5wNRnhbl9Z4rBDZREcqsS/WaaXG091Xf+2ZyCth2W2UY4fwFmYg3eps0g9m/r/ERYoY/6pRdwFhkc8+oMgDRgABmsMVfrqp4NMMQQqggDCsQAHLtLPJWupSczGKBCkDj0VnkT7JDoTbwXiGFFVw1iZnQMujLXo4KeZUM4MnjdUoMuouVxy1IjovquLa83KfWctM1yvWapARjdl4Y6Qa9o70qb6uEdhj+VhCYtAPk+WDnaDHh46jnkhJRxo2XLlhGfGeluGeYQQIOqwBipfujNR5Qa0UVZlMmecX4Jt/fd4KpSDZb/Lg2I0RYCWp4hEd1aOBHdPoC7B29OXE9Z7h48Knnn+LPBtfYRziXQcFOgsxNTWYOJz2Y/nX1eMPOtB5b6LQYlIuwjShWlGdDMQnaZYZojg/ZGG+69Iw8APaT9kOC9G83I86hGE+dJBAYgDh+P7apF/fBSDyIws9N7Hx+kR5tFn5ArxpQvMyDR1/LfE0pVJTDTMaWuHmB8+fBd+SUBPKarujy1wnMs4gxi8oTBfEtZ3ROmyTq8QQmn+SbGnAseE8a4X5iAzeBBwYeEKTyPQY9OfcjHkaWmh6kNFMpEmjJb9mUq1YahHAaCRYXG4NNoKfLpwQckv/sGn57yHJfrMrP+IEGMcP4BDEn0E0nE7E3cIzKfHRjEWYYsVmtiOaagV7oPzOSnlLo01u/JLtVjbWWpZ2qJAmNQcJ8YiuGI8X5jpO+jG+N+tNEGk94ppFQ1gO0AzXpvQEC/tauRUdF820kK6J93dXZEQ4OcOkAbLL7aaBLAOxttMBxEdOKyAQMtwowZGE1E37/RvNkGFeSPYY6VpZVpUh1gqB2s4kR0W2P/VuoAQT3qreilMrTVB6L6oBJQGRYdZhjcQClPXw0z9yJ66D9N6lr97IA/wvkAdEgzIlGZWPnYUkXdHs5igzHOmckcJIDJ6afE85WlDh6ilJi1b1aqYQxgjkMafUSp+QB3KFUMBZjUt4DvPLjUI5EsVwn4L71rlTWRTDEvQ9ohpZaJocxAQ7Q9OnhE/jNYuM8LjZpCYvBdAwqmVQ4zuPSk4b68eYbxTDoGE0BMx3QGB7O2+4e0/xgC6bCcQh4UvEuQRf5ewfuFVg5lFe5JXbFRGBDlj2QjbQOFEM6McaQTA5K8q8cezmI7nWUYGLyrjkXDDE5cf0zwYZMaPHLR8zHCemCm4hlwdBy6Nr0S82D0swo6M2bAHJgME5ltzMCYDHNoeLqvNC1HyQidk1gN6LFmStAvYbWOQgc3Mw/P+BYwC2N8yp48c2bBfNK7a6lMjKmJvWZEM6Q80qUxDUYk+hKH0b7rfYMIcZw+TvS19oxmwDMIodkVjipV515Zms5eaoRWxsRhSRGNCUHv3KNMYYKjgjdvjMJ2QHQ34MnPHUJTO9QBpxZ1KD15Mvv7Hiu+pUNlUr5BtZlt30WBgcmnmF0Iqwd01flG3VJ39AX1OcK5CTMdgPhMxHtUqbP3/5VqkT2rQH8cxFnr3KKqEj110t5vu5zRio4p3Gdx9s6fgu9O/uiy7ltP3SUXQQn91lmIpmidiDiLNih8pNEGDyK65+jt7AjuP6tMieilDg5oIjrmQf+srLF2QzOzMvmWwe8r7f7BZY2IznL99EYbJAYR3T2iPNqz+6BTtm91TUS3xzr0yvYMml3gh42WHhFd2qQFji5oZaB/e8fVIGpvwFtKg3ODwcEMg/d1mOtvuqkjn0u1dYxwbsJMByASnlBqJzILHF+qcaeHs9BZrEvbdMF9dM9SR+8XdHWGOSL4nK46a9DVdH4xyHX6pwZtkiAae/+2G220kW8RZ2+y2Wabmel9ywAE6NR0XrMd8dUS29aldnS2A7O2gcP6OlGWNd6aOkY0iLy41FnRLIj2be94BsOQJujP1tvNwu69sN0fysQf3uz9vFIZ1yBmADHQWAVQPmlt2t4nfbA4yff98i5ruR1mNovwY39qrpbxOLQcXeqApz4MGGgDgjI9t1SjGhVE2sqGmZTbwNLDWWizcwzSaihIhzX7Z3V1oJJX9UZiG+HchJkOoMPQ3zCljo52bz5AjLRsBOmMOpylIDT9kJhufze90TIX0Zb4fmhQZ6Zzes4sDdDyAGymsMRlhhC8QEcGmNYgAYjdOjvAsAYoTGX92gytc2EODEbPN+sTgZWPWE7cP6RUyQBtkKNDe97SFakE8xoclNWM7D6a6E+94L0m/yza7lNVzGbyMYD6AMpnw4k24F1niRBNbOdJ5xnlmy4TT7Y+amypaVg+k961Uy+WAQ0EpBZ10UP7zrkCbfZ2pX5x+uFFuE1QP2BvUIfnap5GWBuIfkQps6HZA/3K4c8zaZhBlCY6YpoflSqWY4RPt/8wGjWAGGkmZwF2n95P3PxdqbMR5hrEWaIxUfUTpTKl+57DlKzpfptdv91ozHZSo6V3QqnWZ0azYxttVh3E5zeXqk/L62fKmrPJ5J9o7D5VxYz88/bfFUq16ruP0d7e7rMk+/YfSl3CM+u6Txrx3Z+W6qSiTO6fWuoAJI3fpn4FhHCfeMs1d1A7MPegdhjQXl5qPd+u1OU5ao6ykcA888bS4EzabEFhSky3Q4/ziyW/YcWgVzvkZ8ARzn0gCr+v1NlWZz2lVFG0B423ATAbv7ehGfK1pW76wHBEZ0zH4EW8lobZkFHM0huR04yPoTGiAeLdperoBg6DwtNKnV3tp35tV4/84SpqmcvsT+TFaBj/P0vd1CFthsIPlbq8hCFOLJW5zXTK51ki9MmliuMYWV7ZHpTDdyw7Eb+HMmFQ4rLvmi2PafQhpRq/5F0dKhP6iPaO5a0HlFqm95Sa3opS6+M1XZ2Nlcc7JA6DnbTV7TGllo/IK/9vK1UkNzjRuUkdBlP3V7fZuclIUwxul5pddQyHewTfFnxXV89FW83g52beLsyACQ4uVXQ0Ew7i7/kWdIzWkfadNNG9q9Z3TAQwBEZlUf+XgNmO3zq/2d0MCHYsdZABBjRi+gCCUWwa/V15Ob9QRc4TmGLyAW3xPSRoxxoVjYplI1Afjmtk8kUAFT8FJ5YqQtGdzRjoo6cfOD+BDjF4RrE85xanEBtBvoYulSnMjsTnYTntfA+zzN06/ndKLRNj3QcbTQoa2kn5qAK/L21dPfiLUo2j5xkMzK2NchX62dbUv01qUI1hZaDfBTgy+CLATKWyMH+5VHHSYXZiod11eOasNIBGnX5vQ/R80TftRtpss836WG/Q7xYr7KPBL3KHzLOvC34haKajB3+uqwcJzhtm056+tz76nKLyDT7itlUOO68wR/5/e1fLZDMNcf7zpRoeqR10clKKdvtoWSOif7hMDdDSOC9gGISDu0W6EGPui5Ma9ea9ydNXurpuf57l78IEq4I2KnDSoL9a++Vffb6qfIyNAYLLgg5WwBiCBoqgilEweZ/vUh1MhiUZS1KcQ87X4vqwbzrX3cLgO7fdXkJBDXor67nVhtlXZ4EeP1jqz1NoDA4uAic1jJWVA3v6+yi58yjPCOcQGGX+mIo2AzyTFberYYxWzzDnNgxpD2hGa8y91bJly07OldENM/wyKOKJ0L1OwvxbV9erxR5XDgYwFnqzmqWa8wXMlg8zY/Dg1inbH9o2S2GbvxzG+EfKJpjD21uZ2EweF/x2K5/3iesMlgyJPy7VqNnDedF+AzQGd4KM3WYOMjRgCdD596C95KvrYITFA8tg9CLW2Cemsi3XPHSo+POig0x3funrKJg8M/ZyzJ3ri8IMjub5etApIAIRfiDP/zR4kVIdVZxTRh/njspbTec/38B0GYfy2UGW8n03+KOUy0z+0fwnvJI1bo4jPwuy7Bu0hItmUKOHf6vU3XbXDH6j1COKpw1daxI+F2Fg8MbcfBkwOFH9l5MaNHKtehhhAaBVJM+vqvhVcY5ex0tsYwzS1SWo86zSk64DEIij/UaFdAR7ih0kgMmdibWs6eEOL9i8ibPDe7Of8x+/8NU/p2j3h3rgAUdNWRToasaoCa7O5+UAQq3o1YuUwYClTLsGd0KnyLZakk4GJrCddObLZwBqSv/d4MZ5v4+Pdh4yuait8iAQow3v+wVFYTUoa2NRZvW786y/XSBgpoE/UKooZ1mJRfbbpXp1nWcj6kz+eND9Knl4Q1fPpf51GOCjwZXp+L8Ic38jV4f8OfnTDE63s54uXjoPMiLqV0p18aR6KCOD2y1LjQxjLdo69Q9KXYs+tFQnFmv4PSwCQ5AseKZZwuL08stSI6CKy/bLMMCpKcuKzN6nB50QuuPSenaZGZwebs1fm5FKrN0rh+/cttTjlInovPe+k+eenG8K+ywC7RMGBjcQnhcg7YZ2DX4p+ItJndGdCPvrrm4gOtf73AUKZjrsJyc1+D14RanLLBxbejgfVLSADfRN0TqJd/TsLwb3oHOn8/88nd8xPc4MswRD4uAtZ2mMOyRxVvkYDQGnFc4smMH9h5XK+H8q1Qfduqz7LNM9LEIdGGwwpPXrPj15Doqb/reUwekkznRzvpvy7tJ0cMuAq/IcBx95ZDnns8+LjwWdY5D7LOvsDPaPvzDvXHKzzTb7bN5/xsBgGP28gCkGF/DRUcnKLhjlR1s92N67GHV+4YEZBmdhZowCNnPodNP+0uc18FNn2bc8ZL+0s7oEJCS27hymdhYYevPc78/Fap1jPtNu7w/dgHOMGR+YGVcMfyxCZ5M31n1Xde4QBIEVtc2eKccuGDBlNHM7iw1D2ojSW85bfqbzPk2TDgbwzUFER+8wVT+LCUO5BpVnzR9rGNzhCMptiUwebUqxDXi6jCOcHZipPP7QXyy1Uz+50fMyQg0NsdCNMTMAyQs/7edP6trpV4Jv1Pkzg38p6GRPZ4ifmPufbe++LPip9j4jFPdPHl82h/A3HzagmOm5rFoz/kKpPtx8zr9Uqo93Dwtdvhk4MGgt2Nr9ykk1PL0/DL1tyqRsnzZw5b/Xd3UdnH2Aq652Mhg/sNQAkcrAzVc5SCeMbF/M84JaOCCBTwNpZlHabAakTW1g0GTjWQ1T6Ysg+6GWL3X+6uDXQnt3sfN3wYaZysM8xNmDy5qIoEcNf84w27kCM/nDgP8I6gx2YxHDvxmkv/6TCBt6qyARm4hnZtTJlYMkgtmtDKws1Yfbfb7ndy11YwYdlojuPvH9sFLrA/OfG3D1Ust3alfj3SnPr1LvnEL6DTShxVf/JrrUTTZsDGiDwwsbTa0ymPnWI0qtN/dfWupg5v4w6C02DPXJ9rHWLD7F4GZqnnbajLpikPLO+WYJ818WZhjIbMbohBn4N9NPOYOcX2AwSBHhWMadJ2YtmNi6D2Nbo1lgual6x6i0PjVj+v6glwMbN8yOgIPPRaf+W2wgmgptZEAlpfTlm9Rzx3rRvatbageHHRaygQaYfgCrIIMFzT57bUnhvlxZEwJrsUGbHVKqNHSGGaKVR0gqvugOjKBiqHOTzLSKMcLZgSkGV/ncU80IGuNMYWZwMBh8vNRZcrFkKjPqB0s9jocawbrtbDJLRoxNg9h5QqnqBniQ5xvN+PSkUvN3eKm70TCvvL+91DV/xio7xe5d1vivP7FU24TtnWbEM+iTCwQGWPXvLDS2hfdmsHr5pJ40QmwlmnuO+vSG9o7yEX9tpLl9qTvvMDDJZNi9pnzqiuFNGtSUJ5TK5CeVKhIvVpmk/aFS+1Y/2Mz0m9Uz+RRY3fAOKU25rOtvO/3ACPMABhuzwzCKljWbGOald88Anda73y7rGKnPLsjfFFAXpMGqTc/s0+vaIQG5/qWrMc+J1f5j3MGg1I1hJnOfSI/Rib1ESMzs/nGlLsURYQ0Qh7b7ny2V2T9W6qCwPongnMK1Si2HkE29iM57LXWw86SubviP8Y9O+7dSZ7gT3S91LzoRHH2bskYFObZUxkdTOwxyaIMxaUhdUVsWrEwzbaY+padMvT+CfscYOg1TDO5lTjnagIhOCqG6cLUdYb7QrLFrMXmpBhGVOi2uzheIiRpTJ10sWFHq7raDS3U+MQsL9i//hwSv0MphFjbqA5tMVjYamBEGmBZTzXpDJ6cHSktnE0WF2Ey0pef6dg9TnXKhwCzlQAJlSbNMRGQZyid//UaMsrZITpUY8sQ5ybZeDxF11ZNvMipeo1TVQxlFmVEW93m8abMFL0wD56SJ2qIsfX9rqx4bOnABQ+uH4sl7yKC93odHmIGhonPdMtcXB1ltHR97bNC5VcS4+XRgnYaoSEw045hBHj38OY/3zwmYhRmVGMbMagI7PK79d0ypUWGA2cv6NtBxHtpo4p9ZHLPw4/a+GQ0TiA3HUEWffX5oMdJ2L9XV9Uk6nbItdPm6qovq1Dz1xA2XtkMN3H9sWaNq3L2sOQeOtZzqQC8nlj+rVGnDIEV9odZoz+eX6rZqRlRvnHqUT5l8d5BwFgSGusnVQZD61H+mPM4151L84lyXYfJ1ONl48ehS+5KBi3RFhVjMieOCBVMMbm11EP0cunc6urT90uvqwDP3BtH2Q6WKfsSq73rMn+t6fwHB7CRt6WFKFme/zWLyQYTlcsof232zgAgnPMUES8DQ7mMQe6bRBgiMjSaKYw60LaZmRrSIoMN6clkoaN8jldgPbbC111u7/KmrEV36diqVkb9TqmhtcDq51NBOBqdXtGdYzakbaNc7Nvo1papfaCsDDKpo3npWHBYE1iWipwxfy/1D0fbrp60cfbUuJxuVOrSZfsgeoqz3W/3AAtb7BRKmGJzxRmD9+3b1ZMxbB9Gr5tmBzdqYHHMTfRlxMEwP83j/nAAPsLuU6korIZ2aPg3MZAOtExPlgdnrOo1mUfacdzGNUzgxEiYTg5xIbIC4fWgi7Rapp7vnesSkOmbMduRzDF3VUfmM2zJpFhc//KatLZRzKNPBpdo8AIPocN+gwNvPILey1DoR78xAQJKxBu6/O5XaZspNGqCzLxawjzjg8Rapr53S7+4bxr7zXN1Nti4GB1yHvUNqunap/cqgPMJ8YOicweWTesrEcZPq9qixH9vV2WM+DErPNUOY9TTGsaWuKZ8bwKr9yFI7K2OaWXhIW2dWFsAybiAAmN1sBujfdytVvF8RvE8rN2Z4YFfDBxlEHpbrrVI/26UzOg/s/sElg+1ioaExM7Q2/IiuBdlwLTW/wKw4lA8DGGTp09QOore2IJY/pNQBAJMJ2mEN3ECs3jC1Qe5RpQaBZHchqhP9DXILBeqZ2mawstR3bPAhkxqyaTWDz/Q17XVcV0MrG7z0MTaDEeYDUwxurZgoOzgYsM4SjSytzFZ6DzP37lGq+GRph4HOu0TmcwPMYn8Onl7qUpe0B8vyIM4Sy4mzRHbGtg+2+wam5zaa0Y4HGFoHN3ug2RZ6ET1l5lHWi+icaUJzhV3NjAsJwze7JqJvsskm0jeYDWUyw7N6ozHuRxutPl7Z6KPKmvPW6O53bvRry5rDHIjoyqRuflzqgOC+39NGvHMK+pJ24byjj/VqR+pw62kGnxksv9nekVciunyNIvp8YYrBzeBmb/uEdRYd/Wmlit7zqcjLl2rMYrwh3j6xTDXEIsPKUhnynmaDUo1tZi9gg8VgWDNTmckAQ83wDMMamhWa6M7zi5Wa4enoru5k4jBDohEJVISYJ0esfNSkwmIzuBn8cUHShN/aZigHBn5Eo81wZmTitkFWPSiPZbNjuxqeyiyK4ZXJ7K7eSDlmcOvh6oG1He05Us1CwT6lHYCYtHdLvT0l9XhMroJBnoHBW1nl5+ldPRCDdCi/4ww+X1CZTcTcfFLPv7pb0AYOot89usrs8+m8OtIdSnVmoK8eWapuR88jNupEay94LhwQKY8MHr506VJWZstLh7cOQmwlmgOz1LCur8P4b4CBxuQ37upMib5F6AO66jF2m9TNNUPb8XT7oCUfsyhxWV2REuZTV/OCln9IB7/dVJnMZkM5zITsB4AITj9Xz2Z9ARYx7qpS7SHKbEY20GESbXNEqYMBUfyorkbtwdRHNqTyLBRoJ2lcP3UnPNOd0veOCG48q4NPld2pMLa1Wq1Q1iPLeLzR/GGKwW3S6EU/FRnsrZddO8RPZc/CzD16ofd5SbHievfrpXY69/9Q6syyGHBoqWmcmrJYFvqlFYHQ9GaiOxFPR/92e87MNYjoJI9BRNfxLfOhzWCYAv0/Kcs1Gs2KbkZUPtFTGOD6eguuap2yLARMfUuZfP93pUpHvSpVqnGR2sFyrtN/uN1XH4OIbmClt6JJIOwU6Gkr+ifKmuOYifyMWEOZqDM9LEC5BjXny12VJnrnnbTTVtMM3vrjgPdIv3QiqXK/vtT9+UcOH/TMCBuAQTRSyXNtHXxS44hbOnpLVx075tO4vMl0qsH4Y5nmmFINOa8q9RCABVt+mQFqhEMBjt5ss82sHT84ZXhIaNFNnhx8Ycs/8dW6r56ko1sPNuiYEblPEl8tTb2ktCORu+rqiklIMi/vqrFrZfBVQaLjitw/IdeXBm3+mE9dzQumvmNwUofPKnWN+smlLu0BZZJ3UhNJ6cWlDmAGq+ODwhCz/MufM91IMS8rVbQnMr+8VH8ADKT9iNBmWvd9ay0j2wKUTdrUnj31tTD2C3IVdWetGXyKwRk4SUrKJ8/PLvN0nx6hrMXgLJmHB28yqadOWJ4RMqh35JgHGOmJuYP4ZLRmwOJ1RFS/eqneYAsKA0PpIBnpl2y77bYGqkuFuS+lXJtssgld2pKQx3VoMzYw8AwdBZObiYGOxGNM2enzB3dVTBQwwplgwz5lZ6cdPKmB+q/bVbFzwdfEwfC94dtBA/DgeUfsHjz19ih1+csL1Cz+DLZfsh8c0tXlT2eVYRrtpEzEcyqIdnb+mQGOiI/muacODBACLpytKKfD8111rVWHIqaK3KLOrpN2sq13LQYHA5MPaQZXtb+00QjzgSkGt+mfGM0yLFSORqdvir82+1oPM/dZZ1ld31GaiF7q2Vw8kNz/dWmzwfq+d3YhnaMLQ0+22GKLTXLtO0Hy/+Ctttpqd5bnUsVCuieLrN869/sbTa8bRPQjgw9uNGMOqzqaxdkA5Tsi3Qwi+g9TbxhencGVQ6dcSGj1ZVcZBu2aQxL1h41AHfuN0U9q9KF5zAzclyn0o9G5EtXv0GjhnSyVeeYjXVM1cv1OVwcP9/nzo6kG/ttfXlp+5gXD8+0dhk3qhP35vYie+7+eayL6rE86GBi8Aeck+TrCD/cXuq4vcDDF4NsE3xn8SCpNDDAdykjbHx8zDzBLnxJ8tE4RPDnIvRLDnRx8U9cCAi5Go4S5J8uWLVtKRM/3bx285zbbbLNtV10jxfUyuDjKl+5t+Uyn/0CpjEGtcN9sbaY6satGrYNzD80/QPSYk3K1u4t32Sm5vjb15UigD6RzfiDXHdc1E50TUF8Nt5vUIITD/WcG/SC2s3vQxw1KIseKiPKAVg6zNaelk9rVoK1tWOQN4gaFp3RVSnFffRlIPpi03pkr//G3hjYIrOzOAoMPz04h9eCUXJ+fOhKG6iOpr7cGxc5bHfd9Gmb6yrGlthnpYjWDL0Z/usCAztg6pdC1YlMfGrQuaYdDj7PvTAFdz95de5OHM6V0FOIeURGjs2oTeXtxeFKdGkRA3dB3zzKEubt0ELO4b18sHWWfVrZ9kqb9zzqEfBJve4Zp+UMTY9HKu2nwEkHeagI1XnpSd3ChL5dv+q5lnSvk25cJLk/nvFLSvEpw0/X4VJ8jGDrxFJK2iN3yzn9BnQ+0iKSeMSBgIuUhDotSus2keiweMKll4oVHAhnet6f+Yt5P+S6Xcvgt4unlcr1ycBP/wTOD9j3PGiy0/96h+dT7zqXn6qx91dTXQblulbY7aNNNN71K2m3TWSaf+h5PPCoE9Ul7KEM/6M0nTxdKGESjXLfL9Ve5JZjfZdc3E6lIld2ApZmY9exgL87mf4Y5M5/7RDEiOvrHrYGvkO9eKUyx8QZ2EJ1lcKpJKws9lBj31XQaA9APuhq0j+fUqf4LrRO/u9FEbwZAtGVC68vK8bigNX30K4O9FT15N+v0Inqu3056l046f2MNTnlWmIXgQkPr4JAc+ykrHl31rvtSqXk3QL0PnbxePXg8Ovk9MvTR7f7RwSPb/eNDE5nd/1De7dspND/xvfK/gxV+nzLumSuffe/sp0+sq19Mg/8nrZ8Eecb1/SJIylNvnw7ytPtnyvGj4OVb/XHm2Ws4fgpo06Hspe7T/3tX3XYPzn9PzTevOZ88XSgBY0/hNqnozwe/m4ref7g/C0PDNeBwYW8vhw9r0N9JpT8v9OVT4afl+qagGdQzAvRvlWcuke9fMrhkIRnBYNHytqLUuGTEaYa0jwRPDb1j0n9H8ndarnvk9wtz/WauJA0dX7inm+T/OyWP3871fsEbyHuuT85/B+X+6cHX5jcD3mmhT0y6pIWvpUN+LeXZxewz4ELC0Mm7GnqKmPqJSZ2l39HKIdoLpv1G8mdWfELydnquNw7ewzO53jPXGyuH/0NfKfitvPPSSW0ndfDu/LdL3hV2+vNLawDLTwYNZntiOLghwGyTNdLGEUF1/ry8d1i+89185y25Xj74ndTZx1JXjKJfDZ6Welw5zeD64NS3XhQ8Pd+6ZZA09aD8Pkh6cIQp0EiNibeAqWxB9S+TCr9Crn6vd4/uwOBd1dXo6TunggXgPyC4a3BpEBPsMVcBvV/SWaKTJI29gwvK4FMMINM80+jJfu8V1Hl1AlFJ924dgqMFsVHH2aLdnyypR+zuvaQelsABY9+g882S9aUXD64Mkj4MUvumDETKSwcPCG4eXBlUvk0XsnwDtLpXplUt78TUla1MPOz2SF67oB1aewVZqB2awFbgCtCCN3qnj0bb3ldup6XoF3ulfHu2fnDR/L5UrnPtv9lsnQGmmHKX4IHSaWleTj3mW0JaX67V25Zh6MsGD9y0wmoGB/LW8kqyIAGyF4kqe8lW5pHBp0FlwUY/JBV9P42ZSv1+dNl/pMIx+joZXKMNzFTqOvfvU7lPyndu3sSs1y+p50z9KXhKkBfSH3PPEUL75du/zHN/zvdXSmMRmIBH3U+DXyt12ei0oGCFjqj9TAvGeInk5y1BftDE2ae3PB6RZx7YynFs6FsG/xx8SX4f5n7y+0EdM/iX0KemPPvnm79L3f3cTJTrt4Oeu/z66vAcAss5C7pjlwygn25lInW9I/in4NWT7vPb+WW3CT5cWXN9WO7ftpWvn1GDyk0KMHj9Kfc/l+suy5cv/2vK8ZP83jHX70nDwKw8Z1YmzDbF4HcNSuO1+e5123c+HLxy8K/Bb2DuzN6/Sr7+EHqPaQaXlr5qUAn9llam2+XeE5POn4OPHxh86NMXelARDY3oD0iF3TuVt8cm9cSMP2Fwz62rIWcYnK/zb1K5T8x3/j2NhRleHfrKuffb4Id0nPz+XfArG9UZ78dpvF8vIoNbAvtJqQyO2b+evDolgy75yaT3R8yQ/Lyx5fEawacF5bFn8JRfOY4O/kfu/T7XFwYPUzd5/70Y3HeC/4vBMTdmCH3JIFEdo1x2PswwX2j1DawAYPDv5p7Z91NJ4w/J56WCb1PXSyuDP7eV47YYu5XjYcHbtPvPyb1DPZ9vvCUoAMPv8t6n8t+Oeea3wR/k93atX/wxtFn9TGdwzDbD4Or2VcHrSjv1c3K+ww7zh9Bfyz2z90/D5L8+EwZ/kz6W37cNYmyTy2OlBz03QlmzNJYKyWVul1x3TgWyPhPD6EbzFdFZbS8zqfot0RbjONbWd1mid5+r505h8r3y/Um+2evgaailmHt9aZwD0Mr8yKkPk+C+ycfFWplXzK0xFDnkbt+WP8Y/1nHnYy2fq5byLZZUcX0Q0Ym61Izdk+eNcr1Y8n/R4EbpoBcPXiL0ZsqX/y4b7KOUnBkznE1wTJHlQAy0x6Qe+qAc2pIoDIjD6E2DVBC0MimH57dt9UB3H8TcVcEdllSG6l1UG0MT2/fVfsrj/zODgcHlaVJtMlSg1SJ6kD3GIMhIuWXq74Aw9eWCm2HuTaZsGC0/rr2InqujhqmCxHUbgkYRfRpaY/adPGhkfclcDTX82aDjcTDqOjunRpsCftvf6aqR6nDv5jtcD+nljoB961zV8b6b/z6R7+2RBmXdPj1Xhpx1prEQ0KQMy1+2dzL47Zl8vF8eJ3UZ7GUtj4dOqsUc/R/Buzf6wXPVq+87uT5jSVU7HKnz+uT5UsHvJ/8fCe6TzvgtM3dos+An8ox6oB8ueMczaOXCYg55op3Y8msZ7FUtv4cE7dRC3zx430bfJ3izRhNxlUn7vWJS/R6+HXxf7l0k5WCU+8JcXTJ1yIKyGwDmVaZW//DI4Hfz3RflvWvmm98Pvi31d0V0rh9PvV0q9ffNMPa3c3X22mrJTv+Q3qQOGIyB3w/eIvf0OfQj23/zyteFAoYKCdqy994gEU2n/1Eagz53WZWFyWdBo03BY0tdouGTbSuf5RAOLXaUuf+p/L4EujXsvmnMP6QB/d7d9+VjoUEeW/ms+/5qrp7dZRb/Sql55F//HnRXd2jxT0eLaMO3G/34SVtSmtRlsmFJ6eTku9+YsbRa1englnfomZj6e0Ma82WGswJdDfhIheJXYPfaN0pNz2pAv4Em1+vl90sbfYfQgyfbMaFv3+iXBPsy5co5pt8Dnv+tOOyWfDsL7deTuo5tj7jnhhjtNTNnAl1lcBFY+n4RtOtN//pkkAehfsCqzl7x54jo9PO9MPfA4EMfgflWvx8819vn99Pbd58y/L/Qdf0vC0OFTNY4dej8xDjnMRvVBWCcT4XZoMA7SSfwLUH1iI+Al9Rg6WVFHxxP6IqXCT3xX3t29rvnCIa8tzQ4a7DiOpbW+jfpAr1n0rURw7G08izvZnwOMO7bBspBxPvEQQ461JG9llTr+mWaqOnI4gNy4fRCpOcY4zBEjjLzZob5groKkl9xgIq7VMuvo505gsij7aV80dG2tiqT9nDlGILmocYJyfsr2ne5oqoXtLoaHIE4Cqmf+QaYNDPQvXyfc5Hdibwj7XG4qvTnqopwFYNlkEX9oOBVgpvPSnZDmvIUPLirquGqRrvOJ08XHhg63qT6Tn882BvDgu+eq+LYeh0aZiryLqXGB7eLSWV/vKuBCexFdv9FXe1I0nhzvseV84NBbp4a5m155vNlgWNsDeWbq3r0iUGSBG8tO84+KX9ddfX8RFc9o4RismXyRrkeWWqccGGQ+Gork5nPJhXums9J59PxnXr5+sw0LNknJQ11uEee49b5qW6Nl9xUzhYcMNEbS82jOvzvVg57AYRfUg6z5h3bM3fIlcSCFrbpQHTuqQv1g7ZLjpfch0O/B13q/gL/8TFYJ6jvKRDogy/Cw0uN4vKpUiPQYvRPT6qobfDR196u76VOnbf2sdTjrpjbzA1mvmvWVrf29wvL5bvCa/V/zjx74YWBAYJ9KKBUkCUts9xv/M51veLlUJkNeLLZm2wLn+ACvvX2rp0VlqtD7vq9zEnr55OqB9ts4D+i+w/QpcZHWzCYKt9FMhv4vvTNVKej5S94cqMFOHgZutSBqhdngyLbYAy0UNK2j/4peHJ0xWGzCecMjPVX6aRsjhf6WfsP88zW10KDnV7q0GYe23U/Wmp+MdVrGn235KH3OCw1Uuxd0V3d7tqHbMrVe8O+dnVkJQJtL72VCP1Cu+kv64SZcooE5H3bcfv0gvza5WvoF4eg1VeQ4axvp7k1fgr9h2aYdtjDf+dSz3dHP3P4c2TwBipPZeRKjLxerteeq6FrrxFkLOtjZA2j6AZgVanx0HtLZqk7s9zT4M52ZsGWFo+pfvvmpAbvPyjXuVzNNN5fyMB+0wy+tKubLWxOYJDiK48mwtJj0daV7ZiyNdLMtbLUCCcrSo15do18hwWZ2nJYmPvS22+//dZbbbXVlYOX22abbZYHrpq64jpJTDZ4+K5tmbMdf6EBFxxcat6lRy+nV/PVxow2lhBnlcU2TaK4Zbarl3qmm+2th5W6711j+1a/nbar7sZsKdIweKiTNd4nGwaDt1nWVX9As3tQ5UgQ+gZ1ga2AHwJbybVSv/qi0GGrmbVbu/7kzbe4IGszwUhcR5iGYYQM9tFB0zEfnqvln5enI789v/dcH4PPVDjDmigbfLb5Mr+21BC3lqmIw49OQ1lrf32+99+hbWg5IVeBE4QLErTA+3us/uICgDw2tH/5lcE3dlUXNNoTac1Q1vDdN3OZZQRWxBBm9P8pNeSwTi5/95rUM6sZ2x6w00477Zcy3S14ux133JGdgS/+CSmbYBPPa2ksaJnWA/RwW12lR1IifSgHRmfcUg7MTLpCCwd9aKnnmtlBR/pQPuI8pkGbfQWY0JYnlLpL7UWlfpfNZZ2gvqfgiFKPYzbTGhhs8xQXj3HSfeK6IB1vzpUax3agv8iXOlwfg2sz75sUqBu+e9Tw58yzF16YYnBul58M0lP5A/diUmjri7Ov9TBTiU8qVUzSyXorev63iaOPOppG+lpXZ8QhAinf8D4NjVpqBM//KzUo4IKBPDakP/bpBRmJBpWApMFGgNb5X43uaoA/Yqz7z8pvNgbi75snbaOETpiZm0Ryp/wumcEPaM//1SCQa79hp6wJILGYIIDCz0tND+PSSdE3LZXp5Zfa8ZR2X3v1mz9KPW/NDIj2Xt9mpYZs6lW3hgYOqgkRfb22kpl+YSD1rogwbBloW1pv3GibfuQX/atuzUES8nvRof3AzHdPac8ZnIj/aBuFeph59sILUwzOqeM6RPO5KqJbXzwyVzP7OnXwGdChzd5GY5E/b1ZqyF01/W9dtbwaja8zqZZljWBE7/fzlipOYrA+WOFCwdBBumptNsLfJfS2pRqc7PNGE92PKPXMKzaA23YtwB86yKK8Mld7qA/MIGhjxy0zCB6y5557rsjva2XQOni33XbbKWL7DfPfjVNfRFhBD32X6L/YwNR8y1KNaAYzM5u8E4Utm/VlKpVhlYM1fEWpgSyIu+pB3LmDuxoSySBtICMZaEvBK+n5yqSdtyjzAzO1PGFcA4TZliog7duXGiJLAA71RKogMciT/PZx+7p1M7jy+e5FS80/eojQM8IAUwwuprftdocFeQc9bq6K0tbH18ngMxXO8PTkUkP6qPQnlhqFVCNZI7+954OCQNyr0US1o0tdSrEbzayisc8NIIqaXeiiZhYqAobWsVlo2QQMQNb1r1+qqEtkvVXqwgYPPvd32nbbbYnlDwzeMTM4Zjom+Jj8tuRG18c4a4GyD2LnAgMRWh7U531LLROGxjDKRDq6dqnlMKCSLJ5a6sDKgIY2APJcQz+41MFJu2pDqtRxpX7XILJOUL4pIBkwvBok1CmaxKOu0dp9z0ZTK6gH+oH02QhWw8x3zdzeMSBTpdCkghGmYYrBrUta1jo6tN1Xf83fRGnr4evskDMVrlFYWolLZoJBFOsdQYJEdKMz2jleZgYir98alc/4X8oijcIzebWk1IuzXdVDe3E29H8Eiatonnn/hS5V9BvES0tfjDtEVb7fOq373+OFVWodeJ8KQppR/gV3sl8HaCCd3exICvpSqfnCvHRV9H1KZRw0UZ3Ijn5D8juIzJ8pa0R0baIMaGiwoEahL1nmB6LMeP74Ug/EQNviShJA2ycgz+jfljVpQxPF+uAjpT6jXXrnpFLPD+9hpr0v3NBmaLHQDwteLSi8kbPIHhF68HOefW0WLIeZkem0HCuMzMQonVvDsu6qeAargdb5btfeF/nTmqlZYrGBOGIG4KnGWGSGe2RXbQHEUjQHEFZwM70ymXFEUb1+6sqs/9DgLcLULMBCIh0VGmMxaEEiM1CX50Zvk4ayrCi1zonnymdmJoE8olSm1E7WpK0iYF5tZla3+vHQUgcEbWD2Jk4TxdkjDA5D+Ty31uy6AdAHjilVwrNagTabY16GMmK6PMurbxsYDa4PKRvuC9SRY0v9pvyTLEglI6wLBiaGXfWEIkY/pKteXPMZEc1kxEKziI6GqQ8ulZk04mHtO8Sp/ntdXQvFXEDHYvQhEg6dc5/230KD0YqYqBPLqw6nU/Hc0lkMTpiBSCtemYiklmB0dFFTrQwYjG6a+tLR0UeEpo4oN+yXHdZTb0eUxT9XS70q06quBlSUdzOwGfL+XV2bVyZ5Z4NQD9pPm2Bk9w2+jHeYW5kwu4HRd9dSPWbKybCnfJbW9AsDAnWHhIM2ext40NIYBhffph5IW343ZI/RZt65dKnfVafoEdYHjbmhHUW9mNRtIBb6zL1B9CMu6VzE72kR3VZNzNsfE9veHUQxnesXjcZUnytV1MX0iwFmOOnJI/GwF9FLzffr0cmfGYQdwX0rA4N4+Y6uOWkE/7ervvasyr/o6nq6+75rJloffKLU5+4/3JiHhHRW4dRS88WmMIjopDK6OFp79SJ67ln2Gso0LaL/tKwtopNiqG6+i6lWw0xfeGupzx9d1qg5J5Q1VnsiuoEefXZFdA45nlEGA8J3y+LW578+DIzcVecP65PP66of82wDrguIgf9dqvOBmYHuxdpqFKbv3bF957hujZGN2MiwAjDUM7q6nKXR6L3z1fPOKphdzTAvSHpmEjPUC0qdAUgP7rMmKxObgs6v46GP6urMR9+7X1fP9FJundnsg3GU12y3PpCe9eRDZu6fI5hpI9KJ/HJcOaLRZlMHHsg7kdlgqp7ZTKgnaAOZcjBaaR8zNaPak9p97frSMrMOPpM20V75iMys5Ohbljqjo/kaaFu0WVja8mdZckWp6UmHzWZ9QJz3/lVLXd9nBKQOjLA+aEyHZITSqTXKfEMlE/8872qmZrQx4gOdyUzg+8RdrqJo4rwGAhrfIXiWs9BmnrU60QKC4d0y2W1K7URmEGd/22ii06Mx/rCkpDOuzNWARSLZvtSyHtLVM8ictkEMXl5quYmgyrE+kB6m29AMdZZhpp2IxCQSkoQ8o9kODE7yTv2xN4CUpD2Uw6xqILMCIGQ0hmFLUCb9oVc75gH0fOVTf/s3msVenaLZNKg5BlMqkfqUP2kYUIjf2l99rg8OKfVblt5GOIug07MSE4GIneuEmQ5FFPtDqeKsxvLuu8sakYvIqFHRvym1IQdRzKhNHETrjER09GKK6EN6mO3jjZbv16JTNjPgait6fg8i+tu6NRbnL5RqZ0D7nk48XabVMFNXg3hJtOxh5v+zBTPfGKzoGOVNjbYZY1ClzMirHV26umlDuakrfTm6ehyxAcEz1A6MuE6YSXtQCRgoH9/oF5e1HV0GK7p+cWijf1XmL6IPji7sASOcRdis1POo3lbqEtY6YaZRjyh1p9GdS20knYqhxPt0PCLUpqW6SdrpxPj2slJ3LDHkcPEUZhljENWkbTZdDDATKd8HSxUV5U3ezTz3bbQZHsOjGQlZ/tEP7qpL69tLHQDMIGi2B+u59M+3lBlmmKmrxwTfWdacCrogMJUGgohL1yUN0U3lkVMRKUTdWhIk2srrPbq6PRR9TKlr6eheTA6NYV/bbeC4opl7mE75SATqEM2AZrZGP7LUgRz9tFKlO/QJpTK1vJocNmTHoNp5x8A0wtkA4jNRClNqDI0z36URyxs6FmYFGGKg6YQcRXQKPt3DEThoHleYj2hvVDfLnxswlE9n1tnQxNc9SmVs1nWdnthre6mlL+Jrf5RwVzdpWHaSd4Pj5sOH1wOkIiL9UCeLDeoTM7NvsKmoW+WhSvXt1NUY6wZmYjRgZdcmvSrV1SVDYa9mmXldYNBUvpWlfg9tIGQtp66xdRgA1bNBXH9RtweX9Rwr3dK1SqEPesY3zs06vEAB3YeVmbVURQ7ingqdD5jx/lyqqGag8O7nu3q++LBd1F7fXhSb1DjeP0DnGcz2iVJFwpsOHWqRraKfLjWPjE2vRHf1OJ9evMyVL/ogXpJMBoszcVanRP+kVCMUKYCdgRqwGmYY48RS32FMnP1vMcCMLT0i+aB2KBtjl/KtPpssV6JvbzkPfXpXBzl7ErST8NLrbIuZ/L++1DQeXqq0gmZE69MrVSoa6vDzperTaH3uDIN6qx+gbzDcYXRivndGy/nZACMk8QejGXWJ0pZP1isyz1Qu0ZNeS9Q2cvvOi7u6BfPTwbfNzc1tnU4joubH52o8a5s4Phdk/GEd/WyeO7Q17oIzwcz3Tih1ADKLHNtoDjn2T6OtGzM6of+rq8EK0Md31SEG/a6uHs5oQDwg2Ec8mU5rwFLtFDo249zsfwsCM9+ib3+2VJGZqIy+c1f17s/kyrHHsUUGOgEfzK6CKbwm7SHayqeCH56rkX7O4La8jjJod+U7otRAIGiOQWwXaPvrSYdouwlJNGhMi3nXgvZdYFurfJKSnlnqO1SNmTdGWCfMNNSq4V6p1mzrnhuyavbQ3qVT78/91W9M29W9yP5zwICwR31kzKVrTsjYc65GkhFbiUgsPJKwSSs16qSe3DE7kJxt8J2pshJFiaH2TlMf0PJOnL3ipPrjG5zQ8rb1pJ66KlILvZQ7L0a3r32os9XpBHOrj+piw42NOHZJEel9UxpCR1EJFqx8M0BMvnype8OVy+GJ1AwOTTad9KfGdlUVWb1qos4bQ4s4K358v214msHbe1AbCxclDVs+lY8aYGsuelVX+wBa+T2nnqlo0rxCV+vHvv216rD9BuqQX4Y6HNLot5ROPz/CemBgoK42/A+JZSo1f32yVJHZDLfOytxss8364HjtfcswxKeXdlWs+l3wpNYoInWI5CkW+h9sHQ2TXzQzuWin/hNN5sOeCx6ee724F/q+Q/50snMKOulUeT+cW0RQM+rx6Fzvnd/Wyvtgfl3dLuq+We2G8pfrh4MHy3d+i2Yqbtvq+nFtaei0X2zvKxPVBX1kaGvo6CcM+VmI8k3no1TDpvZQhr5M+e/YroZtUg7SFW829wXeNMgRy7+aeto97TScTSbC6ur8zdThye27JB8GR/SDgkc32kmsd2zpvTFoSdR9IaNIRP8Ifr+rA8/qvA/fn9SgIP3qSq7e7cuU+2IO9M9MDzwjrAPaaK0BnTr5+dBC0RqZiesqX0Osk8G32GKL1Yf+5R3WWiLrcekYDC5fDv5PVy3k35urkTT7M6822WST7+SZlUT14E+W1LO+3hT80Vzd3eZ4WfSdpvI3k/pZh+nOGdoGkh+1Tve0rp71fcf8flCuDko8Jmht/Ie5Pm+uRr358Vw9JMCsLn+fmdRjj/pvDmk0dHyTI3g91x8G2NK72aSGaUY/3HtwIcrnO1Nt9cJcHbxoC+aD81u7PmBSQw4r65NDO6DiB7m+KteVyYMBXmyA3dM+P871tCXtiKN1MfikMq1y3LirTlLq6m7B+7f7j8nzQlGjhea+ZqPfEezrsKsHVPYSxNDHpr5PsjP4eEdknRc2WqTY1XU+wgZgaDw4VyOfiqYp6uiqVDjrN5F5nQwOnMsdhp3bdtttt86MvtfOO++8Q0b/OSdU5JuOufXunrnu2tJxhNBw5hXawQJOSli1pMZjt0d9ZVDk1T4Iv061EDB8q6GyOhZX1NGVk3o0MPHU+WVoV+dfocUDdx6WU1f7QxHmav6ESZb31Xmcqk/nnIlW630hsPacq7HupCEsMbpXW4Z3FwK0U6tze9s5s1AtGMpENd0qaW08V+OeKY9nbX0dDkHQBn046+Bm2sI3/R5gyG/Dvg7navmGOhRrf6hD5VReYbj39NykRqkl/pN8qGHiuS+VZziThsMcPNun0fJKten71fD8CBsAESwbCl37zeCv52p44BPTOX4dFMtrnQy+1VZbdWHsuS233HLjvO/MZ0f93G7rrbc2g5+ed96Z7+xdqs+2IPo6kNNLf9xE9C9kMHDUjtMu3hP8bfC6wZdtVI/jufvAMBr8nMIU88H3LqnH9two+Jzgb1t6j5R28vD40Hdo908IHp77jv/x3lVz/ze5fnluJsT01PedVvixVo5rB82SvnXr4JOXVvH3WM961/Wcgu8MHT/4cunlqgwOBxDj/GGhb6McSe/ZoQ8Oam8Rby/W6v/zU2U4Q76GvDZ8l3LM1cMUiOOOsbp37jsDTR0+OfTtWrlfGdS2jjH6YO45J9yZcV+Z1Jhsqxl26vsOOxRtVX6vm3de1tIQv75/Xn5G2AAsXcPgjg/+sbBNqUyzCz3pT92abZ6zr2LwyTbbbDMXht4k73NP1Ci3yu9Lt80lJ06qhfwPuX59rp58+bM8+5vgPhvXc6noemJjfyj4f6GvH3y193PVWVaP6OcUlHPoPKFPSSdU1psFnbrxl1zvlfvHtLR1zju2+05/uYH7ecfBB1cL/j3oGF6z4hkYPO8vybOf805+Xye/39C+5VytZ7TDHx7jWe+6nlPwjaHTB1+vfGmDO+feMdoy10fm/hEtbWrQocG/hn5Xrpdo5aaDmznPkKfh20MZg+9v5btF8LnSyPV++cYj2reent9HtjQcSnm9lvZHcu8q+d5fgqevj8Hz/lzK8On2joCMbCHecfrMOIPPF3R8lRkkchGJ6OOcOzg+sF6uk8FBmHlu2bJlG+24447bZybfd7fddtt9+fLlm6SBBSbsI8P41qSGTNZBnO8FibCOS7pkcBN0/nN4AIZhZWd4cyzxJLjRpKoNs8mfZRg6T3A4p4xK4MyrK87VpTtipZh0RFXH6qKJtIxNjtthWV6+pB4r7LhdsK7vO8KXyuG7RNghDSKrM9uca+26IIPXAMP3JvVYYasXLP4s2ftjpPy3yaSeBT6I6J4Z9v+rj/70kvbf6u+2/913fpuDH5xTZta/QgbqbcOEjoVG7xSm3C14hfy3Ms8R2dXhcB6a1QeHbRC50UR27XsGBm91qL7VlfzynaC7O1duZPD5whSDq0w6Ef1IfHPbPQ9dH4MT0cPMvQ6e5z3HCPLg/Kb7fa6rsbct1xDDPhTU4J9NOl/Mde9cPxh0BpaTLozO35irp30+K/e+taSKd2K5PXRSLdfrzMdZhaED6cStI1sH/mauZpv7J0+n5/qI4K1z75u5PjN47dw/LejYYYPT6u9Mgzz65pIK71COuTpTPrd969/naiTb03Jl0OvfWYhyDTB8c/hu0O6tr+Z6z9y7Yf7/Wq7HTeoRTtrmJZPK6J5h1OqG98FA5z3tfJugWdrgLSKqE1b/LeV5TGgnq94pzM3KTWJ7VPAWee4bQaHArq4+cn1D0BKZ/uUwibUmkVZ/cC74VnUVZKjkfKSdbjedvxHOBDB4KpDV1xoljyzLFl8pdZnlerPPDxDmLptvvnn/fiqbvzOR8BWh7Rb7ffAToenj7rN+mvX+THScq2us3/PfXGXij6FzFcCQH7v7lq0Om9TzpwRuXDBG0IGGTtK15ZdcWX/5qMvHM4McRNA6ZL/ZJO99UUcfOuE0DJ3UN+eq8a2vw9wTs673LMt/R4V+TrvPgWbByjQNQ121bw+bTY7u6sktaMx5SKM/0NXdc5ZFT+uae6pvDN9qaNmKD/txTnTpqp/+LyLB3Sp10S/9RXJ7QP6z4USUWXp+v0zW1T0HfP3RHG0Obmn/pGvLZFPprB5QAr1HZa7/Nlmz1NifZtKe6fM4wplAGoje5SAEaOsgD7bDSvUf1ku09hmGTBXcOhPHCaMyi3l/yMCkWm6tB6MZ7nR6YipkzWUddVYVMZIjhlmaUwZx0qmfK1rjW6PlM77gzNC+yfGCMXH3SV0PtiRDjJW+mcOJJUReNHEzl7U715CvroL/PUQEFdCSw44yWXcmLqsjNCcTr6nXhS3Y2rCy1IMHOJrYFszRpZ81G23LLPqypW4j7V8arkB5g/qIo4T3zMC+LAP8ZSPFHbbffvvtue+++15uxYoV17xEYPfdd7/YFltscViecWAENeSwSbWWUwWUWz/RXw7uquNK7wEojVz7ypvU+sPgVDXtoQ6pjfpFn9/p/I0wD2gVDLmtvjR4Uql+5WYArqdmsTPAUNlTlW6jiV1NdpDpxMTz1wZXBN+RBnvPpJ5r/Wr/dZXBnp3nT+yqBHFc8OSuujkarYlxIpP035fPcwoz3zg2KD1OL3cKntLVABXSd//Y4CHuT6pY6lC91d+YGuSs51JtPjapXm7PD548qae5PKZUxx/+Asp0cqnBMexP5+L7n0NmFqF8dwq+q9RtpDaa2LXFR3xVqT7iHGHs4uI2qt17UEbQyuZqsObDflLE8stnUjgmZX9VGPqaYeZbZva+3W677Xbj7bff/lZ59v1h7vvkGa6xyv3YIMlOnzq+a3U4ja0eLcvankv6OyBIteFchLGn++iQzRHmC1OVZpQ/vVRxSHQOzEqcIrL2MNsJZyrdO57/cle3WRJNLbldYm5NWCgz9o8areH5vfsPU/Xhf7q6H9v2RTT9a8EYfKaDDOGGOIQMGzOInMPe6bd2Na7cUKYzMHjrnKQNIYiIlMpEvPxH7qsPDPb3/H/7UiPJ9CJzqdso/1bqWWI9zOTtbMFMHT251H37RGeba6RNTTBj/zX4obImTNP3S5MmhnxM1bt+8W3PRQy/Vn7/T/CzO+2000223HLLm3s2s/otwuh9vaUOnhcG50lnA5OzyW7Y0qB797P2kIb8tnokWfy6vX9I17wB8z9dvn9uIdr/wg6USzuNNJqNJzqr0Z/BbD5ArLe5nxfcFqWe2mm5TRTXG8Cubrm0dZAXFHHt0FID7fPTtjvrZqWen6UTyofrgsHQsRpcqdTyWdKji6JtHvEbLT8rS82HGbhXvodvNIOQzulophsEb5rfnGSI5zfNTLZzfjuP7ab5TYrhQCTgv33Q6lRZF7R8M2DzD5fjYeuvPQbDzjebPvZstPY4uNFnYPCuAo++m0bv3jni+aHbbLPNzQ466KADg9ddtWrVTa5xjWtce//997/q1ltvfYswvXO/rY7cPGV2HhmVZ4iEc4Y6bLYgqps6vPlcXdWgFt1y0mL1j8y9MGCkthvp1aV2ADMb+urTD20AdCBbMB14sDJXYp3Ya3QnLpT8oDU20f8VpTLSMfn9qlI3SNw3iLZN8IhGi8TZw9ApzgnMfEO8NOVjUMTQaOlJHy0/9k2jH1/W3zmX5WrWso5vuZGl+hURX3m9UTFelv90dGL5K7vqXy1NdXXn/mNT3z0nMPMNAwhf8cNKjYVGXQC4RfAF22KBwRiuBb7VkJHticFXRETfP2V9UMrzor322uuwHXfc8dZh+nvsscceN95hhx04vrx4o402OjLPsG1YTXlAUNtqyyeW2sdWw2wdBl+Xb+w3qdZ+Kyw2+owMvkBgdO8t3KVGOTmp0UTm+QAxm1j2ja6dO5Xr77u6rXIQ0c1YP2+0WUMoJDRRmF6IvlepouQgMi8YzDBAn16pwQANbOjnlTWHBPj/po0WEXQ1g+twc2uWdbYZzndLZ2dL+F90xFaMzLf/j5NqRSeiE8uPKVVs9g5L/oLBDCM8o9Q06PmkkG+VWk5BIdzXvsDAbLA9AyhrV20z+sXfwoDXye++X2yxxRa3DTNzDHp3GP8+ocWSt2rynOCwH/w9pe4HZ6mX/voYfGubkbyTeqV39ysRufJpny3XCGcTNOQdSo16SoxkKDHLEV/nA3uUGsLHZg2np1h/dSYYjyVGLPuStyv1LCqzh22TZhm6mxnG3nK0AQHzYzQi/GKBjoe5zTDEdWW1d5mYjjbLXqzU+jiyzDA4bB10k3TuO2T2vsfOO++8avvtt79hOutt995770tGZL1e/rt7GIDDB6Pb3bvqK47J2Dakt1jAsIbRMDD1SXuuaP8Rl5UbbNpwndBVEJDyHikrZ5YbBu+57bbbXiyi+jVD3yn6+EH57Tjle6Ssh+Y5thbr4uwQVAXSoL6lj62GKQbfNHiH4H1ST8RyBjubZHoHnJHBFwcYSohVB5YaPVVDnSEKxzTo/I0BbDx4YvBhk7pJ4JiunlXGamsQeHzoVaV2cuKvDk+EZezCCDojWtifa5RqdNNBepDGAoP0lNUVs6MZxs4ArYzCTdsBx4nDzquHp6M+OmLrxdPBbxZmv+VlLnOZq2y33XY3z3+PJtrmWbPfY1MXGI+EY+0dAwC6MkZcLGBMu1/Qcp+B6ohSRff1gWf8Tz8XmEHYaNtc9wgeFXxCpJYDUi4OPMdmQDs0ZWaAe2zq4UYpszZ8QqkHBa4XSEENbXLhUvukSd1cYoCghy9obIAR1oZPlypmmQWM/Eb9DRrcGnND6+n/JLqGps/34ldXAwX8sv0+JNhbS0sVhYmznjFzi4TiPpHyYY0mMvewCAxONJeGcENmb/SJ0w+AxtxQbDED1qPSMUkuvRU9M9nBZnPP7rrrrofnv170T6cnydCHWdQNdqzo0qCbrix1SfJI7y0SULOkR/XRHoJQPn2tJ9YGMzrRHpMyuH6/1LbB8KcE/x5mPCK/2RGI1Ta2GLDsY2Bv0Wf+L3hy+946Yaq/sKL/sdRvHTKpfuecjri3jgy+UDDDONZRzaKYVegcxrIzGGOmYWiMSY3k8l9tBucscmxX15V9Q7RSszbGILI+IWjTyuoZvFQbAI8vgwox1v3FNLhZysGM0jXDmsGPmn4AeKehQBmCE14xzLttyvfglPWYPfbY42KZyW5qBj/ggAOunBncppZj2wzOEm9dmJMHf//HlaqWbFJqmvutndqCAumAqmGFQ3q3nfl/FnjzkDIYBzkkDTM4/4bbo1MeOwnF0kPbiKN8nuGVqA0NDmcqdbnf8vSwrnr5SUNQTisvfRSXkcEXCGYagdGMwYtoTkx+YKlLR+uFKQang98reGRXl8Po33fpmg5e6oxCXGdco3djdsx8z64yuyU6aRP1zDho//ewvs5yVmDmGwYRkoMrZkAT19cHW5Wa77vO1dNaGZzusssuu+wepr7B5ptvfuvo4PtFB7+W+xtvvLG95bzK1AEvMsxMBcJEpCPfMsj0sBDlmwE2FQ42Qlb5ONVAva4PGFzvmketJFhmE7mHu6rQTIyH7Cv82A9r7cxjkaca+pDWhtpMmfrCrKNM1D5qA9QXqA0cjaQxPZiu9dII5wBmKvMTpVrF6aIvK1XEM7P1sK6KHxi8a1b0ICs6y/kgojPs9Fb0Uk8LmRbRB6u2zj5Y0aXHEMYKy6+7h3WlfVZh5huDSjBtRf/Q8Ofw7NQ7GMYzRFWMokx/CmMbkPqVgeXLlzu8UJn+mGeI6MR/77Cgi0KKPr6scUJR3z0sQvkw6m9KDTp5SKnpfWDq/1ng3tq3Wakeit9Gd2tEdPQRpS71oR/VVYnE8y8u1bai76wW0ddRJuvwQxrsPL9qtMF9ZO7FgJkKpYNZxjmkVHHVerDllvXC0Chdjcn2xuALgjYoiJ4KzdTWYF/e1cB6x5S6NozxMRadlLRAXEezspu50XTjHhai4We+obPyKiNd6MTKSmLpYXh26p0dSu3Iz8+AtjL3nxx8ie2T+f2o4AkR03nwUUFOyJVIru5eXur3+RagzaoGCAMo42MPC1G+GZAeGwA1x4qFtmDZXh9QyQx6L+vqmWyPy1U7WVXwnjVuYrh1fPThXV0R0U7qUhnfWOpg1sM6yjTUIZQn/cL7JMYRzgXYvNTzyihAZmGzLKYkvtkcQjdb6wXg3gzqLIIXQsYU1mTea0S/Q0r1fiOWmfWJ7KuC/NTRNhpofDRbwGKBpTkdlHg+eJnRi3sYyjlVJlb0fws64G9ZGJpjxw2W1NBTopagRX2x2eLwXIVPsqHF8+wQRFK09WcrE9QB5V8rvQWElaWmZ7UCiJ67oRURVnTLhJYStfNhpapsZnY2BO1nmdPgpG1ET8X8+ogZfz6wrNTvQ3kxkHt/8LwbYZFBZ9ew9E0zGpGLN5Q1VbuDuJSuszMO9xti2F4U6+pM/ZP2++CuRc8slcmJ4OjVvuilLqGZ2dBvKosH/11qGlQDuiP6/cOf1A4wVaZevJzUKKvq6Rel+p8r3+CLjumHlYFblaZ2hCaemwWlYSY1mLA4f1gaCwUz7cLAJr3XlXrE1KPLhg1t2py/uvyKT/6tRl+za44uuXqfFOK7jyi1b6CJ7fOBWRH9Z41ePbCOsLhAnNa4y0vtIHSvo/zu6k6w3hiyPvBfQ9sFBRR4T+h9g68JnthVxsBYJ3X17O1jStXZWLLpcOijSh3Vdaqj65cXBgambXD/Uk8voatKD/3k4c+hLIONISjqi91xdpEZwHRq+6vN/ganD7XyWQ5TVh5unH1OLHUwM2OjOfwQdenDVgoWDGbKx0j20VLrmGhMVLf2vj7YtNTTaj6YPOsHxGjlsD5NHbHzziD/kEb7vrYySK0W/dXZBoAU866GZv83lGqHUG8jnJvQ1QD2ZlziJdRhN+hlNMUMwgWJxUV0Jc7aL321Sd0iyKvLt4h+mB/tkICVQe/Yq22ppE/Pc6Va8i85m945BD1x6I3TdL1RmdtOqF0n1XFHuCHlEKGVr7YBj5Vc0AT2B4H90b0YG7TX3q4z20kNmPbOo+13591FBVpZqiun2YwV+twGDSltebFMJt+Wq5RbO1kWXBakNtnPb3lQm1h6M9hrs4PLhk8KtcxqpYK6hdaWjGrUOHCGuh/h3IHBWvrw4LHoNK4oLj0Tz60jwsZwf66GH/7bknrmlVhcvdNErgYMI7bv2nlmBEdbPuL4gT62q0s1f8n1JV01VBHjzBqrZ9XFhCGNrg5sjw59j6CgBpwy/jypAQl+VGp+zT6fabSObxaUX3oqIxL6/rnPYIh+dqkSC/rtpc7mROMvlwaLXb4p2LXUfPyuVPGZ2qEcBhv5QR+W/FBderUj9PHoXB1X1PeLXF86fHBoI9hgOL/uh6W6yv6pVPVkgw5UIywCtE49/HxK8LuT6mF093Tsb89VV9Rpd8Opt9dyQ9wtzP0VmHc5fAifK16X2Y+4bnOKjmPn2Te7uqWS3m0PtvRYmtGPznuss5ahjh86zmIzgO83NNveNVfbIFcmL0JCf3pSY8m/P3hqV2dvu6DsfSbOPqWrMciIs9QANL9u2yKV1YkgZrGvljoAEFVPLVP2hoUon3oacPr3DJCO1O1H89+OuZ48qfHaGAeFXvr6pEotL07exZa7fvBxadfTc8/hEQat73RTIamGuptKnzHTxh2edKQw6Rk8VrY8jHBeQBpm4zTU8kkNVk//FNReWB6HAdj7u85g/n6nA4jBs1lw07kas8y5ZKJ2iOLKWQIjEN2J40472WrjjTfecaONNrrk8uXLd7jIRS6y3bJlyy651VZb7bbNNtts6f6kelStq5MuOAydNKgO+pBO7be8WxaTD7O75UA0x56VjSbSOrMLLWCE54bOTqzt46CVelopUR3sFuw9uIb0z2Xoz07r6tZeIjiafzi3Ufu2SWS82LS9gy1si+Xso29YXSDSTzO4OmCQVQ8s5yzvpALqCNHcas25XsgRGgyNNTRYGvTxAijm+qw0rAio/wi+DzO3zr7W++5P4f+3dy/AmhTVHcB77iLC3c2yBhZQF3YvPsDoSpnSKJa6gEpekkppLOOrQFETX4SKEo1GBY2SxKI0vlIqiQjxDRrK4Ks0IBQqiRqVSolGixXEoAZ8RTSJ0ZzfnOm9w8e9y33iZe1/1ak533zz6Jnp033O6dOnpR7eOai3bOyPB/0kyDpe77A/zj8xiJf363HMs4OeMBz/grivoRs937vdq153NTFUUiSPu3LITirvnAT+355KIVcmCQfNB5e0n9rKJjcn/n+7HB4z0eR/YitC7GneYZfzrI9xbsnx5Ls7t6Sav+v+txKMjlDPv9Glr+Ga4Tmkv7Zc00/W5aIJ/2h/vIvHxDO8GR/04r2GhJbdqL4MJKOrZ6UZcKZ61p0lI9ka1gJ8KB+PMImtDrox6Mx1uQaVVS4u8H/9wJOoghi0Mc67MsiiCJIy8qx/L7aivtjY3w8y3ZT3WTrlp8SxvM7u+9Tp6enj4r8vBJ07uubE3VYW9dm7XAXVSiHW1dKTXxO0cyp79M/F/zdM5frnH44yeQ5ONIE+eMNLJmTgxXI/MY4R5XdakHhvUWYCUeCGMjtXe9UF3POhkt51vgSNlSmbX4oyet4jpjI/mhVTHhT7zvf9gh4VAv4GE4pC43rhMO1zV3nrdYN+e3huZoyZep6PWt4EfC2hCtNUJqCnYpsSKpE9/rCpXDpXgr4+d9kkfPy9Mrc4L7ShM55oqjaVm4qu17BowH7r168/ONTzIw899NCZ7du3HzEzM3PUEUcc8Stbt269Y6jr26NibVORamVaTYwqqmejskov5bdtjZvmIa/LJvOQGwnAa330jPUadfleNM4LzrNeoeJLbdX/qNvVwqg8yPfYNvAaLg2W94yntTBTmGZMqf3iW2mwLS65Ye9cd26u69bREtemklPPxeILpmlYCxgEu5K44/+MrVlgHE7XB1GZ2Vo8x3oumLzMTXrc4RgZP77dZYyzWG35sh8XJHCCI+dpUYF+z71i+8yNGzceF/u/FP9b82vVBdwzjIiH/Lqgy7q0tzkHOaEI+eVBVs0URMIh9a0uI7skjRTYY2iIQ83z9U62Yb+gF0NGris01Pl60Y/0BSi3qoB7jmu7fCZCfkXQdV0OX1ox1XeidcmK6/tbk65P2ECwoxef77rm9DvXeHd91s+V1oOvHVRhGj6YgAy22RuCFzDBvvpIlwEwx3Y55xsmL9NjdB3SWeecC/wQCy5a7qQukwW4x3Pj3ifG7w/FlmlQh5QEzqx65Z+A8WH35gnnLf9B0A1BhpcsHOA9zARdNhynQfj7gdcwvWzgTcN98sB7TsKPF2WmZ8OL8LtVMHwLtDXesXf+nS57W4LomcxA6yfQdOkv+NDAP9k3UDcI+W7g23qmT5aMUjNxyFApr33DWsGoIvRrXnXZ4lNNOZNUeKq537vUy/lQr1VyvFV8NO/qtiAedTHcB4Yw3ztU9QP3339/XvQjN23atCV68A2xnzd3ZjifOrC6Rvgs3NBEiOoJt+293V0G6rBhQRTYOJ56HPM9rtRj3vH1OcSJ12vdGujq9wiS8JB/Ac/z7V0L5GGa+Da85Lzhpryap7C7Rtbz+JP5cZ+SATBUdN9bDP6t9d0aFopRRagfVuCJcVuqqGgzvZt84irFYlXo1wRRCznVBLd8Pnjjq0JHBbY8PwR/R8neTYir4Rb3Fu99U/1w5fDQoC+WXBhA7/rZkmPUbGxluqjLJBj2/XNJoWVq8IIb7jIjT3mN/+q1nS/JgzBRvKAe6ZQcI5bbOc51v60lx4kvKhn5VlYByuX5Lozrs60/E3TZVPpDqOW+gXFwQUhXBIlsm6wDPSZ++2YcaQKWjPN7Pqp9E+q1jokPae52rzJ3mQqY6mahOUvQ7Eqqt0Cwx12rRrKJcDqtyyyr9p8VvJlH9guUqKrtzrKCAj6utCVnULnHp0qq6D+N/6+JLSefZ/3vMut9dhx1XRw7Xk/1roE3BfYVA+/5TnKtkvHuRw/7LxjO+UnJVFZ6PPu/U3JG12TZVgK82p5jZ5ez9njE/bayqiEzvJ77y/iS00An68Bc6E23klNGzRL7cclnWnBlaFgb0OP46Bxr1HMzqCz1WofUdjlhFgC9CUG4Y0l1XYwyj72ZTbKFCMBwITzHD6F2jJDH1YJ7E4IaX03V7MMqu1zA4LBhvzJX3jnbBp6nWE9cwYlWMd7PVGGmAE2hBsfwZ4gJ7wVqkRrRQkBl9nxUbvcQQ9/fL+5lDjunKZODc8y3XZBjLL654/T23pX3cUzJOPfdtgoNaxRD5ZDN5KNRMV4XdM/4yJcFWQZWUvte2BcBs6w4cx5T0kHFA6vnE954YdDpXc6lxhs/Xq2eQaUUI0591juLLWdKqPTnlszIAq8u6SSjghrDp9JS3fXUeMJMw5FAwzU1ZvbTSNjceNNkqfh6vZfHO9Ngnh909lRGia3GmL9GyjRdJo+IMkk6qNLm+5t/wPzx3HPCdx+hzgNn1jCfzgl6zuzfDbdJDMKN2M68sFT0XvXbd999/d6kYk5UhluC6YlUPIJVVXR2KfsVf0lJjyx1lsq8Wio6DzA1nH2tcXFv3mVqOR4R5OtLqtzGvNmbeA0QgXbM0WVWRX9KyamV+DNLPgez4/1Do2X/Z6enp2diewOVOUiYb79s8wrDdzJywasN7q3sBP/G4XdNEnFL0AA7/k9K5mJj2y90bnjDWsVIwKmVhrhk1dw/KuTjgx4ZfB9vvUgBpxI+oaS6SmiMpVaw6fSCajtnjt+rBR5wQ3Psb6i9EzAN6n7lrD0Ys6Xy+5WbJjek4lfYX9Uaz1MDZR4YDeM9Q6jXhZAfFZrP/aI372hAGzZULX7FoHGiRTB1wHtG+5RMRMGWdsxCQEvxfrbFMzBZCLkGpOG2jpGQV/KRzwrZNrPIpAVq9FllaWOfR5dUITm8VKI3lFRn8ZIknl5ysoae44/LrC27EjAsJoHDH5Yc7nllySygQBX/04HnbHzpwGuYXj7wvOV4Kr2e8GUlEx1sHngCz7xwzG/ts88+JmqcEu/t+EMOOeTgEOrfDOF+2KZNm9YLJNm4caGytmBsK/k+PYsG81UltQoCPicmGmqmFM2KYB9b8nzfqWFPw4SA64Gpaz8MXiWm9vk9djItFKLanCtopHq1P1FyeSM89VIPenlJ7/pSGpH50I8MlBy6Iuye45slG5GqzqrxNwy/NQKGtqi9HGfvKWlGGCoi0I6R6kgGFPv/sqQmYP/b9t57bwEm7w0BP3XLli3UdXb3joMOOugAfgwq+oSALRd1JMIogHdYvxOtaSGoJojG9UUls8saJmzYEzEScCrai0tmQiVwTx9oKW5gSQKkTqY66rX/qMsEEXptvekJJVVhPgA284rZ4yV7WpFnvPvwuBGvPHpoIMBUeaC2116MZ12ZQC9ejwfOw2pUU5MFmfBeHx8q+v03b958h+jBH0hFp65T0asvYwWFvL5DjY53+LySjjFlXQiYRxJYmI8gaeRzulwyevK4hj0YejuVhrBT/U4uqVbzHi8W4rv16NRg3l2qJfVZg4LXEKyEiv7ckgJIwJWbcw84yB4x8AS6+gaOKenxB3Yn2xX0+hoFMFxUGwHQCNgHBMxQI+G1iMKxoa7fLgTaVMvjqO4hQGbZ8XH06vMyhIhG9VclnWL8Bd4bk2deTNzL+3a+kQDP8+IuM63yIUjrNLPCjVDDWsPExyWIVZ2Fbw2/tfiLxYklz/1USbvPNanonFT2I8K+KOg5Rzix5HXeVdIMMH+Z+q83tv/a4bjvDb/hGyWDOQgfL7r9MyWz0QoYoYbzD3yuzDoFHcNu52xzrghA59j/+RBynvofhHALNqEFyYTymW4Yi16MAM3zfJ8t2TAxFb5d5rG75xDW+nw0J15y5sjphDu0jL/pMqXy5DkNezCofpwvotPYqKeWjODSeywW1HUOO8LCRsUTEtd6VZcTYZYb9WU4jL2sd9KDu/7jh//M/tLbQt3Co8rswgzUbaou6M3rWPDWksNj1XPOZCHQwIZ96FBmPare2jNYc/vpA/+0kmu59Scs4/k0rIYhfQeBKG8qOYR3s0CF+h4n7uU5OR6ZIoRchKGEFvwHZv6JfJs8p+EXCFRTKrYeimBQD4VJLhldzq2mvloiqI/bXkYFI3SGiEyo0auxoetQF0/x9oHXwFQBJbw1ok5PX4edNBCVV6A6rAaG0mohjy6zDZ7IQPOnPQN7VgARvtd46nNN9MorDtcf7muYU4NjvW9lpIHwS/ROQKjvu9Jql61h7YIDjBda8IiKT02k7vEqLxldZv4UVEOdrUkYJg+bFxMVUuX9bkn1k/NM+ajohBhPHQf8DwfePr/Z/zzuTAe9Iy+6/Q8qmZPc8Rq3x5ZU/f+iZI/qGBFzAkyovIJEmBr2f7fLVMt94AleeXnVFxHnf4uo74wjr9Lg9JPoon++Lld7vRRf0ha/2fmLee8Nex72LjkefkHJWVQi1Qy1LDggovYsMKpUxto/EHRel1M3l1PRDB29taQ6bVjvnJJON57lvytpb7p+bxIM/EtKjskDFdYzelYONuqwnnxHySEkw1EEmWrMqy6Y5i0lZ5uJDT+7pCORynx2l5lZ3cOMvbNC8G7Ho14zqEwmWlgIxu+n8oMw7xLu6rWfSrw+6B/iOOaLMfsPlWHiyRirEErbcBsHYeKh5lHnKKMOU3sFhdivEdgtagWdpGXA3GzeYM5BoErX8XvJD2R/VfGlMer5LueC67GBwPKeg2EwAl0x5o0IVImggdTxe+bAzPAc8sBJeuh+spc+gOAFHR7Cfd+g6clUSYvF6J0Jsjkq7vFrQesF2cT2d4P2i3sfHfQ7QWLUl/t+G35BoJbwyFJV2eXvK6n6cSYZhvlO0J+rTCr47tTRUSVdicp3Ysly6MVpFuLELynDWlpRlquDNgX9LATLbyu3XDecI0BE3DqeAPPEU9cNuXFk2W946qSSqjhn4zEDT6vRsDnGvPit+BAw2Vu38Kb7He/h7sG/a/369VfE/e9FuHf3bm4Jo/cmwu7SdZkh9/ANGzb09zMOH7+/io9jJMdciXfcsKdiVDkw55acP62S81xfVtJ7zb77WMm10Ppzhp6ynnszVNVyBUCVNmvslC4nf1xcMnzTOO/Hg86NsuwbFf/DQRfGPTmhpEeW/IGKbcTg4yVDUnnTL+4y4b+xcfuptob4XJdaTkuxn5rPicXGfWOXyxpdEtd/X9DmEOKPhDBfGttDYvvCUM3fGPzMcm3x+n67HIpjdpwR99vifkGfDl4q6PPiWa+I5z5q0CYmL9PQMCfYmYjkqujmEG+OCtWv6RXbg6KnkgKKjd2ngkKrAKo0gawgODUIhYe/TgS5S5TpThqSqPCHxDF3HmzVzVHpa7ZVHv2ZgTdkx94mFFTgnh+Ar2PPVPqqonsPdT64lWAOH9Tye8f97nO7BP6ooP2WIuCj9+j+Gh9RdMp3v9jeN+5JK6GqS5NsgYq9ggTeTDXhblgqONt4ik8o6Xyr6qx48NOi8j1c5VLZOZZQqKo9LQUTFfWUkvcDfgE96tjDbeVQKjeV+StRhjtHw/OzuLf84AfGvq/F/9R1DREthDrLln77wNNKziiprhsWpKG4Ls3gN0oGm5xf0t7H/0ucIx+5+32DkEev/X3Tb0OYjwy+V5nj3g9ZiIBrkMbk2QcBF9WmHJ+O3/wD1wddG//jr/XfVK5osssJ19CwVAha+feSIZ8CPwwVGdeWqfVFDlA5VeaxcKOo+KPLLAwTlZWq/E8lc8wJpmE7KwPHnwgySRDuEXRVCNXFBDzu+6Wgf4vyUJ8vjbJdFaQXf09c+6rY3jvIemtXTeVa4a5n/wldpk7eGb8FsjBPvlIybbJG4aogyxLLWnN1nEtNPjzucWUI9s649/bgPxHb/1g363Qr88H7qsdUqkIexDHoud8W+4zfG+KTAprW8umgq4P6deCbcDcsF8aQRb31avtUOq+6DRs2bJzKZPsbh97qgBDwO4Rw7RW0NWhLCHi3FCGfD50aPQvjwN0gEIdEOQ5UjhC2rVGOQzU28dvUTmmHHXPAVC4EgeeBtoYZO11GUsKyb5ceawLMWedeHHiG0oAdX9f3Wh/XnB4EU2acXwqyeIQloCTSsNbbbEkn4L9BoJ1roQrneRYLFljEwP/MESMC9v/yVC4LrLzmpjI36vppDQ0rh9prBJ0YvOWCXhKV8TiqcQjzB0OwHjw9Pf3ToCtDyPcZBG2XKokGIanq6JIxXIP6fUGU4fVxn21RhhuCriPkcfsrY3tj7L9rCNHHgn4Q939AbM+JfZZpMvuN2SFo5VlBT4/r/FfsPzNIdNuHS86+u8k963NUQR0auDl74/GzVhqde4r3Fr//OniLFwjA6RuskuP0r43y8xfIzbZ9KlMlL/u9NTTMi1HlfeaQ+um1se8R0XP+OCrjB0OoHmwoJ/77YvzeR8Wvlb3SZIWfD5PHTQrJQGKtec3fFPcyjPTDuPf1ce+7RVm+Yo2uKJ+VUy2o+KPY7ojf7xjKbgUYQ383xjVMrzw5zrH/NVM5zdKIwUsny+O+VbgnBXzy+ebC6Bonxzk/Cv71se3fW/CnB22Lw/42jjszrmuJoSrg/fJT8123oWHZqJV7KpctpqKbH03F5GS6a9D6oF8NYpOaL02VR2ArMb+eSM+En3PNtIVAWaYyFfQBcZ9Ncb8uBPvgENKDBj9An2plaJQsq2uJZeozNVrZmRtGAbZ1uVQydX1bbKnAyiXPevXaLwhVALtU+V2PaWPrPlT82w/3YmJI4MhZdtBeuT7cYVEma8T1Jk/wUmxJC8VT3id4bGhYdRDwCZLvjTPr3KiYDwjhtsTtR6NiWrTw6tj/hfifM0ygyNe6XIHF+PTXu5yrvOReSaVXBj2o4JLq6GP742vAySDku7ZoaCAmNYKb7J+rXHX/XDT8D0JH318ynbT0S9eUDNaRTuqa2Pe8Lp16X+1yjNscgH8N/o2T5ajP2NBwq2FCEJ5Ycqjq4iDBItRiywwbv+3X1Qo6Moit67c837zghqqOnbj0olEFFxFmgl0FnYCPhXpMk0JEQOt2TItFl+B9Fz0nh/m7Sz7rs6fSJMCLlzc0Zzjs7JIJK6SYslhFXw7lbmj4uWEkHAJKOInutS7VXymNBMRswAfdHx//3z/oQVO54ikhV/l56OmeuijSNBe/1nRT5amSX8tZ99f/DGmZXkrdp708ZCqXHpoJevCwZQIIIuJHYAqY2urYJTUsDVWRoScAAAP6SURBVA0rjtrbjGnUS1qw8ElBjw26Uwj9R2P7yTjGsNQ7u1zeV1CHGV/i383iOn3gzfh6xsCbxbXrfnVb+Xrfyrs31F568ph67lKo5Piz6bRmbgmZvahkskmRbu8tOdXWyieeyfNJGPHSoMvj/o+JMh0fWsY5sX208oyu29CwNjGPcCOrkZ4R9GfBc8D1EyXiOCufCtbwm4pOQPCE+p0DLwBFJpiqwv7cMQij4TNlYm4IgDGH3m/BN+xs/MPKMLkljjHHnOAzYU6Nd/GM6enpr4WQn1oboDkakYaGtY1BwG8fdI+gu69Ldf34oEdNpZdab22BBIEkZodJqSTunADhDys58wtvvvPPFSMB5A2XCumYIKbGw4N+3f6SGWDY0qa27oh9jw4SRcfRZkjOexDA8tAQ9LvxF3hPDQ23SdSefD7P9Qg8zjXBxLMG3rxzGWXwJ5SMff9AyZlgxqgvLDl91VRO+wWGmCgidlzACBv47OE4DcWrh+PYuUJs8XpaOdjwQnE1OI5Xhh0Dz2SQz0ziitd1ObHlvKA3x3PcKejsoLfH/pk4Tgis8vbzyz1jpardjJ2BqKHhNo0q2Lcg4FeUVG2lTSKc+OeXnJeNl3FFRhY8YSSIeOf1XvuSyf3rJBRkkYfvD/zRQV8eeBqBABa8Oe5vGXgRbacN/Lklh7RMQrm0ZL4z6vbOKLuY+Lq+25HD8f7TS39z+K1MNxPwsQnTPOQNezQmBNxkEon+9bqSMMjOarqkHh1vjFh2FceY5bUtSGipRRUOLjkppar75ndrKPB6Zf85Rlaap5bMAqPnNiNOj69RIOicfe6BJ8TK8uySmoPQUQs7/H4I6YFBzwxyH88hqeQfBLmf4cKTy9Jyyzc0NAzYu6S9zu7dVjL18wtKCqLppK8YeHHkEj1QnzUUeOr6SfgQSur6I2NrP6HX87oWxxjjWHooqZ56TPbG4x56osFqaGhYBgidnp7zbUdJtVgqqV59HoiKLltqVdH7udolVfSLBl4v/taB5wdgb/9fmV1HnNDr2XuMhXkuAW+C3tAwByZt8vn4CeiVqcVbS9rqbHbqN0F9Wcke3Pj5K4dj2fB6ag6wJw28HlzeObze+5iSyR6o9tKi3qWket9DOeu2er9rbz7+v6GhoaGhoaGhoeEXHGMVf2wHL4SHsWq9G5OgoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhDeL/AbL/6dpoj+OHAAAAAElFTkSuQmCC",width:"248",height:"248",style:{mixBlendMode:"multiply"}}),React.createElement("rect",{x:"184.055",y:"54.995",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"170.059",y:"44.06",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"200.238",y:"77.302",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"212.048",y:"87.8",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"206.799",y:"83.425",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"204.175",y:"85.612",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"219.046",y:"103.108",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"154.751",y:"30.064",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"188.866",y:"63.742",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"148.189",y:"34",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"134.051",y:"31.707",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"126.124",y:"24.771",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"115.385",y:"29.19",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"95.702",y:"31.376",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"91.766",y:"27.002",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"90.454",y:"32.688",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"184.389",y:"45.58",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"162.185",y:"41.873",width:"2.187",height:"2.187"})))}var _t="ai",be="ai/ai",$t="https://wordpress.org/plugins/ai/",ye=Object.values(Pe()),en=ye.some(e=>e.type==="ai_provider"),bt=[];for(let e of ye)e.type==="ai_provider"&&e.authentication.method==="api_key"&&bt.push(e.authentication.settingName);function wt(){let[e,t]=(0,q.useState)(!1),[n,r]=(0,q.useState)(!1),o=(0,q.useRef)(ye.some(u=>u.type==="ai_provider"&&u.authentication.method==="api_key"&&u.authentication.isConnected)).current,{pluginStatus:a,canInstallPlugins:s,canManagePlugins:d,hasConnectedProvider:g}=(0,re.useSelect)(u=>{let f=u(Le.store),m=!!f.canUser("create",{kind:"root",name:"plugin"}),T=f.getEntityRecord("root","site"),h=o||bt.some(j=>!!T?.[j]),D=f.getEntityRecord("root","plugin",be);return f.hasFinishedResolution("getEntityRecord",["root","plugin",be])?D?{pluginStatus:D.status==="active"?"active":"inactive",canInstallPlugins:m,canManagePlugins:!0,hasConnectedProvider:h}:{pluginStatus:"not-installed",canInstallPlugins:m,canManagePlugins:m,hasConnectedProvider:h}:{pluginStatus:"checking",canInstallPlugins:m,canManagePlugins:void 0,hasConnectedProvider:h}},[]),{saveEntityRecord:c}=(0,re.useDispatch)(Le.store),b=async()=>{t(!0);try{await c("root","plugin",{slug:_t,status:"active"},{throwOnError:!0}),r(!0)}catch{}finally{t(!1)}},p=async()=>{t(!0);try{await c("root","plugin",{plugin:be,status:"active"},{throwOnError:!0}),r(!0)}catch{}finally{t(!1)}};if(!en||a==="checking"||a==="active"&&o&&!n||a==="not-installed"&&s===!1||a==="inactive"&&d===!1)return null;let G=a==="active"&&!g,l=a==="active"&&g&&(!o||n),x=a==="not-installed"||a==="inactive",Z=()=>l?(0,y.__)("The AI plugin is ready to use. You can use it to generate featured images, alt text, titles, excerpts and more."):G?(0,y.__)("The AI plugin is installed. Connect a provider below to generate featured images, alt text, titles, excerpts, and more."):(0,y.__)("The AI plugin can use your connectors to generate featured images, alt text, titles, excerpts and more."),v=()=>a==="not-installed"?{label:e?(0,y.__)("Installing\u2026"):(0,y.__)("Install AI Experiments"),disabled:e,onClick:e?void 0:b}:{label:e?(0,y.__)("Activating\u2026"):(0,y.__)("Activate AI Experiments"),disabled:e,onClick:e?void 0:p};return React.createElement("div",{className:"ai-plugin-callout"},React.createElement("div",{className:"ai-plugin-callout__content"},React.createElement("p",null,(0,q.createInterpolateElement)(Z(),{strong:React.createElement("strong",null)})),React.createElement("div",{className:"ai-plugin-callout__actions"},x&&React.createElement(we.Button,{variant:"primary",size:"compact",isBusy:e,disabled:v().disabled,accessibleWhenDisabled:!0,onClick:v().onClick},v().label),React.createElement(we.Button,{variant:"tertiary",href:$t,target:"_blank",rel:"noopener noreferrer"},(0,y.__)("Learn more")))),React.createElement(Pt,null))}var Lt=i(ut()),{lock:wr,unlock:Ge}=(0,Lt.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var{store:nn}=Ge(tn);ht();function rn(){let{connectors:e,canInstallPlugins:t}=(0,yt.useSelect)(r=>({connectors:Ge(r(nn)).getConnectors(),canInstallPlugins:r(xt.store).canUser("create",{kind:"root",name:"plugin"})}),[]),n=e.length===0;return React.createElement(se,{title:(0,V.__)("Connectors"),subTitle:(0,V.__)("All of your API keys and credentials are stored here and shared across plugins. Configure once and use everywhere.")},React.createElement("div",{className:`connectors-page${n?" connectors-page--empty":""}`},n?React.createElement(P.__experimentalVStack,{alignment:"center",spacing:3,style:{maxWidth:480}},React.createElement(P.__experimentalVStack,{alignment:"center",spacing:2},React.createElement(P.__experimentalHeading,{level:2,size:15,weight:600},(0,V.__)("No connectors yet")),React.createElement(P.__experimentalText,{size:12},(0,V.__)("Connectors appear here when you install plugins that use external services. Each plugin registers the API keys it needs, and you manage them all in one place."))),React.createElement(P.Button,{variant:"secondary",href:"plugin-install.php"},(0,V.__)("Learn more"))):React.createElement(P.__experimentalVStack,{spacing:3},React.createElement(wt,null),e.map(r=>r.render?React.createElement(r.render,{key:r.slug,slug:r.slug,label:r.label,description:r.description}):null)),t&&React.createElement("p",null,(0,Gt.createInterpolateElement)((0,V.__)("Find more connectors in the plugin directory"),{a:React.createElement("a",{href:"plugin-install.php"})}))))}function on(){return React.createElement(rn,null)}var an=on;export{an as stage}; diff --git a/src/wp-includes/build/routes/connectors-home/route.js b/src/wp-includes/build/routes/connectors-home/route.js new file mode 100644 index 0000000000000..8cd25392685dc --- /dev/null +++ b/src/wp-includes/build/routes/connectors-home/route.js @@ -0,0 +1,63 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/connectors-home/route.ts +var import_core_data = __toESM(require_core_data()); +var import_data = __toESM(require_data()); +var import_i18n = __toESM(require_i18n()); +var route = { + title: () => (0, import_i18n.__)("Connectors"), + loader: async () => { + await (0, import_data.resolveSelect)(import_core_data.store).canUser("create", { + kind: "root", + name: "plugin" + }); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/connectors-home/route.min.asset.php b/src/wp-includes/build/routes/connectors-home/route.min.asset.php new file mode 100644 index 0000000000000..a4b1c340ac926 --- /dev/null +++ b/src/wp-includes/build/routes/connectors-home/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data', 'wp-i18n'), 'version' => 'f3b33cd01621a8692a0f'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/connectors-home/route.min.js b/src/wp-includes/build/routes/connectors-home/route.min.js new file mode 100644 index 0000000000000..332b5b5741f9c --- /dev/null +++ b/src/wp-includes/build/routes/connectors-home/route.min.js @@ -0,0 +1 @@ +var S=Object.create;var p=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var a=(r,o)=>()=>(o||r((o={exports:{}}).exports,o),o.exports);var y=(r,o,e,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of g(o))!v.call(r,t)&&t!==e&&p(r,t,{get:()=>o[t],enumerable:!(i=_(o,t))||i.enumerable});return r};var n=(r,o,e)=>(e=r!=null?S(k(r)):{},y(o||!r||!r.__esModule?p(e,"default",{value:r,enumerable:!0}):e,r));var w=a((D,s)=>{s.exports=window.wp.coreData});var m=a((U,c)=>{c.exports=window.wp.data});var l=a((b,d)=>{d.exports=window.wp.i18n});var x=n(w()),f=n(m()),u=n(l()),h={title:()=>(0,u.__)("Connectors"),loader:async()=>{await(0,f.resolveSelect)(x.store).canUser("create",{kind:"root",name:"plugin"})}};export{h as route}; diff --git a/src/wp-includes/build/routes/font-list/content.js b/src/wp-includes/build/routes/font-list/content.js new file mode 100644 index 0000000000000..16ad2799cadfb --- /dev/null +++ b/src/wp-includes/build/routes/font-list/content.js @@ -0,0 +1,15091 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __require = /* @__PURE__ */ ((x2) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x2, { + get: (a2, b2) => (typeof require !== "undefined" ? require : a2)[b2] +}) : x2)(function(x2) { + if (typeof require !== "undefined") return require.apply(this, arguments); + throw Error('Dynamic require of "' + x2 + '" is not supported'); +}); +var __commonJS = (cb, mod) => function __require4() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/editor +var require_editor = __commonJS({ + "package-external:@wordpress/editor"(exports, module) { + module.exports = window.wp.editor; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/blocks +var require_blocks = __commonJS({ + "package-external:@wordpress/blocks"(exports, module) { + module.exports = window.wp.blocks; + } +}); + +// package-external:@wordpress/block-editor +var require_block_editor = __commonJS({ + "package-external:@wordpress/block-editor"(exports, module) { + module.exports = window.wp.blockEditor; + } +}); + +// package-external:@wordpress/compose +var require_compose = __commonJS({ + "package-external:@wordpress/compose"(exports, module) { + module.exports = window.wp.compose; + } +}); + +// package-external:@wordpress/style-engine +var require_style_engine = __commonJS({ + "package-external:@wordpress/style-engine"(exports, module) { + module.exports = window.wp.styleEngine; + } +}); + +// node_modules/fast-deep-equal/es6/index.js +var require_es6 = __commonJS({ + "node_modules/fast-deep-equal/es6/index.js"(exports, module) { + "use strict"; + module.exports = function equal(a2, b2) { + if (a2 === b2) return true; + if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { + if (a2.constructor !== b2.constructor) return false; + var length, i2, keys; + if (Array.isArray(a2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (!equal(a2[i2], b2[i2])) return false; + return true; + } + if (a2 instanceof Map && b2 instanceof Map) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + for (i2 of a2.entries()) + if (!equal(i2[1], b2.get(i2[0]))) return false; + return true; + } + if (a2 instanceof Set && b2 instanceof Set) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + return true; + } + if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (a2[i2] !== b2[i2]) return false; + return true; + } + if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; + if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); + if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); + keys = Object.keys(a2); + length = keys.length; + if (length !== Object.keys(b2).length) return false; + for (i2 = length; i2-- !== 0; ) + if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; + for (i2 = length; i2-- !== 0; ) { + var key = keys[i2]; + if (!equal(a2[key], b2[key])) return false; + } + return true; + } + return a2 !== a2 && b2 !== b2; + }; + } +}); + +// node_modules/deepmerge/dist/cjs.js +var require_cjs = __commonJS({ + "node_modules/deepmerge/dist/cjs.js"(exports, module) { + "use strict"; + var isMergeableObject = function isMergeableObject2(value) { + return isNonNullObject(value) && !isSpecial(value); + }; + function isNonNullObject(value) { + return !!value && typeof value === "object"; + } + function isSpecial(value) { + var stringValue = Object.prototype.toString.call(value); + return stringValue === "[object RegExp]" || stringValue === "[object Date]" || isReactElement(value); + } + var canUseSymbol = typeof Symbol === "function" && Symbol.for; + var REACT_ELEMENT_TYPE = canUseSymbol ? /* @__PURE__ */ Symbol.for("react.element") : 60103; + function isReactElement(value) { + return value.$$typeof === REACT_ELEMENT_TYPE; + } + function emptyTarget(val) { + return Array.isArray(val) ? [] : {}; + } + function cloneUnlessOtherwiseSpecified(value, options) { + return options.clone !== false && options.isMergeableObject(value) ? deepmerge2(emptyTarget(value), value, options) : value; + } + function defaultArrayMerge(target, source, options) { + return target.concat(source).map(function(element) { + return cloneUnlessOtherwiseSpecified(element, options); + }); + } + function getMergeFunction(key, options) { + if (!options.customMerge) { + return deepmerge2; + } + var customMerge = options.customMerge(key); + return typeof customMerge === "function" ? customMerge : deepmerge2; + } + function getEnumerableOwnPropertySymbols(target) { + return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) { + return Object.propertyIsEnumerable.call(target, symbol); + }) : []; + } + function getKeys(target) { + return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)); + } + function propertyIsOnObject(object, property) { + try { + return property in object; + } catch (_) { + return false; + } + } + function propertyIsUnsafe(target, key) { + return propertyIsOnObject(target, key) && !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key)); + } + function mergeObject(target, source, options) { + var destination = {}; + if (options.isMergeableObject(target)) { + getKeys(target).forEach(function(key) { + destination[key] = cloneUnlessOtherwiseSpecified(target[key], options); + }); + } + getKeys(source).forEach(function(key) { + if (propertyIsUnsafe(target, key)) { + return; + } + if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) { + destination[key] = getMergeFunction(key, options)(target[key], source[key], options); + } else { + destination[key] = cloneUnlessOtherwiseSpecified(source[key], options); + } + }); + return destination; + } + function deepmerge2(target, source, options) { + options = options || {}; + options.arrayMerge = options.arrayMerge || defaultArrayMerge; + options.isMergeableObject = options.isMergeableObject || isMergeableObject; + options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified; + var sourceIsArray = Array.isArray(source); + var targetIsArray = Array.isArray(target); + var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; + if (!sourceAndTargetTypesMatch) { + return cloneUnlessOtherwiseSpecified(source, options); + } else if (sourceIsArray) { + return options.arrayMerge(target, source, options); + } else { + return mergeObject(target, source, options); + } + } + deepmerge2.all = function deepmergeAll(array, options) { + if (!Array.isArray(array)) { + throw new Error("first argument should be an array"); + } + return array.reduce(function(prev, next) { + return deepmerge2(prev, next, options); + }, {}); + }; + var deepmerge_1 = deepmerge2; + module.exports = deepmerge_1; + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// package-external:@wordpress/keycodes +var require_keycodes = __commonJS({ + "package-external:@wordpress/keycodes"(exports, module) { + module.exports = window.wp.keycodes; + } +}); + +// package-external:@wordpress/api-fetch +var require_api_fetch = __commonJS({ + "package-external:@wordpress/api-fetch"(exports, module) { + module.exports = window.wp.apiFetch; + } +}); + +// package-external:@wordpress/date +var require_date = __commonJS({ + "package-external:@wordpress/date"(exports, module) { + module.exports = window.wp.date; + } +}); + +// node_modules/clsx/dist/clsx.mjs +function r(e2) { + var t3, f2, n2 = ""; + if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; + else if ("object" == typeof e2) if (Array.isArray(e2)) { + var o3 = e2.length; + for (t3 = 0; t3 < o3; t3++) e2[t3] && (f2 = r(e2[t3])) && (n2 && (n2 += " "), n2 += f2); + } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); + return n2; +} +function clsx() { + for (var e2, t3, f2 = 0, n2 = "", o3 = arguments.length; f2 < o3; f2++) (e2 = arguments[f2]) && (t3 = r(e2)) && (n2 && (n2 += " "), n2 += t3); + return n2; +} +var clsx_default = clsx; + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element = __toESM(require_element(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components2 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_components2.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + import_components2.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/font-list/stage.tsx +var import_i18n46 = __toESM(require_i18n()); +var import_components63 = __toESM(require_components()); +var import_editor = __toESM(require_editor()); +var import_core_data12 = __toESM(require_core_data()); +var import_data13 = __toESM(require_data()); +var import_element34 = __toESM(require_element()); + +// packages/global-styles-ui/build-module/global-styles-ui.mjs +var import_components62 = __toESM(require_components(), 1); +var import_blocks5 = __toESM(require_blocks(), 1); +var import_data12 = __toESM(require_data(), 1); +var import_block_editor13 = __toESM(require_block_editor(), 1); +var import_element33 = __toESM(require_element(), 1); +var import_compose6 = __toESM(require_compose(), 1); + +// packages/global-styles-engine/build-module/utils/object.mjs +function setImmutably(object, path, value) { + path = Array.isArray(path) ? [...path] : [path]; + object = Array.isArray(object) ? [...object] : { ...object }; + const leaf = path.pop(); + let prev = object; + for (const key of path) { + const lvl = prev[key]; + prev = prev[key] = Array.isArray(lvl) ? [...lvl] : { ...lvl }; + } + prev[leaf] = value; + return object; +} +var getValueFromObjectPath = (object, path, defaultValue) => { + const arrayPath = Array.isArray(path) ? path : path.split("."); + let value = object; + arrayPath.forEach((fieldName) => { + value = value?.[fieldName]; + }); + return value ?? defaultValue; +}; + +// packages/global-styles-engine/build-module/settings/get-setting.mjs +var VALID_SETTINGS = [ + "appearanceTools", + "useRootPaddingAwareAlignments", + "background.backgroundImage", + "background.backgroundRepeat", + "background.backgroundSize", + "background.backgroundPosition", + "border.color", + "border.radius", + "border.radiusSizes", + "border.style", + "border.width", + "shadow.presets", + "shadow.defaultPresets", + "color.background", + "color.button", + "color.caption", + "color.custom", + "color.customDuotone", + "color.customGradient", + "color.defaultDuotone", + "color.defaultGradients", + "color.defaultPalette", + "color.duotone", + "color.gradients", + "color.heading", + "color.link", + "color.palette", + "color.text", + "custom", + "dimensions.aspectRatio", + "dimensions.height", + "dimensions.minHeight", + "dimensions.width", + "dimensions.dimensionSizes", + "layout.contentSize", + "layout.definitions", + "layout.wideSize", + "lightbox.enabled", + "lightbox.allowEditing", + "position.fixed", + "position.sticky", + "spacing.customSpacingSize", + "spacing.defaultSpacingSizes", + "spacing.spacingSizes", + "spacing.spacingScale", + "spacing.blockGap", + "spacing.margin", + "spacing.padding", + "spacing.units", + "typography.fluid", + "typography.customFontSize", + "typography.defaultFontSizes", + "typography.dropCap", + "typography.fontFamilies", + "typography.fontSizes", + "typography.fontStyle", + "typography.fontWeight", + "typography.letterSpacing", + "typography.lineHeight", + "typography.textAlign", + "typography.textColumns", + "typography.textDecoration", + "typography.textIndent", + "typography.textTransform", + "typography.writingMode" +]; +function getSetting(globalStyles, path, blockName) { + const appendedBlockPath = blockName ? ".blocks." + blockName : ""; + const appendedPropertyPath = path ? "." + path : ""; + const contextualPath = `settings${appendedBlockPath}${appendedPropertyPath}`; + const globalPath = `settings${appendedPropertyPath}`; + if (path) { + return getValueFromObjectPath(globalStyles, contextualPath) ?? getValueFromObjectPath(globalStyles, globalPath); + } + let result = {}; + VALID_SETTINGS.forEach((setting) => { + const value = getValueFromObjectPath( + globalStyles, + `settings${appendedBlockPath}.${setting}` + ) ?? getValueFromObjectPath(globalStyles, `settings.${setting}`); + if (value !== void 0) { + result = setImmutably(result, setting.split("."), value); + } + }); + return result; +} + +// packages/global-styles-engine/build-module/settings/set-setting.mjs +function setSetting(globalStyles, path, newValue, blockName) { + const appendedBlockPath = blockName ? ".blocks." + blockName : ""; + const appendedPropertyPath = path ? "." + path : ""; + const finalPath = `settings${appendedBlockPath}${appendedPropertyPath}`; + return setImmutably( + globalStyles, + finalPath.split("."), + newValue + ); +} + +// packages/global-styles-engine/build-module/utils/common.mjs +var import_style_engine = __toESM(require_style_engine(), 1); + +// packages/global-styles-engine/build-module/utils/fluid.mjs +var DEFAULT_MAXIMUM_VIEWPORT_WIDTH = "1600px"; +var DEFAULT_MINIMUM_VIEWPORT_WIDTH = "320px"; +var DEFAULT_SCALE_FACTOR = 1; +var DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN = 0.25; +var DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX = 0.75; +var DEFAULT_MINIMUM_FONT_SIZE_LIMIT = "14px"; +function getComputedFluidTypographyValue({ + minimumFontSize, + maximumFontSize, + fontSize, + minimumViewportWidth = DEFAULT_MINIMUM_VIEWPORT_WIDTH, + maximumViewportWidth = DEFAULT_MAXIMUM_VIEWPORT_WIDTH, + scaleFactor = DEFAULT_SCALE_FACTOR, + minimumFontSizeLimit +}) { + minimumFontSizeLimit = !!getTypographyValueAndUnit(minimumFontSizeLimit) ? minimumFontSizeLimit : DEFAULT_MINIMUM_FONT_SIZE_LIMIT; + if (fontSize) { + const fontSizeParsed = getTypographyValueAndUnit(fontSize); + if (!fontSizeParsed?.unit || !fontSizeParsed?.value) { + return null; + } + const minimumFontSizeLimitParsed = getTypographyValueAndUnit( + minimumFontSizeLimit, + { + coerceTo: fontSizeParsed.unit + } + ); + if (!!minimumFontSizeLimitParsed?.value && !minimumFontSize && !maximumFontSize) { + if (fontSizeParsed?.value <= minimumFontSizeLimitParsed?.value) { + return null; + } + } + if (!maximumFontSize) { + maximumFontSize = `${fontSizeParsed.value}${fontSizeParsed.unit}`; + } + if (!minimumFontSize) { + const fontSizeValueInPx = fontSizeParsed.unit === "px" ? fontSizeParsed.value : fontSizeParsed.value * 16; + const minimumFontSizeFactor = Math.min( + Math.max( + 1 - 0.075 * Math.log2(fontSizeValueInPx), + DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN + ), + DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX + ); + const calculatedMinimumFontSize = roundToPrecision( + fontSizeParsed.value * minimumFontSizeFactor, + 3 + ); + if (!!minimumFontSizeLimitParsed?.value && calculatedMinimumFontSize < minimumFontSizeLimitParsed?.value) { + minimumFontSize = `${minimumFontSizeLimitParsed.value}${minimumFontSizeLimitParsed.unit}`; + } else { + minimumFontSize = `${calculatedMinimumFontSize}${fontSizeParsed.unit}`; + } + } + } + const minimumFontSizeParsed = getTypographyValueAndUnit(minimumFontSize); + const fontSizeUnit = minimumFontSizeParsed?.unit || "rem"; + const maximumFontSizeParsed = getTypographyValueAndUnit(maximumFontSize, { + coerceTo: fontSizeUnit + }); + if (!minimumFontSizeParsed || !maximumFontSizeParsed) { + return null; + } + const minimumFontSizeRem = getTypographyValueAndUnit(minimumFontSize, { + coerceTo: "rem" + }); + const maximumViewportWidthParsed = getTypographyValueAndUnit( + maximumViewportWidth, + { coerceTo: fontSizeUnit } + ); + const minimumViewportWidthParsed = getTypographyValueAndUnit( + minimumViewportWidth, + { coerceTo: fontSizeUnit } + ); + if (!maximumViewportWidthParsed || !minimumViewportWidthParsed || !minimumFontSizeRem) { + return null; + } + const linearDenominator = maximumViewportWidthParsed.value - minimumViewportWidthParsed.value; + if (!linearDenominator) { + return null; + } + const minViewportWidthOffsetValue = roundToPrecision( + minimumViewportWidthParsed.value / 100, + 3 + ); + const viewportWidthOffset = roundToPrecision(minViewportWidthOffsetValue, 3) + fontSizeUnit; + const linearFactor = 100 * ((maximumFontSizeParsed.value - minimumFontSizeParsed.value) / linearDenominator); + const linearFactorScaled = roundToPrecision( + (linearFactor || 1) * scaleFactor, + 3 + ); + const fluidTargetFontSize = `${minimumFontSizeRem.value}${minimumFontSizeRem.unit} + ((1vw - ${viewportWidthOffset}) * ${linearFactorScaled})`; + return `clamp(${minimumFontSize}, ${fluidTargetFontSize}, ${maximumFontSize})`; +} +function getTypographyValueAndUnit(rawValue, options = {}) { + if (typeof rawValue !== "string" && typeof rawValue !== "number") { + return null; + } + if (isFinite(rawValue)) { + rawValue = `${rawValue}px`; + } + const { coerceTo, rootSizeValue, acceptableUnits } = { + coerceTo: "", + // Default browser font size. Later we could inject some JS to compute this `getComputedStyle( document.querySelector( "html" ) ).fontSize`. + rootSizeValue: 16, + acceptableUnits: ["rem", "px", "em"], + ...options + }; + const acceptableUnitsGroup = acceptableUnits?.join("|"); + const regexUnits = new RegExp( + `^(\\d*\\.?\\d+)(${acceptableUnitsGroup}){1,1}$` + ); + const matches = rawValue.toString().match(regexUnits); + if (!matches || matches.length < 3) { + return null; + } + let [, value, unit] = matches; + let returnValue = parseFloat(value); + if ("px" === coerceTo && ("em" === unit || "rem" === unit)) { + returnValue = returnValue * rootSizeValue; + unit = coerceTo; + } + if ("px" === unit && ("em" === coerceTo || "rem" === coerceTo)) { + returnValue = returnValue / rootSizeValue; + unit = coerceTo; + } + if (("em" === coerceTo || "rem" === coerceTo) && ("em" === unit || "rem" === unit)) { + unit = coerceTo; + } + if (!unit) { + return null; + } + return { + value: roundToPrecision(returnValue, 3), + unit + }; +} +function roundToPrecision(value, digits = 3) { + const base = Math.pow(10, digits); + return Math.round(value * base) / base; +} + +// packages/global-styles-engine/build-module/utils/typography.mjs +function isFluidTypographyEnabled(typographySettings) { + const fluidSettings = typographySettings?.fluid; + return true === fluidSettings || fluidSettings && typeof fluidSettings === "object" && Object.keys(fluidSettings).length > 0; +} +function getFluidTypographyOptionsFromSettings(settings) { + const typographySettings = settings?.typography ?? {}; + const layoutSettings = settings?.layout; + const defaultMaxViewportWidth = getTypographyValueAndUnit( + layoutSettings?.wideSize + ) ? layoutSettings?.wideSize : null; + return isFluidTypographyEnabled(typographySettings) && defaultMaxViewportWidth ? { + fluid: { + maxViewportWidth: defaultMaxViewportWidth, + ...typeof typographySettings.fluid === "object" ? typographySettings.fluid : {} + } + } : { + fluid: typographySettings?.fluid + }; +} +function getTypographyFontSizeValue(preset, settings) { + const { size: defaultSize } = preset; + if (!defaultSize || "0" === defaultSize || false === preset?.fluid) { + return defaultSize; + } + if (!isFluidTypographyEnabled(settings?.typography) && !isFluidTypographyEnabled(preset)) { + return defaultSize; + } + const fluidTypographySettings = getFluidTypographyOptionsFromSettings(settings)?.fluid ?? {}; + const fluidFontSizeValue = getComputedFluidTypographyValue({ + minimumFontSize: typeof preset?.fluid === "boolean" ? void 0 : preset?.fluid?.min, + maximumFontSize: typeof preset?.fluid === "boolean" ? void 0 : preset?.fluid?.max, + fontSize: defaultSize, + minimumFontSizeLimit: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.minFontSize : void 0, + maximumViewportWidth: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.maxViewportWidth : void 0, + minimumViewportWidth: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.minViewportWidth : void 0 + }); + if (!!fluidFontSizeValue) { + return fluidFontSizeValue; + } + return defaultSize; +} + +// packages/global-styles-engine/build-module/utils/common.mjs +var PRESET_METADATA = [ + { + path: ["color", "palette"], + valueKey: "color", + cssVarInfix: "color", + classes: [ + { classSuffix: "color", propertyName: "color" }, + { + classSuffix: "background-color", + propertyName: "background-color" + }, + { + classSuffix: "border-color", + propertyName: "border-color" + } + ] + }, + { + path: ["color", "gradients"], + valueKey: "gradient", + cssVarInfix: "gradient", + classes: [ + { + classSuffix: "gradient-background", + propertyName: "background" + } + ] + }, + { + path: ["color", "duotone"], + valueKey: "colors", + cssVarInfix: "duotone", + valueFunc: ({ slug }) => `url( '#wp-duotone-${slug}' )`, + classes: [] + }, + { + path: ["shadow", "presets"], + valueKey: "shadow", + cssVarInfix: "shadow", + classes: [] + }, + { + path: ["typography", "fontSizes"], + valueFunc: (preset, settings) => getTypographyFontSizeValue(preset, settings), + valueKey: "size", + cssVarInfix: "font-size", + classes: [{ classSuffix: "font-size", propertyName: "font-size" }] + }, + { + path: ["typography", "fontFamilies"], + valueKey: "fontFamily", + cssVarInfix: "font-family", + classes: [ + { classSuffix: "font-family", propertyName: "font-family" } + ] + }, + { + path: ["spacing", "spacingSizes"], + valueKey: "size", + cssVarInfix: "spacing", + valueFunc: ({ size }) => size, + classes: [] + }, + { + path: ["border", "radiusSizes"], + valueKey: "size", + cssVarInfix: "border-radius", + classes: [] + }, + { + path: ["dimensions", "dimensionSizes"], + valueKey: "size", + cssVarInfix: "dimension", + classes: [] + } +]; +function findInPresetsBy(settings, blockName, presetPath = [], presetProperty = "slug", presetValueValue) { + const orderedPresetsByOrigin = [ + blockName ? getValueFromObjectPath(settings, [ + "blocks", + blockName, + ...presetPath + ]) : void 0, + getValueFromObjectPath(settings, presetPath) + ].filter(Boolean); + for (const presetByOrigin of orderedPresetsByOrigin) { + if (presetByOrigin) { + const origins = ["custom", "theme", "default"]; + for (const origin of origins) { + const presets = presetByOrigin[origin]; + if (presets) { + const presetObject = presets.find( + (preset) => preset[presetProperty] === presetValueValue + ); + if (presetObject) { + if (presetProperty === "slug") { + return presetObject; + } + const highestPresetObjectWithSameSlug = findInPresetsBy( + settings, + blockName, + presetPath, + "slug", + presetObject.slug + ); + if (highestPresetObjectWithSameSlug[presetProperty] === presetObject[presetProperty]) { + return presetObject; + } + return void 0; + } + } + } + } + } +} +function getValueFromPresetVariable(features, blockName, variable, [presetType, slug] = []) { + const metadata = PRESET_METADATA.find( + (data) => data.cssVarInfix === presetType + ); + if (!metadata || !features.settings) { + return variable; + } + const presetObject = findInPresetsBy( + features.settings, + blockName, + metadata.path, + "slug", + slug + ); + if (presetObject) { + const { valueKey } = metadata; + const result = presetObject[valueKey]; + return getValueFromVariable(features, blockName, result); + } + return variable; +} +function getValueFromCustomVariable(features, blockName, variable, path = []) { + const result = (blockName ? getValueFromObjectPath(features?.settings ?? {}, [ + "blocks", + blockName, + "custom", + ...path + ]) : void 0) ?? getValueFromObjectPath(features?.settings ?? {}, [ + "custom", + ...path + ]); + if (!result) { + return variable; + } + return getValueFromVariable(features, blockName, result); +} +function getValueFromVariable(features, blockName, variable) { + if (!variable || typeof variable !== "string") { + if (typeof variable === "object" && variable !== null && "ref" in variable && typeof variable.ref === "string") { + const resolvedVariable = getValueFromObjectPath( + features, + variable.ref + ); + if (!resolvedVariable || typeof resolvedVariable === "object" && "ref" in resolvedVariable) { + return resolvedVariable; + } + variable = resolvedVariable; + } else { + return variable; + } + } + const USER_VALUE_PREFIX = "var:"; + const THEME_VALUE_PREFIX = "var(--wp--"; + const THEME_VALUE_SUFFIX = ")"; + let parsedVar; + if (variable.startsWith(USER_VALUE_PREFIX)) { + parsedVar = variable.slice(USER_VALUE_PREFIX.length).split("|"); + } else if (variable.startsWith(THEME_VALUE_PREFIX) && variable.endsWith(THEME_VALUE_SUFFIX)) { + parsedVar = variable.slice(THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length).split("--"); + } else { + return variable; + } + const [type, ...path] = parsedVar; + if (type === "preset") { + return getValueFromPresetVariable( + features, + blockName, + variable, + path + ); + } + if (type === "custom") { + return getValueFromCustomVariable( + features, + blockName, + variable, + path + ); + } + return variable; +} + +// packages/global-styles-engine/build-module/settings/get-style.mjs +function getStyle(globalStyles, path, blockName, shouldDecodeEncode = true) { + const appendedPath = path ? "." + path : ""; + const finalPath = !blockName ? `styles${appendedPath}` : `styles.blocks.${blockName}${appendedPath}`; + if (!globalStyles) { + return void 0; + } + const rawResult = getValueFromObjectPath(globalStyles, finalPath); + const result = shouldDecodeEncode ? getValueFromVariable(globalStyles, blockName, rawResult) : rawResult; + return result; +} + +// packages/global-styles-engine/build-module/settings/set-style.mjs +function setStyle(globalStyles, path, newValue, blockName) { + const appendedPath = path ? "." + path : ""; + const finalPath = !blockName ? `styles${appendedPath}` : `styles.blocks.${blockName}${appendedPath}`; + return setImmutably( + globalStyles, + finalPath.split("."), + newValue + ); +} + +// packages/global-styles-engine/build-module/core/equal.mjs +var import_es6 = __toESM(require_es6(), 1); +function areGlobalStylesEqual(original, variation) { + if (typeof original !== "object" || typeof variation !== "object") { + return original === variation; + } + return (0, import_es6.default)(original?.styles, variation?.styles) && (0, import_es6.default)(original?.settings, variation?.settings); +} + +// packages/global-styles-engine/build-module/core/merge.mjs +var import_deepmerge = __toESM(require_cjs(), 1); + +// node_modules/is-plain-object/dist/is-plain-object.mjs +function isObject(o3) { + return Object.prototype.toString.call(o3) === "[object Object]"; +} +function isPlainObject(o3) { + var ctor, prot; + if (isObject(o3) === false) return false; + ctor = o3.constructor; + if (ctor === void 0) return true; + prot = ctor.prototype; + if (isObject(prot) === false) return false; + if (prot.hasOwnProperty("isPrototypeOf") === false) { + return false; + } + return true; +} + +// packages/global-styles-engine/build-module/core/merge.mjs +function mergeGlobalStyles(base, user) { + return (0, import_deepmerge.default)(base, user, { + /* + * We only pass as arrays the presets, + * in which case we want the new array of values + * to override the old array (no merging). + */ + isMergeableObject: isPlainObject, + /* + * Exceptions to the above rule. + * Background images should be replaced, not merged, + * as they themselves are specific object definitions for the style. + */ + customMerge: (key) => { + if (key === "backgroundImage") { + return (baseConfig, userConfig) => userConfig ?? baseConfig; + } + return void 0; + } + }); +} + +// node_modules/colord/index.mjs +var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; +var t = function(r3) { + return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; +}; +var n = function(r3, t3, n2) { + return void 0 === t3 && (t3 = 0), void 0 === n2 && (n2 = Math.pow(10, t3)), Math.round(n2 * r3) / n2 + 0; +}; +var e = function(r3, t3, n2) { + return void 0 === t3 && (t3 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t3 ? r3 : t3; +}; +var u = function(r3) { + return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; +}; +var a = function(r3) { + return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; +}; +var o = function(r3) { + return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; +}; +var i = /^#([0-9a-f]{3,8})$/i; +var s = function(r3) { + var t3 = r3.toString(16); + return t3.length < 2 ? "0" + t3 : t3; +}; +var h = function(r3) { + var t3 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t3, n2, e2), o3 = a2 - Math.min(t3, n2, e2), i2 = o3 ? a2 === t3 ? (n2 - e2) / o3 : a2 === n2 ? 2 + (e2 - t3) / o3 : 4 + (t3 - n2) / o3 : 0; + return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o3 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; +}; +var b = function(r3) { + var t3 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; + t3 = t3 / 360 * 6, n2 /= 100, e2 /= 100; + var a2 = Math.floor(t3), o3 = e2 * (1 - n2), i2 = e2 * (1 - (t3 - a2) * n2), s2 = e2 * (1 - (1 - t3 + a2) * n2), h2 = a2 % 6; + return { r: 255 * [e2, i2, o3, o3, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o3, o3][h2], b: 255 * [o3, o3, s2, e2, e2, i2][h2], a: u2 }; +}; +var g = function(r3) { + return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; +}; +var d = function(r3) { + return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; +}; +var f = function(r3) { + return b((n2 = (t3 = r3).s, { h: t3.h, s: (n2 *= ((e2 = t3.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t3.a })); + var t3, n2, e2; +}; +var c = function(r3) { + return { h: (t3 = h(r3)).h, s: (u2 = (200 - (n2 = t3.s)) * (e2 = t3.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t3.a }; + var t3, n2, e2, u2; +}; +var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var p2 = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var y = { string: [[function(r3) { + var t3 = i.exec(r3); + return t3 ? (r3 = t3[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; +}, "hex"], [function(r3) { + var t3 = v.exec(r3) || m.exec(r3); + return t3 ? t3[2] !== t3[4] || t3[4] !== t3[6] ? null : a({ r: Number(t3[1]) / (t3[2] ? 100 / 255 : 1), g: Number(t3[3]) / (t3[4] ? 100 / 255 : 1), b: Number(t3[5]) / (t3[6] ? 100 / 255 : 1), a: void 0 === t3[7] ? 1 : Number(t3[7]) / (t3[8] ? 100 : 1) }) : null; +}, "rgb"], [function(t3) { + var n2 = l.exec(t3) || p2.exec(t3); + if (!n2) return null; + var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); + return f(a2); +}, "hsl"]], object: [[function(r3) { + var n2 = r3.r, e2 = r3.g, u2 = r3.b, o3 = r3.a, i2 = void 0 === o3 ? 1 : o3; + return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; +}, "rgb"], [function(r3) { + var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o3 = void 0 === a2 ? 1 : a2; + if (!t(n2) || !t(e2) || !t(u2)) return null; + var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o3) }); + return f(i2); +}, "hsl"], [function(r3) { + var n2 = r3.h, a2 = r3.s, o3 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; + if (!t(n2) || !t(a2) || !t(o3)) return null; + var h2 = (function(r4) { + return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; + })({ h: Number(n2), s: Number(a2), v: Number(o3), a: Number(s2) }); + return b(h2); +}, "hsv"]] }; +var N = function(r3, t3) { + for (var n2 = 0; n2 < t3.length; n2++) { + var e2 = t3[n2][0](r3); + if (e2) return [e2, t3[n2][1]]; + } + return [null, void 0]; +}; +var x = function(r3) { + return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; +}; +var M = function(r3, t3) { + var n2 = c(r3); + return { h: n2.h, s: e(n2.s + 100 * t3, 0, 100), l: n2.l, a: n2.a }; +}; +var H = function(r3) { + return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; +}; +var $ = function(r3, t3) { + var n2 = c(r3); + return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t3, 0, 100), a: n2.a }; +}; +var j = (function() { + function r3(r4) { + this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; + } + return r3.prototype.isValid = function() { + return null !== this.parsed; + }, r3.prototype.brightness = function() { + return n(H(this.rgba), 2); + }, r3.prototype.isDark = function() { + return H(this.rgba) < 0.5; + }, r3.prototype.isLight = function() { + return H(this.rgba) >= 0.5; + }, r3.prototype.toHex = function() { + return r4 = o(this.rgba), t3 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t3) + s(e2) + s(u2) + i2; + var r4, t3, e2, u2, a2, i2; + }, r3.prototype.toRgb = function() { + return o(this.rgba); + }, r3.prototype.toRgbString = function() { + return r4 = o(this.rgba), t3 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t3 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t3 + ", " + n2 + ", " + e2 + ")"; + var r4, t3, n2, e2, u2; + }, r3.prototype.toHsl = function() { + return d(c(this.rgba)); + }, r3.prototype.toHslString = function() { + return r4 = d(c(this.rgba)), t3 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t3 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t3 + ", " + n2 + "%, " + e2 + "%)"; + var r4, t3, n2, e2, u2; + }, r3.prototype.toHsv = function() { + return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; + var r4; + }, r3.prototype.invert = function() { + return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); + var r4; + }, r3.prototype.saturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); + }, r3.prototype.desaturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); + }, r3.prototype.grayscale = function() { + return w(M(this.rgba, -1)); + }, r3.prototype.lighten = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); + }, r3.prototype.darken = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); + }, r3.prototype.rotate = function(r4) { + return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); + }, r3.prototype.alpha = function(r4) { + return "number" == typeof r4 ? w({ r: (t3 = this.rgba).r, g: t3.g, b: t3.b, a: r4 }) : n(this.rgba.a, 3); + var t3; + }, r3.prototype.hue = function(r4) { + var t3 = c(this.rgba); + return "number" == typeof r4 ? w({ h: r4, s: t3.s, l: t3.l, a: t3.a }) : n(t3.h); + }, r3.prototype.isEqual = function(r4) { + return this.toHex() === w(r4).toHex(); + }, r3; +})(); +var w = function(r3) { + return r3 instanceof j ? r3 : new j(r3); +}; +var S = []; +var k = function(r3) { + r3.forEach(function(r4) { + S.indexOf(r4) < 0 && (r4(j, y), S.push(r4)); + }); +}; + +// packages/global-styles-ui/build-module/provider.mjs +var import_element3 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/context.mjs +var import_element2 = __toESM(require_element(), 1); +var GlobalStylesContext = (0, import_element2.createContext)({ + user: { styles: {}, settings: {} }, + base: { styles: {}, settings: {} }, + merged: { styles: {}, settings: {} }, + onChange: () => { + }, + fontLibraryEnabled: false +}); + +// packages/global-styles-ui/build-module/provider.mjs +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +function GlobalStylesProvider({ + children, + value, + baseValue, + onChange, + fontLibraryEnabled +}) { + const merged = (0, import_element3.useMemo)(() => { + return mergeGlobalStyles(baseValue, value); + }, [baseValue, value]); + const contextValue = (0, import_element3.useMemo)( + () => ({ + user: value, + base: baseValue, + merged, + onChange, + fontLibraryEnabled + }), + [value, baseValue, merged, onChange, fontLibraryEnabled] + ); + return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(GlobalStylesContext.Provider, { value: contextValue, children }); +} + +// packages/global-styles-ui/build-module/screen-root.mjs +var import_components9 = __toESM(require_components(), 1); +var import_i18n4 = __toESM(require_i18n(), 1); + +// packages/icons/build-module/icon/index.mjs +var import_element4 = __toESM(require_element(), 1); +var icon_default = (0, import_element4.forwardRef)( + ({ icon, size = 24, ...props }, ref) => { + return (0, import_element4.cloneElement)(icon, { + width: size, + height: size, + ...props, + ref + }); + } +); + +// packages/icons/build-module/library/chevron-left.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives.Path, { d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z" }) }); + +// packages/icons/build-module/library/chevron-right.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives2.Path, { d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z" }) }); + +// packages/icons/build-module/library/more-vertical.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives3.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); + +// packages/icons/build-module/library/next.mjs +var import_primitives4 = __toESM(require_primitives(), 1); +var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); +var next_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives4.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); + +// packages/icons/build-module/library/previous.mjs +var import_primitives5 = __toESM(require_primitives(), 1); +var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); +var previous_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives5.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); + +// packages/global-styles-ui/build-module/screen-root.mjs +var import_data2 = __toESM(require_data(), 1); +var import_core_data2 = __toESM(require_core_data(), 1); + +// packages/global-styles-ui/build-module/icon-with-current-color.mjs +var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); +function IconWithCurrentColor({ + className, + ...props +}) { + return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( + icon_default, + { + className: clsx_default( + className, + "global-styles-ui-icon-with-current-color" + ), + ...props + } + ); +} + +// packages/global-styles-ui/build-module/navigation-button.mjs +var import_components3 = __toESM(require_components(), 1); +var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); +function GenericNavigationButton({ + icon, + children, + ...props +}) { + return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components3.__experimentalItem, { ...props, children: [ + icon && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components3.__experimentalHStack, { justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(IconWithCurrentColor, { icon, size: 24 }), + /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components3.FlexItem, { children }) + ] }), + !icon && children + ] }); +} +function NavigationButtonAsItem(props) { + return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components3.Navigator.Button, { as: GenericNavigationButton, ...props }); +} + +// packages/global-styles-ui/build-module/root-menu.mjs +var import_components4 = __toESM(require_components(), 1); +var import_i18n2 = __toESM(require_i18n(), 1); +var import_block_editor = __toESM(require_block_editor(), 1); + +// node_modules/colord/plugins/a11y.mjs +var o2 = function(o3) { + var t3 = o3 / 255; + return t3 < 0.04045 ? t3 / 12.92 : Math.pow((t3 + 0.055) / 1.055, 2.4); +}; +var t2 = function(t3) { + return 0.2126 * o2(t3.r) + 0.7152 * o2(t3.g) + 0.0722 * o2(t3.b); +}; +function a11y_default(o3) { + o3.prototype.luminance = function() { + return o4 = t2(this.rgba), void 0 === (r3 = 2) && (r3 = 0), void 0 === n2 && (n2 = Math.pow(10, r3)), Math.round(n2 * o4) / n2 + 0; + var o4, r3, n2; + }, o3.prototype.contrast = function(r3) { + void 0 === r3 && (r3 = "#FFF"); + var n2, a2, i2, e2, v2, u2, d2, c2 = r3 instanceof o3 ? r3 : new o3(r3); + return e2 = this.rgba, v2 = c2.toRgb(), u2 = t2(e2), d2 = t2(v2), n2 = u2 > d2 ? (u2 + 0.05) / (d2 + 0.05) : (d2 + 0.05) / (u2 + 0.05), void 0 === (a2 = 2) && (a2 = 0), void 0 === i2 && (i2 = Math.pow(10, a2)), Math.floor(i2 * n2) / i2 + 0; + }, o3.prototype.isReadable = function(o4, t3) { + return void 0 === o4 && (o4 = "#FFF"), void 0 === t3 && (t3 = {}), this.contrast(o4) >= (e2 = void 0 === (i2 = (r3 = t3).size) ? "normal" : i2, "AAA" === (a2 = void 0 === (n2 = r3.level) ? "AA" : n2) && "normal" === e2 ? 7 : "AA" === a2 && "large" === e2 ? 3 : 4.5); + var r3, n2, a2, i2, e2; + }; +} + +// packages/global-styles-ui/build-module/hooks.mjs +var import_element5 = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_core_data = __toESM(require_core_data(), 1); +var import_i18n = __toESM(require_i18n(), 1); + +// packages/global-styles-ui/build-module/utils.mjs +function removePropertiesFromObject(object, properties) { + if (!properties?.length) { + return object; + } + if (typeof object !== "object" || !object || !Object.keys(object).length) { + return object; + } + for (const key in object) { + if (properties.includes(key)) { + delete object[key]; + } else if (typeof object[key] === "object") { + removePropertiesFromObject(object[key], properties); + } + } + return object; +} +var filterObjectByProperties = (object, properties) => { + if (!object || !properties?.length) { + return {}; + } + const newObject = {}; + Object.keys(object).forEach((key) => { + if (properties.includes(key)) { + newObject[key] = object[key]; + } else if (typeof object[key] === "object") { + const newFilter = filterObjectByProperties( + object[key], + properties + ); + if (Object.keys(newFilter).length) { + newObject[key] = newFilter; + } + } + }); + return newObject; +}; +function isVariationWithProperties(variation, properties) { + const variationWithProperties = filterObjectByProperties( + structuredClone(variation), + properties + ); + return areGlobalStylesEqual(variationWithProperties, variation); +} +function getFontFamilyFromSetting(fontFamilies, setting) { + if (!Array.isArray(fontFamilies) || !setting) { + return null; + } + const fontFamilyVariable = setting.replace("var(", "").replace(")", ""); + const fontFamilySlug = fontFamilyVariable?.split("--").slice(-1)[0]; + return fontFamilies.find( + (fontFamily) => fontFamily.slug === fontFamilySlug + ); +} +function getFontFamilies(themeJson) { + const themeFontFamilies = themeJson?.settings?.typography?.fontFamilies?.theme; + const customFontFamilies = themeJson?.settings?.typography?.fontFamilies?.custom; + let fontFamilies = []; + if (themeFontFamilies && customFontFamilies) { + fontFamilies = [...themeFontFamilies, ...customFontFamilies]; + } else if (themeFontFamilies) { + fontFamilies = themeFontFamilies; + } else if (customFontFamilies) { + fontFamilies = customFontFamilies; + } + const bodyFontFamilySetting = themeJson?.styles?.typography?.fontFamily; + const bodyFontFamily = getFontFamilyFromSetting( + fontFamilies, + bodyFontFamilySetting + ); + const headingFontFamilySetting = themeJson?.styles?.elements?.heading?.typography?.fontFamily; + let headingFontFamily; + if (!headingFontFamilySetting) { + headingFontFamily = bodyFontFamily; + } else { + headingFontFamily = getFontFamilyFromSetting( + fontFamilies, + themeJson?.styles?.elements?.heading?.typography?.fontFamily + ); + } + return [bodyFontFamily, headingFontFamily]; +} + +// packages/global-styles-ui/build-module/hooks.mjs +k([a11y_default]); +function useStyle(path, blockName, readFrom = "merged", shouldDecodeEncode = true) { + const { user, base, merged, onChange } = (0, import_element5.useContext)(GlobalStylesContext); + let sourceValue = merged; + if (readFrom === "base") { + sourceValue = base; + } else if (readFrom === "user") { + sourceValue = user; + } + const styleValue = (0, import_element5.useMemo)( + () => getStyle(sourceValue, path, blockName, shouldDecodeEncode), + [sourceValue, path, blockName, shouldDecodeEncode] + ); + const setStyleValue = (0, import_element5.useCallback)( + (newValue) => { + const newGlobalStyles = setStyle( + user, + path, + newValue, + blockName + ); + onChange(newGlobalStyles); + }, + [user, onChange, path, blockName] + ); + return [styleValue, setStyleValue]; +} +function useSetting(path, blockName, readFrom = "merged") { + const { user, base, merged, onChange } = (0, import_element5.useContext)(GlobalStylesContext); + let sourceValue = merged; + if (readFrom === "base") { + sourceValue = base; + } else if (readFrom === "user") { + sourceValue = user; + } + const settingValue = (0, import_element5.useMemo)( + () => getSetting(sourceValue, path, blockName), + [sourceValue, path, blockName] + ); + const setSettingValue = (0, import_element5.useCallback)( + (newValue) => { + const newGlobalStyles = setSetting( + user, + path, + newValue, + blockName + ); + onChange(newGlobalStyles); + }, + [user, onChange, path, blockName] + ); + return [settingValue, setSettingValue]; +} +var EMPTY_ARRAY = []; +function hasThemeVariation({ + title, + settings, + styles +}) { + return title === (0, import_i18n.__)("Default") || Object.keys(settings || {}).length > 0 || Object.keys(styles || {}).length > 0; +} +function useCurrentMergeThemeStyleVariationsWithUserConfig(properties = []) { + const { variationsFromTheme } = (0, import_data.useSelect)((select) => { + const _variationsFromTheme = select( + import_core_data.store + ).__experimentalGetCurrentThemeGlobalStylesVariations?.(); + return { + variationsFromTheme: _variationsFromTheme || EMPTY_ARRAY + }; + }, []); + const { user: userVariation } = (0, import_element5.useContext)(GlobalStylesContext); + return (0, import_element5.useMemo)(() => { + const clonedUserVariation = structuredClone(userVariation); + const userVariationWithoutProperties = removePropertiesFromObject( + clonedUserVariation, + properties + ); + userVariationWithoutProperties.title = (0, import_i18n.__)("Default"); + const variationsWithPropertiesAndBase = variationsFromTheme.filter((variation) => { + return isVariationWithProperties(variation, properties); + }).map((variation) => { + return mergeGlobalStyles( + userVariationWithoutProperties, + variation + ); + }); + const variationsByProperties = [ + userVariationWithoutProperties, + ...variationsWithPropertiesAndBase + ]; + return variationsByProperties?.length ? variationsByProperties.filter(hasThemeVariation) : []; + }, [properties, userVariation, variationsFromTheme]); +} + +// packages/global-styles-ui/build-module/lock-unlock.mjs +var import_private_apis = __toESM(require_private_apis(), 1); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/global-styles-ui" +); + +// packages/global-styles-ui/build-module/root-menu.mjs +var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); +var { + useHasDimensionsPanel, + useHasTypographyPanel, + useHasColorPanel, + useSettingsForBlockElement, + useHasBackgroundPanel +} = unlock(import_block_editor.privateApis); + +// packages/global-styles-ui/build-module/preview-styles.mjs +var import_components8 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/preview-hooks.mjs +function useStylesPreviewColors() { + const [textColor = "black"] = useStyle("color.text"); + const [backgroundColor = "white"] = useStyle("color.background"); + const [headingColor = textColor] = useStyle( + "elements.h1.color.text" + ); + const [linkColor = headingColor] = useStyle( + "elements.link.color.text" + ); + const [buttonBackgroundColor = linkColor] = useStyle( + "elements.button.color.background" + ); + const [coreColors] = useSetting("color.palette.core") || []; + const [themeColors] = useSetting("color.palette.theme") || []; + const [customColors] = useSetting("color.palette.custom") || []; + const paletteColors = (themeColors ?? []).concat(customColors ?? []).concat(coreColors ?? []); + const textColorObject = paletteColors.filter( + ({ color }) => color === textColor + ); + const buttonBackgroundColorObject = paletteColors.filter( + ({ color }) => color === buttonBackgroundColor + ); + const highlightedColors = textColorObject.concat(buttonBackgroundColorObject).concat(paletteColors).filter( + // we exclude these background color because it is already visible in the preview. + ({ color }) => color !== backgroundColor + ).slice(0, 2); + return { + paletteColors, + highlightedColors + }; +} + +// packages/global-styles-ui/build-module/typography-example.mjs +var import_element6 = __toESM(require_element(), 1); +var import_components5 = __toESM(require_components(), 1); +var import_i18n3 = __toESM(require_i18n(), 1); + +// packages/global-styles-ui/build-module/font-library/utils/preview-styles.mjs +function findNearest(input, numbers) { + if (numbers.length === 0) { + return null; + } + numbers.sort((a2, b2) => Math.abs(input - a2) - Math.abs(input - b2)); + return numbers[0]; +} +function extractFontWeights(fontFaces) { + const result = []; + fontFaces.forEach((face) => { + const weights = String(face.fontWeight).split(" "); + if (weights.length === 2) { + const start = parseInt(weights[0]); + const end = parseInt(weights[1]); + for (let i2 = start; i2 <= end; i2 += 100) { + result.push(i2); + } + } else if (weights.length === 1) { + result.push(parseInt(weights[0])); + } + }); + return result; +} +function formatFontFamily(input) { + const regex = /^(?!generic\([ a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/; + const output = input.trim(); + const formatItem = (item) => { + item = item.trim(); + if (item.match(regex)) { + item = item.replace(/^["']|["']$/g, ""); + return `"${item}"`; + } + return item; + }; + if (output.includes(",")) { + return output.split(",").map(formatItem).filter((item) => item !== "").join(", "); + } + return formatItem(output); +} +function formatFontFaceName(input) { + if (!input) { + return ""; + } + let output = input.trim(); + if (output.includes(",")) { + output = (output.split(",").find((item) => item.trim() !== "") ?? "").trim(); + } + output = output.replace(/^["']|["']$/g, ""); + if (window.navigator.userAgent.toLowerCase().includes("firefox")) { + output = `"${output}"`; + } + return output; +} +function getFamilyPreviewStyle(family) { + const style = { + fontFamily: formatFontFamily(family.fontFamily) + }; + if (!("fontFace" in family) || !Array.isArray(family.fontFace)) { + style.fontWeight = "400"; + style.fontStyle = "normal"; + return style; + } + if (family.fontFace) { + const normalFaces = family.fontFace.filter( + (face) => face?.fontStyle && face.fontStyle.toLowerCase() === "normal" + ); + if (normalFaces.length > 0) { + style.fontStyle = "normal"; + const normalWeights = extractFontWeights(normalFaces); + const nearestWeight = findNearest(400, normalWeights); + style.fontWeight = String(nearestWeight) || "400"; + } else { + style.fontStyle = family.fontFace.length && family.fontFace[0].fontStyle || "normal"; + style.fontWeight = family.fontFace.length && String(family.fontFace[0].fontWeight) || "400"; + } + } + return style; +} +function getFacePreviewStyle(face) { + return { + fontFamily: formatFontFamily(face.fontFamily), + fontStyle: face.fontStyle || "normal", + fontWeight: face.fontWeight || "400" + }; +} + +// packages/global-styles-ui/build-module/typography-example.mjs +var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); +function PreviewTypography({ + fontSize, + variation +}) { + const { base } = (0, import_element6.useContext)(GlobalStylesContext); + let config = base; + if (variation) { + config = { ...base, ...variation }; + } + const [textColor] = useStyle("color.text"); + const [bodyFontFamilies, headingFontFamilies] = getFontFamilies(config); + const bodyPreviewStyle = bodyFontFamilies ? getFamilyPreviewStyle(bodyFontFamilies) : {}; + const headingPreviewStyle = headingFontFamilies ? getFamilyPreviewStyle(headingFontFamilies) : {}; + if (textColor) { + bodyPreviewStyle.color = textColor; + headingPreviewStyle.color = textColor; + } + if (fontSize) { + bodyPreviewStyle.fontSize = fontSize; + headingPreviewStyle.fontSize = fontSize; + } + return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)( + import_components5.__unstableMotion.div, + { + animate: { + scale: 1, + opacity: 1 + }, + initial: { + scale: 0.1, + opacity: 0 + }, + transition: { + delay: 0.3, + type: "tween" + }, + style: { + textAlign: "center", + lineHeight: 1 + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: headingPreviewStyle, children: (0, import_i18n3._x)("A", "Uppercase letter A") }), + /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: bodyPreviewStyle, children: (0, import_i18n3._x)("a", "Lowercase letter A") }) + ] + } + ); +} + +// packages/global-styles-ui/build-module/highlighted-colors.mjs +var import_components6 = __toESM(require_components(), 1); +var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); +function HighlightedColors({ + normalizedColorSwatchSize, + ratio +}) { + const { highlightedColors } = useStylesPreviewColors(); + const scaledSwatchSize = normalizedColorSwatchSize * ratio; + return highlightedColors.map(({ slug, color }, index) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)( + import_components6.__unstableMotion.div, + { + style: { + height: scaledSwatchSize, + width: scaledSwatchSize, + background: color, + borderRadius: scaledSwatchSize / 2 + }, + animate: { + scale: 1, + opacity: 1 + }, + initial: { + scale: 0.1, + opacity: 0 + }, + transition: { + delay: index === 1 ? 0.2 : 0.1 + } + }, + `${slug}-${index}` + )); +} + +// packages/global-styles-ui/build-module/preview-wrapper.mjs +var import_components7 = __toESM(require_components(), 1); +var import_compose = __toESM(require_compose(), 1); +var import_element7 = __toESM(require_element(), 1); +var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); +var normalizedWidth = 248; +var normalizedHeight = 152; +var THROTTLE_OPTIONS = { + leading: true, + trailing: true +}; +function PreviewWrapper({ + children, + label, + isFocused, + withHoverView +}) { + const [backgroundColor = "white"] = useStyle("color.background"); + const [gradientValue] = useStyle("color.gradient"); + const disableMotion = (0, import_compose.useReducedMotion)(); + const [isHovered, setIsHovered] = (0, import_element7.useState)(false); + const [containerResizeListener, { width }] = (0, import_compose.useResizeObserver)(); + const [throttledWidth, setThrottledWidthState] = (0, import_element7.useState)(width); + const [ratioState, setRatioState] = (0, import_element7.useState)(); + const setThrottledWidth = (0, import_compose.useThrottle)( + setThrottledWidthState, + 250, + THROTTLE_OPTIONS + ); + (0, import_element7.useLayoutEffect)(() => { + if (width) { + setThrottledWidth(width); + } + }, [width, setThrottledWidth]); + (0, import_element7.useLayoutEffect)(() => { + const newRatio = throttledWidth ? throttledWidth / normalizedWidth : 1; + const ratioDiff = newRatio - (ratioState || 0); + const isRatioDiffBigEnough = Math.abs(ratioDiff) > 0.1; + if (isRatioDiffBigEnough || !ratioState) { + setRatioState(newRatio); + } + }, [throttledWidth, ratioState]); + const fallbackRatio = width ? width / normalizedWidth : 1; + const ratio = ratioState ? ratioState : fallbackRatio; + const isReady = !!width; + return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { position: "relative" }, children: containerResizeListener }), + isReady && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)( + "div", + { + className: "global-styles-ui-preview__wrapper", + style: { + height: normalizedHeight * ratio + }, + onMouseEnter: () => setIsHovered(true), + onMouseLeave: () => setIsHovered(false), + tabIndex: -1, + children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)( + import_components7.__unstableMotion.div, + { + style: { + height: normalizedHeight * ratio, + width: "100%", + background: gradientValue ?? backgroundColor, + cursor: withHoverView ? "pointer" : void 0 + }, + initial: "start", + animate: (isHovered || isFocused) && !disableMotion && label ? "hover" : "start", + children: [].concat(children).map( + (child, key) => child({ ratio, key }) + ) + } + ) + } + ) + ] }); +} +var preview_wrapper_default = PreviewWrapper; + +// packages/global-styles-ui/build-module/preview-styles.mjs +var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); +var firstFrameVariants = { + start: { + scale: 1, + opacity: 1 + }, + hover: { + scale: 0, + opacity: 0 + } +}; +var midFrameVariants = { + hover: { + opacity: 1 + }, + start: { + opacity: 0.5 + } +}; +var secondFrameVariants = { + hover: { + scale: 1, + opacity: 1 + }, + start: { + scale: 0, + opacity: 0 + } +}; +function PreviewStyles({ + label, + isFocused, + withHoverView, + variation +}) { + const [fontWeight] = useStyle("typography.fontWeight"); + const [fontFamily = "serif"] = useStyle( + "typography.fontFamily" + ); + const [headingFontFamily = fontFamily] = useStyle( + "elements.h1.typography.fontFamily" + ); + const [headingFontWeight = fontWeight] = useStyle( + "elements.h1.typography.fontWeight" + ); + const [textColor = "black"] = useStyle("color.text"); + const [headingColor = textColor] = useStyle( + "elements.h1.color.text" + ); + const { paletteColors } = useStylesPreviewColors(); + return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)( + preview_wrapper_default, + { + label, + isFocused, + withHoverView, + children: [ + ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + import_components8.__unstableMotion.div, + { + variants: firstFrameVariants, + style: { + height: "100%", + overflow: "hidden" + }, + children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)( + import_components8.__experimentalHStack, + { + spacing: 10 * ratio, + justify: "center", + style: { + height: "100%", + overflow: "hidden" + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + PreviewTypography, + { + fontSize: 65 * ratio, + variation + } + ), + /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_components8.__experimentalVStack, { spacing: 4 * ratio, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + HighlightedColors, + { + normalizedColorSwatchSize: 32, + ratio + } + ) }) + ] + } + ) + }, + key + ), + ({ key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + import_components8.__unstableMotion.div, + { + variants: withHoverView ? midFrameVariants : void 0, + style: { + height: "100%", + width: "100%", + position: "absolute", + top: 0, + overflow: "hidden", + filter: "blur(60px)", + opacity: 0.1 + }, + children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + import_components8.__experimentalHStack, + { + spacing: 0, + justify: "flex-start", + style: { + height: "100%", + overflow: "hidden" + }, + children: paletteColors.slice(0, 4).map(({ color }, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + "div", + { + style: { + height: "100%", + background: color, + flexGrow: 1 + } + }, + index + )) + } + ) + }, + key + ), + ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + import_components8.__unstableMotion.div, + { + variants: secondFrameVariants, + style: { + height: "100%", + width: "100%", + overflow: "hidden", + position: "absolute", + top: 0 + }, + children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + import_components8.__experimentalVStack, + { + spacing: 3 * ratio, + justify: "center", + style: { + height: "100%", + overflow: "hidden", + padding: 10 * ratio, + boxSizing: "border-box" + }, + children: label && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( + "div", + { + style: { + fontSize: 40 * ratio, + fontFamily: headingFontFamily, + color: headingColor, + fontWeight: headingFontWeight, + lineHeight: "1em", + textAlign: "center" + }, + children: label + } + ) + } + ) + }, + key + ) + ] + } + ); +} +var preview_styles_default = PreviewStyles; + +// packages/global-styles-ui/build-module/screen-root.mjs +var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-block-list.mjs +var import_blocks2 = __toESM(require_blocks(), 1); +var import_i18n6 = __toESM(require_i18n(), 1); +var import_components12 = __toESM(require_components(), 1); +var import_data4 = __toESM(require_data(), 1); +var import_element8 = __toESM(require_element(), 1); +var import_block_editor2 = __toESM(require_block_editor(), 1); +var import_compose2 = __toESM(require_compose(), 1); +import { speak } from "@wordpress/a11y"; + +// packages/global-styles-ui/build-module/variations/variations-panel.mjs +var import_blocks = __toESM(require_blocks(), 1); +var import_data3 = __toESM(require_data(), 1); +var import_components10 = __toESM(require_components(), 1); +var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); +function getFilteredBlockStyles(blockStyles, variations) { + return blockStyles?.filter( + (style) => style.source === "block" || variations.includes(style.name) + ) || []; +} +function useBlockVariations(name2) { + const blockStyles = (0, import_data3.useSelect)( + (select) => { + const { getBlockStyles } = select(import_blocks.store); + return getBlockStyles(name2); + }, + [name2] + ); + const [variations] = useStyle("variations", name2); + const variationNames = Object.keys(variations ?? {}); + return getFilteredBlockStyles(blockStyles, variationNames); +} + +// packages/global-styles-ui/build-module/screen-header.mjs +var import_components11 = __toESM(require_components(), 1); +var import_i18n5 = __toESM(require_i18n(), 1); +var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-block-list.mjs +var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); +var { + useHasDimensionsPanel: useHasDimensionsPanel2, + useHasTypographyPanel: useHasTypographyPanel2, + useHasBorderPanel, + useSettingsForBlockElement: useSettingsForBlockElement2, + useHasColorPanel: useHasColorPanel2 +} = unlock(import_block_editor2.privateApis); +function useSortedBlockTypes() { + const blockItems = (0, import_data4.useSelect)( + (select) => select(import_blocks2.store).getBlockTypes(), + [] + ); + const groupByType = (blocks, block) => { + const { core, noncore } = blocks; + const type = block.name.startsWith("core/") ? core : noncore; + type.push(block); + return blocks; + }; + const { core: coreItems, noncore: nonCoreItems } = blockItems.reduce( + groupByType, + { core: [], noncore: [] } + ); + return [...coreItems, ...nonCoreItems]; +} +function useBlockHasGlobalStyles(blockName) { + const [rawSettings] = useSetting("", blockName); + const settings = useSettingsForBlockElement2(rawSettings, blockName); + const hasTypographyPanel = useHasTypographyPanel2(settings); + const hasColorPanel = useHasColorPanel2(settings); + const hasBorderPanel = useHasBorderPanel(settings); + const hasDimensionsPanel = useHasDimensionsPanel2(settings); + const hasLayoutPanel = hasBorderPanel || hasDimensionsPanel; + const hasVariationsPanel = !!useBlockVariations(blockName)?.length; + const hasGlobalStyles = hasTypographyPanel || hasColorPanel || hasLayoutPanel || hasVariationsPanel; + return hasGlobalStyles; +} +function BlockMenuItem({ block }) { + const hasBlockMenuItem = useBlockHasGlobalStyles(block.name); + if (!hasBlockMenuItem) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( + NavigationButtonAsItem, + { + path: "/blocks/" + encodeURIComponent(block.name), + children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_components12.__experimentalHStack, { justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_block_editor2.BlockIcon, { icon: block.icon }), + /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_components12.FlexItem, { children: block.title }) + ] }) + } + ); +} +function BlockList({ filterValue }) { + const sortedBlockTypes = useSortedBlockTypes(); + const debouncedSpeak = (0, import_compose2.useDebounce)(speak, 500); + const { isMatchingSearchTerm } = (0, import_data4.useSelect)(import_blocks2.store); + const filteredBlockTypes = !filterValue ? sortedBlockTypes : sortedBlockTypes.filter( + (blockType) => isMatchingSearchTerm(blockType, filterValue) + ); + const blockTypesListRef = (0, import_element8.useRef)(null); + (0, import_element8.useEffect)(() => { + if (!filterValue) { + return; + } + const count = blockTypesListRef.current?.childElementCount || 0; + const resultsFoundMessage = (0, import_i18n6.sprintf)( + /* translators: %d: number of results. */ + (0, import_i18n6._n)("%d result found.", "%d results found.", count), + count + ); + debouncedSpeak(resultsFoundMessage, "polite"); + }, [filterValue, debouncedSpeak]); + return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( + "div", + { + ref: blockTypesListRef, + className: "global-styles-ui-block-types-item-list", + role: "list", + children: filteredBlockTypes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_components12.__experimentalText, { align: "center", as: "p", children: (0, import_i18n6.__)("No blocks found.") }) : filteredBlockTypes.map((block) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( + BlockMenuItem, + { + block + }, + "menu-itemblock-" + block.name + )) + } + ); +} +var MemoizedBlockList = (0, import_element8.memo)(BlockList); + +// packages/global-styles-ui/build-module/screen-block.mjs +var import_blocks4 = __toESM(require_blocks(), 1); +var import_block_editor4 = __toESM(require_block_editor(), 1); +var import_element10 = __toESM(require_element(), 1); +var import_data5 = __toESM(require_data(), 1); +var import_core_data3 = __toESM(require_core_data(), 1); +var import_components15 = __toESM(require_components(), 1); +var import_i18n7 = __toESM(require_i18n(), 1); + +// packages/global-styles-ui/build-module/block-preview-panel.mjs +var import_block_editor3 = __toESM(require_block_editor(), 1); +var import_blocks3 = __toESM(require_blocks(), 1); +var import_components13 = __toESM(require_components(), 1); +var import_element9 = __toESM(require_element(), 1); +var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/subtitle.mjs +var import_components14 = __toESM(require_components(), 1); +var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); +function Subtitle({ children, level = 2 }) { + return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_components14.__experimentalHeading, { className: "global-styles-ui-subtitle", level, children }); +} + +// packages/global-styles-ui/build-module/screen-block.mjs +var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); +var { + useHasDimensionsPanel: useHasDimensionsPanel3, + useHasTypographyPanel: useHasTypographyPanel3, + useHasBorderPanel: useHasBorderPanel2, + useSettingsForBlockElement: useSettingsForBlockElement3, + useHasColorPanel: useHasColorPanel3, + useHasFiltersPanel, + useHasImageSettingsPanel, + useHasBackgroundPanel: useHasBackgroundPanel2, + BackgroundPanel: StylesBackgroundPanel, + BorderPanel: StylesBorderPanel, + ColorPanel: StylesColorPanel, + TypographyPanel: StylesTypographyPanel, + DimensionsPanel: StylesDimensionsPanel, + FiltersPanel: StylesFiltersPanel, + ImageSettingsPanel, + AdvancedPanel: StylesAdvancedPanel +} = unlock(import_block_editor4.privateApis); + +// packages/global-styles-ui/build-module/screen-typography.mjs +var import_i18n21 = __toESM(require_i18n(), 1); +var import_components35 = __toESM(require_components(), 1); +var import_element21 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/screen-body.mjs +var import_components16 = __toESM(require_components(), 1); +var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/typography-elements.mjs +var import_i18n8 = __toESM(require_i18n(), 1); +var import_components17 = __toESM(require_components(), 1); +var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/variations/variations-typography.mjs +var import_components20 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/preview-typography.mjs +var import_components18 = __toESM(require_components(), 1); +var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); +var StylesPreviewTypography = ({ + variation, + isFocused, + withHoverView +}) => { + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + preview_wrapper_default, + { + label: variation.title, + isFocused, + withHoverView, + children: ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components18.__experimentalHStack, + { + spacing: 10 * ratio, + justify: "center", + style: { + height: "100%", + overflow: "hidden" + }, + children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + PreviewTypography, + { + variation, + fontSize: 85 * ratio + } + ) + }, + key + ) + } + ); +}; +var preview_typography_default = StylesPreviewTypography; + +// packages/global-styles-ui/build-module/variations/variation.mjs +var import_components19 = __toESM(require_components(), 1); +var import_element11 = __toESM(require_element(), 1); +var import_keycodes = __toESM(require_keycodes(), 1); +var import_i18n9 = __toESM(require_i18n(), 1); +var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); +function Variation({ + variation, + children, + isPill = false, + properties, + showTooltip = false +}) { + const [isFocused, setIsFocused] = (0, import_element11.useState)(false); + const { + base, + user, + onChange: setUserConfig + } = (0, import_element11.useContext)(GlobalStylesContext); + const context = (0, import_element11.useMemo)(() => { + let merged = mergeGlobalStyles(base, variation); + if (properties) { + merged = filterObjectByProperties(merged, properties); + } + return { + user: variation, + base, + merged, + onChange: () => { + } + }; + }, [variation, base, properties]); + const selectVariation = () => setUserConfig(variation); + const selectOnEnter = (event) => { + if (event.keyCode === import_keycodes.ENTER) { + event.preventDefault(); + selectVariation(); + } + }; + const isActive = (0, import_element11.useMemo)( + () => areGlobalStylesEqual(user, variation), + [user, variation] + ); + let label = variation?.title; + if (variation?.description) { + label = (0, import_i18n9.sprintf)( + /* translators: 1: variation title. 2: variation description. */ + (0, import_i18n9._x)("%1$s (%2$s)", "variation label"), + variation?.title, + variation?.description + ); + } + const content = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + "div", + { + className: clsx_default("global-styles-ui-variations_item", { + "is-active": isActive + }), + role: "button", + onClick: selectVariation, + onKeyDown: selectOnEnter, + tabIndex: 0, + "aria-label": label, + "aria-current": isActive, + onFocus: () => setIsFocused(true), + onBlur: () => setIsFocused(false), + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + "div", + { + className: clsx_default("global-styles-ui-variations_item-preview", { + "is-pill": isPill + }), + children: children(isFocused) + } + ) + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(GlobalStylesContext.Provider, { value: context, children: showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components19.Tooltip, { text: variation?.title, children: content }) : content }); +} + +// packages/global-styles-ui/build-module/variations/variations-typography.mjs +var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); +var propertiesToFilter = ["typography"]; +function TypographyVariations({ + title, + gap = 2 +}) { + const typographyVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter); + if (typographyVariations?.length <= 1) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_components20.__experimentalVStack, { spacing: 3, children: [ + title && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Subtitle, { level: 3, children: title }), + /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( + import_components20.__experimentalGrid, + { + columns: 3, + gap, + className: "global-styles-ui-style-variations-container", + children: typographyVariations.map( + (variation, index) => { + return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( + Variation, + { + variation, + properties: propertiesToFilter, + showTooltip: true, + children: () => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( + preview_typography_default, + { + variation + } + ) + }, + index + ); + } + ) + } + ) + ] }); +} + +// packages/global-styles-ui/build-module/font-families.mjs +var import_i18n19 = __toESM(require_i18n(), 1); +var import_components33 = __toESM(require_components(), 1); +var import_element20 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/font-library/context.mjs +var import_element12 = __toESM(require_element(), 1); +var import_data6 = __toESM(require_data(), 1); +var import_core_data5 = __toESM(require_core_data(), 1); +var import_i18n11 = __toESM(require_i18n(), 1); + +// packages/global-styles-ui/build-module/font-library/api.mjs +var import_api_fetch = __toESM(require_api_fetch(), 1); +var import_core_data4 = __toESM(require_core_data(), 1); +var FONT_FAMILIES_URL = "/wp/v2/font-families"; +function invalidateFontFamilyCache(registry) { + const { receiveEntityRecords } = registry.dispatch(import_core_data4.store); + receiveEntityRecords( + "postType", + "wp_font_family", + [], + void 0, + true + // invalidateCache + ); +} +async function fetchInstallFontFamily(data, registry) { + const config = { + path: FONT_FAMILIES_URL, + method: "POST", + body: data + }; + const response = await (0, import_api_fetch.default)(config); + invalidateFontFamilyCache(registry); + return { + id: response.id, + ...response.font_family_settings, + fontFace: [] + }; +} +async function fetchInstallFontFace(fontFamilyId, data, registry) { + const config = { + path: `${FONT_FAMILIES_URL}/${fontFamilyId}/font-faces`, + method: "POST", + body: data + }; + const response = await (0, import_api_fetch.default)(config); + invalidateFontFamilyCache(registry); + return { + id: response.id, + ...response.font_face_settings + }; +} + +// packages/global-styles-ui/build-module/font-library/utils/index.mjs +var import_components21 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/font-library/utils/constants.mjs +var import_i18n10 = __toESM(require_i18n(), 1); +var ALLOWED_FILE_EXTENSIONS = ["otf", "ttf", "woff", "woff2"]; +var FONT_WEIGHTS = { + 100: (0, import_i18n10._x)("Thin", "font weight"), + 200: (0, import_i18n10._x)("Extra-light", "font weight"), + 300: (0, import_i18n10._x)("Light", "font weight"), + 400: (0, import_i18n10._x)("Normal", "font weight"), + 500: (0, import_i18n10._x)("Medium", "font weight"), + 600: (0, import_i18n10._x)("Semi-bold", "font weight"), + 700: (0, import_i18n10._x)("Bold", "font weight"), + 800: (0, import_i18n10._x)("Extra-bold", "font weight"), + 900: (0, import_i18n10._x)("Black", "font weight") +}; +var FONT_STYLES = { + normal: (0, import_i18n10._x)("Normal", "font style"), + italic: (0, import_i18n10._x)("Italic", "font style") +}; + +// packages/global-styles-ui/build-module/font-library/utils/index.mjs +var { File } = window; +var { kebabCase } = unlock(import_components21.privateApis); +function setUIValuesNeeded(font2, extraValues = {}) { + if (!font2.name && (font2.fontFamily || font2.slug)) { + font2.name = font2.fontFamily || font2.slug; + } + return { + ...font2, + ...extraValues + }; +} +function isUrlEncoded(url) { + if (typeof url !== "string") { + return false; + } + return url !== decodeURIComponent(url); +} +function getFontFaceVariantName(face) { + const weightName = FONT_WEIGHTS[face.fontWeight ?? ""] || face.fontWeight; + const styleName = face.fontStyle === "normal" ? "" : FONT_STYLES[face.fontStyle ?? ""] || face.fontStyle; + return `${weightName} ${styleName}`; +} +function mergeFontFaces(existing = [], incoming = []) { + const map = /* @__PURE__ */ new Map(); + for (const face of existing) { + map.set(`${face.fontWeight}${face.fontStyle}`, face); + } + for (const face of incoming) { + map.set(`${face.fontWeight}${face.fontStyle}`, face); + } + return Array.from(map.values()); +} +function mergeFontFamilies(existing = [], incoming = []) { + const map = /* @__PURE__ */ new Map(); + for (const font2 of existing) { + map.set(font2.slug, { ...font2 }); + } + for (const font2 of incoming) { + if (map.has(font2.slug)) { + const { fontFace: incomingFontFaces, ...restIncoming } = font2; + const existingFont = map.get(font2.slug); + const mergedFontFaces = mergeFontFaces( + existingFont.fontFace, + incomingFontFaces + ); + map.set(font2.slug, { + ...restIncoming, + fontFace: mergedFontFaces + }); + } else { + map.set(font2.slug, { ...font2 }); + } + } + return Array.from(map.values()); +} +async function loadFontFaceInBrowser(fontFace, source, addTo = "all") { + let dataSource; + if (typeof source === "string") { + dataSource = `url(${source})`; + } else if (source instanceof File) { + dataSource = await source.arrayBuffer(); + } else { + return; + } + const newFont = new window.FontFace( + formatFontFaceName(fontFace.fontFamily), + dataSource, + { + style: fontFace.fontStyle, + weight: String(fontFace.fontWeight) + } + ); + const loadedFace = await newFont.load(); + if (addTo === "document" || addTo === "all") { + document.fonts.add(loadedFace); + } + if (addTo === "iframe" || addTo === "all") { + const iframe = document.querySelector( + 'iframe[name="editor-canvas"]' + ); + if (iframe?.contentDocument) { + iframe.contentDocument.fonts.add(loadedFace); + } + } +} +function unloadFontFaceInBrowser(fontFace, removeFrom = "all") { + const unloadFontFace = (fonts) => { + fonts.forEach((f2) => { + if (f2.family === formatFontFaceName(fontFace?.fontFamily) && f2.weight === fontFace?.fontWeight && f2.style === fontFace?.fontStyle) { + fonts.delete(f2); + } + }); + }; + if (removeFrom === "document" || removeFrom === "all") { + unloadFontFace(document.fonts); + } + if (removeFrom === "iframe" || removeFrom === "all") { + const iframe = document.querySelector( + 'iframe[name="editor-canvas"]' + ); + if (iframe?.contentDocument) { + unloadFontFace(iframe.contentDocument.fonts); + } + } +} +function getDisplaySrcFromFontFace(input) { + if (!input) { + return; + } + let src; + if (Array.isArray(input)) { + src = input[0]; + } else { + src = input; + } + if (src.startsWith("file:.")) { + return; + } + if (!isUrlEncoded(src)) { + src = encodeURI(src); + } + return src; +} +function makeFontFamilyFormData(fontFamily) { + const formData = new FormData(); + const { fontFace, category, ...familyWithValidParameters } = fontFamily; + const fontFamilySettings = { + ...familyWithValidParameters, + slug: kebabCase(fontFamily.slug) + }; + formData.append( + "font_family_settings", + JSON.stringify(fontFamilySettings) + ); + return formData; +} +function makeFontFacesFormData(font2) { + const fontFacesFormData = (font2?.fontFace ?? []).map( + (item, faceIndex) => { + const face = { ...item }; + const formData = new FormData(); + if (face.file) { + const files = Array.isArray(face.file) ? face.file : [face.file]; + const src = []; + files.forEach((file, key) => { + const fileId = `file-${faceIndex}-${key}`; + formData.append(fileId, file, file.name); + src.push(fileId); + }); + face.src = src.length === 1 ? src[0] : src; + delete face.file; + formData.append("font_face_settings", JSON.stringify(face)); + } else { + formData.append("font_face_settings", JSON.stringify(face)); + } + return formData; + } + ); + return fontFacesFormData; +} +async function batchInstallFontFaces(fontFamilyId, fontFacesData, registry) { + const responses = []; + for (const faceData of fontFacesData) { + try { + const response = await fetchInstallFontFace( + fontFamilyId, + faceData, + registry + ); + responses.push({ status: "fulfilled", value: response }); + } catch (error) { + responses.push({ status: "rejected", reason: error }); + } + } + const results = { + errors: [], + successes: [] + }; + responses.forEach((result, index) => { + if (result.status === "fulfilled" && result.value) { + const response = result.value; + results.successes.push(response); + } else if (result.reason) { + results.errors.push({ + data: fontFacesData[index], + message: result.reason.message + }); + } + }); + return results; +} +async function downloadFontFaceAssets(src) { + src = Array.isArray(src) ? src : [src]; + const files = await Promise.all( + src.map(async (url) => { + return fetch(new Request(url)).then((response) => { + if (!response.ok) { + throw new Error( + `Error downloading font face asset from ${url}. Server responded with status: ${response.status}` + ); + } + return response.blob(); + }).then((blob) => { + const filename = url.split("/").pop(); + const file = new File([blob], filename, { + type: blob.type + }); + return file; + }); + }) + ); + return files.length === 1 ? files[0] : files; +} +function checkFontFaceInstalled(fontFace, collection) { + return -1 !== collection.findIndex((collectionFontFace) => { + return collectionFontFace.fontWeight === fontFace.fontWeight && collectionFontFace.fontStyle === fontFace.fontStyle; + }); +} + +// packages/global-styles-ui/build-module/font-library/utils/set-immutably.mjs +function setImmutably2(object, path, value) { + path = Array.isArray(path) ? [...path] : [path]; + object = Array.isArray(object) ? [...object] : { ...object }; + const leaf = path.pop(); + let prev = object; + for (const key of path) { + const lvl = prev[key]; + prev = prev[key] = Array.isArray(lvl) ? [...lvl] : { ...lvl }; + } + prev[leaf] = value; + return object; +} + +// packages/global-styles-ui/build-module/font-library/utils/toggleFont.mjs +function toggleFont(font2, face, initialfonts = []) { + const isFontActivated = (f2) => f2.slug === font2.slug; + const getActivatedFont = (fonts) => fonts.find(isFontActivated); + const toggleEntireFontFamily = (activatedFont2) => { + if (!activatedFont2) { + return [...initialfonts, font2]; + } + return initialfonts.filter( + (f2) => !isFontActivated(f2) + ); + }; + const toggleFontVariant = (activatedFont2) => { + const isFaceActivated = (f2) => f2.fontWeight === face.fontWeight && f2.fontStyle === face.fontStyle; + if (!activatedFont2) { + return [...initialfonts, { ...font2, fontFace: [face] }]; + } + let newFontFaces = activatedFont2.fontFace || []; + if (newFontFaces.find(isFaceActivated)) { + newFontFaces = newFontFaces.filter( + (f2) => !isFaceActivated(f2) + ); + } else { + newFontFaces = [...newFontFaces, face]; + } + if (newFontFaces.length === 0) { + return initialfonts.filter( + (f2) => !isFontActivated(f2) + ); + } + return initialfonts.map( + (f2) => isFontActivated(f2) ? { ...f2, fontFace: newFontFaces } : f2 + ); + }; + const activatedFont = getActivatedFont(initialfonts); + if (!face) { + return toggleEntireFontFamily(activatedFont); + } + return toggleFontVariant(activatedFont); +} + +// packages/global-styles-ui/build-module/font-library/context.mjs +var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); +var FontLibraryContext = (0, import_element12.createContext)( + {} +); +FontLibraryContext.displayName = "FontLibraryContext"; +function FontLibraryProvider({ children }) { + const registry = (0, import_data6.useRegistry)(); + const { saveEntityRecord, deleteEntityRecord } = (0, import_data6.useDispatch)(import_core_data5.store); + const { globalStylesId } = (0, import_data6.useSelect)((select) => { + const { __experimentalGetCurrentGlobalStylesId } = select(import_core_data5.store); + return { globalStylesId: __experimentalGetCurrentGlobalStylesId() }; + }, []); + const globalStyles = (0, import_core_data5.useEntityRecord)( + "root", + "globalStyles", + globalStylesId + ); + const [isInstalling, setIsInstalling] = (0, import_element12.useState)(false); + const { records: libraryPosts = [], isResolving: isResolvingLibrary } = (0, import_core_data5.useEntityRecords)( + "postType", + "wp_font_family", + { + _embed: true + } + ); + const libraryFonts = (libraryPosts || []).map((fontFamilyPost) => { + return { + id: fontFamilyPost.id, + ...fontFamilyPost.font_family_settings || {}, + fontFace: fontFamilyPost?._embedded?.font_faces?.map( + (face) => face.font_face_settings + ) || [] + }; + }) || []; + const [fontFamilies, setFontFamilies] = useSetting("typography.fontFamilies"); + const saveFontFamilies = async (fonts) => { + if (!globalStyles.record) { + return; + } + const updatedGlobalStyles = globalStyles.record; + const finalGlobalStyles = setImmutably2( + updatedGlobalStyles ?? {}, + ["settings", "typography", "fontFamilies"], + fonts + ); + await saveEntityRecord("root", "globalStyles", finalGlobalStyles); + }; + const [modalTabOpen, setModalTabOpen] = (0, import_element12.useState)(""); + const [libraryFontSelected, setLibraryFontSelected] = (0, import_element12.useState)(void 0); + const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; + const customFonts = fontFamilies?.custom ? fontFamilies.custom.map((f2) => setUIValuesNeeded(f2, { source: "custom" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; + const baseCustomFonts = libraryFonts ? libraryFonts.map((f2) => setUIValuesNeeded(f2, { source: "custom" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; + (0, import_element12.useEffect)(() => { + if (!modalTabOpen) { + setLibraryFontSelected(void 0); + } + }, [modalTabOpen]); + const handleSetLibraryFontSelected = (font2) => { + if (!font2) { + setLibraryFontSelected(void 0); + return; + } + const fonts = font2.source === "theme" ? themeFonts : baseCustomFonts; + const fontSelected = fonts.find((f2) => f2.slug === font2.slug); + setLibraryFontSelected({ + ...fontSelected || font2, + source: font2.source + }); + }; + const [loadedFontUrls] = (0, import_element12.useState)(/* @__PURE__ */ new Set()); + const getAvailableFontsOutline = (availableFontFamilies) => { + const outline = availableFontFamilies.reduce( + (acc, font2) => { + const availableFontFaces = font2?.fontFace && font2.fontFace?.length > 0 ? font2?.fontFace.map( + (face) => `${face.fontStyle ?? ""}${face.fontWeight ?? ""}` + ) : ["normal400"]; + acc[font2.slug] = availableFontFaces; + return acc; + }, + {} + ); + return outline; + }; + const getActivatedFontsOutline = (source) => { + switch (source) { + case "theme": + return getAvailableFontsOutline(themeFonts); + case "custom": + default: + return getAvailableFontsOutline(customFonts); + } + }; + const isFontActivated = (slug, style, weight, source) => { + if (!style && !weight) { + return !!getActivatedFontsOutline(source)[slug]; + } + return !!getActivatedFontsOutline(source)[slug]?.includes( + (style ?? "") + (weight ?? "") + ); + }; + const getFontFacesActivated = (slug, source) => { + return getActivatedFontsOutline(source)[slug] || []; + }; + async function installFonts(fontFamiliesToInstall) { + setIsInstalling(true); + try { + const fontFamiliesToActivate = []; + let installationErrors = []; + for (const fontFamilyToInstall of fontFamiliesToInstall) { + let isANewFontFamily = false; + const fontFamilyRecords = await (0, import_data6.resolveSelect)( + import_core_data5.store + ).getEntityRecords( + "postType", + "wp_font_family", + { + slug: fontFamilyToInstall.slug, + per_page: 1, + _embed: true + } + ); + const fontFamilyPost = fontFamilyRecords && fontFamilyRecords.length > 0 ? fontFamilyRecords[0] : null; + let installedFontFamily = fontFamilyPost ? { + id: fontFamilyPost.id, + ...fontFamilyPost.font_family_settings, + fontFace: (fontFamilyPost?._embedded?.font_faces ?? []).map( + (face) => face.font_face_settings + ) || [] + } : null; + if (!installedFontFamily) { + isANewFontFamily = true; + installedFontFamily = await fetchInstallFontFamily( + makeFontFamilyFormData(fontFamilyToInstall), + registry + ); + } + const alreadyInstalledFontFaces = installedFontFamily.fontFace && fontFamilyToInstall.fontFace ? installedFontFamily.fontFace.filter( + (fontFaceToInstall) => fontFaceToInstall && fontFamilyToInstall.fontFace && checkFontFaceInstalled( + fontFaceToInstall, + fontFamilyToInstall.fontFace + ) + ) : []; + if (installedFontFamily.fontFace && fontFamilyToInstall.fontFace) { + fontFamilyToInstall.fontFace = fontFamilyToInstall.fontFace.filter( + (fontFaceToInstall) => !checkFontFaceInstalled( + fontFaceToInstall, + installedFontFamily.fontFace + ) + ); + } + let successfullyInstalledFontFaces = []; + let unsuccessfullyInstalledFontFaces = []; + if (fontFamilyToInstall?.fontFace?.length ?? 0 > 0) { + const response = await batchInstallFontFaces( + // @ts-expect-error - Type mismatch: WpFontFamily.id can be number | string, but batchInstallFontFaces expects only string. + installedFontFamily.id, + makeFontFacesFormData( + fontFamilyToInstall + ), + registry + ); + successfullyInstalledFontFaces = response?.successes; + unsuccessfullyInstalledFontFaces = response?.errors; + } + if (successfullyInstalledFontFaces?.length > 0 || alreadyInstalledFontFaces?.length > 0) { + installedFontFamily.fontFace = [ + ...successfullyInstalledFontFaces + ]; + fontFamiliesToActivate.push(installedFontFamily); + } + if (installedFontFamily && !fontFamilyToInstall?.fontFace?.length) { + fontFamiliesToActivate.push(installedFontFamily); + } + if (isANewFontFamily && (fontFamilyToInstall?.fontFace?.length ?? 0) > 0 && successfullyInstalledFontFaces?.length === 0) { + await deleteEntityRecord( + "postType", + "wp_font_family", + installedFontFamily.id, + { force: true } + ); + } + installationErrors = installationErrors.concat( + unsuccessfullyInstalledFontFaces + ); + } + const installationErrorMessages = installationErrors.reduce( + (unique, item) => unique.includes(item.message) ? unique : [...unique, item.message], + [] + ); + if (fontFamiliesToActivate.length > 0) { + const activeFonts = activateCustomFontFamilies( + // @ts-expect-error - Type mismatch: items may have id as number | string, but FontFamily.id should be string | undefined. + fontFamiliesToActivate + ); + await saveFontFamilies(activeFonts); + } + if (installationErrorMessages.length > 0) { + const installError = new Error((0, import_i18n11.__)("There was an error installing fonts.")); + installError.installationErrors = installationErrorMessages; + throw installError; + } + } finally { + setIsInstalling(false); + } + } + async function uninstallFontFamily(fontFamilyToUninstall) { + if (!fontFamilyToUninstall?.id) { + throw new Error((0, import_i18n11.__)("Font family to uninstall is not defined.")); + } + try { + await deleteEntityRecord( + "postType", + "wp_font_family", + fontFamilyToUninstall.id, + { force: true } + ); + const activeFonts = deactivateFontFamily(fontFamilyToUninstall); + await saveFontFamilies(activeFonts); + return { deleted: true }; + } catch (error) { + console.error( + `There was an error uninstalling the font family:`, + error + ); + throw error; + } + } + const deactivateFontFamily = (font2) => { + const initialCustomFonts = fontFamilies?.[font2.source ?? ""] ?? []; + const newCustomFonts = initialCustomFonts.filter( + (f2) => f2.slug !== font2.slug + ); + const activeFonts = { + ...fontFamilies, + [font2.source ?? ""]: newCustomFonts + }; + setFontFamilies(activeFonts); + if (font2.fontFace) { + font2.fontFace.forEach((face) => { + unloadFontFaceInBrowser(face, "all"); + }); + } + return activeFonts; + }; + const activateCustomFontFamilies = (fontsToAdd) => { + const fontsToActivate = cleanFontsForSave(fontsToAdd); + const activeFonts = { + ...fontFamilies, + // Merge the existing custom fonts with the new fonts. + custom: mergeFontFamilies(fontFamilies?.custom, fontsToActivate) + }; + setFontFamilies(activeFonts); + loadFontsInBrowser(fontsToActivate); + return activeFonts; + }; + const cleanFontsForSave = (fonts) => { + return fonts.map(({ id: _familyDbId, fontFace, ...font2 }) => ({ + ...font2, + ...fontFace && fontFace.length > 0 ? { + fontFace: fontFace.map( + ({ id: _faceDbId, ...face }) => face + ) + } : {} + })); + }; + const loadFontsInBrowser = (fonts) => { + fonts.forEach((font2) => { + if (font2.fontFace) { + font2.fontFace.forEach((face) => { + const displaySrc = getDisplaySrcFromFontFace( + face?.src ?? "" + ); + if (displaySrc) { + loadFontFaceInBrowser(face, displaySrc, "all"); + } + }); + } + }); + }; + const toggleActivateFont = (font2, face) => { + const initialFonts = fontFamilies?.[font2.source ?? ""] ?? []; + const newFonts = toggleFont(font2, face, initialFonts); + setFontFamilies({ + ...fontFamilies, + [font2.source ?? ""]: newFonts + }); + const isFaceActivated = isFontActivated( + font2.slug, + face?.fontStyle ?? "", + face?.fontWeight ?? "", + font2.source ?? "custom" + ); + if (face && isFaceActivated) { + unloadFontFaceInBrowser(face, "all"); + } else { + const displaySrc = getDisplaySrcFromFontFace(face?.src ?? ""); + if (face && displaySrc) { + loadFontFaceInBrowser(face, displaySrc, "all"); + } + } + }; + const loadFontFaceAsset = async (fontFace) => { + if (!fontFace.src) { + return; + } + const src = getDisplaySrcFromFontFace(fontFace.src); + if (!src || loadedFontUrls.has(src)) { + return; + } + loadFontFaceInBrowser(fontFace, src, "document"); + loadedFontUrls.add(src); + }; + return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + FontLibraryContext.Provider, + { + value: { + libraryFontSelected, + handleSetLibraryFontSelected, + fontFamilies: fontFamilies ?? {}, + baseCustomFonts, + isFontActivated, + getFontFacesActivated, + loadFontFaceAsset, + installFonts, + uninstallFontFamily, + toggleActivateFont, + getAvailableFontsOutline, + modalTabOpen, + setModalTabOpen, + saveFontFamilies, + isResolvingLibrary, + isInstalling + }, + children + } + ); +} +var context_default = FontLibraryProvider; + +// packages/global-styles-ui/build-module/font-library/modal.mjs +var import_i18n17 = __toESM(require_i18n(), 1); +var import_components31 = __toESM(require_components(), 1); +var import_core_data8 = __toESM(require_core_data(), 1); +var import_data8 = __toESM(require_data(), 1); + +// packages/global-styles-ui/build-module/font-library/installed-fonts.mjs +var import_components25 = __toESM(require_components(), 1); +var import_core_data6 = __toESM(require_core_data(), 1); +var import_data7 = __toESM(require_data(), 1); +var import_element15 = __toESM(require_element(), 1); +var import_i18n13 = __toESM(require_i18n(), 1); + +// packages/global-styles-ui/build-module/font-library/font-card.mjs +var import_i18n12 = __toESM(require_i18n(), 1); +var import_components23 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/font-library/font-demo.mjs +var import_components22 = __toESM(require_components(), 1); +var import_element13 = __toESM(require_element(), 1); +var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); +function getPreviewUrl(fontFace) { + if (fontFace.preview) { + return fontFace.preview; + } + if (fontFace.src) { + return Array.isArray(fontFace.src) ? fontFace.src[0] : fontFace.src; + } + return void 0; +} +function getDisplayFontFace(font2) { + if ("fontStyle" in font2 && font2.fontStyle || "fontWeight" in font2 && font2.fontWeight) { + return font2; + } + if ("fontFace" in font2 && font2.fontFace && font2.fontFace.length) { + return font2.fontFace.find( + (face) => face.fontStyle === "normal" && face.fontWeight === "400" + ) || font2.fontFace[0]; + } + return { + fontStyle: "normal", + fontWeight: "400", + fontFamily: font2.fontFamily + }; +} +function FontDemo({ font: font2, text }) { + const ref = (0, import_element13.useRef)(null); + const fontFace = getDisplayFontFace(font2); + const style = getFamilyPreviewStyle(font2); + text = text || ("name" in font2 ? font2.name : ""); + const customPreviewUrl = font2.preview; + const [isIntersecting, setIsIntersecting] = (0, import_element13.useState)(false); + const [isAssetLoaded, setIsAssetLoaded] = (0, import_element13.useState)(false); + const { loadFontFaceAsset } = (0, import_element13.useContext)(FontLibraryContext); + const previewUrl = customPreviewUrl ?? getPreviewUrl(fontFace); + const isPreviewImage = previewUrl && previewUrl.match(/\.(png|jpg|jpeg|gif|svg)$/i); + const faceStyles = getFacePreviewStyle(fontFace); + const textDemoStyle = { + fontSize: "18px", + lineHeight: 1, + opacity: isAssetLoaded ? "1" : "0", + ...style, + ...faceStyles + }; + (0, import_element13.useEffect)(() => { + const observer = new window.IntersectionObserver(([entry]) => { + setIsIntersecting(entry.isIntersecting); + }, {}); + if (ref.current) { + observer.observe(ref.current); + } + return () => observer.disconnect(); + }, [ref]); + (0, import_element13.useEffect)(() => { + const loadAsset = async () => { + if (isIntersecting) { + if (!isPreviewImage && fontFace.src) { + await loadFontFaceAsset(fontFace); + } + setIsAssetLoaded(true); + } + }; + loadAsset(); + }, [fontFace, isIntersecting, loadFontFaceAsset, isPreviewImage]); + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { ref, children: isPreviewImage ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + "img", + { + src: previewUrl, + loading: "lazy", + alt: text, + className: "font-library__font-variant_demo-image" + } + ) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components22.__experimentalText, + { + style: textDemoStyle, + className: "font-library__font-variant_demo-text", + children: text + } + ) }); +} +var font_demo_default = FontDemo; + +// packages/global-styles-ui/build-module/font-library/font-card.mjs +var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); +function FontCard({ + font: font2, + onClick, + variantsText, + navigatorPath +}) { + const variantsCount = font2.fontFace?.length || 1; + const style = { + cursor: !!onClick ? "pointer" : "default" + }; + const navigator = (0, import_components23.useNavigator)(); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components23.Button, + { + __next40pxDefaultSize: true, + onClick: () => { + onClick(); + if (navigatorPath) { + navigator.goTo(navigatorPath); + } + }, + style, + className: "font-library__font-card", + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_components23.Flex, { justify: "space-between", wrap: false, children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(font_demo_default, { font: font2 }), + /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_components23.Flex, { justify: "flex-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components23.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components23.__experimentalText, { className: "font-library__font-card__count", children: variantsText || (0, import_i18n12.sprintf)( + /* translators: %d: Number of font variants. */ + (0, import_i18n12._n)( + "%d variant", + "%d variants", + variantsCount + ), + variantsCount + ) }) }), + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components23.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(icon_default, { icon: (0, import_i18n12.isRTL)() ? chevron_left_default : chevron_right_default }) }) + ] }) + ] }) + } + ); +} +var font_card_default = FontCard; + +// packages/global-styles-ui/build-module/font-library/library-font-variant.mjs +var import_element14 = __toESM(require_element(), 1); +var import_components24 = __toESM(require_components(), 1); +var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); +function LibraryFontVariant({ + face, + font: font2 +}) { + const { isFontActivated, toggleActivateFont } = (0, import_element14.useContext)(FontLibraryContext); + const isInstalled = (font2?.fontFace?.length ?? 0) > 0 ? isFontActivated( + font2.slug, + face.fontStyle, + face.fontWeight, + font2.source + ) : isFontActivated(font2.slug, void 0, void 0, font2.source); + const handleToggleActivation = () => { + if ((font2?.fontFace?.length ?? 0) > 0) { + toggleActivateFont(font2, face); + return; + } + toggleActivateFont(font2); + }; + const displayName = font2.name + " " + getFontFaceVariantName(face); + const checkboxId = (0, import_element14.useId)(); + return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "font-library__font-card", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_components24.Flex, { justify: "flex-start", align: "center", gap: "1rem", children: [ + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + import_components24.CheckboxControl, + { + checked: isInstalled, + onChange: handleToggleActivation, + id: checkboxId + } + ), + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("label", { htmlFor: checkboxId, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + font_demo_default, + { + font: face, + text: displayName, + onClick: handleToggleActivation + } + ) }) + ] }) }); +} +var library_font_variant_default = LibraryFontVariant; + +// packages/global-styles-ui/build-module/font-library/utils/sort-font-faces.mjs +function getNumericFontWeight(value) { + switch (value) { + case "normal": + return 400; + case "bold": + return 700; + case "bolder": + return 500; + case "lighter": + return 300; + default: + return parseInt(value, 10); + } +} +function sortFontFaces(faces) { + return faces.sort((a2, b2) => { + if (a2.fontStyle === "normal" && b2.fontStyle !== "normal") { + return -1; + } + if (b2.fontStyle === "normal" && a2.fontStyle !== "normal") { + return 1; + } + if (a2.fontStyle === b2.fontStyle) { + return getNumericFontWeight(a2.fontWeight?.toString() ?? "normal") - getNumericFontWeight(b2.fontWeight?.toString() ?? "normal"); + } + if (!a2.fontStyle || !b2.fontStyle) { + return !a2.fontStyle ? 1 : -1; + } + return a2.fontStyle.localeCompare(b2.fontStyle); + }); +} + +// packages/global-styles-ui/build-module/font-library/installed-fonts.mjs +var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); +function InstalledFonts() { + const { + baseCustomFonts, + libraryFontSelected, + handleSetLibraryFontSelected, + uninstallFontFamily, + isResolvingLibrary, + isInstalling, + saveFontFamilies, + getFontFacesActivated + } = (0, import_element15.useContext)(FontLibraryContext); + const [fontFamilies, setFontFamilies] = useSetting("typography.fontFamilies"); + const [isConfirmDeleteOpen, setIsConfirmDeleteOpen] = (0, import_element15.useState)(false); + const [notice, setNotice] = (0, import_element15.useState)(null); + const [baseFontFamilies] = useSetting("typography.fontFamilies", void 0, "base"); + const globalStylesId = (0, import_data7.useSelect)((select) => { + const { __experimentalGetCurrentGlobalStylesId } = select(import_core_data6.store); + return __experimentalGetCurrentGlobalStylesId(); + }, []); + const globalStyles = (0, import_core_data6.useEntityRecord)( + "root", + "globalStyles", + globalStylesId + ); + const fontFamiliesHasChanges = !!globalStyles?.edits?.settings?.typography?.fontFamilies; + const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; + const themeFontsSlugs = new Set(themeFonts.map((f2) => f2.slug)); + const baseThemeFonts = baseFontFamilies?.theme ? themeFonts.concat( + baseFontFamilies.theme.filter((f2) => !themeFontsSlugs.has(f2.slug)).map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) + ) : []; + const customFontFamilyId = libraryFontSelected?.source === "custom" && libraryFontSelected?.id; + const canUserDelete = (0, import_data7.useSelect)( + (select) => { + const { canUser } = select(import_core_data6.store); + return customFontFamilyId && canUser("delete", { + kind: "postType", + name: "wp_font_family", + id: customFontFamilyId + }); + }, + [customFontFamilyId] + ); + const shouldDisplayDeleteButton = !!libraryFontSelected && libraryFontSelected?.source !== "theme" && canUserDelete; + const handleUninstallClick = () => { + setIsConfirmDeleteOpen(true); + }; + const handleUpdate = async () => { + setNotice(null); + try { + await saveFontFamilies(fontFamilies); + setNotice({ + type: "success", + message: (0, import_i18n13.__)("Font family updated successfully.") + }); + } catch (error) { + setNotice({ + type: "error", + message: (0, import_i18n13.sprintf)( + /* translators: %s: error message */ + (0, import_i18n13.__)("There was an error updating the font family. %s"), + error.message + ) + }); + } + }; + const getFontFacesToDisplay = (font2) => { + if (!font2) { + return []; + } + if (!font2.fontFace || !font2.fontFace.length) { + return [ + { + fontFamily: font2.fontFamily, + fontStyle: "normal", + fontWeight: "400" + } + ]; + } + return sortFontFaces(font2.fontFace); + }; + const getFontCardVariantsText = (font2) => { + const variantsInstalled = font2?.fontFace && (font2?.fontFace?.length ?? 0) > 0 ? font2.fontFace.length : 1; + const variantsActive = getFontFacesActivated( + font2.slug, + font2.source + ).length; + return (0, import_i18n13.sprintf)( + /* translators: 1: Active font variants, 2: Total font variants. */ + (0, import_i18n13.__)("%1$d/%2$d variants active"), + variantsActive, + variantsInstalled + ); + }; + (0, import_element15.useEffect)(() => { + handleSetLibraryFontSelected(libraryFontSelected); + }, []); + const activeFontsCount = libraryFontSelected ? getFontFacesActivated( + libraryFontSelected.slug, + libraryFontSelected.source + ).length : 0; + const selectedFontsCount = libraryFontSelected?.fontFace?.length ?? (libraryFontSelected?.fontFamily ? 1 : 0); + const isIndeterminate = activeFontsCount > 0 && activeFontsCount !== selectedFontsCount; + const isSelectAllChecked = activeFontsCount === selectedFontsCount; + const toggleSelectAll = () => { + if (!libraryFontSelected || !libraryFontSelected?.source) { + return; + } + const initialFonts = fontFamilies?.[libraryFontSelected.source]?.filter( + (f2) => f2.slug !== libraryFontSelected.slug + ) ?? []; + const newFonts = isSelectAllChecked ? initialFonts : [...initialFonts, libraryFontSelected]; + setFontFamilies({ + ...fontFamilies, + [libraryFontSelected.source]: newFonts + }); + if (libraryFontSelected.fontFace) { + libraryFontSelected.fontFace.forEach((face) => { + if (isSelectAllChecked) { + unloadFontFaceInBrowser(face, "all"); + } else { + const displaySrc = getDisplaySrcFromFontFace( + face?.src ?? "" + ); + if (displaySrc) { + loadFontFaceInBrowser(face, displaySrc, "all"); + } + } + }); + } + }; + const hasFonts = baseThemeFonts.length > 0 || baseCustomFonts.length > 0; + return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ + isResolvingLibrary && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "font-library__loading", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.ProgressBar, {}) }), + !isResolvingLibrary && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)( + import_components25.Navigator, + { + initialPath: libraryFontSelected ? "/fontFamily" : "/", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.Navigator.Screen, { path: "/", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { spacing: "8", children: [ + notice && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.Notice, + { + status: notice.type, + onRemove: () => setNotice(null), + children: notice.message + } + ), + !hasFonts && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalText, { as: "p", children: (0, import_i18n13.__)("No fonts installed.") }), + baseThemeFonts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h2", { + className: "font-library__fonts-title", + /* translators: Heading for a list of fonts provided by the theme. */ + children: (0, import_i18n13._x)("Theme", "font source") + }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "ul", + { + role: "list", + className: "font-library__fonts-list", + children: baseThemeFonts.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "li", + { + className: "font-library__fonts-list-item", + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + font_card_default, + { + font: font2, + navigatorPath: "/fontFamily", + variantsText: getFontCardVariantsText( + font2 + ), + onClick: () => { + setNotice(null); + handleSetLibraryFontSelected( + font2 + ); + } + } + ) + }, + font2.slug + )) + } + ) + ] }), + baseCustomFonts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h2", { + className: "font-library__fonts-title", + /* translators: Heading for a list of fonts installed by the user. */ + children: (0, import_i18n13._x)("Custom", "font source") + }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "ul", + { + role: "list", + className: "font-library__fonts-list", + children: baseCustomFonts.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "li", + { + className: "font-library__fonts-list-item", + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + font_card_default, + { + font: font2, + navigatorPath: "/fontFamily", + variantsText: getFontCardVariantsText( + font2 + ), + onClick: () => { + setNotice(null); + handleSetLibraryFontSelected( + font2 + ); + } + } + ) + }, + font2.slug + )) + } + ) + ] }) + ] }) }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.Navigator.Screen, { path: "/fontFamily", children: [ + libraryFontSelected && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + ConfirmDeleteDialog, + { + font: libraryFontSelected, + isOpen: isConfirmDeleteOpen, + setIsOpen: setIsConfirmDeleteOpen, + setNotice, + uninstallFontFamily, + handleSetLibraryFontSelected + } + ), + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.Flex, { justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.Navigator.BackButton, + { + icon: (0, import_i18n13.isRTL)() ? chevron_right_default : chevron_left_default, + size: "small", + onClick: () => { + handleSetLibraryFontSelected( + void 0 + ); + setNotice(null); + }, + label: (0, import_i18n13.__)("Back") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.__experimentalHeading, + { + level: 2, + size: 13, + className: "global-styles-ui-header", + children: libraryFontSelected?.name + } + ) + ] }), + notice && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 1 }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.Notice, + { + status: notice.type, + onRemove: () => setNotice(null), + children: notice.message + } + ), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 1 }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 4 }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalText, { children: (0, import_i18n13.__)( + "Choose font variants. Keep in mind that too many variants could make your site slower." + ) }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 4 }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { spacing: 0, children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.CheckboxControl, + { + className: "font-library__select-all", + label: (0, import_i18n13.__)("Select all"), + checked: isSelectAllChecked, + onChange: toggleSelectAll, + indeterminate: isIndeterminate + } + ), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 8 }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "ul", + { + role: "list", + className: "font-library__fonts-list", + children: libraryFontSelected && getFontFacesToDisplay( + libraryFontSelected + ).map((face, i2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "li", + { + className: "font-library__fonts-list-item", + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + library_font_variant_default, + { + font: libraryFontSelected, + face + }, + `face${i2}` + ) + }, + `face${i2}` + )) + } + ) + ] }) + ] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalHStack, { justify: "flex-end", className: "font-library__footer", children: [ + isInstalling && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.ProgressBar, {}), + shouldDisplayDeleteButton && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.Button, + { + __next40pxDefaultSize: true, + isDestructive: true, + variant: "tertiary", + onClick: handleUninstallClick, + children: (0, import_i18n13.__)("Delete") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.Button, + { + __next40pxDefaultSize: true, + variant: "primary", + onClick: handleUpdate, + disabled: !fontFamiliesHasChanges, + accessibleWhenDisabled: true, + children: (0, import_i18n13.__)("Update") + } + ) + ] }) + ] }) + ] }); +} +function ConfirmDeleteDialog({ + font: font2, + isOpen, + setIsOpen, + setNotice, + uninstallFontFamily, + handleSetLibraryFontSelected +}) { + const navigator = (0, import_components25.useNavigator)(); + const handleConfirmUninstall = async () => { + setNotice(null); + setIsOpen(false); + try { + await uninstallFontFamily(font2); + navigator.goBack(); + handleSetLibraryFontSelected(void 0); + setNotice({ + type: "success", + message: (0, import_i18n13.__)("Font family uninstalled successfully.") + }); + } catch (error) { + setNotice({ + type: "error", + message: (0, import_i18n13.__)("There was an error uninstalling the font family.") + error.message + }); + } + }; + const handleCancelUninstall = () => { + setIsOpen(false); + }; + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components25.__experimentalConfirmDialog, + { + isOpen, + cancelButtonText: (0, import_i18n13.__)("Cancel"), + confirmButtonText: (0, import_i18n13.__)("Delete"), + onCancel: handleCancelUninstall, + onConfirm: handleConfirmUninstall, + size: "medium", + children: font2 && (0, import_i18n13.sprintf)( + /* translators: %s: Name of the font. */ + (0, import_i18n13.__)( + 'Are you sure you want to delete "%s" font and all its variants and assets?' + ), + font2.name + ) + } + ); +} +var installed_fonts_default = InstalledFonts; + +// packages/global-styles-ui/build-module/font-library/font-collection.mjs +var import_element17 = __toESM(require_element(), 1); +var import_components28 = __toESM(require_components(), 1); +var import_compose3 = __toESM(require_compose(), 1); +var import_i18n15 = __toESM(require_i18n(), 1); +var import_core_data7 = __toESM(require_core_data(), 1); + +// packages/global-styles-ui/build-module/font-library/utils/filter-fonts.mjs +function filterFonts(fonts, filters) { + const { category, search } = filters; + let filteredFonts = fonts || []; + if (category && category !== "all") { + filteredFonts = filteredFonts.filter( + (font2) => font2.categories && font2.categories.indexOf(category) !== -1 + ); + } + if (search) { + filteredFonts = filteredFonts.filter( + (font2) => font2.font_family_settings && font2.font_family_settings.name.toLowerCase().includes(search.toLowerCase()) + ); + } + return filteredFonts; +} + +// packages/global-styles-ui/build-module/font-library/utils/fonts-outline.mjs +function getFontsOutline(fonts) { + return fonts.reduce( + (acc, font2) => ({ + ...acc, + [font2.slug]: (font2?.fontFace || []).reduce( + (faces, face) => ({ + ...faces, + [`${face.fontStyle}-${face.fontWeight}`]: true + }), + {} + ) + }), + {} + ); +} +function isFontFontFaceInOutline(slug, face, outline) { + if (!face) { + return !!outline[slug]; + } + return !!outline[slug]?.[`${face.fontStyle}-${face.fontWeight}`]; +} + +// packages/global-styles-ui/build-module/font-library/google-fonts-confirm-dialog.mjs +var import_i18n14 = __toESM(require_i18n(), 1); +var import_components26 = __toESM(require_components(), 1); +var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); +function GoogleFontsConfirmDialog() { + const handleConfirm = () => { + window.localStorage.setItem( + "wp-font-library-google-fonts-permission", + "true" + ); + window.dispatchEvent(new Event("storage")); + }; + return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "font-library__google-fonts-confirm", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_components26.CardBody, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalHeading, { level: 2, children: (0, import_i18n14.__)("Connect to Google Fonts") }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalSpacer, { margin: 6 }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalText, { as: "p", children: (0, import_i18n14.__)( + "To install fonts from Google you must give permission to connect directly to Google servers. The fonts you install will be downloaded from Google and stored on your site. Your site will then use these locally-hosted fonts." + ) }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalSpacer, { margin: 3 }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalText, { as: "p", children: (0, import_i18n14.__)( + "You can alternatively upload files directly on the Upload tab." + ) }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalSpacer, { margin: 6 }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + import_components26.Button, + { + __next40pxDefaultSize: true, + variant: "primary", + onClick: handleConfirm, + children: (0, import_i18n14.__)("Allow access to Google Fonts") + } + ) + ] }) }) }); +} +var google_fonts_confirm_dialog_default = GoogleFontsConfirmDialog; + +// packages/global-styles-ui/build-module/font-library/collection-font-variant.mjs +var import_element16 = __toESM(require_element(), 1); +var import_components27 = __toESM(require_components(), 1); +var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); +function CollectionFontVariant({ + face, + font: font2, + handleToggleVariant, + selected +}) { + const handleToggleActivation = () => { + if (font2?.fontFace) { + handleToggleVariant(font2, face); + return; + } + handleToggleVariant(font2); + }; + const displayName = font2.name + " " + getFontFaceVariantName(face); + const checkboxId = (0, import_element16.useId)(); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "font-library__font-card", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components27.Flex, { justify: "flex-start", align: "center", gap: "1rem", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components27.CheckboxControl, + { + checked: selected, + onChange: handleToggleActivation, + id: checkboxId + } + ), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("label", { htmlFor: checkboxId, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + font_demo_default, + { + font: face, + text: displayName, + onClick: handleToggleActivation + } + ) }) + ] }) }); +} +var collection_font_variant_default = CollectionFontVariant; + +// packages/global-styles-ui/build-module/font-library/font-collection.mjs +var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); +var DEFAULT_CATEGORY = { + slug: "all", + name: (0, import_i18n15._x)("All", "font categories") +}; +var LOCAL_STORAGE_ITEM = "wp-font-library-google-fonts-permission"; +var MIN_WINDOW_HEIGHT = 500; +function FontCollection({ slug }) { + const requiresPermission = slug === "google-fonts"; + const getGoogleFontsPermissionFromStorage = () => { + return window.localStorage.getItem(LOCAL_STORAGE_ITEM) === "true"; + }; + const [selectedFont, setSelectedFont] = (0, import_element17.useState)( + null + ); + const [notice, setNotice] = (0, import_element17.useState)(null); + const [fontsToInstall, setFontsToInstall] = (0, import_element17.useState)( + [] + ); + const [page, setPage] = (0, import_element17.useState)(1); + const [filters, setFilters] = (0, import_element17.useState)({}); + const [renderConfirmDialog, setRenderConfirmDialog] = (0, import_element17.useState)( + requiresPermission && !getGoogleFontsPermissionFromStorage() + ); + const { installFonts, isInstalling } = (0, import_element17.useContext)(FontLibraryContext); + const { record: selectedCollection, isResolving: isLoading } = (0, import_core_data7.useEntityRecord)("root", "fontCollection", slug); + (0, import_element17.useEffect)(() => { + const handleStorage = () => { + setRenderConfirmDialog( + requiresPermission && !getGoogleFontsPermissionFromStorage() + ); + }; + handleStorage(); + window.addEventListener("storage", handleStorage); + return () => window.removeEventListener("storage", handleStorage); + }, [slug, requiresPermission]); + const revokeAccess = () => { + window.localStorage.setItem(LOCAL_STORAGE_ITEM, "false"); + window.dispatchEvent(new Event("storage")); + }; + (0, import_element17.useEffect)(() => { + setSelectedFont(null); + }, [slug]); + (0, import_element17.useEffect)(() => { + setFontsToInstall([]); + }, [selectedFont]); + const collectionFonts = (0, import_element17.useMemo)( + () => selectedCollection?.font_families ?? [], + [selectedCollection] + ); + const collectionCategories = selectedCollection?.categories ?? []; + const categories = [DEFAULT_CATEGORY, ...collectionCategories]; + const fonts = (0, import_element17.useMemo)( + () => filterFonts(collectionFonts, filters), + [collectionFonts, filters] + ); + const windowHeight = Math.max(window.innerHeight, MIN_WINDOW_HEIGHT); + const pageSize = Math.floor((windowHeight - 417) / 61); + const totalPages = Math.ceil(fonts.length / pageSize); + const itemsStart = (page - 1) * pageSize; + const itemsLimit = page * pageSize; + const items = fonts.slice(itemsStart, itemsLimit); + const handleCategoryFilter = (category) => { + setFilters({ ...filters, category }); + setPage(1); + }; + const handleUpdateSearchInput = (value) => { + setFilters({ ...filters, search: value }); + setPage(1); + }; + const debouncedUpdateSearchInput = (0, import_compose3.debounce)(handleUpdateSearchInput, 300); + const handleToggleVariant = (font2, face) => { + const newFontsToInstall = toggleFont(font2, face, fontsToInstall); + setFontsToInstall(newFontsToInstall); + }; + const fontToInstallOutline = getFontsOutline(fontsToInstall); + const resetFontsToInstall = () => { + setFontsToInstall([]); + }; + const selectFontCount = fontsToInstall.length > 0 ? fontsToInstall[0]?.fontFace?.length ?? 0 : 0; + const isIndeterminate = selectFontCount > 0 && selectFontCount !== selectedFont?.fontFace?.length; + const isSelectAllChecked = selectFontCount === selectedFont?.fontFace?.length; + const toggleSelectAll = () => { + const newFonts = []; + if (!isSelectAllChecked && selectedFont) { + newFonts.push(selectedFont); + } + setFontsToInstall(newFonts); + }; + const handleInstall = async () => { + setNotice(null); + const fontFamily = fontsToInstall[0]; + try { + if (fontFamily?.fontFace) { + await Promise.all( + fontFamily.fontFace.map(async (fontFace) => { + if (fontFace.src) { + fontFace.file = await downloadFontFaceAssets( + fontFace.src + ); + } + }) + ); + } + } catch (error) { + setNotice({ + type: "error", + message: (0, import_i18n15.__)( + "Error installing the fonts, could not be downloaded." + ) + }); + return; + } + try { + await installFonts([fontFamily]); + setNotice({ + type: "success", + message: (0, import_i18n15.__)("Fonts were installed successfully.") + }); + } catch (error) { + setNotice({ + type: "error", + message: error.message + }); + } + resetFontsToInstall(); + }; + const getSortedFontFaces = (fontFamily) => { + if (!fontFamily) { + return []; + } + if (!fontFamily.fontFace || !fontFamily.fontFace.length) { + return [ + { + fontFamily: fontFamily.fontFamily, + fontStyle: "normal", + fontWeight: "400" + } + ]; + } + return sortFontFaces(fontFamily.fontFace); + }; + if (renderConfirmDialog) { + return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(google_fonts_confirm_dialog_default, {}); + } + const ActionsComponent = () => { + if (slug !== "google-fonts" || renderConfirmDialog || selectedFont) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.DropdownMenu, + { + icon: more_vertical_default, + label: (0, import_i18n15.__)("Actions"), + popoverProps: { + position: "bottom left" + }, + controls: [ + { + title: (0, import_i18n15.__)("Revoke access to Google Fonts"), + onClick: revokeAccess + } + ] + } + ); + }; + return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ + isLoading && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "font-library__loading", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.ProgressBar, {}) }), + !isLoading && selectedCollection && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( + import_components28.Navigator, + { + initialPath: "/", + className: "font-library__tabpanel-layout", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.Navigator.Screen, { path: "/", children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalHStack, { justify: "space-between", children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalVStack, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalHeading, { level: 2, size: 13, children: selectedCollection.name }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalText, { children: selectedCollection.description }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ActionsComponent, {}) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalHStack, { spacing: 4, justify: "space-between", children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.SearchControl, + { + value: filters.search, + placeholder: (0, import_i18n15.__)("Font name\u2026"), + label: (0, import_i18n15.__)("Search"), + onChange: debouncedUpdateSearchInput, + hideLabelFromVision: false + } + ), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.SelectControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n15.__)("Category"), + value: filters.category, + onChange: handleCategoryFilter, + children: categories && categories.map((category) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "option", + { + value: category.slug, + children: category.name + }, + category.slug + )) + } + ) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), + !!selectedCollection?.font_families?.length && !fonts.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalText, { children: (0, import_i18n15.__)( + "No fonts found. Try with a different search term." + ) }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "font-library__fonts-grid__main", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "ul", + { + role: "list", + className: "font-library__fonts-list", + children: items.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "li", + { + className: "font-library__fonts-list-item", + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + font_card_default, + { + font: font2.font_family_settings, + navigatorPath: "/fontFamily", + onClick: () => { + setSelectedFont( + font2.font_family_settings + ); + } + } + ) + }, + font2.font_family_settings.slug + )) + } + ) }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.Navigator.Screen, { path: "/fontFamily", children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.Flex, { justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.Navigator.BackButton, + { + icon: (0, import_i18n15.isRTL)() ? chevron_right_default : chevron_left_default, + size: "small", + onClick: () => { + setSelectedFont(null); + setNotice(null); + }, + label: (0, import_i18n15.__)("Back") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.__experimentalHeading, + { + level: 2, + size: 13, + className: "global-styles-ui-header", + children: selectedFont?.name + } + ) + ] }), + notice && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 1 }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.Notice, + { + status: notice.type, + onRemove: () => setNotice(null), + children: notice.message + } + ), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 1 }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalText, { children: (0, import_i18n15.__)("Select font variants to install.") }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.CheckboxControl, + { + className: "font-library__select-all", + label: (0, import_i18n15.__)("Select all"), + checked: isSelectAllChecked, + onChange: toggleSelectAll, + indeterminate: isIndeterminate + } + ), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalVStack, { spacing: 0, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "ul", + { + role: "list", + className: "font-library__fonts-list", + children: selectedFont && getSortedFontFaces(selectedFont).map( + (face, i2) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "li", + { + className: "font-library__fonts-list-item", + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + collection_font_variant_default, + { + font: selectedFont, + face, + handleToggleVariant, + selected: isFontFontFaceInOutline( + selectedFont.slug, + selectedFont.fontFace ? face : null, + // If the font has no fontFace, we want to check if the font is in the outline + fontToInstallOutline + ) + } + ) + }, + `face${i2}` + ) + ) + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 16 }) + ] }) + ] + } + ), + selectedFont && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.Flex, + { + justify: "flex-end", + className: "font-library__footer", + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.Button, + { + __next40pxDefaultSize: true, + variant: "primary", + onClick: handleInstall, + isBusy: isInstalling, + disabled: fontsToInstall.length === 0 || isInstalling, + accessibleWhenDisabled: true, + children: (0, import_i18n15.__)("Install") + } + ) + } + ), + !selectedFont && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( + import_components28.__experimentalHStack, + { + expanded: false, + className: "font-library__footer", + justify: "end", + spacing: 6, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.__experimentalHStack, + { + justify: "flex-start", + expanded: false, + spacing: 1, + className: "font-library__page-selection", + children: (0, import_element17.createInterpolateElement)( + (0, import_i18n15.sprintf)( + // translators: 1: Current page number, 2: Total number of pages. + (0, import_i18n15._x)( + "
      Page
      %1$s
      of %2$d
      ", + "paging" + ), + "", + totalPages + ), + { + div: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { "aria-hidden": true }), + CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.SelectControl, + { + "aria-label": (0, import_i18n15.__)( + "Current page" + ), + value: page.toString(), + options: [ + ...Array(totalPages) + ].map((e2, i2) => { + return { + label: (i2 + 1).toString(), + value: (i2 + 1).toString() + }; + }), + onChange: (newPage) => setPage( + parseInt(newPage) + ), + size: "small", + variant: "minimal" + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalHStack, { expanded: false, spacing: 1, children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.Button, + { + onClick: () => setPage(page - 1), + disabled: page === 1, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Previous page"), + icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components28.Button, + { + onClick: () => setPage(page + 1), + disabled: page === totalPages, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Next page"), + icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ) + ] }) + ] + } + ) + ] }) + ] }); +} +var font_collection_default = FontCollection; + +// packages/global-styles-ui/build-module/font-library/upload-fonts.mjs +var import_i18n16 = __toESM(require_i18n(), 1); +var import_components30 = __toESM(require_components(), 1); +var import_element18 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/font-library/lib/unbrotli.mjs +var __require2 = /* @__PURE__ */ ((x2) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x2, { + get: (a2, b2) => (typeof __require !== "undefined" ? __require : a2)[b2] +}) : x2)(function(x2) { + if (typeof __require !== "undefined") return __require.apply(this, arguments); + throw Error('Dynamic require of "' + x2 + '" is not supported'); +}); +var unbrotli_default = (function() { + var define, module, exports; + return (/* @__PURE__ */ (function() { + function r3(e2, n2, t3) { + function o3(i22, f2) { + if (!n2[i22]) { + if (!e2[i22]) { + var c2 = "function" == typeof __require2 && __require2; + if (!f2 && c2) return c2(i22, true); + if (u2) return u2(i22, true); + var a2 = new Error("Cannot find module '" + i22 + "'"); + throw a2.code = "MODULE_NOT_FOUND", a2; + } + var p3 = n2[i22] = { exports: {} }; + e2[i22][0].call( + p3.exports, + function(r22) { + var n22 = e2[i22][1][r22]; + return o3(n22 || r22); + }, + p3, + p3.exports, + r3, + e2, + n2, + t3 + ); + } + return n2[i22].exports; + } + for (var u2 = "function" == typeof __require2 && __require2, i2 = 0; i2 < t3.length; i2++) + o3(t3[i2]); + return o3; + } + return r3; + })())( + { + 1: [ + function(require2, module2, exports2) { + var BROTLI_READ_SIZE = 4096; + var BROTLI_IBUF_SIZE = 2 * BROTLI_READ_SIZE + 32; + var BROTLI_IBUF_MASK = 2 * BROTLI_READ_SIZE - 1; + var kBitMask = new Uint32Array([ + 0, + 1, + 3, + 7, + 15, + 31, + 63, + 127, + 255, + 511, + 1023, + 2047, + 4095, + 8191, + 16383, + 32767, + 65535, + 131071, + 262143, + 524287, + 1048575, + 2097151, + 4194303, + 8388607, + 16777215 + ]); + function BrotliBitReader(input) { + this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE); + this.input_ = input; + this.reset(); + } + BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE; + BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK; + BrotliBitReader.prototype.reset = function() { + this.buf_ptr_ = 0; + this.val_ = 0; + this.pos_ = 0; + this.bit_pos_ = 0; + this.bit_end_pos_ = 0; + this.eos_ = 0; + this.readMoreInput(); + for (var i2 = 0; i2 < 4; i2++) { + this.val_ |= this.buf_[this.pos_] << 8 * i2; + ++this.pos_; + } + return this.bit_end_pos_ > 0; + }; + BrotliBitReader.prototype.readMoreInput = function() { + if (this.bit_end_pos_ > 256) { + return; + } else if (this.eos_) { + if (this.bit_pos_ > this.bit_end_pos_) + throw new Error( + "Unexpected end of input " + this.bit_pos_ + " " + this.bit_end_pos_ + ); + } else { + var dst = this.buf_ptr_; + var bytes_read = this.input_.read( + this.buf_, + dst, + BROTLI_READ_SIZE + ); + if (bytes_read < 0) { + throw new Error("Unexpected end of input"); + } + if (bytes_read < BROTLI_READ_SIZE) { + this.eos_ = 1; + for (var p3 = 0; p3 < 32; p3++) + this.buf_[dst + bytes_read + p3] = 0; + } + if (dst === 0) { + for (var p3 = 0; p3 < 32; p3++) + this.buf_[(BROTLI_READ_SIZE << 1) + p3] = this.buf_[p3]; + this.buf_ptr_ = BROTLI_READ_SIZE; + } else { + this.buf_ptr_ = 0; + } + this.bit_end_pos_ += bytes_read << 3; + } + }; + BrotliBitReader.prototype.fillBitWindow = function() { + while (this.bit_pos_ >= 8) { + this.val_ >>>= 8; + this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24; + ++this.pos_; + this.bit_pos_ = this.bit_pos_ - 8 >>> 0; + this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0; + } + }; + BrotliBitReader.prototype.readBits = function(n_bits) { + if (32 - this.bit_pos_ < n_bits) { + this.fillBitWindow(); + } + var val = this.val_ >>> this.bit_pos_ & kBitMask[n_bits]; + this.bit_pos_ += n_bits; + return val; + }; + module2.exports = BrotliBitReader; + }, + {} + ], + 2: [ + function(require2, module2, exports2) { + var CONTEXT_LSB6 = 0; + var CONTEXT_MSB6 = 1; + var CONTEXT_UTF8 = 2; + var CONTEXT_SIGNED = 3; + exports2.lookup = new Uint8Array([ + /* CONTEXT_UTF8, last byte. */ + /* ASCII range. */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 4, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 12, + 16, + 12, + 12, + 20, + 12, + 16, + 24, + 28, + 12, + 12, + 32, + 12, + 36, + 12, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 32, + 32, + 24, + 40, + 28, + 12, + 12, + 48, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 52, + 52, + 24, + 12, + 28, + 12, + 12, + 12, + 56, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 60, + 60, + 24, + 12, + 28, + 12, + 0, + /* UTF8 continuation byte range. */ + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + /* ASCII range. */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 1, + 1, + 1, + 1, + 0, + /* UTF8 continuation byte range. */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7, + /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ + 0, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 56, + /* CONTEXT_LSB6, last byte. */ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + /* CONTEXT_MSB6, last byte. */ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 10, + 10, + 10, + 10, + 11, + 11, + 11, + 11, + 12, + 12, + 12, + 12, + 13, + 13, + 13, + 13, + 14, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 16, + 16, + 16, + 16, + 17, + 17, + 17, + 17, + 18, + 18, + 18, + 18, + 19, + 19, + 19, + 19, + 20, + 20, + 20, + 20, + 21, + 21, + 21, + 21, + 22, + 22, + 22, + 22, + 23, + 23, + 23, + 23, + 24, + 24, + 24, + 24, + 25, + 25, + 25, + 25, + 26, + 26, + 26, + 26, + 27, + 27, + 27, + 27, + 28, + 28, + 28, + 28, + 29, + 29, + 29, + 29, + 30, + 30, + 30, + 30, + 31, + 31, + 31, + 31, + 32, + 32, + 32, + 32, + 33, + 33, + 33, + 33, + 34, + 34, + 34, + 34, + 35, + 35, + 35, + 35, + 36, + 36, + 36, + 36, + 37, + 37, + 37, + 37, + 38, + 38, + 38, + 38, + 39, + 39, + 39, + 39, + 40, + 40, + 40, + 40, + 41, + 41, + 41, + 41, + 42, + 42, + 42, + 42, + 43, + 43, + 43, + 43, + 44, + 44, + 44, + 44, + 45, + 45, + 45, + 45, + 46, + 46, + 46, + 46, + 47, + 47, + 47, + 47, + 48, + 48, + 48, + 48, + 49, + 49, + 49, + 49, + 50, + 50, + 50, + 50, + 51, + 51, + 51, + 51, + 52, + 52, + 52, + 52, + 53, + 53, + 53, + 53, + 54, + 54, + 54, + 54, + 55, + 55, + 55, + 55, + 56, + 56, + 56, + 56, + 57, + 57, + 57, + 57, + 58, + 58, + 58, + 58, + 59, + 59, + 59, + 59, + 60, + 60, + 60, + 60, + 61, + 61, + 61, + 61, + 62, + 62, + 62, + 62, + 63, + 63, + 63, + 63, + /* CONTEXT_{M,L}SB6, second last byte, */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]); + exports2.lookupOffsets = new Uint16Array([ + /* CONTEXT_LSB6 */ + 1024, + 1536, + 1280, + 1536, + 0, + 256, + 768, + 512 + ]); + }, + {} + ], + 3: [ + function(require2, module2, exports2) { + var BrotliInput = require2("./streams").BrotliInput; + var BrotliOutput = require2("./streams").BrotliOutput; + var BrotliBitReader = require2("./bit_reader"); + var BrotliDictionary = require2("./dictionary"); + var HuffmanCode = require2("./huffman").HuffmanCode; + var BrotliBuildHuffmanTable = require2("./huffman").BrotliBuildHuffmanTable; + var Context = require2("./context"); + var Prefix = require2("./prefix"); + var Transform = require2("./transform"); + var kDefaultCodeLength = 8; + var kCodeLengthRepeatCode = 16; + var kNumLiteralCodes = 256; + var kNumInsertAndCopyCodes = 704; + var kNumBlockLengthCodes = 26; + var kLiteralContextBits = 6; + var kDistanceContextBits = 2; + var HUFFMAN_TABLE_BITS = 8; + var HUFFMAN_TABLE_MASK = 255; + var HUFFMAN_MAX_TABLE_SIZE = 1080; + var CODE_LENGTH_CODES = 18; + var kCodeLengthCodeOrder = new Uint8Array([ + 1, + 2, + 3, + 4, + 0, + 5, + 17, + 6, + 16, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ]); + var NUM_DISTANCE_SHORT_CODES = 16; + var kDistanceShortCodeIndexOffset = new Uint8Array([ + 3, + 2, + 1, + 0, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2 + ]); + var kDistanceShortCodeValueOffset = new Int8Array([ + 0, + 0, + 0, + 0, + -1, + 1, + -2, + 2, + -3, + 3, + -1, + 1, + -2, + 2, + -3, + 3 + ]); + var kMaxHuffmanTableSize = new Uint16Array([ + 256, + 402, + 436, + 468, + 500, + 534, + 566, + 598, + 630, + 662, + 694, + 726, + 758, + 790, + 822, + 854, + 886, + 920, + 952, + 984, + 1016, + 1048, + 1080 + ]); + function DecodeWindowBits(br) { + var n2; + if (br.readBits(1) === 0) { + return 16; + } + n2 = br.readBits(3); + if (n2 > 0) { + return 17 + n2; + } + n2 = br.readBits(3); + if (n2 > 0) { + return 8 + n2; + } + return 17; + } + function DecodeVarLenUint8(br) { + if (br.readBits(1)) { + var nbits = br.readBits(3); + if (nbits === 0) { + return 1; + } else { + return br.readBits(nbits) + (1 << nbits); + } + } + return 0; + } + function MetaBlockLength() { + this.meta_block_length = 0; + this.input_end = 0; + this.is_uncompressed = 0; + this.is_metadata = false; + } + function DecodeMetaBlockLength(br) { + var out = new MetaBlockLength(); + var size_nibbles; + var size_bytes; + var i2; + out.input_end = br.readBits(1); + if (out.input_end && br.readBits(1)) { + return out; + } + size_nibbles = br.readBits(2) + 4; + if (size_nibbles === 7) { + out.is_metadata = true; + if (br.readBits(1) !== 0) + throw new Error("Invalid reserved bit"); + size_bytes = br.readBits(2); + if (size_bytes === 0) return out; + for (i2 = 0; i2 < size_bytes; i2++) { + var next_byte = br.readBits(8); + if (i2 + 1 === size_bytes && size_bytes > 1 && next_byte === 0) + throw new Error("Invalid size byte"); + out.meta_block_length |= next_byte << i2 * 8; + } + } else { + for (i2 = 0; i2 < size_nibbles; ++i2) { + var next_nibble = br.readBits(4); + if (i2 + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0) + throw new Error("Invalid size nibble"); + out.meta_block_length |= next_nibble << i2 * 4; + } + } + ++out.meta_block_length; + if (!out.input_end && !out.is_metadata) { + out.is_uncompressed = br.readBits(1); + } + return out; + } + function ReadSymbol(table, index, br) { + var start_index = index; + var nbits; + br.fillBitWindow(); + index += br.val_ >>> br.bit_pos_ & HUFFMAN_TABLE_MASK; + nbits = table[index].bits - HUFFMAN_TABLE_BITS; + if (nbits > 0) { + br.bit_pos_ += HUFFMAN_TABLE_BITS; + index += table[index].value; + index += br.val_ >>> br.bit_pos_ & (1 << nbits) - 1; + } + br.bit_pos_ += table[index].bits; + return table[index].value; + } + function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) { + var symbol = 0; + var prev_code_len = kDefaultCodeLength; + var repeat = 0; + var repeat_code_len = 0; + var space = 32768; + var table = []; + for (var i2 = 0; i2 < 32; i2++) + table.push(new HuffmanCode(0, 0)); + BrotliBuildHuffmanTable( + table, + 0, + 5, + code_length_code_lengths, + CODE_LENGTH_CODES + ); + while (symbol < num_symbols && space > 0) { + var p3 = 0; + var code_len; + br.readMoreInput(); + br.fillBitWindow(); + p3 += br.val_ >>> br.bit_pos_ & 31; + br.bit_pos_ += table[p3].bits; + code_len = table[p3].value & 255; + if (code_len < kCodeLengthRepeatCode) { + repeat = 0; + code_lengths[symbol++] = code_len; + if (code_len !== 0) { + prev_code_len = code_len; + space -= 32768 >> code_len; + } + } else { + var extra_bits = code_len - 14; + var old_repeat; + var repeat_delta; + var new_len = 0; + if (code_len === kCodeLengthRepeatCode) { + new_len = prev_code_len; + } + if (repeat_code_len !== new_len) { + repeat = 0; + repeat_code_len = new_len; + } + old_repeat = repeat; + if (repeat > 0) { + repeat -= 2; + repeat <<= extra_bits; + } + repeat += br.readBits(extra_bits) + 3; + repeat_delta = repeat - old_repeat; + if (symbol + repeat_delta > num_symbols) { + throw new Error( + "[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols" + ); + } + for (var x2 = 0; x2 < repeat_delta; x2++) + code_lengths[symbol + x2] = repeat_code_len; + symbol += repeat_delta; + if (repeat_code_len !== 0) { + space -= repeat_delta << 15 - repeat_code_len; + } + } + } + if (space !== 0) { + throw new Error( + "[ReadHuffmanCodeLengths] space = " + space + ); + } + for (; symbol < num_symbols; symbol++) + code_lengths[symbol] = 0; + } + function ReadHuffmanCode(alphabet_size, tables, table, br) { + var table_size = 0; + var simple_code_or_skip; + var code_lengths = new Uint8Array(alphabet_size); + br.readMoreInput(); + simple_code_or_skip = br.readBits(2); + if (simple_code_or_skip === 1) { + var i2; + var max_bits_counter = alphabet_size - 1; + var max_bits = 0; + var symbols = new Int32Array(4); + var num_symbols = br.readBits(2) + 1; + while (max_bits_counter) { + max_bits_counter >>= 1; + ++max_bits; + } + for (i2 = 0; i2 < num_symbols; ++i2) { + symbols[i2] = br.readBits(max_bits) % alphabet_size; + code_lengths[symbols[i2]] = 2; + } + code_lengths[symbols[0]] = 1; + switch (num_symbols) { + case 1: + break; + case 3: + if (symbols[0] === symbols[1] || symbols[0] === symbols[2] || symbols[1] === symbols[2]) { + throw new Error( + "[ReadHuffmanCode] invalid symbols" + ); + } + break; + case 2: + if (symbols[0] === symbols[1]) { + throw new Error( + "[ReadHuffmanCode] invalid symbols" + ); + } + code_lengths[symbols[1]] = 1; + break; + case 4: + if (symbols[0] === symbols[1] || symbols[0] === symbols[2] || symbols[0] === symbols[3] || symbols[1] === symbols[2] || symbols[1] === symbols[3] || symbols[2] === symbols[3]) { + throw new Error( + "[ReadHuffmanCode] invalid symbols" + ); + } + if (br.readBits(1)) { + code_lengths[symbols[2]] = 3; + code_lengths[symbols[3]] = 3; + } else { + code_lengths[symbols[0]] = 2; + } + break; + } + } else { + var i2; + var code_length_code_lengths = new Uint8Array( + CODE_LENGTH_CODES + ); + var space = 32; + var num_codes = 0; + var huff = [ + new HuffmanCode(2, 0), + new HuffmanCode(2, 4), + new HuffmanCode(2, 3), + new HuffmanCode(3, 2), + new HuffmanCode(2, 0), + new HuffmanCode(2, 4), + new HuffmanCode(2, 3), + new HuffmanCode(4, 1), + new HuffmanCode(2, 0), + new HuffmanCode(2, 4), + new HuffmanCode(2, 3), + new HuffmanCode(3, 2), + new HuffmanCode(2, 0), + new HuffmanCode(2, 4), + new HuffmanCode(2, 3), + new HuffmanCode(4, 5) + ]; + for (i2 = simple_code_or_skip; i2 < CODE_LENGTH_CODES && space > 0; ++i2) { + var code_len_idx = kCodeLengthCodeOrder[i2]; + var p3 = 0; + var v2; + br.fillBitWindow(); + p3 += br.val_ >>> br.bit_pos_ & 15; + br.bit_pos_ += huff[p3].bits; + v2 = huff[p3].value; + code_length_code_lengths[code_len_idx] = v2; + if (v2 !== 0) { + space -= 32 >> v2; + ++num_codes; + } + } + if (!(num_codes === 1 || space === 0)) + throw new Error( + "[ReadHuffmanCode] invalid num_codes or space" + ); + ReadHuffmanCodeLengths( + code_length_code_lengths, + alphabet_size, + code_lengths, + br + ); + } + table_size = BrotliBuildHuffmanTable( + tables, + table, + HUFFMAN_TABLE_BITS, + code_lengths, + alphabet_size + ); + if (table_size === 0) { + throw new Error( + "[ReadHuffmanCode] BuildHuffmanTable failed: " + ); + } + return table_size; + } + function ReadBlockLength(table, index, br) { + var code; + var nbits; + code = ReadSymbol(table, index, br); + nbits = Prefix.kBlockLengthPrefixCode[code].nbits; + return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits); + } + function TranslateShortCodes(code, ringbuffer, index) { + var val; + if (code < NUM_DISTANCE_SHORT_CODES) { + index += kDistanceShortCodeIndexOffset[code]; + index &= 3; + val = ringbuffer[index] + kDistanceShortCodeValueOffset[code]; + } else { + val = code - NUM_DISTANCE_SHORT_CODES + 1; + } + return val; + } + function MoveToFront(v2, index) { + var value = v2[index]; + var i2 = index; + for (; i2; --i2) v2[i2] = v2[i2 - 1]; + v2[0] = value; + } + function InverseMoveToFrontTransform(v2, v_len) { + var mtf = new Uint8Array(256); + var i2; + for (i2 = 0; i2 < 256; ++i2) { + mtf[i2] = i2; + } + for (i2 = 0; i2 < v_len; ++i2) { + var index = v2[i2]; + v2[i2] = mtf[index]; + if (index) MoveToFront(mtf, index); + } + } + function HuffmanTreeGroup(alphabet_size, num_htrees) { + this.alphabet_size = alphabet_size; + this.num_htrees = num_htrees; + this.codes = new Array( + num_htrees + num_htrees * kMaxHuffmanTableSize[alphabet_size + 31 >>> 5] + ); + this.htrees = new Uint32Array(num_htrees); + } + HuffmanTreeGroup.prototype.decode = function(br) { + var i2; + var table_size; + var next = 0; + for (i2 = 0; i2 < this.num_htrees; ++i2) { + this.htrees[i2] = next; + table_size = ReadHuffmanCode( + this.alphabet_size, + this.codes, + next, + br + ); + next += table_size; + } + }; + function DecodeContextMap(context_map_size, br) { + var out = { num_htrees: null, context_map: null }; + var use_rle_for_zeros; + var max_run_length_prefix = 0; + var table; + var i2; + br.readMoreInput(); + var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1; + var context_map = out.context_map = new Uint8Array( + context_map_size + ); + if (num_htrees <= 1) { + return out; + } + use_rle_for_zeros = br.readBits(1); + if (use_rle_for_zeros) { + max_run_length_prefix = br.readBits(4) + 1; + } + table = []; + for (i2 = 0; i2 < HUFFMAN_MAX_TABLE_SIZE; i2++) { + table[i2] = new HuffmanCode(0, 0); + } + ReadHuffmanCode( + num_htrees + max_run_length_prefix, + table, + 0, + br + ); + for (i2 = 0; i2 < context_map_size; ) { + var code; + br.readMoreInput(); + code = ReadSymbol(table, 0, br); + if (code === 0) { + context_map[i2] = 0; + ++i2; + } else if (code <= max_run_length_prefix) { + var reps = 1 + (1 << code) + br.readBits(code); + while (--reps) { + if (i2 >= context_map_size) { + throw new Error( + "[DecodeContextMap] i >= context_map_size" + ); + } + context_map[i2] = 0; + ++i2; + } + } else { + context_map[i2] = code - max_run_length_prefix; + ++i2; + } + } + if (br.readBits(1)) { + InverseMoveToFrontTransform( + context_map, + context_map_size + ); + } + return out; + } + function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) { + var ringbuffer = tree_type * 2; + var index = tree_type; + var type_code = ReadSymbol( + trees, + tree_type * HUFFMAN_MAX_TABLE_SIZE, + br + ); + var block_type; + if (type_code === 0) { + block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]; + } else if (type_code === 1) { + block_type = ringbuffers[ringbuffer + (indexes[index] - 1 & 1)] + 1; + } else { + block_type = type_code - 2; + } + if (block_type >= max_block_type) { + block_type -= max_block_type; + } + block_types[tree_type] = block_type; + ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type; + ++indexes[index]; + } + function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) { + var rb_size = ringbuffer_mask + 1; + var rb_pos = pos & ringbuffer_mask; + var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; + var nbytes; + if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) { + while (len-- > 0) { + br.readMoreInput(); + ringbuffer[rb_pos++] = br.readBits(8); + if (rb_pos === rb_size) { + output.write(ringbuffer, rb_size); + rb_pos = 0; + } + } + return; + } + if (br.bit_end_pos_ < 32) { + throw new Error( + "[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32" + ); + } + while (br.bit_pos_ < 32) { + ringbuffer[rb_pos] = br.val_ >>> br.bit_pos_; + br.bit_pos_ += 8; + ++rb_pos; + --len; + } + nbytes = br.bit_end_pos_ - br.bit_pos_ >> 3; + if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) { + var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; + for (var x2 = 0; x2 < tail; x2++) + ringbuffer[rb_pos + x2] = br.buf_[br_pos + x2]; + nbytes -= tail; + rb_pos += tail; + len -= tail; + br_pos = 0; + } + for (var x2 = 0; x2 < nbytes; x2++) + ringbuffer[rb_pos + x2] = br.buf_[br_pos + x2]; + rb_pos += nbytes; + len -= nbytes; + if (rb_pos >= rb_size) { + output.write(ringbuffer, rb_size); + rb_pos -= rb_size; + for (var x2 = 0; x2 < rb_pos; x2++) + ringbuffer[x2] = ringbuffer[rb_size + x2]; + } + while (rb_pos + len >= rb_size) { + nbytes = rb_size - rb_pos; + if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) { + throw new Error( + "[CopyUncompressedBlockToOutput] not enough bytes" + ); + } + output.write(ringbuffer, rb_size); + len -= nbytes; + rb_pos = 0; + } + if (br.input_.read(ringbuffer, rb_pos, len) < len) { + throw new Error( + "[CopyUncompressedBlockToOutput] not enough bytes" + ); + } + br.reset(); + } + function JumpToByteBoundary(br) { + var new_bit_pos = br.bit_pos_ + 7 & ~7; + var pad_bits = br.readBits(new_bit_pos - br.bit_pos_); + return pad_bits == 0; + } + function BrotliDecompressedSize(buffer) { + var input = new BrotliInput(buffer); + var br = new BrotliBitReader(input); + DecodeWindowBits(br); + var out = DecodeMetaBlockLength(br); + return out.meta_block_length; + } + exports2.BrotliDecompressedSize = BrotliDecompressedSize; + function BrotliDecompressBuffer(buffer, output_size) { + var input = new BrotliInput(buffer); + if (output_size == null) { + output_size = BrotliDecompressedSize(buffer); + } + var output_buffer = new Uint8Array(output_size); + var output = new BrotliOutput(output_buffer); + BrotliDecompress(input, output); + if (output.pos < output.buffer.length) { + output.buffer = output.buffer.subarray( + 0, + output.pos + ); + } + return output.buffer; + } + exports2.BrotliDecompressBuffer = BrotliDecompressBuffer; + function BrotliDecompress(input, output) { + var i2; + var pos = 0; + var input_end = 0; + var window_bits = 0; + var max_backward_distance; + var max_distance = 0; + var ringbuffer_size; + var ringbuffer_mask; + var ringbuffer; + var ringbuffer_end; + var dist_rb = [16, 15, 11, 4]; + var dist_rb_idx = 0; + var prev_byte1 = 0; + var prev_byte2 = 0; + var hgroup = [ + new HuffmanTreeGroup(0, 0), + new HuffmanTreeGroup(0, 0), + new HuffmanTreeGroup(0, 0) + ]; + var block_type_trees; + var block_len_trees; + var br; + var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE; + br = new BrotliBitReader(input); + window_bits = DecodeWindowBits(br); + max_backward_distance = (1 << window_bits) - 16; + ringbuffer_size = 1 << window_bits; + ringbuffer_mask = ringbuffer_size - 1; + ringbuffer = new Uint8Array( + ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength + ); + ringbuffer_end = ringbuffer_size; + block_type_trees = []; + block_len_trees = []; + for (var x2 = 0; x2 < 3 * HUFFMAN_MAX_TABLE_SIZE; x2++) { + block_type_trees[x2] = new HuffmanCode(0, 0); + block_len_trees[x2] = new HuffmanCode(0, 0); + } + while (!input_end) { + var meta_block_remaining_len = 0; + var is_uncompressed; + var block_length = [1 << 28, 1 << 28, 1 << 28]; + var block_type = [0]; + var num_block_types = [1, 1, 1]; + var block_type_rb = [0, 1, 0, 1, 0, 1]; + var block_type_rb_index = [0]; + var distance_postfix_bits; + var num_direct_distance_codes; + var distance_postfix_mask; + var num_distance_codes; + var context_map = null; + var context_modes = null; + var num_literal_htrees; + var dist_context_map = null; + var num_dist_htrees; + var context_offset = 0; + var context_map_slice = null; + var literal_htree_index = 0; + var dist_context_offset = 0; + var dist_context_map_slice = null; + var dist_htree_index = 0; + var context_lookup_offset1 = 0; + var context_lookup_offset2 = 0; + var context_mode; + var htree_command; + for (i2 = 0; i2 < 3; ++i2) { + hgroup[i2].codes = null; + hgroup[i2].htrees = null; + } + br.readMoreInput(); + var _out = DecodeMetaBlockLength(br); + meta_block_remaining_len = _out.meta_block_length; + if (pos + meta_block_remaining_len > output.buffer.length) { + var tmp = new Uint8Array( + pos + meta_block_remaining_len + ); + tmp.set(output.buffer); + output.buffer = tmp; + } + input_end = _out.input_end; + is_uncompressed = _out.is_uncompressed; + if (_out.is_metadata) { + JumpToByteBoundary(br); + for (; meta_block_remaining_len > 0; --meta_block_remaining_len) { + br.readMoreInput(); + br.readBits(8); + } + continue; + } + if (meta_block_remaining_len === 0) { + continue; + } + if (is_uncompressed) { + br.bit_pos_ = br.bit_pos_ + 7 & ~7; + CopyUncompressedBlockToOutput( + output, + meta_block_remaining_len, + pos, + ringbuffer, + ringbuffer_mask, + br + ); + pos += meta_block_remaining_len; + continue; + } + for (i2 = 0; i2 < 3; ++i2) { + num_block_types[i2] = DecodeVarLenUint8(br) + 1; + if (num_block_types[i2] >= 2) { + ReadHuffmanCode( + num_block_types[i2] + 2, + block_type_trees, + i2 * HUFFMAN_MAX_TABLE_SIZE, + br + ); + ReadHuffmanCode( + kNumBlockLengthCodes, + block_len_trees, + i2 * HUFFMAN_MAX_TABLE_SIZE, + br + ); + block_length[i2] = ReadBlockLength( + block_len_trees, + i2 * HUFFMAN_MAX_TABLE_SIZE, + br + ); + block_type_rb_index[i2] = 1; + } + } + br.readMoreInput(); + distance_postfix_bits = br.readBits(2); + num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits); + distance_postfix_mask = (1 << distance_postfix_bits) - 1; + num_distance_codes = num_direct_distance_codes + (48 << distance_postfix_bits); + context_modes = new Uint8Array( + num_block_types[0] + ); + for (i2 = 0; i2 < num_block_types[0]; ++i2) { + br.readMoreInput(); + context_modes[i2] = br.readBits(2) << 1; + } + var _o1 = DecodeContextMap( + num_block_types[0] << kLiteralContextBits, + br + ); + num_literal_htrees = _o1.num_htrees; + context_map = _o1.context_map; + var _o2 = DecodeContextMap( + num_block_types[2] << kDistanceContextBits, + br + ); + num_dist_htrees = _o2.num_htrees; + dist_context_map = _o2.context_map; + hgroup[0] = new HuffmanTreeGroup( + kNumLiteralCodes, + num_literal_htrees + ); + hgroup[1] = new HuffmanTreeGroup( + kNumInsertAndCopyCodes, + num_block_types[1] + ); + hgroup[2] = new HuffmanTreeGroup( + num_distance_codes, + num_dist_htrees + ); + for (i2 = 0; i2 < 3; ++i2) { + hgroup[i2].decode(br); + } + context_map_slice = 0; + dist_context_map_slice = 0; + context_mode = context_modes[block_type[0]]; + context_lookup_offset1 = Context.lookupOffsets[context_mode]; + context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; + htree_command = hgroup[1].htrees[0]; + while (meta_block_remaining_len > 0) { + var cmd_code; + var range_idx; + var insert_code; + var copy_code; + var insert_length; + var copy_length; + var distance_code; + var distance; + var context; + var j2; + var copy_dst; + br.readMoreInput(); + if (block_length[1] === 0) { + DecodeBlockType( + num_block_types[1], + block_type_trees, + 1, + block_type, + block_type_rb, + block_type_rb_index, + br + ); + block_length[1] = ReadBlockLength( + block_len_trees, + HUFFMAN_MAX_TABLE_SIZE, + br + ); + htree_command = hgroup[1].htrees[block_type[1]]; + } + --block_length[1]; + cmd_code = ReadSymbol( + hgroup[1].codes, + htree_command, + br + ); + range_idx = cmd_code >> 6; + if (range_idx >= 2) { + range_idx -= 2; + distance_code = -1; + } else { + distance_code = 0; + } + insert_code = Prefix.kInsertRangeLut[range_idx] + (cmd_code >> 3 & 7); + copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7); + insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset + br.readBits( + Prefix.kInsertLengthPrefixCode[insert_code].nbits + ); + copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset + br.readBits( + Prefix.kCopyLengthPrefixCode[copy_code].nbits + ); + prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]; + prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]; + for (j2 = 0; j2 < insert_length; ++j2) { + br.readMoreInput(); + if (block_length[0] === 0) { + DecodeBlockType( + num_block_types[0], + block_type_trees, + 0, + block_type, + block_type_rb, + block_type_rb_index, + br + ); + block_length[0] = ReadBlockLength( + block_len_trees, + 0, + br + ); + context_offset = block_type[0] << kLiteralContextBits; + context_map_slice = context_offset; + context_mode = context_modes[block_type[0]]; + context_lookup_offset1 = Context.lookupOffsets[context_mode]; + context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; + } + context = Context.lookup[context_lookup_offset1 + prev_byte1] | Context.lookup[context_lookup_offset2 + prev_byte2]; + literal_htree_index = context_map[context_map_slice + context]; + --block_length[0]; + prev_byte2 = prev_byte1; + prev_byte1 = ReadSymbol( + hgroup[0].codes, + hgroup[0].htrees[literal_htree_index], + br + ); + ringbuffer[pos & ringbuffer_mask] = prev_byte1; + if ((pos & ringbuffer_mask) === ringbuffer_mask) { + output.write( + ringbuffer, + ringbuffer_size + ); + } + ++pos; + } + meta_block_remaining_len -= insert_length; + if (meta_block_remaining_len <= 0) break; + if (distance_code < 0) { + var context; + br.readMoreInput(); + if (block_length[2] === 0) { + DecodeBlockType( + num_block_types[2], + block_type_trees, + 2, + block_type, + block_type_rb, + block_type_rb_index, + br + ); + block_length[2] = ReadBlockLength( + block_len_trees, + 2 * HUFFMAN_MAX_TABLE_SIZE, + br + ); + dist_context_offset = block_type[2] << kDistanceContextBits; + dist_context_map_slice = dist_context_offset; + } + --block_length[2]; + context = (copy_length > 4 ? 3 : copy_length - 2) & 255; + dist_htree_index = dist_context_map[dist_context_map_slice + context]; + distance_code = ReadSymbol( + hgroup[2].codes, + hgroup[2].htrees[dist_htree_index], + br + ); + if (distance_code >= num_direct_distance_codes) { + var nbits; + var postfix; + var offset; + distance_code -= num_direct_distance_codes; + postfix = distance_code & distance_postfix_mask; + distance_code >>= distance_postfix_bits; + nbits = (distance_code >> 1) + 1; + offset = (2 + (distance_code & 1) << nbits) - 4; + distance_code = num_direct_distance_codes + (offset + br.readBits(nbits) << distance_postfix_bits) + postfix; + } + } + distance = TranslateShortCodes( + distance_code, + dist_rb, + dist_rb_idx + ); + if (distance < 0) { + throw new Error( + "[BrotliDecompress] invalid distance" + ); + } + if (pos < max_backward_distance && max_distance !== max_backward_distance) { + max_distance = pos; + } else { + max_distance = max_backward_distance; + } + copy_dst = pos & ringbuffer_mask; + if (distance > max_distance) { + if (copy_length >= BrotliDictionary.minDictionaryWordLength && copy_length <= BrotliDictionary.maxDictionaryWordLength) { + var offset = BrotliDictionary.offsetsByLength[copy_length]; + var word_id = distance - max_distance - 1; + var shift = BrotliDictionary.sizeBitsByLength[copy_length]; + var mask = (1 << shift) - 1; + var word_idx = word_id & mask; + var transform_idx = word_id >> shift; + offset += word_idx * copy_length; + if (transform_idx < Transform.kNumTransforms) { + var len = Transform.transformDictionaryWord( + ringbuffer, + copy_dst, + offset, + copy_length, + transform_idx + ); + copy_dst += len; + pos += len; + meta_block_remaining_len -= len; + if (copy_dst >= ringbuffer_end) { + output.write( + ringbuffer, + ringbuffer_size + ); + for (var _x9 = 0; _x9 < copy_dst - ringbuffer_end; _x9++) + ringbuffer[_x9] = ringbuffer[ringbuffer_end + _x9]; + } + } else { + throw new Error( + "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len + ); + } + } else { + throw new Error( + "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len + ); + } + } else { + if (distance_code > 0) { + dist_rb[dist_rb_idx & 3] = distance; + ++dist_rb_idx; + } + if (copy_length > meta_block_remaining_len) { + throw new Error( + "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len + ); + } + for (j2 = 0; j2 < copy_length; ++j2) { + ringbuffer[pos & ringbuffer_mask] = ringbuffer[pos - distance & ringbuffer_mask]; + if ((pos & ringbuffer_mask) === ringbuffer_mask) { + output.write( + ringbuffer, + ringbuffer_size + ); + } + ++pos; + --meta_block_remaining_len; + } + } + prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]; + prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]; + } + pos &= 1073741823; + } + output.write(ringbuffer, pos & ringbuffer_mask); + } + exports2.BrotliDecompress = BrotliDecompress; + BrotliDictionary.init(); + }, + { + "./bit_reader": 1, + "./context": 2, + "./dictionary": 6, + "./huffman": 7, + "./prefix": 9, + "./streams": 10, + "./transform": 11 + } + ], + 4: [ + function(require2, module2, exports2) { + var base64 = require2("base64-js"); + exports2.init = function() { + var BrotliDecompressBuffer = require2("./decode").BrotliDecompressBuffer; + var compressed = base64.toByteArray( + require2("./dictionary.bin.js") + ); + return BrotliDecompressBuffer(compressed); + }; + }, + { "./decode": 3, "./dictionary.bin.js": 5, "base64-js": 8 } + ], + 5: [ + function(require2, module2, exports2) { + module2.exports = "W5/fcQLn5gKf2XUbAiQ1XULX+TZz6ADToDsgqk6qVfeC0e4m6OO2wcQ1J76ZBVRV1fRkEsdu//62zQsFEZWSTCnMhcsQKlS2qOhuVYYMGCkV0fXWEoMFbESXrKEZ9wdUEsyw9g4bJlEt1Y6oVMxMRTEVbCIwZzJzboK5j8m4YH02qgXYhv1V+PM435sLVxyHJihaJREEhZGqL03txGFQLm76caGO/ovxKvzCby/3vMTtX/459f0igi7WutnKiMQ6wODSoRh/8Lx1V3Q99MvKtwB6bHdERYRY0hStJoMjNeTsNX7bn+Y7e4EQ3bf8xBc7L0BsyfFPK43dGSXpL6clYC/I328h54/VYrQ5i0648FgbGtl837svJ35L3Mot/+nPlNpWgKx1gGXQYqX6n+bbZ7wuyCHKcUok12Xjqub7NXZGzqBx0SD+uziNf87t7ve42jxSKQoW3nyxVrWIGlFShhCKxjpZZ5MeGna0+lBkk+kaN8F9qFBAFgEogyMBdcX/T1W/WnMOi/7ycWUQloEBKGeC48MkiwqJkJO+12eQiOFHMmck6q/IjWW3RZlany23TBm+cNr/84/oi5GGmGBZWrZ6j+zykVozz5fT/QH/Da6WTbZYYPynVNO7kxzuNN2kxKKWche5WveitPKAecB8YcAHz/+zXLjcLzkdDSktNIDwZE9J9X+tto43oJy65wApM3mDzYtCwX9lM+N5VR3kXYo0Z3t0TtXfgBFg7gU8oN0Dgl7fZlUbhNll+0uuohRVKjrEd8egrSndy5/Tgd2gqjA4CAVuC7ESUmL3DZoGnfhQV8uwnpi8EGvAVVsowNRxPudck7+oqAUDkwZopWqFnW1riss0t1z6iCISVKreYGNvQcXv+1L9+jbP8cd/dPUiqBso2q+7ZyFBvENCkkVr44iyPbtOoOoCecWsiuqMSML5lv+vN5MzUr+Dnh73G7Q1YnRYJVYXHRJaNAOByiaK6CusgFdBPE40r0rvqXV7tksKO2DrHYXBTv8P5ysqxEx8VDXUDDqkPH6NNOV/a2WH8zlkXRELSa8P+heNyJBBP7PgsG1EtWtNef6/i+lcayzQwQCsduidpbKfhWUDgAEmyhGu/zVTacI6RS0zTABrOYueemnVa19u9fT23N/Ta6RvTpof5DWygqreCqrDAgM4LID1+1T/taU6yTFVLqXOv+/MuQOFnaF8vLMKD7tKWDoBdALgxF33zQccCcdHx8fKIVdW69O7qHtXpeGr9jbbpFA+qRMWr5hp0s67FPc7HAiLV0g0/peZlW7hJPYEhZyhpSwahnf93/tZgfqZWXFdmdXBzqxGHLrQKxoAY6fRoBhgCRPmmGueYZ5JexTVDKUIXzkG/fqp/0U3hAgQdJ9zumutK6nqWbaqvm1pgu03IYR+G+8s0jDBBz8cApZFSBeuWasyqo2OMDKAZCozS+GWSvL/HsE9rHxooe17U3s/lTE+VZAk4j3dp6uIGaC0JMiqR5CUsabPyM0dOYDR7Ea7ip4USZlya38YfPtvrX/tBlhHilj55nZ1nfN24AOAi9BVtz/Mbn8AEDJCqJgsVUa6nQnSxv2Fs7l/NlCzpfYEjmPrNyib/+t0ei2eEMjvNhLkHCZlci4WhBe7ePZTmzYqlY9+1pxtS4GB+5lM1BHT9tS270EWUDYFq1I0yY/fNiAk4bk9yBgmef/f2k6AlYQZHsNFnW8wBQxCd68iWv7/35bXfz3JZmfGligWAKRjIs3IpzxQ27vAglHSiOzCYzJ9L9A1CdiyFvyR66ucA4jKifu5ehwER26yV7HjKqn5Mfozo7Coxxt8LWWPT47BeMxX8p0Pjb7hZn+6bw7z3Lw+7653j5sI8CLu5kThpMlj1m4c2ch3jGcP1FsT13vuK3qjecKTZk2kHcOZY40UX+qdaxstZqsqQqgXz+QGF99ZJLqr3VYu4aecl1Ab5GmqS8k/GV5b95zxQ5d4EfXUJ6kTS/CXF/aiqKDOT1T7Jz5z0PwDUcwr9clLN1OJGCiKfqvah+h3XzrBOiLOW8wvn8gW6qE8vPxi+Efv+UH55T7PQFVMh6cZ1pZQlzJpKZ7P7uWvwPGJ6DTlR6wbyj3Iv2HyefnRo/dv7dNx+qaa0N38iBsR++Uil7Wd4afwDNsrzDAK4fXZwvEY/jdKuIKXlfrQd2C39dW7ntnRbIp9OtGy9pPBn/V2ASoi/2UJZfS+xuGLH8bnLuPlzdTNS6zdyk8Dt/h6sfOW5myxh1f+zf3zZ3MX/mO9cQPp5pOx967ZA6/pqHvclNfnUFF+rq+Vd7alKr6KWPcIDhpn6v2K6NlUu6LrKo8b/pYpU/Gazfvtwhn7tEOUuXht5rUJdSf6sLjYf0VTYDgwJ81yaqKTUYej/tbHckSRb/HZicwGJqh1mAHB/IuNs9dc9yuvF3D5Xocm3elWFdq5oEy70dYFit79yaLiNjPj5UUcVmZUVhQEhW5V2Z6Cm4HVH/R8qlamRYwBileuh07CbEce3TXa2JmXWBf+ozt319psboobeZhVnwhMZzOeQJzhpTDbP71Tv8HuZxxUI/+ma3XW6DFDDs4+qmpERwHGBd2edxwUKlODRdUWZ/g0GOezrbzOZauFMai4QU6GVHV6aPNBiBndHSsV4IzpvUiiYyg6OyyrL4Dj5q/Lw3N5kAwftEVl9rNd7Jk5PDij2hTH6wIXnsyXkKePxbmHYgC8A6an5Fob/KH5GtC0l4eFso+VpxedtJHdHpNm+Bvy4C79yVOkrZsLrQ3OHCeB0Ra+kBIRldUGlDCEmq2RwXnfyh6Dz+alk6eftI2n6sastRrGwbwszBeDRS/Fa/KwRJkCzTsLr/JCs5hOPE/MPLYdZ1F1fv7D+VmysX6NpOC8aU9F4Qs6HvDyUy9PvFGDKZ/P5101TYHFl8pjj6wm/qyS75etZhhfg0UEL4OYmHk6m6dO192AzoIyPSV9QedDA4Ml23rRbqxMPMxf7FJnDc5FTElVS/PyqgePzmwVZ26NWhRDQ+oaT7ly7ell4s3DypS1s0g+tOr7XHrrkZj9+x/mJBttrLx98lFIaRZzHz4aC7r52/JQ4VjHahY2/YVXZn/QC2ztQb/sY3uRlyc5vQS8nLPGT/n27495i8HPA152z7Fh5aFpyn1GPJKHuPL8Iw94DuW3KjkURAWZXn4EQy89xiKEHN1mk/tkM4gYDBxwNoYvRfE6LFqsxWJtPrDGbsnLMap3Ka3MUoytW0cvieozOmdERmhcqzG+3HmZv2yZeiIeQTKGdRT4HHNxekm1tY+/n06rGmFleqLscSERzctTKM6G9P0Pc1RmVvrascIxaO1CQCiYPE15bD7c3xSeW7gXxYjgxcrUlcbIvO0r+Yplhx0kTt3qafDOmFyMjgGxXu73rddMHpV1wMubyAGcf/v5dLr5P72Ta9lBF+fzMJrMycwv+9vnU3ANIl1cH9tfW7af8u0/HG0vV47jNFXzFTtaha1xvze/s8KMtCYucXc1nzfd/MQydUXn/b72RBt5wO/3jRcMH9BdhC/yctKBIveRYPrNpDWqBsO8VMmP+WvRaOcA4zRMR1PvSoO92rS7pYEv+fZfEfTMzEdM+6X5tLlyxExhqLRkms5EuLovLfx66de5fL2/yX02H52FPVwahrPqmN/E0oVXnsCKhbi/yRxX83nRbUKWhzYceXOntfuXn51NszJ6MO73pQf5Pl4in3ec4JU8hF7ppV34+mm9r1LY0ee/i1O1wpd8+zfLztE0cqBxggiBi5Bu95v9l3r9r/U5hweLn+TbfxowrWDqdJauKd8+q/dH8sbPkc9ttuyO94f7/XK/nHX46MPFLEb5qQlNPvhJ50/59t9ft3LXu7uVaWaO2bDrDCnRSzZyWvFKxO1+vT8MwwunR3bX0CkfPjqb4K9O19tn5X50PvmYpEwHtiW9WtzuV/s76B1zvLLNkViNd8ySxIl/3orfqP90TyTGaf7/rx8jQzeHJXdmh/N6YDvbvmTBwCdxfEQ1NcL6wNMdSIXNq7b1EUzRy1/Axsyk5p22GMG1b+GxFgbHErZh92wuvco0AuOLXct9hvw2nw/LqIcDRRmJmmZzcgUa7JpM/WV/S9IUfbF56TL2orzqwebdRD8nIYNJ41D/hz37Fo11p2Y21wzPcn713qVGhqtevStYfGH4n69OEJtPvbbLYWvscDqc3Hgnu166+tAyLnxrX0Y5zoYjV++1sI7t5kMr02KT/+uwtkc+rZLOf/qn/s3nYCf13Dg8/sB2diJgjGqjQ+TLhxbzyue2Ob7X6/9lUwW7a+lbznHzOYy8LKW1C/uRPbQY3KW/0gO9LXunHLvPL97afba9bFtc9hmz7GAttjVYlCvQAiOwAk/gC5+hkLEs6tr3AZKxLJtOEwk2dLxTYWsIB/j/ToWtIWzo906FrSG8iaqqqqqqiIiIiAgzMzMzNz+AyK+01/zi8n8S+Y1MjoRaQ80WU/G8MBlO+53VPXANrWm4wzGUVZUjjBJZVdhpcfkjsmcWaO+UEldXi1e+zq+HOsCpknYshuh8pOLISJun7TN0EIGW2xTnlOImeecnoGW4raxe2G1T3HEvfYUYMhG+gAFOAwh5nK8mZhwJMmN7r224QVsNFvZ87Z0qatvknklyPDK3Hy45PgVKXji52Wen4d4PlFVVYGnNap+fSpFbK90rYnhUc6n91Q3AY9E0tJOFrcfZtm/491XbcG/jsViUPPX76qmeuiz+qY1Hk7/1VPM405zWVuoheLUimpWYdVzCmUdKHebMdzgrYrb8mL2eeLSnRWHdonfZa8RsOU9F37w+591l5FLYHiOqWeHtE/lWrBHcRKp3uhtr8yXm8LU/5ms+NM6ZKsqu90cFZ4o58+k4rdrtB97NADFbwmEG7lXqvirhOTOqU14xuUF2myIjURcPHrPOQ4lmM3PeMg7bUuk0nnZi67bXsU6H8lhqIo8TaOrEafCO1ARK9PjC0QOoq2BxmMdgYB9G/lIb9++fqNJ2s7BHGFyBNmZAR8J3KCo012ikaSP8BCrf6VI0X5xdnbhHIO+B5rbOyB54zXkzfObyJ4ecwxfqBJMLFc7m59rNcw7hoHnFZ0b00zee+gTqvjm61Pb4xn0kcDX4jvHM0rBXZypG3DCKnD/Waa/ZtHmtFPgO5eETx+k7RrVg3aSwm2YoNXnCs3XPQDhNn+Fia6IlOOuIG6VJH7TP6ava26ehKHQa2T4N0tcZ9dPCGo3ZdnNltsHQbeYt5vPnJezV/cAeNypdml1vCHI8M81nSRP5Qi2+mI8v/sxiZru9187nRtp3f/42NemcONa+4eVC3PCZzc88aZh851CqSsshe70uPxeN/dmYwlwb3trwMrN1Gq8jbnApcVDx/yDPeYs5/7r62tsQ6lLg+DiFXTEhzR9dHqv0iT4tgj825W+H3XiRUNUZT2kR9Ri0+lp+UM3iQtS8uOE23Ly4KYtvqH13jghUntJRAewuzNLDXp8RxdcaA3cMY6TO2IeSFRXezeWIjCqyhsUdMYuCgYTZSKpBype1zRfq8FshvfBPc6BAQWl7/QxIDp3VGo1J3vn42OEs3qznws+YLRXbymyB19a9XBx6n/owcyxlEYyFWCi+kG9F+EyD/4yn80+agaZ9P7ay2Dny99aK2o91FkfEOY8hBwyfi5uwx2y5SaHmG+oq/zl1FX/8irOf8Y3vAcX/6uLP6A6nvMO24edSGPjQc827Rw2atX+z2bKq0CmW9mOtYnr5/AfDa1ZfPaXnKtlWborup7QYx+Or2uWb+N3N//2+yDcXMqIJdf55xl7/vsj4WoPPlxLxtVrkJ4w/tTe3mLdATOOYwxcq52w5Wxz5MbPdVs5O8/lhfE7dPj0bIiPQ3QV0iqm4m3YX8hRfc6jQ3fWepevMqUDJd86Z4vwM40CWHnn+WphsGHfieF02D3tmZvpWD+kBpNCFcLnZhcmmrhpGzzbdA+sQ1ar18OJD87IOKOFoRNznaHPNHUfUNhvY1iU+uhvEvpKHaUn3qK3exVVyX4joipp3um7FmYJWmA+WbIDshRpbVRx5/nqstCgy87FGbfVB8yDGCqS+2qCsnRwnSAN6zgzxfdB2nBT/vZ4/6uxb6oH8b4VBRxiIB93wLa47hG3w2SL/2Z27yOXJFwZpSJaBYyvajA7vRRYNKqljXKpt/CFD/tSMr18DKKbwB0xggBePatl1nki0yvqW5zchlyZmJ0OTxJ3D+fsYJs/mxYN5+Le5oagtcl+YsVvy8kSjI2YGvGjvmpkRS9W2dtXqWnVuxUhURm1lKtou/hdEq19VBp9OjGvHEQSmrpuf2R24mXGheil8KeiANY8fW1VERUfBImb64j12caBZmRViZHbeVMjCrPDg9A90IXrtnsYCuZtRQ0PyrKDjBNOsPfKsg1pA02gHlVr0OXiFhtp6nJqXVzcbfM0KnzC3ggOENPE9VBdmHKN6LYaijb4wXxJn5A0FSDF5j+h1ooZx885Jt3ZKzO5n7Z5WfNEOtyyPqQEnn7WLv5Fis3PdgMshjF1FRydbNyeBbyKI1oN1TRVrVK7kgsb/zjX4NDPIRMctVeaxVB38Vh1x5KbeJbU138AM5KzmZu3uny0ErygxiJF7GVXUrPzFxrlx1uFdAaZFDN9cvIb74qD9tzBMo7L7WIEYK+sla1DVMHpF0F7b3+Y6S+zjvLeDMCpapmJo1weBWuxKF3rOocih1gun4BoJh1kWnV/Jmiq6uOhK3VfKxEHEkafjLgK3oujaPzY6SXg8phhL4TNR1xvJd1Wa0aYFfPUMLrNBDCh4AuGRTbtKMc6Z1Udj8evY/ZpCuMAUefdo69DZUngoqE1P9A3PJfOf7WixCEj+Y6t7fYeHbbxUAoFV3M89cCKfma3fc1+jKRe7MFWEbQqEfyzO2x/wrO2VYH7iYdQ9BkPyI8/3kXBpLaCpU7eC0Yv/am/tEDu7HZpqg0EvHo0nf/R/gRzUWy33/HXMJQeu1GylKmOkXzlCfGFruAcPPhaGqZOtu19zsJ1SO2Jz4Ztth5cBX6mRQwWmDwryG9FUMlZzNckMdK+IoMJv1rOWnBamS2w2KHiaPMPLC15hCZm4KTpoZyj4E2TqC/P6r7/EhnDMhKicZZ1ZwxuC7DPzDGs53q8gXaI9kFTK+2LTq7bhwsTbrMV8Rsfua5lMS0FwbTitUVnVa1yTb5IX51mmYnUcP9wPr8Ji1tiYJeJV9GZTrQhF7vvdU2OTU42ogJ9FDwhmycI2LIg++03C6scYhUyUuMV5tkw6kGUoL+mjNC38+wMdWNljn6tGPpRES7veqrSn5TRuv+dh6JVL/iDHU1db4c9WK3++OrH3PqziF916UMUKn8G67nN60GfWiHrXYhUG3yVWmyYak59NHj8t1smG4UDiWz2rPHNrKnN4Zo1LBbr2/eF9YZ0n0blx2nG4X+EKFxvS3W28JESD+FWk61VCD3z/URGHiJl++7TdBwkCj6tGOH3qDb0QqcOF9Kzpj0HUb/KyFW3Yhj2VMKJqGZleFBH7vqvf7WqLC3XMuHV8q8a4sTFuxUtkD/6JIBvKaVjv96ndgruKZ1k/BHzqf2K9fLk7HGXANyLDd1vxkK/i055pnzl+zw6zLnwXlVYVtfmacJgEpRP1hbGgrYPVN6v2lG+idQNGmwcKXu/8xEj/P6qe/sB2WmwNp6pp8jaISMkwdleFXYK55NHWLTTbutSUqjBfDGWo/Yg918qQ+8BRZSAHZbfuNZz2O0sov1Ue4CWlVg3rFhM3Kljj9ksGd/NUhk4nH+a5UN2+1i8+NM3vRNp7uQ6sqexSCukEVlVZriHNqFi5rLm9TMWa4qm3idJqppQACol2l4VSuvWLfta4JcXy3bROPNbXOgdOhG47LC0CwW/dMlSx4Jf17aEU3yA1x9p+Yc0jupXgcMuYNku64iYOkGToVDuJvlbEKlJqsmiHbvNrIVZEH+yFdF8DbleZ6iNiWwMqvtMp/mSpwx5KxRrT9p3MAPTHGtMbfvdFhyj9vhaKcn3At8Lc16Ai+vBcSp1ztXi7rCJZx/ql7TXcclq6Q76UeKWDy9boS0WHIjUuWhPG8LBmW5y2rhuTpM5vsLt+HOLh1Yf0DqXa9tsfC+kaKt2htA0ai/L2i7RKoNjEwztkmRU0GfgW1TxUvPFhg0V7DdfWJk5gfrccpYv+MA9M0dkGTLECeYwUixRzjRFdmjG7zdZIl3XKB9YliNKI31lfa7i2JG5C8Ss+rHe0D7Z696/V3DEAOWHnQ9yNahMUl5kENWS6pHKKp2D1BaSrrHdE1w2qNxIztpXgUIrF0bm15YML4b6V1k+GpNysTahKMVrrS85lTVo9OGJ96I47eAy5rYWpRf/mIzeoYU1DKaQCTUVwrhHeyNoDqHel+lLxr9WKzhSYw7vrR6+V5q0pfi2k3L1zqkubY6rrd9ZLvSuWNf0uqnkY+FpTvFzSW9Fp0b9l8JA7THV9eCi/PY/SCZIUYx3BU2alj7Cm3VV6eYpios4b6WuNOJdYXUK3zTqj5CVG2FqYM4Z7CuIU0qO05XR0d71FHM0YhZmJmTRfLlXEumN82BGtzdX0S19t1e+bUieK8zRmqpa4Qc5TSjifmaQsY2ETLjhI36gMR1+7qpjdXXHiceUekfBaucHShAOiFXmv3sNmGQyU5iVgnoocuonQXEPTFwslHtS8R+A47StI9wj0iSrtbi5rMysczFiImsQ+bdFClnFjjpXXwMy6O7qfjOr8Fb0a7ODItisjnn3EQO16+ypd1cwyaAW5Yzxz5QknfMO7643fXW/I9y3U2xH27Oapqr56Z/tEzglj6IbT6HEHjopiXqeRbe5mQQvxtcbDOVverN0ZgMdzqRYRjaXtMRd56Q4cZSmdPvZJdSrhJ1D9zNXPqAEqPIavPdfubt5oke2kmv0dztIszSv2VYuoyf1UuopbsYb+uX9h6WpwjpgtZ6fNNawNJ4q8O3CFoSbioAaOSZMx2GYaPYB+rEb6qjQiNRFQ76TvwNFVKD+BhH9VhcKGsXzmMI7BptU/CNWolM7YzROvpFAntsiWJp6eR2d3GarcYShVYSUqhmYOWj5E96NK2WvmYNTeY7Zs4RUEdv9h9QT4EseKt6LzLrqEOs3hxAY1MaNWpSa6zZx8F3YOVeCYMS88W+CYHDuWe4yoc6YK+djDuEOrBR5lvh0r+Q9uM88lrjx9x9AtgpQVNE8r+3O6Gvw59D+kBF/UMXyhliYUtPjmvXGY6Dk3x+kEOW+GtdMVC4EZTqoS/jmR0P0LS75DOc/w2vnri97M4SdbZ8qeU7gg8DVbERkU5geaMQO3mYrSYyAngeUQqrN0C0/vsFmcgWNXNeidsTAj7/4MncJR0caaBUpbLK1yBCBNRjEv6KvuVSdpPnEMJdsRRtqJ+U8tN1gXA4ePHc6ZT0eviI73UOJF0fEZ8YaneAQqQdGphNvwM4nIqPnXxV0xA0fnCT+oAhJuyw/q8jO0y8CjSteZExwBpIN6SvNp6A5G/abi6egeND/1GTguhuNjaUbbnSbGd4L8937Ezm34Eyi6n1maeOBxh3PI0jzJDf5mh/BsLD7F2GOKvlA/5gtvxI3/eV4sLfKW5Wy+oio+es/u6T8UU+nsofy57Icb/JlZHPFtCgd/x+bwt3ZT+xXTtTtTrGAb4QehC6X9G+8YT+ozcLxDsdCjsuOqwPFnrdLYaFc92Ui0m4fr39lYmlCaqTit7G6O/3kWDkgtXjNH4BiEm/+jegQnihOtfffn33WxsFjhfMd48HT+f6o6X65j7XR8WLSHMFkxbvOYsrRsF1bowDuSQ18Mkxk4qz2zoGPL5fu9h2Hqmt1asl3Q3Yu3szOc+spiCmX4AETBM3pLoTYSp3sVxahyhL8eC4mPN9k2x3o0xkiixIzM3CZFzf5oR4mecQ5+ax2wCah3/crmnHoqR0+KMaOPxRif1oEFRFOO/kTPPmtww+NfMXxEK6gn6iU32U6fFruIz8Q4WgljtnaCVTBgWx7diUdshC9ZEa5yKpRBBeW12r/iNc/+EgNqmhswNB8SBoihHXeDF7rrWDLcmt3V8GYYN7pXRy4DZjj4DJuUBL5iC3DQAaoo4vkftqVTYRGLS3mHZ7gdmdTTqbgNN/PTdTCOTgXolc88MhXAEUMdX0iy1JMuk5wLsgeu0QUYlz2S4skTWwJz6pOm/8ihrmgGfFgri+ZWUK2gAPHgbWa8jaocdSuM4FJYoKicYX/ZSENkg9Q1ZzJfwScfVnR2DegOGwCvmogaWJCLQepv9WNlU6QgsmOwICquU28Mlk3d9W5E81lU/5Ez0LcX6lwKMWDNluNKfBDUy/phJgBcMnfkh9iRxrdOzgs08JdPB85Lwo+GUSb4t3nC+0byqMZtO2fQJ4U2zGIr49t/28qmmGv2RanDD7a3FEcdtutkW8twwwlUSpb8QalodddbBfNHKDQ828BdE7OBgFdiKYohLawFYqpybQoxATZrheLhdI7+0Zlu9Q1myRcd15r9UIm8K2LGJxqTegntqNVMKnf1a8zQiyUR1rxoqjiFxeHxqFcYUTHfDu7rhbWng6qOxOsI+5A1p9mRyEPdVkTlE24vY54W7bWc6jMgZvNXdfC9/9q7408KDsbdL7Utz7QFSDetz2picArzrdpL8OaCHC9V26RroemtDZ5yNM/KGkWMyTmfnInEvwtSD23UcFcjhaE3VKzkoaEMKGBft4XbIO6forTY1lmGQwVmKicBCiArDzE+1oIxE08fWeviIOD5TznqH+OoHadvoOP20drMPe5Irg3XBQziW2XDuHYzjqQQ4wySssjXUs5H+t3FWYMHppUnBHMx/nYIT5d7OmjDbgD9F6na3m4l7KdkeSO3kTEPXafiWinogag7b52taiZhL1TSvBFmEZafFq2H8khQaZXuitCewT5FBgVtPK0j4xUHPfUz3Q28eac1Z139DAP23dgki94EC8vbDPTQC97HPPSWjUNG5tWKMsaxAEMKC0665Xvo1Ntd07wCLNf8Q56mrEPVpCxlIMVlQlWRxM3oAfpgIc+8KC3rEXUog5g06vt7zgXY8grH7hhwVSaeuvC06YYRAwpbyk/Unzj9hLEZNs2oxPQB9yc+GnL6zTgq7rI++KDJwX2SP8Sd6YzTuw5lV/kU6eQxRD12omfQAW6caTR4LikYkBB1CMOrvgRr/VY75+NSB40Cni6bADAtaK+vyxVWpf9NeKJxN2KYQ8Q2xPB3K1s7fuhvWbr2XpgW044VD6DRs0qXoqKf1NFsaGvKJc47leUV3pppP/5VTKFhaGuol4Esfjf5zyCyUHmHthChcYh4hYLQF+AFWsuq4t0wJyWgdwQVOZiV0efRHPoK5+E1vjz9wTJmVkITC9oEstAsyZSgE/dbicwKr89YUxKZI+owD205Tm5lnnmDRuP/JnzxX3gMtlrcX0UesZdxyQqYQuEW4R51vmQ5xOZteUd8SJruMlTUzhtVw/Nq7eUBcqN2/HVotgfngif60yKEtoUx3WYOZlVJuJOh8u59fzSDPFYtQgqDUAGyGhQOAvKroXMcOYY0qjnStJR/G3aP+Jt1sLVlGV8POwr/6OGsqetnyF3TmTqZjENfnXh51oxe9qVUw2M78EzAJ+IM8lZ1MBPQ9ZWSVc4J3mWSrLKrMHReA5qdGoz0ODRsaA+vwxXA2cAM4qlfzBJA6581m4hzxItQw5dxrrBL3Y6kCbUcFxo1S8jyV44q//+7ASNNudZ6xeaNOSIUffqMn4A9lIjFctYn2gpEPAb3f7p3iIBN8H14FUGQ9ct2hPsL+cEsTgUrR47uJVN4n4wt/wgfwwHuOnLd4yobkofy8JvxSQTA7rMpDIc608SlZFJfZYcmbT0tAHpPE8MrtQ42siTUNWxqvWZOmvu9f0JPoQmg+6l7sZWwyfi6PXkxJnwBraUG0MYG4zYHQz3igy/XsFkx5tNQxw43qvI9dU3f0DdhOUlHKjmi1VAr2Kiy0HZwD8VeEbhh0OiDdMYspolQsYdSwjCcjeowIXNZVUPmL2wwIkYhmXKhGozdCJ4lRKbsf4NBh/XnQoS92NJEWOVOFs2YhN8c5QZFeK0pRdAG40hqvLbmoSA8xQmzOOEc7wLcme9JOsjPCEgpCwUs9E2DohMHRhUeyGIN6TFvrbny8nDuilsDpzrH5mS76APoIEJmItS67sQJ+nfwddzmjPxcBEBBCw0kWDwd0EZCkNeOD7NNQhtBm7KHL9mRxj6U1yWU2puzlIDtpYxdH4ZPeXBJkTGAJfUr/oTCz/iypY6uXaR2V1doPxJYlrw2ghH0D5gbrhFcIxzYwi4a/4hqVdf2DdxBp6vGYDjavxMAAoy+1+3aiO6S3W/QAKNVXagDtvsNtx7Ks+HKgo6U21B+QSZgIogV5Bt+BnXisdVfy9VyXV+2P5fMuvdpAjM1o/K9Z+XnE4EOCrue+kcdYHqAQ0/Y/OmNlQ6OI33jH/uD1RalPaHpJAm2av0/xtpqdXVKNDrc9F2izo23Wu7firgbURFDNX9eGGeYBhiypyXZft2j3hTvzE6PMWKsod//rEILDkzBXfi7xh0eFkfb3/1zzPK/PI5Nk3FbZyTl4mq5BfBoVoqiPHO4Q4QKZAlrQ3MdNfi3oxIjvsM3kAFv3fdufurqYR3PSwX/mpGy/GFI/B2MNPiNdOppWVbs/gjF3YH+QA9jMhlAbhvasAHstB0IJew09iAkmXHl1/TEj+jvHOpOGrPRQXbPADM+Ig2/OEcUcpgPTItMtW4DdqgfYVI/+4hAFWYjUGpOP/UwNuB7+BbKOcALbjobdgzeBQfjgNSp2GOpxzGLj70Vvq5cw2AoYENwKLUtJUX8sGRox4dVa/TN4xKwaKcl9XawQR/uNus700Hf17pyNnezrUgaY9e4MADhEDBpsJT6y1gDJs1q6wlwGhuUzGR7C8kgpjPyHWwsvrf3yn1zJEIRa5eSxoLAZOCR9xbuztxFRJW9ZmMYfCFJ0evm9F2fVnuje92Rc4Pl6A8bluN8MZyyJGZ0+sNSb//DvAFxC2BqlEsFwccWeAl6CyBcQV1bx4mQMBP1Jxqk1EUADNLeieS2dUFbQ/c/kvwItbZ7tx0st16viqd53WsRmPTKv2AD8CUnhtPWg5aUegNpsYgasaw2+EVooeNKmrW3MFtj76bYHJm5K9gpAXZXsE5U8DM8XmVOSJ1F1WnLy6nQup+jx52bAb+rCq6y9WXl2B2oZDhfDkW7H3oYfT/4xx5VncBuxMXP2lNfhUVQjSSzSRbuZFE4vFawlzveXxaYKVs8LpvAb8IRYF3ZHiRnm0ADeNPWocwxSzNseG7NrSEVZoHdKWqaGEBz1N8Pt7kFbqh3LYmAbm9i1IChIpLpM5AS6mr6OAPHMwwznVy61YpBYX8xZDN/a+lt7n+x5j4bNOVteZ8lj3hpAHSx1VR8vZHec4AHO9XFCdjZ9eRkSV65ljMmZVzaej2qFn/qt1lvWzNZEfHxK3qOJrHL6crr0CRzMox5f2e8ALBB4UGFZKA3tN6F6IXd32GTJXGQ7DTi9j/dNcLF9jCbDcWGKxoKTYblIwbLDReL00LRcDPMcQuXLMh5YzgtfjkFK1DP1iDzzYYVZz5M/kWYRlRpig1htVRjVCknm+h1M5LiEDXOyHREhvzCGpFZjHS0RsK27o2avgdilrJkalWqPW3D9gmwV37HKmfM3F8YZj2ar+vHFvf3B8CRoH4kDHIK9mrAg+owiEwNjjd9V+FsQKYR8czJrUkf7Qoi2YaW6EVDZp5zYlqiYtuXOTHk4fAcZ7qBbdLDiJq0WNV1l2+Hntk1mMWvxrYmc8kIx8G3rW36J6Ra4lLrTOCgiOihmow+YnzUT19jbV2B3RWqSHyxkhmgsBqMYWvOcUom1jDQ436+fcbu3xf2bbeqU/ca+C4DOKE+e3qvmeMqW3AxejfzBRFVcwVYPq4L0APSWWoJu+5UYX4qg5U6YTioqQGPG9XrnuZ/BkxuYpe6Li87+18EskyQW/uA+uk2rpHpr6hut2TlVbKgWkFpx+AZffweiw2+VittkEyf/ifinS/0ItRL2Jq3tQOcxPaWO2xrG68GdFoUpZgFXaP2wYVtRc6xYCfI1CaBqyWpg4bx8OHBQwsV4XWMibZZ0LYjWEy2IxQ1mZrf1/UNbYCJplWu3nZ4WpodIGVA05d+RWSS+ET9tH3RfGGmNI1cIY7evZZq7o+a0bjjygpmR3mVfalkT/SZGT27Q8QGalwGlDOS9VHCyFAIL0a1Q7JiW3saz9gqY8lqKynFrPCzxkU4SIfLc9VfCI5edgRhDXs0edO992nhTKHriREP1NJC6SROMgQ0xO5kNNZOhMOIT99AUElbxqeZF8A3xrfDJsWtDnUenAHdYWSwAbYjFqQZ+D5gi3hNK8CSxU9i6f6ClL9IGlj1OPMQAsr84YG6ijsJpCaGWj75c3yOZKBB9mNpQNPUKkK0D6wgLH8MGoyRxTX6Y05Q4AnYNXMZwXM4eij/9WpsM/9CoRnFQXGR6MEaY+FXvXEO3RO0JaStk6OXuHVATHJE+1W+TU3bSZ2ksMtqjO0zfSJCdBv7y2d8DMx6TfVme3q0ZpTKMMu4YL/t7ciTNtdDkwPogh3Cnjx7qk08SHwf+dksZ7M2vCOlfsF0hQ6J4ehPCaHTNrM/zBSOqD83dBEBCW/F/LEmeh0nOHd7oVl3/Qo/9GUDkkbj7yz+9cvvu+dDAtx8NzCDTP4iKdZvk9MWiizvtILLepysflSvTLFBZ37RLwiriqyRxYv/zrgFd/9XVHh/OmzBvDX4mitMR/lUavs2Vx6cR94lzAkplm3IRNy4TFfu47tuYs9EQPIPVta4P64tV+sZ7n3ued3cgEx2YK+QL5+xms6osk8qQbTyuKVGdaX9FQqk6qfDnT5ykxk0VK7KZ62b6DNDUfQlqGHxSMKv1P0XN5BqMeKG1P4Wp5QfZDUCEldppoX0U6ss2jIko2XpURKCIhfaOqLPfShdtS37ZrT+jFRSH2xYVV1rmT/MBtRQhxiO4MQ3iAGlaZi+9PWBEIXOVnu9jN1f921lWLZky9bqbM3J2MAAI9jmuAx3gyoEUa6P2ivs0EeNv/OR+AX6q5SW6l5HaoFuS6jr6yg9limu+P0KYKzfMXWcQSfTXzpOzKEKpwI3YGXZpSSy2LTlMgfmFA3CF6R5c9xWEtRuCg2ZPUQ2Nb6dRFTNd4TfGHrnEWSKHPuRyiJSDAZ+KX0VxmSHjGPbQTLVpqixia2uyhQ394gBMt7C3ZAmxn/DJS+l1fBsAo2Eir/C0jG9csd4+/tp12pPc/BVJGaK9mfvr7M/CeztrmCO5qY06Edi4xAGtiEhnWAbzLy2VEyazE1J5nPmgU4RpW4Sa0TnOT6w5lgt3/tMpROigHHmexBGAMY0mdcDbDxWIz41NgdD6oxgHsJRgr5RnT6wZAkTOcStU4NMOQNemSO7gxGahdEsC+NRVGxMUhQmmM0llWRbbmFGHzEqLM4Iw0H7577Kyo+Zf+2cUFIOw93gEY171vQaM0HLwpjpdRR6Jz7V0ckE7XzYJ0TmY9znLdzkva0vNrAGGT5SUZ5uaHDkcGvI0ySpwkasEgZPMseYcu85w8HPdSNi+4T6A83iAwDbxgeFcB1ZM2iGXzFcEOUlYVrEckaOyodfvaYSQ7GuB4ISE0nYJc15X/1ciDTPbPCgYJK55VkEor4LvzL9S2WDy4xj+6FOqVyTAC2ZNowheeeSI5hA/02l8UYkv4nk9iaVn+kCVEUstgk5Hyq+gJm6R9vG3rhuM904he/hFmNQaUIATB1y3vw+OmxP4X5Yi6A5I5jJufHCjF9+AGNwnEllZjUco6XhsO5T5+R3yxz5yLVOnAn0zuS+6zdj0nTJbEZCbXJdtpfYZfCeCOqJHoE2vPPFS6eRLjIJlG69X93nfR0mxSFXzp1Zc0lt/VafDaImhUMtbnqWVb9M4nGNQLN68BHP7AR8Il9dkcxzmBv8PCZlw9guY0lurbBsmNYlwJZsA/B15/HfkbjbwPddaVecls/elmDHNW2r4crAx43feNkfRwsaNq/yyJ0d/p5hZ6AZajz7DBfUok0ZU62gCzz7x8eVfJTKA8IWn45vINLSM1q+HF9CV9qF3zP6Ml21kPPL3CXzkuYUlnSqT+Ij4tI/od5KwIs+tDajDs64owN7tOAd6eucGz+KfO26iNcBFpbWA5732bBNWO4kHNpr9D955L61bvHCF/mwSrz6eQaDjfDEANqGMkFc+NGxpKZzCD2sj/JrHd+zlPQ8Iz7Q+2JVIiVCuCKoK/hlAEHzvk/Piq3mRL1rT/fEh9hoT5GJmeYswg1otiKydizJ/fS2SeKHVu6Z3JEHjiW8NaTQgP5xdBli8nC57XiN9hrquBu99hn9zqwo92+PM2JXtpeVZS0PdqR5mDyDreMMtEws+CpwaRyyzoYtfcvt9PJIW0fJVNNi/FFyRsea7peLvJrL+5b4GOXJ8tAr+ATk9f8KmiIsRhqRy0vFzwRV3Z5dZ3QqIU8JQ/uQpkJbjMUMFj2F9sCFeaBjI4+fL/oN3+LQgjI4zuAfQ+3IPIPFQBccf0clJpsfpnBxD84atwtupkGqKvrH7cGNl/QcWcSi6wcVDML6ljOgYbo+2BOAWNNjlUBPiyitUAwbnhFvLbnqw42kR3Yp2kv2dMeDdcGOX5kT4S6M44KHEB/SpCfl7xgsUvs+JNY9G3O2X/6FEt9FyAn57lrbiu+tl83sCymSvq9eZbe9mchL7MTf/Ta78e80zSf0hYY5eUU7+ff14jv7Xy8qjzfzzzvaJnrIdvFb5BLWKcWGy5/w7+vV2cvIfwHqdTB+RuJK5oj9mbt0Hy94AmjMjjwYNZlNS6uiyxNnwNyt3gdreLb64p/3+08nXkb92LTkkRgFOwk1oGEVllcOj5lv1hfAZywDows0944U8vUFw+A/nuVq/UCygsrmWIBnHyU01d0XJPwriEOvx/ISK6Pk4y2w0gmojZs7lU8TtakBAdne4v/aNxmMpK4VcGMp7si0yqsiolXRuOi1Z1P7SqD3Zmp0CWcyK4Ubmp2SXiXuI5nGLCieFHKHNRIlcY3Pys2dwMTYCaqlyWSITwr2oGXvyU3h1Pf8eQ3w1bnD7ilocVjYDkcXR3Oo1BXgMLTUjNw2xMVwjtp99NhSVc5aIWrDQT5DHPKtCtheBP4zHcw4dz2eRdTMamhlHhtfgqJJHI7NGDUw1XL8vsSeSHyKqDtqoAmrQqsYwvwi7HW3ojWyhIa5oz5xJTaq14NAzFLjVLR12rRNUQ6xohDnrWFb5bG9yf8aCD8d5phoackcNJp+Dw3Due3RM+5Rid7EuIgsnwgpX0rUWh/nqPtByMhMZZ69NpgvRTKZ62ViZ+Q7Dp5r4K0d7EfJuiy06KuIYauRh5Ecrhdt2QpTS1k1AscEHvapNbU3HL1F2TFyR33Wxb5MvH5iZsrn3SDcsxlnnshO8PLwmdGN+paWnQuORtZGX37uhFT64SeuPsx8UOokY6ON85WdQ1dki5zErsJGazcBOddWJEKqNPiJpsMD1GrVLrVY+AOdPWQneTyyP1hRX/lMM4ZogGGOhYuAdr7F/DOiAoc++cn5vlf0zkMUJ40Z1rlgv9BelPqVOpxKeOpzKdF8maK+1Vv23MO9k/8+qpLoxrIGH2EDQlnGmH8CD31G8QqlyQIcpmR5bwmSVw9/Ns6IHgulCRehvZ/+VrM60Cu/r3AontFfrljew74skYe2uyn7JKQtFQBQRJ9ryGic/zQOsbS4scUBctA8cPToQ3x6ZBQu6DPu5m1bnCtP8TllLYA0UTQNVqza5nfew3Mopy1GPUwG5jsl0OVXniPmAcmLqO5HG8Hv3nSLecE9oOjPDXcsTxoCBxYyzBdj4wmnyEV4kvFDunipS8SSkvdaMnTBN9brHUR8xdmmEAp/Pdqk9uextp1t+JrtXwpN/MG2w/qhRMpSNxQ1uhg/kKO30eQ/FyHUDkWHT8V6gGRU4DhDMxZu7xXij9Ui6jlpWmQCqJg3FkOTq3WKneCRYZxBXMNAVLQgHXSCGSqNdjebY94oyIpVjMYehAiFx/tqzBXFHZaL5PeeD74rW5OysFoUXY8sebUZleFTUa/+zBKVTFDopTReXNuZq47QjkWnxjirCommO4L/GrFtVV21EpMyw8wyThL5Y59d88xtlx1g1ttSICDwnof6lt/6zliPzgVUL8jWBjC0o2D6Kg+jNuThkAlaDJsq/AG2aKA//A76avw2KNqtv223P+Wq3StRDDNKFFgtsFukYt1GFDWooFVXitaNhb3RCyJi4cMeNjROiPEDb4k+G3+hD8tsg+5hhmSc/8t2JTSwYoCzAI75doq8QTHe+E/Tw0RQSUDlU+6uBeNN3h6jJGX/mH8oj0i3caCNsjvTnoh73BtyZpsflHLq6AfwJNCDX4S98h4+pCOhGKDhV3rtkKHMa3EG4J9y8zFWI4UsfNzC/Rl5midNn7gwoN9j23HGCQQ+OAZpTTPMdiVow740gIyuEtd0qVxMyNXhHcnuXRKdw5wDUSL358ktjMXmAkvIB73BLa1vfF9BAUZInPYJiwxqFWQQBVk7gQH4ojfUQ/KEjn+A/WR6EEe4CtbpoLe1mzHkajgTIoE0SLDHVauKhrq12zrAXBGbPPWKCt4DGedq3JyGRbmPFW32bE7T20+73BatV/qQhhBWfWBFHfhYWXjALts38FemnoT+9bn1jDBMcUMmYgSc0e7GQjv2MUBwLU8ionCpgV+Qrhg7iUIfUY6JFxR0Y+ZTCPM+rVuq0GNLyJXX6nrUTt8HzFBRY1E/FIm2EeVA9NcXrj7S6YYIChVQCWr/m2fYUjC4j0XLkzZ8GCSLfmkW3PB/xq+nlXsKVBOj7vTvqKCOMq7Ztqr3cQ+N8gBnPaAps+oGwWOkbuxnRYj/x/WjiDclVrs22xMK4qArE1Ztk1456kiJriw6abkNeRHogaPRBgbgF9Z8i/tbzWELN4CvbqtrqV9TtGSnmPS2F9kqOIBaazHYaJ9bi3AoDBvlZasMluxt0BDXfhp02Jn411aVt6S4TUB8ZgFDkI6TP6gwPY85w+oUQSsjIeXVminrwIdK2ZAawb8Se6XOJbOaliQxHSrnAeONDLuCnFejIbp4YDtBcQCwMsYiRZfHefuEJqJcwKTTJ8sx5hjHmJI1sPFHOr6W9AhZ2NAod38mnLQk1gOz2LCAohoQbgMbUK9RMEA3LkiF7Sr9tLZp6lkciIGhE2V546w3Mam53VtVkGbB9w0Yk2XiRnCmbpxmHr2k4eSC0RuNbjNsUfDIfc8DZvRvgUDe1IlKdZTzcT4ZGEb53dp8VtsoZlyXzLHOdAbsp1LPTVaHvLA0GYDFMbAW/WUBfUAdHwqLFAV+3uHvYWrCfhUOR2i89qvCBoOb48usAGdcF2M4aKn79k/43WzBZ+xR1L0uZfia70XP9soQReeuhZiUnXFDG1T8/OXNmssTSnYO+3kVLAgeiY719uDwL9FQycgLPessNihMZbAKG7qwPZyG11G1+ZA3jAX2yddpYfmaKBlmfcK/V0mwIRUDC0nJSOPUl2KB8h13F4dlVZiRhdGY5farwN+f9hEb1cRi41ZcGDn6Xe9MMSTOY81ULJyXIHSWFIQHstVYLiJEiUjktlHiGjntN5/btB8Fu+vp28zl2fZXN+dJDyN6EXhS+0yzqpl/LSJNEUVxmu7BsNdjAY0jVsAhkNuuY0E1G48ej25mSt+00yPbQ4SRCVkIwb6ISvYtmJRPz9Zt5dk76blf+lJwAPH5KDF+vHAmACLoCdG2Adii6dOHnNJnTmZtoOGO8Q1jy1veMw6gbLFToQmfJa7nT7Al89mRbRkZZQxJTKgK5Kc9INzmTJFp0tpAPzNmyL/F08bX3nhCumM/cR/2RPn9emZ3VljokttZD1zVWXlUIqEU7SLk5I0lFRU0AcENXBYazNaVzsVHA/sD3o9hm42wbHIRb/BBQTKzAi8s3+bMtpOOZgLdQzCYPfX3UUxKd1WYVkGH7lh/RBBgMZZwXzU9+GYxdBqlGs0LP+DZ5g2BWNh6FAcR944B+K/JTWI3t9YyVyRhlP4CCoUk/mmF7+r2pilVBjxXBHFaBfBtr9hbVn2zDuI0kEOG3kBx8CGdPOjX1ph1POOZJUO1JEGG0jzUy2tK4X0CgVNYhmkqqQysRNtKuPdCJqK3WW57kaV17vXgiyPrl4KEEWgiGF1euI4QkSFHFf0TDroQiLNKJiLbdhH0YBhriRNCHPxSqJmNNoketaioohqMglh6wLtEGWSM1EZbQg72h0UJAIPVFCAJOThpQGGdKfFovcwEeiBuZHN2Ob4uVM7+gwZLz1D9E7ta4RmMZ24OBBAg7Eh6dLXGofZ4U2TFOCQMKjwhVckjrydRS+YaqCw1kYt6UexuzbNEDyYLTZnrY1PzsHZJT4U+awO2xlqTSYu6n/U29O2wPXgGOEKDMSq+zTUtyc8+6iLp0ivav4FKx+xxVy4FxhIF/pucVDqpsVe2jFOfdZhTzLz2QjtzvsTCvDPU7bzDH2eXVKUV9TZ+qFtaSSxnYgYdXKwVreIgvWhT9eGDB2OvnWyPLfIIIfNnfIxU8nW7MbcH05nhlsYtaW9EZRsxWcKdEqInq1DiZPKCz7iGmAU9/ccnnQud2pNgIGFYOTAWjhIrd63aPDgfj8/sdlD4l+UTlcxTI9jbaMqqN0gQxSHs60IAcW3cH4p3V1aSciTKB29L1tz2eUQhRiTgTvmqc+sGtBNh4ky0mQJGsdycBREP+fAaSs1EREDVo5gvgi5+aCN7NECw30owbCc1mSpjiahyNVwJd1jiGgzSwfTpzf2c5XJvG/g1n0fH88KHNnf+u7ZiRMlXueSIsloJBUtW9ezvsx9grfsX/FNxnbxU1Lvg0hLxixypHKGFAaPu0xCD8oDTeFSyfRT6s8109GMUZL8m2xXp8X2dpPCWWdX84iga4BrTlOfqox4shqEgh/Ht4qRst52cA1xOIUuOxgfUivp6v5f8IVyaryEdpVk72ERAwdT4aoY1usBgmP+0m06Q216H/nubtNYxHaOIYjcach3A8Ez/zc0KcShhel0HCYjFsA0FjYqyJ5ZUH1aZw3+zWC0hLpM6GDfcAdn9fq2orPmZbW6XXrf+Krc9RtvII5jeD3dFoT1KwZJwxfUMvc5KLfn8rROW23Jw89sJ2a5dpB3qWDUBWF2iX8OCuKprHosJ2mflBR+Wqs86VvgI/XMnsqb97+VlKdPVysczPj8Jhzf+WCvGBHijAqYlavbF60soMWlHbvKT+ScvhprgeTln51xX0sF+Eadc/l2s2a5BgkVbHYyz0E85p0LstqH+gEGiR84nBRRFIn8hLSZrGwqjZ3E29cuGi+5Z5bp7EM8MWFa9ssS/vy4VrDfECSv7DSU84DaP0sXI3Ap4lWznQ65nQoTKRWU30gd7Nn8ZowUvGIx4aqyXGwmA/PB4qN8msJUODezUHEl0VP9uo+cZ8vPFodSIB4C7lQYjEFj8yu49C2KIV3qxMFYTevG8KqAr0TPlkbzHHnTpDpvpzziAiNFh8xiT7C/TiyH0EguUw4vxAgpnE27WIypV+uFN2zW7xniF/n75trs9IJ5amB1zXXZ1LFkJ6GbS/dFokzl4cc2mamVwhL4XU0Av5gDWAl+aEWhAP7t2VIwU+EpvfOPDcLASX7H7lZpXA2XQfbSlD4qU18NffNPoAKMNSccBfO9YVVgmlW4RydBqfHAV7+hrZ84WJGho6bNT0YMhxxLdOx/dwGj0oyak9aAkNJ8lRJzUuA8sR+fPyiyTgUHio5+Pp+YaKlHrhR41jY5NESPS3x+zTMe0S2HnLOKCOQPpdxKyviBvdHrCDRqO+l96HhhNBLXWv4yEMuEUYo8kXnYJM8oIgVM4XJ+xXOev4YbWeqsvgq0lmw4/PiYr9sYLt+W5EAuYSFnJEan8CwJwbtASBfLBBpJZiRPor/aCJBZsM+MhvS7ZepyHvU8m5WSmaZnxuLts8ojl6KkS8oSAHkq5GWlCB/NgJ5W3rO2Cj1MK7ahxsCrbTT3a0V/QQH+sErxV4XUWDHx0kkFy25bPmBMBQ6BU3HoHhhYcJB9JhP6NXUWKxnE0raXHB6U9KHpWdQCQI72qevp5fMzcm+AvC85rsynVQhruDA9fp9COe7N56cg1UKGSas89vrN+WlGLYTwi5W+0xYdKEGtGCeNJwXKDU0XqU5uQYnWsMwTENLGtbQMvoGjIFIEMzCRal4rnBAg7D/CSn8MsCvS+FDJJAzoiioJEhZJgAp9n2+1Yznr7H+6eT4YkJ9Mpj60ImcW4i4iHDLn9RydB8dx3QYm3rsX6n4VRrZDsYK6DCGwkwd5n3/INFEpk16fYpP6JtMQpqEMzcOfQGAHXBTEGzuLJ03GYQL9bmV2/7ExDlRf+Uvf1sM2frRtCWmal12pMgtonvSCtR4n1CLUZRdTHDHP1Otwqd+rcdlavnKjUB/OYXQHUJzpNyFoKpQK+2OgrEKpGyIgIBgn2y9QHnTJihZOpEvOKIoHAMGAXHmj21Lym39Mbiow4IF+77xNuewziNVBxr6KD5e+9HzZSBIlUa/AmsDFJFXeyrQakR3FwowTGcADJHcEfhGkXYNGSYo4dh4bxwLM+28xjiqkdn0/3R4UEkvcBrBfn/SzBc1XhKM2VPlJgKSorjDac96V2UnQYXl1/yZPT4DVelgO+soMjexXwYO58VLl5xInQUZI8jc3H2CPnCNb9X05nOxIy4MlecasTqGK6s2az4RjpF2cQP2G28R+7wDPsZDZC/kWtjdoHC7SpdPmqQrUAhMwKVuxCmYTiD9q/O7GHtZvPSN0CAUQN/rymXZNniYLlJDE70bsk6Xxsh4kDOdxe7A2wo7P9F5YvqqRDI6brf79yPCSp4I0jVoO4YnLYtX5nzspR5WB4AKOYtR1ujXbOQpPyYDvfRE3FN5zw0i7reehdi7yV0YDRKRllGCGRk5Yz+Uv1fYl2ZwrnGsqsjgAVo0xEUba8ohjaNMJNwTwZA/wBDWFSCpg1eUH8MYL2zdioxRTqgGQrDZxQyNzyBJPXZF0+oxITJAbj7oNC5JwgDMUJaM5GqlGCWc//KCIrI+aclEe4IA0uzv7cuj6GCdaJONpi13O544vbtIHBF+A+JeDFUQNy61Gki3rtyQ4aUywn6ru314/dkGiP8Iwjo0J/2Txs49ZkwEl4mx+iYUUO55I6pJzU4P+7RRs+DXZkyKUYZqVWrPF4I94m4Wx1tXeE74o9GuX977yvJ/jkdak8+AmoHVjI15V+WwBdARFV2IPirJgVMdsg1Pez2VNHqa7EHWdTkl3XTcyjG9BiueWFvQfXI8aWSkuuRmqi/HUuzqyvLJfNfs0txMqldYYflWB1BS31WkuPJGGwXUCpjiQSktkuBMWwHjSkQxeehqw1Kgz0Trzm7QbtgxiEPDVmWCNCAeCfROTphd1ZNOhzLy6XfJyG6Xgd5MCAZw4xie0Sj5AnY1/akDgNS9YFl3Y06vd6FAsg2gVQJtzG7LVq1OH2frbXNHWH/NY89NNZ4QUSJqL2yEcGADbT38X0bGdukqYlSoliKOcsSTuqhcaemUeYLLoI8+MZor2RxXTRThF1LrHfqf/5LcLAjdl4EERgUysYS2geE+yFdasU91UgUDsc2cSQ1ZoT9+uLOwdgAmifwQqF028INc2IQEDfTmUw3eZxvz7Ud1z3xc1PQfeCvfKsB9jOhRj7rFyb9XcDWLcYj0bByosychMezMLVkFiYcdBBQtvI6K0KRuOZQH2kBsYHJaXTkup8F0eIhO1/GcIwWKpr2mouB7g5TUDJNvORXPXa/mU8bh27TAZYBe2sKx4NSv5OjnHIWD2RuysCzBlUfeNXhDd2jxnHoUlheJ3jBApzURy0fwm2FwwsSU0caQGl0Kv8hopRQE211NnvtLRsmCNrhhpEDoNiZEzD2QdJWKbRRWnaFedXHAELSN0t0bfsCsMf0ktfBoXBoNA+nZN9+pSlmuzspFevmsqqcMllzzvkyXrzoA+Ryo1ePXpdGOoJvhyru+EBRsmOp7MXZ0vNUMUqHLUoKglg1p73sWeZmPc+KAw0pE2zIsFFE5H4192KwDvDxdxEYoDBDNZjbg2bmADTeUKK57IPD4fTYF4c6EnXx/teYMORBDtIhPJneiZny7Nv/zG+YmekIKCoxr6kauE2bZtBLufetNG0BtBY7f+/ImUypMBvdWu/Q7vTMRzw5aQGZWuc1V0HEsItFYMIBnoKGZ0xcarba/TYZq50kCaflFysYjA4EDKHqGdpYWdKYmm+a7TADmW35yfnOYpZYrkpVEtiqF0EujI00aeplNs2k+qyFZNeE3CDPL9P6b4PQ/kataHkVpLSEVGK7EX6rAa7IVNrvZtFvOA6okKvBgMtFDAGZOx88MeBcJ8AR3AgUUeIznAN6tjCUipGDZONm1FjWJp4A3QIzSaIOmZ7DvF/ysYYbM/fFDOV0jntAjRdapxJxL0eThpEhKOjCDDq2ks+3GrwxqIFKLe1WdOzII8XIOPGnwy6LKXVfpSDOTEfaRsGujhpS4hBIsMOqHbl16PJxc4EkaVu9wpEYlF/84NSv5Zum4drMfp9yXbzzAOJqqS4YkI4cBrFrC7bMPiCfgI3nNZAqkk3QOZqR+yyqx+nDQKBBBZ7QKrfGMCL+XpqFaBJU0wpkBdAhbR4hJsmT5aynlvkouoxm/NjD5oe6BzVIO9uktM+/5dEC5P7vZvarmuO/lKXz4sBabVPIATuKTrwbJP8XUkdM6uEctHKXICUJGjaZIWRbZp8czquQYfY6ynBUCfIU+gG6wqSIBmYIm9pZpXdaL121V7q0VjDjmQnXvMe7ysoEZnZL15B0SpxS1jjd83uNIOKZwu5MPzg2NhOx3xMOPYwEn2CUzbSrwAs5OAtrz3GAaUkJOU74XwjaYUmGJdZBS1NJVkGYrToINLKDjxcuIlyfVsKQSG/G4DyiO2SlQvJ0d0Ot1uOG5IFSAkq+PRVMgVMDvOIJMdqjeCFKUGRWBW9wigYvcbU7CQL/7meF2KZAaWl+4y9uhowAX7elogAvItAAxo2+SFxGRsHGEW9BnhlTuWigYxRcnVUBRQHV41LV+Fr5CJYV7sHfeywswx4XMtUx6EkBhR+q8AXXUA8uPJ73Pb49i9KG9fOljvXeyFj9ixgbo6CcbAJ7WHWqKHy/h+YjBwp6VcN7M89FGzQ04qbrQtgrOFybg3gQRTYG5xn73ArkfQWjCJROwy3J38Dx/D7jOa6BBNsitEw1wGq780EEioOeD+ZGp2J66ADiVGMayiHYucMk8nTK2zzT9CnEraAk95kQjy4k0GRElLL5YAKLQErJ5rp1eay9O4Fb6yJGm9U4FaMwPGxtKD6odIIHKoWnhKo1U8KIpFC+MVn59ZXmc7ZTBZfsg6FQ8W10YfTr4u0nYrpHZbZ1jXiLmooF0cOm0+mPnJBXQtepc7n0BqOipNCqI6yyloTeRShNKH04FIo0gcMk0H/xThyN4pPAWjDDkEp3lNNPRNVfpMI44CWRlRgViP64eK0JSRp0WUvCWYumlW/c58Vcz/yMwVcW5oYb9+26TEhwvbxiNg48hl1VI1UXTU//Eta+BMKnGUivctfL5wINDD0giQL1ipt6U7C9cd4+lgqY2lMUZ02Uv6Prs+ZEZer7ZfWBXVghlfOOrClwsoOFKzWEfz6RZu1eCs+K8fLvkts5+BX0gyrFYve0C3qHrn5U/Oh6D/CihmWIrY7HUZRhJaxde+tldu6adYJ+LeXupQw0XExC36RETdNFxcq9glMu4cNQSX9cqR/GQYp+IxUkIcNGWVU7ZtGa6P3XAyodRt0XeS3Tp01AnCh0ZbUh4VrSZeV9RWfSoWyxnY3hzcZ30G/InDq4wxRrEejreBxnhIQbkxenxkaxl+k7eLUQkUR6vKJ2iDFNGX3WmVA1yaOH+mvhBd+sE6vacQzFobwY5BqEAFmejwW5ne7HtVNolOUgJc8CsUxmc/LBi8N5mu9VsIA5HyErnS6zeCz7VLI9+n/hbT6hTokMXTVyXJRKSG2hd2labXTbtmK4fNH3IZBPreSA4FMeVouVN3zG5x9CiGpLw/3pceo4qGqp+rVp+z+7yQ98oEf+nyH4F3+J9IheDBa94Wi63zJbLBCIZm7P0asHGpIJt3PzE3m0S4YIWyXBCVXGikj8MudDPB/6Nm2v4IxJ5gU0ii0guy5SUHqGUYzTP0jIJU5E82RHUXtX4lDdrihBLdP1YaG1AGUC12rQKuIaGvCpMjZC9bWSCYnjDlvpWbkdXMTNeBHLKiuoozMGIvkczmP0aRJSJ8PYnLCVNhKHXBNckH79e8Z8Kc2wUej4sQZoH8qDRGkg86maW/ZQWGNnLcXmq3FlXM6ssR/3P6E/bHMvm6HLrv1yRixit25JsH3/IOr2UV4BWJhxXW5BJ6Xdr07n9kF3ZNAk6/Xpc5MSFmYJ2R7bdL8Kk7q1OU9Elg/tCxJ8giT27wSTySF0GOxg4PbYJdi/Nyia9Nn89CGDulfJemm1aiEr/eleGSN+5MRrVJ4K6lgyTTIW3i9cQ0dAi6FHt0YMbH3wDSAtGLSAccezzxHitt1QdhW36CQgPcA8vIIBh3/JNjf/Obmc2yzpk8edSlS4lVdwgW5vzbYEyFoF4GCBBby1keVNueHAH+evi+H7oOVfS3XuPQSNTXOONAbzJeSb5stwdQHl1ZjrGoE49I8+A9j3t+ahhQj74FCSWpZrj7wRSFJJnnwi1T9HL5qrCFW/JZq6P62XkMWTb+u4lGpKfmmwiJWx178GOG7KbrZGqyWwmuyKWPkNswkZ1q8uptUlviIi+AXh2bOOTOLsrtNkfqbQJeh24reebkINLkjut5r4d9GR/r8CBa9SU0UQhsnZp5cP+RqWCixRm7i4YRFbtZ4EAkhtNa6jHb6gPYQv7MKqkPLRmX3dFsK8XsRLVZ6IEVrCbmNDc8o5mqsogjAQfoC9Bc7R6gfw03m+lQpv6kTfhxscDIX6s0w+fBxtkhjXAXr10UouWCx3C/p/FYwJRS/AXRKkjOb5CLmK4XRe0+xeDDwVkJPZau52bzLEDHCqV0f44pPgKOkYKgTZJ33fmk3Tu8SdxJ02SHM8Fem5SMsWqRyi2F1ynfRJszcFKykdWlNqgDA/L9lKYBmc7Zu/q9ii1FPF47VJkqhirUob53zoiJtVVRVwMR34gV9iqcBaHbRu9kkvqk3yMpfRFG49pKKjIiq7h/VpRwPGTHoY4cg05X5028iHsLvUW/uz+kjPyIEhhcKUwCkJAwbR9pIEGOn8z6svAO8i89sJ3dL5qDWFYbS+HGPRMxYwJItFQN86YESeJQhn2urGiLRffQeLptDl8dAgb+Tp47UQPxWOw17OeChLN1WnzlkPL1T5O+O3Menpn4C3IY5LEepHpnPeZHbvuWfeVtPlkH4LZjPbBrkJT3NoRJzBt86CO0Xq59oQ+8dsm0ymRcmQyn8w71mhmcuEI5byuF+C88VPYly2sEzjlzAQ3vdn/1+Hzguw6qFNNbqenhZGbdiG6RwZaTG7jTA2X9RdXjDN9yj1uQpyO4Lx8KRAcZcbZMafp4wPOd5MdXoFY52V1A8M9hi3sso93+uprE0qYNMjkE22CvK4HuUxqN7oIz5pWuETq1lQAjqlSlqdD2Rnr/ggp/TVkQYjn9lMfYelk2sH5HPdopYo7MHwlV1or9Bxf+QCyLzm92vzG2wjiIjC/ZHEJzeroJl6bdFPTpZho5MV2U86fLQqxNlGIMqCGy+9WYhJ8ob1r0+Whxde9L2PdysETv97O+xVw+VNN1TZSQN5I6l9m5Ip6pLIqLm4a1B1ffH6gHyqT9p82NOjntRWGIofO3bJz5GhkvSWbsXueTAMaJDou99kGLqDlhwBZNEQ4mKPuDvVwSK4WmLluHyhA97pZiVe8g+JxmnJF8IkV/tCs4Jq/HgOoAEGR9tCDsDbDmi3OviUQpG5D8XmKcSAUaFLRXb2lmJTNYdhtYyfjBYZQmN5qT5CNuaD3BVnlkCk7bsMW3AtXkNMMTuW4HjUERSJnVQ0vsBGa1wo3Qh7115XGeTF3NTz8w0440AgU7c3bSXO/KMINaIWXd0oLpoq/0/QJxCQSJ9XnYy1W7TYLBJpHsVWD1ahsA7FjNvRd6mxCiHsm8g6Z0pnzqIpF1dHUtP2ITU5Z1hZHbu+L3BEEStBbL9XYvGfEakv1bmf+bOZGnoiuHEdlBnaChxYKNzB23b8sw8YyT7Ajxfk49eJIAvdbVkdFCe2J0gMefhQ0bIZxhx3fzMIysQNiN8PgOUKxOMur10LduigREDRMZyP4oGWrP1GFY4t6groASsZ421os48wAdnrbovNhLt7ScNULkwZ5AIZJTrbaKYTLjA1oJ3sIuN/aYocm/9uoQHEIlacF1s/TM1fLcPTL38O9fOsjMEIwoPKfvt7opuI9G2Hf/PR4aCLDQ7wNmIdEuXJ/QNL72k5q4NejAldPfe3UVVqzkys8YZ/jYOGOp6c+YzRCrCuq0M11y7TiN6qk7YXRMn/gukxrEimbMQjr3jwRM6dKVZ4RUfWQr8noPXLJq6yh5R3EH1IVOHESst/LItbG2D2vRsZRkAObzvQAAD3mb3/G4NzopI0FAiHfbpq0X72adg6SRj+8OHMShtFxxLZlf/nLgRLbClwl5WmaYSs+yEjkq48tY7Z2bE0N91mJwt+ua0NlRJIDh0HikF4UvSVorFj2YVu9YeS5tfvlVjPSoNu/Zu6dEUfBOT555hahBdN3Sa5Xuj2Rvau1lQNIaC944y0RWj9UiNDskAK1WoL+EfXcC6IbBXFRyVfX/WKXxPAwUyIAGW8ggZ08hcijKTt1YKnUO6QPvcrmDVAb0FCLIXn5id4fD/Jx4tw/gbXs7WF9b2RgXtPhLBG9vF5FEkdHAKrQHZAJC/HWvk7nvzzDzIXZlfFTJoC3JpGgLPBY7SQTjGlUvG577yNutZ1hTfs9/1nkSXK9zzKLRZ3VODeKUovJe0WCq1zVMYxCJMenmNzPIU2S8TA4E7wWmbNkxq9rI2dd6v0VpcAPVMxnDsvWTWFayyqvKZO7Z08a62i/oH2/jxf8rpmfO64in3FLiL1GX8IGtVE9M23yGsIqJbxDTy+LtaMWDaPqkymb5VrQdzOvqldeU0SUi6IirG8UZ3jcpRbwHa1C0Dww9G/SFX3gPvTJQE+kyz+g1BeMILKKO+olcHzctOWgzxYHnOD7dpCRtuZEXACjgqesZMasoPgnuDC4nUviAAxDc5pngjoAITIkvhKwg5d608pdrZcA+qn5TMT6Uo/QzBaOxBCLTJX3Mgk85rMfsnWx86oLxf7p2PX5ONqieTa/qM3tPw4ZXvlAp83NSD8F7+ZgctK1TpoYwtiU2h02HCGioH5tkVCqNVTMH5p00sRy2JU1qyDBP2CII/Dg4WDsIl+zgeX7589srx6YORRQMBfKbodbB743Tl4WLKOEnwWUVBsm94SOlCracU72MSyj068wdpYjyz1FwC2bjQnxnB6Mp/pZ+yyZXtguEaYB+kqhjQ6UUmwSFazOb+rhYjLaoiM+aN9/8KKn0zaCTFpN9eKwWy7/u4EHzO46TdFSNjMfn2iPSJwDPCFHc0I1+vjdAZw5ZjqR/uzi9Zn20oAa5JnLEk/EA3VRWE7J/XrupfFJPtCUuqHPpnlL7ISJtRpSVcB8qsZCm2QEkWoROtCKKxUh3yEcMbWYJwk6DlEBG0bZP6eg06FL3v6RPb7odGuwm7FN8fG4woqtB8e7M5klPpo97GoObNwt+ludTAmxyC5hmcFx+dIvEZKI6igFKHqLH01iY1o7903VzG9QGetyVx5RNmBYUU+zIuSva/yIcECUi4pRmE3VkF2avqulQEUY4yZ/wmNboBzPmAPey3+dSYtBZUjeWWT0pPwCz4Vozxp9xeClIU60qvEFMQCaPvPaA70WlOP9f/ey39macvpGCVa+zfa8gO44wbxpJUlC8GN/pRMTQtzY8Z8/hiNrU+Zq64ZfFGIkdj7m7abcK1EBtws1X4J/hnqvasPvvDSDYWN+QcQVGMqXalkDtTad5rYY0TIR1Eqox3czwPMjKPvF5sFv17Thujr1IZ1Ytl4VX1J0vjXKmLY4lmXipRAro0qVGEcXxEVMMEl54jQMd4J7RjgomU0j1ptjyxY+cLiSyXPfiEcIS2lWDK3ISAy6UZ3Hb5vnPncA94411jcy75ay6B6DSTzK6UTCZR9uDANtPBrvIDgjsfarMiwoax2OlLxaSoYn4iRgkpEGqEkwox5tyI8aKkLlfZ12lO11TxsqRMY89j5JaO55XfPJPDL1LGSnC88Re9Ai+Nu5bZjtwRrvFITUFHPR4ZmxGslQMecgbZO7nHk32qHxYkdvWpup07ojcMCaVrpFAyFZJJbNvBpZfdf39Hdo2kPtT7v0/f8R/B5Nz4f1t9/3zNM/7n6SUHfcWk5dfQFJvcJMgPolGCpOFb/WC0FGWU2asuQyT+rm88ZKZ78Cei/CAh939CH0JYbpZIPtxc2ufXqjS3pHH9lnWK4iJ7OjR/EESpCo2R3MYKyE7rHfhTvWho4cL1QdN4jFTyR6syMwFm124TVDDRXMNveI1Dp/ntwdz8k8kxw7iFSx6+Yx6O+1LzMVrN0BBzziZi9kneZSzgollBnVwBh6oSOPHXrglrOj+QmR/AESrhDpKrWT+8/AiMDxS/5wwRNuGQPLlJ9ovomhJWn8sMLVItQ8N/7IXvtD8kdOoHaw+vBSbFImQsv/OCAIui99E+YSIOMlMvBXkAt+NAZK8wB9Jf8CPtB+TOUOR+z71d/AFXpPBT6+A5FLjxMjLIEoJzrQfquvxEIi+WoUzGR1IzQFNvbYOnxb2PyQ0kGdyXKzW2axQL8lNAXPk6NEjqrRD1oZtKLlFoofrXw0dCNWASHzy+7PSzOUJ3XtaPZsxLDjr+o41fKuKWNmjiZtfkOzItvlV2MDGSheGF0ma04qE3TUEfqJMrXFm7DpK+27DSvCUVf7rbNoljPhha5W7KBqVq0ShUSTbRmuqPtQreVWH4JET5yMhuqMoSd4r/N8sDmeQiQQvi1tcZv7Moc7dT5X5AtCD6kNEGZOzVcNYlpX4AbTsLgSYYliiPyVoniuYYySxsBy5cgb3pD+EK0Gpb0wJg031dPgaL8JZt6sIvzNPEHfVPOjXmaXj4bd4voXzpZ5GApMhILgMbCEWZ2zwgdeQgjNHLbPIt+KqxRwWPLTN6HwZ0Ouijj4UF+Sg0Au8XuIKW0WxlexdrFrDcZJ8Shauat3X0XmHygqgL1nAu2hrJFb4wZXkcS+i36KMyU1yFvYv23bQUJi/3yQpqr/naUOoiEWOxckyq/gq43dFou1DVDaYMZK9tho7+IXXokBCs5GRfOcBK7g3A+jXQ39K4YA8PBRW4m5+yR0ZAxWJncjRVbITvIAPHYRt1EJ3YLiUbqIvoKHtzHKtUy1ddRUQ0AUO41vonZDUOW+mrszw+SW/6Q/IUgNpcXFjkM7F4CSSQ2ExZg85otsMs7kqsQD4OxYeBNDcSpifjMoLb7GEbGWTwasVObmB/bfPcUlq0wYhXCYEDWRW02TP5bBrYsKTGWjnWDDJ1F7zWai0zW/2XsCuvBQjPFcTYaQX3tSXRSm8hsAoDdjArK/OFp6vcWYOE7lizP0Yc+8p16i7/NiXIiiQTp7c7Xus925VEtlKAjUdFhyaiLT7VxDagprMFwix4wZ05u0qj7cDWFd0W9OYHIu3JbJKMXRJ1aYNovugg+QqRN7fNHSi26VSgBpn+JfMuPo3aeqPWik/wI5Rz3BWarPQX4i5+dM0npwVOsX+KsOhC7vDg+OJsz4Q5zlnIeflUWL6QYMbf9WDfLmosLF4Qev3mJiOuHjoor/dMeBpA9iKDkMjYBNbRo414HCxjsHrB4EXNbHzNMDHCLuNBG6Sf+J4MZ/ElVsDSLxjIiGsTPhw8BPjxbfQtskj+dyNMKOOcUYIRBEIqbazz3lmjlRQhplxq673VklMMY6597vu+d89ec/zq7Mi4gQvh87ehYbpOuZEXj5g/Q7S7BFDAAB9DzG35SC853xtWVcnZQoH54jeOqYLR9NDuwxsVthTV7V99n/B7HSbAytbEyVTz/5NhJ8gGIjG0E5j3griULUd5Rg7tQR+90hJgNQKQH2btbSfPcaTOfIexc1db1BxUOhM1vWCpLaYuKr3FdNTt/T3PWCpEUWDKEtzYrjpzlL/wri3MITKsFvtF8QVV/NhVo97aKIBgdliNc10dWdXVDpVtsNn+2UIolrgqdWA4EY8so0YvB4a+aLzMXiMAuOHQrXY0tr+CL10JbvZzgjJJuB1cRkdT7DUqTvnswVUp5kkUSFVtIIFYK05+tQxT6992HHNWVhWxUsD1PkceIrlXuUVRogwmfdhyrf6zzaL8+c0L7GXMZOteAhAVQVwdJh+7nrX7x4LaIIfz2F2v7Dg/uDfz2Fa+4gFm2zHAor8UqimJG3VTJtZEoFXhnDYXvxMJFc6ku2bhbCxzij2z5UNuK0jmp1mnvkVNUfR+SEmj1Lr94Lym75PO7Fs0MIr3GdsWXRXSfgLTVY0FLqba97u1In8NAcY7IC6TjWLigwKEIm43NxTdaVTv9mcKkzuzBkKd8x/xt1p/9BbP7Wyb4bpo1K1gnOpbLvKz58pWl3B55RJ/Z5mRDLPtNQg14jdOEs9+h/V5UVpwrAI8kGbX8KPVPDIMfIqKDjJD9UyDOPhjZ3vFAyecwyq4akUE9mDOtJEK1hpDyi6Ae87sWAClXGTiwPwN7PXWwjxaR79ArHRIPeYKTunVW24sPr/3HPz2IwH8oKH4OlWEmt4BLM6W5g4kMcYbLwj2usodD1088stZA7VOsUSpEVl4w7NMb1EUHMRxAxLF0CIV+0L3iZb+ekB1vSDSFjAZ3hfLJf7gFaXrOKn+mhR+rWw/eTXIcAgl4HvFuBg1LOmOAwJH3eoVEjjwheKA4icbrQCmvAtpQ0mXG0agYp5mj4Rb6mdQ+RV4QBPbxMqh9C7o8nP0Wko2ocnCHeRGhN1XVyT2b9ACsL+6ylUy+yC3QEnaKRIJK91YtaoSrcWZMMwxuM0E9J68Z+YyjA0g8p1PfHAAIROy6Sa04VXOuT6A351FOWhKfTGsFJ3RTJGWYPoLk5FVK4OaYR9hkJvezwF9vQN1126r6isMGXWTqFW+3HL3I/jurlIdDWIVvYY+s6yq7lrFSPAGRdnU7PVwY/SvWbZGpXzy3BQ2LmAJlrONUsZs4oGkly0V267xbD5KMY8woNNsmWG1VVgLCra8aQBBcI4DP2BlNwxhiCtHlaz6OWFoCW0vMR3ErrG7JyMjTSCnvRcsEHgmPnwA6iNpJ2DrFb4gLlhKJyZGaWkA97H6FFdwEcLT6DRQQL++fOkVC4cYGW1TG/3iK5dShRSuiBulmihqgjR45Vi03o2RbQbP3sxt90VxQ6vzdlGfkXmmKmjOi080JSHkLntjvsBJnv7gKscOaTOkEaRQqAnCA4HWtB4XnMtOhpRmH2FH8tTXrIjAGNWEmudQLCkcVlGTQ965Kh0H6ixXbgImQP6b42B49sO5C8pc7iRlgyvSYvcnH9FgQ3azLbQG2cUW96SDojTQStxkOJyOuDGTHAnnWkz29aEwN9FT8EJ4yhXOg+jLTrCPKeEoJ9a7lDXOjEr8AgX4BmnMQ668oW0zYPyQiVMPxKRHtpfnEEyaKhdzNVThlxxDQNdrHeZiUFb6NoY2KwvSb7BnRcpJy+/g/zAYx3fYSN5QEaVD2Y1VsNWxB0BSO12MRsRY8JLfAezRMz5lURuLUnG1ToKk6Q30FughqWN6gBNcFxP/nY/iv+iaUQOa+2Nuym46wtI/DvSfzSp1jEi4SdYBE7YhTiVV5cX9gwboVDMVgZp5YBQlHOQvaDNfcCoCJuYhf5kz5kwiIKPjzgpcRJHPbOhJajeoeRL53cuMahhV8Z7IRr6M4hW0JzT7mzaMUzQpm866zwM7Cs07fJYXuWvjAMkbe5O6V4bu71sOG6JQ4oL8zIeXHheFVavzxmlIyBkgc9IZlEDplMPr8xlcyss4pVUdwK1e7CK2kTsSdq7g5SHRAl3pYUB9Ko4fsh4qleOyJv1z3KFSTSvwEcRO/Ew8ozEDYZSqpfoVW9uhJfYrNAXR0Z3VmeoAD+rVWtwP/13sE/3ICX3HhDG3CMc476dEEC0K3umSAD4j+ZQLVdFOsWL2C1TH5+4KiSWH+lMibo+B55hR3Gq40G1n25sGcN0mEcoU2wN9FCVyQLBhYOu9aHVLWjEKx2JIUZi5ySoHUAI9b8hGzaLMxCZDMLhv8MkcpTqEwz9KFDpCpqQhVmsGQN8m24wyB82FAKNmjgfKRsXRmsSESovAwXjBIoMKSG51p6Um8b3i7GISs7kjTq/PZoioCfJzfKdJTN0Q45kQEQuh9H88M3yEs3DbtRTKALraM0YC8laiMiOOe6ADmTcCiREeAWZelBaEXRaSuj2lx0xHaRYqF65O0Lo5OCFU18A8cMDE4MLYm9w2QSr9NgQAIcRxZsNpA7UJR0e71JL+VU+ISWFk5I97lra8uGg7GlQYhGd4Gc6rxsLFRiIeGO4abP4S4ekQ1fiqDCy87GZHd52fn5aaDGuvOmIofrzpVwMvtbreZ/855OaXTRcNiNE0wzGZSxbjg26v8ko8L537v/XCCWP2MFaArJpvnkep0pA+O86MWjRAZPQRfznZiSIaTppy6m3p6HrNSsY7fDtz7Cl4V/DJAjQDoyiL2uwf1UHVd2AIrzBUSlJaTj4k6NL97a/GqhWKU9RUmjnYKpm2r+JYUcrkCuZKvcYvrg8pDoUKQywY9GDWg03DUFSirlUXBS5SWn/KAntnf0IdHGL/7mwXqDG+LZYjbEdQmqUqq4y54TNmWUP7IgcAw5816YBzwiNIJiE9M4lPCzeI/FGBeYy3p6IAmH4AjXXmvQ4Iy0Y82NTobcAggT2Cdqz6Mx4TdGoq9fn2etrWKUNFyatAHydQTVUQ2S5OWVUlugcNvoUrlA8cJJz9MqOa/W3iVno4zDHfE7zhoY5f5lRTVZDhrQbR8LS4eRLz8iPMyBL6o4PiLlp89FjdokQLaSBmKHUwWp0na5fE3v9zny2YcDXG/jfI9sctulHRbdkI5a4GOPJx4oAJQzVZ/yYAado8KNZUdEFs9ZPiBsausotXMNebEgr0dyopuqfScFJ3ODNPHgclACPdccwv0YJGQdsN2lhoV4HVGBxcEUeUX/alr4nqpcc1CCR3vR7g40zteQg/JvWmFlUE4mAiTpHlYGrB7w+U2KdSwQz2QJKBe/5eiixWipmfP15AFWrK8Sh1GBBYLgzki1wTMhGQmagXqJ2+FuqJ8f0XzXCVJFHQdMAw8xco11HhM347alrAu+wmX3pDFABOvkC+WPX0Uhg1Z5MVHKNROxaR84YV3s12UcM+70cJ460SzEaKLyh472vOMD3XnaK7zxZcXlWqenEvcjmgGNR2OKbI1s8U+iwiW+HotHalp3e1MGDy6BMVIvajnAzkFHbeVsgjmJUkrP9OAwnEHYXVBqYx3q7LvXjoVR0mY8h+ZaOnh053pdsGkmbqhyryN01eVHySr+CkDYkSMeZ1xjPNVM+gVLTDKu2VGsMUJqWO4TwPDP0VOg2/8ITbAUaMGb4LjL7L+Pi11lEVMXTYIlAZ/QHmTENjyx3kDkBdfcvvQt6tKk6jYFM4EG5UXDTaF5+1ZjRz6W7MdJPC+wTkbDUim4p5QQH3b9kGk2Bkilyeur8Bc20wm5uJSBO95GfYDI1EZipoRaH7uVveneqz43tlTZGRQ4a7CNmMHgXyOQQOL6WQkgMUTQDT8vh21aSdz7ERiZT1jK9F+v6wgFvuEmGngSvIUR2CJkc5tx1QygfZnAruONobB1idCLB1FCfO7N1ZdRocT8/Wye+EnDiO9pzqIpnLDl4bkaRKW+ekBVwHn46Shw1X0tclt/0ROijuUB4kIInrVJU4buWf4YITJtjOJ6iKdr1u+flgQeFH70GxKjhdgt/MrwfB4K/sXczQ+9zYcrD4dhY6qZhZ010rrxggWA8JaZyg2pYij8ieYEg1aZJkZK9O1Re7sB0iouf60rK0Gd+AYlp7soqCBCDGwfKeUQhCBn0E0o0GS6PdmjLi0TtCYZeqazqwN+yNINIA8Lk3iPDnWUiIPLGNcHmZDxfeK0iAdxm/T7LnN+gemRL61hHIc0NCAZaiYJR+OHnLWSe8sLrK905B5eEJHNlWq4RmEXIaFTmo49f8w61+NwfEUyuJAwVqZCLFcyHBKAcIVj3sNzfEOXzVKIndxHw+AR93owhbCxUZf6Gs8cz6/1VdrFEPrv330+9s6BtMVPJ3zl/Uf9rUi0Z/opexfdL3ykF76e999GPfVv8fJv/Y/+/5hEMon1tqNFyVRevV9y9/uIvsG3dbB8GRRrgaEXfhx+2xeOFt+cEn3RZanNxdEe2+B6MHpNbrRE53PlDifPvFcp4kO78ILR0T4xyW/WGPyBsqGdoA7zJJCu1TKbGfhnqgnRbxbB2B3UZoeQ2bz2sTVnUwokTcTU21RxN1PYPS3Sar7T0eRIsyCNowr9amwoMU/od9s2APtiKNL6ENOlyKADstAEWKA+sdKDhrJ6BOhRJmZ+QJbAaZ3/5Fq0/lumCgEzGEbu3yi0Y4I4EgVAjqxh4HbuQn0GrRhOWyAfsglQJAVL1y/6yezS2k8RE2MstJLh92NOB3GCYgFXznF4d25qiP4ZCyI4RYGesut6FXK6GwPpKK8WHEkhYui0AyEmr5Ml3uBFtPFdnioI8RiCooa7Z1G1WuyIi3nSNglutc+xY8BkeW3JJXPK6jd2VIMpaSxpVtFq+R+ySK9J6WG5Qvt+C+QH1hyYUOVK7857nFmyDBYgZ/o+AnibzNVqyYCJQvyDXDTK+iXdkA71bY7TL3bvuLxLBQ8kbTvTEY9aqkQ3+MiLWbEgjLzOH+lXgco1ERgzd80rDCymlpaRQbOYnKG/ODoFl46lzT0cjM5FYVvv0qLUbD5lyJtMUaC1pFlTkNONx6lliaX9o0i/1vws5bNKn5OuENQEKmLlcP4o2ZmJjD4zzd3Fk32uQ4uRWkPSUqb4LBe3EXHdORNB2BWsws5daRnMfNVX7isPSb1hMQdAJi1/qmDMfRUlCU74pmnzjbXfL8PVG8NsW6IQM2Ne23iCPIpryJjYbVnm5hCvKpMa7HLViNiNc+xTfDIaKm3jctViD8A1M9YPJNk003VVr4Zo2MuGW8vil8SLaGpPXqG7I4DLdtl8a4Rbx1Lt4w5Huqaa1XzZBtj208EJVGcmKYEuaeN27zT9EE6a09JerXdEbpaNgNqYJdhP1NdqiPKsbDRUi86XvvNC7rME5mrSQtrzAZVndtSjCMqd8BmaeGR4l4YFULGRBeXIV9Y4yxLFdyoUNpiy2IhePSWzBofYPP0eIa2q5JP4j9G8at/AqoSsLAUuRXtvgsqX/zYwsE+of6oSDbUOo4RMJw+DOUTJq+hnqwKim9Yy/napyZNTc2rCq6V9jHtJbxGPDwlzWj/Sk3zF/BHOlT/fSjSq7FqlPI1q6J+ru8Aku008SFINXZfOfnZNOvGPMtEmn2gLPt+H4QLA+/SYe4j398auzhKIp2Pok3mPC5q1IN1HgR+mnEfc4NeeHYwd2/kpszR3cBn7ni9NbIqhtSWFW8xbUJuUPVOeeXu3j0IGZmFNiwaNZ6rH4/zQ2ODz6tFxRLsUYZu1bfd1uIvfQDt4YD/efKYv8VF8bHGDgK22w2Wqwpi43vNCOXFJZCGMqWiPbL8mil6tsmOTXAWCyMCw73e2rADZj2IK6rqksM3EXF2cbLb4vjB14wa/yXK5vwU+05MzERJ5nXsXsW21o7M+gO0js2OyKciP5uF2iXyb2DiptwQeHeqygkrNsqVCSlldxBMpwHi1vfc8RKpP/4L3Lmpq6DZcvhDDfxTCE3splacTcOtXdK2g303dIWBVe2wD/Gvja1cClFQ67gw0t1ZUttsUgQ1Veky8oOpS6ksYEc4bqseCbZy766SvL3FodmnahlWJRgVCNjPxhL/fk2wyvlKhITH/VQCipOI0dNcRa5B1M5HmOBjTLeZQJy237e2mobwmDyJNHePhdDmiknvLKaDbShL+Is1XTCJuLQd2wmdJL7+mKvs294whXQD+vtd88KKk0DXP8B1Xu9J+xo69VOuFgexgTrcvI6SyltuLix9OPuE6/iRJYoBMEXxU4shQMf4Fjqwf1PtnJ/wWSZd29rhZjRmTGgiGTAUQqRz+nCdjeMfYhsBD5Lv60KILWEvNEHfmsDs2L0A252351eUoYxAysVaCJVLdH9QFWAmqJDCODUcdoo12+gd6bW2boY0pBVHWL6LQDK5bYWh1V8vFvi0cRpfwv7cJiMX3AZNJuTddHehTIdU0YQ/sQ1dLoF2xQPcCuHKiuCWOY30DHe1OwcClLAhqAKyqlnIbH/8u9ScJpcS4kgp6HKDUdiOgRaRGSiUCRBjzI5gSksMZKqy7Sd51aeg0tgJ+x0TH9YH2Mgsap9N7ENZdEB0bey2DMTrBA1hn56SErNHf3tKtqyL9b6yXEP97/rc+jgD2N1LNUH6RM9AzP3kSipr06RkKOolR7HO768jjWiH1X92jA7dkg7gcNcjqsZCgfqWw0tPXdLg20cF6vnQypg7gLtkazrHAodyYfENPQZsdfnjMZiNu4nJO97D1/sQE+3vNFzrSDOKw+keLECYf7RJwVHeP/j79833oZ0egonYB2FlFE5qj02B/LVOMJQlsB8uNg3Leg4qtZwntsOSNidR0abbZmAK4sCzvt8Yiuz2yrNCJoH5O8XvX/vLeR/BBYTWj0sOPYM/jyxRd5+/JziKAABaPcw/34UA3aj/gLZxZgRCWN6m4m3demanNgsx0P237/Q+Ew5VYnJPkyCY0cIVHoFn2Ay/e7U4P19APbPFXEHX94N6KhEMPG7iwB3+I+O1jd5n6VSgHegxgaSawO6iQCYFgDsPSMsNOcUj4q3sF6KzGaH/0u5PQoAj/8zq6Uc9MoNrGqhYeb2jQo0WlGlXjxtanZLS24/OIN5Gx/2g684BPDQpwlqnkFcxpmP/osnOXrFuu4PqifouQH0eF5qCkvITQbJw/Zvy5mAHWC9oU+cTiYhJmSfKsCyt1cGVxisKu+NymEQIAyaCgud/V09qT3nk/9s/SWsYtha7yNpzBIMM40rCSGaJ9u6lEkl00vXBiEt7p9P5IBCiavynEOv7FgLqPdeqxRiCwuFVMolSIUBcoyfUC2e2FJSAUgYdVGFf0b0Kn2EZlK97yyxrT2MVgvtRikfdaAW8RwEEfN+B7/eK8bBdp7URpbqn1xcrC6d2UjdsKbzCjBFqkKkoZt7Mrhg6YagE7spkqj0jOrWM+UGQ0MUlG2evP1uE1p2xSv4dMK0dna6ENcNUF+xkaJ7B764NdxLCpuvhblltVRAf7vK5qPttJ/9RYFUUSGcLdibnz6mf7WkPO3MkUUhR2mAOuGv8IWw5XG1ZvoVMnjSAZe6T7WYA99GENxoHkMiKxHlCuK5Gd0INrISImHQrQmv6F4mqU/TTQ8nHMDzCRivKySQ8dqkpQgnUMnwIkaAuc6/FGq1hw3b2Sba398BhUwUZSAIO8XZvnuLdY2n6hOXws+gq9BHUKcKFA6kz6FDnpxLPICa3qGhnc97bo1FT/XJk48LrkHJ2CAtBv0RtN97N21plfpXHvZ8gMJb7Zc4cfI6MbPwsW7AilCSXMFIEUEmir8XLEklA0ztYbGpTTGqttp5hpFTTIqUyaAIqvMT9A/x+Ji5ejA4Bhxb/cl1pUdOD6epd3yilIdO6j297xInoiBPuEDW2/UfslDyhGkQs7Wy253bVnlT+SWg89zYIK/9KXFl5fe+jow2rd5FXv8zDPrmfMXiUPt9QBO/iK4QGbX5j/7Rx1c1vzsY8ONbP3lVIaPrhL4+1QrECTN3nyKavGG0gBBtHvTKhGoBHgMXHStFowN+HKrPriYu+OZ05Frn8okQrPaaxoKP1ULCS/cmKFN3gcH7HQlVjraCeQmtjg1pSQxeuqXiSKgLpxc/1OiZsU4+n4lz4hpahGyWBURLi4642n1gn9qz9bIsaCeEPJ0uJmenMWp2tJmIwLQ6VSgDYErOeBCfSj9P4G/vI7oIF+l/n5fp956QgxGvur77ynawAu3G9MdFbJbu49NZnWnnFcQHjxRuhUYvg1U/e84N4JTecciDAKb/KYIFXzloyuE1eYXf54MmhjTq7B/yBToDzzpx3tJCTo3HCmVPYfmtBRe3mPYEE/6RlTIxbf4fSOcaKFGk4gbaUWe44hVk9SZzhW80yfW5QWBHxmtUzvMhfVQli4gZTktIOZd9mjJ5hsbmzttaHQB29Am3dZkmx3g/qvYocyhZ2PXAWsNQiIaf+Q8W/MWPIK7/TjvCx5q2XRp4lVWydMc2wIQkhadDB0xsnw/kSEyGjLKjI4coVIwtubTF3E7MJ6LS6UOsJKj82XVAVPJJcepfewbzE91ivXZvOvYfsmMevwtPpfMzGmC7WJlyW2j0jh7AF1JLmwEJSKYwIvu6DHc3YnyLH9ZdIBnQ+nOVDRiP+REpqv++typYHIvoJyICGA40d8bR7HR2k7do6UQTHF4oriYeIQbxKe4Th6+/l1BjUtS9hqORh3MbgvYrStXTfSwaBOmAVQZzpYNqsAmQyjY56MUqty3c/xH6GuhNvNaG9vGbG6cPtBM8UA3e8r51D0AR9kozKuGGSMgLz3nAHxDNnc7GTwpLj7/6HeWp1iksDeTjwCLpxejuMtpMnGJgsiku1sOACwQ9ukzESiDRN77YNESxR5LphOlcASXA5uIts1LnBIcn1J7BLWs49DMALSnuz95gdOrTZr0u1SeYHinno/pE58xYoXbVO/S+FEMMs5qyWkMnp8Q3ClyTlZP52Y9nq7b8fITPuVXUk9ohG5EFHw4gAEcjFxfKb3xuAsEjx2z1wxNbSZMcgS9GKyW3R6KwJONgtA64LTyxWm8Bvudp0M1FdJPEGopM4Fvg7G/hsptkhCfHFegv4ENwxPeXmYhxwZy7js+BeM27t9ODBMynVCLJ7RWcBMteZJtvjOYHb5lOnCLYWNEMKC59BA7covu1cANa2PXL05iGdufOzkgFqqHBOrgQVUmLEc+Mkz4Rq8O6WkNr7atNkH4M8d+SD1t/tSzt3oFql+neVs+AwEI5JaBJaxARtY2Z4mKoUqxds4UpZ0sv3zIbNoo0J4fihldQTX3XNcuNcZmcrB5LTWMdzeRuAtBk3cZHYQF6gTi3PNuDJ0nmR+4LPLoHvxQIxRgJ9iNNXqf2SYJhcvCtJiVWo85TsyFOuq7EyBPJrAdhEgE0cTq16FQXhYPJFqSfiVn0IQnPOy0LbU4BeG94QjdYNB0CiQ3QaxQqD2ebSMiNjaVaw8WaM4Z5WnzcVDsr4eGweSLa2DE3BWViaxhZFIcSTjgxNCAfelg+hznVOYoe5VqTYs1g7WtfTm3e4/WduC6p+qqAM8H4ZyrJCGpewThTDPe6H7CzX/zQ8Tm+r65HeZn+MsmxUciEWPlAVaK/VBaQBWfoG/aRL/jSZIQfep/89GjasWmbaWzeEZ2R1FOjvyJT37O9B8046SRSKVEnXWlBqbkb5XCS3qFeuE9xb9+frEknxWB5h1D/hruz2iVDEAS7+qkEz5Ot5agHJc7WCdY94Ws61sURcX5nG8UELGBAHZ3i+3VulAyT0nKNNz4K2LBHBWJcTBX1wzf+//u/j/9+//v87+9/l9Lbh/L/uyNYiTsWV2LwsjaA6MxTuzFMqmxW8Jw/+IppdX8t/Clgi1rI1SN0UC/r6tX/4lUc2VV1OQReSeCsjUpKZchw4XUcjHfw6ryCV3R8s6VXm67vp4n+lcPV9gJwmbKQEsmrJi9c2vkwrm8HFbVYNTaRGq8D91t9n5+U+aD/hNtN3HjC/nC/vUoGFSCkXP+NlRcmLUqLbiUBl4LYf1U/CCvwtd3ryCH8gUmGITAxiH1O5rnGTz7y1LuFjmnFGQ1UWuM7HwfXtWl2fPFKklYwNUpF2IL/TmaRETjQiM5SJacI+3Gv5MBU8lP5Io6gWkawpyzNEVGqOdx4YlO1dCvjbWFZWbCmeiFKPSlMKtKcMFLs/KQxtgAHi7NZNCQ32bBAW2mbHflVZ8wXKi1JKVHkW20bnYnl3dKWJeWJOiX3oKPBD6Zbi0ZvSIuWktUHB8qDR8DMMh1ZfkBL9FS9x5r0hBGLJ8pUCJv3NYH+Ae8p40mZWd5m5fhobFjQeQvqTT4VKWIYfRL0tfaXKiVl75hHReuTJEcqVlug+eOIIc4bdIydtn2K0iNZPsYWQvQio2qbO3OqAlPHDDOB7DfjGEfVF51FqqNacd6QmgFKJpMfLp5DHTv4wXlONKVXF9zTJpDV4m1sYZqJPhotcsliZM8yksKkCkzpiXt+EcRQvSQqmBS9WdWkxMTJXPSw94jqI3varCjQxTazjlMH8jTS8ilaW8014/vwA/LNa+YiFoyyx3s/KswP3O8QW1jtq45yTM/DX9a8M4voTVaO2ebvw1EooDw/yg6Y1faY+WwrdVs5Yt0hQ5EwRfYXSFxray1YvSM+kYmlpLG2/9mm1MfmbKHXr44Ih8nVKb1M537ZANUkCtdsPZ80JVKVKabVHCadaLXg+IV8i5GSwpZti0h6diTaKs9sdpUKEpd7jDUpYmHtiX33SKiO3tuydkaxA7pEc9XIQEOfWJlszj5YpL5bKeQyT7aZSBOamvSHl8xsWvgo26IP/bqk+0EJUz+gkkcvlUlyPp2kdKFtt7y5aCdks9ZJJcFp5ZWeaWKgtnXMN3ORwGLBE0PtkEIek5FY2aVssUZHtsWIvnljMVJtuVIjpZup/5VL1yPOHWWHkOMc6YySWMckczD5jUj2mlLVquFaMU8leGVaqeXis+aRRL8zm4WuBk6cyWfGMxgtr8useQEx7k/PvRoZyd9nde1GUCV84gMX8Ogu/BWezYPSR27llzQnA97oo0pYyxobYUJfsj+ysTm9zJ+S4pk0TGo9VTG0KjqYhTmALfoDZVKla2b5yhv241PxFaLJs3i05K0AAIdcGxCJZmT3ZdT7CliR7q+kur7WdQjygYtOWRL9B8E4s4LI8KpAj7bE0dg7DLOaX+MGeAi0hMMSSWZEz+RudXbZCsGYS0QqiXjH9XQbd8sCB+nIVTq7/T/FDS+zWY9q7Z2fdq1tdLb6v3hKKVDAw5gjj6o9r1wHFROdHc18MJp4SJ2Ucvu+iQ9EgkekW8VCM+psM6y+/2SBy8tNN4a3L1MzP+OLsyvESo5gS7IQOnIqMmviJBVc6zbVG1n8eXiA3j46kmvvtJlewwNDrxk4SbJOtP/TV/lIVK9ueShNbbMHfwnLTLLhbZuO79ec5XvfgRwLFK+w1r5ZWW15rVFZrE+wKqNRv5KqsLNfpGgnoUU6Y71NxEmN7MyqwqAQqoIULOw/LbuUB2+uE75gJt+kq1qY4LoxV+qR/zalupea3D5+WMeaRIn0sAI6DDWDh158fqUb4YhAxhREbUN0qyyJYkBU4V2KARXDT65gW3gRsiv7xSPYEKLwzgriWcWgPr0sbZnv7m1XHNFW6xPdGNZUdxFiUYlmXNjDVWuu7LCkX/nVkrXaJhiYktBISC2xgBXQnNEP+cptWl1eG62a7CPXrnrkTQ5BQASbEqUZWMDiZUisKyHDeLFOaJILUo5f6iDt4ZO8MlqaKLto0AmTHVVbkGuyPa1R/ywZsWRoRDoRdNMMHwYTsklMVnlAd2S0282bgMI8fiJpDh69OSL6K3qbo20KfpNMurnYGQSr/stFqZ7hYsxKlLnKAKhsmB8AIpEQ4bd/NrTLTXefsE6ChRmKWjXKVgpGoPs8GAicgKVw4K0qgDgy1A6hFq1WRat3fHF+FkU+b6H4NWpOU3KXTxrIb2qSHAb+qhm8hiSROi/9ofapjxhyKxxntPpge6KL5Z4+WBMYkAcE6+0Hd3Yh2zBsK2MV3iW0Y6cvOCroXlRb2MMJtdWx+3dkFzGh2Pe3DZ9QpSqpaR/rE1ImOrHqYYyccpiLC22amJIjRWVAherTfpQLmo6/K2pna85GrDuQPlH1Tsar8isAJbXLafSwOof4gg9RkAGm/oYpBQQiPUoyDk2BCQ1k+KILq48ErFo4WSRhHLq/y7mgw3+L85PpP6xWr6cgp9sOjYjKagOrxF148uhuaWtjet953fh1IQiEzgC+d2IgBCcUZqgTAICm2bR8oCjDLBsmg+ThyhfD+zBalsKBY1Ce54Y/t9cwfbLu9SFwEgphfopNA3yNxgyDafUM3mYTovZNgPGdd4ZFFOj1vtfFW3u7N+iHEN1HkeesDMXKPyoCDCGVMo4GCCD6PBhQ3dRZIHy0Y/3MaE5zU9mTCrwwnZojtE+qNpMSkJSpmGe0EzLyFelMJqhfFQ7a50uXxZ8pCc2wxtAKWgHoeamR2O7R+bq7IbPYItO0esdRgoTaY38hZLJ5y02oIVwoPokGIzxAMDuanQ1vn2WDQ00Rh6o5QOaCRu99fwDbQcN0XAuqkFpxT/cfz3slGRVokrNU0iqiMAJFEbKScZdmSkTUznC0U+MfwFOGdLgsewRyPKwBZYSmy6U325iUhBQNxbAC3FLKDV9VSOuQpOOukJ/GAmu/tyEbX9DgEp6dv1zoU0IqzpG6gssSjIYRVPGgU1QAQYRgIT8gEV0EXr1sqeh2I6rXjtmoCYyEDCe/PkFEi/Q48FuT29p557iN+LCwk5CK/CZ2WdAdfQZh2Z9QGrzPLSNRj5igUWzl9Vi0rCqH8G1Kp4QMLkuwMCAypdviDXyOIk0AHTM8HBYKh3b0/F+DxoNj4ZdoZfCpQVdnZarqoMaHWnMLNVcyevytGsrXQEoIbubqWYNo7NRHzdc0zvT21fWVirj7g36iy6pxogfvgHp1xH1Turbz8QyyHnXeBJicpYUctbzApwzZ1HT+FPEXMAgUZetgeGMwt4G+DHiDT2Lu+PT21fjJCAfV16a/Wu1PqOkUHSTKYhWW6PhhHUlNtWzFnA7MbY+r64vkwdpfNB2JfWgWXAvkzd42K4lN9x7Wrg4kIKgXCb4mcW595MCPJ/cTfPAMQMFWwnqwde4w8HZYJFpQwcSMhjVz4B8p6ncSCN1X4klxoIH4BN2J6taBMj6lHkAOs8JJAmXq5xsQtrPIPIIp/HG6i21xMGcFgqDXSRF0xQg14d2uy6HgKE13LSvQe52oShF5Jx1R6avyL4thhXQZHfC94oZzuPUBKFYf1VvDaxIrtV6dNGSx7DO0i1p6CzBkuAmEqyWceQY7F9+U0ObYDzoa1iKao/cOD/v6Q9gHrrr1uCeOk8fST9MG23Ul0KmM3r+Wn6Hi6WAcL7gEeaykicvgjzkjSwFsAXIR81Zx4QJ6oosVyJkCcT+4xAldCcihqvTf94HHUPXYp3REIaR4dhpQF6+FK1H0i9i7Pvh8owu3lO4PT1iuqu+DkL2Bj9+kdfGAg2TXw03iNHyobxofLE2ibjsYDPgeEQlRMR7afXbSGQcnPjI2D+sdtmuQ771dbASUsDndU7t58jrrNGRzISvwioAlHs5FA+cBE5Ccznkd8NMV6BR6ksnKLPZnMUawRDU1MZ/ib3xCdkTblHKu4blNiylH5n213yM0zubEie0o4JhzcfAy3H5qh2l17uLooBNLaO+gzonTH2uF8PQu9EyH+pjGsACTMy4cHzsPdymUSXYJOMP3yTkXqvO/lpvt0cX5ekDEu9PUfBeZODkFuAjXCaGdi6ew4qxJ8PmFfwmPpkgQjQlWqomFY6UkjmcnAtJG75EVR+NpzGpP1Ef5qUUbfowrC3zcSLX3BxgWEgEx/v9cP8H8u1Mvt9/rMDYf6sjwU1xSOPBgzFEeJLMRVFtKo5QHsUYT8ZRLCah27599EuqoC9PYjYO6aoAMHB8X1OHwEAYouHfHB3nyb2B+SnZxM/vw/bCtORjLMSy5aZoEpvgdGvlJfNPFUu/p7Z4VVK1hiI0/UTuB3ZPq4ohEbm7Mntgc1evEtknaosgZSwnDC2BdMmibpeg48X8Ixl+/8+xXdbshQXUPPvx8jT3fkELivHSmqbhblfNFShWAyQnJ3WBU6SMYSIpTDmHjdLVAdlADdz9gCplZw6mTiHqDwIsxbm9ErGusiVpg2w8Q3khKV/R9Oj8PFeF43hmW/nSd99nZzhyjCX3QOZkkB6BsH4H866WGyv9E0hVAzPYah2tkRfQZMmP2rinfOeQalge0ovhduBjJs9a1GBwReerceify49ctOh5/65ATYuMsAkVltmvTLBk4oHpdl6i+p8DoNj4Fb2vhdFYer2JSEilEwPd5n5zNoGBXEjreg/wh2NFnNRaIUHSOXa4eJRwygZoX6vnWnqVdCRT1ARxeFrNBJ+tsdooMwqnYhE7zIxnD8pZH+P0Nu1wWxCPTADfNWmqx626IBJJq6NeapcGeOmbtXvl0TeWG0Y7OGGV4+EHTtNBIT5Wd0Bujl7inXgZgfXTM5efD3qDTJ54O9v3Bkv+tdIRlq1kXcVD0BEMirmFxglNPt5pedb1AnxuCYMChUykwsTIWqT23XDpvTiKEru1cTcEMeniB+HQDehxPXNmkotFdwUPnilB/u4Nx5Xc6l8J9jH1EgKZUUt8t8cyoZleDBEt8oibDmJRAoMKJ5Oe9CSWS5ZMEJvacsGVdXDWjp/Ype5x0p9PXB2PAwt2LRD3d+ftNgpuyvxlP8pB84oB1i73vAVpwyrmXW72hfW6Dzn9Jkj4++0VQ4d0KSx1AsDA4OtXXDo63/w+GD+zC7w5SJaxsmnlYRQ4dgdjA7tTl2KNLnpJ+mvkoDxtt1a4oPaX3EVqj96o9sRKBQqU7ZOiupeAIyLMD+Y3YwHx30XWHB5CQiw7q3mj1EDlP2eBsZbz79ayUMbyHQ7s8gu4Lgip1LiGJj7NQj905/+rgUYKAA5qdrlHKIknWmqfuR+PB8RdBkDg/NgnlT89G72h2NvySnj7UyBwD+mi/IWs1xWbxuVwUIVXun5cMqBtFbrccI+DILjsVQg6eeq0itiRfedn89CvyFtpkxaauEvSANuZmB1p8FGPbU94J9medwsZ9HkUYjmI7OH5HuxendLbxTaYrPuIfE2ffXFKhoNBUp33HsFAXmCV/Vxpq5AYgFoRr5Ay93ZLRlgaIPjhZjXZZChT+aE5iWAXMX0oSFQEtwjiuhQQItTQX5IYrKfKB+queTNplR1Hoflo5/I6aPPmACwQCE2jTOYo5Dz1cs7Sod0KTG/3kEDGk3kUaUCON19xSJCab3kNpWZhSWkO8l+SpW70Wn3g0ciOIJO5JXma6dbos6jyisuxXwUUhj2+1uGhcvuliKtWwsUTw4gi1c/diEEpZHoKoxTBeMDmhPhKTx7TXWRakV8imJR355DcIHkR9IREHxohP4TbyR5LtFU24umRPRmEYHbpe1LghyxPx7YgUHjNbbQFRQhh4KeU1EabXx8FS3JAxp2rwRDoeWkJgWRUSKw6gGP5U2PuO9V4ZuiKXGGzFQuRuf+tkSSsbBtRJKhCi3ENuLlXhPbjTKD4djXVnfXFds6Zb+1XiUrRfyayGxJq1+SYBEfbKlgjiSmk0orgTqzSS+DZ5rTqsJbttiNtp+KMqGE2AHGFw6jQqM5vD6vMptmXV9OAjq49Uf/Lx9Opam+Hn5O9p8qoBBAQixzQZ4eNVkO9sPzJAMyR1y4/RCQQ1s0pV5KAU5sKLw3tkcFbI/JqrjCsK4Mw+W8aod4lioYuawUiCyVWBE/qPaFi5bnkgpfu/ae47174rI1fqQoTbW0HrU6FAejq7ByM0V4zkZTg02/YJK2N7hUQRCeZ4BIgSEqgD8XsjzG6LIsSbuHoIdz/LhFzbNn1clci1NHWJ0/6/O8HJMdIpEZbqi1RrrFfoo/rI/7ufm2MPG5lUI0IYJ4MAiHRTSOFJ2oTverFHYXThkYFIoyFx6rMYFgaOKM4xNWdlOnIcKb/suptptgTOTdVIf4YgdaAjJnIAm4qNNHNQqqAzvi53GkyRCEoseUBrHohZsjUbkR8gfKtc/+Oa72lwxJ8Mq6HDfDATbfbJhzeIuFQJSiw1uZprHlzUf90WgqG76zO0eCB1WdPv1IT6sNxxh91GEL2YpgC97ikFHyoaH92ndwduqZ6IYjkg20DX33MWdoZk7QkcKUCgisIYslOaaLyvIIqRKWQj16jE1DlQWJJaPopWTJjXfixEjRJJo8g4++wuQjbq+WVYjsqCuNIQW3YjnxKe2M5ZKEqq+cX7ZVgnkbsU3RWIyXA1rxv4kGersYJjD//auldXGmcEbcfTeF16Y1708FB1HIfmWv6dSFi6oD4E+RIjCsEZ+kY7dKnwReJJw3xCjKvi3kGN42rvyhUlIz0Bp+fNSV5xwFiuBzG296e5s/oHoFtUyUplmPulIPl+e1CQIQVtjlzLzzzbV+D/OVQtYzo5ixtMi5BmHuG4N/uKfJk5UIREp7+12oZlKtPBomXSzAY0KgtbPzzZoHQxujnREUgBU+O/jKKhgxVhRPtbqyHiUaRwRpHv7pgRPyUrnE7fYkVblGmfTY28tFCvlILC04Tz3ivkNWVazA+OsYrxvRM/hiNn8Fc4bQBeUZABGx5S/xFf9Lbbmk298X7iFg2yeimvsQqqJ+hYbt6uq+Zf9jC+Jcwiccd61NKQtFvGWrgJiHB5lwi6fR8KzYS7EaEHf/ka9EC7H8D+WEa3TEACHBkNSj/cXxFeq4RllC+fUFm2xtstYLL2nos1DfzsC9vqDDdRVcPA3Ho95aEQHvExVThXPqym65llkKlfRXbPTRiDepdylHjmV9YTWAEjlD9DdQnCem7Aj/ml58On366392214B5zrmQz/9ySG2mFqEwjq5sFl5tYJPw5hNz8lyZPUTsr5E0F2C9VMPnZckWP7+mbwp/BiN7f4kf7vtGnZF2JGvjK/sDX1RtcFY5oPQnE4lIAYV49U3C9SP0LCY/9i/WIFK9ORjzM9kG/KGrAuwFmgdEpdLaiqQNpCTGZVuAO65afkY1h33hrqyLjZy92JK3/twdj9pafFcwfXONmPQWldPlMe7jlP24Js0v9m8bIJ9TgS2IuRvE9ZVRaCwSJYOtAfL5H/YS4FfzKWKbek+GFulheyKtDNlBtrdmr+KU+ibHTdalzFUmMfxw3f36x+3cQbJLItSilW9cuvZEMjKw987jykZRlsH/UI+HlKfo2tLwemBEeBFtmxF2xmItA/dAIfQ+rXnm88dqvXa+GapOYVt/2waFimXFx3TC2MUiOi5/Ml+3rj/YU6Ihx2hXgiDXFsUeQkRAD6wF3SCPi2flk7XwKAA4zboqynuELD312EJ88lmDEVOMa1W/K/a8tGylZRMrMoILyoMQzzbDJHNZrhH77L9qSC42HVmKiZ5S0016UTp83gOhCwz9XItK9fgXfK3F5d7nZCBUekoLxrutQaPHa16Rjsa0gTrzyjqTnmcIcrxg6X6dkKiucudc0DD5W4pJPf0vuDW8r5/uw24YfMuxFRpD2ovT2mFX79xH6Jf+MVdv2TYqR6/955QgVPe3JCD/WjAYcLA9tpXgFiEjge2J5ljeI/iUzg91KQuHkII4mmHZxC3XQORLAC6G7uFn5LOmlnXkjFdoO976moNTxElS8HdxWoPAkjjocDR136m2l+f5t6xaaNgdodOvTu0rievnhNAB79WNrVs6EsPgkgfahF9gSFzzAd+rJSraw5Mllit7vUP5YxA843lUpu6/5jAR0RvH4rRXkSg3nE+O5GFyfe+L0s5r3k05FyghSFnKo4TTgs07qj4nTLqOYj6qaW9knJTDkF5OFMYbmCP+8H16Ty482OjvERV6OFyw043L9w3hoJi408sR+SGo1WviXUu8d7qS+ehKjpKwxeCthsm2LBFSFeetx0x4AaKPxtp3CxdWqCsLrB1s/j5TAhc1jNZsXWl6tjo/WDoewxzg8T8NnhZ1niUwL/nhfygLanCnRwaFGDyLw+sfZhyZ1UtYTp8TYB6dE7R3VsKKH95CUxJ8u8N+9u2/9HUNKHW3x3w5GQrfOPafk2w5qZq8MaHT0ebeY3wIsp3rN9lrpIsW9c1ws3VNV+JwNz0Lo9+V7zZr6GD56We6gWVIvtmam5GPPkVAbr74r6SwhuL+TRXtW/0pgyX16VNl4/EAD50TnUPuwrW6OcUO2VlWXS0inq872kk7GUlW6o/ozFKq+Sip6LcTtSDfDrPTcCHhx75H8BeRon+KG2wRwzfDgWhALmiWOMO6h3pm1UCZEPEjScyk7tdLx6WrdA2N1QTPENvNnhCQjW6kl057/qv7IwRryHrZBCwVSbLLnFRiHdTwk8mlYixFt1slEcPD7FVht13HyqVeyD55HOXrh2ElAxJyinGeoFzwKA91zfrdLvDxJSjzmImfvTisreI25EDcVfGsmxLVbfU8PGe/7NmWWKjXcdTJ11jAlVIY/Bv/mcxg/Q10vCHwKG1GW/XbJq5nxDhyLqiorn7Wd7VEVL8UgVzpHMjQ+Z8DUgSukiVwWAKkeTlVVeZ7t1DGnCgJVIdBPZAEK5f8CDyDNo7tK4/5DBjdD5MPV86TaEhGsLVFPQSI68KlBYy84FievdU9gWh6XZrugvtCZmi9vfd6db6V7FmoEcRHnG36VZH8N4aZaldq9zZawt1uBFgxYYx+Gs/qW1jwANeFy+LCoymyM6zgG7j8bGzUyLhvrbJkTYAEdICEb4kMKusKT9V3eIwMLsjdUdgijMc+7iKrr+TxrVWG0U+W95SGrxnxGrE4eaJFfgvAjUM4SAy8UaRwE9j6ZQH5qYAWGtXByvDiLSDfOD0yFA3UCMKSyQ30fyy1mIRg4ZcgZHLNHWl+c9SeijOvbOJxoQy7lTN2r3Y8p6ovxvUY74aOYbuVezryqXA6U+fcp6wSV9X5/OZKP18tB56Ua0gMyxJI7XyNT7IrqN8GsB9rL/kP5KMrjXxgqKLDa+V5OCH6a5hmOWemMUsea9vQl9t5Oce76PrTyTv50ExOqngE3PHPfSL//AItPdB7kGnyTRhVUUFNdJJ2z7RtktZwgmQzhBG/G7QsjZmJfCE7k75EmdIKH7xlnmDrNM/XbTT6FzldcH/rcRGxlPrv4qDScqE7JSmQABJWqRT/TUcJSwoQM+1jvDigvrjjH8oeK2in1S+/yO1j8xAws/T5u0VnIvAPqaE1atNuN0cuRliLcH2j0nTL4JpcR7w9Qya0JoaHgsOiALLCCzRkl1UUESz+ze/gIXHGtDwgYrK6pCFKJ1webSDog4zTlPkgXZqxlQDiYMjhDpwTtBW2WxthWbov9dt2X9XFLFmcF+eEc1UaQ74gqZiZsdj63pH1qcv3Vy8JYciogIVKsJ8Yy3J9w/GhjWVSQAmrS0BPOWK+RKV+0lWqXgYMnIFwpcZVD7zPSp547i9HlflB8gVnSTGmmq1ClO081OW/UH11pEQMfkEdDFzjLC1Cdo/BdL3s7cXb8J++Hzz1rhOUVZFIPehRiZ8VYu6+7Er7j5PSZu9g/GBdmNzJmyCD9wiswj9BZw+T3iBrg81re36ihMLjoVLoWc+62a1U/7qVX5CpvTVF7rocSAKwv4cBVqZm7lLDS/qoXs4fMs/VQi6BtVbNA3uSzKpQfjH1o3x4LrvkOn40zhm6hjduDglzJUwA0POabgdXIndp9fzhOo23Pe+Rk9GSLX0d71Poqry8NQDTzNlsa+JTNG9+UrEf+ngxCjGEsDCc0bz+udVRyHQI1jmEO3S+IOQycEq7XwB6z3wfMfa73m8PVRp+iOgtZfeSBl01xn03vMaQJkyj7vnhGCklsCWVRUl4y+5oNUzQ63B2dbjDF3vikd/3RUMifPYnX5Glfuk2FsV/7RqjI9yKTbE8wJY+74p7qXO8+dIYgjtLD/N8TJtRh04N9tXJA4H59IkMmLElgvr0Q5OCeVfdAt+5hkh4pQgfRMHpL74XatLQpPiOyHRs/OdmHtBf8nOZcxVKzdGclIN16lE7kJ+pVMjspOI+5+TqLRO6m0ZpNXJoZRv9MPDRcAfJUtNZHyig/s2wwReakFgPPJwCQmu1I30/tcBbji+Na53i1W1N+BqoY7Zxo+U/M9XyJ4Ok2SSkBtoOrwuhAY3a03Eu6l8wFdIG1cN+e8hopTkiKF093KuH/BcB39rMiGDLn6XVhGKEaaT/vqb/lufuAdpGExevF1+J9itkFhCfymWr9vGb3BTK4j598zRH7+e+MU9maruZqb0pkGxRDRE1CD4Z8LV4vhgPidk5w2Bq816g3nHw1//j3JStz7NR9HIWELO8TMn3QrP/zZp//+Dv9p429/ogv+GATR+n/UdF+ns9xNkXZQJXY4t9jMkJNUFygAtzndXwjss+yWH9HAnLQQfhAskdZS2l01HLWv7L7us5uTH409pqitvfSOQg/c+Zt7k879P3K9+WV68n7+3cZfuRd/dDPP/03rn+d+/nBvWfgDlt8+LzjqJ/vx3CnNOwiXhho778C96iD+1TBvRZYeP+EH81LE0vVwOOrmCLB3iKzI1x+vJEsrPH4uF0UB4TJ4X3uDfOCo3PYpYe0MF4bouh0DQ/l43fxUF7Y+dpWuvTSffB0yO2UQUETI/LwCZE3BvnevJ7c9zUlY3H58xzke6DNFDQG8n0WtDN4LAYN4nogKav1ezOfK/z+t6tsCTp+dhx4ymjWuCJk1dEUifDP+HyS4iP/Vg9B2jTo9L4NbiBuDS4nuuHW6H+JDQn2JtqRKGkEQPEYE7uzazXIkcxIAqUq1esasZBETlEZY7y7Jo+RoV/IsjY9eIMkUvr42Hc0xqtsavZvhz1OLwSxMOTuqzlhb0WbdOwBH9EYiyBjatz40bUxTHbiWxqJ0uma19qhPruvcWJlbiSSH48OLDDpaHPszvyct41ZfTu10+vjox6kOqK6v0K/gEPphEvMl/vwSv+A4Hhm36JSP9IXTyCZDm4kKsqD5ay8b1Sad/vaiyO5N/sDfEV6Z4q95E+yfjxpqBoBETW2C7xl4pIO2bDODDFurUPwE7EWC2Uplq+AHmBHvir2PSgkR12/Ry65O0aZtQPeXi9mTlF/Wj5GQ+vFkYyhXsLTjrBSP9hwk4GPqDP5rBn5/l8b0mLRAvRSzXHc293bs3s8EsdE3m2exxidWVB4joHR+S+dz5/W+v00K3TqN14CDBth8eWcsTbiwXPsygHdGid0PEdy6HHm2v/IUuV5RVapYmzGsX90mpnIdNGcOOq64Dbc5GUbYpD9M7S+6cLY//QmjxFLP5cuTFRm3vA5rkFZroFnO3bjHF35uU3s8mvL7Tp9nyTc4mymTJ5sLIp7umSnGkO23faehtz3mmTS7fbVx5rP7x3HXIjRNeq/A3xCs9JNB08c9S9BF2O3bOur0ItslFxXgRPdaapBIi4dRpKGxVz7ir69t/bc9qTxjvtOyGOfiLGDhR4fYywHv1WdOplxIV87TpLBy3Wc0QP0P9s4G7FBNOdITS/tep3o3h1TEa5XDDii7fWtqRzUEReP2fbxz7bHWWJdbIOxOUJZtItNZpTFRfj6vm9sYjRxQVO+WTdiOhdPeTJ+8YirPvoeL88l5iLYOHd3b/Imkq+1ZN1El3UikhftuteEYxf1Wujof8Pr4ICTu5ezZyZ4tHQMxlzUHLYO2VMOoNMGL/20S5i2o2obfk+8qqdR7xzbRDbgU0lnuIgz4LelQ5XS7xbLuSQtNS95v3ZUOdaUx/Qd8qxCt6xf2E62yb/HukLO6RyorV8KgYl5YNc75y+KvefrxY+lc/64y9kvWP0a0bDz/rojq+RWjO06WeruWqNFU7r3HPIcLWRql8ICZsz2Ls/qOm/CLn6++X+Qf7mGspYCrZod/lpl6Rw4xN/yuq8gqV4B6aHk1hVE1SfILxWu5gvXqbfARYQpspcxKp1F/c8XOPzkZvmoSw+vEqBLdrq1fr3wAPv5NnM9i8F+jdAuxkP5Z71c6uhK3enlnGymr7UsWZKC12qgUiG8XXGQ9mxnqz4GSIlybF9eXmbqj2sHX+a1jf0gRoONHRdRSrIq03Ty89eQ1GbV/Bk+du4+V15zls+vvERvZ4E7ZbnxWTVjDjb4o/k8jlw44pTIrUGxxuJvBeO+heuhOjpFsO6lVJ/aXnJDa/bM0Ql1cLbXE/Pbv3EZ3vj3iVrB5irjupZTzlnv677NrI9UNYNqbPgp/HZXS+lJmk87wec+7YOxTDo2aw2l3NfDr34VNlvqWJBknuK7oSlZ6/T10zuOoPZOeoIk81N+sL843WJ2Q4Z0fZ3scsqC/JV2fuhWi1jGURSKZV637lf53Xnnx16/vKEXY89aVJ0fv91jGdfG+G4+sniwHes4hS+udOr4RfhFhG/F5gUG35QaU+McuLmclb5ZWmR+sG5V6nf+PxYzlrnFGxpZaK8eqqVo0NfmAWoGfXDiT/FnUbWvzGDOTr8aktOZWg4BYvz5YH12ZbfCcGtNk+dDAZNGWvHov+PIOnY9Prjg8h/wLRrT69suaMVZ5bNuK00lSVpnqSX1NON/81FoP92rYndionwgOiA8WMf4vc8l15KqEEG4yAm2+WAN5Brfu1sq9suWYqgoajgOYt/JCk1gC8wPkK+XKCtRX6TAtgvrnuBgNRmn6I8lVDipOVB9kX6Oxkp4ZKyd1M6Gj8/v2U7k+YQBL95Kb9PQENucJb0JlW3b5tObN7m/Z1j1ev388d7o15zgXsI9CikAGAViR6lkJv7nb4Ak40M2G8TJ447kN+pvfHiOFjSUSP6PM+QfbAywKJCBaxSVxpizHseZUyUBhq59vFwrkyGoRiHbo0apweEZeSLuNiQ+HAekOnarFg00dZNXaPeoHPTRR0FmEyqYExOVaaaO8c0uFUh7U4e/UxdBmthlBDgg257Q33j1hA7HTxSeTTSuVnPZbgW1nodwmG16aKBDKxEetv7D9OjO0JhrbJTnoe+kcGoDJazFSO8/fUN9Jy/g4XK5PUkw2dgPDGpJqBfhe7GA+cjzfE/EGsMM+FV9nj9IAhrSfT/J3QE5TEIYyk5UjsI6ZZcCPr6A8FZUF4g9nnpVmjX90MLSQysIPD0nFzqwCcSJmIb5mYv2Cmk+C1MDFkZQyCBq4c/Yai9LJ6xYkGS/x2s5/frIW2vmG2Wrv0APpCdgCA9snFvfpe8uc0OwdRs4G9973PGEBnQB5qKrCQ6m6X/H7NInZ7y/1674/ZXOVp7OeuCRk8JFS516VHrnH1HkIUIlTIljjHaQtEtkJtosYul77cVwjk3gW1Ajaa6zWeyHGLlpk3VHE2VFzT2yI/EvlGUSz2H9zYE1s4nsKMtMqNyKNtL/59CpFJki5Fou6VXGm8vWATEPwrUVOLvoA8jLuwOzVBCgHB2Cr5V6OwEWtJEKokJkfc87h+sNHTvMb0KVTp5284QTPupoWvQVUwUeogZR3kBMESYo0mfukewRVPKh5+rzLQb7HKjFFIgWhj1w3yN/qCNoPI8XFiUgBNT1hCHBsAz8L7Oyt8wQWUFj92ONn/APyJFg8hzueqoJdNj57ROrFbffuS/XxrSXLTRgj5uxZjpgQYceeMc2wJrahReSKpm3QjHfqExTLAB2ipVumE8pqcZv8LYXQiPHHsgb5BMW8zM5pvQit+mQx8XGaVDcfVbLyMTlY8xcfmm/RSAT/H09UQol5gIz7rESDmnrQ4bURIB4iRXMDQwxgex1GgtDxKp2HayIkR+E/aDmCttNm2C6lytWdfOVzD6X2SpDWjQDlMRvAp1symWv4my1bPCD+E1EmGnMGWhNwmycJnDV2WrQNxO45ukEb08AAffizYKVULp15I4vbNK5DzWwCSUADfmKhfGSUqii1L2UsE8rB7mLuHuUJZOx4+WiizHBJ/hwboaBzhpNOVvgFTf5cJsHef7L1HCI9dOUUbb+YxUJWn6dYOLz+THi91kzY5dtO5c+grX7v0jEbsuoOGnoIreDIg/sFMyG+TyCLIcAWd1IZ1UNFxE8Uie13ucm40U2fcxC0u3WLvLOxwu+F7MWUsHsdtFQZ7W+nlfCASiAKyh8rnP3EyDByvtJb6Kax6/HkLzT9SyEyTMVM1zPtM0MJY14DmsWh4MgD15Ea9Hd00AdkTZ0EiG5NAGuIBzQJJ0JR0na+OB7lQA6UKxMfihIQ7GCCnVz694QvykWXTxpS2soDu+smru1UdIxSvAszBFD1c8c6ZOobA8bJiJIvuycgIXBQIXWwhyTgZDQxJTRXgEwRNAawGSXO0a1DKjdihLVNp/taE/xYhsgwe+VpKEEB4LlraQyE84gEihxCnbfoyOuJIEXy2FIYw+JjRusybKlU2g/vhTSGTydvCvXhYBdtAXtS2v7LkHtmXh/8fly1do8FI/D0f8UbzVb5h+KRhMGSAmR2mhi0YG/uj7wgxcfzCrMvdjitUIpXDX8ae2JcF/36qUWIMwN6JsjaRGNj+jEteGDcFyTUb8X/NHSucKMJp7pduxtD6KuxVlyxxwaeiC1FbGBESO84lbyrAugYxdl+2N8/6AgWpo/IeoAOcsG35IA/b3AuSyoa55L7llBLlaWlEWvuCFd8f8NfcTUgzJv6CbB+6ohWwodlk9nGWFpBAOaz5uEW5xBvmjnHFeDsb0mXwayj3mdYq5gxxNf3H3/tnCgHwjSrpSgVxLmiTtuszdRUFIsn6LiMPjL808vL1uQhDbM7aA43mISXReqjSskynIRcHCJ9qeFopJfx9tqyUoGbSwJex/0aDE3plBPGtNBYgWbdLom3+Q/bjdizR2/AS/c/dH/d3G7pyl1qDXgtOFtEqidwLqxPYtrNEveasWq3vPUUtqTeu8gpov4bdOQRI2kneFvRNMrShyVeEupK1PoLDPMSfWMIJcs267mGB8X9CehQCF0gIyhpP10mbyM7lwW1e6TGvHBV1sg/UyTghHPGRqMyaebC6pbB1WKNCQtlai1GGvmq9zUKaUzLaXsXEBYtHxmFbEZ2kJhR164LhWW2Tlp1dhsGE7ZgIWRBOx3Zcu2DxgH+G83WTPceKG0TgQKKiiNNOlWgvqNEbnrk6fVD+AqRam2OguZb0YWSTX88N+i/ELSxbaUUpPx4vJUzYg/WonSeA8xUK6u7DPHgpqWpEe6D4cXg5uK9FIYVba47V/nb+wyOtk+zG8RrS4EA0ouwa04iByRLSvoJA2FzaobbZtXnq8GdbfqEp5I2dpfpj59TCVif6+E75p665faiX8gS213RqBxTZqfHP46nF6NSenOneuT+vgbLUbdTH2/t0REFXZJOEB6DHvx6N6g9956CYrY/AYcm9gELJXYkrSi+0F0geKDZgOCIYkLU/+GOW5aGj8mvLFgtFH5+XC8hvAE3CvHRfl4ofM/Qwk4x2A+R+nyc9gNu/9Tem7XW4XRnyRymf52z09cTOdr+PG6+P/Vb4QiXlwauc5WB1z3o+IJjlbxI8MyWtSzT+k4sKVbhF3xa+vDts3NxXa87iiu+xRH9cAprnOL2h6vV54iQRXuOAj1s8nLFK8gZ70ThIQcWdF19/2xaJmT0efrkNDkWbpAQPdo92Z8+Hn/aLjbOzB9AI/k12fPs9HhUNDJ1u6ax2VxD3R6PywN7BrLJ26z6s3QoMp76qzzwetrDABKSGkfW5PwS1GvYNUbK6uRqxfyVGNyFB0E+OugMM8kKwmJmupuRWO8XkXXXQECyRVw9UyIrtCtcc4oNqXqr7AURBmKn6Khz3eBN96LwIJrAGP9mr/59uTOSx631suyT+QujDd4beUFpZ0kJEEnjlP+X/Kr2kCKhnENTg4BsMTOmMqlj2WMFLRUlVG0fzdCBgUta9odrJfpVdFomTi6ak0tFjXTcdqqvWBAzjY6hVrH9sbt3Z9gn+AVDpTcQImefbB4edirjzrsNievve4ZT4EUZWV3TxEsIW+9MT/RJoKfZZYSRGfC1CwPG/9rdMOM8qR/LUYvw5f/emUSoD7YSFuOoqchdUg2UePd1eCtFSKgxLSZ764oy4lvRCIH6bowPxZWwxNFctksLeil47pfevcBipkkBIc4ngZG+kxGZ71a72KQ7VaZ6MZOZkQJZXM6kb/Ac0/XkJx8dvyfJcWbI3zONEaEPIW8GbkYjsZcwy+eMoKrYjDmvEEixHzkCSCRPRzhOfJZuLdcbx19EL23MA8rnjTZZ787FGMnkqnpuzB5/90w1gtUSRaWcb0eta8198VEeZMUSfIhyuc4/nywFQ9uqn7jdqXh+5wwv+RK9XouNPbYdoEelNGo34KyySwigsrfCe0v/PlWPvQvQg8R0KgHO18mTVThhQrlbEQ0Kp/JxPdjHyR7E1QPw/ut0r+HDDG7BwZFm9IqEUZRpv2WpzlMkOemeLcAt5CsrzskLGaVOAxyySzZV/D2EY7ydNZMf8e8VhHcKGHAWNszf1EOq8fNstijMY4JXyATwTdncFFqcNDfDo+mWFvxJJpc4sEZtjXyBdoFcxbUmniCoKq5jydUHNjYJxMqN1KzYV62MugcELVhS3Bnd+TLLOh7dws/zSXWzxEb4Nj4aFun5x4kDWLK5TUF/yCXB/cZYvI9kPgVsG2jShtXkxfgT+xzjJofXqPEnIXIQ1lnIdmVzBOM90EXvJUW6a0nZ/7XjJGl8ToO3H/fdxnxmTNKBZxnkpXLVgLXCZywGT3YyS75w/PAH5I/jMuRspej8xZObU9kREbRA+kqjmKRFaKGWAmFQspC+QLbKPf0RaK3OXvBSWqo46p70ws/eZpu6jCtZUgQy6r4tHMPUdAgWGGUYNbuv/1a6K+MVFsd3T183+T8capSo6m0+Sh57fEeG/95dykGJBQMj09DSW2bY0mUonDy9a8trLnnL5B5LW3Nl8rJZNysO8Zb+80zXxqUGFpud3Qzwb7bf+8mq6x0TAnJU9pDQR9YQmZhlna2xuxJt0aCO/f1SU8gblOrbIyMsxTlVUW69VJPzYU2HlRXcqE2lLLxnObZuz2tT9CivfTAUYfmzJlt/lOPgsR6VN64/xQd4Jlk/RV7UKVv2Gx/AWsmTAuCWKhdwC+4HmKEKYZh2Xis4KsUR1BeObs1c13wqFRnocdmuheaTV30gvVXZcouzHKK5zwrN52jXJEuX6dGx3BCpV/++4f3hyaW/cQJLFKqasjsMuO3B3WlMq2gyYfdK1e7L2pO/tRye2mwzwZPfdUMrl5wdLqdd2Kv/wVtnpyWYhd49L6rsOV+8HXPrWH2Kup89l2tz6bf80iYSd+V4LROSOHeamvexR524q4r43rTmtFzQvArpvWfLYFZrbFspBsXNUqqenjxNNsFXatZvlIhk7teUPfK+YL32F8McTnjv0BZNppb+vshoCrtLXjIWq3EJXpVXIlG6ZNL0dh6qEm2WMwDjD3LfOfkGh1/czYc/0qhiD2ozNnH4882MVVt3JbVFkbwowNCO3KL5IoYW5wlVeGCViOuv1svZx7FbzxKzA4zGqBlRRaRWCobXaVq4yYCWbZf8eiJwt3OY+MFiSJengcFP2t0JMfzOiJ7cECvpx7neg1Rc5x+7myPJOXt2FohVRyXtD+/rDoTOyGYInJelZMjolecVHUhUNqvdZWg2J2t0jPmiLFeRD/8fOT4o+NGILb+TufCo9ceBBm3JLVn+MO2675n7qiEX/6W+188cYg3Zn5NSTjgOKfWFSAANa6raCxSoVU851oJLY11WIoYK0du0ec5E4tCnAPoKh71riTsjVIp3gKvBbEYQiNYrmH22oLQWA2AdwMnID6PX9b58dR2QKo4qag1D1Z+L/FwEKTR7osOZPWECPJIHQqPUsM5i/CH5YupVPfFA5pHUBcsesh8eO5YhyWnaVRPZn/BmdXVumZWPxMP5e28zm2uqHgFoT9CymHYNNrzrrjlXZM06HnzDxYNlI5b/QosxLmmrqDFqmogQdqk0WLkUceoAvQxHgkIyvWU69BPFr24VB6+lx75Rna6dGtrmOxDnvBojvi1/4dHjVeg8owofPe1cOnxU1ioh016s/Vudv9mhV9f35At+Sh28h1bpp8xhr09+vf47Elx3Ms6hyp6QvB3t0vnLbOhwo660cp7K0vvepabK7YJfxEWWfrC2YzJfYOjygPwfwd/1amTqa0hZ5ueebhWYVMubRTwIjj+0Oq0ohU3zfRfuL8gt59XsHdwKtxTQQ4Y2qz6gisxnm2UdlmpEkgOsZz7iEk6QOt8BuPwr+NR01LTqXmJo1C76o1N274twJvl+I069TiLpenK/miRxhyY8jvYV6W1WuSwhH9q7kuwnJMtm7IWcqs7HsnyHSqWXLSpYtZGaR1V3t0gauninFPZGtWskF65rtti48UV9uV9KM8kfDYs0pgB00S+TlzTXV6P8mxq15b9En8sz3jWSszcifZa/NuufPNnNTb031pptt0+sRSH/7UG8pzbsgtt3OG3ut7B9JzDMt2mTZuyRNIV8D54TuTrpNcHtgmMlYJeiY9XS83NYJicjRjtJSf9BZLsQv629QdDsKQhTK5CnXhpk7vMNkHzPhm0ExW/VCGApHfPyBagtZQTQmPHx7g5IXXsrQDPzIVhv2LB6Ih138iSDww1JNHrDvzUxvp73MsQBVhW8EbrReaVUcLB1R3PUXyaYG4HpJUcLVxMgDxcPkVRQpL7VTAGabDzbKcvg12t5P8TSGQkrj/gOrpnbiDHwluA73xbXts/L7u468cRWSWRtgTwlQnA47EKg0OiZDgFxAKQQUcsbGomITgeXUAAyKe03eA7Mp4gnyKQmm0LXJtEk6ddksMJCuxDmmHzmVhO+XaN2A54MIh3niw5CF7PwiXFZrnA8wOdeHLvvhdoqIDG9PDI7UnWWHq526T8y6ixJPhkuVKZnoUruOpUgOOp3iIKBjk+yi1vHo5cItHXb1PIKzGaZlRS0g5d3MV2pD8FQdGYLZ73aae/eEIUePMc4NFz8pIUfLCrrF4jVWH5gQneN3S8vANBmUXrEcKGn6hIUN95y1vpsvLwbGpzV9L0ZKTan6TDXM05236uLJcIEMKVAxKNT0K8WljuwNny3BNQRfzovA85beI9zr1AGNYnYCVkR1aGngWURUrgqR+gRrQhxW81l3CHevjvGEPzPMTxdsIfB9dfGRbZU0cg/1mcubtECX4tvaedmNAvTxCJtc2QaoUalGfENCGK7IS/O8CRpdOVca8EWCRwv2sSWE8CJPW5PCugjCXPd3h6U60cPD+bdhtXZuYB6stcoveE7Sm5MM2yvfUHXFSW7KzLmi7/EeEWL0wqcOH9MOSKjhCHHmw+JGLcYE/7SBZQCRggox0ZZTAxrlzNNXYXL5fNIjkdT4YMqVUz6p8YDt049v4OXGdg3qTrtLBUXOZf7ahPlZAY/O+7Sp0bvGSHdyQ8B1LOsplqMb9Se8VAE7gIdSZvxbRSrfl+Lk5Qaqi5QJceqjitdErcHXg/3MryljPSIAMaaloFm1cVwBJ8DNmkDqoGROSHFetrgjQ5CahuKkdH5pRPigMrgTtlFI8ufJPJSUlGgTjbBSvpRc0zypiUn6U5KZqcRoyrtzhmJ7/caeZkmVRwJQeLOG8LY6vP5ChpKhc8Js0El+n6FXqbx9ItdtLtYP92kKfaTLtCi8StLZdENJa9Ex1nOoz1kQ7qxoiZFKRyLf4O4CHRT0T/0W9F8epNKVoeyxUXhy3sQMMsJjQJEyMOjmOhMFgOmmlscV4eFi1CldU92yjwleirEKPW3bPAuEhRZV7JsKV3Lr5cETAiFuX5Nw5UlF7d2HZ96Bh0sgFIL5KGaKSoVYVlvdKpZJVP5+NZ7xDEkQhmDgsDKciazJCXJ6ZN2B3FY2f6VZyGl/t4aunGIAk/BHaS+i+SpdRfnB/OktOvyjinWNfM9Ksr6WwtCa1hCmeRI6icpFM4o8quCLsikU0tMoZI/9EqXRMpKGaWzofl4nQuVQm17d5fU5qXCQeCDqVaL9XJ9qJ08n3G3EFZS28SHEb3cdRBdtO0YcTzil3QknNKEe/smQ1fTb0XbpyNB5xAeuIlf+5KWlEY0DqJbsnzJlQxJPOVyHiKMx5Xu9FcEv1Fbg6Fhm4t+Jyy5JC1W3YO8dYLsO0PXPbxodBgttTbH3rt9Cp1lJIk2r3O1Zqu94eRbnIz2f50lWolYzuKsj4PMok4abHLO8NAC884hiXx5Fy5pWKO0bWL7uEGXaJCtznhP67SlQ4xjWIfgq6EpZ28QMtuZK7JC0RGbl9nA4XtFLug/NLMoH1pGt9IonAJqcEDLyH6TDROcbsmGPaGIxMo41IUAnQVPMPGByp4mOmh9ZQMkBAcksUK55LsZj7E5z5XuZoyWCKu6nHmDq22xI/9Z8YdxJy4kWpD16jLVrpwGLWfyOD0Wd+cBzFBxVaGv7S5k9qwh/5t/LQEXsRqI3Q9Rm3QIoaZW9GlsDaKOUyykyWuhNOprSEi0s1G4rgoiX1V743EELti+pJu5og6X0g6oTynUqlhH9k6ezyRi05NGZHz0nvp3HOJr7ebrAUFrDjbkFBObEvdQWkkUbL0pEvMU46X58vF9j9F3j6kpyetNUBItrEubW9ZvMPM4qNqLlsSBJqOH3XbNwv/cXDXNxN8iFLzUhteisYY+RlHYOuP29/Cb+L+xv+35Rv7xudnZ6ohK4cMPfCG8KI7dNmjNk/H4e84pOxn/sZHK9psfvj8ncA8qJz7O8xqbxESDivGJOZzF7o5PJLQ7g34qAWoyuA+x3btU98LT6ZyGyceIXjrqob2CAVql4VOTQPUQYvHV/g4zAuCZGvYQBtf0wmd5lilrvuEn1BXLny01B4h4SMDlYsnNpm9d7m9h578ufpef9Z4WplqWQvqo52fyUA7J24eZD5av6SyGIV9kpmHNqyvdfzcpEMw97BvknV2fq+MFHun9BT3Lsf8pbzvisWiIQvYkng+8Vxk1V+dli1u56kY50LRjaPdotvT5BwqtwyF+emo/z9J3yVUVGfKrxQtJMOAQWoQii/4dp9wgybSa5mkucmRLtEQZ/pz0tL/NVcgWAd95nEQ3Tg6tNbuyn3Iepz65L3huMUUBntllWuu4DbtOFSMSbpILV4fy6wlM0SOvi6CpLh81c1LreIvKd61uEWBcDw1lUBUW1I0Z+m/PaRlX+PQ/oxg0Ye6KUiIiTF4ADNk59Ydpt5/rkxmq9tV5Kcp/eQLUVVmBzQNVuytQCP6Ezd0G8eLxWyHpmZWJ3bAzkWTtg4lZlw42SQezEmiUPaJUuR/qklVA/87S4ArFCpALdY3QRdUw3G3XbWUp6aq9z0zUizcPa7351p9JXOZyfdZBFnqt90VzQndXB/mwf8LC9STj5kenVpNuqOQQP3mIRJj7eV21FxG8VAxKrEn3c+XfmZ800EPb9/5lIlijscUbB6da0RQaMook0zug1G0tKi/JBC4rw7/D3m4ARzAkzMcVrDcT2SyFtUdWAsFlsPDFqV3N+EjyXaoEePwroaZCiLqEzb8MW+PNE9TmTC01EzWli51PzZvUqkmyuROU+V6ik+Le/9qT6nwzUzf9tP68tYei0YaDGx6kAd7jn1cKqOCuYbiELH9zYqcc4MnRJjkeGiqaGwLImhyeKs+xKJMBlOJ05ow9gGCKZ1VpnMKoSCTbMS+X+23y042zOb5MtcY/6oBeAo1Vy89OTyhpavFP78jXCcFH0t7Gx24hMEOm2gsEfGabVpQgvFqbQKMsknFRRmuPHcZu0Su/WMFphZvB2r/EGbG72rpGGho3h+Msz0uGzJ7hNK2uqQiE1qmn0zgacKYYZBCqsxV+sjbpoVdSilW/b94n2xNb648VmNIoizqEWhBnsen+d0kbCPmRItfWqSBeOd9Wne3c6bcd6uvXOJ6WdiSsuXq0ndhqrQ4QoWUjCjYtZ0EAhnSOP1m44xkf0O7jXghrzSJWxP4a/t72jU29Vu2rvu4n7HfHkkmQOMGSS+NPeLGO5I73mC2B7+lMiBQQZRM9/9liLIfowupUFAbPBbR+lxDM6M8Ptgh1paJq5Rvs7yEuLQv/7d1oU2woFSb3FMPWQOKMuCuJ7pDDjpIclus5TeEoMBy2YdVB4fxmesaCeMNsEgTHKS5WDSGyNUOoEpcC2OFWtIRf0w27ck34/DjxRTVIcc9+kqZE6iMSiVDsiKdP/Xz5XfEhm/sBhO50p1rvJDlkyyxuJ9SPgs7YeUJBjXdeAkE+P9OQJm6SZnn1svcduI78dYmbkE2mtziPrcjVisXG78spLvbZaSFx/Rks9zP4LKn0Cdz/3JsetkT06A8f/yCgMO6Mb1Hme0JJ7b2wZz1qleqTuKBGokhPVUZ0dVu+tnQYNEY1fmkZSz6+EGZ5EzL7657mreZGR3jUfaEk458PDniBzsSmBKhDRzfXameryJv9/D5m6HIqZ0R+ouCE54Dzp4IJuuD1e4Dc5i+PpSORJfG23uVgqixAMDvchMR0nZdH5brclYwRoJRWv/rlxGRI5ffD5NPGmIDt7vDE1434pYdVZIFh89Bs94HGGJbTwrN8T6lh1HZFTOB4lWzWj6EVqxSMvC0/ljWBQ3F2kc/mO2b6tWonT2JEqEwFts8rz2h+oWNds9ceR2cb7zZvJTDppHaEhK5avWqsseWa2Dt5BBhabdWSktS80oMQrL4TvAM9b5HMmyDnO+OkkbMXfUJG7eXqTIG6lqSOEbqVR+qYdP7uWb57WEJqzyh411GAVsDinPs7KvUeXItlcMdOUWzXBH6zscymV1LLVCtc8IePojzXHF9m5b5zGwBRdzcyUJkiu938ApmAayRdJrX1PmVguWUvt2ThQ62czItTyWJMW2An/hdDfMK7SiFQlGIdAbltHz3ycoh7j9V7GxNWBpbtcSdqm4XxRwTawc3cbZ+xfSv9qQfEkDKfZTwCkqWGI/ur250ItXlMlh6vUNWEYIg9A3GzbgmbqvTN8js2YMo87CU5y6nZ4dbJLDQJj9fc7yM7tZzJDZFtqOcU8+mZjYlq4VmifI23iHb1ZoT9E+kT2dolnP1AfiOkt7PQCSykBiXy5mv637IegWSKj9IKrYZf4Lu9+I7ub+mkRdlvYzehh/jaJ9n7HUH5b2IbgeNdkY7wx1yVzxS7pbvky6+nmVUtRllEFfweUQ0/nG017WoUYSxs+j2B4FV/F62EtHlMWZXYrjGHpthnNb1x66LKZ0Qe92INWHdfR/vqp02wMS8r1G4dJqHok8KmQ7947G13a4YXbsGgHcBvRuVu1eAi4/A5+ZixmdSXM73LupB/LH7O9yxLTVXJTyBbI1S49TIROrfVCOb/czZ9pM4JsZx8kUz8dQGv7gUWKxXvTH7QM/3J2OuXXgciUhqY+cgtaOliQQVOYthBLV3xpESZT3rmfEYNZxmpBbb24CRao86prn+i9TNOh8VxRJGXJfXHATJHs1T5txgc/opYrY8XjlGQQbRcoxIBcnVsMjmU1ymmIUL4dviJXndMAJ0Yet+c7O52/p98ytlmAsGBaTAmMhimAnvp1TWNGM9BpuitGj+t810CU2UhorrjPKGtThVC8WaXw04WFnT5fTjqmPyrQ0tN3CkLsctVy2xr0ZWgiWVZ1OrlFjjxJYsOiZv2cAoOvE+7sY0I/TwWcZqMoyIKNOftwP7w++Rfg67ljfovKYa50if3fzE/8aPYVey/Nq35+nH2sLPh/fP5TsylSKGOZ4k69d2PnH43+kq++sRXHQqGArWdwhx+hpwQC6JgT2uxehYU4Zbw7oNb6/HLikPyJROGK2ouyr+vzseESp9G50T4AyFrSqOQ0rroCYP4sMDFBrHn342EyZTMlSyk47rHSq89Y9/nI3zG5lX16Z5lxphguLOcZUndL8wNcrkyjH82jqg8Bo8OYkynrxZvbFno5lUS3OPr8Ko3mX9NoRPdYOKKjD07bvgFgpZ/RF+YzkWvJ/Hs/tUbfeGzGWLxNAjfDzHHMVSDwB5SabQLsIZHiBp43FjGkaienYoDd18hu2BGwOK7U3o70K/WY/kuuKdmdrykIBUdG2mvE91L1JtTbh20mOLbk1vCAamu7utlXeGU2ooVikbU/actcgmsC1FKk2qmj3GWeIWbj4tGIxE7BLcBWUvvcnd/lYxsMV4F917fWeFB/XbINN3qGvIyTpCalz1lVewdIGqeAS/gB8Mi+sA+BqDiX3VGD2eUunTRbSY+AuDy4E3Qx3hAhwnSXX+B0zuj3eQ1miS8Vux2z/l6/BkWtjKGU72aJkOCWhGcSf3+kFkkB15vGOsQrSdFr6qTj0gBYiOlnBO41170gOWHSUoBVRU2JjwppYdhIFDfu7tIRHccSNM5KZOFDPz0TGMAjzzEpeLwTWp+kn201kU6NjbiMQJx83+LX1e1tZ10kuChJZ/XBUQ1dwaBHjTDJDqOympEk8X2M3VtVw21JksChA8w1tTefO3RJ1FMbqZ01bHHkudDB/OhLfe7P5GOHaI28ZXKTMuqo0hLWQ4HabBsGG7NbP1RiXtETz074er6w/OerJWEqjmkq2y51q1BVI+JUudnVa3ogBpzdhFE7fC7kybrAt2Z6RqDjATAUEYeYK45WMupBKQRtQlU+uNsjnzj6ZmGrezA+ASrWxQ6LMkHRXqXwNq7ftv28dUx/ZSJciDXP2SWJsWaN0FjPX9Yko6LobZ7aYW/IdUktI9apTLyHS8DyWPyuoZyxN1TK/vtfxk3HwWh6JczZC8Ftn0bIJay2g+n5wd7lm9rEsKO+svqVmi+c1j88hSCxbzrg4+HEP0Nt1/B6YW1XVm09T1CpAKjc9n18hjqsaFGdfyva1ZG0Xu3ip6N6JGpyTSqY5h4BOlpLPaOnyw45PdXTN+DtAKg7DLrLFTnWusoSBHk3s0d7YouJHq85/R09Tfc37ENXZF48eAYLnq9GLioNcwDZrC6FW6godB8JnqYUPvn0pWLfQz0lM0Yy8Mybgn84Ds3Q9bDP10bLyOV+qzxa4Rd9Dhu7cju8mMaONXK3UqmBQ9qIg7etIwEqM/kECk/Dzja4Bs1xR+Q/tCbc8IKrSGsTdJJ0vge7IG20W687uVmK6icWQ6cD3lwFzgNMGtFvO5qyJeKflGLAAcQZOrkxVwy3cWvqlGpvjmf9Qe6Ap20MPbV92DPV0OhFM4kz8Yr0ffC2zLWSQ1kqY6QdQrttR3kh1YLtQd1kCEv5hVoPIRWl5ERcUTttBIrWp6Xs5Ehh5OUUwI5aEBvuiDmUoENmnVw1FohCrbRp1A1E+XSlWVOTi7ADW+5Ohb9z1vK4qx5R5lPdGCPBJZ00mC+Ssp8VUbgpGAvXWMuWQQRbCqI6Rr2jtxZxtfP7W/8onz+yz0Gs76LaT5HX9ecyiZCB/ZR/gFtMxPsDwohoeCRtiuLxE1GM1vUEUgBv86+eehL58/P56QFGQ/MqOe/vC76L63jzmeax4exd/OKTUvkXg+fOJUHych9xt/9goJMrapSgvXrj8+8vk/N80f22Sewj6cyGqt1B6mztoeklVHHraouhvHJaG/OuBz6DHKMpFmQULU1bRWlyYE0RPXYYkUycIemN7TLtgNCJX6BqdyxDKkegO7nJK5xQ7OVYDZTMf9bVHidtk6DQX9Et+V9M7esgbsYBdEeUpsB0Xvw2kd9+rI7V+m47u+O/tq7mw7262HU1WlS9uFzsV6JxIHNmUCy0QS9e077JGRFbG65z3/dOKB/Zk+yDdKpUmdXjn/aS3N5nv4fK7bMHHmPlHd4E2+iTbV5rpzScRnxk6KARuDTJ8Q1LpK2mP8gj1EbuJ9RIyY+EWK4hCiIDBAS1Tm2IEXAFfgKPgdL9O6mAa06wjCcUAL6EsxPQWO9VNegBPm/0GgkZbDxCynxujX/92vmGcjZRMAY45puak2sFLCLSwXpEsyy5fnF0jGJBhm+fNSHKKUUfy+276A7/feLOFxxUuHRNJI2Osenxyvf8DAGObT60pfTTlhEg9u/KKkhJqm5U1/+BEcSkpFDA5XeCqxwXmPac1jcuZ3JWQ+p0NdWzb/5v1ZvF8GtMTFFEdQjpLO0bwPb0BHNWnip3liDXI2fXf05jjvfJ0NpjLCUgfTh9CMFYVFKEd4Z/OG/2C+N435mnK+9t1gvCiVcaaH7rK4+PjCvpVNiz+t2QyqH1O8x3JKZVl6Q+Lp/XK8wMjVMslOq9FdSw5FtUs/CptXH9PW+wbWHgrV17R5jTVOtGtKFu3nb80T+E0tv9QkzW3J2dbaw/8ddAKZ0pxIaEqLjlPrji3VgJ3GvdFvlqD8075woxh4fVt0JZE0KVFsAvqhe0dqN9b35jtSpnYMXkU+vZq+IAHad3IHc2s/LYrnD1anfG46IFiMIr9oNbZDWvwthqYNqOigaKd/XlLU4XHfk/PXIjPsLy/9/kAtQ+/wKH+hI/IROWj5FPvTZAT9f7j4ZXQyG4M0TujMAFXYkKvEHv1xhySekgXGGqNxWeWKlf8dDAlLuB1cb/qOD+rk7cmwt+1yKpk9cudqBanTi6zTbXRtV8qylNtjyOVKy1HTz0GW9rjt6sSjAZcT5R+KdtyYb0zyqG9pSLuCw5WBwAn7fjBjKLLoxLXMI+52L9cLwIR2B6OllJZLHJ8vDxmWdtF+QJnmt1rsHPIWY20lftk8fYePkAIg6Hgn532QoIpegMxiWgAOfe5/U44APR8Ac0NeZrVh3gEhs12W+tVSiWiUQekf/YBECUy5fdYbA08dd7VzPAP9aiVcIB9k6tY7WdJ1wNV+bHeydNtmC6G5ICtFC1ZwmJU/j8hf0I8TRVKSiz5oYIa93EpUI78X8GYIAZabx47/n8LDAAJ0nNtP1rpROprqKMBRecShca6qXuTSI3jZBLOB3Vp381B5rCGhjSvh/NSVkYp2qIdP/Bg="; + }, + {} + ], + 6: [ + function(require2, module2, exports2) { + var data = require2("./dictionary-browser"); + exports2.init = function() { + exports2.dictionary = data.init(); + }; + exports2.offsetsByLength = new Uint32Array([ + 0, + 0, + 0, + 0, + 0, + 4096, + 9216, + 21504, + 35840, + 44032, + 53248, + 63488, + 74752, + 87040, + 93696, + 100864, + 104704, + 106752, + 108928, + 113536, + 115968, + 118528, + 119872, + 121280, + 122016 + ]); + exports2.sizeBitsByLength = new Uint8Array([ + 0, + 0, + 0, + 0, + 10, + 10, + 11, + 11, + 10, + 10, + 10, + 10, + 10, + 9, + 9, + 8, + 7, + 7, + 8, + 7, + 7, + 6, + 6, + 5, + 5 + ]); + exports2.minDictionaryWordLength = 4; + exports2.maxDictionaryWordLength = 24; + }, + { "./dictionary-browser": 4 } + ], + 7: [ + function(require2, module2, exports2) { + function HuffmanCode(bits, value) { + this.bits = bits; + this.value = value; + } + exports2.HuffmanCode = HuffmanCode; + var MAX_LENGTH = 15; + function GetNextKey(key, len) { + var step = 1 << len - 1; + while (key & step) { + step >>= 1; + } + return (key & step - 1) + step; + } + function ReplicateValue(table, i2, step, end, code) { + do { + end -= step; + table[i2 + end] = new HuffmanCode( + code.bits, + code.value + ); + } while (end > 0); + } + function NextTableBitSize(count, len, root_bits) { + var left = 1 << len - root_bits; + while (len < MAX_LENGTH) { + left -= count[len]; + if (left <= 0) break; + ++len; + left <<= 1; + } + return len - root_bits; + } + exports2.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) { + var start_table = table; + var code; + var len; + var symbol; + var key; + var step; + var low; + var mask; + var table_bits; + var table_size; + var total_size; + var sorted; + var count = new Int32Array( + MAX_LENGTH + 1 + ); + var offset = new Int32Array( + MAX_LENGTH + 1 + ); + sorted = new Int32Array(code_lengths_size); + for (symbol = 0; symbol < code_lengths_size; symbol++) { + count[code_lengths[symbol]]++; + } + offset[1] = 0; + for (len = 1; len < MAX_LENGTH; len++) { + offset[len + 1] = offset[len] + count[len]; + } + for (symbol = 0; symbol < code_lengths_size; symbol++) { + if (code_lengths[symbol] !== 0) { + sorted[offset[code_lengths[symbol]]++] = symbol; + } + } + table_bits = root_bits; + table_size = 1 << table_bits; + total_size = table_size; + if (offset[MAX_LENGTH] === 1) { + for (key = 0; key < total_size; ++key) { + root_table[table + key] = new HuffmanCode( + 0, + sorted[0] & 65535 + ); + } + return total_size; + } + key = 0; + symbol = 0; + for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { + for (; count[len] > 0; --count[len]) { + code = new HuffmanCode( + len & 255, + sorted[symbol++] & 65535 + ); + ReplicateValue( + root_table, + table + key, + step, + table_size, + code + ); + key = GetNextKey(key, len); + } + } + mask = total_size - 1; + low = -1; + for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) { + for (; count[len] > 0; --count[len]) { + if ((key & mask) !== low) { + table += table_size; + table_bits = NextTableBitSize( + count, + len, + root_bits + ); + table_size = 1 << table_bits; + total_size += table_size; + low = key & mask; + root_table[start_table + low] = new HuffmanCode( + table_bits + root_bits & 255, + table - start_table - low & 65535 + ); + } + code = new HuffmanCode( + len - root_bits & 255, + sorted[symbol++] & 65535 + ); + ReplicateValue( + root_table, + table + (key >> root_bits), + step, + table_size, + code + ); + key = GetNextKey(key, len); + } + } + return total_size; + }; + }, + {} + ], + 8: [ + function(require2, module2, exports2) { + "use strict"; + exports2.byteLength = byteLength; + exports2.toByteArray = toByteArray; + exports2.fromByteArray = fromByteArray; + var lookup = []; + var revLookup = []; + var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; + var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for (var i2 = 0, len = code.length; i2 < len; ++i2) { + lookup[i2] = code[i2]; + revLookup[code.charCodeAt(i2)] = i2; + } + revLookup["-".charCodeAt(0)] = 62; + revLookup["_".charCodeAt(0)] = 63; + function getLens(b64) { + var len2 = b64.length; + if (len2 % 4 > 0) { + throw new Error( + "Invalid string. Length must be a multiple of 4" + ); + } + var validLen = b64.indexOf("="); + if (validLen === -1) validLen = len2; + var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4; + return [validLen, placeHoldersLen]; + } + function byteLength(b64) { + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; + } + function _byteLength(b64, validLen, placeHoldersLen) { + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; + } + function toByteArray(b64) { + var tmp; + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + var arr = new Arr( + _byteLength(b64, validLen, placeHoldersLen) + ); + var curByte = 0; + var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen; + for (var i22 = 0; i22 < len2; i22 += 4) { + tmp = revLookup[b64.charCodeAt(i22)] << 18 | revLookup[b64.charCodeAt(i22 + 1)] << 12 | revLookup[b64.charCodeAt(i22 + 2)] << 6 | revLookup[b64.charCodeAt(i22 + 3)]; + arr[curByte++] = tmp >> 16 & 255; + arr[curByte++] = tmp >> 8 & 255; + arr[curByte++] = tmp & 255; + } + if (placeHoldersLen === 2) { + tmp = revLookup[b64.charCodeAt(i22)] << 2 | revLookup[b64.charCodeAt(i22 + 1)] >> 4; + arr[curByte++] = tmp & 255; + } + if (placeHoldersLen === 1) { + tmp = revLookup[b64.charCodeAt(i22)] << 10 | revLookup[b64.charCodeAt(i22 + 1)] << 4 | revLookup[b64.charCodeAt(i22 + 2)] >> 2; + arr[curByte++] = tmp >> 8 & 255; + arr[curByte++] = tmp & 255; + } + return arr; + } + function tripletToBase64(num) { + return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63]; + } + function encodeChunk(uint8, start, end) { + var tmp; + var output = []; + for (var i22 = start; i22 < end; i22 += 3) { + tmp = (uint8[i22] << 16 & 16711680) + (uint8[i22 + 1] << 8 & 65280) + (uint8[i22 + 2] & 255); + output.push(tripletToBase64(tmp)); + } + return output.join(""); + } + function fromByteArray(uint8) { + var tmp; + var len2 = uint8.length; + var extraBytes = len2 % 3; + var parts = []; + var maxChunkLength = 16383; + for (var i22 = 0, len22 = len2 - extraBytes; i22 < len22; i22 += maxChunkLength) { + parts.push( + encodeChunk( + uint8, + i22, + i22 + maxChunkLength > len22 ? len22 : i22 + maxChunkLength + ) + ); + } + if (extraBytes === 1) { + tmp = uint8[len2 - 1]; + parts.push( + lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "==" + ); + } else if (extraBytes === 2) { + tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1]; + parts.push( + lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "=" + ); + } + return parts.join(""); + } + }, + {} + ], + 9: [ + function(require2, module2, exports2) { + function PrefixCodeRange(offset, nbits) { + this.offset = offset; + this.nbits = nbits; + } + exports2.kBlockLengthPrefixCode = [ + new PrefixCodeRange(1, 2), + new PrefixCodeRange(5, 2), + new PrefixCodeRange(9, 2), + new PrefixCodeRange(13, 2), + new PrefixCodeRange(17, 3), + new PrefixCodeRange(25, 3), + new PrefixCodeRange(33, 3), + new PrefixCodeRange(41, 3), + new PrefixCodeRange(49, 4), + new PrefixCodeRange(65, 4), + new PrefixCodeRange(81, 4), + new PrefixCodeRange(97, 4), + new PrefixCodeRange(113, 5), + new PrefixCodeRange(145, 5), + new PrefixCodeRange(177, 5), + new PrefixCodeRange(209, 5), + new PrefixCodeRange(241, 6), + new PrefixCodeRange(305, 6), + new PrefixCodeRange(369, 7), + new PrefixCodeRange(497, 8), + new PrefixCodeRange(753, 9), + new PrefixCodeRange(1265, 10), + new PrefixCodeRange(2289, 11), + new PrefixCodeRange(4337, 12), + new PrefixCodeRange(8433, 13), + new PrefixCodeRange(16625, 24) + ]; + exports2.kInsertLengthPrefixCode = [ + new PrefixCodeRange(0, 0), + new PrefixCodeRange(1, 0), + new PrefixCodeRange(2, 0), + new PrefixCodeRange(3, 0), + new PrefixCodeRange(4, 0), + new PrefixCodeRange(5, 0), + new PrefixCodeRange(6, 1), + new PrefixCodeRange(8, 1), + new PrefixCodeRange(10, 2), + new PrefixCodeRange(14, 2), + new PrefixCodeRange(18, 3), + new PrefixCodeRange(26, 3), + new PrefixCodeRange(34, 4), + new PrefixCodeRange(50, 4), + new PrefixCodeRange(66, 5), + new PrefixCodeRange(98, 5), + new PrefixCodeRange(130, 6), + new PrefixCodeRange(194, 7), + new PrefixCodeRange(322, 8), + new PrefixCodeRange(578, 9), + new PrefixCodeRange(1090, 10), + new PrefixCodeRange(2114, 12), + new PrefixCodeRange(6210, 14), + new PrefixCodeRange(22594, 24) + ]; + exports2.kCopyLengthPrefixCode = [ + new PrefixCodeRange(2, 0), + new PrefixCodeRange(3, 0), + new PrefixCodeRange(4, 0), + new PrefixCodeRange(5, 0), + new PrefixCodeRange(6, 0), + new PrefixCodeRange(7, 0), + new PrefixCodeRange(8, 0), + new PrefixCodeRange(9, 0), + new PrefixCodeRange(10, 1), + new PrefixCodeRange(12, 1), + new PrefixCodeRange(14, 2), + new PrefixCodeRange(18, 2), + new PrefixCodeRange(22, 3), + new PrefixCodeRange(30, 3), + new PrefixCodeRange(38, 4), + new PrefixCodeRange(54, 4), + new PrefixCodeRange(70, 5), + new PrefixCodeRange(102, 5), + new PrefixCodeRange(134, 6), + new PrefixCodeRange(198, 7), + new PrefixCodeRange(326, 8), + new PrefixCodeRange(582, 9), + new PrefixCodeRange(1094, 10), + new PrefixCodeRange(2118, 24) + ]; + exports2.kInsertRangeLut = [0, 0, 8, 8, 0, 16, 8, 16, 16]; + exports2.kCopyRangeLut = [0, 8, 0, 8, 16, 0, 16, 8, 16]; + }, + {} + ], + 10: [ + function(require2, module2, exports2) { + function BrotliInput(buffer) { + this.buffer = buffer; + this.pos = 0; + } + BrotliInput.prototype.read = function(buf, i2, count) { + if (this.pos + count > this.buffer.length) { + count = this.buffer.length - this.pos; + } + for (var p3 = 0; p3 < count; p3++) + buf[i2 + p3] = this.buffer[this.pos + p3]; + this.pos += count; + return count; + }; + exports2.BrotliInput = BrotliInput; + function BrotliOutput(buf) { + this.buffer = buf; + this.pos = 0; + } + BrotliOutput.prototype.write = function(buf, count) { + if (this.pos + count > this.buffer.length) + throw new Error( + "Output buffer is not large enough" + ); + this.buffer.set(buf.subarray(0, count), this.pos); + this.pos += count; + return count; + }; + exports2.BrotliOutput = BrotliOutput; + }, + {} + ], + 11: [ + function(require2, module2, exports2) { + var BrotliDictionary = require2("./dictionary"); + var kIdentity = 0; + var kOmitLast1 = 1; + var kOmitLast2 = 2; + var kOmitLast3 = 3; + var kOmitLast4 = 4; + var kOmitLast5 = 5; + var kOmitLast6 = 6; + var kOmitLast7 = 7; + var kOmitLast8 = 8; + var kOmitLast9 = 9; + var kUppercaseFirst = 10; + var kUppercaseAll = 11; + var kOmitFirst1 = 12; + var kOmitFirst2 = 13; + var kOmitFirst3 = 14; + var kOmitFirst4 = 15; + var kOmitFirst5 = 16; + var kOmitFirst6 = 17; + var kOmitFirst7 = 18; + var kOmitFirst8 = 19; + var kOmitFirst9 = 20; + function Transform(prefix, transform, suffix) { + this.prefix = new Uint8Array(prefix.length); + this.transform = transform; + this.suffix = new Uint8Array(suffix.length); + for (var i2 = 0; i2 < prefix.length; i2++) + this.prefix[i2] = prefix.charCodeAt(i2); + for (var i2 = 0; i2 < suffix.length; i2++) + this.suffix[i2] = suffix.charCodeAt(i2); + } + var kTransforms = [ + new Transform("", kIdentity, ""), + new Transform("", kIdentity, " "), + new Transform(" ", kIdentity, " "), + new Transform("", kOmitFirst1, ""), + new Transform("", kUppercaseFirst, " "), + new Transform("", kIdentity, " the "), + new Transform(" ", kIdentity, ""), + new Transform("s ", kIdentity, " "), + new Transform("", kIdentity, " of "), + new Transform("", kUppercaseFirst, ""), + new Transform("", kIdentity, " and "), + new Transform("", kOmitFirst2, ""), + new Transform("", kOmitLast1, ""), + new Transform(", ", kIdentity, " "), + new Transform("", kIdentity, ", "), + new Transform(" ", kUppercaseFirst, " "), + new Transform("", kIdentity, " in "), + new Transform("", kIdentity, " to "), + new Transform("e ", kIdentity, " "), + new Transform("", kIdentity, '"'), + new Transform("", kIdentity, "."), + new Transform("", kIdentity, '">'), + new Transform("", kIdentity, "\n"), + new Transform("", kOmitLast3, ""), + new Transform("", kIdentity, "]"), + new Transform("", kIdentity, " for "), + new Transform("", kOmitFirst3, ""), + new Transform("", kOmitLast2, ""), + new Transform("", kIdentity, " a "), + new Transform("", kIdentity, " that "), + new Transform(" ", kUppercaseFirst, ""), + new Transform("", kIdentity, ". "), + new Transform(".", kIdentity, ""), + new Transform(" ", kIdentity, ", "), + new Transform("", kOmitFirst4, ""), + new Transform("", kIdentity, " with "), + new Transform("", kIdentity, "'"), + new Transform("", kIdentity, " from "), + new Transform("", kIdentity, " by "), + new Transform("", kOmitFirst5, ""), + new Transform("", kOmitFirst6, ""), + new Transform(" the ", kIdentity, ""), + new Transform("", kOmitLast4, ""), + new Transform("", kIdentity, ". The "), + new Transform("", kUppercaseAll, ""), + new Transform("", kIdentity, " on "), + new Transform("", kIdentity, " as "), + new Transform("", kIdentity, " is "), + new Transform("", kOmitLast7, ""), + new Transform("", kOmitLast1, "ing "), + new Transform("", kIdentity, "\n "), + new Transform("", kIdentity, ":"), + new Transform(" ", kIdentity, ". "), + new Transform("", kIdentity, "ed "), + new Transform("", kOmitFirst9, ""), + new Transform("", kOmitFirst7, ""), + new Transform("", kOmitLast6, ""), + new Transform("", kIdentity, "("), + new Transform("", kUppercaseFirst, ", "), + new Transform("", kOmitLast8, ""), + new Transform("", kIdentity, " at "), + new Transform("", kIdentity, "ly "), + new Transform(" the ", kIdentity, " of "), + new Transform("", kOmitLast5, ""), + new Transform("", kOmitLast9, ""), + new Transform(" ", kUppercaseFirst, ", "), + new Transform("", kUppercaseFirst, '"'), + new Transform(".", kIdentity, "("), + new Transform("", kUppercaseAll, " "), + new Transform("", kUppercaseFirst, '">'), + new Transform("", kIdentity, '="'), + new Transform(" ", kIdentity, "."), + new Transform(".com/", kIdentity, ""), + new Transform(" the ", kIdentity, " of the "), + new Transform("", kUppercaseFirst, "'"), + new Transform("", kIdentity, ". This "), + new Transform("", kIdentity, ","), + new Transform(".", kIdentity, " "), + new Transform("", kUppercaseFirst, "("), + new Transform("", kUppercaseFirst, "."), + new Transform("", kIdentity, " not "), + new Transform(" ", kIdentity, '="'), + new Transform("", kIdentity, "er "), + new Transform(" ", kUppercaseAll, " "), + new Transform("", kIdentity, "al "), + new Transform(" ", kUppercaseAll, ""), + new Transform("", kIdentity, "='"), + new Transform("", kUppercaseAll, '"'), + new Transform("", kUppercaseFirst, ". "), + new Transform(" ", kIdentity, "("), + new Transform("", kIdentity, "ful "), + new Transform(" ", kUppercaseFirst, ". "), + new Transform("", kIdentity, "ive "), + new Transform("", kIdentity, "less "), + new Transform("", kUppercaseAll, "'"), + new Transform("", kIdentity, "est "), + new Transform(" ", kUppercaseFirst, "."), + new Transform("", kUppercaseAll, '">'), + new Transform(" ", kIdentity, "='"), + new Transform("", kUppercaseFirst, ","), + new Transform("", kIdentity, "ize "), + new Transform("", kUppercaseAll, "."), + new Transform("\xC2\xA0", kIdentity, ""), + new Transform(" ", kIdentity, ","), + new Transform("", kUppercaseFirst, '="'), + new Transform("", kUppercaseAll, '="'), + new Transform("", kIdentity, "ous "), + new Transform("", kUppercaseAll, ", "), + new Transform("", kUppercaseFirst, "='"), + new Transform(" ", kUppercaseFirst, ","), + new Transform(" ", kUppercaseAll, '="'), + new Transform(" ", kUppercaseAll, ", "), + new Transform("", kUppercaseAll, ","), + new Transform("", kUppercaseAll, "("), + new Transform("", kUppercaseAll, ". "), + new Transform(" ", kUppercaseAll, "."), + new Transform("", kUppercaseAll, "='"), + new Transform(" ", kUppercaseAll, ". "), + new Transform(" ", kUppercaseFirst, '="'), + new Transform(" ", kUppercaseAll, "='"), + new Transform(" ", kUppercaseFirst, "='") + ]; + exports2.kTransforms = kTransforms; + exports2.kNumTransforms = kTransforms.length; + function ToUpperCase(p3, i2) { + if (p3[i2] < 192) { + if (p3[i2] >= 97 && p3[i2] <= 122) { + p3[i2] ^= 32; + } + return 1; + } + if (p3[i2] < 224) { + p3[i2 + 1] ^= 32; + return 2; + } + p3[i2 + 2] ^= 5; + return 3; + } + exports2.transformDictionaryWord = function(dst, idx, word, len, transform) { + var prefix = kTransforms[transform].prefix; + var suffix = kTransforms[transform].suffix; + var t3 = kTransforms[transform].transform; + var skip = t3 < kOmitFirst1 ? 0 : t3 - (kOmitFirst1 - 1); + var i2 = 0; + var start_idx = idx; + var uppercase; + if (skip > len) { + skip = len; + } + var prefix_pos = 0; + while (prefix_pos < prefix.length) { + dst[idx++] = prefix[prefix_pos++]; + } + word += skip; + len -= skip; + if (t3 <= kOmitLast9) { + len -= t3; + } + for (i2 = 0; i2 < len; i2++) { + dst[idx++] = BrotliDictionary.dictionary[word + i2]; + } + uppercase = idx - len; + if (t3 === kUppercaseFirst) { + ToUpperCase(dst, uppercase); + } else if (t3 === kUppercaseAll) { + while (len > 0) { + var step = ToUpperCase(dst, uppercase); + uppercase += step; + len -= step; + } + } + var suffix_pos = 0; + while (suffix_pos < suffix.length) { + dst[idx++] = suffix[suffix_pos++]; + } + return idx - start_idx; + }; + }, + { "./dictionary": 6 } + ], + 12: [ + function(require2, module2, exports2) { + module2.exports = require2("./dec/decode").BrotliDecompressBuffer; + }, + { "./dec/decode": 3 } + ] + }, + {}, + [12] + )(12); +})(); + +// packages/global-styles-ui/build-module/font-library/lib/inflate.mjs +var __require3 = /* @__PURE__ */ ((x2) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x2, { + get: (a2, b2) => (typeof __require !== "undefined" ? __require : a2)[b2] +}) : x2)(function(x2) { + if (typeof __require !== "undefined") return __require.apply(this, arguments); + throw Error('Dynamic require of "' + x2 + '" is not supported'); +}); +var inflate_default = (function() { + var define, module, exports; + return (/* @__PURE__ */ (function() { + function r3(e2, n2, t3) { + function o3(i22, f2) { + if (!n2[i22]) { + if (!e2[i22]) { + var c2 = "function" == typeof __require3 && __require3; + if (!f2 && c2) return c2(i22, true); + if (u2) return u2(i22, true); + var a2 = new Error("Cannot find module '" + i22 + "'"); + throw a2.code = "MODULE_NOT_FOUND", a2; + } + var p3 = n2[i22] = { exports: {} }; + e2[i22][0].call( + p3.exports, + function(r22) { + var n22 = e2[i22][1][r22]; + return o3(n22 || r22); + }, + p3, + p3.exports, + r3, + e2, + n2, + t3 + ); + } + return n2[i22].exports; + } + for (var u2 = "function" == typeof __require3 && __require3, i2 = 0; i2 < t3.length; i2++) + o3(t3[i2]); + return o3; + } + return r3; + })())( + { + 1: [ + function(require2, module2, exports2) { + "use strict"; + var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined"; + function _has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + exports2.assign = function(obj) { + var sources = Array.prototype.slice.call( + arguments, + 1 + ); + while (sources.length) { + var source = sources.shift(); + if (!source) { + continue; + } + if (typeof source !== "object") { + throw new TypeError( + source + "must be non-object" + ); + } + for (var p3 in source) { + if (_has(source, p3)) { + obj[p3] = source[p3]; + } + } + } + return obj; + }; + exports2.shrinkBuf = function(buf, size) { + if (buf.length === size) { + return buf; + } + if (buf.subarray) { + return buf.subarray(0, size); + } + buf.length = size; + return buf; + }; + var fnTyped = { + arraySet: function(dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set( + src.subarray(src_offs, src_offs + len), + dest_offs + ); + return; + } + for (var i2 = 0; i2 < len; i2++) { + dest[dest_offs + i2] = src[src_offs + i2]; + } + }, + // Join array of chunks to single array. + flattenChunks: function(chunks) { + var i2, l2, len, pos, chunk, result; + len = 0; + for (i2 = 0, l2 = chunks.length; i2 < l2; i2++) { + len += chunks[i2].length; + } + result = new Uint8Array(len); + pos = 0; + for (i2 = 0, l2 = chunks.length; i2 < l2; i2++) { + chunk = chunks[i2]; + result.set(chunk, pos); + pos += chunk.length; + } + return result; + } + }; + var fnUntyped = { + arraySet: function(dest, src, src_offs, len, dest_offs) { + for (var i2 = 0; i2 < len; i2++) { + dest[dest_offs + i2] = src[src_offs + i2]; + } + }, + // Join array of chunks to single array. + flattenChunks: function(chunks) { + return [].concat.apply([], chunks); + } + }; + exports2.setTyped = function(on) { + if (on) { + exports2.Buf8 = Uint8Array; + exports2.Buf16 = Uint16Array; + exports2.Buf32 = Int32Array; + exports2.assign(exports2, fnTyped); + } else { + exports2.Buf8 = Array; + exports2.Buf16 = Array; + exports2.Buf32 = Array; + exports2.assign(exports2, fnUntyped); + } + }; + exports2.setTyped(TYPED_OK); + }, + {} + ], + 2: [ + function(require2, module2, exports2) { + "use strict"; + var utils = require2("./common"); + var STR_APPLY_OK = true; + var STR_APPLY_UIA_OK = true; + try { + String.fromCharCode.apply(null, [0]); + } catch (__42) { + STR_APPLY_OK = false; + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)); + } catch (__42) { + STR_APPLY_UIA_OK = false; + } + var _utf8len = new utils.Buf8(256); + for (var q = 0; q < 256; q++) { + _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1; + } + _utf8len[254] = _utf8len[254] = 1; + exports2.string2buf = function(str) { + var buf, c2, c22, m_pos, i2, str_len = str.length, buf_len = 0; + for (m_pos = 0; m_pos < str_len; m_pos++) { + c2 = str.charCodeAt(m_pos); + if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) { + c22 = str.charCodeAt(m_pos + 1); + if ((c22 & 64512) === 56320) { + c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320); + m_pos++; + } + } + buf_len += c2 < 128 ? 1 : c2 < 2048 ? 2 : c2 < 65536 ? 3 : 4; + } + buf = new utils.Buf8(buf_len); + for (i2 = 0, m_pos = 0; i2 < buf_len; m_pos++) { + c2 = str.charCodeAt(m_pos); + if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) { + c22 = str.charCodeAt(m_pos + 1); + if ((c22 & 64512) === 56320) { + c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320); + m_pos++; + } + } + if (c2 < 128) { + buf[i2++] = c2; + } else if (c2 < 2048) { + buf[i2++] = 192 | c2 >>> 6; + buf[i2++] = 128 | c2 & 63; + } else if (c2 < 65536) { + buf[i2++] = 224 | c2 >>> 12; + buf[i2++] = 128 | c2 >>> 6 & 63; + buf[i2++] = 128 | c2 & 63; + } else { + buf[i2++] = 240 | c2 >>> 18; + buf[i2++] = 128 | c2 >>> 12 & 63; + buf[i2++] = 128 | c2 >>> 6 & 63; + buf[i2++] = 128 | c2 & 63; + } + } + return buf; + }; + function buf2binstring(buf, len) { + if (len < 65534) { + if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) { + return String.fromCharCode.apply( + null, + utils.shrinkBuf(buf, len) + ); + } + } + var result = ""; + for (var i2 = 0; i2 < len; i2++) { + result += String.fromCharCode(buf[i2]); + } + return result; + } + exports2.buf2binstring = function(buf) { + return buf2binstring(buf, buf.length); + }; + exports2.binstring2buf = function(str) { + var buf = new utils.Buf8(str.length); + for (var i2 = 0, len = buf.length; i2 < len; i2++) { + buf[i2] = str.charCodeAt(i2); + } + return buf; + }; + exports2.buf2string = function(buf, max) { + var i2, out, c2, c_len; + var len = max || buf.length; + var utf16buf = new Array(len * 2); + for (out = 0, i2 = 0; i2 < len; ) { + c2 = buf[i2++]; + if (c2 < 128) { + utf16buf[out++] = c2; + continue; + } + c_len = _utf8len[c2]; + if (c_len > 4) { + utf16buf[out++] = 65533; + i2 += c_len - 1; + continue; + } + c2 &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7; + while (c_len > 1 && i2 < len) { + c2 = c2 << 6 | buf[i2++] & 63; + c_len--; + } + if (c_len > 1) { + utf16buf[out++] = 65533; + continue; + } + if (c2 < 65536) { + utf16buf[out++] = c2; + } else { + c2 -= 65536; + utf16buf[out++] = 55296 | c2 >> 10 & 1023; + utf16buf[out++] = 56320 | c2 & 1023; + } + } + return buf2binstring(utf16buf, out); + }; + exports2.utf8border = function(buf, max) { + var pos; + max = max || buf.length; + if (max > buf.length) { + max = buf.length; + } + pos = max - 1; + while (pos >= 0 && (buf[pos] & 192) === 128) { + pos--; + } + if (pos < 0) { + return max; + } + if (pos === 0) { + return max; + } + return pos + _utf8len[buf[pos]] > max ? pos : max; + }; + }, + { "./common": 1 } + ], + 3: [ + function(require2, module2, exports2) { + "use strict"; + function adler32(adler, buf, len, pos) { + var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n2 = 0; + while (len !== 0) { + n2 = len > 2e3 ? 2e3 : len; + len -= n2; + do { + s1 = s1 + buf[pos++] | 0; + s2 = s2 + s1 | 0; + } while (--n2); + s1 %= 65521; + s2 %= 65521; + } + return s1 | s2 << 16 | 0; + } + module2.exports = adler32; + }, + {} + ], + 4: [ + function(require2, module2, exports2) { + "use strict"; + module2.exports = { + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type + }; + }, + {} + ], + 5: [ + function(require2, module2, exports2) { + "use strict"; + function makeTable() { + var c2, table = []; + for (var n2 = 0; n2 < 256; n2++) { + c2 = n2; + for (var k2 = 0; k2 < 8; k2++) { + c2 = c2 & 1 ? 3988292384 ^ c2 >>> 1 : c2 >>> 1; + } + table[n2] = c2; + } + return table; + } + var crcTable = makeTable(); + function crc32(crc, buf, len, pos) { + var t3 = crcTable, end = pos + len; + crc ^= -1; + for (var i2 = pos; i2 < end; i2++) { + crc = crc >>> 8 ^ t3[(crc ^ buf[i2]) & 255]; + } + return crc ^ -1; + } + module2.exports = crc32; + }, + {} + ], + 6: [ + function(require2, module2, exports2) { + "use strict"; + function GZheader() { + this.text = 0; + this.time = 0; + this.xflags = 0; + this.os = 0; + this.extra = null; + this.extra_len = 0; + this.name = ""; + this.comment = ""; + this.hcrc = 0; + this.done = false; + } + module2.exports = GZheader; + }, + {} + ], + 7: [ + function(require2, module2, exports2) { + "use strict"; + var BAD = 30; + var TYPE = 12; + module2.exports = function inflate_fast(strm, start) { + var state; + var _in; + var last; + var _out; + var beg; + var end; + var dmax; + var wsize; + var whave; + var wnext; + var s_window; + var hold; + var bits; + var lcode; + var dcode; + var lmask; + var dmask; + var here; + var op; + var len; + var dist; + var from; + var from_source; + var input, output; + state = strm.state; + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); + dmax = state.dmax; + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + top: do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = lcode[hold & lmask]; + dolen: for (; ; ) { + op = here >>> 24; + hold >>>= op; + bits -= op; + op = here >>> 16 & 255; + if (op === 0) { + output[_out++] = here & 65535; + } else if (op & 16) { + len = here & 65535; + op &= 15; + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & (1 << op) - 1; + hold >>>= op; + bits -= op; + } + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + dodist: for (; ; ) { + op = here >>> 24; + hold >>>= op; + bits -= op; + op = here >>> 16 & 255; + if (op & 16) { + dist = here & 65535; + op &= 15; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & (1 << op) - 1; + if (dist > dmax) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break top; + } + hold >>>= op; + bits -= op; + op = _out - beg; + if (dist > op) { + op = dist - op; + if (op > whave) { + if (state.sane) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break top; + } + } + from = 0; + from_source = s_window; + if (wnext === 0) { + from += wsize - op; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } else if (wnext < op) { + from += wsize + wnext - op; + op -= wnext; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } + } else { + from += wnext - op; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } else { + from = _out - dist; + do { + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } else if ((op & 64) === 0) { + here = dcode[(here & 65535) + (hold & (1 << op) - 1)]; + continue dodist; + } else { + strm.msg = "invalid distance code"; + state.mode = BAD; + break top; + } + break; + } + } else if ((op & 64) === 0) { + here = lcode[(here & 65535) + (hold & (1 << op) - 1)]; + continue dolen; + } else if (op & 32) { + state.mode = TYPE; + break top; + } else { + strm.msg = "invalid literal/length code"; + state.mode = BAD; + break top; + } + break; + } + } while (_in < last && _out < end); + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last); + strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end); + state.hold = hold; + state.bits = bits; + return; + }; + }, + {} + ], + 8: [ + function(require2, module2, exports2) { + "use strict"; + var utils = require2("../utils/common"); + var adler32 = require2("./adler32"); + var crc32 = require2("./crc32"); + var inflate_fast = require2("./inffast"); + var inflate_table = require2("./inftrees"); + var CODES = 0; + var LENS = 1; + var DISTS = 2; + var Z_FINISH = 4; + var Z_BLOCK = 5; + var Z_TREES = 6; + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_NEED_DICT = 2; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_MEM_ERROR = -4; + var Z_BUF_ERROR = -5; + var Z_DEFLATED = 8; + var HEAD = 1; + var FLAGS = 2; + var TIME = 3; + var OS = 4; + var EXLEN = 5; + var EXTRA = 6; + var NAME = 7; + var COMMENT = 8; + var HCRC = 9; + var DICTID = 10; + var DICT = 11; + var TYPE = 12; + var TYPEDO = 13; + var STORED = 14; + var COPY_ = 15; + var COPY = 16; + var TABLE = 17; + var LENLENS = 18; + var CODELENS = 19; + var LEN_ = 20; + var LEN = 21; + var LENEXT = 22; + var DIST = 23; + var DISTEXT = 24; + var MATCH = 25; + var LIT = 26; + var CHECK = 27; + var LENGTH = 28; + var DONE = 29; + var BAD = 30; + var MEM = 31; + var SYNC = 32; + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + var MAX_WBITS = 15; + var DEF_WBITS = MAX_WBITS; + function zswap32(q) { + return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24); + } + function InflateState() { + this.mode = 0; + this.last = false; + this.wrap = 0; + this.havedict = false; + this.flags = 0; + this.dmax = 0; + this.check = 0; + this.total = 0; + this.head = null; + this.wbits = 0; + this.wsize = 0; + this.whave = 0; + this.wnext = 0; + this.window = null; + this.hold = 0; + this.bits = 0; + this.length = 0; + this.offset = 0; + this.extra = 0; + this.lencode = null; + this.distcode = null; + this.lenbits = 0; + this.distbits = 0; + this.ncode = 0; + this.nlen = 0; + this.ndist = 0; + this.have = 0; + this.next = null; + this.lens = new utils.Buf16( + 320 + ); + this.work = new utils.Buf16( + 288 + ); + this.lendyn = null; + this.distdyn = null; + this.sane = 0; + this.back = 0; + this.was = 0; + } + function inflateResetKeep(strm) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ""; + if (state.wrap) { + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null; + state.hold = 0; + state.bits = 0; + state.lencode = state.lendyn = new utils.Buf32( + ENOUGH_LENS + ); + state.distcode = state.distdyn = new utils.Buf32( + ENOUGH_DISTS + ); + state.sane = 1; + state.back = -1; + return Z_OK; + } + function inflateReset(strm) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + } + function inflateReset2(strm, windowBits) { + var wrap; + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); + } + function inflateInit2(strm, windowBits) { + var ret; + var state; + if (!strm) { + return Z_STREAM_ERROR; + } + state = new InflateState(); + strm.state = state; + state.window = null; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null; + } + return ret; + } + function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); + } + var virgin = true; + var lenfix, distfix; + function fixedtables(state) { + if (virgin) { + var sym; + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + sym = 0; + while (sym < 144) { + state.lens[sym++] = 8; + } + while (sym < 256) { + state.lens[sym++] = 9; + } + while (sym < 280) { + state.lens[sym++] = 7; + } + while (sym < 288) { + state.lens[sym++] = 8; + } + inflate_table( + LENS, + state.lens, + 0, + 288, + lenfix, + 0, + state.work, + { bits: 9 } + ); + sym = 0; + while (sym < 32) { + state.lens[sym++] = 5; + } + inflate_table( + DISTS, + state.lens, + 0, + 32, + distfix, + 0, + state.work, + { bits: 5 } + ); + virgin = false; + } + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; + } + function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + state.window = new utils.Buf8(state.wsize); + } + if (copy >= state.wsize) { + utils.arraySet( + state.window, + src, + end - state.wsize, + state.wsize, + 0 + ); + state.wnext = 0; + state.whave = state.wsize; + } else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + utils.arraySet( + state.window, + src, + end - copy, + dist, + state.wnext + ); + copy -= dist; + if (copy) { + utils.arraySet( + state.window, + src, + end - copy, + copy, + 0 + ); + state.wnext = copy; + state.whave = state.wsize; + } else { + state.wnext += dist; + if (state.wnext === state.wsize) { + state.wnext = 0; + } + if (state.whave < state.wsize) { + state.whave += dist; + } + } + } + return 0; + } + function inflate(strm, flush) { + var state; + var input, output; + var next; + var put; + var have, left; + var hold; + var bits; + var _in, _out; + var copy; + var from; + var from_source; + var here = 0; + var here_bits, here_op, here_val; + var last_bits, last_op, last_val; + var len; + var ret; + var hbuf = new utils.Buf8( + 4 + ); + var opts; + var n2; + var order = ( + /* permutation of code lengths */ + [ + 16, + 17, + 18, + 0, + 8, + 7, + 9, + 6, + 10, + 5, + 11, + 4, + 12, + 3, + 13, + 2, + 14, + 1, + 15 + ] + ); + if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (state.mode === TYPE) { + state.mode = TYPEDO; + } + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + _in = have; + _out = left; + ret = Z_OK; + inf_leave: for (; ; ) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.wrap & 2 && hold === 35615) { + state.check = 0; + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + hold = 0; + bits = 0; + state.mode = FLAGS; + break; + } + state.flags = 0; + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || (((hold & 255) << 8) + (hold >> 8)) % 31) { + strm.msg = "incorrect header check"; + state.mode = BAD; + break; + } + if ((hold & 15) !== Z_DEFLATED) { + strm.msg = "unknown compression method"; + state.mode = BAD; + break; + } + hold >>>= 4; + bits -= 4; + len = (hold & 15) + 8; + if (state.wbits === 0) { + state.wbits = len; + } else if (len > state.wbits) { + strm.msg = "invalid window size"; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + strm.adler = state.check = 1; + state.mode = hold & 512 ? DICTID : TYPE; + hold = 0; + bits = 0; + break; + case FLAGS: + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.flags = hold; + if ((state.flags & 255) !== Z_DEFLATED) { + strm.msg = "unknown compression method"; + state.mode = BAD; + break; + } + if (state.flags & 57344) { + strm.msg = "unknown header flags set"; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = hold >> 8 & 1; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + } + hold = 0; + bits = 0; + state.mode = TIME; + /* falls through */ + case TIME: + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.head) { + state.head.time = hold; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + hbuf[2] = hold >>> 16 & 255; + hbuf[3] = hold >>> 24 & 255; + state.check = crc32( + state.check, + hbuf, + 4, + 0 + ); + } + hold = 0; + bits = 0; + state.mode = OS; + /* falls through */ + case OS: + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.head) { + state.head.xflags = hold & 255; + state.head.os = hold >> 8; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + } + hold = 0; + bits = 0; + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if (state.flags & 1024) { + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + } + hold = 0; + bits = 0; + } else if (state.head) { + state.head.extra = null; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if (state.flags & 1024) { + copy = state.length; + if (copy > have) { + copy = have; + } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + state.head.extra = new Array( + state.head.extra_len + ); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + } + if (state.flags & 512) { + state.check = crc32( + state.check, + input, + copy, + next + ); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { + break inf_leave; + } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if (state.flags & 2048) { + if (have === 0) { + break inf_leave; + } + copy = 0; + do { + len = input[next + copy++]; + if (state.head && len && state.length < 65536) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 512) { + state.check = crc32( + state.check, + input, + copy, + next + ); + } + have -= copy; + next += copy; + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if (state.flags & 4096) { + if (have === 0) { + break inf_leave; + } + copy = 0; + do { + len = input[next + copy++]; + if (state.head && len && state.length < 65536) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 512) { + state.check = crc32( + state.check, + input, + copy, + next + ); + } + have -= copy; + next += copy; + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if (state.flags & 512) { + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (hold !== (state.check & 65535)) { + strm.msg = "header crc mismatch"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + if (state.head) { + state.head.hcrc = state.flags >> 9 & 1; + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + strm.adler = state.check = zswap32(hold); + hold = 0; + bits = 0; + state.mode = DICT; + /* falls through */ + case DICT: + if (state.havedict === 0) { + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + return Z_NEED_DICT; + } + strm.adler = state.check = 1; + state.mode = TYPE; + /* falls through */ + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { + break inf_leave; + } + /* falls through */ + case TYPEDO: + if (state.last) { + hold >>>= bits & 7; + bits -= bits & 7; + state.mode = CHECK; + break; + } + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.last = hold & 1; + hold >>>= 1; + bits -= 1; + switch (hold & 3) { + case 0: + state.mode = STORED; + break; + case 1: + fixedtables(state); + state.mode = LEN_; + if (flush === Z_TREES) { + hold >>>= 2; + bits -= 2; + break inf_leave; + } + break; + case 2: + state.mode = TABLE; + break; + case 3: + strm.msg = "invalid block type"; + state.mode = BAD; + } + hold >>>= 2; + bits -= 2; + break; + case STORED: + hold >>>= bits & 7; + bits -= bits & 7; + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if ((hold & 65535) !== (hold >>> 16 ^ 65535)) { + strm.msg = "invalid stored block lengths"; + state.mode = BAD; + break; + } + state.length = hold & 65535; + hold = 0; + bits = 0; + state.mode = COPY_; + if (flush === Z_TREES) { + break inf_leave; + } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { + copy = have; + } + if (copy > left) { + copy = left; + } + if (copy === 0) { + break inf_leave; + } + utils.arraySet( + output, + input, + next, + copy, + put + ); + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + state.mode = TYPE; + break; + case TABLE: + while (bits < 14) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.nlen = (hold & 31) + 257; + hold >>>= 5; + bits -= 5; + state.ndist = (hold & 31) + 1; + hold >>>= 5; + bits -= 5; + state.ncode = (hold & 15) + 4; + hold >>>= 4; + bits -= 4; + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = "too many length or distance symbols"; + state.mode = BAD; + break; + } + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while (state.have < state.ncode) { + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.lens[order[state.have++]] = hold & 7; + hold >>>= 3; + bits -= 3; + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + state.lencode = state.lendyn; + state.lenbits = 7; + opts = { bits: state.lenbits }; + ret = inflate_table( + CODES, + state.lens, + 0, + 19, + state.lencode, + 0, + state.work, + opts + ); + state.lenbits = opts.bits; + if (ret) { + strm.msg = "invalid code lengths set"; + state.mode = BAD; + break; + } + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (; ; ) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (here_val < 16) { + hold >>>= here_bits; + bits -= here_bits; + state.lens[state.have++] = here_val; + } else { + if (here_val === 16) { + n2 = here_bits + 2; + while (bits < n2) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + if (state.have === 0) { + strm.msg = "invalid bit length repeat"; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 3); + hold >>>= 2; + bits -= 2; + } else if (here_val === 17) { + n2 = here_bits + 3; + while (bits < n2) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + len = 0; + copy = 3 + (hold & 7); + hold >>>= 3; + bits -= 3; + } else { + n2 = here_bits + 7; + while (bits < n2) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + len = 0; + copy = 11 + (hold & 127); + hold >>>= 7; + bits -= 7; + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = "invalid bit length repeat"; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + if (state.mode === BAD) { + break; + } + if (state.lens[256] === 0) { + strm.msg = "invalid code -- missing end-of-block"; + state.mode = BAD; + break; + } + state.lenbits = 9; + opts = { bits: state.lenbits }; + ret = inflate_table( + LENS, + state.lens, + 0, + state.nlen, + state.lencode, + 0, + state.work, + opts + ); + state.lenbits = opts.bits; + if (ret) { + strm.msg = "invalid literal/lengths set"; + state.mode = BAD; + break; + } + state.distbits = 6; + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table( + DISTS, + state.lens, + state.nlen, + state.ndist, + state.distcode, + 0, + state.work, + opts + ); + state.distbits = opts.bits; + if (ret) { + strm.msg = "invalid distances set"; + state.mode = BAD; + break; + } + state.mode = LEN_; + if (flush === Z_TREES) { + break inf_leave; + } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if (have >= 6 && left >= 258) { + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + inflate_fast(strm, _out); + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (; ; ) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (here_op && (here_op & 240) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (; ; ) { + here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (last_bits + here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= last_bits; + bits -= last_bits; + state.back += last_bits; + } + hold >>>= here_bits; + bits -= here_bits; + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + state.mode = LIT; + break; + } + if (here_op & 32) { + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = "invalid literal/length code"; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if (state.extra) { + n2 = state.extra; + while (bits < n2) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.length += hold & (1 << state.extra) - 1; + hold >>>= state.extra; + bits -= state.extra; + state.back += state.extra; + } + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (; ; ) { + here = state.distcode[hold & (1 << state.distbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if ((here_op & 240) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (; ; ) { + here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (last_bits + here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= last_bits; + bits -= last_bits; + state.back += last_bits; + } + hold >>>= here_bits; + bits -= here_bits; + state.back += here_bits; + if (here_op & 64) { + strm.msg = "invalid distance code"; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = here_op & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if (state.extra) { + n2 = state.extra; + while (bits < n2) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.offset += hold & (1 << state.extra) - 1; + hold >>>= state.extra; + bits -= state.extra; + state.back += state.extra; + } + if (state.offset > state.dmax) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break; + } + state.mode = MATCH; + /* falls through */ + case MATCH: + if (left === 0) { + break inf_leave; + } + copy = _out - left; + if (state.offset > copy) { + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break; + } + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } else { + from = state.wnext - copy; + } + if (copy > state.length) { + copy = state.length; + } + from_source = state.window; + } else { + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { + copy = left; + } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { + state.mode = LEN; + } + break; + case LIT: + if (left === 0) { + break inf_leave; + } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold |= input[next++] << bits; + bits += 8; + } + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/ + state.flags ? crc32( + state.check, + output, + _out, + put - _out + ) : adler32( + state.check, + output, + _out, + put - _out + ); + } + _out = left; + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = "incorrect data check"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if (state.wrap && state.flags) { + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (hold !== (state.total & 4294967295)) { + strm.msg = "incorrect length check"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) { + if (updatewindow( + strm, + strm.output, + strm.next_out, + _out - strm.avail_out + )) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + state.flags ? crc32( + state.check, + output, + _out, + strm.next_out - _out + ) : adler32( + state.check, + output, + _out, + strm.next_out - _out + ); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; + } + function inflateEnd(strm) { + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; + } + function inflateGetHeader(strm, head2) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if ((state.wrap & 2) === 0) { + return Z_STREAM_ERROR; + } + state.head = head2; + head2.done = false; + return Z_OK; + } + function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + var state; + var dictid; + var ret; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + if (state.mode === DICT) { + dictid = 1; + dictid = adler32( + dictid, + dictionary, + dictLength, + 0 + ); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + ret = updatewindow( + strm, + dictionary, + dictLength, + dictLength + ); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + return Z_OK; + } + exports2.inflateReset = inflateReset; + exports2.inflateReset2 = inflateReset2; + exports2.inflateResetKeep = inflateResetKeep; + exports2.inflateInit = inflateInit; + exports2.inflateInit2 = inflateInit2; + exports2.inflate = inflate; + exports2.inflateEnd = inflateEnd; + exports2.inflateGetHeader = inflateGetHeader; + exports2.inflateSetDictionary = inflateSetDictionary; + exports2.inflateInfo = "pako inflate (from Nodeca project)"; + }, + { + "../utils/common": 1, + "./adler32": 3, + "./crc32": 5, + "./inffast": 7, + "./inftrees": 9 + } + ], + 9: [ + function(require2, module2, exports2) { + "use strict"; + var utils = require2("../utils/common"); + var MAXBITS = 15; + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + var CODES = 0; + var LENS = 1; + var DISTS = 2; + var lbase = [ + /* Length codes 257..285 base */ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 13, + 15, + 17, + 19, + 23, + 27, + 31, + 35, + 43, + 51, + 59, + 67, + 83, + 99, + 115, + 131, + 163, + 195, + 227, + 258, + 0, + 0 + ]; + var lext = [ + /* Length codes 257..285 extra */ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 17, + 17, + 17, + 17, + 18, + 18, + 18, + 18, + 19, + 19, + 19, + 19, + 20, + 20, + 20, + 20, + 21, + 21, + 21, + 21, + 16, + 72, + 78 + ]; + var dbase = [ + /* Distance codes 0..29 base */ + 1, + 2, + 3, + 4, + 5, + 7, + 9, + 13, + 17, + 25, + 33, + 49, + 65, + 97, + 129, + 193, + 257, + 385, + 513, + 769, + 1025, + 1537, + 2049, + 3073, + 4097, + 6145, + 8193, + 12289, + 16385, + 24577, + 0, + 0 + ]; + var dext = [ + /* Distance codes 0..29 extra */ + 16, + 16, + 16, + 16, + 17, + 17, + 18, + 18, + 19, + 19, + 20, + 20, + 21, + 21, + 22, + 22, + 23, + 23, + 24, + 24, + 25, + 25, + 26, + 26, + 27, + 27, + 28, + 28, + 29, + 29, + 64, + 64 + ]; + module2.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) { + var bits = opts.bits; + var len = 0; + var sym = 0; + var min = 0, max = 0; + var root = 0; + var curr = 0; + var drop = 0; + var left = 0; + var used = 0; + var huff = 0; + var incr; + var fill; + var low; + var mask; + var next; + var base = null; + var base_index = 0; + var end; + var count = new utils.Buf16(MAXBITS + 1); + var offs = new utils.Buf16(MAXBITS + 1); + var extra = null; + var extra_index = 0; + var here_bits, here_op, here_val; + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { + break; + } + } + if (root > max) { + root = max; + } + if (max === 0) { + table[table_index++] = 1 << 24 | 64 << 16 | 0; + table[table_index++] = 1 << 24 | 64 << 16 | 0; + opts.bits = 1; + return 0; + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { + break; + } + } + if (root < min) { + root = min; + } + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; + } + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + if (type === CODES) { + base = extra = work; + end = 19; + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + } else { + base = dbase; + extra = dext; + end = -1; + } + huff = 0; + sym = 0; + len = min; + next = table_index; + curr = root; + drop = 0; + low = -1; + used = 1 << root; + mask = used - 1; + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + for (; ; ) { + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } else { + here_op = 32 + 64; + here_val = 0; + } + incr = 1 << len - drop; + fill = 1 << curr; + min = fill; + do { + fill -= incr; + table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0; + } while (fill !== 0); + incr = 1 << len - 1; + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + sym++; + if (--count[len] === 0) { + if (len === max) { + break; + } + len = lens[lens_index + work[sym]]; + } + if (len > root && (huff & mask) !== low) { + if (drop === 0) { + drop = root; + } + next += min; + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { + break; + } + curr++; + left <<= 1; + } + used += 1 << curr; + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + low = huff & mask; + table[low] = root << 24 | curr << 16 | next - table_index | 0; + } + } + if (huff !== 0) { + table[next + huff] = len - drop << 24 | 64 << 16 | 0; + } + opts.bits = root; + return 0; + }; + }, + { "../utils/common": 1 } + ], + 10: [ + function(require2, module2, exports2) { + "use strict"; + module2.exports = { + 2: "need dictionary", + 1: "stream end", + 0: "", + "-1": "file error", + "-2": "stream error", + "-3": "data error", + "-4": "insufficient memory", + "-5": "buffer error", + "-6": "incompatible version" + }; + }, + {} + ], + 11: [ + function(require2, module2, exports2) { + "use strict"; + function ZStream() { + this.input = null; + this.next_in = 0; + this.avail_in = 0; + this.total_in = 0; + this.output = null; + this.next_out = 0; + this.avail_out = 0; + this.total_out = 0; + this.msg = ""; + this.state = null; + this.data_type = 2; + this.adler = 0; + } + module2.exports = ZStream; + }, + {} + ], + "/lib/inflate.js": [ + function(require2, module2, exports2) { + "use strict"; + var zlib_inflate = require2("./zlib/inflate"); + var utils = require2("./utils/common"); + var strings = require2("./utils/strings"); + var c2 = require2("./zlib/constants"); + var msg = require2("./zlib/messages"); + var ZStream = require2("./zlib/zstream"); + var GZheader = require2("./zlib/gzheader"); + var toString = Object.prototype.toString; + function Inflate(options) { + if (!(this instanceof Inflate)) + return new Inflate(options); + this.options = utils.assign( + { + chunkSize: 16384, + windowBits: 0, + to: "" + }, + options || {} + ); + var opt = this.options; + if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { + opt.windowBits = -15; + } + } + if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) { + opt.windowBits += 32; + } + if (opt.windowBits > 15 && opt.windowBits < 48) { + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + this.err = 0; + this.msg = ""; + this.ended = false; + this.chunks = []; + this.strm = new ZStream(); + this.strm.avail_out = 0; + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + if (status !== c2.Z_OK) { + throw new Error(msg[status]); + } + this.header = new GZheader(); + zlib_inflate.inflateGetHeader(this.strm, this.header); + if (opt.dictionary) { + if (typeof opt.dictionary === "string") { + opt.dictionary = strings.string2buf( + opt.dictionary + ); + } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { + opt.dictionary = new Uint8Array( + opt.dictionary + ); + } + if (opt.raw) { + status = zlib_inflate.inflateSetDictionary( + this.strm, + opt.dictionary + ); + if (status !== c2.Z_OK) { + throw new Error(msg[status]); + } + } + } + } + Inflate.prototype.push = function(data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + var allowBufError = false; + if (this.ended) { + return false; + } + _mode = mode === ~~mode ? mode : mode === true ? c2.Z_FINISH : c2.Z_NO_FLUSH; + if (typeof data === "string") { + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === "[object ArrayBuffer]") { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + strm.next_in = 0; + strm.avail_in = strm.input.length; + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_inflate.inflate( + strm, + c2.Z_NO_FLUSH + ); + if (status === c2.Z_NEED_DICT && dictionary) { + status = zlib_inflate.inflateSetDictionary( + this.strm, + dictionary + ); + } + if (status === c2.Z_BUF_ERROR && allowBufError === true) { + status = c2.Z_OK; + allowBufError = false; + } + if (status !== c2.Z_STREAM_END && status !== c2.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.next_out) { + if (strm.avail_out === 0 || status === c2.Z_STREAM_END || strm.avail_in === 0 && (_mode === c2.Z_FINISH || _mode === c2.Z_SYNC_FLUSH)) { + if (this.options.to === "string") { + next_out_utf8 = strings.utf8border( + strm.output, + strm.next_out + ); + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string( + strm.output, + next_out_utf8 + ); + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { + utils.arraySet( + strm.output, + strm.output, + next_out_utf8, + tail, + 0 + ); + } + this.onData(utf8str); + } else { + this.onData( + utils.shrinkBuf( + strm.output, + strm.next_out + ) + ); + } + } + } + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c2.Z_STREAM_END); + if (status === c2.Z_STREAM_END) { + _mode = c2.Z_FINISH; + } + if (_mode === c2.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c2.Z_OK; + } + if (_mode === c2.Z_SYNC_FLUSH) { + this.onEnd(c2.Z_OK); + strm.avail_out = 0; + return true; + } + return true; + }; + Inflate.prototype.onData = function(chunk) { + this.chunks.push(chunk); + }; + Inflate.prototype.onEnd = function(status) { + if (status === c2.Z_OK) { + if (this.options.to === "string") { + this.result = this.chunks.join(""); + } else { + this.result = utils.flattenChunks( + this.chunks + ); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; + }; + function inflate(input, options) { + var inflator = new Inflate(options); + inflator.push(input, true); + if (inflator.err) { + throw inflator.msg || msg[inflator.err]; + } + return inflator.result; + } + function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); + } + exports2.Inflate = Inflate; + exports2.inflate = inflate; + exports2.inflateRaw = inflateRaw; + exports2.ungzip = inflate; + }, + { + "./utils/common": 1, + "./utils/strings": 2, + "./zlib/constants": 4, + "./zlib/gzheader": 6, + "./zlib/inflate": 8, + "./zlib/messages": 10, + "./zlib/zstream": 11 + } + ] + }, + {}, + [] + )("/lib/inflate.js"); +})(); + +// packages/global-styles-ui/build-module/font-library/lib/lib-font.browser.mjs +var fetchFunction = globalThis.fetch; +var Event2 = class { + constructor(type, detail = {}, msg) { + this.type = type; + this.detail = detail; + this.msg = msg; + Object.defineProperty(this, `__mayPropagate`, { + enumerable: false, + writable: true + }); + this.__mayPropagate = true; + } + preventDefault() { + } + stopPropagation() { + this.__mayPropagate = false; + } + valueOf() { + return this; + } + toString() { + return this.msg ? `[${this.type} event]: ${this.msg}` : `[${this.type} event]`; + } +}; +var EventManager = class { + constructor() { + this.listeners = {}; + } + addEventListener(type, listener, useCapture) { + let bin = this.listeners[type] || []; + if (useCapture) bin.unshift(listener); + else bin.push(listener); + this.listeners[type] = bin; + } + removeEventListener(type, listener) { + let bin = this.listeners[type] || []; + let pos = bin.findIndex((e2) => e2 === listener); + if (pos > -1) { + bin.splice(pos, 1); + this.listeners[type] = bin; + } + } + dispatch(event) { + let bin = this.listeners[event.type]; + if (bin) { + for (let l2 = 0, e2 = bin.length; l2 < e2; l2++) { + if (!event.__mayPropagate) break; + bin[l2](event); + } + } + } +}; +var startDate = (/* @__PURE__ */ new Date(`1904-01-01T00:00:00+0000`)).getTime(); +function asText(data) { + return Array.from(data).map((v2) => String.fromCharCode(v2)).join(``); +} +var Parser = class { + constructor(dict, dataview, name2) { + this.name = (name2 || dict.tag || ``).trim(); + this.length = dict.length; + this.start = dict.offset; + this.offset = 0; + this.data = dataview; + [ + `getInt8`, + `getUint8`, + `getInt16`, + `getUint16`, + `getInt32`, + `getUint32`, + `getBigInt64`, + `getBigUint64` + ].forEach((name3) => { + let fn = name3.replace(/get(Big)?/, "").toLowerCase(); + let increment = parseInt(name3.replace(/[^\d]/g, "")) / 8; + Object.defineProperty(this, fn, { + get: () => this.getValue(name3, increment) + }); + }); + } + get currentPosition() { + return this.start + this.offset; + } + set currentPosition(position) { + this.start = position; + this.offset = 0; + } + skip(n2 = 0, bits = 8) { + this.offset += n2 * bits / 8; + } + getValue(type, increment) { + let pos = this.start + this.offset; + this.offset += increment; + try { + return this.data[type](pos); + } catch (e2) { + console.error(`parser`, type, increment, this); + console.error(`parser`, this.start, this.offset); + throw e2; + } + } + flags(n2) { + if (n2 === 8 || n2 === 16 || n2 === 32 || n2 === 64) { + return this[`uint${n2}`].toString(2).padStart(n2, 0).split(``).map((v2) => v2 === "1"); + } + console.error( + `Error parsing flags: flag types can only be 1, 2, 4, or 8 bytes long` + ); + console.trace(); + } + get tag() { + const t3 = this.uint32; + return asText([ + t3 >> 24 & 255, + t3 >> 16 & 255, + t3 >> 8 & 255, + t3 & 255 + ]); + } + get fixed() { + let major = this.int16; + let minor = Math.round(1e3 * this.uint16 / 65356); + return major + minor / 1e3; + } + get legacyFixed() { + let major = this.uint16; + let minor = this.uint16.toString(16).padStart(4, 0); + return parseFloat(`${major}.${minor}`); + } + get uint24() { + return (this.uint8 << 16) + (this.uint8 << 8) + this.uint8; + } + get uint128() { + let value = 0; + for (let i2 = 0; i2 < 5; i2++) { + let byte = this.uint8; + value = value * 128 + (byte & 127); + if (byte < 128) break; + } + return value; + } + get longdatetime() { + return new Date(startDate + 1e3 * parseInt(this.int64.toString())); + } + get fword() { + return this.int16; + } + get ufword() { + return this.uint16; + } + get Offset16() { + return this.uint16; + } + get Offset32() { + return this.uint32; + } + get F2DOT14() { + const bits = p.uint16; + const integer = [0, 1, -2, -1][bits >> 14]; + const fraction = bits & 16383; + return integer + fraction / 16384; + } + verifyLength() { + if (this.offset != this.length) { + console.error( + `unexpected parsed table size (${this.offset}) for "${this.name}" (expected ${this.length})` + ); + } + } + readBytes(n2 = 0, position = 0, bits = 8, signed = false) { + n2 = n2 || this.length; + if (n2 === 0) return []; + if (position) this.currentPosition = position; + const fn = `${signed ? `` : `u`}int${bits}`, slice = []; + while (n2--) slice.push(this[fn]); + return slice; + } +}; +var ParsedData = class { + constructor(parser) { + const pGetter = { enumerable: false, get: () => parser }; + Object.defineProperty(this, `parser`, pGetter); + const start = parser.currentPosition; + const startGetter = { enumerable: false, get: () => start }; + Object.defineProperty(this, `start`, startGetter); + } + load(struct) { + Object.keys(struct).forEach((p22) => { + let props = Object.getOwnPropertyDescriptor(struct, p22); + if (props.get) { + this[p22] = props.get.bind(this); + } else if (props.value !== void 0) { + this[p22] = props.value; + } + }); + if (this.parser.length) { + this.parser.verifyLength(); + } + } +}; +var SimpleTable = class extends ParsedData { + constructor(dict, dataview, name2) { + const { parser, start } = super( + new Parser(dict, dataview, name2) + ); + const pGetter = { enumerable: false, get: () => parser }; + Object.defineProperty(this, `p`, pGetter); + const startGetter = { enumerable: false, get: () => start }; + Object.defineProperty(this, `tableStart`, startGetter); + } +}; +function lazy$1(object, property, getter) { + let val; + Object.defineProperty(object, property, { + get: () => { + if (val) return val; + val = getter(); + return val; + }, + enumerable: true + }); +} +var SFNT = class extends SimpleTable { + constructor(font2, dataview, createTable2) { + const { p: p22 } = super({ offset: 0, length: 12 }, dataview, `sfnt`); + this.version = p22.uint32; + this.numTables = p22.uint16; + this.searchRange = p22.uint16; + this.entrySelector = p22.uint16; + this.rangeShift = p22.uint16; + p22.verifyLength(); + this.directory = [...new Array(this.numTables)].map( + (_) => new TableRecord(p22) + ); + this.tables = {}; + this.directory.forEach((entry) => { + const getter = () => createTable2( + this.tables, + { + tag: entry.tag, + offset: entry.offset, + length: entry.length + }, + dataview + ); + lazy$1(this.tables, entry.tag.trim(), getter); + }); + } +}; +var TableRecord = class { + constructor(p22) { + this.tag = p22.tag; + this.checksum = p22.uint32; + this.offset = p22.uint32; + this.length = p22.uint32; + } +}; +var gzipDecode = inflate_default.inflate || void 0; +var nativeGzipDecode = void 0; +var WOFF$1 = class extends SimpleTable { + constructor(font2, dataview, createTable2) { + const { p: p22 } = super({ offset: 0, length: 44 }, dataview, `woff`); + this.signature = p22.tag; + this.flavor = p22.uint32; + this.length = p22.uint32; + this.numTables = p22.uint16; + p22.uint16; + this.totalSfntSize = p22.uint32; + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.metaOffset = p22.uint32; + this.metaLength = p22.uint32; + this.metaOrigLength = p22.uint32; + this.privOffset = p22.uint32; + this.privLength = p22.uint32; + p22.verifyLength(); + this.directory = [...new Array(this.numTables)].map( + (_) => new WoffTableDirectoryEntry(p22) + ); + buildWoffLazyLookups(this, dataview, createTable2); + } +}; +var WoffTableDirectoryEntry = class { + constructor(p22) { + this.tag = p22.tag; + this.offset = p22.uint32; + this.compLength = p22.uint32; + this.origLength = p22.uint32; + this.origChecksum = p22.uint32; + } +}; +function buildWoffLazyLookups(woff, dataview, createTable2) { + woff.tables = {}; + woff.directory.forEach((entry) => { + lazy$1(woff.tables, entry.tag.trim(), () => { + let offset = 0; + let view = dataview; + if (entry.compLength !== entry.origLength) { + const data = dataview.buffer.slice( + entry.offset, + entry.offset + entry.compLength + ); + let unpacked; + if (gzipDecode) { + unpacked = gzipDecode(new Uint8Array(data)); + } else if (nativeGzipDecode) { + unpacked = nativeGzipDecode(new Uint8Array(data)); + } else { + const msg = `no brotli decoder available to decode WOFF2 font`; + if (font.onerror) font.onerror(msg); + throw new Error(msg); + } + view = new DataView(unpacked.buffer); + } else { + offset = entry.offset; + } + return createTable2( + woff.tables, + { tag: entry.tag, offset, length: entry.origLength }, + view + ); + }); + }); +} +var brotliDecode = unbrotli_default; +var nativeBrotliDecode = void 0; +var WOFF2$1 = class extends SimpleTable { + constructor(font2, dataview, createTable2) { + const { p: p22 } = super({ offset: 0, length: 48 }, dataview, `woff2`); + this.signature = p22.tag; + this.flavor = p22.uint32; + this.length = p22.uint32; + this.numTables = p22.uint16; + p22.uint16; + this.totalSfntSize = p22.uint32; + this.totalCompressedSize = p22.uint32; + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.metaOffset = p22.uint32; + this.metaLength = p22.uint32; + this.metaOrigLength = p22.uint32; + this.privOffset = p22.uint32; + this.privLength = p22.uint32; + p22.verifyLength(); + this.directory = [...new Array(this.numTables)].map( + (_) => new Woff2TableDirectoryEntry(p22) + ); + let dictOffset = p22.currentPosition; + this.directory[0].offset = 0; + this.directory.forEach((e2, i2) => { + let next = this.directory[i2 + 1]; + if (next) { + next.offset = e2.offset + (e2.transformLength !== void 0 ? e2.transformLength : e2.origLength); + } + }); + let decoded; + let buffer = dataview.buffer.slice(dictOffset); + if (brotliDecode) { + decoded = brotliDecode(new Uint8Array(buffer)); + } else if (nativeBrotliDecode) { + decoded = new Uint8Array(nativeBrotliDecode(buffer)); + } else { + const msg = `no brotli decoder available to decode WOFF2 font`; + if (font2.onerror) font2.onerror(msg); + throw new Error(msg); + } + buildWoff2LazyLookups(this, decoded, createTable2); + } +}; +var Woff2TableDirectoryEntry = class { + constructor(p22) { + this.flags = p22.uint8; + const tagNumber = this.tagNumber = this.flags & 63; + if (tagNumber === 63) { + this.tag = p22.tag; + } else { + this.tag = getWOFF2Tag(tagNumber); + } + const transformVersion = this.transformVersion = (this.flags & 192) >> 6; + let hasTransforms = transformVersion !== 0; + if (this.tag === `glyf` || this.tag === `loca`) { + hasTransforms = this.transformVersion !== 3; + } + this.origLength = p22.uint128; + if (hasTransforms) { + this.transformLength = p22.uint128; + } + } +}; +function buildWoff2LazyLookups(woff2, decoded, createTable2) { + woff2.tables = {}; + woff2.directory.forEach((entry) => { + lazy$1(woff2.tables, entry.tag.trim(), () => { + const start = entry.offset; + const end = start + (entry.transformLength ? entry.transformLength : entry.origLength); + const data = new DataView(decoded.slice(start, end).buffer); + try { + return createTable2( + woff2.tables, + { tag: entry.tag, offset: 0, length: entry.origLength }, + data + ); + } catch (e2) { + console.error(e2); + } + }); + }); +} +function getWOFF2Tag(flag) { + return [ + `cmap`, + `head`, + `hhea`, + `hmtx`, + `maxp`, + `name`, + `OS/2`, + `post`, + `cvt `, + `fpgm`, + `glyf`, + `loca`, + `prep`, + `CFF `, + `VORG`, + `EBDT`, + `EBLC`, + `gasp`, + `hdmx`, + `kern`, + `LTSH`, + `PCLT`, + `VDMX`, + `vhea`, + `vmtx`, + `BASE`, + `GDEF`, + `GPOS`, + `GSUB`, + `EBSC`, + `JSTF`, + `MATH`, + `CBDT`, + `CBLC`, + `COLR`, + `CPAL`, + `SVG `, + `sbix`, + `acnt`, + `avar`, + `bdat`, + `bloc`, + `bsln`, + `cvar`, + `fdsc`, + `feat`, + `fmtx`, + `fvar`, + `gvar`, + `hsty`, + `just`, + `lcar`, + `mort`, + `morx`, + `opbd`, + `prop`, + `trak`, + `Zapf`, + `Silf`, + `Glat`, + `Gloc`, + `Feat`, + `Sill` + ][flag & 63]; +} +var tableClasses = {}; +var tableClassesLoaded = false; +Promise.all([ + Promise.resolve().then(function() { + return cmap$1; + }), + Promise.resolve().then(function() { + return head$1; + }), + Promise.resolve().then(function() { + return hhea$1; + }), + Promise.resolve().then(function() { + return hmtx$1; + }), + Promise.resolve().then(function() { + return maxp$1; + }), + Promise.resolve().then(function() { + return name$1; + }), + Promise.resolve().then(function() { + return OS2$1; + }), + Promise.resolve().then(function() { + return post$1; + }), + Promise.resolve().then(function() { + return BASE$1; + }), + Promise.resolve().then(function() { + return GDEF$1; + }), + Promise.resolve().then(function() { + return GSUB$1; + }), + Promise.resolve().then(function() { + return GPOS$1; + }), + Promise.resolve().then(function() { + return SVG$1; + }), + Promise.resolve().then(function() { + return fvar$1; + }), + Promise.resolve().then(function() { + return cvt$1; + }), + Promise.resolve().then(function() { + return fpgm$1; + }), + Promise.resolve().then(function() { + return gasp$1; + }), + Promise.resolve().then(function() { + return glyf$1; + }), + Promise.resolve().then(function() { + return loca$1; + }), + Promise.resolve().then(function() { + return prep$1; + }), + Promise.resolve().then(function() { + return CFF$1; + }), + Promise.resolve().then(function() { + return CFF2$1; + }), + Promise.resolve().then(function() { + return VORG$1; + }), + Promise.resolve().then(function() { + return EBLC$1; + }), + Promise.resolve().then(function() { + return EBDT$1; + }), + Promise.resolve().then(function() { + return EBSC$1; + }), + Promise.resolve().then(function() { + return CBLC$1; + }), + Promise.resolve().then(function() { + return CBDT$1; + }), + Promise.resolve().then(function() { + return sbix$1; + }), + Promise.resolve().then(function() { + return COLR$1; + }), + Promise.resolve().then(function() { + return CPAL$1; + }), + Promise.resolve().then(function() { + return DSIG$1; + }), + Promise.resolve().then(function() { + return hdmx$1; + }), + Promise.resolve().then(function() { + return kern$1; + }), + Promise.resolve().then(function() { + return LTSH$1; + }), + Promise.resolve().then(function() { + return MERG$1; + }), + Promise.resolve().then(function() { + return meta$1; + }), + Promise.resolve().then(function() { + return PCLT$1; + }), + Promise.resolve().then(function() { + return VDMX$1; + }), + Promise.resolve().then(function() { + return vhea$1; + }), + Promise.resolve().then(function() { + return vmtx$1; + }) +]).then((data) => { + data.forEach((e2) => { + let name2 = Object.keys(e2)[0]; + tableClasses[name2] = e2[name2]; + }); + tableClassesLoaded = true; +}); +function createTable(tables, dict, dataview) { + let name2 = dict.tag.replace(/[^\w\d]/g, ``); + let Type = tableClasses[name2]; + if (Type) return new Type(dict, dataview, tables); + console.warn( + `lib-font has no definition for ${name2}. The table was skipped.` + ); + return {}; +} +function loadTableClasses() { + let count = 0; + function checkLoaded(resolve, reject) { + if (!tableClassesLoaded) { + if (count > 10) { + return reject(new Error(`loading took too long`)); + } + count++; + return setTimeout(() => checkLoaded(resolve), 250); + } + resolve(createTable); + } + return new Promise((resolve, reject) => checkLoaded(resolve)); +} +function getFontCSSFormat(path, errorOnStyle) { + let pos = path.lastIndexOf(`.`); + let ext = (path.substring(pos + 1) || ``).toLowerCase(); + let format = { + ttf: `truetype`, + otf: `opentype`, + woff: `woff`, + woff2: `woff2` + }[ext]; + if (format) return format; + let msg = { + eot: `The .eot format is not supported: it died in January 12, 2016, when Microsoft retired all versions of IE that didn't already support WOFF.`, + svg: `The .svg format is not supported: SVG fonts (not to be confused with OpenType with embedded SVG) were so bad we took the entire fonts chapter out of the SVG specification again.`, + fon: `The .fon format is not supported: this is an ancient Windows bitmap font format.`, + ttc: `Based on the current CSS specification, font collections are not (yet?) supported.` + }[ext]; + if (!msg) msg = `${path} is not a known webfont format.`; + if (errorOnStyle) { + throw new Error(msg); + } else { + console.warn(`Could not load font: ${msg}`); + } +} +async function setupFontFace(name2, url, options = {}) { + if (!globalThis.document) return; + let format = getFontCSSFormat(url, options.errorOnStyle); + if (!format) return; + let style = document.createElement(`style`); + style.className = `injected-by-Font-js`; + let rules = []; + if (options.styleRules) { + rules = Object.entries(options.styleRules).map( + ([key, value]) => `${key}: ${value};` + ); + } + style.textContent = ` +@font-face { + font-family: "${name2}"; + ${rules.join( + ` + ` + )} + src: url("${url}") format("${format}"); +}`; + globalThis.document.head.appendChild(style); + return style; +} +var TTF = [0, 1, 0, 0]; +var OTF = [79, 84, 84, 79]; +var WOFF = [119, 79, 70, 70]; +var WOFF2 = [119, 79, 70, 50]; +function match(ar1, ar2) { + if (ar1.length !== ar2.length) return; + for (let i2 = 0; i2 < ar1.length; i2++) { + if (ar1[i2] !== ar2[i2]) return; + } + return true; +} +function validFontFormat(dataview) { + const LEAD_BYTES = [ + dataview.getUint8(0), + dataview.getUint8(1), + dataview.getUint8(2), + dataview.getUint8(3) + ]; + if (match(LEAD_BYTES, TTF) || match(LEAD_BYTES, OTF)) return `SFNT`; + if (match(LEAD_BYTES, WOFF)) return `WOFF`; + if (match(LEAD_BYTES, WOFF2)) return `WOFF2`; +} +function checkFetchResponseStatus(response) { + if (!response.ok) { + throw new Error( + `HTTP ${response.status} - ${response.statusText}` + ); + } + return response; +} +var Font = class extends EventManager { + constructor(name2, options = {}) { + super(); + this.name = name2; + this.options = options; + this.metrics = false; + } + get src() { + return this.__src; + } + set src(src) { + this.__src = src; + (async () => { + if (globalThis.document && !this.options.skipStyleSheet) { + await setupFontFace(this.name, src, this.options); + } + this.loadFont(src); + })(); + } + async loadFont(url, filename) { + fetch(url).then( + (response) => checkFetchResponseStatus(response) && response.arrayBuffer() + ).then( + (buffer) => this.fromDataBuffer(buffer, filename || url) + ).catch((err) => { + const evt = new Event2( + `error`, + err, + `Failed to load font at ${filename || url}` + ); + this.dispatch(evt); + if (this.onerror) this.onerror(evt); + }); + } + async fromDataBuffer(buffer, filenameOrUrL) { + this.fontData = new DataView(buffer); + let type = validFontFormat(this.fontData); + if (!type) { + throw new Error( + `${filenameOrUrL} is either an unsupported font format, or not a font at all.` + ); + } + await this.parseBasicData(type); + const evt = new Event2("load", { font: this }); + this.dispatch(evt); + if (this.onload) this.onload(evt); + } + async parseBasicData(type) { + return loadTableClasses().then((createTable2) => { + if (type === `SFNT`) { + this.opentype = new SFNT(this, this.fontData, createTable2); + } + if (type === `WOFF`) { + this.opentype = new WOFF$1(this, this.fontData, createTable2); + } + if (type === `WOFF2`) { + this.opentype = new WOFF2$1(this, this.fontData, createTable2); + } + return this.opentype; + }); + } + getGlyphId(char) { + return this.opentype.tables.cmap.getGlyphId(char); + } + reverse(glyphid) { + return this.opentype.tables.cmap.reverse(glyphid); + } + supports(char) { + return this.getGlyphId(char) !== 0; + } + supportsVariation(variation) { + return this.opentype.tables.cmap.supportsVariation(variation) !== false; + } + measureText(text, size = 16) { + if (this.__unloaded) + throw new Error( + "Cannot measure text: font was unloaded. Please reload before calling measureText()" + ); + let d2 = document.createElement("div"); + d2.textContent = text; + d2.style.fontFamily = this.name; + d2.style.fontSize = `${size}px`; + d2.style.color = `transparent`; + d2.style.background = `transparent`; + d2.style.top = `0`; + d2.style.left = `0`; + d2.style.position = `absolute`; + document.body.appendChild(d2); + let bbox = d2.getBoundingClientRect(); + document.body.removeChild(d2); + const OS22 = this.opentype.tables["OS/2"]; + bbox.fontSize = size; + bbox.ascender = OS22.sTypoAscender; + bbox.descender = OS22.sTypoDescender; + return bbox; + } + unload() { + if (this.styleElement.parentNode) { + this.styleElement.parentNode.removeElement(this.styleElement); + const evt = new Event2("unload", { font: this }); + this.dispatch(evt); + if (this.onunload) this.onunload(evt); + } + this._unloaded = true; + } + load() { + if (this.__unloaded) { + delete this.__unloaded; + document.head.appendChild(this.styleElement); + const evt = new Event2("load", { font: this }); + this.dispatch(evt); + if (this.onload) this.onload(evt); + } + } +}; +globalThis.Font = Font; +var Subtable = class extends ParsedData { + constructor(p22, plaformID, encodingID) { + super(p22); + this.plaformID = plaformID; + this.encodingID = encodingID; + } +}; +var Format0 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 0; + this.length = p22.uint16; + this.language = p22.uint16; + this.glyphIdArray = [...new Array(256)].map((_) => p22.uint8); + } + supports(charCode) { + if (charCode.charCodeAt) { + charCode = -1; + console.warn( + `supports(character) not implemented for cmap subtable format 0. only supports(id) is implemented.` + ); + } + return 0 <= charCode && charCode <= 255; + } + reverse(glyphID) { + console.warn(`reverse not implemented for cmap subtable format 0`); + return {}; + } + getSupportedCharCodes() { + return [{ start: 1, end: 256 }]; + } +}; +var Format2 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 2; + this.length = p22.uint16; + this.language = p22.uint16; + this.subHeaderKeys = [...new Array(256)].map((_) => p22.uint16); + const subHeaderCount = Math.max(...this.subHeaderKeys); + const subHeaderOffset = p22.currentPosition; + lazy$1(this, `subHeaders`, () => { + p22.currentPosition = subHeaderOffset; + return [...new Array(subHeaderCount)].map( + (_) => new SubHeader(p22) + ); + }); + const glyphIndexOffset = subHeaderOffset + subHeaderCount * 8; + lazy$1(this, `glyphIndexArray`, () => { + p22.currentPosition = glyphIndexOffset; + return [...new Array(subHeaderCount)].map((_) => p22.uint16); + }); + } + supports(charCode) { + if (charCode.charCodeAt) { + charCode = -1; + console.warn( + `supports(character) not implemented for cmap subtable format 2. only supports(id) is implemented.` + ); + } + const low = charCode && 255; + const high = charCode && 65280; + const subHeaderKey = this.subHeaders[high]; + const subheader = this.subHeaders[subHeaderKey]; + const first = subheader.firstCode; + const last = first + subheader.entryCount; + return first <= low && low <= last; + } + reverse(glyphID) { + console.warn(`reverse not implemented for cmap subtable format 2`); + return {}; + } + getSupportedCharCodes(preservePropNames = false) { + if (preservePropNames) { + return this.subHeaders.map((h2) => ({ + firstCode: h2.firstCode, + lastCode: h2.lastCode + })); + } + return this.subHeaders.map((h2) => ({ + start: h2.firstCode, + end: h2.lastCode + })); + } +}; +var SubHeader = class { + constructor(p22) { + this.firstCode = p22.uint16; + this.entryCount = p22.uint16; + this.lastCode = this.first + this.entryCount; + this.idDelta = p22.int16; + this.idRangeOffset = p22.uint16; + } +}; +var Format4 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 4; + this.length = p22.uint16; + this.language = p22.uint16; + this.segCountX2 = p22.uint16; + this.segCount = this.segCountX2 / 2; + this.searchRange = p22.uint16; + this.entrySelector = p22.uint16; + this.rangeShift = p22.uint16; + const endCodePosition = p22.currentPosition; + lazy$1( + this, + `endCode`, + () => p22.readBytes(this.segCount, endCodePosition, 16) + ); + const startCodePosition = endCodePosition + 2 + this.segCountX2; + lazy$1( + this, + `startCode`, + () => p22.readBytes(this.segCount, startCodePosition, 16) + ); + const idDeltaPosition = startCodePosition + this.segCountX2; + lazy$1( + this, + `idDelta`, + () => p22.readBytes(this.segCount, idDeltaPosition, 16, true) + ); + const idRangePosition = idDeltaPosition + this.segCountX2; + lazy$1( + this, + `idRangeOffset`, + () => p22.readBytes(this.segCount, idRangePosition, 16) + ); + const glyphIdArrayPosition = idRangePosition + this.segCountX2; + const glyphIdArrayLength = this.length - (glyphIdArrayPosition - this.tableStart); + lazy$1( + this, + `glyphIdArray`, + () => p22.readBytes(glyphIdArrayLength, glyphIdArrayPosition, 16) + ); + lazy$1( + this, + `segments`, + () => this.buildSegments(idRangePosition, glyphIdArrayPosition, p22) + ); + } + buildSegments(idRangePosition, glyphIdArrayPosition, p22) { + const build = (_, i2) => { + let startCode = this.startCode[i2], endCode = this.endCode[i2], idDelta = this.idDelta[i2], idRangeOffset = this.idRangeOffset[i2], idRangeOffsetPointer = idRangePosition + 2 * i2, glyphIDs = []; + if (idRangeOffset === 0) { + for (let i22 = startCode + idDelta, e2 = endCode + idDelta; i22 <= e2; i22++) { + glyphIDs.push(i22); + } + } else { + for (let i22 = 0, e2 = endCode - startCode; i22 <= e2; i22++) { + p22.currentPosition = idRangeOffsetPointer + idRangeOffset + i22 * 2; + glyphIDs.push(p22.uint16); + } + } + return { + startCode, + endCode, + idDelta, + idRangeOffset, + glyphIDs + }; + }; + return [...new Array(this.segCount)].map(build); + } + reverse(glyphID) { + let s2 = this.segments.find((v2) => v2.glyphIDs.includes(glyphID)); + if (!s2) return {}; + const code = s2.startCode + s2.glyphIDs.indexOf(glyphID); + return { code, unicode: String.fromCodePoint(code) }; + } + getGlyphId(charCode) { + if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); + if (55296 <= charCode && charCode <= 57343) return 0; + if ((charCode & 65534) === 65534 || (charCode & 65535) === 65535) + return 0; + let segment = this.segments.find( + (s2) => s2.startCode <= charCode && charCode <= s2.endCode + ); + if (!segment) return 0; + return segment.glyphIDs[charCode - segment.startCode]; + } + supports(charCode) { + return this.getGlyphId(charCode) !== 0; + } + getSupportedCharCodes(preservePropNames = false) { + if (preservePropNames) return this.segments; + return this.segments.map((v2) => ({ + start: v2.startCode, + end: v2.endCode + })); + } +}; +var Format6 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 6; + this.length = p22.uint16; + this.language = p22.uint16; + this.firstCode = p22.uint16; + this.entryCount = p22.uint16; + this.lastCode = this.firstCode + this.entryCount - 1; + const getter = () => [...new Array(this.entryCount)].map((_) => p22.uint16); + lazy$1(this, `glyphIdArray`, getter); + } + supports(charCode) { + if (charCode.charCodeAt) { + charCode = -1; + console.warn( + `supports(character) not implemented for cmap subtable format 6. only supports(id) is implemented.` + ); + } + if (charCode < this.firstCode) return {}; + if (charCode > this.firstCode + this.entryCount) return {}; + const code = charCode - this.firstCode; + return { code, unicode: String.fromCodePoint(code) }; + } + reverse(glyphID) { + let pos = this.glyphIdArray.indexOf(glyphID); + if (pos > -1) return this.firstCode + pos; + } + getSupportedCharCodes(preservePropNames = false) { + if (preservePropNames) { + return [{ firstCode: this.firstCode, lastCode: this.lastCode }]; + } + return [{ start: this.firstCode, end: this.lastCode }]; + } +}; +var Format8 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 8; + p22.uint16; + this.length = p22.uint32; + this.language = p22.uint32; + this.is32 = [...new Array(8192)].map((_) => p22.uint8); + this.numGroups = p22.uint32; + const getter = () => [...new Array(this.numGroups)].map( + (_) => new SequentialMapGroup$1(p22) + ); + lazy$1(this, `groups`, getter); + } + supports(charCode) { + if (charCode.charCodeAt) { + charCode = -1; + console.warn( + `supports(character) not implemented for cmap subtable format 8. only supports(id) is implemented.` + ); + } + return this.groups.findIndex( + (s2) => s2.startcharCode <= charCode && charCode <= s2.endcharCode + ) !== -1; + } + reverse(glyphID) { + console.warn(`reverse not implemented for cmap subtable format 8`); + return {}; + } + getSupportedCharCodes(preservePropNames = false) { + if (preservePropNames) return this.groups; + return this.groups.map((v2) => ({ + start: v2.startcharCode, + end: v2.endcharCode + })); + } +}; +var SequentialMapGroup$1 = class { + constructor(p22) { + this.startcharCode = p22.uint32; + this.endcharCode = p22.uint32; + this.startGlyphID = p22.uint32; + } +}; +var Format10 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 10; + p22.uint16; + this.length = p22.uint32; + this.language = p22.uint32; + this.startCharCode = p22.uint32; + this.numChars = p22.uint32; + this.endCharCode = this.startCharCode + this.numChars; + const getter = () => [...new Array(this.numChars)].map((_) => p22.uint16); + lazy$1(this, `glyphs`, getter); + } + supports(charCode) { + if (charCode.charCodeAt) { + charCode = -1; + console.warn( + `supports(character) not implemented for cmap subtable format 10. only supports(id) is implemented.` + ); + } + if (charCode < this.startCharCode) return false; + if (charCode > this.startCharCode + this.numChars) return false; + return charCode - this.startCharCode; + } + reverse(glyphID) { + console.warn(`reverse not implemented for cmap subtable format 10`); + return {}; + } + getSupportedCharCodes(preservePropNames = false) { + if (preservePropNames) { + return [ + { + startCharCode: this.startCharCode, + endCharCode: this.endCharCode + } + ]; + } + return [{ start: this.startCharCode, end: this.endCharCode }]; + } +}; +var Format12 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 12; + p22.uint16; + this.length = p22.uint32; + this.language = p22.uint32; + this.numGroups = p22.uint32; + const getter = () => [...new Array(this.numGroups)].map( + (_) => new SequentialMapGroup(p22) + ); + lazy$1(this, `groups`, getter); + } + supports(charCode) { + if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); + if (55296 <= charCode && charCode <= 57343) return 0; + if ((charCode & 65534) === 65534 || (charCode & 65535) === 65535) + return 0; + return this.groups.findIndex( + (s2) => s2.startCharCode <= charCode && charCode <= s2.endCharCode + ) !== -1; + } + reverse(glyphID) { + for (let group of this.groups) { + let start = group.startGlyphID; + if (start > glyphID) continue; + if (start === glyphID) return group.startCharCode; + let end = start + (group.endCharCode - group.startCharCode); + if (end < glyphID) continue; + const code = group.startCharCode + (glyphID - start); + return { code, unicode: String.fromCodePoint(code) }; + } + return {}; + } + getSupportedCharCodes(preservePropNames = false) { + if (preservePropNames) return this.groups; + return this.groups.map((v2) => ({ + start: v2.startCharCode, + end: v2.endCharCode + })); + } +}; +var SequentialMapGroup = class { + constructor(p22) { + this.startCharCode = p22.uint32; + this.endCharCode = p22.uint32; + this.startGlyphID = p22.uint32; + } +}; +var Format13 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.format = 13; + p22.uint16; + this.length = p22.uint32; + this.language = p22.uint32; + this.numGroups = p22.uint32; + const getter = [...new Array(this.numGroups)].map( + (_) => new ConstantMapGroup(p22) + ); + lazy$1(this, `groups`, getter); + } + supports(charCode) { + if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); + return this.groups.findIndex( + (s2) => s2.startCharCode <= charCode && charCode <= s2.endCharCode + ) !== -1; + } + reverse(glyphID) { + console.warn(`reverse not implemented for cmap subtable format 13`); + return {}; + } + getSupportedCharCodes(preservePropNames = false) { + if (preservePropNames) return this.groups; + return this.groups.map((v2) => ({ + start: v2.startCharCode, + end: v2.endCharCode + })); + } +}; +var ConstantMapGroup = class { + constructor(p22) { + this.startCharCode = p22.uint32; + this.endCharCode = p22.uint32; + this.glyphID = p22.uint32; + } +}; +var Format14 = class extends Subtable { + constructor(p22, platformID, encodingID) { + super(p22, platformID, encodingID); + this.subTableStart = p22.currentPosition; + this.format = 14; + this.length = p22.uint32; + this.numVarSelectorRecords = p22.uint32; + lazy$1( + this, + `varSelectors`, + () => [...new Array(this.numVarSelectorRecords)].map( + (_) => new VariationSelector(p22) + ) + ); + } + supports() { + console.warn(`supports not implemented for cmap subtable format 14`); + return 0; + } + getSupportedCharCodes() { + console.warn( + `getSupportedCharCodes not implemented for cmap subtable format 14` + ); + return []; + } + reverse(glyphID) { + console.warn(`reverse not implemented for cmap subtable format 14`); + return {}; + } + supportsVariation(variation) { + let v2 = this.varSelector.find( + (uvs) => uvs.varSelector === variation + ); + return v2 ? v2 : false; + } + getSupportedVariations() { + return this.varSelectors.map((v2) => v2.varSelector); + } +}; +var VariationSelector = class { + constructor(p22) { + this.varSelector = p22.uint24; + this.defaultUVSOffset = p22.Offset32; + this.nonDefaultUVSOffset = p22.Offset32; + } +}; +function createSubTable(parser, platformID, encodingID) { + const format = parser.uint16; + if (format === 0) return new Format0(parser, platformID, encodingID); + if (format === 2) return new Format2(parser, platformID, encodingID); + if (format === 4) return new Format4(parser, platformID, encodingID); + if (format === 6) return new Format6(parser, platformID, encodingID); + if (format === 8) return new Format8(parser, platformID, encodingID); + if (format === 10) return new Format10(parser, platformID, encodingID); + if (format === 12) return new Format12(parser, platformID, encodingID); + if (format === 13) return new Format13(parser, platformID, encodingID); + if (format === 14) return new Format14(parser, platformID, encodingID); + return {}; +} +var cmap = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.numTables = p22.uint16; + this.encodingRecords = [...new Array(this.numTables)].map( + (_) => new EncodingRecord(p22, this.tableStart) + ); + } + getSubTable(tableID) { + return this.encodingRecords[tableID].table; + } + getSupportedEncodings() { + return this.encodingRecords.map((r3) => ({ + platformID: r3.platformID, + encodingId: r3.encodingID + })); + } + getSupportedCharCodes(platformID, encodingID) { + const recordID = this.encodingRecords.findIndex( + (r3) => r3.platformID === platformID && r3.encodingID === encodingID + ); + if (recordID === -1) return false; + const subtable = this.getSubTable(recordID); + return subtable.getSupportedCharCodes(); + } + reverse(glyphid) { + for (let i2 = 0; i2 < this.numTables; i2++) { + let code = this.getSubTable(i2).reverse(glyphid); + if (code) return code; + } + } + getGlyphId(char) { + let last = 0; + this.encodingRecords.some((_, tableID) => { + let t3 = this.getSubTable(tableID); + if (!t3.getGlyphId) return false; + last = t3.getGlyphId(char); + return last !== 0; + }); + return last; + } + supports(char) { + return this.encodingRecords.some((_, tableID) => { + const t3 = this.getSubTable(tableID); + return t3.supports && t3.supports(char) !== false; + }); + } + supportsVariation(variation) { + return this.encodingRecords.some((_, tableID) => { + const t3 = this.getSubTable(tableID); + return t3.supportsVariation && t3.supportsVariation(variation) !== false; + }); + } +}; +var EncodingRecord = class { + constructor(p22, tableStart) { + const platformID = this.platformID = p22.uint16; + const encodingID = this.encodingID = p22.uint16; + const offset = this.offset = p22.Offset32; + lazy$1(this, `table`, () => { + p22.currentPosition = tableStart + offset; + return createSubTable(p22, platformID, encodingID); + }); + } +}; +var cmap$1 = Object.freeze({ __proto__: null, cmap }); +var head = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.load({ + majorVersion: p22.uint16, + minorVersion: p22.uint16, + fontRevision: p22.fixed, + checkSumAdjustment: p22.uint32, + magicNumber: p22.uint32, + flags: p22.flags(16), + unitsPerEm: p22.uint16, + created: p22.longdatetime, + modified: p22.longdatetime, + xMin: p22.int16, + yMin: p22.int16, + xMax: p22.int16, + yMax: p22.int16, + macStyle: p22.flags(16), + lowestRecPPEM: p22.uint16, + fontDirectionHint: p22.uint16, + indexToLocFormat: p22.uint16, + glyphDataFormat: p22.uint16 + }); + } +}; +var head$1 = Object.freeze({ __proto__: null, head }); +var hhea = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.ascender = p22.fword; + this.descender = p22.fword; + this.lineGap = p22.fword; + this.advanceWidthMax = p22.ufword; + this.minLeftSideBearing = p22.fword; + this.minRightSideBearing = p22.fword; + this.xMaxExtent = p22.fword; + this.caretSlopeRise = p22.int16; + this.caretSlopeRun = p22.int16; + this.caretOffset = p22.int16; + p22.int16; + p22.int16; + p22.int16; + p22.int16; + this.metricDataFormat = p22.int16; + this.numberOfHMetrics = p22.uint16; + p22.verifyLength(); + } +}; +var hhea$1 = Object.freeze({ __proto__: null, hhea }); +var hmtx = class extends SimpleTable { + constructor(dict, dataview, tables) { + const { p: p22 } = super(dict, dataview); + const numberOfHMetrics = tables.hhea.numberOfHMetrics; + const numGlyphs = tables.maxp.numGlyphs; + const metricsStart = p22.currentPosition; + lazy$1(this, `hMetrics`, () => { + p22.currentPosition = metricsStart; + return [...new Array(numberOfHMetrics)].map( + (_) => new LongHorMetric(p22.uint16, p22.int16) + ); + }); + if (numberOfHMetrics < numGlyphs) { + const lsbStart = metricsStart + numberOfHMetrics * 4; + lazy$1(this, `leftSideBearings`, () => { + p22.currentPosition = lsbStart; + return [...new Array(numGlyphs - numberOfHMetrics)].map( + (_) => p22.int16 + ); + }); + } + } +}; +var LongHorMetric = class { + constructor(w2, b2) { + this.advanceWidth = w2; + this.lsb = b2; + } +}; +var hmtx$1 = Object.freeze({ __proto__: null, hmtx }); +var maxp = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.legacyFixed; + this.numGlyphs = p22.uint16; + if (this.version === 1) { + this.maxPoints = p22.uint16; + this.maxContours = p22.uint16; + this.maxCompositePoints = p22.uint16; + this.maxCompositeContours = p22.uint16; + this.maxZones = p22.uint16; + this.maxTwilightPoints = p22.uint16; + this.maxStorage = p22.uint16; + this.maxFunctionDefs = p22.uint16; + this.maxInstructionDefs = p22.uint16; + this.maxStackElements = p22.uint16; + this.maxSizeOfInstructions = p22.uint16; + this.maxComponentElements = p22.uint16; + this.maxComponentDepth = p22.uint16; + } + p22.verifyLength(); + } +}; +var maxp$1 = Object.freeze({ __proto__: null, maxp }); +var name = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.format = p22.uint16; + this.count = p22.uint16; + this.stringOffset = p22.Offset16; + this.nameRecords = [...new Array(this.count)].map( + (_) => new NameRecord(p22, this) + ); + if (this.format === 1) { + this.langTagCount = p22.uint16; + this.langTagRecords = [...new Array(this.langTagCount)].map( + (_) => new LangTagRecord(p22.uint16, p22.Offset16) + ); + } + this.stringStart = this.tableStart + this.stringOffset; + } + get(nameID) { + let record = this.nameRecords.find( + (record2) => record2.nameID === nameID + ); + if (record) return record.string; + } +}; +var LangTagRecord = class { + constructor(length, offset) { + this.length = length; + this.offset = offset; + } +}; +var NameRecord = class { + constructor(p22, nameTable) { + this.platformID = p22.uint16; + this.encodingID = p22.uint16; + this.languageID = p22.uint16; + this.nameID = p22.uint16; + this.length = p22.uint16; + this.offset = p22.Offset16; + lazy$1(this, `string`, () => { + p22.currentPosition = nameTable.stringStart + this.offset; + return decodeString(p22, this); + }); + } +}; +function decodeString(p22, record) { + const { platformID, length } = record; + if (length === 0) return ``; + if (platformID === 0 || platformID === 3) { + const str2 = []; + for (let i2 = 0, e2 = length / 2; i2 < e2; i2++) + str2[i2] = String.fromCharCode(p22.uint16); + return str2.join(``); + } + const bytes = p22.readBytes(length); + const str = []; + bytes.forEach(function(b2, i2) { + str[i2] = String.fromCharCode(b2); + }); + return str.join(``); +} +var name$1 = Object.freeze({ __proto__: null, name }); +var OS2 = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.xAvgCharWidth = p22.int16; + this.usWeightClass = p22.uint16; + this.usWidthClass = p22.uint16; + this.fsType = p22.uint16; + this.ySubscriptXSize = p22.int16; + this.ySubscriptYSize = p22.int16; + this.ySubscriptXOffset = p22.int16; + this.ySubscriptYOffset = p22.int16; + this.ySuperscriptXSize = p22.int16; + this.ySuperscriptYSize = p22.int16; + this.ySuperscriptXOffset = p22.int16; + this.ySuperscriptYOffset = p22.int16; + this.yStrikeoutSize = p22.int16; + this.yStrikeoutPosition = p22.int16; + this.sFamilyClass = p22.int16; + this.panose = [...new Array(10)].map((_) => p22.uint8); + this.ulUnicodeRange1 = p22.flags(32); + this.ulUnicodeRange2 = p22.flags(32); + this.ulUnicodeRange3 = p22.flags(32); + this.ulUnicodeRange4 = p22.flags(32); + this.achVendID = p22.tag; + this.fsSelection = p22.uint16; + this.usFirstCharIndex = p22.uint16; + this.usLastCharIndex = p22.uint16; + this.sTypoAscender = p22.int16; + this.sTypoDescender = p22.int16; + this.sTypoLineGap = p22.int16; + this.usWinAscent = p22.uint16; + this.usWinDescent = p22.uint16; + if (this.version === 0) return p22.verifyLength(); + this.ulCodePageRange1 = p22.flags(32); + this.ulCodePageRange2 = p22.flags(32); + if (this.version === 1) return p22.verifyLength(); + this.sxHeight = p22.int16; + this.sCapHeight = p22.int16; + this.usDefaultChar = p22.uint16; + this.usBreakChar = p22.uint16; + this.usMaxContext = p22.uint16; + if (this.version <= 4) return p22.verifyLength(); + this.usLowerOpticalPointSize = p22.uint16; + this.usUpperOpticalPointSize = p22.uint16; + if (this.version === 5) return p22.verifyLength(); + } +}; +var OS2$1 = Object.freeze({ __proto__: null, OS2 }); +var post = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.legacyFixed; + this.italicAngle = p22.fixed; + this.underlinePosition = p22.fword; + this.underlineThickness = p22.fword; + this.isFixedPitch = p22.uint32; + this.minMemType42 = p22.uint32; + this.maxMemType42 = p22.uint32; + this.minMemType1 = p22.uint32; + this.maxMemType1 = p22.uint32; + if (this.version === 1 || this.version === 3) return p22.verifyLength(); + this.numGlyphs = p22.uint16; + if (this.version === 2) { + this.glyphNameIndex = [...new Array(this.numGlyphs)].map( + (_) => p22.uint16 + ); + this.namesOffset = p22.currentPosition; + this.glyphNameOffsets = [1]; + for (let i2 = 0; i2 < this.numGlyphs; i2++) { + let index = this.glyphNameIndex[i2]; + if (index < macStrings.length) { + this.glyphNameOffsets.push(this.glyphNameOffsets[i2]); + continue; + } + let bytelength = p22.int8; + p22.skip(bytelength); + this.glyphNameOffsets.push( + this.glyphNameOffsets[i2] + bytelength + 1 + ); + } + } + if (this.version === 2.5) { + this.offset = [...new Array(this.numGlyphs)].map( + (_) => p22.int8 + ); + } + } + getGlyphName(glyphid) { + if (this.version !== 2) { + console.warn( + `post table version ${this.version} does not support glyph name lookups` + ); + return ``; + } + let index = this.glyphNameIndex[glyphid]; + if (index < 258) return macStrings[index]; + let offset = this.glyphNameOffsets[glyphid]; + let next = this.glyphNameOffsets[glyphid + 1]; + let len = next - offset - 1; + if (len === 0) return `.notdef.`; + this.parser.currentPosition = this.namesOffset + offset; + const data = this.parser.readBytes( + len, + this.namesOffset + offset, + 8, + true + ); + return data.map((b2) => String.fromCharCode(b2)).join(``); + } +}; +var macStrings = [ + `.notdef`, + `.null`, + `nonmarkingreturn`, + `space`, + `exclam`, + `quotedbl`, + `numbersign`, + `dollar`, + `percent`, + `ampersand`, + `quotesingle`, + `parenleft`, + `parenright`, + `asterisk`, + `plus`, + `comma`, + `hyphen`, + `period`, + `slash`, + `zero`, + `one`, + `two`, + `three`, + `four`, + `five`, + `six`, + `seven`, + `eight`, + `nine`, + `colon`, + `semicolon`, + `less`, + `equal`, + `greater`, + `question`, + `at`, + `A`, + `B`, + `C`, + `D`, + `E`, + `F`, + `G`, + `H`, + `I`, + `J`, + `K`, + `L`, + `M`, + `N`, + `O`, + `P`, + `Q`, + `R`, + `S`, + `T`, + `U`, + `V`, + `W`, + `X`, + `Y`, + `Z`, + `bracketleft`, + `backslash`, + `bracketright`, + `asciicircum`, + `underscore`, + `grave`, + `a`, + `b`, + `c`, + `d`, + `e`, + `f`, + `g`, + `h`, + `i`, + `j`, + `k`, + `l`, + `m`, + `n`, + `o`, + `p`, + `q`, + `r`, + `s`, + `t`, + `u`, + `v`, + `w`, + `x`, + `y`, + `z`, + `braceleft`, + `bar`, + `braceright`, + `asciitilde`, + `Adieresis`, + `Aring`, + `Ccedilla`, + `Eacute`, + `Ntilde`, + `Odieresis`, + `Udieresis`, + `aacute`, + `agrave`, + `acircumflex`, + `adieresis`, + `atilde`, + `aring`, + `ccedilla`, + `eacute`, + `egrave`, + `ecircumflex`, + `edieresis`, + `iacute`, + `igrave`, + `icircumflex`, + `idieresis`, + `ntilde`, + `oacute`, + `ograve`, + `ocircumflex`, + `odieresis`, + `otilde`, + `uacute`, + `ugrave`, + `ucircumflex`, + `udieresis`, + `dagger`, + `degree`, + `cent`, + `sterling`, + `section`, + `bullet`, + `paragraph`, + `germandbls`, + `registered`, + `copyright`, + `trademark`, + `acute`, + `dieresis`, + `notequal`, + `AE`, + `Oslash`, + `infinity`, + `plusminus`, + `lessequal`, + `greaterequal`, + `yen`, + `mu`, + `partialdiff`, + `summation`, + `product`, + `pi`, + `integral`, + `ordfeminine`, + `ordmasculine`, + `Omega`, + `ae`, + `oslash`, + `questiondown`, + `exclamdown`, + `logicalnot`, + `radical`, + `florin`, + `approxequal`, + `Delta`, + `guillemotleft`, + `guillemotright`, + `ellipsis`, + `nonbreakingspace`, + `Agrave`, + `Atilde`, + `Otilde`, + `OE`, + `oe`, + `endash`, + `emdash`, + `quotedblleft`, + `quotedblright`, + `quoteleft`, + `quoteright`, + `divide`, + `lozenge`, + `ydieresis`, + `Ydieresis`, + `fraction`, + `currency`, + `guilsinglleft`, + `guilsinglright`, + `fi`, + `fl`, + `daggerdbl`, + `periodcentered`, + `quotesinglbase`, + `quotedblbase`, + `perthousand`, + `Acircumflex`, + `Ecircumflex`, + `Aacute`, + `Edieresis`, + `Egrave`, + `Iacute`, + `Icircumflex`, + `Idieresis`, + `Igrave`, + `Oacute`, + `Ocircumflex`, + `apple`, + `Ograve`, + `Uacute`, + `Ucircumflex`, + `Ugrave`, + `dotlessi`, + `circumflex`, + `tilde`, + `macron`, + `breve`, + `dotaccent`, + `ring`, + `cedilla`, + `hungarumlaut`, + `ogonek`, + `caron`, + `Lslash`, + `lslash`, + `Scaron`, + `scaron`, + `Zcaron`, + `zcaron`, + `brokenbar`, + `Eth`, + `eth`, + `Yacute`, + `yacute`, + `Thorn`, + `thorn`, + `minus`, + `multiply`, + `onesuperior`, + `twosuperior`, + `threesuperior`, + `onehalf`, + `onequarter`, + `threequarters`, + `franc`, + `Gbreve`, + `gbreve`, + `Idotaccent`, + `Scedilla`, + `scedilla`, + `Cacute`, + `cacute`, + `Ccaron`, + `ccaron`, + `dcroat` +]; +var post$1 = Object.freeze({ __proto__: null, post }); +var BASE = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.horizAxisOffset = p22.Offset16; + this.vertAxisOffset = p22.Offset16; + lazy$1( + this, + `horizAxis`, + () => new AxisTable( + { offset: dict.offset + this.horizAxisOffset }, + dataview + ) + ); + lazy$1( + this, + `vertAxis`, + () => new AxisTable( + { offset: dict.offset + this.vertAxisOffset }, + dataview + ) + ); + if (this.majorVersion === 1 && this.minorVersion === 1) { + this.itemVarStoreOffset = p22.Offset32; + lazy$1( + this, + `itemVarStore`, + () => new AxisTable( + { offset: dict.offset + this.itemVarStoreOffset }, + dataview + ) + ); + } + } +}; +var AxisTable = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview, `AxisTable`); + this.baseTagListOffset = p22.Offset16; + this.baseScriptListOffset = p22.Offset16; + lazy$1( + this, + `baseTagList`, + () => new BaseTagListTable( + { offset: dict.offset + this.baseTagListOffset }, + dataview + ) + ); + lazy$1( + this, + `baseScriptList`, + () => new BaseScriptListTable( + { offset: dict.offset + this.baseScriptListOffset }, + dataview + ) + ); + } +}; +var BaseTagListTable = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview, `BaseTagListTable`); + this.baseTagCount = p22.uint16; + this.baselineTags = [...new Array(this.baseTagCount)].map( + (_) => p22.tag + ); + } +}; +var BaseScriptListTable = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview, `BaseScriptListTable`); + this.baseScriptCount = p22.uint16; + const recordStart = p22.currentPosition; + lazy$1(this, `baseScriptRecords`, () => { + p22.currentPosition = recordStart; + return [...new Array(this.baseScriptCount)].map( + (_) => new BaseScriptRecord(this.start, p22) + ); + }); + } +}; +var BaseScriptRecord = class { + constructor(baseScriptListTableStart, p22) { + this.baseScriptTag = p22.tag; + this.baseScriptOffset = p22.Offset16; + lazy$1(this, `baseScriptTable`, () => { + p22.currentPosition = baseScriptListTableStart + this.baseScriptOffset; + return new BaseScriptTable(p22); + }); + } +}; +var BaseScriptTable = class { + constructor(p22) { + this.start = p22.currentPosition; + this.baseValuesOffset = p22.Offset16; + this.defaultMinMaxOffset = p22.Offset16; + this.baseLangSysCount = p22.uint16; + this.baseLangSysRecords = [...new Array(this.baseLangSysCount)].map( + (_) => new BaseLangSysRecord(this.start, p22) + ); + lazy$1(this, `baseValues`, () => { + p22.currentPosition = this.start + this.baseValuesOffset; + return new BaseValuesTable(p22); + }); + lazy$1(this, `defaultMinMax`, () => { + p22.currentPosition = this.start + this.defaultMinMaxOffset; + return new MinMaxTable(p22); + }); + } +}; +var BaseLangSysRecord = class { + constructor(baseScriptTableStart, p22) { + this.baseLangSysTag = p22.tag; + this.minMaxOffset = p22.Offset16; + lazy$1(this, `minMax`, () => { + p22.currentPosition = baseScriptTableStart + this.minMaxOffset; + return new MinMaxTable(p22); + }); + } +}; +var BaseValuesTable = class { + constructor(p22) { + this.parser = p22; + this.start = p22.currentPosition; + this.defaultBaselineIndex = p22.uint16; + this.baseCoordCount = p22.uint16; + this.baseCoords = [...new Array(this.baseCoordCount)].map( + (_) => p22.Offset16 + ); + } + getTable(id) { + this.parser.currentPosition = this.start + this.baseCoords[id]; + return new BaseCoordTable(this.parser); + } +}; +var MinMaxTable = class { + constructor(p22) { + this.minCoord = p22.Offset16; + this.maxCoord = p22.Offset16; + this.featMinMaxCount = p22.uint16; + const recordStart = p22.currentPosition; + lazy$1(this, `featMinMaxRecords`, () => { + p22.currentPosition = recordStart; + return [...new Array(this.featMinMaxCount)].map( + (_) => new FeatMinMaxRecord(p22) + ); + }); + } +}; +var FeatMinMaxRecord = class { + constructor(p22) { + this.featureTableTag = p22.tag; + this.minCoord = p22.Offset16; + this.maxCoord = p22.Offset16; + } +}; +var BaseCoordTable = class { + constructor(p22) { + this.baseCoordFormat = p22.uint16; + this.coordinate = p22.int16; + if (this.baseCoordFormat === 2) { + this.referenceGlyph = p22.uint16; + this.baseCoordPoint = p22.uint16; + } + if (this.baseCoordFormat === 3) { + this.deviceTable = p22.Offset16; + } + } +}; +var BASE$1 = Object.freeze({ __proto__: null, BASE }); +var ClassDefinition = class { + constructor(p22) { + this.classFormat = p22.uint16; + if (this.classFormat === 1) { + this.startGlyphID = p22.uint16; + this.glyphCount = p22.uint16; + this.classValueArray = [...new Array(this.glyphCount)].map( + (_) => p22.uint16 + ); + } + if (this.classFormat === 2) { + this.classRangeCount = p22.uint16; + this.classRangeRecords = [ + ...new Array(this.classRangeCount) + ].map((_) => new ClassRangeRecord(p22)); + } + } +}; +var ClassRangeRecord = class { + constructor(p22) { + this.startGlyphID = p22.uint16; + this.endGlyphID = p22.uint16; + this.class = p22.uint16; + } +}; +var CoverageTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.coverageFormat = p22.uint16; + if (this.coverageFormat === 1) { + this.glyphCount = p22.uint16; + this.glyphArray = [...new Array(this.glyphCount)].map( + (_) => p22.uint16 + ); + } + if (this.coverageFormat === 2) { + this.rangeCount = p22.uint16; + this.rangeRecords = [...new Array(this.rangeCount)].map( + (_) => new CoverageRangeRecord(p22) + ); + } + } +}; +var CoverageRangeRecord = class { + constructor(p22) { + this.startGlyphID = p22.uint16; + this.endGlyphID = p22.uint16; + this.startCoverageIndex = p22.uint16; + } +}; +var ItemVariationStoreTable = class { + constructor(table, p22) { + this.table = table; + this.parser = p22; + this.start = p22.currentPosition; + this.format = p22.uint16; + this.variationRegionListOffset = p22.Offset32; + this.itemVariationDataCount = p22.uint16; + this.itemVariationDataOffsets = [ + ...new Array(this.itemVariationDataCount) + ].map((_) => p22.Offset32); + } +}; +var GDEF = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.glyphClassDefOffset = p22.Offset16; + lazy$1(this, `glyphClassDefs`, () => { + if (this.glyphClassDefOffset === 0) return void 0; + p22.currentPosition = this.tableStart + this.glyphClassDefOffset; + return new ClassDefinition(p22); + }); + this.attachListOffset = p22.Offset16; + lazy$1(this, `attachList`, () => { + if (this.attachListOffset === 0) return void 0; + p22.currentPosition = this.tableStart + this.attachListOffset; + return new AttachList(p22); + }); + this.ligCaretListOffset = p22.Offset16; + lazy$1(this, `ligCaretList`, () => { + if (this.ligCaretListOffset === 0) return void 0; + p22.currentPosition = this.tableStart + this.ligCaretListOffset; + return new LigCaretList(p22); + }); + this.markAttachClassDefOffset = p22.Offset16; + lazy$1(this, `markAttachClassDef`, () => { + if (this.markAttachClassDefOffset === 0) return void 0; + p22.currentPosition = this.tableStart + this.markAttachClassDefOffset; + return new ClassDefinition(p22); + }); + if (this.minorVersion >= 2) { + this.markGlyphSetsDefOffset = p22.Offset16; + lazy$1(this, `markGlyphSetsDef`, () => { + if (this.markGlyphSetsDefOffset === 0) return void 0; + p22.currentPosition = this.tableStart + this.markGlyphSetsDefOffset; + return new MarkGlyphSetsTable(p22); + }); + } + if (this.minorVersion === 3) { + this.itemVarStoreOffset = p22.Offset32; + lazy$1(this, `itemVarStore`, () => { + if (this.itemVarStoreOffset === 0) return void 0; + p22.currentPosition = this.tableStart + this.itemVarStoreOffset; + return new ItemVariationStoreTable(p22); + }); + } + } +}; +var AttachList = class extends ParsedData { + constructor(p22) { + super(p22); + this.coverageOffset = p22.Offset16; + this.glyphCount = p22.uint16; + this.attachPointOffsets = [...new Array(this.glyphCount)].map( + (_) => p22.Offset16 + ); + } + getPoint(pointID) { + this.parser.currentPosition = this.start + this.attachPointOffsets[pointID]; + return new AttachPoint(this.parser); + } +}; +var AttachPoint = class { + constructor(p22) { + this.pointCount = p22.uint16; + this.pointIndices = [...new Array(this.pointCount)].map( + (_) => p22.uint16 + ); + } +}; +var LigCaretList = class extends ParsedData { + constructor(p22) { + super(p22); + this.coverageOffset = p22.Offset16; + lazy$1(this, `coverage`, () => { + p22.currentPosition = this.start + this.coverageOffset; + return new CoverageTable(p22); + }); + this.ligGlyphCount = p22.uint16; + this.ligGlyphOffsets = [...new Array(this.ligGlyphCount)].map( + (_) => p22.Offset16 + ); + } + getLigGlyph(ligGlyphID) { + this.parser.currentPosition = this.start + this.ligGlyphOffsets[ligGlyphID]; + return new LigGlyph(this.parser); + } +}; +var LigGlyph = class extends ParsedData { + constructor(p22) { + super(p22); + this.caretCount = p22.uint16; + this.caretValueOffsets = [...new Array(this.caretCount)].map( + (_) => p22.Offset16 + ); + } + getCaretValue(caretID) { + this.parser.currentPosition = this.start + this.caretValueOffsets[caretID]; + return new CaretValue(this.parser); + } +}; +var CaretValue = class { + constructor(p22) { + this.caretValueFormat = p22.uint16; + if (this.caretValueFormat === 1) { + this.coordinate = p22.int16; + } + if (this.caretValueFormat === 2) { + this.caretValuePointIndex = p22.uint16; + } + if (this.caretValueFormat === 3) { + this.coordinate = p22.int16; + this.deviceOffset = p22.Offset16; + } + } +}; +var MarkGlyphSetsTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.markGlyphSetTableFormat = p22.uint16; + this.markGlyphSetCount = p22.uint16; + this.coverageOffsets = [...new Array(this.markGlyphSetCount)].map( + (_) => p22.Offset32 + ); + } + getMarkGlyphSet(markGlyphSetID) { + this.parser.currentPosition = this.start + this.coverageOffsets[markGlyphSetID]; + return new CoverageTable(this.parser); + } +}; +var GDEF$1 = Object.freeze({ __proto__: null, GDEF }); +var ScriptList = class extends ParsedData { + static EMPTY = { scriptCount: 0, scriptRecords: [] }; + constructor(p22) { + super(p22); + this.scriptCount = p22.uint16; + this.scriptRecords = [...new Array(this.scriptCount)].map( + (_) => new ScriptRecord(p22) + ); + } +}; +var ScriptRecord = class { + constructor(p22) { + this.scriptTag = p22.tag; + this.scriptOffset = p22.Offset16; + } +}; +var ScriptTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.defaultLangSys = p22.Offset16; + this.langSysCount = p22.uint16; + this.langSysRecords = [...new Array(this.langSysCount)].map( + (_) => new LangSysRecord(p22) + ); + } +}; +var LangSysRecord = class { + constructor(p22) { + this.langSysTag = p22.tag; + this.langSysOffset = p22.Offset16; + } +}; +var LangSysTable = class { + constructor(p22) { + this.lookupOrder = p22.Offset16; + this.requiredFeatureIndex = p22.uint16; + this.featureIndexCount = p22.uint16; + this.featureIndices = [...new Array(this.featureIndexCount)].map( + (_) => p22.uint16 + ); + } +}; +var FeatureList = class extends ParsedData { + static EMPTY = { featureCount: 0, featureRecords: [] }; + constructor(p22) { + super(p22); + this.featureCount = p22.uint16; + this.featureRecords = [...new Array(this.featureCount)].map( + (_) => new FeatureRecord(p22) + ); + } +}; +var FeatureRecord = class { + constructor(p22) { + this.featureTag = p22.tag; + this.featureOffset = p22.Offset16; + } +}; +var FeatureTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.featureParams = p22.Offset16; + this.lookupIndexCount = p22.uint16; + this.lookupListIndices = [...new Array(this.lookupIndexCount)].map( + (_) => p22.uint16 + ); + } + getFeatureParams() { + if (this.featureParams > 0) { + const p22 = this.parser; + p22.currentPosition = this.start + this.featureParams; + const tag = this.featureTag; + if (tag === `size`) return new Size(p22); + if (tag.startsWith(`cc`)) return new CharacterVariant(p22); + if (tag.startsWith(`ss`)) return new StylisticSet(p22); + } + } +}; +var CharacterVariant = class { + constructor(p22) { + this.format = p22.uint16; + this.featUiLabelNameId = p22.uint16; + this.featUiTooltipTextNameId = p22.uint16; + this.sampleTextNameId = p22.uint16; + this.numNamedParameters = p22.uint16; + this.firstParamUiLabelNameId = p22.uint16; + this.charCount = p22.uint16; + this.character = [...new Array(this.charCount)].map( + (_) => p22.uint24 + ); + } +}; +var Size = class { + constructor(p22) { + this.designSize = p22.uint16; + this.subfamilyIdentifier = p22.uint16; + this.subfamilyNameID = p22.uint16; + this.smallEnd = p22.uint16; + this.largeEnd = p22.uint16; + } +}; +var StylisticSet = class { + constructor(p22) { + this.version = p22.uint16; + this.UINameID = p22.uint16; + } +}; +function undoCoverageOffsetParsing(instance) { + instance.parser.currentPosition -= 2; + delete instance.coverageOffset; + delete instance.getCoverageTable; +} +var LookupType$1 = class extends ParsedData { + constructor(p22) { + super(p22); + this.substFormat = p22.uint16; + this.coverageOffset = p22.Offset16; + } + getCoverageTable() { + let p22 = this.parser; + p22.currentPosition = this.start + this.coverageOffset; + return new CoverageTable(p22); + } +}; +var SubstLookupRecord = class { + constructor(p22) { + this.glyphSequenceIndex = p22.uint16; + this.lookupListIndex = p22.uint16; + } +}; +var LookupType1$1 = class extends LookupType$1 { + constructor(p22) { + super(p22); + this.deltaGlyphID = p22.int16; + } +}; +var LookupType2$1 = class extends LookupType$1 { + constructor(p22) { + super(p22); + this.sequenceCount = p22.uint16; + this.sequenceOffsets = [...new Array(this.sequenceCount)].map( + (_) => p22.Offset16 + ); + } + getSequence(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.sequenceOffsets[index]; + return new SequenceTable(p22); + } +}; +var SequenceTable = class { + constructor(p22) { + this.glyphCount = p22.uint16; + this.substituteGlyphIDs = [...new Array(this.glyphCount)].map( + (_) => p22.uint16 + ); + } +}; +var LookupType3$1 = class extends LookupType$1 { + constructor(p22) { + super(p22); + this.alternateSetCount = p22.uint16; + this.alternateSetOffsets = [ + ...new Array(this.alternateSetCount) + ].map((_) => p22.Offset16); + } + getAlternateSet(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.alternateSetOffsets[index]; + return new AlternateSetTable(p22); + } +}; +var AlternateSetTable = class { + constructor(p22) { + this.glyphCount = p22.uint16; + this.alternateGlyphIDs = [...new Array(this.glyphCount)].map( + (_) => p22.uint16 + ); + } +}; +var LookupType4$1 = class extends LookupType$1 { + constructor(p22) { + super(p22); + this.ligatureSetCount = p22.uint16; + this.ligatureSetOffsets = [...new Array(this.ligatureSetCount)].map( + (_) => p22.Offset16 + ); + } + getLigatureSet(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.ligatureSetOffsets[index]; + return new LigatureSetTable(p22); + } +}; +var LigatureSetTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.ligatureCount = p22.uint16; + this.ligatureOffsets = [...new Array(this.ligatureCount)].map( + (_) => p22.Offset16 + ); + } + getLigature(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.ligatureOffsets[index]; + return new LigatureTable(p22); + } +}; +var LigatureTable = class { + constructor(p22) { + this.ligatureGlyph = p22.uint16; + this.componentCount = p22.uint16; + this.componentGlyphIDs = [ + ...new Array(this.componentCount - 1) + ].map((_) => p22.uint16); + } +}; +var LookupType5$1 = class extends LookupType$1 { + constructor(p22) { + super(p22); + if (this.substFormat === 1) { + this.subRuleSetCount = p22.uint16; + this.subRuleSetOffsets = [ + ...new Array(this.subRuleSetCount) + ].map((_) => p22.Offset16); + } + if (this.substFormat === 2) { + this.classDefOffset = p22.Offset16; + this.subClassSetCount = p22.uint16; + this.subClassSetOffsets = [ + ...new Array(this.subClassSetCount) + ].map((_) => p22.Offset16); + } + if (this.substFormat === 3) { + undoCoverageOffsetParsing(this); + this.glyphCount = p22.uint16; + this.substitutionCount = p22.uint16; + this.coverageOffsets = [...new Array(this.glyphCount)].map( + (_) => p22.Offset16 + ); + this.substLookupRecords = [ + ...new Array(this.substitutionCount) + ].map((_) => new SubstLookupRecord(p22)); + } + } + getSubRuleSet(index) { + if (this.substFormat !== 1) + throw new Error( + `lookup type 5.${this.substFormat} has no subrule sets.` + ); + let p22 = this.parser; + p22.currentPosition = this.start + this.subRuleSetOffsets[index]; + return new SubRuleSetTable(p22); + } + getSubClassSet(index) { + if (this.substFormat !== 2) + throw new Error( + `lookup type 5.${this.substFormat} has no subclass sets.` + ); + let p22 = this.parser; + p22.currentPosition = this.start + this.subClassSetOffsets[index]; + return new SubClassSetTable(p22); + } + getCoverageTable(index) { + if (this.substFormat !== 3 && !index) + return super.getCoverageTable(); + if (!index) + throw new Error( + `lookup type 5.${this.substFormat} requires an coverage table index.` + ); + let p22 = this.parser; + p22.currentPosition = this.start + this.coverageOffsets[index]; + return new CoverageTable(p22); + } +}; +var SubRuleSetTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.subRuleCount = p22.uint16; + this.subRuleOffsets = [...new Array(this.subRuleCount)].map( + (_) => p22.Offset16 + ); + } + getSubRule(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.subRuleOffsets[index]; + return new SubRuleTable(p22); + } +}; +var SubRuleTable = class { + constructor(p22) { + this.glyphCount = p22.uint16; + this.substitutionCount = p22.uint16; + this.inputSequence = [...new Array(this.glyphCount - 1)].map( + (_) => p22.uint16 + ); + this.substLookupRecords = [ + ...new Array(this.substitutionCount) + ].map((_) => new SubstLookupRecord(p22)); + } +}; +var SubClassSetTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.subClassRuleCount = p22.uint16; + this.subClassRuleOffsets = [ + ...new Array(this.subClassRuleCount) + ].map((_) => p22.Offset16); + } + getSubClass(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.subClassRuleOffsets[index]; + return new SubClassRuleTable(p22); + } +}; +var SubClassRuleTable = class extends SubRuleTable { + constructor(p22) { + super(p22); + } +}; +var LookupType6$1 = class extends LookupType$1 { + constructor(p22) { + super(p22); + if (this.substFormat === 1) { + this.chainSubRuleSetCount = p22.uint16; + this.chainSubRuleSetOffsets = [ + ...new Array(this.chainSubRuleSetCount) + ].map((_) => p22.Offset16); + } + if (this.substFormat === 2) { + this.backtrackClassDefOffset = p22.Offset16; + this.inputClassDefOffset = p22.Offset16; + this.lookaheadClassDefOffset = p22.Offset16; + this.chainSubClassSetCount = p22.uint16; + this.chainSubClassSetOffsets = [ + ...new Array(this.chainSubClassSetCount) + ].map((_) => p22.Offset16); + } + if (this.substFormat === 3) { + undoCoverageOffsetParsing(this); + this.backtrackGlyphCount = p22.uint16; + this.backtrackCoverageOffsets = [ + ...new Array(this.backtrackGlyphCount) + ].map((_) => p22.Offset16); + this.inputGlyphCount = p22.uint16; + this.inputCoverageOffsets = [ + ...new Array(this.inputGlyphCount) + ].map((_) => p22.Offset16); + this.lookaheadGlyphCount = p22.uint16; + this.lookaheadCoverageOffsets = [ + ...new Array(this.lookaheadGlyphCount) + ].map((_) => p22.Offset16); + this.seqLookupCount = p22.uint16; + this.seqLookupRecords = [ + ...new Array(this.substitutionCount) + ].map((_) => new SequenceLookupRecord(p22)); + } + } + getChainSubRuleSet(index) { + if (this.substFormat !== 1) + throw new Error( + `lookup type 6.${this.substFormat} has no chainsubrule sets.` + ); + let p22 = this.parser; + p22.currentPosition = this.start + this.chainSubRuleSetOffsets[index]; + return new ChainSubRuleSetTable(p22); + } + getChainSubClassSet(index) { + if (this.substFormat !== 2) + throw new Error( + `lookup type 6.${this.substFormat} has no chainsubclass sets.` + ); + let p22 = this.parser; + p22.currentPosition = this.start + this.chainSubClassSetOffsets[index]; + return new ChainSubClassSetTable(p22); + } + getCoverageFromOffset(offset) { + if (this.substFormat !== 3) + throw new Error( + `lookup type 6.${this.substFormat} does not use contextual coverage offsets.` + ); + let p22 = this.parser; + p22.currentPosition = this.start + offset; + return new CoverageTable(p22); + } +}; +var ChainSubRuleSetTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.chainSubRuleCount = p22.uint16; + this.chainSubRuleOffsets = [ + ...new Array(this.chainSubRuleCount) + ].map((_) => p22.Offset16); + } + getSubRule(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.chainSubRuleOffsets[index]; + return new ChainSubRuleTable(p22); + } +}; +var ChainSubRuleTable = class { + constructor(p22) { + this.backtrackGlyphCount = p22.uint16; + this.backtrackSequence = [ + ...new Array(this.backtrackGlyphCount) + ].map((_) => p22.uint16); + this.inputGlyphCount = p22.uint16; + this.inputSequence = [...new Array(this.inputGlyphCount - 1)].map( + (_) => p22.uint16 + ); + this.lookaheadGlyphCount = p22.uint16; + this.lookAheadSequence = [ + ...new Array(this.lookAheadGlyphCount) + ].map((_) => p22.uint16); + this.substitutionCount = p22.uint16; + this.substLookupRecords = [...new Array(this.SubstCount)].map( + (_) => new SubstLookupRecord(p22) + ); + } +}; +var ChainSubClassSetTable = class extends ParsedData { + constructor(p22) { + super(p22); + this.chainSubClassRuleCount = p22.uint16; + this.chainSubClassRuleOffsets = [ + ...new Array(this.chainSubClassRuleCount) + ].map((_) => p22.Offset16); + } + getSubClass(index) { + let p22 = this.parser; + p22.currentPosition = this.start + this.chainSubRuleOffsets[index]; + return new ChainSubClassRuleTable(p22); + } +}; +var ChainSubClassRuleTable = class { + constructor(p22) { + this.backtrackGlyphCount = p22.uint16; + this.backtrackSequence = [ + ...new Array(this.backtrackGlyphCount) + ].map((_) => p22.uint16); + this.inputGlyphCount = p22.uint16; + this.inputSequence = [...new Array(this.inputGlyphCount - 1)].map( + (_) => p22.uint16 + ); + this.lookaheadGlyphCount = p22.uint16; + this.lookAheadSequence = [ + ...new Array(this.lookAheadGlyphCount) + ].map((_) => p22.uint16); + this.substitutionCount = p22.uint16; + this.substLookupRecords = [ + ...new Array(this.substitutionCount) + ].map((_) => new SequenceLookupRecord(p22)); + } +}; +var SequenceLookupRecord = class extends ParsedData { + constructor(p22) { + super(p22); + this.sequenceIndex = p22.uint16; + this.lookupListIndex = p22.uint16; + } +}; +var LookupType7$1 = class extends ParsedData { + constructor(p22) { + super(p22); + this.substFormat = p22.uint16; + this.extensionLookupType = p22.uint16; + this.extensionOffset = p22.Offset32; + } +}; +var LookupType8$1 = class extends LookupType$1 { + constructor(p22) { + super(p22); + this.backtrackGlyphCount = p22.uint16; + this.backtrackCoverageOffsets = [ + ...new Array(this.backtrackGlyphCount) + ].map((_) => p22.Offset16); + this.lookaheadGlyphCount = p22.uint16; + this.lookaheadCoverageOffsets = [ + new Array(this.lookaheadGlyphCount) + ].map((_) => p22.Offset16); + this.glyphCount = p22.uint16; + this.substituteGlyphIDs = [...new Array(this.glyphCount)].map( + (_) => p22.uint16 + ); + } +}; +var GSUBtables = { + buildSubtable: function(type, p22) { + const subtable = new [ + void 0, + LookupType1$1, + LookupType2$1, + LookupType3$1, + LookupType4$1, + LookupType5$1, + LookupType6$1, + LookupType7$1, + LookupType8$1 + ][type](p22); + subtable.type = type; + return subtable; + } +}; +var LookupType = class extends ParsedData { + constructor(p22) { + super(p22); + } +}; +var LookupType1 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 1`); + } +}; +var LookupType2 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 2`); + } +}; +var LookupType3 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 3`); + } +}; +var LookupType4 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 4`); + } +}; +var LookupType5 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 5`); + } +}; +var LookupType6 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 6`); + } +}; +var LookupType7 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 7`); + } +}; +var LookupType8 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 8`); + } +}; +var LookupType9 = class extends LookupType { + constructor(p22) { + super(p22); + console.log(`lookup type 9`); + } +}; +var GPOStables = { + buildSubtable: function(type, p22) { + const subtable = new [ + void 0, + LookupType1, + LookupType2, + LookupType3, + LookupType4, + LookupType5, + LookupType6, + LookupType7, + LookupType8, + LookupType9 + ][type](p22); + subtable.type = type; + return subtable; + } +}; +var LookupList = class extends ParsedData { + static EMPTY = { lookupCount: 0, lookups: [] }; + constructor(p22) { + super(p22); + this.lookupCount = p22.uint16; + this.lookups = [...new Array(this.lookupCount)].map( + (_) => p22.Offset16 + ); + } +}; +var LookupTable = class extends ParsedData { + constructor(p22, type) { + super(p22); + this.ctType = type; + this.lookupType = p22.uint16; + this.lookupFlag = p22.uint16; + this.subTableCount = p22.uint16; + this.subtableOffsets = [...new Array(this.subTableCount)].map( + (_) => p22.Offset16 + ); + this.markFilteringSet = p22.uint16; + } + get rightToLeft() { + return this.lookupFlag & true; + } + get ignoreBaseGlyphs() { + return this.lookupFlag & true; + } + get ignoreLigatures() { + return this.lookupFlag & true; + } + get ignoreMarks() { + return this.lookupFlag & true; + } + get useMarkFilteringSet() { + return this.lookupFlag & true; + } + get markAttachmentType() { + return this.lookupFlag & true; + } + getSubTable(index) { + const builder = this.ctType === `GSUB` ? GSUBtables : GPOStables; + this.parser.currentPosition = this.start + this.subtableOffsets[index]; + return builder.buildSubtable(this.lookupType, this.parser); + } +}; +var CommonLayoutTable = class extends SimpleTable { + constructor(dict, dataview, name2) { + const { p: p22, tableStart } = super(dict, dataview, name2); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.scriptListOffset = p22.Offset16; + this.featureListOffset = p22.Offset16; + this.lookupListOffset = p22.Offset16; + if (this.majorVersion === 1 && this.minorVersion === 1) { + this.featureVariationsOffset = p22.Offset32; + } + const no_content = !(this.scriptListOffset || this.featureListOffset || this.lookupListOffset); + lazy$1(this, `scriptList`, () => { + if (no_content) return ScriptList.EMPTY; + p22.currentPosition = tableStart + this.scriptListOffset; + return new ScriptList(p22); + }); + lazy$1(this, `featureList`, () => { + if (no_content) return FeatureList.EMPTY; + p22.currentPosition = tableStart + this.featureListOffset; + return new FeatureList(p22); + }); + lazy$1(this, `lookupList`, () => { + if (no_content) return LookupList.EMPTY; + p22.currentPosition = tableStart + this.lookupListOffset; + return new LookupList(p22); + }); + if (this.featureVariationsOffset) { + lazy$1(this, `featureVariations`, () => { + if (no_content) return FeatureVariations.EMPTY; + p22.currentPosition = tableStart + this.featureVariationsOffset; + return new FeatureVariations(p22); + }); + } + } + getSupportedScripts() { + return this.scriptList.scriptRecords.map((r3) => r3.scriptTag); + } + getScriptTable(scriptTag) { + let record = this.scriptList.scriptRecords.find( + (r3) => r3.scriptTag === scriptTag + ); + this.parser.currentPosition = this.scriptList.start + record.scriptOffset; + let table = new ScriptTable(this.parser); + table.scriptTag = scriptTag; + return table; + } + ensureScriptTable(arg) { + if (typeof arg === "string") { + return this.getScriptTable(arg); + } + return arg; + } + getSupportedLangSys(scriptTable) { + scriptTable = this.ensureScriptTable(scriptTable); + const hasDefault = scriptTable.defaultLangSys !== 0; + const supported = scriptTable.langSysRecords.map( + (l2) => l2.langSysTag + ); + if (hasDefault) supported.unshift(`dflt`); + return supported; + } + getDefaultLangSysTable(scriptTable) { + scriptTable = this.ensureScriptTable(scriptTable); + let offset = scriptTable.defaultLangSys; + if (offset !== 0) { + this.parser.currentPosition = scriptTable.start + offset; + let table = new LangSysTable(this.parser); + table.langSysTag = ``; + table.defaultForScript = scriptTable.scriptTag; + return table; + } + } + getLangSysTable(scriptTable, langSysTag = `dflt`) { + if (langSysTag === `dflt`) + return this.getDefaultLangSysTable(scriptTable); + scriptTable = this.ensureScriptTable(scriptTable); + let record = scriptTable.langSysRecords.find( + (l2) => l2.langSysTag === langSysTag + ); + this.parser.currentPosition = scriptTable.start + record.langSysOffset; + let table = new LangSysTable(this.parser); + table.langSysTag = langSysTag; + return table; + } + getFeatures(langSysTable) { + return langSysTable.featureIndices.map( + (index) => this.getFeature(index) + ); + } + getFeature(indexOrTag) { + let record; + if (parseInt(indexOrTag) == indexOrTag) { + record = this.featureList.featureRecords[indexOrTag]; + } else { + record = this.featureList.featureRecords.find( + (f2) => f2.featureTag === indexOrTag + ); + } + if (!record) return; + this.parser.currentPosition = this.featureList.start + record.featureOffset; + let table = new FeatureTable(this.parser); + table.featureTag = record.featureTag; + return table; + } + getLookups(featureTable) { + return featureTable.lookupListIndices.map( + (index) => this.getLookup(index) + ); + } + getLookup(lookupIndex, type) { + let lookupOffset = this.lookupList.lookups[lookupIndex]; + this.parser.currentPosition = this.lookupList.start + lookupOffset; + return new LookupTable(this.parser, type); + } +}; +var GSUB = class extends CommonLayoutTable { + constructor(dict, dataview) { + super(dict, dataview, `GSUB`); + } + getLookup(lookupIndex) { + return super.getLookup(lookupIndex, `GSUB`); + } +}; +var GSUB$1 = Object.freeze({ __proto__: null, GSUB }); +var GPOS = class extends CommonLayoutTable { + constructor(dict, dataview) { + super(dict, dataview, `GPOS`); + } + getLookup(lookupIndex) { + return super.getLookup(lookupIndex, `GPOS`); + } +}; +var GPOS$1 = Object.freeze({ __proto__: null, GPOS }); +var SVG6 = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.offsetToSVGDocumentList = p22.Offset32; + p22.currentPosition = this.tableStart + this.offsetToSVGDocumentList; + this.documentList = new SVGDocumentList(p22); + } +}; +var SVGDocumentList = class extends ParsedData { + constructor(p22) { + super(p22); + this.numEntries = p22.uint16; + this.documentRecords = [...new Array(this.numEntries)].map( + (_) => new SVGDocumentRecord(p22) + ); + } + getDocument(documentID) { + let record = this.documentRecords[documentID]; + if (!record) return ""; + let offset = this.start + record.svgDocOffset; + this.parser.currentPosition = offset; + return this.parser.readBytes(record.svgDocLength); + } + getDocumentForGlyph(glyphID) { + let id = this.documentRecords.findIndex( + (d2) => d2.startGlyphID <= glyphID && glyphID <= d2.endGlyphID + ); + if (id === -1) return ""; + return this.getDocument(id); + } +}; +var SVGDocumentRecord = class { + constructor(p22) { + this.startGlyphID = p22.uint16; + this.endGlyphID = p22.uint16; + this.svgDocOffset = p22.Offset32; + this.svgDocLength = p22.uint32; + } +}; +var SVG$1 = Object.freeze({ __proto__: null, SVG: SVG6 }); +var fvar = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.axesArrayOffset = p22.Offset16; + p22.uint16; + this.axisCount = p22.uint16; + this.axisSize = p22.uint16; + this.instanceCount = p22.uint16; + this.instanceSize = p22.uint16; + const axisStart = this.tableStart + this.axesArrayOffset; + lazy$1(this, `axes`, () => { + p22.currentPosition = axisStart; + return [...new Array(this.axisCount)].map( + (_) => new VariationAxisRecord(p22) + ); + }); + const instanceStart = axisStart + this.axisCount * this.axisSize; + lazy$1(this, `instances`, () => { + let instances = []; + for (let i2 = 0; i2 < this.instanceCount; i2++) { + p22.currentPosition = instanceStart + i2 * this.instanceSize; + instances.push( + new InstanceRecord(p22, this.axisCount, this.instanceSize) + ); + } + return instances; + }); + } + getSupportedAxes() { + return this.axes.map((a2) => a2.tag); + } + getAxis(name2) { + return this.axes.find((a2) => a2.tag === name2); + } +}; +var VariationAxisRecord = class { + constructor(p22) { + this.tag = p22.tag; + this.minValue = p22.fixed; + this.defaultValue = p22.fixed; + this.maxValue = p22.fixed; + this.flags = p22.flags(16); + this.axisNameID = p22.uint16; + } +}; +var InstanceRecord = class { + constructor(p22, axisCount, size) { + let start = p22.currentPosition; + this.subfamilyNameID = p22.uint16; + p22.uint16; + this.coordinates = [...new Array(axisCount)].map( + (_) => p22.fixed + ); + if (p22.currentPosition - start < size) { + this.postScriptNameID = p22.uint16; + } + } +}; +var fvar$1 = Object.freeze({ __proto__: null, fvar }); +var cvt = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + const n2 = dict.length / 2; + lazy$1( + this, + `items`, + () => [...new Array(n2)].map((_) => p22.fword) + ); + } +}; +var cvt$1 = Object.freeze({ __proto__: null, cvt }); +var fpgm = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + lazy$1( + this, + `instructions`, + () => [...new Array(dict.length)].map((_) => p22.uint8) + ); + } +}; +var fpgm$1 = Object.freeze({ __proto__: null, fpgm }); +var gasp = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.numRanges = p22.uint16; + const getter = () => [...new Array(this.numRanges)].map( + (_) => new GASPRange(p22) + ); + lazy$1(this, `gaspRanges`, getter); + } +}; +var GASPRange = class { + constructor(p22) { + this.rangeMaxPPEM = p22.uint16; + this.rangeGaspBehavior = p22.uint16; + } +}; +var gasp$1 = Object.freeze({ __proto__: null, gasp }); +var glyf = class extends SimpleTable { + constructor(dict, dataview) { + super(dict, dataview); + } + getGlyphData(offset, length) { + this.parser.currentPosition = this.tableStart + offset; + return this.parser.readBytes(length); + } +}; +var glyf$1 = Object.freeze({ __proto__: null, glyf }); +var loca = class extends SimpleTable { + constructor(dict, dataview, tables) { + const { p: p22 } = super(dict, dataview); + const n2 = tables.maxp.numGlyphs + 1; + if (tables.head.indexToLocFormat === 0) { + this.x2 = true; + lazy$1( + this, + `offsets`, + () => [...new Array(n2)].map((_) => p22.Offset16) + ); + } else { + lazy$1( + this, + `offsets`, + () => [...new Array(n2)].map((_) => p22.Offset32) + ); + } + } + getGlyphDataOffsetAndLength(glyphID) { + let offset = this.offsets[glyphID] * this.x2 ? 2 : 1; + let nextOffset = this.offsets[glyphID + 1] * this.x2 ? 2 : 1; + return { offset, length: nextOffset - offset }; + } +}; +var loca$1 = Object.freeze({ __proto__: null, loca }); +var prep = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + lazy$1( + this, + `instructions`, + () => [...new Array(dict.length)].map((_) => p22.uint8) + ); + } +}; +var prep$1 = Object.freeze({ __proto__: null, prep }); +var CFF = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + lazy$1(this, `data`, () => p22.readBytes()); + } +}; +var CFF$1 = Object.freeze({ __proto__: null, CFF }); +var CFF2 = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + lazy$1(this, `data`, () => p22.readBytes()); + } +}; +var CFF2$1 = Object.freeze({ __proto__: null, CFF2 }); +var VORG = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.defaultVertOriginY = p22.int16; + this.numVertOriginYMetrics = p22.uint16; + lazy$1( + this, + `vertORiginYMetrics`, + () => [...new Array(this.numVertOriginYMetrics)].map( + (_) => new VertOriginYMetric(p22) + ) + ); + } +}; +var VertOriginYMetric = class { + constructor(p22) { + this.glyphIndex = p22.uint16; + this.vertOriginY = p22.int16; + } +}; +var VORG$1 = Object.freeze({ __proto__: null, VORG }); +var BitmapSize = class { + constructor(p22) { + this.indexSubTableArrayOffset = p22.Offset32; + this.indexTablesSize = p22.uint32; + this.numberofIndexSubTables = p22.uint32; + this.colorRef = p22.uint32; + this.hori = new SbitLineMetrics(p22); + this.vert = new SbitLineMetrics(p22); + this.startGlyphIndex = p22.uint16; + this.endGlyphIndex = p22.uint16; + this.ppemX = p22.uint8; + this.ppemY = p22.uint8; + this.bitDepth = p22.uint8; + this.flags = p22.int8; + } +}; +var BitmapScale = class { + constructor(p22) { + this.hori = new SbitLineMetrics(p22); + this.vert = new SbitLineMetrics(p22); + this.ppemX = p22.uint8; + this.ppemY = p22.uint8; + this.substitutePpemX = p22.uint8; + this.substitutePpemY = p22.uint8; + } +}; +var SbitLineMetrics = class { + constructor(p22) { + this.ascender = p22.int8; + this.descender = p22.int8; + this.widthMax = p22.uint8; + this.caretSlopeNumerator = p22.int8; + this.caretSlopeDenominator = p22.int8; + this.caretOffset = p22.int8; + this.minOriginSB = p22.int8; + this.minAdvanceSB = p22.int8; + this.maxBeforeBL = p22.int8; + this.minAfterBL = p22.int8; + this.pad1 = p22.int8; + this.pad2 = p22.int8; + } +}; +var EBLC = class extends SimpleTable { + constructor(dict, dataview, name2) { + const { p: p22 } = super(dict, dataview, name2); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.numSizes = p22.uint32; + lazy$1( + this, + `bitMapSizes`, + () => [...new Array(this.numSizes)].map( + (_) => new BitmapSize(p22) + ) + ); + } +}; +var EBLC$1 = Object.freeze({ __proto__: null, EBLC }); +var EBDT = class extends SimpleTable { + constructor(dict, dataview, name2) { + const { p: p22 } = super(dict, dataview, name2); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + } +}; +var EBDT$1 = Object.freeze({ __proto__: null, EBDT }); +var EBSC = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.majorVersion = p22.uint16; + this.minorVersion = p22.uint16; + this.numSizes = p22.uint32; + lazy$1( + this, + `bitmapScales`, + () => [...new Array(this.numSizes)].map( + (_) => new BitmapScale(p22) + ) + ); + } +}; +var EBSC$1 = Object.freeze({ __proto__: null, EBSC }); +var CBLC = class extends EBLC { + constructor(dict, dataview) { + super(dict, dataview, `CBLC`); + } +}; +var CBLC$1 = Object.freeze({ __proto__: null, CBLC }); +var CBDT = class extends EBDT { + constructor(dict, dataview) { + super(dict, dataview, `CBDT`); + } +}; +var CBDT$1 = Object.freeze({ __proto__: null, CBDT }); +var sbix = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.flags = p22.flags(16); + this.numStrikes = p22.uint32; + lazy$1( + this, + `strikeOffsets`, + () => [...new Array(this.numStrikes)].map((_) => p22.Offset32) + ); + } +}; +var sbix$1 = Object.freeze({ __proto__: null, sbix }); +var COLR = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.numBaseGlyphRecords = p22.uint16; + this.baseGlyphRecordsOffset = p22.Offset32; + this.layerRecordsOffset = p22.Offset32; + this.numLayerRecords = p22.uint16; + } + getBaseGlyphRecord(glyphID) { + let start = this.tableStart + this.baseGlyphRecordsOffset; + this.parser.currentPosition = start; + let first = new BaseGlyphRecord(this.parser); + let firstID = first.gID; + let end = this.tableStart + this.layerRecordsOffset - 6; + this.parser.currentPosition = end; + let last = new BaseGlyphRecord(this.parser); + let lastID = last.gID; + if (firstID === glyphID) return first; + if (lastID === glyphID) return last; + while (true) { + if (start === end) break; + let mid = start + (end - start) / 12; + this.parser.currentPosition = mid; + let middle = new BaseGlyphRecord(this.parser); + let midID = middle.gID; + if (midID === glyphID) return middle; + else if (midID > glyphID) { + end = mid; + } else if (midID < glyphID) { + start = mid; + } + } + return false; + } + getLayers(glyphID) { + let record = this.getBaseGlyphRecord(glyphID); + this.parser.currentPosition = this.tableStart + this.layerRecordsOffset + 4 * record.firstLayerIndex; + return [...new Array(record.numLayers)].map( + (_) => new LayerRecord(p) + ); + } +}; +var BaseGlyphRecord = class { + constructor(p22) { + this.gID = p22.uint16; + this.firstLayerIndex = p22.uint16; + this.numLayers = p22.uint16; + } +}; +var LayerRecord = class { + constructor(p22) { + this.gID = p22.uint16; + this.paletteIndex = p22.uint16; + } +}; +var COLR$1 = Object.freeze({ __proto__: null, COLR }); +var CPAL = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.numPaletteEntries = p22.uint16; + const numPalettes = this.numPalettes = p22.uint16; + this.numColorRecords = p22.uint16; + this.offsetFirstColorRecord = p22.Offset32; + this.colorRecordIndices = [...new Array(this.numPalettes)].map( + (_) => p22.uint16 + ); + lazy$1(this, `colorRecords`, () => { + p22.currentPosition = this.tableStart + this.offsetFirstColorRecord; + return [...new Array(this.numColorRecords)].map( + (_) => new ColorRecord(p22) + ); + }); + if (this.version === 1) { + this.offsetPaletteTypeArray = p22.Offset32; + this.offsetPaletteLabelArray = p22.Offset32; + this.offsetPaletteEntryLabelArray = p22.Offset32; + lazy$1(this, `paletteTypeArray`, () => { + p22.currentPosition = this.tableStart + this.offsetPaletteTypeArray; + return new PaletteTypeArray(p22, numPalettes); + }); + lazy$1(this, `paletteLabelArray`, () => { + p22.currentPosition = this.tableStart + this.offsetPaletteLabelArray; + return new PaletteLabelsArray(p22, numPalettes); + }); + lazy$1(this, `paletteEntryLabelArray`, () => { + p22.currentPosition = this.tableStart + this.offsetPaletteEntryLabelArray; + return new PaletteEntryLabelArray(p22, numPalettes); + }); + } + } +}; +var ColorRecord = class { + constructor(p22) { + this.blue = p22.uint8; + this.green = p22.uint8; + this.red = p22.uint8; + this.alpha = p22.uint8; + } +}; +var PaletteTypeArray = class { + constructor(p22, numPalettes) { + this.paletteTypes = [...new Array(numPalettes)].map( + (_) => p22.uint32 + ); + } +}; +var PaletteLabelsArray = class { + constructor(p22, numPalettes) { + this.paletteLabels = [...new Array(numPalettes)].map( + (_) => p22.uint16 + ); + } +}; +var PaletteEntryLabelArray = class { + constructor(p22, numPalettes) { + this.paletteEntryLabels = [...new Array(numPalettes)].map( + (_) => p22.uint16 + ); + } +}; +var CPAL$1 = Object.freeze({ __proto__: null, CPAL }); +var DSIG = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint32; + this.numSignatures = p22.uint16; + this.flags = p22.uint16; + this.signatureRecords = [...new Array(this.numSignatures)].map( + (_) => new SignatureRecord(p22) + ); + } + getData(signatureID) { + const record = this.signatureRecords[signatureID]; + this.parser.currentPosition = this.tableStart + record.offset; + return new SignatureBlockFormat1(this.parser); + } +}; +var SignatureRecord = class { + constructor(p22) { + this.format = p22.uint32; + this.length = p22.uint32; + this.offset = p22.Offset32; + } +}; +var SignatureBlockFormat1 = class { + constructor(p22) { + p22.uint16; + p22.uint16; + this.signatureLength = p22.uint32; + this.signature = p22.readBytes(this.signatureLength); + } +}; +var DSIG$1 = Object.freeze({ __proto__: null, DSIG }); +var hdmx = class extends SimpleTable { + constructor(dict, dataview, tables) { + const { p: p22 } = super(dict, dataview); + const numGlyphs = tables.hmtx.numGlyphs; + this.version = p22.uint16; + this.numRecords = p22.int16; + this.sizeDeviceRecord = p22.int32; + this.records = [...new Array(numRecords)].map( + (_) => new DeviceRecord(p22, numGlyphs) + ); + } +}; +var DeviceRecord = class { + constructor(p22, numGlyphs) { + this.pixelSize = p22.uint8; + this.maxWidth = p22.uint8; + this.widths = p22.readBytes(numGlyphs); + } +}; +var hdmx$1 = Object.freeze({ __proto__: null, hdmx }); +var kern = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.nTables = p22.uint16; + lazy$1(this, `tables`, () => { + let offset = this.tableStart + 4; + const tables = []; + for (let i2 = 0; i2 < this.nTables; i2++) { + p22.currentPosition = offset; + let subtable = new KernSubTable(p22); + tables.push(subtable); + offset += subtable; + } + return tables; + }); + } +}; +var KernSubTable = class { + constructor(p22) { + this.version = p22.uint16; + this.length = p22.uint16; + this.coverage = p22.flags(8); + this.format = p22.uint8; + if (this.format === 0) { + this.nPairs = p22.uint16; + this.searchRange = p22.uint16; + this.entrySelector = p22.uint16; + this.rangeShift = p22.uint16; + lazy$1( + this, + `pairs`, + () => [...new Array(this.nPairs)].map((_) => new Pair(p22)) + ); + } + if (this.format === 2) { + console.warn( + `Kern subtable format 2 is not supported: this parser currently only parses universal table data.` + ); + } + } + get horizontal() { + return this.coverage[0]; + } + get minimum() { + return this.coverage[1]; + } + get crossstream() { + return this.coverage[2]; + } + get override() { + return this.coverage[3]; + } +}; +var Pair = class { + constructor(p22) { + this.left = p22.uint16; + this.right = p22.uint16; + this.value = p22.fword; + } +}; +var kern$1 = Object.freeze({ __proto__: null, kern }); +var LTSH = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.numGlyphs = p22.uint16; + this.yPels = p22.readBytes(this.numGlyphs); + } +}; +var LTSH$1 = Object.freeze({ __proto__: null, LTSH }); +var MERG = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.mergeClassCount = p22.uint16; + this.mergeDataOffset = p22.Offset16; + this.classDefCount = p22.uint16; + this.offsetToClassDefOffsets = p22.Offset16; + lazy$1( + this, + `mergeEntryMatrix`, + () => [...new Array(this.mergeClassCount)].map( + (_) => p22.readBytes(this.mergeClassCount) + ) + ); + console.warn(`Full MERG parsing is currently not supported.`); + console.warn( + `If you need this table parsed, please file an issue, or better yet, a PR.` + ); + } +}; +var MERG$1 = Object.freeze({ __proto__: null, MERG }); +var meta = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint32; + this.flags = p22.uint32; + p22.uint32; + this.dataMapsCount = p22.uint32; + this.dataMaps = [...new Array(this.dataMapsCount)].map( + (_) => new DataMap(this.tableStart, p22) + ); + } +}; +var DataMap = class { + constructor(tableStart, p22) { + this.tableStart = tableStart; + this.parser = p22; + this.tag = p22.tag; + this.dataOffset = p22.Offset32; + this.dataLength = p22.uint32; + } + getData() { + this.parser.currentField = this.tableStart + this.dataOffset; + return this.parser.readBytes(this.dataLength); + } +}; +var meta$1 = Object.freeze({ __proto__: null, meta }); +var PCLT = class extends SimpleTable { + constructor(dict, dataview) { + super(dict, dataview); + console.warn( + `This font uses a PCLT table, which is currently not supported by this parser.` + ); + console.warn( + `If you need this table parsed, please file an issue, or better yet, a PR.` + ); + } +}; +var PCLT$1 = Object.freeze({ __proto__: null, PCLT }); +var VDMX = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.uint16; + this.numRecs = p22.uint16; + this.numRatios = p22.uint16; + this.ratRanges = [...new Array(this.numRatios)].map( + (_) => new RatioRange(p22) + ); + this.offsets = [...new Array(this.numRatios)].map( + (_) => p22.Offset16 + ); + this.VDMXGroups = [...new Array(this.numRecs)].map( + (_) => new VDMXGroup(p22) + ); + } +}; +var RatioRange = class { + constructor(p22) { + this.bCharSet = p22.uint8; + this.xRatio = p22.uint8; + this.yStartRatio = p22.uint8; + this.yEndRatio = p22.uint8; + } +}; +var VDMXGroup = class { + constructor(p22) { + this.recs = p22.uint16; + this.startsz = p22.uint8; + this.endsz = p22.uint8; + this.records = [...new Array(this.recs)].map( + (_) => new vTable(p22) + ); + } +}; +var vTable = class { + constructor(p22) { + this.yPelHeight = p22.uint16; + this.yMax = p22.int16; + this.yMin = p22.int16; + } +}; +var VDMX$1 = Object.freeze({ __proto__: null, VDMX }); +var vhea = class extends SimpleTable { + constructor(dict, dataview) { + const { p: p22 } = super(dict, dataview); + this.version = p22.fixed; + this.ascent = this.vertTypoAscender = p22.int16; + this.descent = this.vertTypoDescender = p22.int16; + this.lineGap = this.vertTypoLineGap = p22.int16; + this.advanceHeightMax = p22.int16; + this.minTopSideBearing = p22.int16; + this.minBottomSideBearing = p22.int16; + this.yMaxExtent = p22.int16; + this.caretSlopeRise = p22.int16; + this.caretSlopeRun = p22.int16; + this.caretOffset = p22.int16; + this.reserved = p22.int16; + this.reserved = p22.int16; + this.reserved = p22.int16; + this.reserved = p22.int16; + this.metricDataFormat = p22.int16; + this.numOfLongVerMetrics = p22.uint16; + p22.verifyLength(); + } +}; +var vhea$1 = Object.freeze({ __proto__: null, vhea }); +var vmtx = class extends SimpleTable { + constructor(dict, dataview, tables) { + super(dict, dataview); + const numOfLongVerMetrics = tables.vhea.numOfLongVerMetrics; + const numGlyphs = tables.maxp.numGlyphs; + const metricsStart = p.currentPosition; + lazy(this, `vMetrics`, () => { + p.currentPosition = metricsStart; + return [...new Array(numOfLongVerMetrics)].map( + (_) => new LongVertMetric(p.uint16, p.int16) + ); + }); + if (numOfLongVerMetrics < numGlyphs) { + const tsbStart = metricsStart + numOfLongVerMetrics * 4; + lazy(this, `topSideBearings`, () => { + p.currentPosition = tsbStart; + return [...new Array(numGlyphs - numOfLongVerMetrics)].map( + (_) => p.int16 + ); + }); + } + } +}; +var LongVertMetric = class { + constructor(h2, b2) { + this.advanceHeight = h2; + this.topSideBearing = b2; + } +}; +var vmtx$1 = Object.freeze({ __proto__: null, vmtx }); + +// packages/global-styles-ui/build-module/font-library/utils/make-families-from-faces.mjs +var import_components29 = __toESM(require_components(), 1); +var { kebabCase: kebabCase2 } = unlock(import_components29.privateApis); +function makeFamiliesFromFaces(fontFaces) { + const fontFamiliesObject = fontFaces.reduce( + (acc, item) => { + if (!acc[item.fontFamily]) { + acc[item.fontFamily] = { + name: item.fontFamily, + fontFamily: item.fontFamily, + slug: kebabCase2(item.fontFamily.toLowerCase()), + fontFace: [] + }; + } + acc[item.fontFamily].fontFace.push(item); + return acc; + }, + {} + ); + return Object.values(fontFamiliesObject); +} + +// packages/global-styles-ui/build-module/font-library/upload-fonts.mjs +var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); +function UploadFonts() { + const { installFonts } = (0, import_element18.useContext)(FontLibraryContext); + const [isUploading, setIsUploading] = (0, import_element18.useState)(false); + const [notice, setNotice] = (0, import_element18.useState)(null); + const handleDropZone = (files) => { + handleFilesUpload(files); + }; + const onFilesUpload = (event) => { + handleFilesUpload(event.target.files); + }; + const handleFilesUpload = async (files) => { + if (!files) { + return; + } + setNotice(null); + setIsUploading(true); + const uniqueFilenames = /* @__PURE__ */ new Set(); + const selectedFiles = [...files]; + let hasInvalidFiles = false; + const checkFilesPromises = selectedFiles.map(async (file) => { + const isFont = await isFontFile(file); + if (!isFont) { + hasInvalidFiles = true; + return null; + } + if (uniqueFilenames.has(file.name)) { + return null; + } + const fileExtension = (((file.name ?? "").split(".") ?? []).pop() ?? "").toLowerCase(); + if (ALLOWED_FILE_EXTENSIONS.includes(fileExtension)) { + uniqueFilenames.add(file.name); + return file; + } + return null; + }); + const allowedFiles = (await Promise.all(checkFilesPromises)).filter((file) => null !== file); + if (allowedFiles.length > 0) { + loadFiles(allowedFiles); + } else { + const message = hasInvalidFiles ? (0, import_i18n16.__)("Sorry, you are not allowed to upload this file type.") : (0, import_i18n16.__)("No fonts found to install."); + setNotice({ + type: "error", + message + }); + setIsUploading(false); + } + }; + const loadFiles = async (files) => { + const fontFacesLoaded = await Promise.all( + files.map(async (fontFile) => { + const fontFaceData = await getFontFaceMetadata(fontFile); + await loadFontFaceInBrowser( + fontFaceData, + fontFaceData.file, + "all" + ); + return fontFaceData; + }) + ); + handleInstall(fontFacesLoaded); + }; + async function isFontFile(file) { + const font2 = new Font("Uploaded Font"); + try { + const buffer = await readFileAsArrayBuffer(file); + await font2.fromDataBuffer(buffer, "font"); + return true; + } catch (error) { + return false; + } + } + async function readFileAsArrayBuffer(file) { + return new Promise((resolve, reject) => { + const reader = new window.FileReader(); + reader.readAsArrayBuffer(file); + reader.onload = () => resolve(reader.result); + reader.onerror = reject; + }); + } + const getFontFaceMetadata = async (fontFile) => { + const buffer = await readFileAsArrayBuffer(fontFile); + const fontObj = new Font("Uploaded Font"); + fontObj.fromDataBuffer(buffer, fontFile.name); + const onloadEvent = await new Promise( + (resolve) => fontObj.onload = resolve + ); + const font2 = onloadEvent.detail.font; + const { name: name2 } = font2.opentype.tables; + const fontName = name2.get(16) || name2.get(1); + const isItalic = name2.get(2).toLowerCase().includes("italic"); + const fontWeight = font2.opentype.tables["OS/2"].usWeightClass || "normal"; + const isVariable = !!font2.opentype.tables.fvar; + const weightAxis = isVariable && font2.opentype.tables.fvar.axes.find( + ({ tag }) => tag === "wght" + ); + const weightRange = weightAxis ? `${weightAxis.minValue} ${weightAxis.maxValue}` : null; + return { + file: fontFile, + fontFamily: fontName, + fontStyle: isItalic ? "italic" : "normal", + fontWeight: weightRange || fontWeight + }; + }; + const handleInstall = async (fontFaces) => { + const fontFamilies = makeFamiliesFromFaces(fontFaces); + try { + await installFonts(fontFamilies); + setNotice({ + type: "success", + message: (0, import_i18n16.__)("Fonts were installed successfully.") + }); + } catch (error) { + const typedError = error; + setNotice({ + type: "error", + message: typedError.message, + errors: typedError?.installationErrors + }); + } + setIsUploading(false); + }; + return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.DropZone, { onFilesDrop: handleDropZone }), + /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_components30.__experimentalVStack, { className: "font-library__local-fonts", justify: "start", children: [ + notice && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( + import_components30.Notice, + { + status: notice.type, + __unstableHTML: true, + onRemove: () => setNotice(null), + children: [ + notice.message, + notice.errors && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("ul", { children: notice.errors.map((error, index) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("li", { children: error }, index)) }) + ] + } + ), + isUploading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "font-library__upload-area", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.ProgressBar, {}) }) }), + !isUploading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components30.FormFileUpload, + { + accept: ALLOWED_FILE_EXTENSIONS.map( + (ext) => `.${ext}` + ).join(","), + multiple: true, + onChange: onFilesUpload, + render: ({ openFileDialog }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components30.Button, + { + __next40pxDefaultSize: true, + className: "font-library__upload-area", + onClick: openFileDialog, + children: (0, import_i18n16.__)("Upload font") + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.__experimentalText, { className: "font-library__upload-area__text", children: (0, import_i18n16.__)( + "Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2." + ) }) + ] }) + ] }); +} +var upload_fonts_default = UploadFonts; + +// packages/global-styles-ui/build-module/font-library/modal.mjs +var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); +var { Tabs } = unlock(import_components31.privateApis); +var DEFAULT_TAB = { + id: "installed-fonts", + title: (0, import_i18n17._x)("Library", "Font library") +}; +var UPLOAD_TAB = { + id: "upload-fonts", + title: (0, import_i18n17._x)("Upload", "noun") +}; + +// packages/global-styles-ui/build-module/font-family-item.mjs +var import_i18n18 = __toESM(require_i18n(), 1); +var import_components32 = __toESM(require_components(), 1); +var import_element19 = __toESM(require_element(), 1); +var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/font-families.mjs +var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/font-sizes/font-sizes-count.mjs +var import_i18n20 = __toESM(require_i18n(), 1); +var import_components34 = __toESM(require_components(), 1); +var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-typography.mjs +var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-typography-element.mjs +var import_i18n22 = __toESM(require_i18n(), 1); +var import_components36 = __toESM(require_components(), 1); +var import_element22 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/typography-panel.mjs +var import_block_editor5 = __toESM(require_block_editor(), 1); +var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); +var { useSettingsForBlockElement: useSettingsForBlockElement4, TypographyPanel: StylesTypographyPanel2 } = unlock(import_block_editor5.privateApis); + +// packages/global-styles-ui/build-module/typography-preview.mjs +var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-typography-element.mjs +var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); +var elements = { + text: { + description: (0, import_i18n22.__)("Manage the fonts used on the site."), + title: (0, import_i18n22.__)("Text") + }, + link: { + description: (0, import_i18n22.__)("Manage the fonts and typography used on the links."), + title: (0, import_i18n22.__)("Links") + }, + heading: { + description: (0, import_i18n22.__)("Manage the fonts and typography used on headings."), + title: (0, import_i18n22.__)("Headings") + }, + caption: { + description: (0, import_i18n22.__)("Manage the fonts and typography used on captions."), + title: (0, import_i18n22.__)("Captions") + }, + button: { + description: (0, import_i18n22.__)("Manage the fonts and typography used on buttons."), + title: (0, import_i18n22.__)("Buttons") + } +}; + +// packages/global-styles-ui/build-module/screen-colors.mjs +var import_i18n24 = __toESM(require_i18n(), 1); +var import_components39 = __toESM(require_components(), 1); +var import_block_editor6 = __toESM(require_block_editor(), 1); + +// packages/global-styles-ui/build-module/palette.mjs +var import_components38 = __toESM(require_components(), 1); +var import_i18n23 = __toESM(require_i18n(), 1); +var import_element23 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/color-indicator-wrapper.mjs +var import_components37 = __toESM(require_components(), 1); +var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/palette.mjs +var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-colors.mjs +var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); +var { useSettingsForBlockElement: useSettingsForBlockElement5, ColorPanel: StylesColorPanel2 } = unlock( + import_block_editor6.privateApis +); + +// packages/global-styles-ui/build-module/screen-color-palette.mjs +var import_i18n27 = __toESM(require_i18n(), 1); +var import_components44 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/color-palette-panel.mjs +var import_compose4 = __toESM(require_compose(), 1); +var import_components42 = __toESM(require_components(), 1); +var import_i18n25 = __toESM(require_i18n(), 1); + +// packages/global-styles-ui/build-module/variations/variations-color.mjs +var import_components41 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/preview-colors.mjs +var import_components40 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/preset-colors.mjs +var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); +function PresetColors() { + const { paletteColors } = useStylesPreviewColors(); + return paletteColors.slice(0, 4).map(({ slug, color }, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + "div", + { + style: { + flexGrow: 1, + height: "100%", + background: color + } + }, + `${slug}-${index}` + )); +} + +// packages/global-styles-ui/build-module/preview-colors.mjs +var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); +var firstFrameVariants2 = { + start: { + scale: 1, + opacity: 1 + }, + hover: { + scale: 0, + opacity: 0 + } +}; +var StylesPreviewColors = ({ + label, + isFocused, + withHoverView +}) => { + return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + preview_wrapper_default, + { + label, + isFocused, + withHoverView, + children: ({ key }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + import_components40.__unstableMotion.div, + { + variants: firstFrameVariants2, + style: { + height: "100%", + overflow: "hidden" + }, + children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + import_components40.__experimentalHStack, + { + spacing: 0, + justify: "center", + style: { + height: "100%", + overflow: "hidden" + }, + children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PresetColors, {}) + } + ) + }, + key + ) + } + ); +}; +var preview_colors_default = StylesPreviewColors; + +// packages/global-styles-ui/build-module/variations/variations-color.mjs +var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); +var propertiesToFilter2 = ["color"]; +function ColorVariations({ + title, + gap = 2 +}) { + const colorVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter2); + if (colorVariations?.length <= 1) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_components41.__experimentalVStack, { spacing: 3, children: [ + title && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Subtitle, { level: 3, children: title }), + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_components41.__experimentalGrid, { gap, children: colorVariations.map((variation, index) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + Variation, + { + variation, + isPill: true, + properties: propertiesToFilter2, + showTooltip: true, + children: () => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(preview_colors_default, {}) + }, + index + )) }) + ] }); +} + +// packages/global-styles-ui/build-module/color-palette-panel.mjs +var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/gradients-palette-panel.mjs +var import_compose5 = __toESM(require_compose(), 1); +var import_components43 = __toESM(require_components(), 1); +var import_i18n26 = __toESM(require_i18n(), 1); +var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-color-palette.mjs +var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); +var { Tabs: Tabs2 } = unlock(import_components44.privateApis); + +// packages/global-styles-ui/build-module/screen-background.mjs +var import_i18n28 = __toESM(require_i18n(), 1); +var import_block_editor8 = __toESM(require_block_editor(), 1); +var import_components45 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/background-panel.mjs +var import_block_editor7 = __toESM(require_block_editor(), 1); +var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); +var { BackgroundPanel: StylesBackgroundPanel2 } = unlock( + import_block_editor7.privateApis +); + +// packages/global-styles-ui/build-module/screen-background.mjs +var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); +var { useHasBackgroundPanel: useHasBackgroundPanel3 } = unlock(import_block_editor8.privateApis); + +// packages/global-styles-ui/build-module/shadows-panel.mjs +var import_components47 = __toESM(require_components(), 1); +var import_i18n30 = __toESM(require_i18n(), 1); +var import_element24 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/confirm-reset-shadow-dialog.mjs +var import_components46 = __toESM(require_components(), 1); +var import_i18n29 = __toESM(require_i18n(), 1); +var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/shadows-panel.mjs +var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); +var { Menu } = unlock(import_components47.privateApis); + +// packages/global-styles-ui/build-module/shadows-edit-panel.mjs +var import_components48 = __toESM(require_components(), 1); +var import_i18n31 = __toESM(require_i18n(), 1); +var import_element25 = __toESM(require_element(), 1); +var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu2 } = unlock(import_components48.privateApis); +var customShadowMenuItems = [ + { + label: (0, import_i18n31.__)("Rename"), + action: "rename" + }, + { + label: (0, import_i18n31.__)("Delete"), + action: "delete" + } +]; +var presetShadowMenuItems = [ + { + label: (0, import_i18n31.__)("Reset"), + action: "reset" + } +]; + +// packages/global-styles-ui/build-module/screen-shadows.mjs +var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-layout.mjs +var import_i18n32 = __toESM(require_i18n(), 1); +var import_block_editor10 = __toESM(require_block_editor(), 1); + +// packages/global-styles-ui/build-module/dimensions-panel.mjs +var import_block_editor9 = __toESM(require_block_editor(), 1); +var import_element26 = __toESM(require_element(), 1); +var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); +var { useSettingsForBlockElement: useSettingsForBlockElement6, DimensionsPanel: StylesDimensionsPanel2 } = unlock(import_block_editor9.privateApis); + +// packages/global-styles-ui/build-module/screen-layout.mjs +var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); +var { useHasDimensionsPanel: useHasDimensionsPanel4, useSettingsForBlockElement: useSettingsForBlockElement7 } = unlock( + import_block_editor10.privateApis +); + +// packages/global-styles-ui/build-module/screen-style-variations.mjs +var import_components51 = __toESM(require_components(), 1); +var import_i18n35 = __toESM(require_i18n(), 1); + +// packages/global-styles-ui/build-module/style-variations-content.mjs +var import_i18n34 = __toESM(require_i18n(), 1); +var import_components50 = __toESM(require_components(), 1); + +// packages/global-styles-ui/build-module/style-variations-container.mjs +var import_core_data9 = __toESM(require_core_data(), 1); +var import_data9 = __toESM(require_data(), 1); +var import_element27 = __toESM(require_element(), 1); +var import_components49 = __toESM(require_components(), 1); +var import_i18n33 = __toESM(require_i18n(), 1); +var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); +function StyleVariationsContainer({ + gap = 2 +}) { + const { user } = (0, import_element27.useContext)(GlobalStylesContext); + const userStyles = user?.styles; + const variations = (0, import_data9.useSelect)((select) => { + const result = select( + import_core_data9.store + ).__experimentalGetCurrentThemeGlobalStylesVariations(); + return Array.isArray(result) ? result : void 0; + }, []); + const fullStyleVariations = variations?.filter( + (variation) => { + return !isVariationWithProperties(variation, ["color"]) && !isVariationWithProperties(variation, [ + "typography", + "spacing" + ]); + } + ); + const themeVariations = (0, import_element27.useMemo)(() => { + const withEmptyVariation = [ + { + title: (0, import_i18n33.__)("Default"), + settings: {}, + styles: {} + }, + ...fullStyleVariations ?? [] + ]; + return [ + ...withEmptyVariation.map((variation) => { + const blockStyles = variation?.styles?.blocks ? { ...variation.styles.blocks } : {}; + if (userStyles?.blocks) { + Object.keys(userStyles.blocks).forEach((blockName) => { + if (userStyles.blocks?.[blockName]?.css) { + const variationBlockStyles = blockStyles[blockName] || {}; + const customCSS = { + css: `${blockStyles[blockName]?.css || ""} ${userStyles.blocks?.[blockName]?.css?.trim() || ""}` + }; + blockStyles[blockName] = { + ...variationBlockStyles, + ...customCSS + }; + } + }); + } + const css = userStyles?.css || variation.styles?.css ? { + css: `${variation.styles?.css || ""} ${userStyles?.css || ""}` + } : {}; + const blocks = Object.keys(blockStyles).length > 0 ? { blocks: blockStyles } : {}; + const styles = { + ...variation.styles, + ...css, + ...blocks + }; + return { + ...variation, + settings: variation.settings ?? {}, + styles + }; + }) + ]; + }, [fullStyleVariations, userStyles?.blocks, userStyles?.css]); + if (!fullStyleVariations || fullStyleVariations.length < 1) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + import_components49.__experimentalGrid, + { + columns: 2, + className: "global-styles-ui-style-variations-container", + gap, + children: themeVariations.map( + (variation, index) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Variation, { variation, children: (isFocused) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + preview_styles_default, + { + label: variation?.title, + withHoverView: true, + isFocused, + variation + } + ) }, index) + ) + } + ); +} +var style_variations_container_default = StyleVariationsContainer; + +// packages/global-styles-ui/build-module/style-variations-content.mjs +var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-style-variations.mjs +var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-css.mjs +var import_i18n36 = __toESM(require_i18n(), 1); +var import_components52 = __toESM(require_components(), 1); +var import_block_editor11 = __toESM(require_block_editor(), 1); +var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); +var { AdvancedPanel: StylesAdvancedPanel2 } = unlock(import_block_editor11.privateApis); + +// packages/global-styles-ui/build-module/screen-revisions/index.mjs +var import_i18n39 = __toESM(require_i18n(), 1); +var import_components55 = __toESM(require_components(), 1); +var import_element29 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/screen-revisions/use-global-styles-revisions.mjs +var import_data10 = __toESM(require_data(), 1); +var import_core_data10 = __toESM(require_core_data(), 1); +var import_element28 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/screen-revisions/revisions-buttons.mjs +var import_i18n37 = __toESM(require_i18n(), 1); +var import_components53 = __toESM(require_components(), 1); +var import_date = __toESM(require_date(), 1); +var import_core_data11 = __toESM(require_core_data(), 1); +var import_data11 = __toESM(require_data(), 1); +var import_keycodes2 = __toESM(require_keycodes(), 1); +var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); +var DAY_IN_MILLISECONDS = 60 * 60 * 1e3 * 24; + +// packages/global-styles-ui/build-module/pagination/index.mjs +var import_components54 = __toESM(require_components(), 1); +var import_i18n38 = __toESM(require_i18n(), 1); +var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/screen-revisions/index.mjs +var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/font-sizes/font-sizes.mjs +var import_i18n41 = __toESM(require_i18n(), 1); +var import_components57 = __toESM(require_components(), 1); +var import_element30 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/font-sizes/confirm-reset-font-sizes-dialog.mjs +var import_components56 = __toESM(require_components(), 1); +var import_i18n40 = __toESM(require_i18n(), 1); +var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/font-sizes/font-sizes.mjs +var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu3 } = unlock(import_components57.privateApis); + +// packages/global-styles-ui/build-module/font-sizes/font-size.mjs +var import_i18n45 = __toESM(require_i18n(), 1); +var import_components61 = __toESM(require_components(), 1); +var import_element32 = __toESM(require_element(), 1); + +// packages/global-styles-ui/build-module/font-sizes/font-size-preview.mjs +var import_block_editor12 = __toESM(require_block_editor(), 1); +var import_i18n42 = __toESM(require_i18n(), 1); +var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/font-sizes/confirm-delete-font-size-dialog.mjs +var import_components58 = __toESM(require_components(), 1); +var import_i18n43 = __toESM(require_i18n(), 1); +var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/font-sizes/rename-font-size-dialog.mjs +var import_components59 = __toESM(require_components(), 1); +var import_i18n44 = __toESM(require_i18n(), 1); +var import_element31 = __toESM(require_element(), 1); +var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/size-control/index.mjs +var import_components60 = __toESM(require_components(), 1); +var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/font-sizes/font-size.mjs +var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu4 } = unlock(import_components61.privateApis); + +// packages/global-styles-ui/build-module/global-styles-ui.mjs +var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); + +// packages/global-styles-ui/build-module/with-global-styles-provider.mjs +var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); +function withGlobalStylesProvider(Component) { + return function WrappedComponent({ + value, + baseValue, + onChange, + ...props + }) { + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( + GlobalStylesProvider, + { + value, + baseValue, + onChange, + children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Component, { ...props }) + } + ); + }; +} + +// packages/global-styles-ui/build-module/style-variations.mjs +var StyleVariations = withGlobalStylesProvider(style_variations_container_default); + +// packages/global-styles-ui/build-module/color-variations.mjs +var ColorVariations2 = withGlobalStylesProvider(ColorVariations); + +// packages/global-styles-ui/build-module/typography-variations.mjs +var TypographyVariations2 = withGlobalStylesProvider(TypographyVariations); + +// packages/global-styles-ui/build-module/font-library/font-library.mjs +var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); +function FontLibrary({ + value, + baseValue, + onChange, + activeTab = "installed-fonts" +}) { + let content; + switch (activeTab) { + case "upload-fonts": + content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(upload_fonts_default, {}); + break; + case "installed-fonts": + content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(installed_fonts_default, {}); + break; + default: + content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(font_collection_default, { slug: activeTab }); + } + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + GlobalStylesProvider, + { + value, + baseValue, + onChange, + children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(context_default, { children: content }) + } + ); +} + +// routes/font-list/lock-unlock.ts +var import_private_apis2 = __toESM(require_private_apis()); +var { unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/font-list-route" +); + +// routes/font-list/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='89af99528f']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "89af99528f"); + style.appendChild(document.createTextNode('@media (min-width:782px){.font-library-modal.font-library-modal{width:65vw}}.font-library-modal .components-modal__header{border-bottom:none}.font-library-modal .components-modal__content{margin-bottom:90px;padding:0}.font-library-modal .font-library__subtitle{font-size:11px;font-weight:499;text-transform:uppercase}.font-library-modal__tab-panel{height:calc(100% - 50px)}.font-library__tabpanel-layout{display:flex;flex-direction:column;height:100%}.font-library__tabpanel-layout>div{flex-grow:1}.font-library__tabpanel-layout .font-library__loading{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;left:0;padding-top:124px;position:absolute;top:0;width:100%}.font-library__footer,.font-library__tabpanel-layout .components-navigator-screen{padding:24px;width:100%}.font-library__footer{background-color:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;flex-grow:0!important;flex-shrink:0;height:90px;position:absolute}.font-library__page-selection{font-size:11px;font-weight:499;text-transform:uppercase}@media (min-width:600px){.font-library__page-selection .font-library__page-selection-trigger{font-size:11px!important;font-weight:499}}.font-library__fonts-title{font-size:11px;font-weight:600;margin-bottom:0;margin-top:0;text-transform:uppercase}.font-library__fonts-list{list-style:none;margin-bottom:0;margin-top:0;padding:0}.font-library__fonts-list-item{margin-bottom:0}.font-library__font-card{border:1px solid #ddd;box-sizing:border-box;height:auto!important;margin-top:-1px;padding:16px;width:100%}.font-library__font-card:hover{background-color:#f0f0f0}.font-library__font-card:focus{position:relative}.font-library__font-card .font-library__font-card__name{font-weight:700}.font-library__font-card .font-library__font-card__count{color:#757575}.font-library__font-card .font-library__font-variant_demo-image{display:block;height:24px;width:auto}.font-library__font-card .font-library__font-variant_demo-text{flex-shrink:0;white-space:nowrap}@media not (prefers-reduced-motion){.font-library__font-card .font-library__font-variant_demo-text{transition:opacity .3s ease-in-out}}.font-library-modal__tablist-container{background:#fff;border-bottom:1px solid #ddd;position:sticky;top:0;z-index:1}.font-library__upload-area{align-items:center;display:flex;height:256px!important;justify-content:center;width:100%}button.font-library__upload-area{background-color:#f0f0f0}.font-library__local-fonts{margin:24px auto;width:80%}.font-library__local-fonts .font-library__upload-area__text{color:#757575}.font-library__google-fonts-confirm{align-items:center;display:flex;justify-content:center;margin-top:64px}.font-library__google-fonts-confirm p{line-height:1.4}.font-library__google-fonts-confirm h2{font-size:1.2rem;font-weight:400}.font-library__google-fonts-confirm .components-card{padding:16px;width:400px}.font-library__google-fonts-confirm .components-button{justify-content:center;width:100%}.font-library__select-all{padding:16px 16px 16px 17px}.font-library__select-all .components-checkbox-control__label{padding-left:16px}.global-styles-ui-pagination .components-button.is-tertiary{height:32px;justify-content:center;width:32px}.global-styles-ui-screen-revisions__revisions-list{flex-grow:1;list-style:none;margin:0 16px 16px}.global-styles-ui-screen-revisions__revisions-list li{margin-bottom:0}.global-styles-ui-screen-revisions__revision-item{cursor:pointer;display:flex;flex-direction:column;position:relative}.global-styles-ui-screen-revisions__revision-item[role=option]:active,.global-styles-ui-screen-revisions__revision-item[role=option]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.global-styles-ui-screen-revisions__revision-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.global-styles-ui-screen-revisions__revision-item:hover .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item:after,.global-styles-ui-screen-revisions__revision-item:before{content:"\\a";display:block;position:absolute}.global-styles-ui-screen-revisions__revision-item:before{background:#ddd;border:4px solid #0000;border-radius:50%;height:8px;left:17px;top:18px;transform:translate(-50%,-50%);width:8px;z-index:1}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:2px;color:var(--wp-admin-theme-color);outline:3px solid #0000;outline-offset:-2px}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]:before{background:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__changes>li,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__meta{color:#1e1e1e}.global-styles-ui-screen-revisions__revision-item:after{border:.5px solid #ddd;height:100%;left:16px;top:0;width:0}.global-styles-ui-screen-revisions__revision-item:first-child:after{top:18px}.global-styles-ui-screen-revisions__revision-item:last-child:after{height:18px}.global-styles-ui-screen-revisions__revision-item-wrapper{display:block;padding:12px 12px 4px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__apply-button.is-primary{align-self:flex-start;margin:4px 12px 12px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__changes,.global-styles-ui-screen-revisions__meta{color:#757575;font-size:12px}.global-styles-ui-screen-revisions__description{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.global-styles-ui-screen-revisions__description .global-styles-ui-screen-revisions__date{font-size:12px;font-weight:600;text-transform:uppercase}.global-styles-ui-screen-revisions__meta{align-items:flex-start;display:flex;justify-content:start;margin-bottom:4px;text-align:left;width:100%}.global-styles-ui-screen-revisions__meta img{border-radius:100%;height:16px;margin-right:8px;width:16px}.global-styles-ui-screen-revisions__loading{margin:24px auto!important}.global-styles-ui-screen-revisions__changes{line-height:1.4;list-style:disc;margin-left:12px;text-align:left}.global-styles-ui-screen-revisions__changes li{margin-bottom:4px}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination{gap:2px;justify-content:space-between}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .edit-site-pagination__total{height:1px;left:-1000px;margin:-1px;overflow:hidden;position:absolute}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-text{font-size:12px;will-change:opacity}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary{color:#1e1e1e}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary:disabled,.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{color:#949494}.global-styles-ui-screen-revisions__footer{background:#fff;border-top:1px solid #ddd;bottom:0;height:56px;min-width:100%;padding:12px;position:sticky;z-index:1}.global-styles-ui-variations_item{box-sizing:border-box;cursor:pointer}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{border-radius:2px;outline:1px solid #0000001a;outline-offset:-1px;overflow:hidden;position:relative}@media not (prefers-reduced-motion){.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{transition:outline .1s linear}}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill{height:32px}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill .block-editor-iframe__scale-container{overflow:hidden}.global-styles-ui-variations_item:not(.is-active):hover .global-styles-ui-variations_item-preview{outline-color:#0000004d}.global-styles-ui-variations_item.is-active .global-styles-ui-variations_item-preview,.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:#1e1e1e;outline-offset:1px;outline-width:var(--wp-admin-border-width-focus)}.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.global-styles-ui-preview{align-items:center;cursor:pointer;display:flex;justify-content:center;line-height:1}.global-styles-ui-preview__wrapper{display:block;max-width:100%;width:100%}.global-styles-ui-typography-preview{align-items:center;background:#f0f0f0;border-radius:2px;display:flex;justify-content:center;margin-bottom:20px;min-height:100px;overflow:hidden}.global-styles-ui-font-size__item{line-break:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.global-styles-ui-font-size__item-value{color:#757575}.global-styles-ui-screen-typography__indicator{align-items:center;border-radius:2px;display:flex!important;font-size:14px;height:24px;justify-content:center;width:24px}.global-styles-ui-block-types-search{margin-bottom:10px;padding:0 16px}.global-styles-ui-screen-typography__font-variants-count{color:#757575}.global-styles-ui-font-families__manage-fonts{justify-content:center}.global-styles-ui-screen .color-block-support-panel{border-top:none;padding-left:0;padding-right:0;padding-top:0;row-gap:12px}.global-styles-ui-header{margin-bottom:0!important}.global-styles-ui-subtitle{font-size:11px!important;font-weight:499!important;margin-bottom:0!important;text-transform:uppercase}.global-styles-ui-section-title{color:#2f2f2f;font-weight:600;line-height:1.2;margin:0;padding:16px 16px 0}.global-styles-ui-icon-with-current-color{fill:currentColor}.global-styles-ui__color-indicator-wrapper{flex-shrink:0;height:24px}.global-styles-ui__shadows-panel__options-container,.global-styles-ui__typography-panel__options-container{height:24px}.global-styles-ui__block-preview-panel{border:1px solid #ddd;border-radius:2px;overflow:hidden;position:relative;width:100%}.global-styles-ui__shadow-preview-panel{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,8px 8px;background-size:16px 16px;border:1px solid #ddd;border-radius:2px;height:144px;overflow:auto}.global-styles-ui__shadow-preview-panel .global-styles-ui__shadow-preview-block{background-color:#fff;border:1px solid #ddd;border-radius:2px;height:60px;width:60%}.global-styles-ui__shadow-editor__dropdown-content{width:280px}.global-styles-ui__shadow-editor-panel{margin-bottom:4px}.global-styles-ui__shadow-editor__dropdown{position:relative;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle{border-radius:inherit;height:auto;padding-bottom:8px;padding-top:8px;text-align:left;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.global-styles-ui__shadow-editor__remove-button{opacity:0;position:absolute;right:8px;top:8px}.global-styles-ui__shadow-editor__remove-button.global-styles-ui__shadow-editor__remove-button{border:none}.global-styles-ui__shadow-editor__dropdown-toggle:hover+.global-styles-ui__shadow-editor__remove-button,.global-styles-ui__shadow-editor__remove-button:focus,.global-styles-ui__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.global-styles-ui__shadow-editor__remove-button{opacity:1}}.global-styles-ui-screen-css{display:flex;flex:1 1 auto;flex-direction:column;margin:16px}.global-styles-ui-screen-css .components-v-stack{flex:1 1 auto}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{display:flex;flex:1 1 auto;flex-direction:column}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{direction:ltr;flex:1 1 auto}.global-styles-ui-screen-css-help-link{display:inline-block;margin-top:8px}.global-styles-ui-screen-variations{border-top:1px solid #ddd;margin-top:16px}.global-styles-ui-screen-variations>*{margin:24px 16px}.global-styles-ui-sidebar__navigator-provider{height:100%}.global-styles-ui-sidebar__navigator-screen{display:flex;flex-direction:column;height:100%}.global-styles-ui-sidebar__navigator-screen .single-column{grid-column:span 1}.global-styles-ui-screen-root.global-styles-ui-screen-root,.global-styles-ui-screen-style-variations.global-styles-ui-screen-style-variations{background:unset;color:inherit}.global-styles-ui-sidebar__panel .block-editor-block-icon svg{fill:currentColor}.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile,.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile .global-styles-ui-screen-root__active-style-tile-preview{border-radius:2px}.global-styles-ui-screen-root__active-style-tile-preview{clip-path:border-box}.global-styles-ui-color-palette-panel,.global-styles-ui-gradient-palette-panel{padding:16px}.font-library-page__tablist{border-bottom:1px solid #f0f0f0;padding:0 24px}.font-library-page__tab-panel{flex-grow:1;max-height:calc(100% - 110px);overflow:auto}.admin-ui-page:has(.font-library__footer) .font-library-page__tab-panel{max-height:calc(100% - 198px)}')); + document.head.appendChild(style); +} + +// routes/font-list/stage.tsx +var { Tabs: Tabs3 } = unlock2(import_components63.privateApis); +var { useGlobalStyles } = unlock2(import_editor.privateApis); +function FontLibraryPage() { + const { records: collections = [] } = (0, import_core_data12.useEntityRecords)("root", "fontCollection", { + _fields: "slug,name,description" + }); + const [activeTab, setActiveTab] = (0, import_element34.useState)("installed-fonts"); + const { base, user, setUser, isReady } = useGlobalStyles(); + const canUserCreate = (0, import_data13.useSelect)((select) => { + return select(import_core_data12.store).canUser("create", { + kind: "postType", + name: "wp_font_family" + }); + }, []); + if (!isReady) { + return null; + } + const tabs = [ + { + id: "installed-fonts", + title: (0, import_i18n46.__)("Library") + } + ]; + if (canUserCreate) { + tabs.push({ + id: "upload-fonts", + title: (0, import_i18n46.__)("Upload") + }); + tabs.push( + ...(collections || []).map(({ slug, name: name2 }) => ({ + id: slug, + title: collections && collections.length === 1 && slug === "google-fonts" ? (0, import_i18n46.__)("Install Fonts") : name2 + })) + ); + } + return /* @__PURE__ */ React.createElement(page_default, { title: (0, import_i18n46.__)("Fonts") }, /* @__PURE__ */ React.createElement( + Tabs3, + { + selectedTabId: activeTab, + onSelect: (tabId) => setActiveTab(tabId) + }, + /* @__PURE__ */ React.createElement("div", { className: "font-library-page__tablist" }, /* @__PURE__ */ React.createElement(Tabs3.TabList, null, tabs.map(({ id, title }) => /* @__PURE__ */ React.createElement(Tabs3.Tab, { key: id, tabId: id }, title)))), + tabs.map(({ id }) => /* @__PURE__ */ React.createElement( + Tabs3.TabPanel, + { + key: id, + tabId: id, + focusable: false, + className: "font-library-page__tab-panel" + }, + /* @__PURE__ */ React.createElement( + FontLibrary, + { + value: user, + baseValue: base, + onChange: setUser, + activeTab: id + } + ) + )) + )); +} +function Stage() { + return /* @__PURE__ */ React.createElement(FontLibraryPage, null); +} +var stage = Stage; +export { + stage +}; +/*! Bundled license information: + +is-plain-object/dist/is-plain-object.mjs: + (*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + *) +*/ diff --git a/src/wp-includes/build/routes/font-list/content.min.asset.php b/src/wp-includes/build/routes/font-list/content.min.asset.php new file mode 100644 index 0000000000000..0169ffb623533 --- /dev/null +++ b/src/wp-includes/build/routes/font-list/content.min.asset.php @@ -0,0 +1 @@ + array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-style-engine'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'f79a9512c7bbd4f450bc'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/font-list/content.min.js b/src/wp-includes/build/routes/font-list/content.min.js new file mode 100644 index 0000000000000..f50153acef8e0 --- /dev/null +++ b/src/wp-includes/build/routes/font-list/content.min.js @@ -0,0 +1,19 @@ +var vu=Object.create;var jn=Object.defineProperty;var bu=Object.getOwnPropertyDescriptor;var wu=Object.getOwnPropertyNames;var Su=Object.getPrototypeOf,xu=Object.prototype.hasOwnProperty;var ue=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var qt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Cu=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of wu(e))!xu.call(t,s)&&s!==r&&jn(t,s,{get:()=>e[s],enumerable:!(o=bu(e,s))||o.enumerable});return t};var u=(t,e,r)=>(r=t!=null?vu(Su(t)):{},Cu(e||!t||!t.__esModule?jn(r,"default",{value:t,enumerable:!0}):r,t));var ut=qt((ag,Un)=>{Un.exports=window.wp.i18n});var Y=qt((ig,Hn)=>{Hn.exports=window.wp.components});var z=qt((lg,Wn)=>{Wn.exports=window.ReactJSXRuntime});var vt=qt((fg,Zn)=>{Zn.exports=window.wp.element});var sa=qt((Cg,oa)=>{oa.exports=window.wp.editor});var be=qt((Fg,na)=>{na.exports=window.wp.coreData});var fe=qt((kg,aa)=>{aa.exports=window.wp.data});var _r=qt((Og,ia)=>{ia.exports=window.wp.blocks});var ce=qt((Tg,la)=>{la.exports=window.wp.blockEditor});var ur=qt((_g,ua)=>{ua.exports=window.wp.compose});var ca=qt((Ig,fa)=>{fa.exports=window.wp.styleEngine});var ga=qt((qg,ha)=>{"use strict";ha.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var o,s,a;if(Array.isArray(e)){if(o=e.length,o!=r.length)return!1;for(s=o;s--!==0;)if(!t(e[s],r[s]))return!1;return!0}if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(s of e.entries())if(!r.has(s[0]))return!1;for(s of e.entries())if(!t(s[1],r.get(s[0])))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(s of e.entries())if(!r.has(s[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if(o=e.length,o!=r.length)return!1;for(s=o;s--!==0;)if(e[s]!==r[s])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(a=Object.keys(e),o=a.length,o!==Object.keys(r).length)return!1;for(s=o;s--!==0;)if(!Object.prototype.hasOwnProperty.call(r,a[s]))return!1;for(s=o;s--!==0;){var n=a[s];if(!t(e[n],r[n]))return!1}return!0}return e!==e&&r!==r}});var wa=qt((Yg,ba)=>{"use strict";var Du=function(e){return Nu(e)&&!zu(e)};function Nu(t){return!!t&&typeof t=="object"}function zu(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||ju(t)}var Mu=typeof Symbol=="function"&&Symbol.for,Gu=Mu?Symbol.for("react.element"):60103;function ju(t){return t.$$typeof===Gu}function Uu(t){return Array.isArray(t)?[]:{}}function Qr(t,e){return e.clone!==!1&&e.isMergeableObject(t)?Ar(Uu(t),t,e):t}function Hu(t,e,r){return t.concat(e).map(function(o){return Qr(o,r)})}function Wu(t,e){if(!e.customMerge)return Ar;var r=e.customMerge(t);return typeof r=="function"?r:Ar}function qu(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}function ya(t){return Object.keys(t).concat(qu(t))}function va(t,e){try{return e in t}catch{return!1}}function Zu(t,e){return va(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function Yu(t,e,r){var o={};return r.isMergeableObject(t)&&ya(t).forEach(function(s){o[s]=Qr(t[s],r)}),ya(e).forEach(function(s){Zu(t,s)||(va(t,s)&&r.isMergeableObject(e[s])?o[s]=Wu(s,r)(t[s],e[s],r):o[s]=Qr(e[s],r))}),o}function Ar(t,e,r){r=r||{},r.arrayMerge=r.arrayMerge||Hu,r.isMergeableObject=r.isMergeableObject||Du,r.cloneUnlessOtherwiseSpecified=Qr;var o=Array.isArray(e),s=Array.isArray(t),a=o===s;return a?o?r.arrayMerge(t,e,r):Yu(t,e,r):Qr(e,r)}Ar.all=function(e,r){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(o,s){return Ar(o,s,r)},{})};var Xu=Ar;ba.exports=Xu});var Rr=qt((cy,Da)=>{Da.exports=window.wp.primitives});var Gs=qt((My,Ha)=>{Ha.exports=window.wp.privateApis});var Js=qt((b1,bi)=>{bi.exports=window.wp.keycodes});var Fi=qt((A1,Ci)=>{Ci.exports=window.wp.apiFetch});var Jl=qt(($6,Kl)=>{Kl.exports=window.wp.date});function qn(t){var e,r,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var s=t.length;for(e=0;e(0,Xn.jsx)(o,{ref:a,className:ve("admin-ui-navigable-region",e),"aria-label":r,role:"region",tabIndex:"-1",...s,children:t}));Kn.displayName="NavigableRegion";var Jn=Kn;var Ke=u(Y(),1);var Qn=u(Y(),1),{Fill:$n,Slot:ta}=(0,Qn.createSlotFill)("SidebarToggle");var Ge=u(z(),1);function ea({breadcrumbs:t,badges:e,title:r,subTitle:o,actions:s,showSidebarToggle:a=!0}){return(0,Ge.jsxs)(Ke.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,Ge.jsxs)(Ke.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,Ge.jsxs)(Ke.__experimentalHStack,{spacing:2,justify:"left",children:[a&&(0,Ge.jsx)(ta,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),r&&(0,Ge.jsx)(Ke.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:r}),t,e]}),(0,Ge.jsx)(Ke.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:s})]}),o&&(0,Ge.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var Xr=u(z(),1);function ra({breadcrumbs:t,badges:e,title:r,subTitle:o,children:s,className:a,actions:n,hasPadding:l=!1,showSidebarToggle:m=!0}){let f=ve("admin-ui-page",a);return(0,Xr.jsxs)(Jn,{className:f,ariaLabel:r,children:[(r||t||e)&&(0,Xr.jsx)(ea,{breadcrumbs:t,badges:e,title:r,subTitle:o,actions:n,showSidebarToggle:m}),l?(0,Xr.jsx)("div",{className:"admin-ui-page__content has-padding",children:s}):s]})}ra.SidebarToggleFill=$n;var ys=ra;var yo=u(ut()),du=u(Y()),mu=u(sa()),ms=u(be()),pu=u(fe()),hu=u(vt());var uu=u(Y(),1),fu=u(_r(),1),Xh=u(fe(),1),Kh=u(ce(),1),En=u(vt(),1),Jh=u(ur(),1);function Pr(t,e,r){e=Array.isArray(e)?[...e]:[e],t=Array.isArray(t)?[...t]:{...t};let o=e.pop(),s=t;for(let a of e){let n=s[a];s=s[a]=Array.isArray(n)?[...n]:{...n}}return s[o]=r,t}var we=(t,e,r)=>{let o=Array.isArray(e)?e:e.split("."),s=t;return o.forEach(a=>{s=s?.[a]}),s??r};var ku=["appearanceTools","useRootPaddingAwareAlignments","background.backgroundImage","background.backgroundRepeat","background.backgroundSize","background.backgroundPosition","border.color","border.radius","border.radiusSizes","border.style","border.width","shadow.presets","shadow.defaultPresets","color.background","color.button","color.caption","color.custom","color.customDuotone","color.customGradient","color.defaultDuotone","color.defaultGradients","color.defaultPalette","color.duotone","color.gradients","color.heading","color.link","color.palette","color.text","custom","dimensions.aspectRatio","dimensions.height","dimensions.minHeight","dimensions.width","dimensions.dimensionSizes","layout.contentSize","layout.definitions","layout.wideSize","lightbox.enabled","lightbox.allowEditing","position.fixed","position.sticky","spacing.customSpacingSize","spacing.defaultSpacingSizes","spacing.spacingSizes","spacing.spacingScale","spacing.blockGap","spacing.margin","spacing.padding","spacing.units","typography.fluid","typography.customFontSize","typography.defaultFontSizes","typography.dropCap","typography.fontFamilies","typography.fontSizes","typography.fontStyle","typography.fontWeight","typography.letterSpacing","typography.lineHeight","typography.textAlign","typography.textColumns","typography.textDecoration","typography.textIndent","typography.textTransform","typography.writingMode"];function vs(t,e,r){let o=r?".blocks."+r:"",s=e?"."+e:"",a=`settings${o}${s}`,n=`settings${s}`;if(e)return we(t,a)??we(t,n);let l={};return ku.forEach(m=>{let f=we(t,`settings${o}.${m}`)??we(t,`settings.${m}`);f!==void 0&&(l=Pr(l,m.split("."),f))}),l}function bs(t,e,r,o){let s=o?".blocks."+o:"",a=e?"."+e:"",n=`settings${s}${a}`;return Pr(t,n.split("."),r)}var Eu=u(ca(),1);var Ou="1600px",Tu="320px",_u=1,Pu=.25,Au=.75,Ru="14px";function da({minimumFontSize:t,maximumFontSize:e,fontSize:r,minimumViewportWidth:o=Tu,maximumViewportWidth:s=Ou,scaleFactor:a=_u,minimumFontSizeLimit:n}){if(n=Re(n)?n:Ru,r){let b=Re(r);if(!b?.unit||!b?.value)return null;let T=Re(n,{coerceTo:b.unit});if(T?.value&&!t&&!e&&b?.value<=T?.value)return null;if(e||(e=`${b.value}${b.unit}`),!t){let q=b.unit==="px"?b.value:b.value*16,E=Math.min(Math.max(1-.075*Math.log2(q),Pu),Au),D=Kr(b.value*E,3);T?.value&&D0}function Lu(t){let e=t?.typography??{},r=t?.layout,o=Re(r?.wideSize)?r?.wideSize:null;return ws(e)&&o?{fluid:{maxViewportWidth:o,...typeof e.fluid=="object"?e.fluid:{}}}:{fluid:e?.fluid}}function ma(t,e){let{size:r}=t;if(!r||r==="0"||t?.fluid===!1||!ws(e?.typography)&&!ws(t))return r;let o=Lu(e)?.fluid??{},s=da({minimumFontSize:typeof t?.fluid=="boolean"?void 0:t?.fluid?.min,maximumFontSize:typeof t?.fluid=="boolean"?void 0:t?.fluid?.max,fontSize:r,minimumFontSizeLimit:typeof o=="object"?o?.minFontSize:void 0,maximumViewportWidth:typeof o=="object"?o?.maxViewportWidth:void 0,minimumViewportWidth:typeof o=="object"?o?.minViewportWidth:void 0});return s||r}var Iu=[{path:["color","palette"],valueKey:"color",cssVarInfix:"color",classes:[{classSuffix:"color",propertyName:"color"},{classSuffix:"background-color",propertyName:"background-color"},{classSuffix:"border-color",propertyName:"border-color"}]},{path:["color","gradients"],valueKey:"gradient",cssVarInfix:"gradient",classes:[{classSuffix:"gradient-background",propertyName:"background"}]},{path:["color","duotone"],valueKey:"colors",cssVarInfix:"duotone",valueFunc:({slug:t})=>`url( '#wp-duotone-${t}' )`,classes:[]},{path:["shadow","presets"],valueKey:"shadow",cssVarInfix:"shadow",classes:[]},{path:["typography","fontSizes"],valueFunc:(t,e)=>ma(t,e),valueKey:"size",cssVarInfix:"font-size",classes:[{classSuffix:"font-size",propertyName:"font-size"}]},{path:["typography","fontFamilies"],valueKey:"fontFamily",cssVarInfix:"font-family",classes:[{classSuffix:"font-family",propertyName:"font-family"}]},{path:["spacing","spacingSizes"],valueKey:"size",cssVarInfix:"spacing",valueFunc:({size:t})=>t,classes:[]},{path:["border","radiusSizes"],valueKey:"size",cssVarInfix:"border-radius",classes:[]},{path:["dimensions","dimensionSizes"],valueKey:"size",cssVarInfix:"dimension",classes:[]}];function pa(t,e,r=[],o="slug",s){let a=[e?we(t,["blocks",e,...r]):void 0,we(t,r)].filter(Boolean);for(let n of a)if(n){let l=["custom","theme","default"];for(let m of l){let f=n[m];if(f){let c=f.find(d=>d[o]===s);if(c)return o==="slug"||pa(t,e,r,"slug",c.slug)[o]===c[o]?c:void 0}}}}function Bu(t,e,r,[o,s]=[]){let a=Iu.find(l=>l.cssVarInfix===o);if(!a||!t.settings)return r;let n=pa(t.settings,e,a.path,"slug",s);if(n){let{valueKey:l}=a,m=n[l];return wo(t,e,m)}return r}function Vu(t,e,r,o=[]){let s=(e?we(t?.settings??{},["blocks",e,"custom",...o]):void 0)??we(t?.settings??{},["custom",...o]);return s?wo(t,e,s):r}function wo(t,e,r){if(!r||typeof r!="string")if(typeof r=="object"&&r!==null&&"ref"in r&&typeof r.ref=="string"){let f=we(t,r.ref);if(!f||typeof f=="object"&&"ref"in f)return f;r=f}else return r;let o="var:",s="var(--wp--",a=")",n;if(r.startsWith(o))n=r.slice(o.length).split("|");else if(r.startsWith(s)&&r.endsWith(a))n=r.slice(s.length,-a.length).split("--");else return r;let[l,...m]=n;return l==="preset"?Bu(t,e,r,m):l==="custom"?Vu(t,e,r,m):r}function Ss(t,e,r,o=!0){let s=e?"."+e:"",a=r?`styles.blocks.${r}${s}`:`styles${s}`;if(!t)return;let n=we(t,a);return o?wo(t,r,n):n}function xs(t,e,r,o){let s=e?"."+e:"",a=o?`styles.blocks.${o}${s}`:`styles${s}`;return Pr(t,a.split("."),r)}var Cs=u(ga(),1);function Jr(t,e){return typeof t!="object"||typeof e!="object"?t===e:(0,Cs.default)(t?.styles,e?.styles)&&(0,Cs.default)(t?.settings,e?.settings)}var Ca=u(wa(),1);function Sa(t){return Object.prototype.toString.call(t)==="[object Object]"}function xa(t){var e,r;return Sa(t)===!1?!1:(e=t.constructor,e===void 0?!0:(r=e.prototype,!(Sa(r)===!1||r.hasOwnProperty("isPrototypeOf")===!1)))}function fr(t,e){return(0,Ca.default)(t,e,{isMergeableObject:xa,customMerge:r=>{if(r==="backgroundImage")return(o,s)=>s??o}})}var Ku={grad:.9,turn:360,rad:360/(2*Math.PI)},je=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},Zt=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},Fe=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},Ra=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},Fa=function(t){return{r:Fe(t.r,0,255),g:Fe(t.g,0,255),b:Fe(t.b,0,255),a:Fe(t.a)}},Fs=function(t){return{r:Zt(t.r),g:Zt(t.g),b:Zt(t.b),a:Zt(t.a,3)}},Ju=/^#([0-9a-f]{3,8})$/i,So=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},La=function(t){var e=t.r,r=t.g,o=t.b,s=t.a,a=Math.max(e,r,o),n=a-Math.min(e,r,o),l=n?a===e?(r-o)/n:a===r?2+(o-e)/n:4+(e-r)/n:0;return{h:60*(l<0?l+6:l),s:a?n/a*100:0,v:a/255*100,a:s}},Ea=function(t){var e=t.h,r=t.s,o=t.v,s=t.a;e=e/360*6,r/=100,o/=100;var a=Math.floor(e),n=o*(1-r),l=o*(1-(e-a)*r),m=o*(1-(1-e+a)*r),f=a%6;return{r:255*[o,l,n,n,m,o][f],g:255*[m,o,o,l,n,n][f],b:255*[n,n,m,o,o,l][f],a:s}},ka=function(t){return{h:Ra(t.h),s:Fe(t.s,0,100),l:Fe(t.l,0,100),a:Fe(t.a)}},Oa=function(t){return{h:Zt(t.h),s:Zt(t.s),l:Zt(t.l),a:Zt(t.a,3)}},Ta=function(t){return Ea((r=(e=t).s,{h:e.h,s:(r*=((o=e.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:e.a}));var e,r,o},$r=function(t){return{h:(e=La(t)).h,s:(s=(200-(r=e.s))*(o=e.v)/100)>0&&s<200?r*o/100/(s<=100?s:200-s)*100:0,l:s/2,a:e.a};var e,r,o,s},Qu=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,$u=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,tf=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ef=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Ts={string:[[function(t){var e=Ju.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?Zt(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?Zt(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=tf.exec(t)||ef.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:Fa({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=Qu.exec(t)||$u.exec(t);if(!e)return null;var r,o,s=ka({h:(r=e[1],o=e[2],o===void 0&&(o="deg"),Number(r)*(Ku[o]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return Ta(s)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,o=t.b,s=t.a,a=s===void 0?1:s;return je(e)&&je(r)&&je(o)?Fa({r:Number(e),g:Number(r),b:Number(o),a:Number(a)}):null},"rgb"],[function(t){var e=t.h,r=t.s,o=t.l,s=t.a,a=s===void 0?1:s;if(!je(e)||!je(r)||!je(o))return null;var n=ka({h:Number(e),s:Number(r),l:Number(o),a:Number(a)});return Ta(n)},"hsl"],[function(t){var e=t.h,r=t.s,o=t.v,s=t.a,a=s===void 0?1:s;if(!je(e)||!je(r)||!je(o))return null;var n=(function(l){return{h:Ra(l.h),s:Fe(l.s,0,100),v:Fe(l.v,0,100),a:Fe(l.a)}})({h:Number(e),s:Number(r),v:Number(o),a:Number(a)});return Ea(n)},"hsv"]]},_a=function(t,e){for(var r=0;r=.5},t.prototype.toHex=function(){return e=Fs(this.rgba),r=e.r,o=e.g,s=e.b,n=(a=e.a)<1?So(Zt(255*a)):"","#"+So(r)+So(o)+So(s)+n;var e,r,o,s,a,n},t.prototype.toRgb=function(){return Fs(this.rgba)},t.prototype.toRgbString=function(){return e=Fs(this.rgba),r=e.r,o=e.g,s=e.b,(a=e.a)<1?"rgba("+r+", "+o+", "+s+", "+a+")":"rgb("+r+", "+o+", "+s+")";var e,r,o,s,a},t.prototype.toHsl=function(){return Oa($r(this.rgba))},t.prototype.toHslString=function(){return e=Oa($r(this.rgba)),r=e.h,o=e.s,s=e.l,(a=e.a)<1?"hsla("+r+", "+o+"%, "+s+"%, "+a+")":"hsl("+r+", "+o+"%, "+s+"%)";var e,r,o,s,a},t.prototype.toHsv=function(){return e=La(this.rgba),{h:Zt(e.h),s:Zt(e.s),v:Zt(e.v),a:Zt(e.a,3)};var e},t.prototype.invert=function(){return Le({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),Le(ks(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),Le(ks(this.rgba,-e))},t.prototype.grayscale=function(){return Le(ks(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),Le(Pa(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),Le(Pa(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?Le({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):Zt(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=$r(this.rgba);return typeof e=="number"?Le({h:e,s:r.s,l:r.l,a:r.a}):Zt(r.h)},t.prototype.isEqual=function(e){return this.toHex()===Le(e).toHex()},t})(),Le=function(t){return t instanceof _s?t:new _s(t)},Aa=[],Ia=function(t){t.forEach(function(e){Aa.indexOf(e)<0&&(e(_s,Ts),Aa.push(e))})};var Ps=u(vt(),1);var Ba=u(vt(),1),Xt=(0,Ba.createContext)({user:{styles:{},settings:{}},base:{styles:{},settings:{}},merged:{styles:{},settings:{}},onChange:()=>{},fontLibraryEnabled:!1});var Va=u(z(),1);function to({children:t,value:e,baseValue:r,onChange:o,fontLibraryEnabled:s}){let a=(0,Ps.useMemo)(()=>fr(r,e),[r,e]),n=(0,Ps.useMemo)(()=>({user:e,base:r,merged:a,onChange:o,fontLibraryEnabled:s}),[e,r,a,o,s]);return(0,Va.jsx)(Xt.Provider,{value:n,children:t})}var Ue=u(Y(),1),oi=u(ut(),1);var xo=u(vt(),1),eo=(0,xo.forwardRef)(({icon:t,size:e=24,...r},o)=>(0,xo.cloneElement)(t,{width:e,height:e,...r,ref:o}));var Co=u(Rr(),1),As=u(z(),1),cr=(0,As.jsx)(Co.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,As.jsx)(Co.Path,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"})});var Fo=u(Rr(),1),Rs=u(z(),1),dr=(0,Rs.jsx)(Fo.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Rs.jsx)(Fo.Path,{d:"M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"})});var ko=u(Rr(),1),Ls=u(z(),1),Es=(0,Ls.jsx)(ko.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Ls.jsx)(ko.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})});var Oo=u(Rr(),1),Is=u(z(),1),To=(0,Is.jsx)(Oo.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Is.jsx)(Oo.Path,{d:"M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z"})});var _o=u(Rr(),1),Bs=u(z(),1),Po=(0,Bs.jsx)(_o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Bs.jsx)(_o.Path,{d:"M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z"})});var yf=u(fe(),1),vf=u(be(),1);var Na=u(z(),1);function Vs({className:t,...e}){return(0,Na.jsx)(eo,{className:ve(t,"global-styles-ui-icon-with-current-color"),...e})}var Je=u(Y(),1);var mr=u(z(),1);function of({icon:t,children:e,...r}){return(0,mr.jsxs)(Je.__experimentalItem,{...r,children:[t&&(0,mr.jsxs)(Je.__experimentalHStack,{justify:"flex-start",children:[(0,mr.jsx)(Vs,{icon:t,size:24}),(0,mr.jsx)(Je.FlexItem,{children:e})]}),!t&&e]})}function Ee(t){return(0,mr.jsx)(Je.Navigator.Button,{as:of,...t})}var af=u(Y(),1);var lf=u(ut(),1),qa=u(ce(),1);var Ds=function(t){var e=t/255;return e<.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},Ns=function(t){return .2126*Ds(t.r)+.7152*Ds(t.g)+.0722*Ds(t.b)};function za(t){t.prototype.luminance=function(){return e=Ns(this.rgba),(r=2)===void 0&&(r=0),o===void 0&&(o=Math.pow(10,r)),Math.round(o*e)/o+0;var e,r,o},t.prototype.contrast=function(e){e===void 0&&(e="#FFF");var r,o,s,a,n,l,m,f=e instanceof t?e:new t(e);return a=this.rgba,n=f.toRgb(),l=Ns(a),m=Ns(n),r=l>m?(l+.05)/(m+.05):(m+.05)/(l+.05),(o=2)===void 0&&(o=0),s===void 0&&(s=Math.pow(10,o)),Math.floor(s*r)/s+0},t.prototype.isReadable=function(e,r){return e===void 0&&(e="#FFF"),r===void 0&&(r={}),this.contrast(e)>=(l=(n=(o=r).size)===void 0?"normal":n,(a=(s=o.level)===void 0?"AA":s)==="AAA"&&l==="normal"?7:a==="AA"&&l==="large"?3:4.5);var o,s,a,n,l}}var Pe=u(vt(),1),ja=u(fe(),1),Ua=u(be(),1),Ms=u(ut(),1);function zs(t,e){if(!e?.length||typeof t!="object"||!t||!Object.keys(t).length)return t;for(let r in t)e.includes(r)?delete t[r]:typeof t[r]=="object"&&zs(t[r],e);return t}var Ao=(t,e)=>{if(!t||!e?.length)return{};let r={};return Object.keys(t).forEach(o=>{if(e.includes(o))r[o]=t[o];else if(typeof t[o]=="object"){let s=Ao(t[o],e);Object.keys(s).length&&(r[o]=s)}}),r};function ro(t,e){let r=Ao(structuredClone(t),e);return Jr(r,t)}function Ma(t,e){if(!Array.isArray(t)||!e)return null;let o=e.replace("var(","").replace(")","")?.split("--").slice(-1)[0];return t.find(s=>s.slug===o)}function Ga(t){let e=t?.settings?.typography?.fontFamilies?.theme,r=t?.settings?.typography?.fontFamilies?.custom,o=[];e&&r?o=[...e,...r]:e?o=e:r&&(o=r);let s=t?.styles?.typography?.fontFamily,a=Ma(o,s),n=t?.styles?.elements?.heading?.typography?.fontFamily,l;return n?l=Ma(o,t?.styles?.elements?.heading?.typography?.fontFamily):l=a,[a,l]}Ia([za]);function kt(t,e,r="merged",o=!0){let{user:s,base:a,merged:n,onChange:l}=(0,Pe.useContext)(Xt),m=n;r==="base"?m=a:r==="user"&&(m=s);let f=(0,Pe.useMemo)(()=>Ss(m,t,e,o),[m,t,e,o]),c=(0,Pe.useCallback)(d=>{let h=xs(s,t,d,e);l(h)},[s,l,t,e]);return[f,c]}function _t(t,e,r="merged"){let{user:o,base:s,merged:a,onChange:n}=(0,Pe.useContext)(Xt),l=a;r==="base"?l=s:r==="user"&&(l=o);let m=(0,Pe.useMemo)(()=>vs(l,t,e),[l,t,e]),f=(0,Pe.useCallback)(c=>{let d=bs(o,t,c,e);n(d)},[o,n,t,e]);return[m,f]}var sf=[];function nf({title:t,settings:e,styles:r}){return t===(0,Ms.__)("Default")||Object.keys(e||{}).length>0||Object.keys(r||{}).length>0}function Ro(t=[]){let{variationsFromTheme:e}=(0,ja.useSelect)(o=>({variationsFromTheme:o(Ua.store).__experimentalGetCurrentThemeGlobalStylesVariations?.()||sf}),[]),{user:r}=(0,Pe.useContext)(Xt);return(0,Pe.useMemo)(()=>{let o=structuredClone(r),s=zs(o,t);s.title=(0,Ms.__)("Default");let a=e.filter(l=>ro(l,t)).map(l=>fr(s,l)),n=[s,...a];return n?.length?n.filter(nf):[]},[t,r,e])}var Wa=u(Gs(),1),{lock:Gy,unlock:yt}=(0,Wa.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/global-styles-ui");var js=u(z(),1),{useHasDimensionsPanel:qy,useHasTypographyPanel:Zy,useHasColorPanel:Yy,useSettingsForBlockElement:Xy,useHasBackgroundPanel:Ky}=yt(qa.privateApis);var Ie=u(Y(),1);function Lr(){let[t="black"]=kt("color.text"),[e="white"]=kt("color.background"),[r=t]=kt("elements.h1.color.text"),[o=r]=kt("elements.link.color.text"),[s=o]=kt("elements.button.color.background"),[a]=_t("color.palette.core")||[],[n]=_t("color.palette.theme")||[],[l]=_t("color.palette.custom")||[],m=(n??[]).concat(l??[]).concat(a??[]),f=m.filter(({color:h})=>h===t),c=m.filter(({color:h})=>h===s),d=f.concat(c).concat(m).filter(({color:h})=>h!==e).slice(0,2);return{paletteColors:m,highlightedColors:d}}var Xa=u(vt(),1),Ka=u(Y(),1),Hs=u(ut(),1);function uf(t,e){return e.length===0?null:(e.sort((r,o)=>Math.abs(t-r)-Math.abs(t-o)),e[0])}function ff(t){let e=[];return t.forEach(r=>{let o=String(r.fontWeight).split(" ");if(o.length===2){let s=parseInt(o[0]),a=parseInt(o[1]);for(let n=s;n<=a;n+=100)e.push(n)}else o.length===1&&e.push(parseInt(o[0]))}),e}function Za(t){let e=/^(?!generic\([ a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/,r=t.trim(),o=s=>(s=s.trim(),s.match(e)?(s=s.replace(/^["']|["']$/g,""),`"${s}"`):s);return r.includes(",")?r.split(",").map(o).filter(s=>s!=="").join(", "):o(r)}function Us(t){if(!t)return"";let e=t.trim();return e.includes(",")&&(e=(e.split(",").find(r=>r.trim()!=="")??"").trim()),e=e.replace(/^["']|["']$/g,""),window.navigator.userAgent.toLowerCase().includes("firefox")&&(e=`"${e}"`),e}function Er(t){let e={fontFamily:Za(t.fontFamily)};if(!("fontFace"in t)||!Array.isArray(t.fontFace))return e.fontWeight="400",e.fontStyle="normal",e;if(t.fontFace){let r=t.fontFace.filter(o=>o?.fontStyle&&o.fontStyle.toLowerCase()==="normal");if(r.length>0){e.fontStyle="normal";let o=ff(r),s=uf(400,o);e.fontWeight=String(s)||"400"}else e.fontStyle=t.fontFace.length&&t.fontFace[0].fontStyle||"normal",e.fontWeight=t.fontFace.length&&String(t.fontFace[0].fontWeight)||"400"}return e}function Ya(t){return{fontFamily:Za(t.fontFamily),fontStyle:t.fontStyle||"normal",fontWeight:t.fontWeight||"400"}}var oo=u(z(),1);function Lo({fontSize:t,variation:e}){let{base:r}=(0,Xa.useContext)(Xt),o=r;e&&(o={...r,...e});let[s]=kt("color.text"),[a,n]=Ga(o),l=a?Er(a):{},m=n?Er(n):{};return s&&(l.color=s,m.color=s),t&&(l.fontSize=t,m.fontSize=t),(0,oo.jsxs)(Ka.__unstableMotion.div,{animate:{scale:1,opacity:1},initial:{scale:.1,opacity:0},transition:{delay:.3,type:"tween"},style:{textAlign:"center",lineHeight:1},children:[(0,oo.jsx)("span",{style:m,children:(0,Hs._x)("A","Uppercase letter A")}),(0,oo.jsx)("span",{style:l,children:(0,Hs._x)("a","Lowercase letter A")})]})}var Ja=u(Y(),1);var Qa=u(z(),1);function $a({normalizedColorSwatchSize:t,ratio:e}){let{highlightedColors:r}=Lr(),o=t*e;return r.map(({slug:s,color:a},n)=>(0,Qa.jsx)(Ja.__unstableMotion.div,{style:{height:o,width:o,background:a,borderRadius:o/2},animate:{scale:1,opacity:1},initial:{scale:.1,opacity:0},transition:{delay:n===1?.2:.1}},`${s}-${n}`))}var ri=u(Y(),1),Ir=u(ur(),1),pr=u(vt(),1);var Qe=u(z(),1),ti=248,ei=152,cf={leading:!0,trailing:!0};function df({children:t,label:e,isFocused:r,withHoverView:o}){let[s="white"]=kt("color.background"),[a]=kt("color.gradient"),n=(0,Ir.useReducedMotion)(),[l,m]=(0,pr.useState)(!1),[f,{width:c}]=(0,Ir.useResizeObserver)(),[d,h]=(0,pr.useState)(c),[g,v]=(0,pr.useState)(),_=(0,Ir.useThrottle)(h,250,cf);(0,pr.useLayoutEffect)(()=>{c&&_(c)},[c,_]),(0,pr.useLayoutEffect)(()=>{let b=d?d/ti:1,T=b-(g||0);(Math.abs(T)>.1||!g)&&v(b)},[d,g]);let A=c?c/ti:1,k=g||A;return(0,Qe.jsxs)(Qe.Fragment,{children:[(0,Qe.jsx)("div",{style:{position:"relative"},children:f}),!!c&&(0,Qe.jsx)("div",{className:"global-styles-ui-preview__wrapper",style:{height:ei*k},onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),tabIndex:-1,children:(0,Qe.jsx)(ri.__unstableMotion.div,{style:{height:ei*k,width:"100%",background:a??s,cursor:o?"pointer":void 0},initial:"start",animate:(l||r)&&!n&&e?"hover":"start",children:[].concat(t).map((b,T)=>b({ratio:k,key:T}))})})]})}var Br=df;var de=u(z(),1),mf={start:{scale:1,opacity:1},hover:{scale:0,opacity:0}},pf={hover:{opacity:1},start:{opacity:.5}},hf={hover:{scale:1,opacity:1},start:{scale:0,opacity:0}};function gf({label:t,isFocused:e,withHoverView:r,variation:o}){let[s]=kt("typography.fontWeight"),[a="serif"]=kt("typography.fontFamily"),[n=a]=kt("elements.h1.typography.fontFamily"),[l=s]=kt("elements.h1.typography.fontWeight"),[m="black"]=kt("color.text"),[f=m]=kt("elements.h1.color.text"),{paletteColors:c}=Lr();return(0,de.jsxs)(Br,{label:t,isFocused:e,withHoverView:r,children:[({ratio:d,key:h})=>(0,de.jsx)(Ie.__unstableMotion.div,{variants:mf,style:{height:"100%",overflow:"hidden"},children:(0,de.jsxs)(Ie.__experimentalHStack,{spacing:10*d,justify:"center",style:{height:"100%",overflow:"hidden"},children:[(0,de.jsx)(Lo,{fontSize:65*d,variation:o}),(0,de.jsx)(Ie.__experimentalVStack,{spacing:4*d,children:(0,de.jsx)($a,{normalizedColorSwatchSize:32,ratio:d})})]})},h),({key:d})=>(0,de.jsx)(Ie.__unstableMotion.div,{variants:r?pf:void 0,style:{height:"100%",width:"100%",position:"absolute",top:0,overflow:"hidden",filter:"blur(60px)",opacity:.1},children:(0,de.jsx)(Ie.__experimentalHStack,{spacing:0,justify:"flex-start",style:{height:"100%",overflow:"hidden"},children:c.slice(0,4).map(({color:h},g)=>(0,de.jsx)("div",{style:{height:"100%",background:h,flexGrow:1}},g))})},d),({ratio:d,key:h})=>(0,de.jsx)(Ie.__unstableMotion.div,{variants:hf,style:{height:"100%",width:"100%",overflow:"hidden",position:"absolute",top:0},children:(0,de.jsx)(Ie.__experimentalVStack,{spacing:3*d,justify:"center",style:{height:"100%",overflow:"hidden",padding:10*d,boxSizing:"border-box"},children:t&&(0,de.jsx)("div",{style:{fontSize:40*d,fontFamily:n,color:f,fontWeight:l,lineHeight:"1em",textAlign:"center"},children:t})})},h)]})}var Ws=gf;var si=u(z(),1);var Zs=u(_r(),1),Vr=u(ut(),1),gr=u(Y(),1),Ys=u(fe(),1),$e=u(vt(),1),Eo=u(ce(),1),ui=u(ur(),1);import{speak as xf}from"@wordpress/a11y";var ni=u(_r(),1),ai=u(fe(),1),bf=u(Y(),1);var wf=u(z(),1);function Sf(t,e){return t?.filter(r=>r.source==="block"||e.includes(r.name))||[]}function qs(t){let e=(0,ai.useSelect)(s=>{let{getBlockStyles:a}=s(ni.store);return a(t)},[t]),[r]=kt("variations",t),o=Object.keys(r??{});return Sf(e,o)}var hr=u(Y(),1),ii=u(ut(),1);var li=u(z(),1);var Be=u(z(),1),{useHasDimensionsPanel:Cf,useHasTypographyPanel:Ff,useHasBorderPanel:kf,useSettingsForBlockElement:Of,useHasColorPanel:Tf}=yt(Eo.privateApis);function _f(){let t=(0,Ys.useSelect)(s=>s(Zs.store).getBlockTypes(),[]),e=(s,a)=>{let{core:n,noncore:l}=s;return(a.name.startsWith("core/")?n:l).push(a),s},{core:r,noncore:o}=t.reduce(e,{core:[],noncore:[]});return[...r,...o]}function Pf(t){let[e]=_t("",t),r=Of(e,t),o=Ff(r),s=Tf(r),a=kf(r),n=Cf(r),l=a||n,m=!!qs(t)?.length;return o||s||l||m}function Af({block:t}){return Pf(t.name)?(0,Be.jsx)(Ee,{path:"/blocks/"+encodeURIComponent(t.name),children:(0,Be.jsxs)(gr.__experimentalHStack,{justify:"flex-start",children:[(0,Be.jsx)(Eo.BlockIcon,{icon:t.icon}),(0,Be.jsx)(gr.FlexItem,{children:t.title})]})}):null}function Rf({filterValue:t}){let e=_f(),r=(0,ui.useDebounce)(xf,500),{isMatchingSearchTerm:o}=(0,Ys.useSelect)(Zs.store),s=t?e.filter(n=>o(n,t)):e,a=(0,$e.useRef)(null);return(0,$e.useEffect)(()=>{if(!t)return;let n=a.current?.childElementCount||0,l=(0,Vr.sprintf)((0,Vr._n)("%d result found.","%d results found.",n),n);r(l,"polite")},[t,r]),(0,Be.jsx)("div",{ref:a,className:"global-styles-ui-block-types-item-list",role:"list",children:s.length===0?(0,Be.jsx)(gr.__experimentalText,{align:"center",as:"p",children:(0,Vr.__)("No blocks found.")}):s.map(n=>(0,Be.jsx)(Af,{block:n},"menu-itemblock-"+n.name))})}var Lv=(0,$e.memo)(Rf);var Vf=u(_r(),1),mi=u(ce(),1),pi=u(vt(),1),Df=u(fe(),1),Nf=u(be(),1),Xs=u(Y(),1),hi=u(ut(),1);var Lf=u(ce(),1),fi=u(_r(),1),Ef=u(Y(),1),If=u(vt(),1);var Bf=u(z(),1);var ci=u(Y(),1),di=u(z(),1);function Se({children:t,level:e=2}){return(0,di.jsx)(ci.__experimentalHeading,{className:"global-styles-ui-subtitle",level:e,children:t})}var Ks=u(z(),1);var{useHasDimensionsPanel:Zv,useHasTypographyPanel:Yv,useHasBorderPanel:Xv,useSettingsForBlockElement:Kv,useHasColorPanel:Jv,useHasFiltersPanel:Qv,useHasImageSettingsPanel:$v,useHasBackgroundPanel:t1,BackgroundPanel:e1,BorderPanel:r1,ColorPanel:o1,TypographyPanel:s1,DimensionsPanel:n1,FiltersPanel:a1,ImageSettingsPanel:i1,AdvancedPanel:l1}=yt(mi.privateApis);var Jp=u(ut(),1),Qp=u(Y(),1),$p=u(vt(),1);var zf=u(Y(),1);var Mf=u(z(),1);var Gf=u(ut(),1),Io=u(Y(),1);var gi=u(z(),1);var Do=u(Y(),1);var yi=u(Y(),1);var Bo=u(z(),1),jf=({variation:t,isFocused:e,withHoverView:r})=>(0,Bo.jsx)(Br,{label:t.title,isFocused:e,withHoverView:r,children:({ratio:o,key:s})=>(0,Bo.jsx)(yi.__experimentalHStack,{spacing:10*o,justify:"center",style:{height:"100%",overflow:"hidden"},children:(0,Bo.jsx)(Lo,{variation:t,fontSize:85*o})},s)}),vi=jf;var wi=u(Y(),1),yr=u(vt(),1),Si=u(Js(),1),Vo=u(ut(),1);var so=u(z(),1);function Dr({variation:t,children:e,isPill:r=!1,properties:o,showTooltip:s=!1}){let[a,n]=(0,yr.useState)(!1),{base:l,user:m,onChange:f}=(0,yr.useContext)(Xt),c=(0,yr.useMemo)(()=>{let A=fr(l,t);return o&&(A=Ao(A,o)),{user:t,base:l,merged:A,onChange:()=>{}}},[t,l,o]),d=()=>f(t),h=A=>{A.keyCode===Si.ENTER&&(A.preventDefault(),d())},g=(0,yr.useMemo)(()=>Jr(m,t),[m,t]),v=t?.title;t?.description&&(v=(0,Vo.sprintf)((0,Vo._x)("%1$s (%2$s)","variation label"),t?.title,t?.description));let _=(0,so.jsx)("div",{className:ve("global-styles-ui-variations_item",{"is-active":g}),role:"button",onClick:d,onKeyDown:h,tabIndex:0,"aria-label":v,"aria-current":g,onFocus:()=>n(!0),onBlur:()=>n(!1),children:(0,so.jsx)("div",{className:ve("global-styles-ui-variations_item-preview",{"is-pill":r}),children:e(a)})});return(0,so.jsx)(Xt.Provider,{value:c,children:s?(0,so.jsx)(wi.Tooltip,{text:t?.title,children:_}):_})}var vr=u(z(),1),xi=["typography"];function No({title:t,gap:e=2}){let r=Ro(xi);return r?.length<=1?null:(0,vr.jsxs)(Do.__experimentalVStack,{spacing:3,children:[t&&(0,vr.jsx)(Se,{level:3,children:t}),(0,vr.jsx)(Do.__experimentalGrid,{columns:3,gap:e,className:"global-styles-ui-style-variations-container",children:r.map((o,s)=>(0,vr.jsx)(Dr,{variation:o,properties:xi,showTooltip:!0,children:()=>(0,vr.jsx)(vi,{variation:o})},s))})]})}var Xp=u(ut(),1),co=u(Y(),1);var Kp=u(vt(),1);var He=u(vt(),1),or=u(fe(),1),rr=u(be(),1),en=u(ut(),1);var Qs=u(Fi(),1),ki=u(be(),1),Oi="/wp/v2/font-families";function Ti(t){let{receiveEntityRecords:e}=t.dispatch(ki.store);e("postType","wp_font_family",[],void 0,!0)}async function _i(t,e){let o=await(0,Qs.default)({path:Oi,method:"POST",body:t});return Ti(e),{id:o.id,...o.font_family_settings,fontFace:[]}}async function Pi(t,e,r){let o={path:`${Oi}/${t}/font-faces`,method:"POST",body:e},s=await(0,Qs.default)(o);return Ti(r),{id:s.id,...s.font_face_settings}}var Li=u(Y(),1);var ke=u(ut(),1),$s=["otf","ttf","woff","woff2"],Ai={100:(0,ke._x)("Thin","font weight"),200:(0,ke._x)("Extra-light","font weight"),300:(0,ke._x)("Light","font weight"),400:(0,ke._x)("Normal","font weight"),500:(0,ke._x)("Medium","font weight"),600:(0,ke._x)("Semi-bold","font weight"),700:(0,ke._x)("Bold","font weight"),800:(0,ke._x)("Extra-bold","font weight"),900:(0,ke._x)("Black","font weight")},Ri={normal:(0,ke._x)("Normal","font style"),italic:(0,ke._x)("Italic","font style")};var{File:Ei}=window,{kebabCase:Uf}=yt(Li.privateApis);function tr(t,e={}){return!t.name&&(t.fontFamily||t.slug)&&(t.name=t.fontFamily||t.slug),{...t,...e}}function Hf(t){return typeof t!="string"?!1:t!==decodeURIComponent(t)}function zo(t){let e=Ai[t.fontWeight??""]||t.fontWeight,r=t.fontStyle==="normal"?"":Ri[t.fontStyle??""]||t.fontStyle;return`${e} ${r}`}function Wf(t=[],e=[]){let r=new Map;for(let o of t)r.set(`${o.fontWeight}${o.fontStyle}`,o);for(let o of e)r.set(`${o.fontWeight}${o.fontStyle}`,o);return Array.from(r.values())}function Ii(t=[],e=[]){let r=new Map;for(let o of t)r.set(o.slug,{...o});for(let o of e)if(r.has(o.slug)){let{fontFace:s,...a}=o,n=r.get(o.slug),l=Wf(n.fontFace,s);r.set(o.slug,{...a,fontFace:l})}else r.set(o.slug,{...o});return Array.from(r.values())}async function er(t,e,r="all"){let o;if(typeof e=="string")o=`url(${e})`;else if(e instanceof Ei)o=await e.arrayBuffer();else return;let a=await new window.FontFace(Us(t.fontFamily),o,{style:t.fontStyle,weight:String(t.fontWeight)}).load();if((r==="document"||r==="all")&&document.fonts.add(a),r==="iframe"||r==="all"){let n=document.querySelector('iframe[name="editor-canvas"]');n?.contentDocument&&n.contentDocument.fonts.add(a)}}function no(t,e="all"){let r=o=>{o.forEach(s=>{s.family===Us(t?.fontFamily)&&s.weight===t?.fontWeight&&s.style===t?.fontStyle&&o.delete(s)})};if((e==="document"||e==="all")&&r(document.fonts),e==="iframe"||e==="all"){let o=document.querySelector('iframe[name="editor-canvas"]');o?.contentDocument&&r(o.contentDocument.fonts)}}function Nr(t){if(!t)return;let e;if(Array.isArray(t)?e=t[0]:e=t,!e.startsWith("file:."))return Hf(e)||(e=encodeURI(e)),e}function Bi(t){let e=new FormData,{fontFace:r,category:o,...s}=t,a={...s,slug:Uf(t.slug)};return e.append("font_family_settings",JSON.stringify(a)),e}function Vi(t){return(t?.fontFace??[]).map((r,o)=>{let s={...r},a=new FormData;if(s.file){let n=Array.isArray(s.file)?s.file:[s.file],l=[];n.forEach((m,f)=>{let c=`file-${o}-${f}`;a.append(c,m,m.name),l.push(c)}),s.src=l.length===1?l[0]:l,delete s.file,a.append("font_face_settings",JSON.stringify(s))}else a.append("font_face_settings",JSON.stringify(s));return a})}async function Di(t,e,r){let o=[];for(let a of e)try{let n=await Pi(t,a,r);o.push({status:"fulfilled",value:n})}catch(n){o.push({status:"rejected",reason:n})}let s={errors:[],successes:[]};return o.forEach((a,n)=>{if(a.status==="fulfilled"&&a.value){let l=a.value;s.successes.push(l)}else a.reason&&s.errors.push({data:e[n],message:a.reason.message})}),s}async function Ni(t){t=Array.isArray(t)?t:[t];let e=await Promise.all(t.map(async r=>fetch(new Request(r)).then(o=>{if(!o.ok)throw new Error(`Error downloading font face asset from ${r}. Server responded with status: ${o.status}`);return o.blob()}).then(o=>{let s=r.split("/").pop();return new Ei([o],s,{type:o.type})})));return e.length===1?e[0]:e}function tn(t,e){return e.findIndex(r=>r.fontWeight===t.fontWeight&&r.fontStyle===t.fontStyle)!==-1}function zi(t,e,r){e=Array.isArray(e)?[...e]:[e],t=Array.isArray(t)?[...t]:{...t};let o=e.pop(),s=t;for(let a of e){let n=s[a];s=s[a]=Array.isArray(n)?[...n]:{...n}}return s[o]=r,t}function Mo(t,e,r=[]){let o=m=>m.slug===t.slug,s=m=>m.find(o),a=m=>m?r.filter(f=>!o(f)):[...r,t],n=m=>{let f=d=>d.fontWeight===e.fontWeight&&d.fontStyle===e.fontStyle;if(!m)return[...r,{...t,fontFace:[e]}];let c=m.fontFace||[];return c.find(f)?c=c.filter(d=>!f(d)):c=[...c,e],c.length===0?r.filter(d=>!o(d)):r.map(d=>o(d)?{...d,fontFace:c}:d)},l=s(r);return e?n(l):a(l)}var Mi=u(z(),1),ne=(0,He.createContext)({});ne.displayName="FontLibraryContext";function qf({children:t}){let e=(0,or.useRegistry)(),{saveEntityRecord:r,deleteEntityRecord:o}=(0,or.useDispatch)(rr.store),{globalStylesId:s}=(0,or.useSelect)(S=>{let{__experimentalGetCurrentGlobalStylesId:L}=S(rr.store);return{globalStylesId:L()}},[]),a=(0,rr.useEntityRecord)("root","globalStyles",s),[n,l]=(0,He.useState)(!1),{records:m=[],isResolving:f}=(0,rr.useEntityRecords)("postType","wp_font_family",{_embed:!0}),c=(m||[]).map(S=>({id:S.id,...S.font_family_settings||{},fontFace:S?._embedded?.font_faces?.map(L=>L.font_face_settings)||[]}))||[],[d,h]=_t("typography.fontFamilies"),g=async S=>{if(!a.record)return;let L=a.record,et=zi(L??{},["settings","typography","fontFamilies"],S);await r("root","globalStyles",et)},[v,_]=(0,He.useState)(""),[A,k]=(0,He.useState)(void 0),x=d?.theme?d.theme.map(S=>tr(S,{source:"theme"})).sort((S,L)=>S.name.localeCompare(L.name)):[],b=d?.custom?d.custom.map(S=>tr(S,{source:"custom"})).sort((S,L)=>S.name.localeCompare(L.name)):[],T=c?c.map(S=>tr(S,{source:"custom"})).sort((S,L)=>S.name.localeCompare(L.name)):[];(0,He.useEffect)(()=>{v||k(void 0)},[v]);let q=S=>{if(!S){k(void 0);return}let et=(S.source==="theme"?x:T).find(ct=>ct.slug===S.slug);k({...et||S,source:S.source})},[E]=(0,He.useState)(new Set),D=S=>S.reduce((et,ct)=>{let at=ct?.fontFace&&ct.fontFace?.length>0?ct?.fontFace.map(Ct=>`${Ct.fontStyle??""}${Ct.fontWeight??""}`):["normal400"];return et[ct.slug]=at,et},{}),H=S=>D(S==="theme"?x:b),$=(S,L,et,ct)=>!L&&!et?!!H(ct)[S]:!!H(ct)[S]?.includes((L??"")+(et??"")),bt=(S,L)=>H(L)[S]||[];async function W(S){l(!0);try{let L=[],et=[];for(let at of S){let Ct=!1,Ht=await(0,or.resolveSelect)(rr.store).getEntityRecords("postType","wp_font_family",{slug:at.slug,per_page:1,_embed:!0}),Ot=Ht&&Ht.length>0?Ht[0]:null,J=Ot?{id:Ot.id,...Ot.font_family_settings,fontFace:(Ot?._embedded?.font_faces??[]).map(zt=>zt.font_face_settings)||[]}:null;J||(Ct=!0,J=await _i(Bi(at),e));let St=J.fontFace&&at.fontFace?J.fontFace.filter(zt=>zt&&at.fontFace&&tn(zt,at.fontFace)):[];J.fontFace&&at.fontFace&&(at.fontFace=at.fontFace.filter(zt=>!tn(zt,J.fontFace)));let At=[],xe=[];if(at?.fontFace?.length??!1){let zt=await Di(J.id,Vi(at),e);At=zt?.successes,xe=zt?.errors}(At?.length>0||St?.length>0)&&(J.fontFace=[...At],L.push(J)),J&&!at?.fontFace?.length&&L.push(J),Ct&&(at?.fontFace?.length??0)>0&&At?.length===0&&await o("postType","wp_font_family",J.id,{force:!0}),et=et.concat(xe)}let ct=et.reduce((at,Ct)=>at.includes(Ct.message)?at:[...at,Ct.message],[]);if(L.length>0){let at=it(L);await g(at)}if(ct.length>0){let at=new Error((0,en.__)("There was an error installing fonts."));throw at.installationErrors=ct,at}}finally{l(!1)}}async function y(S){if(!S?.id)throw new Error((0,en.__)("Font family to uninstall is not defined."));try{await o("postType","wp_font_family",S.id,{force:!0});let L=I(S);return await g(L),{deleted:!0}}catch(L){throw console.error("There was an error uninstalling the font family:",L),L}}let I=S=>{let et=(d?.[S.source??""]??[]).filter(at=>at.slug!==S.slug),ct={...d,[S.source??""]:et};return h(ct),S.fontFace&&S.fontFace.forEach(at=>{no(at,"all")}),ct},it=S=>{let L=ot(S),et={...d,custom:Ii(d?.custom,L)};return h(et),K(L),et},ot=S=>S.map(({id:L,fontFace:et,...ct})=>({...ct,...et&&et.length>0?{fontFace:et.map(({id:at,...Ct})=>Ct)}:{}})),K=S=>{S.forEach(L=>{L.fontFace&&L.fontFace.forEach(et=>{let ct=Nr(et?.src??"");ct&&er(et,ct,"all")})})},gt=(S,L)=>{let et=d?.[S.source??""]??[],ct=Mo(S,L,et);h({...d,[S.source??""]:ct});let at=$(S.slug,L?.fontStyle??"",L?.fontWeight??"",S.source??"custom");if(L&&at)no(L,"all");else{let Ct=Nr(L?.src??"");L&&Ct&&er(L,Ct,"all")}},R=async S=>{if(!S.src)return;let L=Nr(S.src);!L||E.has(L)||(er(S,L,"document"),E.add(L))};return(0,Mi.jsx)(ne.Provider,{value:{libraryFontSelected:A,handleSetLibraryFontSelected:q,fontFamilies:d??{},baseCustomFonts:T,isFontActivated:$,getFontFacesActivated:bt,loadFontFaceAsset:R,installFonts:W,uninstallFontFamily:y,toggleActivateFont:gt,getAvailableFontsOutline:D,modalTabOpen:v,setModalTabOpen:_,saveFontFamilies:g,isResolvingLibrary:f,isInstalling:n},children:t})}var Go=qf;var rs=u(ut(),1),an=u(Y(),1),xl=u(be(),1),Zp=u(fe(),1);var ht=u(Y(),1),io=u(be(),1),rn=u(fe(),1),wr=u(vt(),1),Lt=u(ut(),1);var Mr=u(ut(),1),Oe=u(Y(),1);var Gi=u(Y(),1),Ve=u(vt(),1);var jo=u(z(),1);function Zf(t){if(t.preview)return t.preview;if(t.src)return Array.isArray(t.src)?t.src[0]:t.src}function Yf(t){return"fontStyle"in t&&t.fontStyle||"fontWeight"in t&&t.fontWeight?t:"fontFace"in t&&t.fontFace&&t.fontFace.length?t.fontFace.find(e=>e.fontStyle==="normal"&&e.fontWeight==="400")||t.fontFace[0]:{fontStyle:"normal",fontWeight:"400",fontFamily:t.fontFamily}}function Xf({font:t,text:e}){let r=(0,Ve.useRef)(null),o=Yf(t),s=Er(t);e=e||("name"in t?t.name:"");let a=t.preview,[n,l]=(0,Ve.useState)(!1),[m,f]=(0,Ve.useState)(!1),{loadFontFaceAsset:c}=(0,Ve.useContext)(ne),d=a??Zf(o),h=d&&d.match(/\.(png|jpg|jpeg|gif|svg)$/i),g=Ya(o),v={fontSize:"18px",lineHeight:1,opacity:m?"1":"0",...s,...g};return(0,Ve.useEffect)(()=>{let _=new window.IntersectionObserver(([A])=>{l(A.isIntersecting)},{});return r.current&&_.observe(r.current),()=>_.disconnect()},[r]),(0,Ve.useEffect)(()=>{(async()=>n&&(!h&&o.src&&await c(o),f(!0)))()},[o,n,c,h]),(0,jo.jsx)("div",{ref:r,children:h?(0,jo.jsx)("img",{src:d,loading:"lazy",alt:e,className:"font-library__font-variant_demo-image"}):(0,jo.jsx)(Gi.__experimentalText,{style:v,className:"font-library__font-variant_demo-text",children:e})})}var zr=Xf;var De=u(z(),1);function Kf({font:t,onClick:e,variantsText:r,navigatorPath:o}){let s=t.fontFace?.length||1,a={cursor:e?"pointer":"default"},n=(0,Oe.useNavigator)();return(0,De.jsx)(Oe.Button,{__next40pxDefaultSize:!0,onClick:()=>{e(),o&&n.goTo(o)},style:a,className:"font-library__font-card",children:(0,De.jsxs)(Oe.Flex,{justify:"space-between",wrap:!1,children:[(0,De.jsx)(zr,{font:t}),(0,De.jsxs)(Oe.Flex,{justify:"flex-end",children:[(0,De.jsx)(Oe.FlexItem,{children:(0,De.jsx)(Oe.__experimentalText,{className:"font-library__font-card__count",children:r||(0,Mr.sprintf)((0,Mr._n)("%d variant","%d variants",s),s)})}),(0,De.jsx)(Oe.FlexItem,{children:(0,De.jsx)(eo,{icon:(0,Mr.isRTL)()?cr:dr})})]})]})})}var ao=Kf;var Uo=u(vt(),1),Ho=u(Y(),1);var br=u(z(),1);function Jf({face:t,font:e}){let{isFontActivated:r,toggleActivateFont:o}=(0,Uo.useContext)(ne),s=(e?.fontFace?.length??0)>0?r(e.slug,t.fontStyle,t.fontWeight,e.source):r(e.slug,void 0,void 0,e.source),a=()=>{if((e?.fontFace?.length??0)>0){o(e,t);return}o(e)},n=e.name+" "+zo(t),l=(0,Uo.useId)();return(0,br.jsx)("div",{className:"font-library__font-card",children:(0,br.jsxs)(Ho.Flex,{justify:"flex-start",align:"center",gap:"1rem",children:[(0,br.jsx)(Ho.CheckboxControl,{checked:s,onChange:a,id:l}),(0,br.jsx)("label",{htmlFor:l,children:(0,br.jsx)(zr,{font:t,text:n,onClick:a})})]})})}var ji=Jf;function Ui(t){switch(t){case"normal":return 400;case"bold":return 700;case"bolder":return 500;case"lighter":return 300;default:return parseInt(t,10)}}function Wo(t){return t.sort((e,r)=>e.fontStyle==="normal"&&r.fontStyle!=="normal"?-1:r.fontStyle==="normal"&&e.fontStyle!=="normal"?1:e.fontStyle===r.fontStyle?Ui(e.fontWeight?.toString()??"normal")-Ui(r.fontWeight?.toString()??"normal"):!e.fontStyle||!r.fontStyle?e.fontStyle?-1:1:e.fontStyle.localeCompare(r.fontStyle))}var ft=u(z(),1);function Qf(){let{baseCustomFonts:t,libraryFontSelected:e,handleSetLibraryFontSelected:r,uninstallFontFamily:o,isResolvingLibrary:s,isInstalling:a,saveFontFamilies:n,getFontFacesActivated:l}=(0,wr.useContext)(ne),[m,f]=_t("typography.fontFamilies"),[c,d]=(0,wr.useState)(!1),[h,g]=(0,wr.useState)(null),[v]=_t("typography.fontFamilies",void 0,"base"),_=(0,rn.useSelect)(R=>{let{__experimentalGetCurrentGlobalStylesId:S}=R(io.store);return S()},[]),k=!!(0,io.useEntityRecord)("root","globalStyles",_)?.edits?.settings?.typography?.fontFamilies,x=m?.theme?m.theme.map(R=>tr(R,{source:"theme"})).sort((R,S)=>R.name.localeCompare(S.name)):[],b=new Set(x.map(R=>R.slug)),T=v?.theme?x.concat(v.theme.filter(R=>!b.has(R.slug)).map(R=>tr(R,{source:"theme"})).sort((R,S)=>R.name.localeCompare(S.name))):[],q=e?.source==="custom"&&e?.id,E=(0,rn.useSelect)(R=>{let{canUser:S}=R(io.store);return q&&S("delete",{kind:"postType",name:"wp_font_family",id:q})},[q]),D=!!e&&e?.source!=="theme"&&E,H=()=>{d(!0)},$=async()=>{g(null);try{await n(m),g({type:"success",message:(0,Lt.__)("Font family updated successfully.")})}catch(R){g({type:"error",message:(0,Lt.sprintf)((0,Lt.__)("There was an error updating the font family. %s"),R.message)})}},bt=R=>R?!R.fontFace||!R.fontFace.length?[{fontFamily:R.fontFamily,fontStyle:"normal",fontWeight:"400"}]:Wo(R.fontFace):[],W=R=>{let S=R?.fontFace&&(R?.fontFace?.length??0)>0?R.fontFace.length:1,L=l(R.slug,R.source).length;return(0,Lt.sprintf)((0,Lt.__)("%1$d/%2$d variants active"),L,S)};(0,wr.useEffect)(()=>{r(e)},[]);let y=e?l(e.slug,e.source).length:0,I=e?.fontFace?.length??(e?.fontFamily?1:0),it=y>0&&y!==I,ot=y===I,K=()=>{if(!e||!e?.source)return;let R=m?.[e.source]?.filter(L=>L.slug!==e.slug)??[],S=ot?R:[...R,e];f({...m,[e.source]:S}),e.fontFace&&e.fontFace.forEach(L=>{if(ot)no(L,"all");else{let et=Nr(L?.src??"");et&&er(L,et,"all")}})},gt=T.length>0||t.length>0;return(0,ft.jsxs)("div",{className:"font-library__tabpanel-layout",children:[s&&(0,ft.jsx)("div",{className:"font-library__loading",children:(0,ft.jsx)(ht.ProgressBar,{})}),!s&&(0,ft.jsxs)(ft.Fragment,{children:[(0,ft.jsxs)(ht.Navigator,{initialPath:e?"/fontFamily":"/",children:[(0,ft.jsx)(ht.Navigator.Screen,{path:"/",children:(0,ft.jsxs)(ht.__experimentalVStack,{spacing:"8",children:[h&&(0,ft.jsx)(ht.Notice,{status:h.type,onRemove:()=>g(null),children:h.message}),!gt&&(0,ft.jsx)(ht.__experimentalText,{as:"p",children:(0,Lt.__)("No fonts installed.")}),T.length>0&&(0,ft.jsxs)(ht.__experimentalVStack,{children:[(0,ft.jsx)("h2",{className:"font-library__fonts-title",children:(0,Lt._x)("Theme","font source")}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:T.map(R=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(ao,{font:R,navigatorPath:"/fontFamily",variantsText:W(R),onClick:()=>{g(null),r(R)}})},R.slug))})]}),t.length>0&&(0,ft.jsxs)(ht.__experimentalVStack,{children:[(0,ft.jsx)("h2",{className:"font-library__fonts-title",children:(0,Lt._x)("Custom","font source")}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:t.map(R=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(ao,{font:R,navigatorPath:"/fontFamily",variantsText:W(R),onClick:()=>{g(null),r(R)}})},R.slug))})]})]})}),(0,ft.jsxs)(ht.Navigator.Screen,{path:"/fontFamily",children:[e&&(0,ft.jsx)($f,{font:e,isOpen:c,setIsOpen:d,setNotice:g,uninstallFontFamily:o,handleSetLibraryFontSelected:r}),(0,ft.jsxs)(ht.Flex,{justify:"flex-start",children:[(0,ft.jsx)(ht.Navigator.BackButton,{icon:(0,Lt.isRTL)()?dr:cr,size:"small",onClick:()=>{r(void 0),g(null)},label:(0,Lt.__)("Back")}),(0,ft.jsx)(ht.__experimentalHeading,{level:2,size:13,className:"global-styles-ui-header",children:e?.name})]}),h&&(0,ft.jsxs)(ft.Fragment,{children:[(0,ft.jsx)(ht.__experimentalSpacer,{margin:1}),(0,ft.jsx)(ht.Notice,{status:h.type,onRemove:()=>g(null),children:h.message}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:1})]}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:4}),(0,ft.jsx)(ht.__experimentalText,{children:(0,Lt.__)("Choose font variants. Keep in mind that too many variants could make your site slower.")}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:4}),(0,ft.jsxs)(ht.__experimentalVStack,{spacing:0,children:[(0,ft.jsx)(ht.CheckboxControl,{className:"font-library__select-all",label:(0,Lt.__)("Select all"),checked:ot,onChange:K,indeterminate:it}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:8}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:e&&bt(e).map((R,S)=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(ji,{font:e,face:R},`face${S}`)},`face${S}`))})]})]})]}),(0,ft.jsxs)(ht.__experimentalHStack,{justify:"flex-end",className:"font-library__footer",children:[a&&(0,ft.jsx)(ht.ProgressBar,{}),D&&(0,ft.jsx)(ht.Button,{__next40pxDefaultSize:!0,isDestructive:!0,variant:"tertiary",onClick:H,children:(0,Lt.__)("Delete")}),(0,ft.jsx)(ht.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:$,disabled:!k,accessibleWhenDisabled:!0,children:(0,Lt.__)("Update")})]})]})]})}function $f({font:t,isOpen:e,setIsOpen:r,setNotice:o,uninstallFontFamily:s,handleSetLibraryFontSelected:a}){let n=(0,ht.useNavigator)(),l=async()=>{o(null),r(!1);try{await s(t),n.goBack(),a(void 0),o({type:"success",message:(0,Lt.__)("Font family uninstalled successfully.")})}catch(f){o({type:"error",message:(0,Lt.__)("There was an error uninstalling the font family.")+f.message})}},m=()=>{r(!1)};return(0,ft.jsx)(ht.__experimentalConfirmDialog,{isOpen:e,cancelButtonText:(0,Lt.__)("Cancel"),confirmButtonText:(0,Lt.__)("Delete"),onCancel:m,onConfirm:l,size:"medium",children:t&&(0,Lt.sprintf)((0,Lt.__)('Are you sure you want to delete "%s" font and all its variants and assets?'),t.name)})}var qo=Qf;var Yt=u(vt(),1),nt=u(Y(),1),Ji=u(ur(),1),Rt=u(ut(),1);var Qi=u(be(),1);function Hi(t,e){let{category:r,search:o}=e,s=t||[];return r&&r!=="all"&&(s=s.filter(a=>a.categories&&a.categories.indexOf(r)!==-1)),o&&(s=s.filter(a=>a.font_family_settings&&a.font_family_settings.name.toLowerCase().includes(o.toLowerCase()))),s}function Wi(t){return t.reduce((e,r)=>({...e,[r.slug]:(r?.fontFace||[]).reduce((o,s)=>({...o,[`${s.fontStyle}-${s.fontWeight}`]:!0}),{})}),{})}function qi(t,e,r){return e?!!r[t]?.[`${e.fontStyle}-${e.fontWeight}`]:!!r[t]}var lo=u(ut(),1),ae=u(Y(),1),Te=u(z(),1);function tc(){let t=()=>{window.localStorage.setItem("wp-font-library-google-fonts-permission","true"),window.dispatchEvent(new Event("storage"))};return(0,Te.jsx)("div",{className:"font-library__google-fonts-confirm",children:(0,Te.jsx)(ae.Card,{children:(0,Te.jsxs)(ae.CardBody,{children:[(0,Te.jsx)(ae.__experimentalHeading,{level:2,children:(0,lo.__)("Connect to Google Fonts")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:6}),(0,Te.jsx)(ae.__experimentalText,{as:"p",children:(0,lo.__)("To install fonts from Google you must give permission to connect directly to Google servers. The fonts you install will be downloaded from Google and stored on your site. Your site will then use these locally-hosted fonts.")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:3}),(0,Te.jsx)(ae.__experimentalText,{as:"p",children:(0,lo.__)("You can alternatively upload files directly on the Upload tab.")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:6}),(0,Te.jsx)(ae.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:t,children:(0,lo.__)("Allow access to Google Fonts")})]})})})}var Zi=tc;var Yi=u(vt(),1),Zo=u(Y(),1);var Sr=u(z(),1);function ec({face:t,font:e,handleToggleVariant:r,selected:o}){let s=()=>{if(e?.fontFace){r(e,t);return}r(e)},a=e.name+" "+zo(t),n=(0,Yi.useId)();return(0,Sr.jsx)("div",{className:"font-library__font-card",children:(0,Sr.jsxs)(Zo.Flex,{justify:"flex-start",align:"center",gap:"1rem",children:[(0,Sr.jsx)(Zo.CheckboxControl,{checked:o,onChange:s,id:n}),(0,Sr.jsx)("label",{htmlFor:n,children:(0,Sr.jsx)(zr,{font:t,text:a,onClick:s})})]})})}var Xi=ec;var tt=u(z(),1),rc={slug:"all",name:(0,Rt._x)("All","font categories")},Ki="wp-font-library-google-fonts-permission",oc=500;function sc({slug:t}){let e=t==="google-fonts",r=()=>window.localStorage.getItem(Ki)==="true",[o,s]=(0,Yt.useState)(null),[a,n]=(0,Yt.useState)(null),[l,m]=(0,Yt.useState)([]),[f,c]=(0,Yt.useState)(1),[d,h]=(0,Yt.useState)({}),[g,v]=(0,Yt.useState)(e&&!r()),{installFonts:_,isInstalling:A}=(0,Yt.useContext)(ne),{record:k,isResolving:x}=(0,Qi.useEntityRecord)("root","fontCollection",t);(0,Yt.useEffect)(()=>{let J=()=>{v(e&&!r())};return J(),window.addEventListener("storage",J),()=>window.removeEventListener("storage",J)},[t,e]);let b=()=>{window.localStorage.setItem(Ki,"false"),window.dispatchEvent(new Event("storage"))};(0,Yt.useEffect)(()=>{s(null)},[t]),(0,Yt.useEffect)(()=>{m([])},[o]);let T=(0,Yt.useMemo)(()=>k?.font_families??[],[k]),q=k?.categories??[],E=[rc,...q],D=(0,Yt.useMemo)(()=>Hi(T,d),[T,d]),H=Math.max(window.innerHeight,oc),$=Math.floor((H-417)/61),bt=Math.ceil(D.length/$),W=(f-1)*$,y=f*$,I=D.slice(W,y),it=J=>{h({...d,category:J}),c(1)},K=(0,Ji.debounce)(J=>{h({...d,search:J}),c(1)},300),gt=(J,St)=>{let At=Mo(J,St,l);m(At)},R=Wi(l),S=()=>{m([])},L=l.length>0?l[0]?.fontFace?.length??0:0,et=L>0&&L!==o?.fontFace?.length,ct=L===o?.fontFace?.length,at=()=>{let J=[];!ct&&o&&J.push(o),m(J)},Ct=async()=>{n(null);let J=l[0];try{J?.fontFace&&await Promise.all(J.fontFace.map(async St=>{St.src&&(St.file=await Ni(St.src))}))}catch{n({type:"error",message:(0,Rt.__)("Error installing the fonts, could not be downloaded.")});return}try{await _([J]),n({type:"success",message:(0,Rt.__)("Fonts were installed successfully.")})}catch(St){n({type:"error",message:St.message})}S()},Ht=J=>J?!J.fontFace||!J.fontFace.length?[{fontFamily:J.fontFamily,fontStyle:"normal",fontWeight:"400"}]:Wo(J.fontFace):[];if(g)return(0,tt.jsx)(Zi,{});let Ot=()=>t!=="google-fonts"||g||o?null:(0,tt.jsx)(nt.DropdownMenu,{icon:Es,label:(0,Rt.__)("Actions"),popoverProps:{position:"bottom left"},controls:[{title:(0,Rt.__)("Revoke access to Google Fonts"),onClick:b}]});return(0,tt.jsxs)("div",{className:"font-library__tabpanel-layout",children:[x&&(0,tt.jsx)("div",{className:"font-library__loading",children:(0,tt.jsx)(nt.ProgressBar,{})}),!x&&k&&(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsxs)(nt.Navigator,{initialPath:"/",className:"font-library__tabpanel-layout",children:[(0,tt.jsxs)(nt.Navigator.Screen,{path:"/",children:[(0,tt.jsxs)(nt.__experimentalHStack,{justify:"space-between",children:[(0,tt.jsxs)(nt.__experimentalVStack,{children:[(0,tt.jsx)(nt.__experimentalHeading,{level:2,size:13,children:k.name}),(0,tt.jsx)(nt.__experimentalText,{children:k.description})]}),(0,tt.jsx)(Ot,{})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsxs)(nt.__experimentalHStack,{spacing:4,justify:"space-between",children:[(0,tt.jsx)(nt.SearchControl,{value:d.search,placeholder:(0,Rt.__)("Font name\u2026"),label:(0,Rt.__)("Search"),onChange:K,hideLabelFromVision:!1}),(0,tt.jsx)(nt.SelectControl,{__next40pxDefaultSize:!0,label:(0,Rt.__)("Category"),value:d.category,onChange:it,children:E&&E.map(J=>(0,tt.jsx)("option",{value:J.slug,children:J.name},J.slug))})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),!!k?.font_families?.length&&!D.length&&(0,tt.jsx)(nt.__experimentalText,{children:(0,Rt.__)("No fonts found. Try with a different search term.")}),(0,tt.jsx)("div",{className:"font-library__fonts-grid__main",children:(0,tt.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:I.map(J=>(0,tt.jsx)("li",{className:"font-library__fonts-list-item",children:(0,tt.jsx)(ao,{font:J.font_family_settings,navigatorPath:"/fontFamily",onClick:()=>{s(J.font_family_settings)}})},J.font_family_settings.slug))})})]}),(0,tt.jsxs)(nt.Navigator.Screen,{path:"/fontFamily",children:[(0,tt.jsxs)(nt.Flex,{justify:"flex-start",children:[(0,tt.jsx)(nt.Navigator.BackButton,{icon:(0,Rt.isRTL)()?dr:cr,size:"small",onClick:()=>{s(null),n(null)},label:(0,Rt.__)("Back")}),(0,tt.jsx)(nt.__experimentalHeading,{level:2,size:13,className:"global-styles-ui-header",children:o?.name})]}),a&&(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsx)(nt.__experimentalSpacer,{margin:1}),(0,tt.jsx)(nt.Notice,{status:a.type,onRemove:()=>n(null),children:a.message}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:1})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsx)(nt.__experimentalText,{children:(0,Rt.__)("Select font variants to install.")}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsx)(nt.CheckboxControl,{className:"font-library__select-all",label:(0,Rt.__)("Select all"),checked:ct,onChange:at,indeterminate:et}),(0,tt.jsx)(nt.__experimentalVStack,{spacing:0,children:(0,tt.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:o&&Ht(o).map((J,St)=>(0,tt.jsx)("li",{className:"font-library__fonts-list-item",children:(0,tt.jsx)(Xi,{font:o,face:J,handleToggleVariant:gt,selected:qi(o.slug,o.fontFace?J:null,R)})},`face${St}`))})}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:16})]})]}),o&&(0,tt.jsx)(nt.Flex,{justify:"flex-end",className:"font-library__footer",children:(0,tt.jsx)(nt.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:Ct,isBusy:A,disabled:l.length===0||A,accessibleWhenDisabled:!0,children:(0,Rt.__)("Install")})}),!o&&(0,tt.jsxs)(nt.__experimentalHStack,{expanded:!1,className:"font-library__footer",justify:"end",spacing:6,children:[(0,tt.jsx)(nt.__experimentalHStack,{justify:"flex-start",expanded:!1,spacing:1,className:"font-library__page-selection",children:(0,Yt.createInterpolateElement)((0,Rt.sprintf)((0,Rt._x)("
      Page
      %1$s
      of %2$d
      ","paging"),"",bt),{div:(0,tt.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,tt.jsx)(nt.SelectControl,{"aria-label":(0,Rt.__)("Current page"),value:f.toString(),options:[...Array(bt)].map((J,St)=>({label:(St+1).toString(),value:(St+1).toString()})),onChange:J=>c(parseInt(J)),size:"small",variant:"minimal"})})}),(0,tt.jsxs)(nt.__experimentalHStack,{expanded:!1,spacing:1,children:[(0,tt.jsx)(nt.Button,{onClick:()=>c(f-1),disabled:f===1,accessibleWhenDisabled:!0,label:(0,Rt.__)("Previous page"),icon:(0,Rt.isRTL)()?To:Po,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,tt.jsx)(nt.Button,{onClick:()=>c(f+1),disabled:f===bt,accessibleWhenDisabled:!0,label:(0,Rt.__)("Next page"),icon:(0,Rt.isRTL)()?Po:To,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})]})]})}var Yo=sc;var Gr=u(ut(),1),$t=u(Y(),1),fo=u(vt(),1);var Xo=(t=>typeof ue<"u"?ue:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof ue<"u"?ue:e)[r]}):t)(function(t){if(typeof ue<"u")return ue.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),$i=(function(){var t,e,r;return(function(){function o(s,a,n){function l(c,d){if(!a[c]){if(!s[c]){var h=typeof Xo=="function"&&Xo;if(!d&&h)return h(c,!0);if(m)return m(c,!0);var g=new Error("Cannot find module '"+c+"'");throw g.code="MODULE_NOT_FOUND",g}var v=a[c]={exports:{}};s[c][0].call(v.exports,function(_){var A=s[c][1][_];return l(A||_)},v,v.exports,o,s,a,n)}return a[c].exports}for(var m=typeof Xo=="function"&&Xo,f=0;f0},c.prototype.readMoreInput=function(){if(!(this.bit_end_pos_>256))if(this.eos_){if(this.bit_pos_>this.bit_end_pos_)throw new Error("Unexpected end of input "+this.bit_pos_+" "+this.bit_end_pos_)}else{var d=this.buf_ptr_,h=this.input_.read(this.buf_,d,n);if(h<0)throw new Error("Unexpected end of input");if(h=8;)this.val_>>>=8,this.val_|=this.buf_[this.pos_&m]<<24,++this.pos_,this.bit_pos_=this.bit_pos_-8>>>0,this.bit_end_pos_=this.bit_end_pos_-8>>>0},c.prototype.readBits=function(d){32-this.bit_pos_>>this.bit_pos_&f[d];return this.bit_pos_+=d,h},s.exports=c},{}],2:[function(o,s,a){var n=0,l=1,m=2,f=3;a.lookup=new Uint8Array([0,0,0,0,0,0,0,0,0,4,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,12,16,12,12,20,12,16,24,28,12,12,32,12,36,12,44,44,44,44,44,44,44,44,44,44,32,32,24,40,28,12,12,48,52,52,52,48,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,24,12,28,12,12,12,56,60,60,60,56,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,24,12,28,12,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,56,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),a.lookupOffsets=new Uint16Array([1024,1536,1280,1536,0,256,768,512])},{}],3:[function(o,s,a){var n=o("./streams").BrotliInput,l=o("./streams").BrotliOutput,m=o("./bit_reader"),f=o("./dictionary"),c=o("./huffman").HuffmanCode,d=o("./huffman").BrotliBuildHuffmanTable,h=o("./context"),g=o("./prefix"),v=o("./transform"),_=8,A=16,k=256,x=704,b=26,T=6,q=2,E=8,D=255,H=1080,$=18,bt=new Uint8Array([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),W=16,y=new Uint8Array([3,2,1,0,3,3,3,3,3,3,2,2,2,2,2,2]),I=new Int8Array([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),it=new Uint16Array([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);function ot(N){var O;return N.readBits(1)===0?16:(O=N.readBits(3),O>0?17+O:(O=N.readBits(3),O>0?8+O:17))}function K(N){if(N.readBits(1)){var O=N.readBits(3);return O===0?1:N.readBits(O)+(1<1&&dt===0)throw new Error("Invalid size byte");O.meta_block_length|=dt<4&&rt===0)throw new Error("Invalid size nibble");O.meta_block_length|=rt<>>B.bit_pos_&D,V=N[O].bits-E,V>0&&(B.bit_pos_+=E,O+=N[O].value,O+=B.val_>>>B.bit_pos_&(1<0;){var Ft=0,Kt;if(P.readMoreInput(),P.fillBitWindow(),Ft+=P.val_>>>P.bit_pos_&31,P.bit_pos_+=lt[Ft].bits,Kt=lt[Ft].value&255,Kt>Kt);else{var he=Kt-14,te,Jt,Vt=0;if(Kt===A&&(Vt=dt),st!==Vt&&(rt=0,st=Vt),te=rt,rt>0&&(rt-=2,rt<<=he),rt+=P.readBits(he)+3,Jt=rt-te,V+Jt>O)throw new Error("[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols");for(var Qt=0;Qt0;++st){var Vt=bt[st],Qt=0,ee;P.fillBitWindow(),Qt+=P.val_>>>P.bit_pos_&15,P.bit_pos_+=Jt[Qt].bits,ee=Jt[Qt].value,Kt[Vt]=ee,ee!==0&&(he-=32>>ee,++te)}if(!(te===1||he===0))throw new Error("[ReadHuffmanCode] invalid num_codes or space");L(Kt,N,rt,P)}if(V=d(O,B,E,rt,N),V===0)throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");return V}function ct(N,O,B){var P,V;return P=S(N,O,B),V=g.kBlockLengthPrefixCode[P].nbits,g.kBlockLengthPrefixCode[P].offset+B.readBits(V)}function at(N,O,B){var P;return N>>5]),this.htrees=new Uint32Array(O)}Ot.prototype.decode=function(N){var O,B,P=0;for(O=0;O=N)throw new Error("[DecodeContextMap] i >= context_map_size");wt[rt]=0,++rt}else wt[rt]=lt-V,++rt}return O.readBits(1)&&Ht(wt,N),B}function St(N,O,B,P,V,dt,rt){var st=B*2,wt=B,lt=S(O,B*H,rt),Z;lt===0?Z=V[st+(dt[wt]&1)]:lt===1?Z=V[st+(dt[wt]-1&1)]+1:Z=lt-2,Z>=N&&(Z-=N),P[B]=Z,V[st+(dt[wt]&1)]=Z,++dt[wt]}function At(N,O,B,P,V,dt){var rt=V+1,st=B&V,wt=dt.pos_&m.IBUF_MASK,lt;if(O<8||dt.bit_pos_+(O<<3)0;)dt.readMoreInput(),P[st++]=dt.readBits(8),st===rt&&(N.write(P,rt),st=0);return}if(dt.bit_end_pos_<32)throw new Error("[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32");for(;dt.bit_pos_<32;)P[st]=dt.val_>>>dt.bit_pos_,dt.bit_pos_+=8,++st,--O;if(lt=dt.bit_end_pos_-dt.bit_pos_>>3,wt+lt>m.IBUF_MASK){for(var Z=m.IBUF_MASK+1-wt,Ft=0;Ft=rt){N.write(P,rt),st-=rt;for(var Ft=0;Ft=rt;){if(lt=rt-st,dt.input_.read(P,st,lt)O.buffer.length){var lr=new Uint8Array(P+Mt);lr.set(O.buffer),O.buffer=lr}if(V=ze.input_end,vo=ze.is_uncompressed,ze.is_metadata){for(xe(pt);Mt>0;--Mt)pt.readMoreInput(),pt.readBits(8);continue}if(Mt!==0){if(vo){pt.bit_pos_=pt.bit_pos_+7&-8,At(O,Mt,P,Z,lt,pt),P+=Mt;continue}for(B=0;B<3;++B)ge[B]=K(pt)+1,ge[B]>=2&&(et(ge[B]+2,Qt,B*H,pt),et(b,ee,B*H,pt),Ce[B]=ct(ee,B*H,pt),M[B]=1);for(pt.readMoreInput(),i=pt.readBits(2),U=W+(pt.readBits(4)<0;){var Nt,se,ie,Or,ps,le,ye,Me,qr,Tr,Zr;for(pt.readMoreInput(),Ce[1]===0&&(St(ge[1],Qt,1,Ae,w,M,pt),Ce[1]=ct(ee,H,pt),Wt=Vt[1].htrees[Ae[1]]),--Ce[1],Nt=S(Vt[1].codes,Wt,pt),se=Nt>>6,se>=2?(se-=2,ye=-1):ye=0,ie=g.kInsertRangeLut[se]+(Nt>>3&7),Or=g.kCopyRangeLut[se]+(Nt&7),ps=g.kInsertLengthPrefixCode[ie].offset+pt.readBits(g.kInsertLengthPrefixCode[ie].nbits),le=g.kCopyLengthPrefixCode[Or].offset+pt.readBits(g.kCopyLengthPrefixCode[Or].nbits),te=Z[P-1<],Jt=Z[P-2<],Tr=0;Tr4?3:le-2)&255,Et=F[ir+qr],ye=S(Vt[2].codes,Vt[2].htrees[Et],pt),ye>=U){var hs,Nn,Yr;ye-=U,Nn=ye&Pt,ye>>=i,hs=(ye>>1)+1,Yr=(2+(ye&1)<st)if(le>=f.minDictionaryWordLength&&le<=f.maxDictionaryWordLength){var Yr=f.offsetsByLength[le],zn=Me-st-1,Mn=f.sizeBitsByLength[le],gu=(1<>Mn;if(Yr+=yu*le,Gn=Ft){O.write(Z,wt);for(var bo=0;bo0&&(Kt[he&3]=Me,++he),le>Mt)throw new Error("Invalid backward reference. pos: "+P+" distance: "+Me+" len: "+le+" bytes left: "+Mt);for(Tr=0;Tr>=1;return(d&g-1)+g}function f(d,h,g,v,_){do v-=g,d[h+v]=new n(_.bits,_.value);while(v>0)}function c(d,h,g){for(var v=1<0;--y[x])k=new n(x&255,W[b++]&65535),f(d,h+T,q,$,k),T=m(T,x);for(D=bt-1,E=-1,x=g+1,q=2;x<=l;++x,q<<=1)for(;y[x]>0;--y[x])(T&D)!==E&&(h+=$,H=c(y,x,g),$=1<>g),q,$,k),T=m(T,x);return bt}},{}],8:[function(o,s,a){"use strict";a.byteLength=g,a.toByteArray=_,a.fromByteArray=x;for(var n=[],l=[],m=typeof Uint8Array<"u"?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=0,d=f.length;c0)throw new Error("Invalid string. Length must be a multiple of 4");var q=b.indexOf("=");q===-1&&(q=T);var E=q===T?0:4-q%4;return[q,E]}function g(b){var T=h(b),q=T[0],E=T[1];return(q+E)*3/4-E}function v(b,T,q){return(T+q)*3/4-q}function _(b){for(var T,q=h(b),E=q[0],D=q[1],H=new m(v(b,E,D)),$=0,bt=D>0?E-4:E,W=0;W>16&255,H[$++]=T>>8&255,H[$++]=T&255;return D===2&&(T=l[b.charCodeAt(W)]<<2|l[b.charCodeAt(W+1)]>>4,H[$++]=T&255),D===1&&(T=l[b.charCodeAt(W)]<<10|l[b.charCodeAt(W+1)]<<4|l[b.charCodeAt(W+2)]>>2,H[$++]=T>>8&255,H[$++]=T&255),H}function A(b){return n[b>>18&63]+n[b>>12&63]+n[b>>6&63]+n[b&63]}function k(b,T,q){for(var E,D=[],H=T;Hbt?bt:$+H));return E===1?(T=b[q-1],D.push(n[T>>2]+n[T<<4&63]+"==")):E===2&&(T=(b[q-2]<<8)+b[q-1],D.push(n[T>>10]+n[T>>4&63]+n[T<<2&63]+"=")),D.join("")}},{}],9:[function(o,s,a){function n(l,m){this.offset=l,this.nbits=m}a.kBlockLengthPrefixCode=[new n(1,2),new n(5,2),new n(9,2),new n(13,2),new n(17,3),new n(25,3),new n(33,3),new n(41,3),new n(49,4),new n(65,4),new n(81,4),new n(97,4),new n(113,5),new n(145,5),new n(177,5),new n(209,5),new n(241,6),new n(305,6),new n(369,7),new n(497,8),new n(753,9),new n(1265,10),new n(2289,11),new n(4337,12),new n(8433,13),new n(16625,24)],a.kInsertLengthPrefixCode=[new n(0,0),new n(1,0),new n(2,0),new n(3,0),new n(4,0),new n(5,0),new n(6,1),new n(8,1),new n(10,2),new n(14,2),new n(18,3),new n(26,3),new n(34,4),new n(50,4),new n(66,5),new n(98,5),new n(130,6),new n(194,7),new n(322,8),new n(578,9),new n(1090,10),new n(2114,12),new n(6210,14),new n(22594,24)],a.kCopyLengthPrefixCode=[new n(2,0),new n(3,0),new n(4,0),new n(5,0),new n(6,0),new n(7,0),new n(8,0),new n(9,0),new n(10,1),new n(12,1),new n(14,2),new n(18,2),new n(22,3),new n(30,3),new n(38,4),new n(54,4),new n(70,5),new n(102,5),new n(134,6),new n(198,7),new n(326,8),new n(582,9),new n(1094,10),new n(2118,24)],a.kInsertRangeLut=[0,0,8,8,0,16,8,16,16],a.kCopyRangeLut=[0,8,0,8,16,0,16,8,16]},{}],10:[function(o,s,a){function n(m){this.buffer=m,this.pos=0}n.prototype.read=function(m,f,c){this.pos+c>this.buffer.length&&(c=this.buffer.length-this.pos);for(var d=0;dthis.buffer.length)throw new Error("Output buffer is not large enough");return this.buffer.set(m.subarray(0,f),this.pos),this.pos+=f,f},a.BrotliOutput=l},{}],11:[function(o,s,a){var n=o("./dictionary"),l=0,m=1,f=2,c=3,d=4,h=5,g=6,v=7,_=8,A=9,k=10,x=11,b=12,T=13,q=14,E=15,D=16,H=17,$=18,bt=19,W=20;function y(ot,K,gt){this.prefix=new Uint8Array(ot.length),this.transform=K,this.suffix=new Uint8Array(gt.length);for(var R=0;R'),new y("",l,` +`),new y("",c,""),new y("",l,"]"),new y("",l," for "),new y("",q,""),new y("",f,""),new y("",l," a "),new y("",l," that "),new y(" ",k,""),new y("",l,". "),new y(".",l,""),new y(" ",l,", "),new y("",E,""),new y("",l," with "),new y("",l,"'"),new y("",l," from "),new y("",l," by "),new y("",D,""),new y("",H,""),new y(" the ",l,""),new y("",d,""),new y("",l,". The "),new y("",x,""),new y("",l," on "),new y("",l," as "),new y("",l," is "),new y("",v,""),new y("",m,"ing "),new y("",l,` + `),new y("",l,":"),new y(" ",l,". "),new y("",l,"ed "),new y("",W,""),new y("",$,""),new y("",g,""),new y("",l,"("),new y("",k,", "),new y("",_,""),new y("",l," at "),new y("",l,"ly "),new y(" the ",l," of "),new y("",h,""),new y("",A,""),new y(" ",k,", "),new y("",k,'"'),new y(".",l,"("),new y("",x," "),new y("",k,'">'),new y("",l,'="'),new y(" ",l,"."),new y(".com/",l,""),new y(" the ",l," of the "),new y("",k,"'"),new y("",l,". This "),new y("",l,","),new y(".",l," "),new y("",k,"("),new y("",k,"."),new y("",l," not "),new y(" ",l,'="'),new y("",l,"er "),new y(" ",x," "),new y("",l,"al "),new y(" ",x,""),new y("",l,"='"),new y("",x,'"'),new y("",k,". "),new y(" ",l,"("),new y("",l,"ful "),new y(" ",k,". "),new y("",l,"ive "),new y("",l,"less "),new y("",x,"'"),new y("",l,"est "),new y(" ",k,"."),new y("",x,'">'),new y(" ",l,"='"),new y("",k,","),new y("",l,"ize "),new y("",x,"."),new y("\xC2\xA0",l,""),new y(" ",l,","),new y("",k,'="'),new y("",x,'="'),new y("",l,"ous "),new y("",x,", "),new y("",k,"='"),new y(" ",k,","),new y(" ",x,'="'),new y(" ",x,", "),new y("",x,","),new y("",x,"("),new y("",x,". "),new y(" ",x,"."),new y("",x,"='"),new y(" ",x,". "),new y(" ",k,'="'),new y(" ",x,"='"),new y(" ",k,"='")];a.kTransforms=I,a.kNumTransforms=I.length;function it(ot,K){return ot[K]<192?(ot[K]>=97&&ot[K]<=122&&(ot[K]^=32),1):ot[K]<224?(ot[K+1]^=32,2):(ot[K+2]^=5,3)}a.transformDictionaryWord=function(ot,K,gt,R,S){var L=I[S].prefix,et=I[S].suffix,ct=I[S].transform,at=ctR&&(at=R);for(var J=0;J0;){var St=it(ot,Ot);Ot+=St,R-=St}for(var At=0;Attypeof ue<"u"?ue:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof ue<"u"?ue:e)[r]}):t)(function(t){if(typeof ue<"u")return ue.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),tl=(function(){var t,e,r;return(function(){function o(s,a,n){function l(c,d){if(!a[c]){if(!s[c]){var h=typeof Ko=="function"&&Ko;if(!d&&h)return h(c,!0);if(m)return m(c,!0);var g=new Error("Cannot find module '"+c+"'");throw g.code="MODULE_NOT_FOUND",g}var v=a[c]={exports:{}};s[c][0].call(v.exports,function(_){var A=s[c][1][_];return l(A||_)},v,v.exports,o,s,a,n)}return a[c].exports}for(var m=typeof Ko=="function"&&Ko,f=0;f=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;f[254]=f[254]=1,a.string2buf=function(h){var g,v,_,A,k,x=h.length,b=0;for(A=0;A>>6,g[k++]=128|v&63):v<65536?(g[k++]=224|v>>>12,g[k++]=128|v>>>6&63,g[k++]=128|v&63):(g[k++]=240|v>>>18,g[k++]=128|v>>>12&63,g[k++]=128|v>>>6&63,g[k++]=128|v&63);return g};function d(h,g){if(g<65534&&(h.subarray&&m||!h.subarray&&l))return String.fromCharCode.apply(null,n.shrinkBuf(h,g));for(var v="",_=0;_4){b[_++]=65533,v+=k-1;continue}for(A&=k===2?31:k===3?15:7;k>1&&v1){b[_++]=65533;continue}A<65536?b[_++]=A:(A-=65536,b[_++]=55296|A>>10&1023,b[_++]=56320|A&1023)}return d(b,_)},a.utf8border=function(h,g){var v;for(g=g||h.length,g>h.length&&(g=h.length),v=g-1;v>=0&&(h[v]&192)===128;)v--;return v<0||v===0?g:v+f[h[v]]>g?v:g}},{"./common":1}],3:[function(o,s,a){"use strict";function n(l,m,f,c){for(var d=l&65535|0,h=l>>>16&65535|0,g=0;f!==0;){g=f>2e3?2e3:f,f-=g;do d=d+m[c++]|0,h=h+d|0;while(--g);d%=65521,h%=65521}return d|h<<16|0}s.exports=n},{}],4:[function(o,s,a){"use strict";s.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(o,s,a){"use strict";function n(){for(var f,c=[],d=0;d<256;d++){f=d;for(var h=0;h<8;h++)f=f&1?3988292384^f>>>1:f>>>1;c[d]=f}return c}var l=n();function m(f,c,d,h){var g=l,v=h+d;f^=-1;for(var _=h;_>>8^g[(f^c[_])&255];return f^-1}s.exports=m},{}],6:[function(o,s,a){"use strict";function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}s.exports=n},{}],7:[function(o,s,a){"use strict";var n=30,l=12;s.exports=function(f,c){var d,h,g,v,_,A,k,x,b,T,q,E,D,H,$,bt,W,y,I,it,ot,K,gt,R,S;d=f.state,h=f.next_in,R=f.input,g=h+(f.avail_in-5),v=f.next_out,S=f.output,_=v-(c-f.avail_out),A=v+(f.avail_out-257),k=d.dmax,x=d.wsize,b=d.whave,T=d.wnext,q=d.window,E=d.hold,D=d.bits,H=d.lencode,$=d.distcode,bt=(1<>>24,E>>>=I,D-=I,I=y>>>16&255,I===0)S[v++]=y&65535;else if(I&16){it=y&65535,I&=15,I&&(D>>=I,D-=I),D<15&&(E+=R[h++]<>>24,E>>>=I,D-=I,I=y>>>16&255,I&16){if(ot=y&65535,I&=15,Dk){f.msg="invalid distance too far back",d.mode=n;break t}if(E>>>=I,D-=I,I=v-_,ot>I){if(I=ot-I,I>b&&d.sane){f.msg="invalid distance too far back",d.mode=n;break t}if(K=0,gt=q,T===0){if(K+=x-I,I2;)S[v++]=gt[K++],S[v++]=gt[K++],S[v++]=gt[K++],it-=3;it&&(S[v++]=gt[K++],it>1&&(S[v++]=gt[K++]))}else{K=v-ot;do S[v++]=S[K++],S[v++]=S[K++],S[v++]=S[K++],it-=3;while(it>2);it&&(S[v++]=S[K++],it>1&&(S[v++]=S[K++]))}}else if((I&64)===0){y=$[(y&65535)+(E&(1<>3,h-=it,D-=it<<3,E&=(1<>>24&255)+(w>>>8&65280)+((w&65280)<<8)+((w&255)<<24)}function Kt(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function he(w){var M;return!w||!w.state?T:(M=w.state,w.total_in=w.total_out=M.total=0,w.msg="",M.wrap&&(w.adler=M.wrap&1),M.mode=$,M.last=0,M.havedict=0,M.dmax=32768,M.head=null,M.hold=0,M.bits=0,M.lencode=M.lendyn=new n.Buf32(st),M.distcode=M.distdyn=new n.Buf32(wt),M.sane=1,M.back=-1,k)}function te(w){var M;return!w||!w.state?T:(M=w.state,M.wsize=0,M.whave=0,M.wnext=0,he(w))}function Jt(w,M){var i,U;return!w||!w.state||(U=w.state,M<0?(i=0,M=-M):(i=(M>>4)+1,M<48&&(M&=15)),M&&(M<8||M>15))?T:(U.window!==null&&U.wbits!==M&&(U.window=null),U.wrap=i,U.wbits=M,te(w))}function Vt(w,M){var i,U;return w?(U=new Kt,w.state=U,U.window=null,i=Jt(w,M),i!==k&&(w.state=null),i):T}function Qt(w){return Vt(w,Z)}var ee=!0,pt,Wr;function kr(w){if(ee){var M;for(pt=new n.Buf32(512),Wr=new n.Buf32(32),M=0;M<144;)w.lens[M++]=8;for(;M<256;)w.lens[M++]=9;for(;M<280;)w.lens[M++]=7;for(;M<288;)w.lens[M++]=8;for(c(h,w.lens,0,288,pt,0,w.work,{bits:9}),M=0;M<32;)w.lens[M++]=5;c(g,w.lens,0,32,Wr,0,w.work,{bits:5}),ee=!1}w.lencode=pt,w.lenbits=9,w.distcode=Wr,w.distbits=5}function Mt(w,M,i,U){var Pt,G=w.state;return G.window===null&&(G.wsize=1<=G.wsize?(n.arraySet(G.window,M,i-G.wsize,G.wsize,0),G.wnext=0,G.whave=G.wsize):(Pt=G.wsize-G.wnext,Pt>U&&(Pt=U),n.arraySet(G.window,M,i-U,Pt,G.wnext),U-=Pt,U?(n.arraySet(G.window,M,i-U,U,0),G.wnext=U,G.whave=G.wsize):(G.wnext+=Pt,G.wnext===G.wsize&&(G.wnext=0),G.whave>>8&255,i.check=m(i.check,Nt,2,0),F=0,C=0,i.mode=bt;break}if(i.flags=0,i.head&&(i.head.done=!1),!(i.wrap&1)||(((F&255)<<8)+(F>>8))%31){w.msg="incorrect header check",i.mode=V;break}if((F&15)!==H){w.msg="unknown compression method",i.mode=V;break}if(F>>>=4,C-=4,It=(F&15)+8,i.wbits===0)i.wbits=It;else if(It>i.wbits){w.msg="invalid window size",i.mode=V;break}i.dmax=1<>8&1),i.flags&512&&(Nt[0]=F&255,Nt[1]=F>>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0,i.mode=W;case W:for(;C<32;){if(j===0)break t;j--,F+=U[G++]<>>8&255,Nt[2]=F>>>16&255,Nt[3]=F>>>24&255,i.check=m(i.check,Nt,4,0)),F=0,C=0,i.mode=y;case y:for(;C<16;){if(j===0)break t;j--,F+=U[G++]<>8),i.flags&512&&(Nt[0]=F&255,Nt[1]=F>>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0,i.mode=I;case I:if(i.flags&1024){for(;C<16;){if(j===0)break t;j--,F+=U[G++]<>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0}else i.head&&(i.head.extra=null);i.mode=it;case it:if(i.flags&1024&&(Q=i.length,Q>j&&(Q=j),Q&&(i.head&&(It=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),n.arraySet(i.head.extra,U,G,Q,It)),i.flags&512&&(i.check=m(i.check,U,Q,G)),j-=Q,G+=Q,i.length-=Q),i.length))break t;i.length=0,i.mode=ot;case ot:if(i.flags&2048){if(j===0)break t;Q=0;do It=U[G+Q++],i.head&&It&&i.length<65536&&(i.head.name+=String.fromCharCode(It));while(It&&Q>9&1,i.head.done=!0),w.adler=i.check=0,i.mode=L;break;case R:for(;C<32;){if(j===0)break t;j--,F+=U[G++]<>>=C&7,C-=C&7,i.mode=O;break}for(;C<3;){if(j===0)break t;j--,F+=U[G++]<>>=1,C-=1,F&3){case 0:i.mode=ct;break;case 1:if(kr(i),i.mode=St,M===A){F>>>=2,C-=2;break t}break;case 2:i.mode=Ht;break;case 3:w.msg="invalid block type",i.mode=V}F>>>=2,C-=2;break;case ct:for(F>>>=C&7,C-=C&7;C<32;){if(j===0)break t;j--,F+=U[G++]<>>16^65535)){w.msg="invalid stored block lengths",i.mode=V;break}if(i.length=F&65535,F=0,C=0,i.mode=at,M===A)break t;case at:i.mode=Ct;case Ct:if(Q=i.length,Q){if(Q>j&&(Q=j),Q>Dt&&(Q=Dt),Q===0)break t;n.arraySet(Pt,U,G,Q,re),j-=Q,G+=Q,Dt-=Q,re+=Q,i.length-=Q;break}i.mode=L;break;case Ht:for(;C<14;){if(j===0)break t;j--,F+=U[G++]<>>=5,C-=5,i.ndist=(F&31)+1,F>>>=5,C-=5,i.ncode=(F&15)+4,F>>>=4,C-=4,i.nlen>286||i.ndist>30){w.msg="too many length or distance symbols",i.mode=V;break}i.have=0,i.mode=Ot;case Ot:for(;i.have>>=3,C-=3}for(;i.have<19;)i.lens[Or[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,se={bits:i.lenbits},oe=c(d,i.lens,0,19,i.lencode,0,i.work,se),i.lenbits=se.bits,oe){w.msg="invalid code lengths set",i.mode=V;break}i.have=0,i.mode=J;case J:for(;i.have>>24,Gt=Et>>>16&255,jt=Et&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=xt,C-=xt,i.lens[i.have++]=jt;else{if(jt===16){for(ie=xt+2;C>>=xt,C-=xt,i.have===0){w.msg="invalid bit length repeat",i.mode=V;break}It=i.lens[i.have-1],Q=3+(F&3),F>>>=2,C-=2}else if(jt===17){for(ie=xt+3;C>>=xt,C-=xt,It=0,Q=3+(F&7),F>>>=3,C-=3}else{for(ie=xt+7;C>>=xt,C-=xt,It=0,Q=11+(F&127),F>>>=7,C-=7}if(i.have+Q>i.nlen+i.ndist){w.msg="invalid bit length repeat",i.mode=V;break}for(;Q--;)i.lens[i.have++]=It}}if(i.mode===V)break;if(i.lens[256]===0){w.msg="invalid code -- missing end-of-block",i.mode=V;break}if(i.lenbits=9,se={bits:i.lenbits},oe=c(h,i.lens,0,i.nlen,i.lencode,0,i.work,se),i.lenbits=se.bits,oe){w.msg="invalid literal/lengths set",i.mode=V;break}if(i.distbits=6,i.distcode=i.distdyn,se={bits:i.distbits},oe=c(g,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,se),i.distbits=se.bits,oe){w.msg="invalid distances set",i.mode=V;break}if(i.mode=St,M===A)break t;case St:i.mode=At;case At:if(j>=6&&Dt>=258){w.next_out=re,w.avail_out=Dt,w.next_in=G,w.avail_in=j,i.hold=F,i.bits=C,f(w,Tt),re=w.next_out,Pt=w.output,Dt=w.avail_out,G=w.next_in,U=w.input,j=w.avail_in,F=i.hold,C=i.bits,i.mode===L&&(i.back=-1);break}for(i.back=0;Et=i.lencode[F&(1<>>24,Gt=Et>>>16&255,jt=Et&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>Wt)],xt=Et>>>24,Gt=Et>>>16&255,jt=Et&65535,!(Wt+xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=Wt,C-=Wt,i.back+=Wt}if(F>>>=xt,C-=xt,i.back+=xt,i.length=jt,Gt===0){i.mode=N;break}if(Gt&32){i.back=-1,i.mode=L;break}if(Gt&64){w.msg="invalid literal/length code",i.mode=V;break}i.extra=Gt&15,i.mode=xe;case xe:if(i.extra){for(ie=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=zt;case zt:for(;Et=i.distcode[F&(1<>>24,Gt=Et>>>16&255,jt=Et&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>Wt)],xt=Et>>>24,Gt=Et>>>16&255,jt=Et&65535,!(Wt+xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=Wt,C-=Wt,i.back+=Wt}if(F>>>=xt,C-=xt,i.back+=xt,Gt&64){w.msg="invalid distance code",i.mode=V;break}i.offset=jt,i.extra=Gt&15,i.mode=sr;case sr:if(i.extra){for(ie=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){w.msg="invalid distance too far back",i.mode=V;break}i.mode=Xe;case Xe:if(Dt===0)break t;if(Q=Tt-Dt,i.offset>Q){if(Q=i.offset-Q,Q>i.whave&&i.sane){w.msg="invalid distance too far back",i.mode=V;break}Q>i.wnext?(Q-=i.wnext,ar=i.wsize-Q):ar=i.wnext-Q,Q>i.length&&(Q=i.length),ir=i.window}else ir=Pt,ar=re-i.offset,Q=i.length;Q>Dt&&(Q=Dt),Dt-=Q,i.length-=Q;do Pt[re++]=ir[ar++];while(--Q);i.length===0&&(i.mode=At);break;case N:if(Dt===0)break t;Pt[re++]=i.length,Dt--,i.mode=At;break;case O:if(i.wrap){for(;C<32;){if(j===0)break t;j--,F|=U[G++]<=1&&At[it]===0;it--);if(ot>it&&(ot=it),it===0)return E[D++]=1<<24|64<<16|0,E[D++]=1<<24|64<<16|0,$.bits=1,0;for(I=1;I0&&(x===c||it!==1))return-1;for(xe[1]=0,W=1;Wm||x===h&&S>f)return 1;for(;;){Xe=W-gt,H[y]St?(N=zt[sr+H[y]],O=Ot[J+H[y]]):(N=96,O=0),et=1<>gt)+ct]=Xe<<24|N<<16|O|0;while(ct!==0);for(et=1<>=1;if(et!==0?(L&=et-1,L+=et):L=0,y++,--At[W]===0){if(W===it)break;W=b[T+H[y]]}if(W>ot&&(L&Ct)!==at){for(gt===0&&(gt=ot),Ht+=I,K=W-gt,R=1<m||x===h&&S>f)return 1;at=L&Ct,E[at]=ot<<24|K<<16|Ht-D|0}}return L!==0&&(E[Ht+L]=W-gt<<24|64<<16|0),$.bits=ot,0}},{"../utils/common":1}],10:[function(o,s,a){"use strict";s.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],11:[function(o,s,a){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}s.exports=n},{}],"/lib/inflate.js":[function(o,s,a){"use strict";var n=o("./zlib/inflate"),l=o("./utils/common"),m=o("./utils/strings"),f=o("./zlib/constants"),c=o("./zlib/messages"),d=o("./zlib/zstream"),h=o("./zlib/gzheader"),g=Object.prototype.toString;function v(k){if(!(this instanceof v))return new v(k);this.options=l.assign({chunkSize:16384,windowBits:0,to:""},k||{});var x=this.options;x.raw&&x.windowBits>=0&&x.windowBits<16&&(x.windowBits=-x.windowBits,x.windowBits===0&&(x.windowBits=-15)),x.windowBits>=0&&x.windowBits<16&&!(k&&k.windowBits)&&(x.windowBits+=32),x.windowBits>15&&x.windowBits<48&&(x.windowBits&15)===0&&(x.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new d,this.strm.avail_out=0;var b=n.inflateInit2(this.strm,x.windowBits);if(b!==f.Z_OK)throw new Error(c[b]);if(this.header=new h,n.inflateGetHeader(this.strm,this.header),x.dictionary&&(typeof x.dictionary=="string"?x.dictionary=m.string2buf(x.dictionary):g.call(x.dictionary)==="[object ArrayBuffer]"&&(x.dictionary=new Uint8Array(x.dictionary)),x.raw&&(b=n.inflateSetDictionary(this.strm,x.dictionary),b!==f.Z_OK)))throw new Error(c[b])}v.prototype.push=function(k,x){var b=this.strm,T=this.options.chunkSize,q=this.options.dictionary,E,D,H,$,bt,W=!1;if(this.ended)return!1;D=x===~~x?x:x===!0?f.Z_FINISH:f.Z_NO_FLUSH,typeof k=="string"?b.input=m.binstring2buf(k):g.call(k)==="[object ArrayBuffer]"?b.input=new Uint8Array(k):b.input=k,b.next_in=0,b.avail_in=b.input.length;do{if(b.avail_out===0&&(b.output=new l.Buf8(T),b.next_out=0,b.avail_out=T),E=n.inflate(b,f.Z_NO_FLUSH),E===f.Z_NEED_DICT&&q&&(E=n.inflateSetDictionary(this.strm,q)),E===f.Z_BUF_ERROR&&W===!0&&(E=f.Z_OK,W=!1),E!==f.Z_STREAM_END&&E!==f.Z_OK)return this.onEnd(E),this.ended=!0,!1;b.next_out&&(b.avail_out===0||E===f.Z_STREAM_END||b.avail_in===0&&(D===f.Z_FINISH||D===f.Z_SYNC_FLUSH))&&(this.options.to==="string"?(H=m.utf8border(b.output,b.next_out),$=b.next_out-H,bt=m.buf2string(b.output,H),b.next_out=$,b.avail_out=T-$,$&&l.arraySet(b.output,b.output,H,$,0),this.onData(bt)):this.onData(l.shrinkBuf(b.output,b.next_out))),b.avail_in===0&&b.avail_out===0&&(W=!0)}while((b.avail_in>0||b.avail_out===0)&&E!==f.Z_STREAM_END);return E===f.Z_STREAM_END&&(D=f.Z_FINISH),D===f.Z_FINISH?(E=n.inflateEnd(this.strm),this.onEnd(E),this.ended=!0,E===f.Z_OK):(D===f.Z_SYNC_FLUSH&&(this.onEnd(f.Z_OK),b.avail_out=0),!0)},v.prototype.onData=function(k){this.chunks.push(k)},v.prototype.onEnd=function(k){k===f.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=k,this.msg=this.strm.msg};function _(k,x){var b=new v(x);if(b.push(k,!0),b.err)throw b.msg||c[b.err];return b.result}function A(k,x){return x=x||{},x.raw=!0,_(k,x)}a.Inflate=v,a.inflate=_,a.inflateRaw=A,a.ungzip=_},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")})();var I0=globalThis.fetch,Jo=class{constructor(t,e={},r){this.type=t,this.detail=e,this.msg=r,Object.defineProperty(this,"__mayPropagate",{enumerable:!1,writable:!0}),this.__mayPropagate=!0}preventDefault(){}stopPropagation(){this.__mayPropagate=!1}valueOf(){return this}toString(){return this.msg?`[${this.type} event]: ${this.msg}`:`[${this.type} event]`}},nc=class{constructor(){this.listeners={}}addEventListener(t,e,r){let o=this.listeners[t]||[];r?o.unshift(e):o.push(e),this.listeners[t]=o}removeEventListener(t,e){let r=this.listeners[t]||[],o=r.findIndex(s=>s===e);o>-1&&(r.splice(o,1),this.listeners[t]=r)}dispatch(t){let e=this.listeners[t.type];if(e)for(let r=0,o=e.length;rString.fromCharCode(e)).join("")}var lc=class{constructor(t,e,r){this.name=(r||t.tag||"").trim(),this.length=t.length,this.start=t.offset,this.offset=0,this.data=e,["getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","getBigInt64","getBigUint64"].forEach(o=>{let s=o.replace(/get(Big)?/,"").toLowerCase(),a=parseInt(o.replace(/[^\d]/g,""))/8;Object.defineProperty(this,s,{get:()=>this.getValue(o,a)})})}get currentPosition(){return this.start+this.offset}set currentPosition(t){this.start=t,this.offset=0}skip(t=0,e=8){this.offset+=t*e/8}getValue(t,e){let r=this.start+this.offset;this.offset+=e;try{return this.data[t](r)}catch(o){throw console.error("parser",t,e,this),console.error("parser",this.start,this.offset),o}}flags(t){if(t===8||t===16||t===32||t===64)return this[`uint${t}`].toString(2).padStart(t,0).split("").map(e=>e==="1");console.error("Error parsing flags: flag types can only be 1, 2, 4, or 8 bytes long"),console.trace()}get tag(){let t=this.uint32;return ic([t>>24&255,t>>16&255,t>>8&255,t&255])}get fixed(){let t=this.int16,e=Math.round(1e3*this.uint16/65356);return t+e/1e3}get legacyFixed(){let t=this.uint16,e=this.uint16.toString(16).padStart(4,0);return parseFloat(`${t}.${e}`)}get uint24(){return(this.uint8<<16)+(this.uint8<<8)+this.uint8}get uint128(){let t=0;for(let e=0;e<5;e++){let r=this.uint8;if(t=t*128+(r&127),r<128)break}return t}get longdatetime(){return new Date(ac+1e3*parseInt(this.int64.toString()))}get fword(){return this.int16}get ufword(){return this.uint16}get Offset16(){return this.uint16}get Offset32(){return this.uint32}get F2DOT14(){let t=p.uint16,e=[0,1,-2,-1][t>>14],r=t&16383;return e+r/16384}verifyLength(){this.offset!=this.length&&console.error(`unexpected parsed table size (${this.offset}) for "${this.name}" (expected ${this.length})`)}readBytes(t=0,e=0,r=8,o=!1){if(t=t||this.length,t===0)return[];e&&(this.currentPosition=e);let s=`${o?"":"u"}int${r}`,a=[];for(;t--;)a.push(this[s]);return a}},Bt=class{constructor(t){Object.defineProperty(this,"parser",{enumerable:!1,get:()=>t});let r=t.currentPosition;Object.defineProperty(this,"start",{enumerable:!1,get:()=>r})}load(t){Object.keys(t).forEach(e=>{let r=Object.getOwnPropertyDescriptor(t,e);r.get?this[e]=r.get.bind(this):r.value!==void 0&&(this[e]=r.value)}),this.parser.length&&this.parser.verifyLength()}},mt=class extends Bt{constructor(t,e,r){let{parser:o,start:s}=super(new lc(t,e,r));Object.defineProperty(this,"p",{enumerable:!1,get:()=>o}),Object.defineProperty(this,"tableStart",{enumerable:!1,get:()=>s})}};function X(t,e,r){let o;Object.defineProperty(t,e,{get:()=>o||(o=r(),o),enumerable:!0})}var uc=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:12},e,"sfnt");this.version=o.uint32,this.numTables=o.uint16,this.searchRange=o.uint16,this.entrySelector=o.uint16,this.rangeShift=o.uint16,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(s=>new fc(o)),this.tables={},this.directory.forEach(s=>{let a=()=>r(this.tables,{tag:s.tag,offset:s.offset,length:s.length},e);X(this.tables,s.tag.trim(),a)})}},fc=class{constructor(t){this.tag=t.tag,this.checksum=t.uint32,this.offset=t.uint32,this.length=t.uint32}},el=tl.inflate||void 0,rl=void 0,cc=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:44},e,"woff");this.signature=o.tag,this.flavor=o.uint32,this.length=o.uint32,this.numTables=o.uint16,o.uint16,this.totalSfntSize=o.uint32,this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.metaOffset=o.uint32,this.metaLength=o.uint32,this.metaOrigLength=o.uint32,this.privOffset=o.uint32,this.privLength=o.uint32,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(s=>new dc(o)),mc(this,e,r)}},dc=class{constructor(t){this.tag=t.tag,this.offset=t.uint32,this.compLength=t.uint32,this.origLength=t.uint32,this.origChecksum=t.uint32}};function mc(t,e,r){t.tables={},t.directory.forEach(o=>{X(t.tables,o.tag.trim(),()=>{let s=0,a=e;if(o.compLength!==o.origLength){let n=e.buffer.slice(o.offset,o.offset+o.compLength),l;if(el)l=el(new Uint8Array(n));else if(rl)l=rl(new Uint8Array(n));else{let m="no brotli decoder available to decode WOFF2 font";throw font.onerror&&font.onerror(m),new Error(m)}a=new DataView(l.buffer)}else s=o.offset;return r(t.tables,{tag:o.tag,offset:s,length:o.origLength},a)})})}var ol=$i,sl=void 0,pc=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:48},e,"woff2");this.signature=o.tag,this.flavor=o.uint32,this.length=o.uint32,this.numTables=o.uint16,o.uint16,this.totalSfntSize=o.uint32,this.totalCompressedSize=o.uint32,this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.metaOffset=o.uint32,this.metaLength=o.uint32,this.metaOrigLength=o.uint32,this.privOffset=o.uint32,this.privLength=o.uint32,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(l=>new hc(o));let s=o.currentPosition;this.directory[0].offset=0,this.directory.forEach((l,m)=>{let f=this.directory[m+1];f&&(f.offset=l.offset+(l.transformLength!==void 0?l.transformLength:l.origLength))});let a,n=e.buffer.slice(s);if(ol)a=ol(new Uint8Array(n));else if(sl)a=new Uint8Array(sl(n));else{let l="no brotli decoder available to decode WOFF2 font";throw t.onerror&&t.onerror(l),new Error(l)}gc(this,a,r)}},hc=class{constructor(t){this.flags=t.uint8;let e=this.tagNumber=this.flags&63;e===63?this.tag=t.tag:this.tag=yc(e);let o=(this.transformVersion=(this.flags&192)>>6)!==0;(this.tag==="glyf"||this.tag==="loca")&&(o=this.transformVersion!==3),this.origLength=t.uint128,o&&(this.transformLength=t.uint128)}};function gc(t,e,r){t.tables={},t.directory.forEach(o=>{X(t.tables,o.tag.trim(),()=>{let s=o.offset,a=s+(o.transformLength?o.transformLength:o.origLength),n=new DataView(e.slice(s,a).buffer);try{return r(t.tables,{tag:o.tag,offset:0,length:o.origLength},n)}catch(l){console.error(l)}})})}function yc(t){return["cmap","head","hhea","hmtx","maxp","name","OS/2","post","cvt ","fpgm","glyf","loca","prep","CFF ","VORG","EBDT","EBLC","gasp","hdmx","kern","LTSH","PCLT","VDMX","vhea","vmtx","BASE","GDEF","GPOS","GSUB","EBSC","JSTF","MATH","CBDT","CBLC","COLR","CPAL","SVG ","sbix","acnt","avar","bdat","bloc","bsln","cvar","fdsc","feat","fmtx","fvar","gvar","hsty","just","lcar","mort","morx","opbd","prop","trak","Zapf","Silf","Glat","Gloc","Feat","Sill"][t&63]}var cl={},dl=!1;Promise.all([Promise.resolve().then(function(){return Wc}),Promise.resolve().then(function(){return Zc}),Promise.resolve().then(function(){return Xc}),Promise.resolve().then(function(){return Qc}),Promise.resolve().then(function(){return td}),Promise.resolve().then(function(){return nd}),Promise.resolve().then(function(){return id}),Promise.resolve().then(function(){return ud}),Promise.resolve().then(function(){return bd}),Promise.resolve().then(function(){return Ad}),Promise.resolve().then(function(){return ym}),Promise.resolve().then(function(){return bm}),Promise.resolve().then(function(){return Cm}),Promise.resolve().then(function(){return Tm}),Promise.resolve().then(function(){return Pm}),Promise.resolve().then(function(){return Rm}),Promise.resolve().then(function(){return Im}),Promise.resolve().then(function(){return Vm}),Promise.resolve().then(function(){return Nm}),Promise.resolve().then(function(){return Mm}),Promise.resolve().then(function(){return jm}),Promise.resolve().then(function(){return Hm}),Promise.resolve().then(function(){return Zm}),Promise.resolve().then(function(){return Km}),Promise.resolve().then(function(){return Jm}),Promise.resolve().then(function(){return $m}),Promise.resolve().then(function(){return ep}),Promise.resolve().then(function(){return op}),Promise.resolve().then(function(){return np}),Promise.resolve().then(function(){return lp}),Promise.resolve().then(function(){return pp}),Promise.resolve().then(function(){return vp}),Promise.resolve().then(function(){return Sp}),Promise.resolve().then(function(){return kp}),Promise.resolve().then(function(){return Tp}),Promise.resolve().then(function(){return Pp}),Promise.resolve().then(function(){return Lp}),Promise.resolve().then(function(){return Ip}),Promise.resolve().then(function(){return zp}),Promise.resolve().then(function(){return Gp}),Promise.resolve().then(function(){return Hp})]).then(t=>{t.forEach(e=>{let r=Object.keys(e)[0];cl[r]=e[r]}),dl=!0});function vc(t,e,r){let o=e.tag.replace(/[^\w\d]/g,""),s=cl[o];return s?new s(e,r,t):(console.warn(`lib-font has no definition for ${o}. The table was skipped.`),{})}function bc(){let t=0;function e(r,o){if(!dl)return t>10?o(new Error("loading took too long")):(t++,setTimeout(()=>e(r),250));r(vc)}return new Promise((r,o)=>e(r))}function wc(t,e){let r=t.lastIndexOf("."),o=(t.substring(r+1)||"").toLowerCase(),s={ttf:"truetype",otf:"opentype",woff:"woff",woff2:"woff2"}[o];if(s)return s;let a={eot:"The .eot format is not supported: it died in January 12, 2016, when Microsoft retired all versions of IE that didn't already support WOFF.",svg:"The .svg format is not supported: SVG fonts (not to be confused with OpenType with embedded SVG) were so bad we took the entire fonts chapter out of the SVG specification again.",fon:"The .fon format is not supported: this is an ancient Windows bitmap font format.",ttc:"Based on the current CSS specification, font collections are not (yet?) supported."}[o];if(a||(a=`${t} is not a known webfont format.`),e)throw new Error(a);console.warn(`Could not load font: ${a}`)}async function Sc(t,e,r={}){if(!globalThis.document)return;let o=wc(e,r.errorOnStyle);if(!o)return;let s=document.createElement("style");s.className="injected-by-Font-js";let a=[];return r.styleRules&&(a=Object.entries(r.styleRules).map(([n,l])=>`${n}: ${l};`)),s.textContent=` +@font-face { + font-family: "${t}"; + ${a.join(` + `)} + src: url("${e}") format("${o}"); +}`,globalThis.document.head.appendChild(s),s}var xc=[0,1,0,0],Cc=[79,84,84,79],Fc=[119,79,70,70],kc=[119,79,70,50];function Qo(t,e){if(t.length===e.length){for(let r=0;r(globalThis.document&&!this.options.skipStyleSheet&&await Sc(this.name,t,this.options),this.loadFont(t)))()}async loadFont(t,e){fetch(t).then(r=>Tc(r)&&r.arrayBuffer()).then(r=>this.fromDataBuffer(r,e||t)).catch(r=>{let o=new Jo("error",r,`Failed to load font at ${e||t}`);this.dispatch(o),this.onerror&&this.onerror(o)})}async fromDataBuffer(t,e){this.fontData=new DataView(t);let r=Oc(this.fontData);if(!r)throw new Error(`${e} is either an unsupported font format, or not a font at all.`);await this.parseBasicData(r);let o=new Jo("load",{font:this});this.dispatch(o),this.onload&&this.onload(o)}async parseBasicData(t){return bc().then(e=>(t==="SFNT"&&(this.opentype=new uc(this,this.fontData,e)),t==="WOFF"&&(this.opentype=new cc(this,this.fontData,e)),t==="WOFF2"&&(this.opentype=new pc(this,this.fontData,e)),this.opentype))}getGlyphId(t){return this.opentype.tables.cmap.getGlyphId(t)}reverse(t){return this.opentype.tables.cmap.reverse(t)}supports(t){return this.getGlyphId(t)!==0}supportsVariation(t){return this.opentype.tables.cmap.supportsVariation(t)!==!1}measureText(t,e=16){if(this.__unloaded)throw new Error("Cannot measure text: font was unloaded. Please reload before calling measureText()");let r=document.createElement("div");r.textContent=t,r.style.fontFamily=this.name,r.style.fontSize=`${e}px`,r.style.color="transparent",r.style.background="transparent",r.style.top="0",r.style.left="0",r.style.position="absolute",document.body.appendChild(r);let o=r.getBoundingClientRect();document.body.removeChild(r);let s=this.opentype.tables["OS/2"];return o.fontSize=e,o.ascender=s.sTypoAscender,o.descender=s.sTypoDescender,o}unload(){if(this.styleElement.parentNode){this.styleElement.parentNode.removeElement(this.styleElement);let t=new Jo("unload",{font:this});this.dispatch(t),this.onunload&&this.onunload(t)}this._unloaded=!0}load(){if(this.__unloaded){delete this.__unloaded,document.head.appendChild(this.styleElement);let t=new Jo("load",{font:this});this.dispatch(t),this.onload&&this.onload(t)}}};globalThis.Font=ts;var We=class extends Bt{constructor(t,e,r){super(t),this.plaformID=e,this.encodingID=r}},_c=class extends We{constructor(t,e,r){super(t,e,r),this.format=0,this.length=t.uint16,this.language=t.uint16,this.glyphIdArray=[...new Array(256)].map(o=>t.uint8)}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 0. only supports(id) is implemented.")),0<=t&&t<=255}reverse(t){return console.warn("reverse not implemented for cmap subtable format 0"),{}}getSupportedCharCodes(){return[{start:1,end:256}]}},Pc=class extends We{constructor(t,e,r){super(t,e,r),this.format=2,this.length=t.uint16,this.language=t.uint16,this.subHeaderKeys=[...new Array(256)].map(n=>t.uint16);let o=Math.max(...this.subHeaderKeys),s=t.currentPosition;X(this,"subHeaders",()=>(t.currentPosition=s,[...new Array(o)].map(n=>new Ac(t))));let a=s+o*8;X(this,"glyphIndexArray",()=>(t.currentPosition=a,[...new Array(o)].map(n=>t.uint16)))}supports(t){t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 2. only supports(id) is implemented."));let e=t&&255,r=t&&65280,o=this.subHeaders[r],s=this.subHeaders[o],a=s.firstCode,n=a+s.entryCount;return a<=e&&e<=n}reverse(t){return console.warn("reverse not implemented for cmap subtable format 2"),{}}getSupportedCharCodes(t=!1){return t?this.subHeaders.map(e=>({firstCode:e.firstCode,lastCode:e.lastCode})):this.subHeaders.map(e=>({start:e.firstCode,end:e.lastCode}))}},Ac=class{constructor(t){this.firstCode=t.uint16,this.entryCount=t.uint16,this.lastCode=this.first+this.entryCount,this.idDelta=t.int16,this.idRangeOffset=t.uint16}},Rc=class extends We{constructor(t,e,r){super(t,e,r),this.format=4,this.length=t.uint16,this.language=t.uint16,this.segCountX2=t.uint16,this.segCount=this.segCountX2/2,this.searchRange=t.uint16,this.entrySelector=t.uint16,this.rangeShift=t.uint16;let o=t.currentPosition;X(this,"endCode",()=>t.readBytes(this.segCount,o,16));let s=o+2+this.segCountX2;X(this,"startCode",()=>t.readBytes(this.segCount,s,16));let a=s+this.segCountX2;X(this,"idDelta",()=>t.readBytes(this.segCount,a,16,!0));let n=a+this.segCountX2;X(this,"idRangeOffset",()=>t.readBytes(this.segCount,n,16));let l=n+this.segCountX2,m=this.length-(l-this.tableStart);X(this,"glyphIdArray",()=>t.readBytes(m,l,16)),X(this,"segments",()=>this.buildSegments(n,l,t))}buildSegments(t,e,r){let o=(s,a)=>{let n=this.startCode[a],l=this.endCode[a],m=this.idDelta[a],f=this.idRangeOffset[a],c=t+2*a,d=[];if(f===0)for(let h=n+m,g=l+m;h<=g;h++)d.push(h);else for(let h=0,g=l-n;h<=g;h++)r.currentPosition=c+f+h*2,d.push(r.uint16);return{startCode:n,endCode:l,idDelta:m,idRangeOffset:f,glyphIDs:d}};return[...new Array(this.segCount)].map(o)}reverse(t){let e=this.segments.find(o=>o.glyphIDs.includes(t));if(!e)return{};let r=e.startCode+e.glyphIDs.indexOf(t);return{code:r,unicode:String.fromCodePoint(r)}}getGlyphId(t){if(t.charCodeAt&&(t=t.charCodeAt(0)),55296<=t&&t<=57343||(t&65534)===65534||(t&65535)===65535)return 0;let e=this.segments.find(r=>r.startCode<=t&&t<=r.endCode);return e?e.glyphIDs[t-e.startCode]:0}supports(t){return this.getGlyphId(t)!==0}getSupportedCharCodes(t=!1){return t?this.segments:this.segments.map(e=>({start:e.startCode,end:e.endCode}))}},Lc=class extends We{constructor(t,e,r){super(t,e,r),this.format=6,this.length=t.uint16,this.language=t.uint16,this.firstCode=t.uint16,this.entryCount=t.uint16,this.lastCode=this.firstCode+this.entryCount-1,X(this,"glyphIdArray",()=>[...new Array(this.entryCount)].map(s=>t.uint16))}supports(t){if(t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 6. only supports(id) is implemented.")),tthis.firstCode+this.entryCount)return{};let e=t-this.firstCode;return{code:e,unicode:String.fromCodePoint(e)}}reverse(t){let e=this.glyphIdArray.indexOf(t);if(e>-1)return this.firstCode+e}getSupportedCharCodes(t=!1){return t?[{firstCode:this.firstCode,lastCode:this.lastCode}]:[{start:this.firstCode,end:this.lastCode}]}},Ec=class extends We{constructor(t,e,r){super(t,e,r),this.format=8,t.uint16,this.length=t.uint32,this.language=t.uint32,this.is32=[...new Array(8192)].map(s=>t.uint8),this.numGroups=t.uint32,X(this,"groups",()=>[...new Array(this.numGroups)].map(s=>new Ic(t)))}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 8. only supports(id) is implemented.")),this.groups.findIndex(e=>e.startcharCode<=t&&t<=e.endcharCode)!==-1}reverse(t){return console.warn("reverse not implemented for cmap subtable format 8"),{}}getSupportedCharCodes(t=!1){return t?this.groups:this.groups.map(e=>({start:e.startcharCode,end:e.endcharCode}))}},Ic=class{constructor(t){this.startcharCode=t.uint32,this.endcharCode=t.uint32,this.startGlyphID=t.uint32}},Bc=class extends We{constructor(t,e,r){super(t,e,r),this.format=10,t.uint16,this.length=t.uint32,this.language=t.uint32,this.startCharCode=t.uint32,this.numChars=t.uint32,this.endCharCode=this.startCharCode+this.numChars,X(this,"glyphs",()=>[...new Array(this.numChars)].map(s=>t.uint16))}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 10. only supports(id) is implemented.")),tthis.startCharCode+this.numChars?!1:t-this.startCharCode}reverse(t){return console.warn("reverse not implemented for cmap subtable format 10"),{}}getSupportedCharCodes(t=!1){return t?[{startCharCode:this.startCharCode,endCharCode:this.endCharCode}]:[{start:this.startCharCode,end:this.endCharCode}]}},Vc=class extends We{constructor(t,e,r){super(t,e,r),this.format=12,t.uint16,this.length=t.uint32,this.language=t.uint32,this.numGroups=t.uint32,X(this,"groups",()=>[...new Array(this.numGroups)].map(s=>new Dc(t)))}supports(t){return t.charCodeAt&&(t=t.charCodeAt(0)),55296<=t&&t<=57343||(t&65534)===65534||(t&65535)===65535?0:this.groups.findIndex(e=>e.startCharCode<=t&&t<=e.endCharCode)!==-1}reverse(t){for(let e of this.groups){let r=e.startGlyphID;if(r>t)continue;if(r===t)return e.startCharCode;if(r+(e.endCharCode-e.startCharCode)({start:e.startCharCode,end:e.endCharCode}))}},Dc=class{constructor(t){this.startCharCode=t.uint32,this.endCharCode=t.uint32,this.startGlyphID=t.uint32}},Nc=class extends We{constructor(t,e,r){super(t,e,r),this.format=13,t.uint16,this.length=t.uint32,this.language=t.uint32,this.numGroups=t.uint32;let o=[...new Array(this.numGroups)].map(s=>new zc(t));X(this,"groups",o)}supports(t){return t.charCodeAt&&(t=t.charCodeAt(0)),this.groups.findIndex(e=>e.startCharCode<=t&&t<=e.endCharCode)!==-1}reverse(t){return console.warn("reverse not implemented for cmap subtable format 13"),{}}getSupportedCharCodes(t=!1){return t?this.groups:this.groups.map(e=>({start:e.startCharCode,end:e.endCharCode}))}},zc=class{constructor(t){this.startCharCode=t.uint32,this.endCharCode=t.uint32,this.glyphID=t.uint32}},Mc=class extends We{constructor(t,e,r){super(t,e,r),this.subTableStart=t.currentPosition,this.format=14,this.length=t.uint32,this.numVarSelectorRecords=t.uint32,X(this,"varSelectors",()=>[...new Array(this.numVarSelectorRecords)].map(o=>new Gc(t)))}supports(){return console.warn("supports not implemented for cmap subtable format 14"),0}getSupportedCharCodes(){return console.warn("getSupportedCharCodes not implemented for cmap subtable format 14"),[]}reverse(t){return console.warn("reverse not implemented for cmap subtable format 14"),{}}supportsVariation(t){let e=this.varSelector.find(r=>r.varSelector===t);return e||!1}getSupportedVariations(){return this.varSelectors.map(t=>t.varSelector)}},Gc=class{constructor(t){this.varSelector=t.uint24,this.defaultUVSOffset=t.Offset32,this.nonDefaultUVSOffset=t.Offset32}};function jc(t,e,r){let o=t.uint16;return o===0?new _c(t,e,r):o===2?new Pc(t,e,r):o===4?new Rc(t,e,r):o===6?new Lc(t,e,r):o===8?new Ec(t,e,r):o===10?new Bc(t,e,r):o===12?new Vc(t,e,r):o===13?new Nc(t,e,r):o===14?new Mc(t,e,r):{}}var Uc=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numTables=r.uint16,this.encodingRecords=[...new Array(this.numTables)].map(o=>new Hc(r,this.tableStart))}getSubTable(t){return this.encodingRecords[t].table}getSupportedEncodings(){return this.encodingRecords.map(t=>({platformID:t.platformID,encodingId:t.encodingID}))}getSupportedCharCodes(t,e){let r=this.encodingRecords.findIndex(s=>s.platformID===t&&s.encodingID===e);return r===-1?!1:this.getSubTable(r).getSupportedCharCodes()}reverse(t){for(let e=0;e{let s=this.getSubTable(o);return s.getGlyphId?(e=s.getGlyphId(t),e!==0):!1}),e}supports(t){return this.encodingRecords.some((e,r)=>{let o=this.getSubTable(r);return o.supports&&o.supports(t)!==!1})}supportsVariation(t){return this.encodingRecords.some((e,r)=>{let o=this.getSubTable(r);return o.supportsVariation&&o.supportsVariation(t)!==!1})}},Hc=class{constructor(t,e){let r=this.platformID=t.uint16,o=this.encodingID=t.uint16,s=this.offset=t.Offset32;X(this,"table",()=>(t.currentPosition=e+s,jc(t,r,o)))}},Wc=Object.freeze({__proto__:null,cmap:Uc}),qc=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.load({majorVersion:r.uint16,minorVersion:r.uint16,fontRevision:r.fixed,checkSumAdjustment:r.uint32,magicNumber:r.uint32,flags:r.flags(16),unitsPerEm:r.uint16,created:r.longdatetime,modified:r.longdatetime,xMin:r.int16,yMin:r.int16,xMax:r.int16,yMax:r.int16,macStyle:r.flags(16),lowestRecPPEM:r.uint16,fontDirectionHint:r.uint16,indexToLocFormat:r.uint16,glyphDataFormat:r.uint16})}},Zc=Object.freeze({__proto__:null,head:qc}),Yc=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.ascender=r.fword,this.descender=r.fword,this.lineGap=r.fword,this.advanceWidthMax=r.ufword,this.minLeftSideBearing=r.fword,this.minRightSideBearing=r.fword,this.xMaxExtent=r.fword,this.caretSlopeRise=r.int16,this.caretSlopeRun=r.int16,this.caretOffset=r.int16,r.int16,r.int16,r.int16,r.int16,this.metricDataFormat=r.int16,this.numberOfHMetrics=r.uint16,r.verifyLength()}},Xc=Object.freeze({__proto__:null,hhea:Yc}),Kc=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.hhea.numberOfHMetrics,a=r.maxp.numGlyphs,n=o.currentPosition;if(X(this,"hMetrics",()=>(o.currentPosition=n,[...new Array(s)].map(l=>new Jc(o.uint16,o.int16)))),s(o.currentPosition=l,[...new Array(a-s)].map(m=>o.int16)))}}},Jc=class{constructor(t,e){this.advanceWidth=t,this.lsb=e}},Qc=Object.freeze({__proto__:null,hmtx:Kc}),$c=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.legacyFixed,this.numGlyphs=r.uint16,this.version===1&&(this.maxPoints=r.uint16,this.maxContours=r.uint16,this.maxCompositePoints=r.uint16,this.maxCompositeContours=r.uint16,this.maxZones=r.uint16,this.maxTwilightPoints=r.uint16,this.maxStorage=r.uint16,this.maxFunctionDefs=r.uint16,this.maxInstructionDefs=r.uint16,this.maxStackElements=r.uint16,this.maxSizeOfInstructions=r.uint16,this.maxComponentElements=r.uint16,this.maxComponentDepth=r.uint16),r.verifyLength()}},td=Object.freeze({__proto__:null,maxp:$c}),ed=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.format=r.uint16,this.count=r.uint16,this.stringOffset=r.Offset16,this.nameRecords=[...new Array(this.count)].map(o=>new od(r,this)),this.format===1&&(this.langTagCount=r.uint16,this.langTagRecords=[...new Array(this.langTagCount)].map(o=>new rd(r.uint16,r.Offset16))),this.stringStart=this.tableStart+this.stringOffset}get(t){let e=this.nameRecords.find(r=>r.nameID===t);if(e)return e.string}},rd=class{constructor(t,e){this.length=t,this.offset=e}},od=class{constructor(t,e){this.platformID=t.uint16,this.encodingID=t.uint16,this.languageID=t.uint16,this.nameID=t.uint16,this.length=t.uint16,this.offset=t.Offset16,X(this,"string",()=>(t.currentPosition=e.stringStart+this.offset,sd(t,this)))}};function sd(t,e){let{platformID:r,length:o}=e;if(o===0)return"";if(r===0||r===3){let n=[];for(let l=0,m=o/2;lr.uint8),this.ulUnicodeRange1=r.flags(32),this.ulUnicodeRange2=r.flags(32),this.ulUnicodeRange3=r.flags(32),this.ulUnicodeRange4=r.flags(32),this.achVendID=r.tag,this.fsSelection=r.uint16,this.usFirstCharIndex=r.uint16,this.usLastCharIndex=r.uint16,this.sTypoAscender=r.int16,this.sTypoDescender=r.int16,this.sTypoLineGap=r.int16,this.usWinAscent=r.uint16,this.usWinDescent=r.uint16,this.version===0||(this.ulCodePageRange1=r.flags(32),this.ulCodePageRange2=r.flags(32),this.version===1)||(this.sxHeight=r.int16,this.sCapHeight=r.int16,this.usDefaultChar=r.uint16,this.usBreakChar=r.uint16,this.usMaxContext=r.uint16,this.version<=4)||(this.usLowerOpticalPointSize=r.uint16,this.usUpperOpticalPointSize=r.uint16,this.version===5))return r.verifyLength()}},id=Object.freeze({__proto__:null,OS2:ad}),ld=class extends mt{constructor(t,e){let{p:r}=super(t,e);if(this.version=r.legacyFixed,this.italicAngle=r.fixed,this.underlinePosition=r.fword,this.underlineThickness=r.fword,this.isFixedPitch=r.uint32,this.minMemType42=r.uint32,this.maxMemType42=r.uint32,this.minMemType1=r.uint32,this.maxMemType1=r.uint32,this.version===1||this.version===3)return r.verifyLength();if(this.numGlyphs=r.uint16,this.version===2){this.glyphNameIndex=[...new Array(this.numGlyphs)].map(o=>r.uint16),this.namesOffset=r.currentPosition,this.glyphNameOffsets=[1];for(let o=0;or.int8))}getGlyphName(t){if(this.version!==2)return console.warn(`post table version ${this.version} does not support glyph name lookups`),"";let e=this.glyphNameIndex[t];if(e<258)return nl[e];let r=this.glyphNameOffsets[t],s=this.glyphNameOffsets[t+1]-r-1;return s===0?".notdef.":(this.parser.currentPosition=this.namesOffset+r,this.parser.readBytes(s,this.namesOffset+r,8,!0).map(n=>String.fromCharCode(n)).join(""))}},nl=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"],ud=Object.freeze({__proto__:null,post:ld}),fd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.horizAxisOffset=r.Offset16,this.vertAxisOffset=r.Offset16,X(this,"horizAxis",()=>new on({offset:t.offset+this.horizAxisOffset},e)),X(this,"vertAxis",()=>new on({offset:t.offset+this.vertAxisOffset},e)),this.majorVersion===1&&this.minorVersion===1&&(this.itemVarStoreOffset=r.Offset32,X(this,"itemVarStore",()=>new on({offset:t.offset+this.itemVarStoreOffset},e)))}},on=class extends mt{constructor(t,e){let{p:r}=super(t,e,"AxisTable");this.baseTagListOffset=r.Offset16,this.baseScriptListOffset=r.Offset16,X(this,"baseTagList",()=>new cd({offset:t.offset+this.baseTagListOffset},e)),X(this,"baseScriptList",()=>new dd({offset:t.offset+this.baseScriptListOffset},e))}},cd=class extends mt{constructor(t,e){let{p:r}=super(t,e,"BaseTagListTable");this.baseTagCount=r.uint16,this.baselineTags=[...new Array(this.baseTagCount)].map(o=>r.tag)}},dd=class extends mt{constructor(t,e){let{p:r}=super(t,e,"BaseScriptListTable");this.baseScriptCount=r.uint16;let o=r.currentPosition;X(this,"baseScriptRecords",()=>(r.currentPosition=o,[...new Array(this.baseScriptCount)].map(s=>new md(this.start,r))))}},md=class{constructor(t,e){this.baseScriptTag=e.tag,this.baseScriptOffset=e.Offset16,X(this,"baseScriptTable",()=>(e.currentPosition=t+this.baseScriptOffset,new pd(e)))}},pd=class{constructor(t){this.start=t.currentPosition,this.baseValuesOffset=t.Offset16,this.defaultMinMaxOffset=t.Offset16,this.baseLangSysCount=t.uint16,this.baseLangSysRecords=[...new Array(this.baseLangSysCount)].map(e=>new hd(this.start,t)),X(this,"baseValues",()=>(t.currentPosition=this.start+this.baseValuesOffset,new gd(t))),X(this,"defaultMinMax",()=>(t.currentPosition=this.start+this.defaultMinMaxOffset,new ml(t)))}},hd=class{constructor(t,e){this.baseLangSysTag=e.tag,this.minMaxOffset=e.Offset16,X(this,"minMax",()=>(e.currentPosition=t+this.minMaxOffset,new ml(e)))}},gd=class{constructor(t){this.parser=t,this.start=t.currentPosition,this.defaultBaselineIndex=t.uint16,this.baseCoordCount=t.uint16,this.baseCoords=[...new Array(this.baseCoordCount)].map(e=>t.Offset16)}getTable(t){return this.parser.currentPosition=this.start+this.baseCoords[t],new vd(this.parser)}},ml=class{constructor(t){this.minCoord=t.Offset16,this.maxCoord=t.Offset16,this.featMinMaxCount=t.uint16;let e=t.currentPosition;X(this,"featMinMaxRecords",()=>(t.currentPosition=e,[...new Array(this.featMinMaxCount)].map(r=>new yd(t))))}},yd=class{constructor(t){this.featureTableTag=t.tag,this.minCoord=t.Offset16,this.maxCoord=t.Offset16}},vd=class{constructor(t){this.baseCoordFormat=t.uint16,this.coordinate=t.int16,this.baseCoordFormat===2&&(this.referenceGlyph=t.uint16,this.baseCoordPoint=t.uint16),this.baseCoordFormat===3&&(this.deviceTable=t.Offset16)}},bd=Object.freeze({__proto__:null,BASE:fd}),al=class{constructor(t){this.classFormat=t.uint16,this.classFormat===1&&(this.startGlyphID=t.uint16,this.glyphCount=t.uint16,this.classValueArray=[...new Array(this.glyphCount)].map(e=>t.uint16)),this.classFormat===2&&(this.classRangeCount=t.uint16,this.classRangeRecords=[...new Array(this.classRangeCount)].map(e=>new wd(t)))}},wd=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.class=t.uint16}},uo=class extends Bt{constructor(t){super(t),this.coverageFormat=t.uint16,this.coverageFormat===1&&(this.glyphCount=t.uint16,this.glyphArray=[...new Array(this.glyphCount)].map(e=>t.uint16)),this.coverageFormat===2&&(this.rangeCount=t.uint16,this.rangeRecords=[...new Array(this.rangeCount)].map(e=>new Sd(t)))}},Sd=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.startCoverageIndex=t.uint16}},xd=class{constructor(t,e){this.table=t,this.parser=e,this.start=e.currentPosition,this.format=e.uint16,this.variationRegionListOffset=e.Offset32,this.itemVariationDataCount=e.uint16,this.itemVariationDataOffsets=[...new Array(this.itemVariationDataCount)].map(r=>e.Offset32)}},Cd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.glyphClassDefOffset=r.Offset16,X(this,"glyphClassDefs",()=>{if(this.glyphClassDefOffset!==0)return r.currentPosition=this.tableStart+this.glyphClassDefOffset,new al(r)}),this.attachListOffset=r.Offset16,X(this,"attachList",()=>{if(this.attachListOffset!==0)return r.currentPosition=this.tableStart+this.attachListOffset,new Fd(r)}),this.ligCaretListOffset=r.Offset16,X(this,"ligCaretList",()=>{if(this.ligCaretListOffset!==0)return r.currentPosition=this.tableStart+this.ligCaretListOffset,new Od(r)}),this.markAttachClassDefOffset=r.Offset16,X(this,"markAttachClassDef",()=>{if(this.markAttachClassDefOffset!==0)return r.currentPosition=this.tableStart+this.markAttachClassDefOffset,new al(r)}),this.minorVersion>=2&&(this.markGlyphSetsDefOffset=r.Offset16,X(this,"markGlyphSetsDef",()=>{if(this.markGlyphSetsDefOffset!==0)return r.currentPosition=this.tableStart+this.markGlyphSetsDefOffset,new Pd(r)})),this.minorVersion===3&&(this.itemVarStoreOffset=r.Offset32,X(this,"itemVarStore",()=>{if(this.itemVarStoreOffset!==0)return r.currentPosition=this.tableStart+this.itemVarStoreOffset,new xd(r)}))}},Fd=class extends Bt{constructor(t){super(t),this.coverageOffset=t.Offset16,this.glyphCount=t.uint16,this.attachPointOffsets=[...new Array(this.glyphCount)].map(e=>t.Offset16)}getPoint(t){return this.parser.currentPosition=this.start+this.attachPointOffsets[t],new kd(this.parser)}},kd=class{constructor(t){this.pointCount=t.uint16,this.pointIndices=[...new Array(this.pointCount)].map(e=>t.uint16)}},Od=class extends Bt{constructor(t){super(t),this.coverageOffset=t.Offset16,X(this,"coverage",()=>(t.currentPosition=this.start+this.coverageOffset,new uo(t))),this.ligGlyphCount=t.uint16,this.ligGlyphOffsets=[...new Array(this.ligGlyphCount)].map(e=>t.Offset16)}getLigGlyph(t){return this.parser.currentPosition=this.start+this.ligGlyphOffsets[t],new Td(this.parser)}},Td=class extends Bt{constructor(t){super(t),this.caretCount=t.uint16,this.caretValueOffsets=[...new Array(this.caretCount)].map(e=>t.Offset16)}getCaretValue(t){return this.parser.currentPosition=this.start+this.caretValueOffsets[t],new _d(this.parser)}},_d=class{constructor(t){this.caretValueFormat=t.uint16,this.caretValueFormat===1&&(this.coordinate=t.int16),this.caretValueFormat===2&&(this.caretValuePointIndex=t.uint16),this.caretValueFormat===3&&(this.coordinate=t.int16,this.deviceOffset=t.Offset16)}},Pd=class extends Bt{constructor(t){super(t),this.markGlyphSetTableFormat=t.uint16,this.markGlyphSetCount=t.uint16,this.coverageOffsets=[...new Array(this.markGlyphSetCount)].map(e=>t.Offset32)}getMarkGlyphSet(t){return this.parser.currentPosition=this.start+this.coverageOffsets[t],new uo(this.parser)}},Ad=Object.freeze({__proto__:null,GDEF:Cd}),il=class extends Bt{static EMPTY={scriptCount:0,scriptRecords:[]};constructor(t){super(t),this.scriptCount=t.uint16,this.scriptRecords=[...new Array(this.scriptCount)].map(e=>new Rd(t))}},Rd=class{constructor(t){this.scriptTag=t.tag,this.scriptOffset=t.Offset16}},Ld=class extends Bt{constructor(t){super(t),this.defaultLangSys=t.Offset16,this.langSysCount=t.uint16,this.langSysRecords=[...new Array(this.langSysCount)].map(e=>new Ed(t))}},Ed=class{constructor(t){this.langSysTag=t.tag,this.langSysOffset=t.Offset16}},ll=class{constructor(t){this.lookupOrder=t.Offset16,this.requiredFeatureIndex=t.uint16,this.featureIndexCount=t.uint16,this.featureIndices=[...new Array(this.featureIndexCount)].map(e=>t.uint16)}},ul=class extends Bt{static EMPTY={featureCount:0,featureRecords:[]};constructor(t){super(t),this.featureCount=t.uint16,this.featureRecords=[...new Array(this.featureCount)].map(e=>new Id(t))}},Id=class{constructor(t){this.featureTag=t.tag,this.featureOffset=t.Offset16}},Bd=class extends Bt{constructor(t){super(t),this.featureParams=t.Offset16,this.lookupIndexCount=t.uint16,this.lookupListIndices=[...new Array(this.lookupIndexCount)].map(e=>t.uint16)}getFeatureParams(){if(this.featureParams>0){let t=this.parser;t.currentPosition=this.start+this.featureParams;let e=this.featureTag;if(e==="size")return new Dd(t);if(e.startsWith("cc"))return new Vd(t);if(e.startsWith("ss"))return new Nd(t)}}},Vd=class{constructor(t){this.format=t.uint16,this.featUiLabelNameId=t.uint16,this.featUiTooltipTextNameId=t.uint16,this.sampleTextNameId=t.uint16,this.numNamedParameters=t.uint16,this.firstParamUiLabelNameId=t.uint16,this.charCount=t.uint16,this.character=[...new Array(this.charCount)].map(e=>t.uint24)}},Dd=class{constructor(t){this.designSize=t.uint16,this.subfamilyIdentifier=t.uint16,this.subfamilyNameID=t.uint16,this.smallEnd=t.uint16,this.largeEnd=t.uint16}},Nd=class{constructor(t){this.version=t.uint16,this.UINameID=t.uint16}};function pl(t){t.parser.currentPosition-=2,delete t.coverageOffset,delete t.getCoverageTable}var xr=class extends Bt{constructor(t){super(t),this.substFormat=t.uint16,this.coverageOffset=t.Offset16}getCoverageTable(){let t=this.parser;return t.currentPosition=this.start+this.coverageOffset,new uo(t)}},nn=class{constructor(t){this.glyphSequenceIndex=t.uint16,this.lookupListIndex=t.uint16}},zd=class extends xr{constructor(t){super(t),this.deltaGlyphID=t.int16}},Md=class extends xr{constructor(t){super(t),this.sequenceCount=t.uint16,this.sequenceOffsets=[...new Array(this.sequenceCount)].map(e=>t.Offset16)}getSequence(t){let e=this.parser;return e.currentPosition=this.start+this.sequenceOffsets[t],new Gd(e)}},Gd=class{constructor(t){this.glyphCount=t.uint16,this.substituteGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},jd=class extends xr{constructor(t){super(t),this.alternateSetCount=t.uint16,this.alternateSetOffsets=[...new Array(this.alternateSetCount)].map(e=>t.Offset16)}getAlternateSet(t){let e=this.parser;return e.currentPosition=this.start+this.alternateSetOffsets[t],new Ud(e)}},Ud=class{constructor(t){this.glyphCount=t.uint16,this.alternateGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},Hd=class extends xr{constructor(t){super(t),this.ligatureSetCount=t.uint16,this.ligatureSetOffsets=[...new Array(this.ligatureSetCount)].map(e=>t.Offset16)}getLigatureSet(t){let e=this.parser;return e.currentPosition=this.start+this.ligatureSetOffsets[t],new Wd(e)}},Wd=class extends Bt{constructor(t){super(t),this.ligatureCount=t.uint16,this.ligatureOffsets=[...new Array(this.ligatureCount)].map(e=>t.Offset16)}getLigature(t){let e=this.parser;return e.currentPosition=this.start+this.ligatureOffsets[t],new qd(e)}},qd=class{constructor(t){this.ligatureGlyph=t.uint16,this.componentCount=t.uint16,this.componentGlyphIDs=[...new Array(this.componentCount-1)].map(e=>t.uint16)}},Zd=class extends xr{constructor(t){super(t),this.substFormat===1&&(this.subRuleSetCount=t.uint16,this.subRuleSetOffsets=[...new Array(this.subRuleSetCount)].map(e=>t.Offset16)),this.substFormat===2&&(this.classDefOffset=t.Offset16,this.subClassSetCount=t.uint16,this.subClassSetOffsets=[...new Array(this.subClassSetCount)].map(e=>t.Offset16)),this.substFormat===3&&(pl(this),this.glyphCount=t.uint16,this.substitutionCount=t.uint16,this.coverageOffsets=[...new Array(this.glyphCount)].map(e=>t.Offset16),this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new nn(t)))}getSubRuleSet(t){if(this.substFormat!==1)throw new Error(`lookup type 5.${this.substFormat} has no subrule sets.`);let e=this.parser;return e.currentPosition=this.start+this.subRuleSetOffsets[t],new Yd(e)}getSubClassSet(t){if(this.substFormat!==2)throw new Error(`lookup type 5.${this.substFormat} has no subclass sets.`);let e=this.parser;return e.currentPosition=this.start+this.subClassSetOffsets[t],new Xd(e)}getCoverageTable(t){if(this.substFormat!==3&&!t)return super.getCoverageTable();if(!t)throw new Error(`lookup type 5.${this.substFormat} requires an coverage table index.`);let e=this.parser;return e.currentPosition=this.start+this.coverageOffsets[t],new uo(e)}},Yd=class extends Bt{constructor(t){super(t),this.subRuleCount=t.uint16,this.subRuleOffsets=[...new Array(this.subRuleCount)].map(e=>t.Offset16)}getSubRule(t){let e=this.parser;return e.currentPosition=this.start+this.subRuleOffsets[t],new hl(e)}},hl=class{constructor(t){this.glyphCount=t.uint16,this.substitutionCount=t.uint16,this.inputSequence=[...new Array(this.glyphCount-1)].map(e=>t.uint16),this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new nn(t))}},Xd=class extends Bt{constructor(t){super(t),this.subClassRuleCount=t.uint16,this.subClassRuleOffsets=[...new Array(this.subClassRuleCount)].map(e=>t.Offset16)}getSubClass(t){let e=this.parser;return e.currentPosition=this.start+this.subClassRuleOffsets[t],new Kd(e)}},Kd=class extends hl{constructor(t){super(t)}},Jd=class extends xr{constructor(t){super(t),this.substFormat===1&&(this.chainSubRuleSetCount=t.uint16,this.chainSubRuleSetOffsets=[...new Array(this.chainSubRuleSetCount)].map(e=>t.Offset16)),this.substFormat===2&&(this.backtrackClassDefOffset=t.Offset16,this.inputClassDefOffset=t.Offset16,this.lookaheadClassDefOffset=t.Offset16,this.chainSubClassSetCount=t.uint16,this.chainSubClassSetOffsets=[...new Array(this.chainSubClassSetCount)].map(e=>t.Offset16)),this.substFormat===3&&(pl(this),this.backtrackGlyphCount=t.uint16,this.backtrackCoverageOffsets=[...new Array(this.backtrackGlyphCount)].map(e=>t.Offset16),this.inputGlyphCount=t.uint16,this.inputCoverageOffsets=[...new Array(this.inputGlyphCount)].map(e=>t.Offset16),this.lookaheadGlyphCount=t.uint16,this.lookaheadCoverageOffsets=[...new Array(this.lookaheadGlyphCount)].map(e=>t.Offset16),this.seqLookupCount=t.uint16,this.seqLookupRecords=[...new Array(this.substitutionCount)].map(e=>new gl(t)))}getChainSubRuleSet(t){if(this.substFormat!==1)throw new Error(`lookup type 6.${this.substFormat} has no chainsubrule sets.`);let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleSetOffsets[t],new Qd(e)}getChainSubClassSet(t){if(this.substFormat!==2)throw new Error(`lookup type 6.${this.substFormat} has no chainsubclass sets.`);let e=this.parser;return e.currentPosition=this.start+this.chainSubClassSetOffsets[t],new tm(e)}getCoverageFromOffset(t){if(this.substFormat!==3)throw new Error(`lookup type 6.${this.substFormat} does not use contextual coverage offsets.`);let e=this.parser;return e.currentPosition=this.start+t,new uo(e)}},Qd=class extends Bt{constructor(t){super(t),this.chainSubRuleCount=t.uint16,this.chainSubRuleOffsets=[...new Array(this.chainSubRuleCount)].map(e=>t.Offset16)}getSubRule(t){let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleOffsets[t],new $d(e)}},$d=class{constructor(t){this.backtrackGlyphCount=t.uint16,this.backtrackSequence=[...new Array(this.backtrackGlyphCount)].map(e=>t.uint16),this.inputGlyphCount=t.uint16,this.inputSequence=[...new Array(this.inputGlyphCount-1)].map(e=>t.uint16),this.lookaheadGlyphCount=t.uint16,this.lookAheadSequence=[...new Array(this.lookAheadGlyphCount)].map(e=>t.uint16),this.substitutionCount=t.uint16,this.substLookupRecords=[...new Array(this.SubstCount)].map(e=>new nn(t))}},tm=class extends Bt{constructor(t){super(t),this.chainSubClassRuleCount=t.uint16,this.chainSubClassRuleOffsets=[...new Array(this.chainSubClassRuleCount)].map(e=>t.Offset16)}getSubClass(t){let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleOffsets[t],new em(e)}},em=class{constructor(t){this.backtrackGlyphCount=t.uint16,this.backtrackSequence=[...new Array(this.backtrackGlyphCount)].map(e=>t.uint16),this.inputGlyphCount=t.uint16,this.inputSequence=[...new Array(this.inputGlyphCount-1)].map(e=>t.uint16),this.lookaheadGlyphCount=t.uint16,this.lookAheadSequence=[...new Array(this.lookAheadGlyphCount)].map(e=>t.uint16),this.substitutionCount=t.uint16,this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new gl(t))}},gl=class extends Bt{constructor(t){super(t),this.sequenceIndex=t.uint16,this.lookupListIndex=t.uint16}},rm=class extends Bt{constructor(t){super(t),this.substFormat=t.uint16,this.extensionLookupType=t.uint16,this.extensionOffset=t.Offset32}},om=class extends xr{constructor(t){super(t),this.backtrackGlyphCount=t.uint16,this.backtrackCoverageOffsets=[...new Array(this.backtrackGlyphCount)].map(e=>t.Offset16),this.lookaheadGlyphCount=t.uint16,this.lookaheadCoverageOffsets=[new Array(this.lookaheadGlyphCount)].map(e=>t.Offset16),this.glyphCount=t.uint16,this.substituteGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},sm={buildSubtable:function(t,e){let r=new[void 0,zd,Md,jd,Hd,Zd,Jd,rm,om][t](e);return r.type=t,r}},qe=class extends Bt{constructor(t){super(t)}},nm=class extends qe{constructor(t){super(t),console.log("lookup type 1")}},am=class extends qe{constructor(t){super(t),console.log("lookup type 2")}},im=class extends qe{constructor(t){super(t),console.log("lookup type 3")}},lm=class extends qe{constructor(t){super(t),console.log("lookup type 4")}},um=class extends qe{constructor(t){super(t),console.log("lookup type 5")}},fm=class extends qe{constructor(t){super(t),console.log("lookup type 6")}},cm=class extends qe{constructor(t){super(t),console.log("lookup type 7")}},dm=class extends qe{constructor(t){super(t),console.log("lookup type 8")}},mm=class extends qe{constructor(t){super(t),console.log("lookup type 9")}},pm={buildSubtable:function(t,e){let r=new[void 0,nm,am,im,lm,um,fm,cm,dm,mm][t](e);return r.type=t,r}},fl=class extends Bt{static EMPTY={lookupCount:0,lookups:[]};constructor(t){super(t),this.lookupCount=t.uint16,this.lookups=[...new Array(this.lookupCount)].map(e=>t.Offset16)}},hm=class extends Bt{constructor(t,e){super(t),this.ctType=e,this.lookupType=t.uint16,this.lookupFlag=t.uint16,this.subTableCount=t.uint16,this.subtableOffsets=[...new Array(this.subTableCount)].map(r=>t.Offset16),this.markFilteringSet=t.uint16}get rightToLeft(){return this.lookupFlag&!0}get ignoreBaseGlyphs(){return this.lookupFlag&!0}get ignoreLigatures(){return this.lookupFlag&!0}get ignoreMarks(){return this.lookupFlag&!0}get useMarkFilteringSet(){return this.lookupFlag&!0}get markAttachmentType(){return this.lookupFlag&!0}getSubTable(t){let e=this.ctType==="GSUB"?sm:pm;return this.parser.currentPosition=this.start+this.subtableOffsets[t],e.buildSubtable(this.lookupType,this.parser)}},yl=class extends mt{constructor(t,e,r){let{p:o,tableStart:s}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.scriptListOffset=o.Offset16,this.featureListOffset=o.Offset16,this.lookupListOffset=o.Offset16,this.majorVersion===1&&this.minorVersion===1&&(this.featureVariationsOffset=o.Offset32);let a=!(this.scriptListOffset||this.featureListOffset||this.lookupListOffset);X(this,"scriptList",()=>a?il.EMPTY:(o.currentPosition=s+this.scriptListOffset,new il(o))),X(this,"featureList",()=>a?ul.EMPTY:(o.currentPosition=s+this.featureListOffset,new ul(o))),X(this,"lookupList",()=>a?fl.EMPTY:(o.currentPosition=s+this.lookupListOffset,new fl(o))),this.featureVariationsOffset&&X(this,"featureVariations",()=>a?FeatureVariations.EMPTY:(o.currentPosition=s+this.featureVariationsOffset,new FeatureVariations(o)))}getSupportedScripts(){return this.scriptList.scriptRecords.map(t=>t.scriptTag)}getScriptTable(t){let e=this.scriptList.scriptRecords.find(o=>o.scriptTag===t);this.parser.currentPosition=this.scriptList.start+e.scriptOffset;let r=new Ld(this.parser);return r.scriptTag=t,r}ensureScriptTable(t){return typeof t=="string"?this.getScriptTable(t):t}getSupportedLangSys(t){t=this.ensureScriptTable(t);let e=t.defaultLangSys!==0,r=t.langSysRecords.map(o=>o.langSysTag);return e&&r.unshift("dflt"),r}getDefaultLangSysTable(t){t=this.ensureScriptTable(t);let e=t.defaultLangSys;if(e!==0){this.parser.currentPosition=t.start+e;let r=new ll(this.parser);return r.langSysTag="",r.defaultForScript=t.scriptTag,r}}getLangSysTable(t,e="dflt"){if(e==="dflt")return this.getDefaultLangSysTable(t);t=this.ensureScriptTable(t);let r=t.langSysRecords.find(s=>s.langSysTag===e);this.parser.currentPosition=t.start+r.langSysOffset;let o=new ll(this.parser);return o.langSysTag=e,o}getFeatures(t){return t.featureIndices.map(e=>this.getFeature(e))}getFeature(t){let e;if(parseInt(t)==t?e=this.featureList.featureRecords[t]:e=this.featureList.featureRecords.find(o=>o.featureTag===t),!e)return;this.parser.currentPosition=this.featureList.start+e.featureOffset;let r=new Bd(this.parser);return r.featureTag=e.featureTag,r}getLookups(t){return t.lookupListIndices.map(e=>this.getLookup(e))}getLookup(t,e){let r=this.lookupList.lookups[t];return this.parser.currentPosition=this.lookupList.start+r,new hm(this.parser,e)}},gm=class extends yl{constructor(t,e){super(t,e,"GSUB")}getLookup(t){return super.getLookup(t,"GSUB")}},ym=Object.freeze({__proto__:null,GSUB:gm}),vm=class extends yl{constructor(t,e){super(t,e,"GPOS")}getLookup(t){return super.getLookup(t,"GPOS")}},bm=Object.freeze({__proto__:null,GPOS:vm}),wm=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.offsetToSVGDocumentList=r.Offset32,r.currentPosition=this.tableStart+this.offsetToSVGDocumentList,this.documentList=new Sm(r)}},Sm=class extends Bt{constructor(t){super(t),this.numEntries=t.uint16,this.documentRecords=[...new Array(this.numEntries)].map(e=>new xm(t))}getDocument(t){let e=this.documentRecords[t];if(!e)return"";let r=this.start+e.svgDocOffset;return this.parser.currentPosition=r,this.parser.readBytes(e.svgDocLength)}getDocumentForGlyph(t){let e=this.documentRecords.findIndex(r=>r.startGlyphID<=t&&t<=r.endGlyphID);return e===-1?"":this.getDocument(e)}},xm=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.svgDocOffset=t.Offset32,this.svgDocLength=t.uint32}},Cm=Object.freeze({__proto__:null,SVG:wm}),Fm=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.axesArrayOffset=r.Offset16,r.uint16,this.axisCount=r.uint16,this.axisSize=r.uint16,this.instanceCount=r.uint16,this.instanceSize=r.uint16;let o=this.tableStart+this.axesArrayOffset;X(this,"axes",()=>(r.currentPosition=o,[...new Array(this.axisCount)].map(a=>new km(r))));let s=o+this.axisCount*this.axisSize;X(this,"instances",()=>{let a=[];for(let n=0;nt.tag)}getAxis(t){return this.axes.find(e=>e.tag===t)}},km=class{constructor(t){this.tag=t.tag,this.minValue=t.fixed,this.defaultValue=t.fixed,this.maxValue=t.fixed,this.flags=t.flags(16),this.axisNameID=t.uint16}},Om=class{constructor(t,e,r){let o=t.currentPosition;this.subfamilyNameID=t.uint16,t.uint16,this.coordinates=[...new Array(e)].map(s=>t.fixed),t.currentPosition-o[...new Array(o)].map(s=>r.fword))}},Pm=Object.freeze({__proto__:null,cvt:_m}),Am=class extends mt{constructor(t,e){let{p:r}=super(t,e);X(this,"instructions",()=>[...new Array(t.length)].map(o=>r.uint8))}},Rm=Object.freeze({__proto__:null,fpgm:Am}),Lm=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numRanges=r.uint16,X(this,"gaspRanges",()=>[...new Array(this.numRanges)].map(s=>new Em(r)))}},Em=class{constructor(t){this.rangeMaxPPEM=t.uint16,this.rangeGaspBehavior=t.uint16}},Im=Object.freeze({__proto__:null,gasp:Lm}),Bm=class extends mt{constructor(t,e){super(t,e)}getGlyphData(t,e){return this.parser.currentPosition=this.tableStart+t,this.parser.readBytes(e)}},Vm=Object.freeze({__proto__:null,glyf:Bm}),Dm=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.maxp.numGlyphs+1;r.head.indexToLocFormat===0?(this.x2=!0,X(this,"offsets",()=>[...new Array(s)].map(a=>o.Offset16))):X(this,"offsets",()=>[...new Array(s)].map(a=>o.Offset32))}getGlyphDataOffsetAndLength(t){let e=this.offsets[t]*this.x2?2:1,r=this.offsets[t+1]*this.x2?2:1;return{offset:e,length:r-e}}},Nm=Object.freeze({__proto__:null,loca:Dm}),zm=class extends mt{constructor(t,e){let{p:r}=super(t,e);X(this,"instructions",()=>[...new Array(t.length)].map(o=>r.uint8))}},Mm=Object.freeze({__proto__:null,prep:zm}),Gm=class extends mt{constructor(t,e){let{p:r}=super(t,e);X(this,"data",()=>r.readBytes())}},jm=Object.freeze({__proto__:null,CFF:Gm}),Um=class extends mt{constructor(t,e){let{p:r}=super(t,e);X(this,"data",()=>r.readBytes())}},Hm=Object.freeze({__proto__:null,CFF2:Um}),Wm=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.defaultVertOriginY=r.int16,this.numVertOriginYMetrics=r.uint16,X(this,"vertORiginYMetrics",()=>[...new Array(this.numVertOriginYMetrics)].map(o=>new qm(r)))}},qm=class{constructor(t){this.glyphIndex=t.uint16,this.vertOriginY=t.int16}},Zm=Object.freeze({__proto__:null,VORG:Wm}),Ym=class{constructor(t){this.indexSubTableArrayOffset=t.Offset32,this.indexTablesSize=t.uint32,this.numberofIndexSubTables=t.uint32,this.colorRef=t.uint32,this.hori=new $o(t),this.vert=new $o(t),this.startGlyphIndex=t.uint16,this.endGlyphIndex=t.uint16,this.ppemX=t.uint8,this.ppemY=t.uint8,this.bitDepth=t.uint8,this.flags=t.int8}},Xm=class{constructor(t){this.hori=new $o(t),this.vert=new $o(t),this.ppemX=t.uint8,this.ppemY=t.uint8,this.substitutePpemX=t.uint8,this.substitutePpemY=t.uint8}},$o=class{constructor(t){this.ascender=t.int8,this.descender=t.int8,this.widthMax=t.uint8,this.caretSlopeNumerator=t.int8,this.caretSlopeDenominator=t.int8,this.caretOffset=t.int8,this.minOriginSB=t.int8,this.minAdvanceSB=t.int8,this.maxBeforeBL=t.int8,this.minAfterBL=t.int8,this.pad1=t.int8,this.pad2=t.int8}},vl=class extends mt{constructor(t,e,r){let{p:o}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.numSizes=o.uint32,X(this,"bitMapSizes",()=>[...new Array(this.numSizes)].map(s=>new Ym(o)))}},Km=Object.freeze({__proto__:null,EBLC:vl}),bl=class extends mt{constructor(t,e,r){let{p:o}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16}},Jm=Object.freeze({__proto__:null,EBDT:bl}),Qm=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.numSizes=r.uint32,X(this,"bitmapScales",()=>[...new Array(this.numSizes)].map(o=>new Xm(r)))}},$m=Object.freeze({__proto__:null,EBSC:Qm}),tp=class extends vl{constructor(t,e){super(t,e,"CBLC")}},ep=Object.freeze({__proto__:null,CBLC:tp}),rp=class extends bl{constructor(t,e){super(t,e,"CBDT")}},op=Object.freeze({__proto__:null,CBDT:rp}),sp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.flags=r.flags(16),this.numStrikes=r.uint32,X(this,"strikeOffsets",()=>[...new Array(this.numStrikes)].map(o=>r.Offset32))}},np=Object.freeze({__proto__:null,sbix:sp}),ap=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numBaseGlyphRecords=r.uint16,this.baseGlyphRecordsOffset=r.Offset32,this.layerRecordsOffset=r.Offset32,this.numLayerRecords=r.uint16}getBaseGlyphRecord(t){let e=this.tableStart+this.baseGlyphRecordsOffset;this.parser.currentPosition=e;let r=new sn(this.parser),o=r.gID,s=this.tableStart+this.layerRecordsOffset-6;this.parser.currentPosition=s;let a=new sn(this.parser),n=a.gID;if(o===t)return r;if(n===t)return a;for(;e!==s;){let l=e+(s-e)/12;this.parser.currentPosition=l;let m=new sn(this.parser),f=m.gID;if(f===t)return m;f>t?s=l:fnew ip(p))}},sn=class{constructor(t){this.gID=t.uint16,this.firstLayerIndex=t.uint16,this.numLayers=t.uint16}},ip=class{constructor(t){this.gID=t.uint16,this.paletteIndex=t.uint16}},lp=Object.freeze({__proto__:null,COLR:ap}),up=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numPaletteEntries=r.uint16;let o=this.numPalettes=r.uint16;this.numColorRecords=r.uint16,this.offsetFirstColorRecord=r.Offset32,this.colorRecordIndices=[...new Array(this.numPalettes)].map(s=>r.uint16),X(this,"colorRecords",()=>(r.currentPosition=this.tableStart+this.offsetFirstColorRecord,[...new Array(this.numColorRecords)].map(s=>new fp(r)))),this.version===1&&(this.offsetPaletteTypeArray=r.Offset32,this.offsetPaletteLabelArray=r.Offset32,this.offsetPaletteEntryLabelArray=r.Offset32,X(this,"paletteTypeArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteTypeArray,new cp(r,o))),X(this,"paletteLabelArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteLabelArray,new dp(r,o))),X(this,"paletteEntryLabelArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteEntryLabelArray,new mp(r,o))))}},fp=class{constructor(t){this.blue=t.uint8,this.green=t.uint8,this.red=t.uint8,this.alpha=t.uint8}},cp=class{constructor(t,e){this.paletteTypes=[...new Array(e)].map(r=>t.uint32)}},dp=class{constructor(t,e){this.paletteLabels=[...new Array(e)].map(r=>t.uint16)}},mp=class{constructor(t,e){this.paletteEntryLabels=[...new Array(e)].map(r=>t.uint16)}},pp=Object.freeze({__proto__:null,CPAL:up}),hp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint32,this.numSignatures=r.uint16,this.flags=r.uint16,this.signatureRecords=[...new Array(this.numSignatures)].map(o=>new gp(r))}getData(t){let e=this.signatureRecords[t];return this.parser.currentPosition=this.tableStart+e.offset,new yp(this.parser)}},gp=class{constructor(t){this.format=t.uint32,this.length=t.uint32,this.offset=t.Offset32}},yp=class{constructor(t){t.uint16,t.uint16,this.signatureLength=t.uint32,this.signature=t.readBytes(this.signatureLength)}},vp=Object.freeze({__proto__:null,DSIG:hp}),bp=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.hmtx.numGlyphs;this.version=o.uint16,this.numRecords=o.int16,this.sizeDeviceRecord=o.int32,this.records=[...new Array(numRecords)].map(a=>new wp(o,s))}},wp=class{constructor(t,e){this.pixelSize=t.uint8,this.maxWidth=t.uint8,this.widths=t.readBytes(e)}},Sp=Object.freeze({__proto__:null,hdmx:bp}),xp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.nTables=r.uint16,X(this,"tables",()=>{let o=this.tableStart+4,s=[];for(let a=0;a[...new Array(this.nPairs)].map(e=>new Fp(t)))),this.format===2&&console.warn("Kern subtable format 2 is not supported: this parser currently only parses universal table data.")}get horizontal(){return this.coverage[0]}get minimum(){return this.coverage[1]}get crossstream(){return this.coverage[2]}get override(){return this.coverage[3]}},Fp=class{constructor(t){this.left=t.uint16,this.right=t.uint16,this.value=t.fword}},kp=Object.freeze({__proto__:null,kern:xp}),Op=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numGlyphs=r.uint16,this.yPels=r.readBytes(this.numGlyphs)}},Tp=Object.freeze({__proto__:null,LTSH:Op}),_p=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.mergeClassCount=r.uint16,this.mergeDataOffset=r.Offset16,this.classDefCount=r.uint16,this.offsetToClassDefOffsets=r.Offset16,X(this,"mergeEntryMatrix",()=>[...new Array(this.mergeClassCount)].map(o=>r.readBytes(this.mergeClassCount))),console.warn("Full MERG parsing is currently not supported."),console.warn("If you need this table parsed, please file an issue, or better yet, a PR.")}},Pp=Object.freeze({__proto__:null,MERG:_p}),Ap=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint32,this.flags=r.uint32,r.uint32,this.dataMapsCount=r.uint32,this.dataMaps=[...new Array(this.dataMapsCount)].map(o=>new Rp(this.tableStart,r))}},Rp=class{constructor(t,e){this.tableStart=t,this.parser=e,this.tag=e.tag,this.dataOffset=e.Offset32,this.dataLength=e.uint32}getData(){return this.parser.currentField=this.tableStart+this.dataOffset,this.parser.readBytes(this.dataLength)}},Lp=Object.freeze({__proto__:null,meta:Ap}),Ep=class extends mt{constructor(t,e){super(t,e),console.warn("This font uses a PCLT table, which is currently not supported by this parser."),console.warn("If you need this table parsed, please file an issue, or better yet, a PR.")}},Ip=Object.freeze({__proto__:null,PCLT:Ep}),Bp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numRecs=r.uint16,this.numRatios=r.uint16,this.ratRanges=[...new Array(this.numRatios)].map(o=>new Vp(r)),this.offsets=[...new Array(this.numRatios)].map(o=>r.Offset16),this.VDMXGroups=[...new Array(this.numRecs)].map(o=>new Dp(r))}},Vp=class{constructor(t){this.bCharSet=t.uint8,this.xRatio=t.uint8,this.yStartRatio=t.uint8,this.yEndRatio=t.uint8}},Dp=class{constructor(t){this.recs=t.uint16,this.startsz=t.uint8,this.endsz=t.uint8,this.records=[...new Array(this.recs)].map(e=>new Np(t))}},Np=class{constructor(t){this.yPelHeight=t.uint16,this.yMax=t.int16,this.yMin=t.int16}},zp=Object.freeze({__proto__:null,VDMX:Bp}),Mp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.fixed,this.ascent=this.vertTypoAscender=r.int16,this.descent=this.vertTypoDescender=r.int16,this.lineGap=this.vertTypoLineGap=r.int16,this.advanceHeightMax=r.int16,this.minTopSideBearing=r.int16,this.minBottomSideBearing=r.int16,this.yMaxExtent=r.int16,this.caretSlopeRise=r.int16,this.caretSlopeRun=r.int16,this.caretOffset=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.metricDataFormat=r.int16,this.numOfLongVerMetrics=r.uint16,r.verifyLength()}},Gp=Object.freeze({__proto__:null,vhea:Mp}),jp=class extends mt{constructor(t,e,r){super(t,e);let o=r.vhea.numOfLongVerMetrics,s=r.maxp.numGlyphs,a=p.currentPosition;if(lazy(this,"vMetrics",()=>(p.currentPosition=a,[...new Array(o)].map(n=>new Up(p.uint16,p.int16)))),o(p.currentPosition=n,[...new Array(s-o)].map(l=>p.int16)))}}},Up=class{constructor(t,e){this.advanceHeight=t,this.topSideBearing=e}},Hp=Object.freeze({__proto__:null,vmtx:jp});var wl=u(Y(),1);var{kebabCase:Wp}=yt(wl.privateApis);function Sl(t){let e=t.reduce((r,o)=>(r[o.fontFamily]||(r[o.fontFamily]={name:o.fontFamily,fontFamily:o.fontFamily,slug:Wp(o.fontFamily.toLowerCase()),fontFace:[]}),r[o.fontFamily].fontFace.push(o),r),{});return Object.values(e)}var pe=u(z(),1);function qp(){let{installFonts:t}=(0,fo.useContext)(ne),[e,r]=(0,fo.useState)(!1),[o,s]=(0,fo.useState)(null),a=g=>{l(g)},n=g=>{l(g.target.files)},l=async g=>{if(!g)return;s(null),r(!0);let v=new Set,_=[...g],A=!1,k=_.map(async b=>{if(!await f(b))return A=!0,null;if(v.has(b.name))return null;let q=(((b.name??"").split(".")??[]).pop()??"").toLowerCase();return $s.includes(q)?(v.add(b.name),b):null}),x=(await Promise.all(k)).filter(b=>b!==null);if(x.length>0)m(x);else{let b=A?(0,Gr.__)("Sorry, you are not allowed to upload this file type."):(0,Gr.__)("No fonts found to install.");s({type:"error",message:b}),r(!1)}},m=async g=>{let v=await Promise.all(g.map(async _=>{let A=await d(_);return await er(A,A.file,"all"),A}));h(v)};async function f(g){let v=new ts("Uploaded Font");try{let _=await c(g);return await v.fromDataBuffer(_,"font"),!0}catch{return!1}}async function c(g){return new Promise((v,_)=>{let A=new window.FileReader;A.readAsArrayBuffer(g),A.onload=()=>v(A.result),A.onerror=_})}let d=async g=>{let v=await c(g),_=new ts("Uploaded Font");_.fromDataBuffer(v,g.name);let k=(await new Promise($=>_.onload=$)).detail.font,{name:x}=k.opentype.tables,b=x.get(16)||x.get(1),T=x.get(2).toLowerCase().includes("italic"),q=k.opentype.tables["OS/2"].usWeightClass||"normal",D=!!k.opentype.tables.fvar&&k.opentype.tables.fvar.axes.find(({tag:$})=>$==="wght"),H=D?`${D.minValue} ${D.maxValue}`:null;return{file:g,fontFamily:b,fontStyle:T?"italic":"normal",fontWeight:H||q}},h=async g=>{let v=Sl(g);try{await t(v),s({type:"success",message:(0,Gr.__)("Fonts were installed successfully.")})}catch(_){let A=_;s({type:"error",message:A.message,errors:A?.installationErrors})}r(!1)};return(0,pe.jsxs)("div",{className:"font-library__tabpanel-layout",children:[(0,pe.jsx)($t.DropZone,{onFilesDrop:a}),(0,pe.jsxs)($t.__experimentalVStack,{className:"font-library__local-fonts",justify:"start",children:[o&&(0,pe.jsxs)($t.Notice,{status:o.type,__unstableHTML:!0,onRemove:()=>s(null),children:[o.message,o.errors&&(0,pe.jsx)("ul",{children:o.errors.map((g,v)=>(0,pe.jsx)("li",{children:g},v))})]}),e&&(0,pe.jsx)($t.FlexItem,{children:(0,pe.jsx)("div",{className:"font-library__upload-area",children:(0,pe.jsx)($t.ProgressBar,{})})}),!e&&(0,pe.jsx)($t.FormFileUpload,{accept:$s.map(g=>`.${g}`).join(","),multiple:!0,onChange:n,render:({openFileDialog:g})=>(0,pe.jsx)($t.Button,{__next40pxDefaultSize:!0,className:"font-library__upload-area",onClick:g,children:(0,Gr.__)("Upload font")})}),(0,pe.jsx)($t.__experimentalText,{className:"font-library__upload-area__text",children:(0,Gr.__)("Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2.")})]})]})}var es=qp;var Cl=u(z(),1),{Tabs:JS}=yt(an.privateApis),QS={id:"installed-fonts",title:(0,rs._x)("Library","Font library")},$S={id:"upload-fonts",title:(0,rs._x)("Upload","noun")};var Fl=u(ut(),1),ln=u(Y(),1),Yp=u(vt(),1);var kl=u(z(),1);var un=u(z(),1);var Ol=u(ut(),1),os=u(Y(),1);var Tl=u(z(),1);var cn=u(z(),1);var _e=u(ut(),1),dn=u(Y(),1),rh=u(vt(),1);var _l=u(ce(),1);var th=u(z(),1),{useSettingsForBlockElement:Px,TypographyPanel:Ax}=yt(_l.privateApis);var eh=u(z(),1);var mn=u(z(),1),zx={text:{description:(0,_e.__)("Manage the fonts used on the site."),title:(0,_e.__)("Text")},link:{description:(0,_e.__)("Manage the fonts and typography used on the links."),title:(0,_e.__)("Links")},heading:{description:(0,_e.__)("Manage the fonts and typography used on headings."),title:(0,_e.__)("Headings")},caption:{description:(0,_e.__)("Manage the fonts and typography used on captions."),title:(0,_e.__)("Captions")},button:{description:(0,_e.__)("Manage the fonts and typography used on buttons."),title:(0,_e.__)("Buttons")}};var ah=u(ut(),1),ih=u(Y(),1),Al=u(ce(),1);var jr=u(Y(),1),Pl=u(ut(),1);var nh=u(vt(),1);var oh=u(Y(),1),sh=u(z(),1);var pn=u(z(),1);var hn=u(z(),1),{useSettingsForBlockElement:e2,ColorPanel:r2}=yt(Al.privateApis);var ph=u(ut(),1),Dl=u(Y(),1);var fh=u(ur(),1),gn=u(Y(),1),ch=u(ut(),1);var ns=u(Y(),1);var ss=u(Y(),1);var Rl=u(z(),1);function Ll(){let{paletteColors:t}=Lr();return t.slice(0,4).map(({slug:e,color:r},o)=>(0,Rl.jsx)("div",{style:{flexGrow:1,height:"100%",background:r}},`${e}-${o}`))}var mo=u(z(),1),lh={start:{scale:1,opacity:1},hover:{scale:0,opacity:0}},uh=({label:t,isFocused:e,withHoverView:r})=>(0,mo.jsx)(Br,{label:t,isFocused:e,withHoverView:r,children:({key:o})=>(0,mo.jsx)(ss.__unstableMotion.div,{variants:lh,style:{height:"100%",overflow:"hidden"},children:(0,mo.jsx)(ss.__experimentalHStack,{spacing:0,justify:"center",style:{height:"100%",overflow:"hidden"},children:(0,mo.jsx)(Ll,{})})},o)}),El=uh;var Cr=u(z(),1),Il=["color"];function as({title:t,gap:e=2}){let r=Ro(Il);return r?.length<=1?null:(0,Cr.jsxs)(ns.__experimentalVStack,{spacing:3,children:[t&&(0,Cr.jsx)(Se,{level:3,children:t}),(0,Cr.jsx)(ns.__experimentalGrid,{gap:e,children:r.map((o,s)=>(0,Cr.jsx)(Dr,{variation:o,isPill:!0,properties:Il,showTooltip:!0,children:()=>(0,Cr.jsx)(El,{})},s))})]})}var Bl=u(z(),1);var dh=u(ur(),1),is=u(Y(),1),mh=u(ut(),1);var Vl=u(z(),1);var yn=u(z(),1),{Tabs:T2}=yt(Dl.privateApis);var gh=u(ut(),1),zl=u(ce(),1),yh=u(Y(),1);var Nl=u(ce(),1);var hh=u(z(),1);var{BackgroundPanel:R2}=yt(Nl.privateApis);var vn=u(z(),1),{useHasBackgroundPanel:N2}=yt(zl.privateApis);var Fr=u(Y(),1),bn=u(ut(),1);var xh=u(vt(),1);var vh=u(Y(),1),bh=u(ut(),1),wh=u(z(),1);var wn=u(z(),1),{Menu:K2}=yt(Fr.privateApis);var Ut=u(Y(),1),po=u(ut(),1);var ls=u(vt(),1);var Sn=u(z(),1),{Menu:c6}=yt(Ut.privateApis),d6=[{label:(0,po.__)("Rename"),action:"rename"},{label:(0,po.__)("Delete"),action:"delete"}],m6=[{label:(0,po.__)("Reset"),action:"reset"}];var Ch=u(z(),1);var Oh=u(ut(),1),Gl=u(ce(),1);var Ml=u(ce(),1),Fh=u(vt(),1);var kh=u(z(),1),{useSettingsForBlockElement:x6,DimensionsPanel:C6}=yt(Ml.privateApis);var xn=u(z(),1),{useHasDimensionsPanel:A6,useSettingsForBlockElement:R6}=yt(Gl.privateApis);var Zl=u(Y(),1),Ah=u(ut(),1);var _h=u(ut(),1),Ph=u(Y(),1);var jl=u(be(),1),Ul=u(fe(),1),fs=u(vt(),1),Hl=u(Y(),1),Wl=u(ut(),1);var us=u(z(),1);function Th({gap:t=2}){let{user:e}=(0,fs.useContext)(Xt),r=e?.styles,s=(0,Ul.useSelect)(n=>{let l=n(jl.store).__experimentalGetCurrentThemeGlobalStylesVariations();return Array.isArray(l)?l:void 0},[])?.filter(n=>!ro(n,["color"])&&!ro(n,["typography","spacing"])),a=(0,fs.useMemo)(()=>[...[{title:(0,Wl.__)("Default"),settings:{},styles:{}},...s??[]].map(l=>{let m=l?.styles?.blocks?{...l.styles.blocks}:{};r?.blocks&&Object.keys(r.blocks).forEach(h=>{if(r.blocks?.[h]?.css){let g=m[h]||{},v={css:`${m[h]?.css||""} ${r.blocks?.[h]?.css?.trim()||""}`};m[h]={...g,...v}}});let f=r?.css||l.styles?.css?{css:`${l.styles?.css||""} ${r?.css||""}`}:{},c=Object.keys(m).length>0?{blocks:m}:{},d={...l.styles,...f,...c};return{...l,settings:l.settings??{},styles:d}})],[s,r?.blocks,r?.css]);return!s||s.length<1?null:(0,us.jsx)(Hl.__experimentalGrid,{columns:2,className:"global-styles-ui-style-variations-container",gap:t,children:a.map((n,l)=>(0,us.jsx)(Dr,{variation:n,children:m=>(0,us.jsx)(Ws,{label:n?.title,withHoverView:!0,isFocused:m,variation:n})},l))})}var Cn=Th;var ql=u(z(),1);var Fn=u(z(),1);var Rh=u(ut(),1),Lh=u(Y(),1),Yl=u(ce(),1);var kn=u(z(),1),{AdvancedPanel:X6}=yt(Yl.privateApis);var ou=u(ut(),1),Tn=u(Y(),1),_n=u(vt(),1);var Eh=u(fe(),1),Ih=u(be(),1),Xl=u(vt(),1);var Ql=u(ut(),1),$l=u(Y(),1),cs=u(Jl(),1),Bh=u(be(),1),Vh=u(fe(),1);var tu=u(Js(),1),eu=u(z(),1),tC=3600*1e3*24;var On=u(Y(),1),ho=u(ut(),1);var ru=u(z(),1);var Pn=u(z(),1);var An=u(ut(),1),Ze=u(Y(),1);var Gh=u(vt(),1);var Nh=u(Y(),1),zh=u(ut(),1),Mh=u(z(),1);var Rn=u(z(),1),{Menu:SC}=yt(Ze.privateApis);var iu=u(ut(),1),Ne=u(Y(),1);var lu=u(vt(),1);var jh=u(ce(),1),Uh=u(ut(),1);var Hh=u(z(),1);var Wh=u(Y(),1),su=u(ut(),1),qh=u(z(),1);var go=u(Y(),1),Zh=u(ut(),1),Yh=u(vt(),1),nu=u(z(),1);var Ye=u(Y(),1),au=u(z(),1);var Ln=u(z(),1),{Menu:zC}=yt(Ne.privateApis);var In=u(z(),1);var Bn=u(z(),1);function Ur(t){return function({value:r,baseValue:o,onChange:s,...a}){return(0,Bn.jsx)(to,{value:r,baseValue:o,onChange:s,children:(0,Bn.jsx)(t,{...a})})}}var Qh=Ur(Cn);var $h=Ur(as);var tg=Ur(No);var Hr=u(z(),1);function Vn({value:t,baseValue:e,onChange:r,activeTab:o="installed-fonts"}){let s;switch(o){case"upload-fonts":s=(0,Hr.jsx)(es,{});break;case"installed-fonts":s=(0,Hr.jsx)(qo,{});break;default:s=(0,Hr.jsx)(Yo,{slug:o})}return(0,Hr.jsx)(to,{value:t,baseValue:e,onChange:r,children:(0,Hr.jsx)(Go,{children:s})})}var cu=u(Gs()),{unlock:Dn}=(0,cu.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/font-list-route");if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='89af99528f']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","89af99528f"),t.appendChild(document.createTextNode('@media (min-width:782px){.font-library-modal.font-library-modal{width:65vw}}.font-library-modal .components-modal__header{border-bottom:none}.font-library-modal .components-modal__content{margin-bottom:90px;padding:0}.font-library-modal .font-library__subtitle{font-size:11px;font-weight:499;text-transform:uppercase}.font-library-modal__tab-panel{height:calc(100% - 50px)}.font-library__tabpanel-layout{display:flex;flex-direction:column;height:100%}.font-library__tabpanel-layout>div{flex-grow:1}.font-library__tabpanel-layout .font-library__loading{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;left:0;padding-top:124px;position:absolute;top:0;width:100%}.font-library__footer,.font-library__tabpanel-layout .components-navigator-screen{padding:24px;width:100%}.font-library__footer{background-color:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;flex-grow:0!important;flex-shrink:0;height:90px;position:absolute}.font-library__page-selection{font-size:11px;font-weight:499;text-transform:uppercase}@media (min-width:600px){.font-library__page-selection .font-library__page-selection-trigger{font-size:11px!important;font-weight:499}}.font-library__fonts-title{font-size:11px;font-weight:600;margin-bottom:0;margin-top:0;text-transform:uppercase}.font-library__fonts-list{list-style:none;margin-bottom:0;margin-top:0;padding:0}.font-library__fonts-list-item{margin-bottom:0}.font-library__font-card{border:1px solid #ddd;box-sizing:border-box;height:auto!important;margin-top:-1px;padding:16px;width:100%}.font-library__font-card:hover{background-color:#f0f0f0}.font-library__font-card:focus{position:relative}.font-library__font-card .font-library__font-card__name{font-weight:700}.font-library__font-card .font-library__font-card__count{color:#757575}.font-library__font-card .font-library__font-variant_demo-image{display:block;height:24px;width:auto}.font-library__font-card .font-library__font-variant_demo-text{flex-shrink:0;white-space:nowrap}@media not (prefers-reduced-motion){.font-library__font-card .font-library__font-variant_demo-text{transition:opacity .3s ease-in-out}}.font-library-modal__tablist-container{background:#fff;border-bottom:1px solid #ddd;position:sticky;top:0;z-index:1}.font-library__upload-area{align-items:center;display:flex;height:256px!important;justify-content:center;width:100%}button.font-library__upload-area{background-color:#f0f0f0}.font-library__local-fonts{margin:24px auto;width:80%}.font-library__local-fonts .font-library__upload-area__text{color:#757575}.font-library__google-fonts-confirm{align-items:center;display:flex;justify-content:center;margin-top:64px}.font-library__google-fonts-confirm p{line-height:1.4}.font-library__google-fonts-confirm h2{font-size:1.2rem;font-weight:400}.font-library__google-fonts-confirm .components-card{padding:16px;width:400px}.font-library__google-fonts-confirm .components-button{justify-content:center;width:100%}.font-library__select-all{padding:16px 16px 16px 17px}.font-library__select-all .components-checkbox-control__label{padding-left:16px}.global-styles-ui-pagination .components-button.is-tertiary{height:32px;justify-content:center;width:32px}.global-styles-ui-screen-revisions__revisions-list{flex-grow:1;list-style:none;margin:0 16px 16px}.global-styles-ui-screen-revisions__revisions-list li{margin-bottom:0}.global-styles-ui-screen-revisions__revision-item{cursor:pointer;display:flex;flex-direction:column;position:relative}.global-styles-ui-screen-revisions__revision-item[role=option]:active,.global-styles-ui-screen-revisions__revision-item[role=option]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.global-styles-ui-screen-revisions__revision-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.global-styles-ui-screen-revisions__revision-item:hover .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item:after,.global-styles-ui-screen-revisions__revision-item:before{content:"\\a";display:block;position:absolute}.global-styles-ui-screen-revisions__revision-item:before{background:#ddd;border:4px solid #0000;border-radius:50%;height:8px;left:17px;top:18px;transform:translate(-50%,-50%);width:8px;z-index:1}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:2px;color:var(--wp-admin-theme-color);outline:3px solid #0000;outline-offset:-2px}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]:before{background:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__changes>li,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__meta{color:#1e1e1e}.global-styles-ui-screen-revisions__revision-item:after{border:.5px solid #ddd;height:100%;left:16px;top:0;width:0}.global-styles-ui-screen-revisions__revision-item:first-child:after{top:18px}.global-styles-ui-screen-revisions__revision-item:last-child:after{height:18px}.global-styles-ui-screen-revisions__revision-item-wrapper{display:block;padding:12px 12px 4px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__apply-button.is-primary{align-self:flex-start;margin:4px 12px 12px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__changes,.global-styles-ui-screen-revisions__meta{color:#757575;font-size:12px}.global-styles-ui-screen-revisions__description{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.global-styles-ui-screen-revisions__description .global-styles-ui-screen-revisions__date{font-size:12px;font-weight:600;text-transform:uppercase}.global-styles-ui-screen-revisions__meta{align-items:flex-start;display:flex;justify-content:start;margin-bottom:4px;text-align:left;width:100%}.global-styles-ui-screen-revisions__meta img{border-radius:100%;height:16px;margin-right:8px;width:16px}.global-styles-ui-screen-revisions__loading{margin:24px auto!important}.global-styles-ui-screen-revisions__changes{line-height:1.4;list-style:disc;margin-left:12px;text-align:left}.global-styles-ui-screen-revisions__changes li{margin-bottom:4px}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination{gap:2px;justify-content:space-between}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .edit-site-pagination__total{height:1px;left:-1000px;margin:-1px;overflow:hidden;position:absolute}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-text{font-size:12px;will-change:opacity}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary{color:#1e1e1e}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary:disabled,.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{color:#949494}.global-styles-ui-screen-revisions__footer{background:#fff;border-top:1px solid #ddd;bottom:0;height:56px;min-width:100%;padding:12px;position:sticky;z-index:1}.global-styles-ui-variations_item{box-sizing:border-box;cursor:pointer}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{border-radius:2px;outline:1px solid #0000001a;outline-offset:-1px;overflow:hidden;position:relative}@media not (prefers-reduced-motion){.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{transition:outline .1s linear}}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill{height:32px}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill .block-editor-iframe__scale-container{overflow:hidden}.global-styles-ui-variations_item:not(.is-active):hover .global-styles-ui-variations_item-preview{outline-color:#0000004d}.global-styles-ui-variations_item.is-active .global-styles-ui-variations_item-preview,.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:#1e1e1e;outline-offset:1px;outline-width:var(--wp-admin-border-width-focus)}.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.global-styles-ui-preview{align-items:center;cursor:pointer;display:flex;justify-content:center;line-height:1}.global-styles-ui-preview__wrapper{display:block;max-width:100%;width:100%}.global-styles-ui-typography-preview{align-items:center;background:#f0f0f0;border-radius:2px;display:flex;justify-content:center;margin-bottom:20px;min-height:100px;overflow:hidden}.global-styles-ui-font-size__item{line-break:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.global-styles-ui-font-size__item-value{color:#757575}.global-styles-ui-screen-typography__indicator{align-items:center;border-radius:2px;display:flex!important;font-size:14px;height:24px;justify-content:center;width:24px}.global-styles-ui-block-types-search{margin-bottom:10px;padding:0 16px}.global-styles-ui-screen-typography__font-variants-count{color:#757575}.global-styles-ui-font-families__manage-fonts{justify-content:center}.global-styles-ui-screen .color-block-support-panel{border-top:none;padding-left:0;padding-right:0;padding-top:0;row-gap:12px}.global-styles-ui-header{margin-bottom:0!important}.global-styles-ui-subtitle{font-size:11px!important;font-weight:499!important;margin-bottom:0!important;text-transform:uppercase}.global-styles-ui-section-title{color:#2f2f2f;font-weight:600;line-height:1.2;margin:0;padding:16px 16px 0}.global-styles-ui-icon-with-current-color{fill:currentColor}.global-styles-ui__color-indicator-wrapper{flex-shrink:0;height:24px}.global-styles-ui__shadows-panel__options-container,.global-styles-ui__typography-panel__options-container{height:24px}.global-styles-ui__block-preview-panel{border:1px solid #ddd;border-radius:2px;overflow:hidden;position:relative;width:100%}.global-styles-ui__shadow-preview-panel{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,8px 8px;background-size:16px 16px;border:1px solid #ddd;border-radius:2px;height:144px;overflow:auto}.global-styles-ui__shadow-preview-panel .global-styles-ui__shadow-preview-block{background-color:#fff;border:1px solid #ddd;border-radius:2px;height:60px;width:60%}.global-styles-ui__shadow-editor__dropdown-content{width:280px}.global-styles-ui__shadow-editor-panel{margin-bottom:4px}.global-styles-ui__shadow-editor__dropdown{position:relative;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle{border-radius:inherit;height:auto;padding-bottom:8px;padding-top:8px;text-align:left;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.global-styles-ui__shadow-editor__remove-button{opacity:0;position:absolute;right:8px;top:8px}.global-styles-ui__shadow-editor__remove-button.global-styles-ui__shadow-editor__remove-button{border:none}.global-styles-ui__shadow-editor__dropdown-toggle:hover+.global-styles-ui__shadow-editor__remove-button,.global-styles-ui__shadow-editor__remove-button:focus,.global-styles-ui__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.global-styles-ui__shadow-editor__remove-button{opacity:1}}.global-styles-ui-screen-css{display:flex;flex:1 1 auto;flex-direction:column;margin:16px}.global-styles-ui-screen-css .components-v-stack{flex:1 1 auto}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{display:flex;flex:1 1 auto;flex-direction:column}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{direction:ltr;flex:1 1 auto}.global-styles-ui-screen-css-help-link{display:inline-block;margin-top:8px}.global-styles-ui-screen-variations{border-top:1px solid #ddd;margin-top:16px}.global-styles-ui-screen-variations>*{margin:24px 16px}.global-styles-ui-sidebar__navigator-provider{height:100%}.global-styles-ui-sidebar__navigator-screen{display:flex;flex-direction:column;height:100%}.global-styles-ui-sidebar__navigator-screen .single-column{grid-column:span 1}.global-styles-ui-screen-root.global-styles-ui-screen-root,.global-styles-ui-screen-style-variations.global-styles-ui-screen-style-variations{background:unset;color:inherit}.global-styles-ui-sidebar__panel .block-editor-block-icon svg{fill:currentColor}.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile,.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile .global-styles-ui-screen-root__active-style-tile-preview{border-radius:2px}.global-styles-ui-screen-root__active-style-tile-preview{clip-path:border-box}.global-styles-ui-color-palette-panel,.global-styles-ui-gradient-palette-panel{padding:16px}.font-library-page__tablist{border-bottom:1px solid #f0f0f0;padding:0 24px}.font-library-page__tab-panel{flex-grow:1;max-height:calc(100% - 110px);overflow:auto}.admin-ui-page:has(.font-library__footer) .font-library-page__tab-panel{max-height:calc(100% - 198px)}')),document.head.appendChild(t)}var{Tabs:ds}=Dn(du.privateApis),{useGlobalStyles:eg}=Dn(mu.privateApis);function rg(){let{records:t=[]}=(0,ms.useEntityRecords)("root","fontCollection",{_fields:"slug,name,description"}),[e,r]=(0,hu.useState)("installed-fonts"),{base:o,user:s,setUser:a,isReady:n}=eg(),l=(0,pu.useSelect)(f=>f(ms.store).canUser("create",{kind:"postType",name:"wp_font_family"}),[]);if(!n)return null;let m=[{id:"installed-fonts",title:(0,yo.__)("Library")}];return l&&(m.push({id:"upload-fonts",title:(0,yo.__)("Upload")}),m.push(...(t||[]).map(({slug:f,name:c})=>({id:f,title:t&&t.length===1&&f==="google-fonts"?(0,yo.__)("Install Fonts"):c})))),React.createElement(ys,{title:(0,yo.__)("Fonts")},React.createElement(ds,{selectedTabId:e,onSelect:f=>r(f)},React.createElement("div",{className:"font-library-page__tablist"},React.createElement(ds.TabList,null,m.map(({id:f,title:c})=>React.createElement(ds.Tab,{key:f,tabId:f},c)))),m.map(({id:f})=>React.createElement(ds.TabPanel,{key:f,tabId:f,focusable:!1,className:"font-library-page__tab-panel"},React.createElement(Vn,{value:s,baseValue:o,onChange:a,activeTab:f})))))}function og(){return React.createElement(rg,null)}var sg=og;export{sg as stage}; +/*! Bundled license information: + +is-plain-object/dist/is-plain-object.mjs: + (*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + *) +*/ diff --git a/src/wp-includes/build/routes/font-list/route.js b/src/wp-includes/build/routes/font-list/route.js new file mode 100644 index 0000000000000..44a1c1946012c --- /dev/null +++ b/src/wp-includes/build/routes/font-list/route.js @@ -0,0 +1,41 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/font-list/route.ts +var import_i18n = __toESM(require_i18n()); +var route = { + title: () => (0, import_i18n.__)("Fonts") +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/font-list/route.min.asset.php b/src/wp-includes/build/routes/font-list/route.min.asset.php new file mode 100644 index 0000000000000..90737f4676d1b --- /dev/null +++ b/src/wp-includes/build/routes/font-list/route.min.asset.php @@ -0,0 +1 @@ + array('wp-i18n'), 'version' => '5bf837c01b0b1bb1bc6f'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/font-list/route.min.js b/src/wp-includes/build/routes/font-list/route.min.js new file mode 100644 index 0000000000000..c26f5df956ebc --- /dev/null +++ b/src/wp-includes/build/routes/font-list/route.min.js @@ -0,0 +1 @@ +var m=Object.create;var n=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var c=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty;var f=(t,o)=>()=>(o||t((o={exports:{}}).exports,o),o.exports);var l=(t,o,r,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of _(o))!d.call(t,e)&&e!==r&&n(t,e,{get:()=>o[e],enumerable:!(i=x(o,e))||i.enumerable});return t};var u=(t,o,r)=>(r=t!=null?m(c(t)):{},l(o||!t||!t.__esModule?n(r,"default",{value:t,enumerable:!0}):r,t));var s=f((a,p)=>{p.exports=window.wp.i18n});var w=u(s()),b={title:()=>(0,w.__)("Fonts")};export{b as route}; diff --git a/src/wp-includes/build/routes/fonts-home/route.js b/src/wp-includes/build/routes/fonts-home/route.js new file mode 100644 index 0000000000000..a696547f4b193 --- /dev/null +++ b/src/wp-includes/build/routes/fonts-home/route.js @@ -0,0 +1,13 @@ +// routes/fonts-home/route.ts +import { redirect } from "@wordpress/route"; +var route = { + beforeLoad: () => { + throw redirect({ + throw: true, + to: "/font-list" + }); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/fonts-home/route.min.asset.php b/src/wp-includes/build/routes/fonts-home/route.min.asset.php new file mode 100644 index 0000000000000..66e99f5b93765 --- /dev/null +++ b/src/wp-includes/build/routes/fonts-home/route.min.asset.php @@ -0,0 +1 @@ + array(), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '63fba8ad1ac5f2b9aba8'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/fonts-home/route.min.js b/src/wp-includes/build/routes/fonts-home/route.min.js new file mode 100644 index 0000000000000..74b899a2807f6 --- /dev/null +++ b/src/wp-includes/build/routes/fonts-home/route.min.js @@ -0,0 +1 @@ +import{redirect as o}from"@wordpress/route";var r={beforeLoad:()=>{throw o({throw:!0,to:"/font-list"})}};export{r as route}; diff --git a/src/wp-includes/build/routes/home/route.js b/src/wp-includes/build/routes/home/route.js new file mode 100644 index 0000000000000..62a63aba827d5 --- /dev/null +++ b/src/wp-includes/build/routes/home/route.js @@ -0,0 +1,46 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/home/route.ts +var import_i18n = __toESM(require_i18n()); +var route = { + title: () => (0, import_i18n.__)("Home"), + async canvas() { + return { + isPreview: true + }; + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/home/route.min.asset.php b/src/wp-includes/build/routes/home/route.min.asset.php new file mode 100644 index 0000000000000..2e5b539a89cf1 --- /dev/null +++ b/src/wp-includes/build/routes/home/route.min.asset.php @@ -0,0 +1 @@ + array('wp-i18n'), 'version' => 'fe372a97c63e869a6bdb'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/home/route.min.js b/src/wp-includes/build/routes/home/route.min.js new file mode 100644 index 0000000000000..133c29e4564bb --- /dev/null +++ b/src/wp-includes/build/routes/home/route.min.js @@ -0,0 +1 @@ +var a=Object.create;var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var x=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var _=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of m(e))!v.call(r,o)&&o!==t&&n(r,o,{get:()=>e[o],enumerable:!(i=c(e,o))||i.enumerable});return r};var d=(r,e,t)=>(t=r!=null?a(u(r)):{},_(e||!r||!r.__esModule?n(t,"default",{value:r,enumerable:!0}):t,r));var p=x((l,s)=>{s.exports=window.wp.i18n});var w=d(p()),y={title:()=>(0,w.__)("Home"),async canvas(){return{isPreview:!0}}};export{y as route}; diff --git a/src/wp-includes/build/routes/navigation-edit/content.js b/src/wp-includes/build/routes/navigation-edit/content.js new file mode 100644 index 0000000000000..90c66da4be4c3 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-edit/content.js @@ -0,0 +1,526 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/html-entities +var require_html_entities = __commonJS({ + "package-external:@wordpress/html-entities"(exports, module) { + module.exports = window.wp.htmlEntities; + } +}); + +// package-external:@wordpress/block-editor +var require_block_editor = __commonJS({ + "package-external:@wordpress/block-editor"(exports, module) { + module.exports = window.wp.blockEditor; + } +}); + +// package-external:@wordpress/blocks +var require_blocks = __commonJS({ + "package-external:@wordpress/blocks"(exports, module) { + module.exports = window.wp.blocks; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// routes/navigation-edit/stage.tsx +import { useParams } from "@wordpress/route"; + +// packages/admin-ui/build-module/breadcrumbs/index.mjs +var import_i18n = __toESM(require_i18n(), 1); +var import_components = __toESM(require_components(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +import { Link } from "@wordpress/route"; +var BreadcrumbItem = ({ + item: { label, to } +}) => { + if (!to) { + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.__experimentalHeading, { level: 1, truncate: true, children: label }) }); + } + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { to, children: label }) }); +}; +var Breadcrumbs = ({ items }) => { + if (!items.length) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("nav", { "aria-label": (0, import_i18n.__)("Breadcrumbs"), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)( + import_components.__experimentalHStack, + { + as: "ul", + className: "admin-ui-breadcrumbs__list", + spacing: 0, + justify: "flex-start", + alignment: "center", + children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BreadcrumbItem, { item }, index)) + } + ) }); +}; +var breadcrumbs_default = Breadcrumbs; + +// node_modules/clsx/dist/clsx.mjs +function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; +} +function clsx() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; +} +var clsx_default = clsx; + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element = __toESM(require_element(), 1); +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components3 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components2 = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components2.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_components3.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_components3.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_components3.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_components3.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( + import_components3.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/navigation-edit/stage.tsx +var import_data3 = __toESM(require_data()); +var import_core_data2 = __toESM(require_core_data()); +var import_i18n3 = __toESM(require_i18n()); +var import_html_entities = __toESM(require_html_entities()); + +// routes/navigation-edit/editor/index.tsx +var import_element3 = __toESM(require_element()); +var import_block_editor3 = __toESM(require_block_editor()); +var import_blocks2 = __toESM(require_blocks()); +var import_components5 = __toESM(require_components()); +import { useEditorAssets } from "@wordpress/lazy-editor"; + +// routes/navigation-edit/editor/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='023c02af3d']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "023c02af3d"); + style.appendChild(document.createTextNode(".navigation-edit-editor__hidden-blocks{display:none}")); + document.head.appendChild(style); +} + +// routes/navigation-edit/editor/content.tsx +var import_block_editor2 = __toESM(require_block_editor()); +var import_data2 = __toESM(require_data()); +var import_blocks = __toESM(require_blocks()); +var import_element2 = __toESM(require_element()); +var import_core_data = __toESM(require_core_data()); + +// routes/lock-unlock.ts +var import_private_apis = __toESM(require_private_apis()); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// packages/icons/build-module/library/chevron-down.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var chevron_down_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives.Path, { d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z" }) }); + +// packages/icons/build-module/library/chevron-up.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var chevron_up_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives2.Path, { d: "M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z" }) }); + +// packages/icons/build-module/library/more-vertical.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives3.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); + +// routes/navigation-edit/editor/leaf-more-menu.tsx +var import_components4 = __toESM(require_components()); +var import_data = __toESM(require_data()); +var import_i18n2 = __toESM(require_i18n()); +var import_block_editor = __toESM(require_block_editor()); +var POPOVER_PROPS = { + className: "block-editor-block-settings-menu__popover", + placement: "bottom-start" +}; +function LeafMoreMenu({ + block, + ...props +}) { + const { clientId } = block; + const { moveBlocksDown, moveBlocksUp, removeBlocks } = (0, import_data.useDispatch)(import_block_editor.store); + const removeLabel = (0, import_i18n2.sprintf)( + /* translators: %s: block name */ + (0, import_i18n2.__)("Remove %s"), + (0, import_block_editor.BlockTitle)({ clientId, maximumLength: 25 }) + ); + const rootClientId = (0, import_data.useSelect)( + (select) => { + const { getBlockRootClientId } = select(import_block_editor.store); + return getBlockRootClientId(clientId); + }, + [clientId] + ); + return /* @__PURE__ */ React.createElement( + import_components4.DropdownMenu, + { + icon: more_vertical_default, + label: (0, import_i18n2.__)("Options"), + className: "block-editor-block-settings-menu", + popoverProps: POPOVER_PROPS, + noIcons: true, + ...props + }, + ({ onClose }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(import_components4.MenuGroup, null, /* @__PURE__ */ React.createElement( + import_components4.MenuItem, + { + icon: chevron_up_default, + onClick: () => { + moveBlocksUp([clientId], rootClientId); + onClose(); + } + }, + (0, import_i18n2.__)("Move up") + ), /* @__PURE__ */ React.createElement( + import_components4.MenuItem, + { + icon: chevron_down_default, + onClick: () => { + moveBlocksDown([clientId], rootClientId); + onClose(); + } + }, + (0, import_i18n2.__)("Move down") + )), /* @__PURE__ */ React.createElement(import_components4.MenuGroup, null, /* @__PURE__ */ React.createElement( + import_components4.MenuItem, + { + onClick: () => { + removeBlocks([clientId], false); + onClose(); + } + }, + removeLabel + ))) + ); +} + +// routes/navigation-edit/editor/content.tsx +var { PrivateListView } = unlock(import_block_editor2.privateApis); +var MAX_PAGE_COUNT = 100; +var PAGES_QUERY = [ + "postType", + "page", + { + per_page: MAX_PAGE_COUNT, + _fields: ["id", "link", "menu_order", "parent", "title", "type"], + // TODO: When https://core.trac.wordpress.org/ticket/39037 REST API support for multiple orderby + // values is resolved, update 'orderby' to [ 'menu_order', 'post_title' ] to provide a consistent + // sort. + orderby: "menu_order", + order: "asc" + } +]; +function NavigationMenuContent({ + rootClientId +}) { + const { listViewRootClientId, isLoading } = (0, import_data2.useSelect)( + (select) => { + const { + areInnerBlocksControlled, + getBlockName, + getBlockCount, + getBlockOrder + } = select(import_block_editor2.store); + const { isResolving } = select(import_core_data.store); + const blockClientIds = getBlockOrder(rootClientId); + const hasOnlyPageListBlock = blockClientIds.length === 1 && getBlockName(blockClientIds[0]) === "core/page-list"; + const pageListHasBlocks = hasOnlyPageListBlock && getBlockCount(blockClientIds[0]) > 0; + const isLoadingPages = isResolving( + "getEntityRecords", + PAGES_QUERY + ); + return { + listViewRootClientId: pageListHasBlocks ? blockClientIds[0] : rootClientId, + // This is a small hack to wait for the navigation block + // to actually load its inner blocks. + isLoading: !areInnerBlocksControlled(rootClientId) || isLoadingPages + }; + }, + [rootClientId] + ); + const { replaceBlock, __unstableMarkNextChangeAsNotPersistent } = (0, import_data2.useDispatch)(import_block_editor2.store); + const offCanvasOnselect = (0, import_element2.useCallback)( + (block) => { + if (block.name === "core/navigation-link" && !block.attributes.url) { + __unstableMarkNextChangeAsNotPersistent(); + replaceBlock( + block.clientId, + (0, import_blocks.createBlock)("core/navigation-link", block.attributes) + ); + } + }, + [__unstableMarkNextChangeAsNotPersistent, replaceBlock] + ); + return /* @__PURE__ */ React.createElement(React.Fragment, null, !isLoading && /* @__PURE__ */ React.createElement( + PrivateListView, + { + rootClientId: listViewRootClientId, + onSelect: offCanvasOnselect, + blockSettingsMenu: LeafMoreMenu, + showAppender: false, + isExpanded: true + } + ), /* @__PURE__ */ React.createElement("div", { className: "navigation-edit-editor__hidden-blocks" }, /* @__PURE__ */ React.createElement(import_block_editor2.BlockList, null))); +} + +// routes/navigation-edit/editor/index.tsx +var noop = () => { +}; +function NavigationMenuEditor({ id }) { + const { isReady: assetsReady } = useEditorAssets(); + const blocks = (0, import_element3.useMemo)(() => { + if (!assetsReady || !id) { + return []; + } + return [(0, import_blocks2.createBlock)("core/navigation", { ref: id })]; + }, [assetsReady, id]); + if (!assetsReady || !blocks.length) { + return /* @__PURE__ */ React.createElement( + "div", + { + style: { + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100vh" + } + }, + /* @__PURE__ */ React.createElement(import_components5.Spinner, null) + ); + } + return /* @__PURE__ */ React.createElement( + import_block_editor3.BlockEditorProvider, + { + settings: {}, + value: blocks, + onChange: noop, + onInput: noop + }, + /* @__PURE__ */ React.createElement(NavigationMenuContent, { rootClientId: blocks[0].clientId }) + ); +} + +// routes/navigation-edit/stage.tsx +var NAVIGATION_POST_TYPE = "wp_navigation"; +function NavigationEditStage() { + const { id } = useParams({ from: "/navigation/edit/$id" }); + const navigationId = parseInt(id); + const { navigationMenu } = (0, import_data3.useSelect)( + (select) => { + const { getEntityRecord } = select(import_core_data2.store); + return { + navigationMenu: getEntityRecord( + "postType", + NAVIGATION_POST_TYPE, + navigationId + ) + }; + }, + [navigationId] + ); + if (!navigationMenu) { + return; + } + const menuTitle = navigationMenu.title?.rendered || navigationMenu.title?.raw || ""; + return /* @__PURE__ */ React.createElement( + page_default, + { + breadcrumbs: /* @__PURE__ */ React.createElement( + breadcrumbs_default, + { + items: [ + { + label: (0, import_i18n3.__)("Navigation"), + to: "/navigation/list" + }, + { + label: (0, import_html_entities.decodeEntities)(menuTitle) + } + ] + } + ), + hasPadding: true + }, + /* @__PURE__ */ React.createElement(NavigationMenuEditor, { id: navigationId }) + ); +} +var stage = NavigationEditStage; +export { + stage +}; diff --git a/src/wp-includes/build/routes/navigation-edit/content.min.asset.php b/src/wp-includes/build/routes/navigation-edit/content.min.asset.php new file mode 100644 index 0000000000000..30055fdd95c41 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-edit/content.min.asset.php @@ -0,0 +1 @@ + array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'module_dependencies' => array(array('id' => '@wordpress/lazy-editor', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '12b1cf6a59437acc6e19'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/navigation-edit/content.min.js b/src/wp-includes/build/routes/navigation-edit/content.min.js new file mode 100644 index 0000000000000..8153720ee44ce --- /dev/null +++ b/src/wp-includes/build/routes/navigation-edit/content.min.js @@ -0,0 +1 @@ +var Da=Object.create;var X=Object.defineProperty;var Va=Object.getOwnPropertyDescriptor;var Ha=Object.getOwnPropertyNames;var Oa=Object.getPrototypeOf,Ua=Object.prototype.hasOwnProperty;var d=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var Fa=(a,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let f of Ha(t))!Ua.call(a,f)&&f!==e&&X(a,f,{get:()=>t[f],enumerable:!(r=Va(t,f))||r.enumerable});return a};var o=(a,t,e)=>(e=a!=null?Da(Oa(a)):{},Fa(t||!a||!a.__esModule?X(e,"default",{value:a,enumerable:!0}):e,a));var _=d((rt,Y)=>{Y.exports=window.wp.i18n});var b=d((ft,Q)=>{Q.exports=window.wp.components});var p=d((lt,$)=>{$.exports=window.ReactJSXRuntime});var R=d((ut,aa)=>{aa.exports=window.wp.element});var B=d((Lt,ua)=>{ua.exports=window.wp.data});var D=d((St,ia)=>{ia.exports=window.wp.coreData});var na=d((Rt,pa)=>{pa.exports=window.wp.htmlEntities});var C=d((Bt,ca)=>{ca.exports=window.wp.blockEditor});var V=d((Ct,ga)=>{ga.exports=window.wp.blocks});var va=d((Pt,ha)=>{ha.exports=window.wp.privateApis});var P=d((Mt,ka)=>{ka.exports=window.wp.primitives});import{useParams as Ka}from"@wordpress/route";var K=o(_(),1),L=o(b(),1),n=o(p(),1);import{Link as za}from"@wordpress/route";var Ga=({item:{label:a,to:t}})=>t?(0,n.jsx)("li",{children:(0,n.jsx)(za,{to:t,children:a})}):(0,n.jsx)("li",{children:(0,n.jsx)(L.__experimentalHeading,{level:1,truncate:!0,children:a})}),qa=({items:a})=>a.length?(0,n.jsx)("nav",{"aria-label":(0,K.__)("Breadcrumbs"),children:(0,n.jsx)(L.__experimentalHStack,{as:"ul",className:"admin-ui-breadcrumbs__list",spacing:0,justify:"flex-start",alignment:"center",children:a.map((t,e)=>(0,n.jsx)(Ga,{item:t},e))})}):null,E=qa;function Z(a){var t,e,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var f=a.length;for(t=0;t(0,ea.jsx)(r,{ref:l,className:S("admin-ui-navigable-region",t),"aria-label":e,role:"region",tabIndex:"-1",...f,children:a}));oa.displayName="NavigableRegion";var ra=oa;var c=o(b(),1);var fa=o(b(),1),{Fill:la,Slot:sa}=(0,fa.createSlotFill)("SidebarToggle");var u=o(p(),1);function da({breadcrumbs:a,badges:t,title:e,subTitle:r,actions:f,showSidebarToggle:l=!0}){return(0,u.jsxs)(c.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,u.jsxs)(c.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,u.jsxs)(c.__experimentalHStack,{spacing:2,justify:"left",children:[l&&(0,u.jsx)(sa,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),e&&(0,u.jsx)(c.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:e}),a,t]}),(0,u.jsx)(c.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:f})]}),r&&(0,u.jsx)("p",{className:"admin-ui-page__header-subtitle",children:r})]})}var k=o(p(),1);function ma({breadcrumbs:a,badges:t,title:e,subTitle:r,children:f,className:l,actions:s,hasPadding:v=!1,showSidebarToggle:m=!0}){let w=S("admin-ui-page",l);return(0,k.jsxs)(ra,{className:w,ariaLabel:e,children:[(e||a||t)&&(0,k.jsx)(da,{breadcrumbs:a,badges:t,title:e,subTitle:r,actions:s,showSidebarToggle:m}),v?(0,k.jsx)("div",{className:"admin-ui-page__content has-padding",children:f}):f]})}ma.SidebarToggleFill=la;var j=ma;var Pa=o(B()),Na=o(D()),Ia=o(_()),Ma=o(na());var Sa=o(R()),Ra=o(C()),Ba=o(V()),Ca=o(b());import{useEditorAssets as $a}from"@wordpress/lazy-editor";if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='023c02af3d']")){let a=document.createElement("style");a.setAttribute("data-wp-hash","023c02af3d"),a.appendChild(document.createTextNode(".navigation-edit-editor__hidden-blocks{display:none}")),document.head.appendChild(a)}var h=o(C()),A=o(B()),xa=o(V()),ya=o(R()),_a=o(D());var ba=o(va()),{lock:Nt,unlock:wa}=(0,ba.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var N=o(P(),1),H=o(p(),1),O=(0,H.jsx)(N.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,H.jsx)(N.Path,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})});var I=o(P(),1),U=o(p(),1),F=(0,U.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,U.jsx)(I.Path,{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})});var M=o(P(),1),z=o(p(),1),G=(0,z.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,z.jsx)(M.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})});var i=o(b()),T=o(B()),g=o(_()),x=o(C()),Ja={className:"block-editor-block-settings-menu__popover",placement:"bottom-start"};function q({block:a,...t}){let{clientId:e}=a,{moveBlocksDown:r,moveBlocksUp:f,removeBlocks:l}=(0,T.useDispatch)(x.store),s=(0,g.sprintf)((0,g.__)("Remove %s"),(0,x.BlockTitle)({clientId:e,maximumLength:25})),v=(0,T.useSelect)(m=>{let{getBlockRootClientId:w}=m(x.store);return w(e)},[e]);return React.createElement(i.DropdownMenu,{icon:G,label:(0,g.__)("Options"),className:"block-editor-block-settings-menu",popoverProps:Ja,noIcons:!0,...t},({onClose:m})=>React.createElement(React.Fragment,null,React.createElement(i.MenuGroup,null,React.createElement(i.MenuItem,{icon:F,onClick:()=>{f([e],v),m()}},(0,g.__)("Move up")),React.createElement(i.MenuItem,{icon:O,onClick:()=>{r([e],v),m()}},(0,g.__)("Move down"))),React.createElement(i.MenuGroup,null,React.createElement(i.MenuItem,{onClick:()=>{l([e],!1),m()}},s))))}var{PrivateListView:Xa}=wa(h.privateApis),Ya=100,Qa=["postType","page",{per_page:Ya,_fields:["id","link","menu_order","parent","title","type"],orderby:"menu_order",order:"asc"}];function W({rootClientId:a}){let{listViewRootClientId:t,isLoading:e}=(0,A.useSelect)(s=>{let{areInnerBlocksControlled:v,getBlockName:m,getBlockCount:w,getBlockOrder:Ta}=s(h.store),{isResolving:Aa}=s(_a.store),y=Ta(a),Ea=y.length===1&&m(y[0])==="core/page-list"&&w(y[0])>0,ja=Aa("getEntityRecords",Qa);return{listViewRootClientId:Ea?y[0]:a,isLoading:!v(a)||ja}},[a]),{replaceBlock:r,__unstableMarkNextChangeAsNotPersistent:f}=(0,A.useDispatch)(h.store),l=(0,ya.useCallback)(s=>{s.name==="core/navigation-link"&&!s.attributes.url&&(f(),r(s.clientId,(0,xa.createBlock)("core/navigation-link",s.attributes)))},[f,r]);return React.createElement(React.Fragment,null,!e&&React.createElement(Xa,{rootClientId:t,onSelect:l,blockSettingsMenu:q,showAppender:!1,isExpanded:!0}),React.createElement("div",{className:"navigation-edit-editor__hidden-blocks"},React.createElement(h.BlockList,null)))}var La=()=>{};function J({id:a}){let{isReady:t}=$a(),e=(0,Sa.useMemo)(()=>!t||!a?[]:[(0,Ba.createBlock)("core/navigation",{ref:a})],[t,a]);return!t||!e.length?React.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},React.createElement(Ca.Spinner,null)):React.createElement(Ra.BlockEditorProvider,{settings:{},value:e,onChange:La,onInput:La},React.createElement(W,{rootClientId:e[0].clientId}))}var Za="wp_navigation";function at(){let{id:a}=Ka({from:"/navigation/edit/$id"}),t=parseInt(a),{navigationMenu:e}=(0,Pa.useSelect)(f=>{let{getEntityRecord:l}=f(Na.store);return{navigationMenu:l("postType",Za,t)}},[t]);if(!e)return;let r=e.title?.rendered||e.title?.raw||"";return React.createElement(j,{breadcrumbs:React.createElement(E,{items:[{label:(0,Ia.__)("Navigation"),to:"/navigation/list"},{label:(0,Ma.decodeEntities)(r)}]}),hasPadding:!0},React.createElement(J,{id:t}))}var tt=at;export{tt as stage}; diff --git a/src/wp-includes/build/routes/navigation-edit/route.js b/src/wp-includes/build/routes/navigation-edit/route.js new file mode 100644 index 0000000000000..0c605f9fdc0b6 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-edit/route.js @@ -0,0 +1,121 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/html-entities +var require_html_entities = __commonJS({ + "package-external:@wordpress/html-entities"(exports, module) { + module.exports = window.wp.htmlEntities; + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/navigation-edit/route.ts +var import_data = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var import_html_entities = __toESM(require_html_entities()); +var import_i18n = __toESM(require_i18n()); +import { notFound } from "@wordpress/route"; +var NAVIGATION_POST_TYPE = "wp_navigation"; +var route = { + beforeLoad: async ({ + params + }) => { + const navigationId = parseInt(params.id, 10); + if (Number.isNaN(navigationId)) { + throw notFound(); + } + try { + const navigation = await (0, import_data.resolveSelect)(import_core_data.store).getEntityRecord( + "postType", + NAVIGATION_POST_TYPE, + navigationId + ); + if (!navigation) { + throw notFound(); + } + } catch { + throw notFound(); + } + }, + title: async ({ + params + }) => { + const navigationId = parseInt(params.id); + const navigation = await (0, import_data.resolveSelect)(import_core_data.store).getEntityRecord( + "postType", + NAVIGATION_POST_TYPE, + navigationId + ); + if (navigation?.title?.rendered) { + return (0, import_html_entities.decodeEntities)(navigation.title.rendered); + } + return (0, import_i18n.__)("Navigation"); + }, + canvas: async ({ + params + }) => { + const postId = parseInt(params.id); + return { + postType: NAVIGATION_POST_TYPE, + postId, + isPreview: true, + editLink: `/types/wp_navigation/edit/${postId}` + }; + }, + loader: async ({ + params + }) => { + const navigationId = parseInt(params.id); + await (0, import_data.resolveSelect)(import_core_data.store).getEntityRecord( + "postType", + NAVIGATION_POST_TYPE, + navigationId + ); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/navigation-edit/route.min.asset.php b/src/wp-includes/build/routes/navigation-edit/route.min.asset.php new file mode 100644 index 0000000000000..4cc0ab10ba7c9 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-edit/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data', 'wp-html-entities', 'wp-i18n'), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '30e98737087f40891445'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/navigation-edit/route.min.js b/src/wp-includes/build/routes/navigation-edit/route.min.js new file mode 100644 index 0000000000000..520b91cfc51b4 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-edit/route.min.js @@ -0,0 +1 @@ +var N=Object.create;var w=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var r=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports);var R=(i,t,o,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of h(t))!P.call(i,n)&&n!==o&&w(i,n,{get:()=>t[n],enumerable:!(c=_(t,n))||c.enumerable});return i};var e=(i,t,o)=>(o=i!=null?N(x(i)):{},R(t||!i||!i.__esModule?w(o,"default",{value:i,enumerable:!0}):o,i));var m=r((b,g)=>{g.exports=window.wp.data});var v=r((A,y)=>{y.exports=window.wp.coreData});var f=r((L,I)=>{I.exports=window.wp.htmlEntities});var u=r((O,l)=>{l.exports=window.wp.i18n});var s=e(m()),p=e(v()),T=e(f()),E=e(u());import{notFound as d}from"@wordpress/route";var a="wp_navigation",D={beforeLoad:async({params:i})=>{let t=parseInt(i.id,10);if(Number.isNaN(t))throw d();try{if(!await(0,s.resolveSelect)(p.store).getEntityRecord("postType",a,t))throw d()}catch{throw d()}},title:async({params:i})=>{let t=parseInt(i.id),o=await(0,s.resolveSelect)(p.store).getEntityRecord("postType",a,t);return o?.title?.rendered?(0,T.decodeEntities)(o.title.rendered):(0,E.__)("Navigation")},canvas:async({params:i})=>{let t=parseInt(i.id);return{postType:a,postId:t,isPreview:!0,editLink:`/types/wp_navigation/edit/${t}`}},loader:async({params:i})=>{let t=parseInt(i.id);await(0,s.resolveSelect)(p.store).getEntityRecord("postType",a,t)}};export{D as route}; diff --git a/src/wp-includes/build/routes/navigation-list/content.js b/src/wp-includes/build/routes/navigation-list/content.js new file mode 100644 index 0000000000000..206834bad16dc --- /dev/null +++ b/src/wp-includes/build/routes/navigation-list/content.js @@ -0,0 +1,17186 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// package-external:@wordpress/compose +var require_compose = __commonJS({ + "package-external:@wordpress/compose"(exports, module) { + module.exports = window.wp.compose; + } +}); + +// vendor-external:react +var require_react = __commonJS({ + "vendor-external:react"(exports, module) { + module.exports = window.React; + } +}); + +// vendor-external:react-dom +var require_react_dom = __commonJS({ + "vendor-external:react-dom"(exports, module) { + module.exports = window.ReactDOM; + } +}); + +// node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +var require_use_sync_external_store_shim_development = __commonJS({ + "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { + "use strict"; + (function() { + function is(x2, y2) { + return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; + } + function useSyncExternalStore$2(subscribe2, getSnapshot) { + didWarnOld18Alpha || void 0 === React9.startTransition || (didWarnOld18Alpha = true, console.error( + "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." + )); + var value = getSnapshot(); + if (!didWarnUncachedGetSnapshot) { + var cachedValue = getSnapshot(); + objectIs(value, cachedValue) || (console.error( + "The result of getSnapshot should be cached to avoid an infinite loop" + ), didWarnUncachedGetSnapshot = true); + } + cachedValue = useState26({ + inst: { value, getSnapshot } + }); + var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; + useLayoutEffect2( + function() { + inst.value = value; + inst.getSnapshot = getSnapshot; + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }, + [subscribe2, value, getSnapshot] + ); + useEffect19( + function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + return subscribe2(function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }); + }, + [subscribe2] + ); + useDebugValue(value); + return value; + } + function checkIfSnapshotChanged(inst) { + var latestGetSnapshot = inst.getSnapshot; + inst = inst.value; + try { + var nextValue = latestGetSnapshot(); + return !objectIs(inst, nextValue); + } catch (error) { + return true; + } + } + function useSyncExternalStore$1(subscribe2, getSnapshot) { + return getSnapshot(); + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var React9 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState26 = React9.useState, useEffect19 = React9.useEffect, useLayoutEffect2 = React9.useLayoutEffect, useDebugValue = React9.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; + exports.useSyncExternalStore = void 0 !== React9.useSyncExternalStore ? React9.useSyncExternalStore : shim; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); + } +}); + +// node_modules/use-sync-external-store/shim/index.js +var require_shim = __commonJS({ + "node_modules/use-sync-external-store/shim/index.js"(exports, module) { + "use strict"; + if (false) { + module.exports = null; + } else { + module.exports = require_use_sync_external_store_shim_development(); + } + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// package-external:@wordpress/keycodes +var require_keycodes = __commonJS({ + "package-external:@wordpress/keycodes"(exports, module) { + module.exports = window.wp.keycodes; + } +}); + +// node_modules/remove-accents/index.js +var require_remove_accents = __commonJS({ + "node_modules/remove-accents/index.js"(exports, module) { + var characterMap = { + "\xC0": "A", + "\xC1": "A", + "\xC2": "A", + "\xC3": "A", + "\xC4": "A", + "\xC5": "A", + "\u1EA4": "A", + "\u1EAE": "A", + "\u1EB2": "A", + "\u1EB4": "A", + "\u1EB6": "A", + "\xC6": "AE", + "\u1EA6": "A", + "\u1EB0": "A", + "\u0202": "A", + "\u1EA2": "A", + "\u1EA0": "A", + "\u1EA8": "A", + "\u1EAA": "A", + "\u1EAC": "A", + "\xC7": "C", + "\u1E08": "C", + "\xC8": "E", + "\xC9": "E", + "\xCA": "E", + "\xCB": "E", + "\u1EBE": "E", + "\u1E16": "E", + "\u1EC0": "E", + "\u1E14": "E", + "\u1E1C": "E", + "\u0206": "E", + "\u1EBA": "E", + "\u1EBC": "E", + "\u1EB8": "E", + "\u1EC2": "E", + "\u1EC4": "E", + "\u1EC6": "E", + "\xCC": "I", + "\xCD": "I", + "\xCE": "I", + "\xCF": "I", + "\u1E2E": "I", + "\u020A": "I", + "\u1EC8": "I", + "\u1ECA": "I", + "\xD0": "D", + "\xD1": "N", + "\xD2": "O", + "\xD3": "O", + "\xD4": "O", + "\xD5": "O", + "\xD6": "O", + "\xD8": "O", + "\u1ED0": "O", + "\u1E4C": "O", + "\u1E52": "O", + "\u020E": "O", + "\u1ECE": "O", + "\u1ECC": "O", + "\u1ED4": "O", + "\u1ED6": "O", + "\u1ED8": "O", + "\u1EDC": "O", + "\u1EDE": "O", + "\u1EE0": "O", + "\u1EDA": "O", + "\u1EE2": "O", + "\xD9": "U", + "\xDA": "U", + "\xDB": "U", + "\xDC": "U", + "\u1EE6": "U", + "\u1EE4": "U", + "\u1EEC": "U", + "\u1EEE": "U", + "\u1EF0": "U", + "\xDD": "Y", + "\xE0": "a", + "\xE1": "a", + "\xE2": "a", + "\xE3": "a", + "\xE4": "a", + "\xE5": "a", + "\u1EA5": "a", + "\u1EAF": "a", + "\u1EB3": "a", + "\u1EB5": "a", + "\u1EB7": "a", + "\xE6": "ae", + "\u1EA7": "a", + "\u1EB1": "a", + "\u0203": "a", + "\u1EA3": "a", + "\u1EA1": "a", + "\u1EA9": "a", + "\u1EAB": "a", + "\u1EAD": "a", + "\xE7": "c", + "\u1E09": "c", + "\xE8": "e", + "\xE9": "e", + "\xEA": "e", + "\xEB": "e", + "\u1EBF": "e", + "\u1E17": "e", + "\u1EC1": "e", + "\u1E15": "e", + "\u1E1D": "e", + "\u0207": "e", + "\u1EBB": "e", + "\u1EBD": "e", + "\u1EB9": "e", + "\u1EC3": "e", + "\u1EC5": "e", + "\u1EC7": "e", + "\xEC": "i", + "\xED": "i", + "\xEE": "i", + "\xEF": "i", + "\u1E2F": "i", + "\u020B": "i", + "\u1EC9": "i", + "\u1ECB": "i", + "\xF0": "d", + "\xF1": "n", + "\xF2": "o", + "\xF3": "o", + "\xF4": "o", + "\xF5": "o", + "\xF6": "o", + "\xF8": "o", + "\u1ED1": "o", + "\u1E4D": "o", + "\u1E53": "o", + "\u020F": "o", + "\u1ECF": "o", + "\u1ECD": "o", + "\u1ED5": "o", + "\u1ED7": "o", + "\u1ED9": "o", + "\u1EDD": "o", + "\u1EDF": "o", + "\u1EE1": "o", + "\u1EDB": "o", + "\u1EE3": "o", + "\xF9": "u", + "\xFA": "u", + "\xFB": "u", + "\xFC": "u", + "\u1EE7": "u", + "\u1EE5": "u", + "\u1EED": "u", + "\u1EEF": "u", + "\u1EF1": "u", + "\xFD": "y", + "\xFF": "y", + "\u0100": "A", + "\u0101": "a", + "\u0102": "A", + "\u0103": "a", + "\u0104": "A", + "\u0105": "a", + "\u0106": "C", + "\u0107": "c", + "\u0108": "C", + "\u0109": "c", + "\u010A": "C", + "\u010B": "c", + "\u010C": "C", + "\u010D": "c", + "C\u0306": "C", + "c\u0306": "c", + "\u010E": "D", + "\u010F": "d", + "\u0110": "D", + "\u0111": "d", + "\u0112": "E", + "\u0113": "e", + "\u0114": "E", + "\u0115": "e", + "\u0116": "E", + "\u0117": "e", + "\u0118": "E", + "\u0119": "e", + "\u011A": "E", + "\u011B": "e", + "\u011C": "G", + "\u01F4": "G", + "\u011D": "g", + "\u01F5": "g", + "\u011E": "G", + "\u011F": "g", + "\u0120": "G", + "\u0121": "g", + "\u0122": "G", + "\u0123": "g", + "\u0124": "H", + "\u0125": "h", + "\u0126": "H", + "\u0127": "h", + "\u1E2A": "H", + "\u1E2B": "h", + "\u0128": "I", + "\u0129": "i", + "\u012A": "I", + "\u012B": "i", + "\u012C": "I", + "\u012D": "i", + "\u012E": "I", + "\u012F": "i", + "\u0130": "I", + "\u0131": "i", + "\u0132": "IJ", + "\u0133": "ij", + "\u0134": "J", + "\u0135": "j", + "\u0136": "K", + "\u0137": "k", + "\u1E30": "K", + "\u1E31": "k", + "K\u0306": "K", + "k\u0306": "k", + "\u0139": "L", + "\u013A": "l", + "\u013B": "L", + "\u013C": "l", + "\u013D": "L", + "\u013E": "l", + "\u013F": "L", + "\u0140": "l", + "\u0141": "l", + "\u0142": "l", + "\u1E3E": "M", + "\u1E3F": "m", + "M\u0306": "M", + "m\u0306": "m", + "\u0143": "N", + "\u0144": "n", + "\u0145": "N", + "\u0146": "n", + "\u0147": "N", + "\u0148": "n", + "\u0149": "n", + "N\u0306": "N", + "n\u0306": "n", + "\u014C": "O", + "\u014D": "o", + "\u014E": "O", + "\u014F": "o", + "\u0150": "O", + "\u0151": "o", + "\u0152": "OE", + "\u0153": "oe", + "P\u0306": "P", + "p\u0306": "p", + "\u0154": "R", + "\u0155": "r", + "\u0156": "R", + "\u0157": "r", + "\u0158": "R", + "\u0159": "r", + "R\u0306": "R", + "r\u0306": "r", + "\u0212": "R", + "\u0213": "r", + "\u015A": "S", + "\u015B": "s", + "\u015C": "S", + "\u015D": "s", + "\u015E": "S", + "\u0218": "S", + "\u0219": "s", + "\u015F": "s", + "\u0160": "S", + "\u0161": "s", + "\u0162": "T", + "\u0163": "t", + "\u021B": "t", + "\u021A": "T", + "\u0164": "T", + "\u0165": "t", + "\u0166": "T", + "\u0167": "t", + "T\u0306": "T", + "t\u0306": "t", + "\u0168": "U", + "\u0169": "u", + "\u016A": "U", + "\u016B": "u", + "\u016C": "U", + "\u016D": "u", + "\u016E": "U", + "\u016F": "u", + "\u0170": "U", + "\u0171": "u", + "\u0172": "U", + "\u0173": "u", + "\u0216": "U", + "\u0217": "u", + "V\u0306": "V", + "v\u0306": "v", + "\u0174": "W", + "\u0175": "w", + "\u1E82": "W", + "\u1E83": "w", + "X\u0306": "X", + "x\u0306": "x", + "\u0176": "Y", + "\u0177": "y", + "\u0178": "Y", + "Y\u0306": "Y", + "y\u0306": "y", + "\u0179": "Z", + "\u017A": "z", + "\u017B": "Z", + "\u017C": "z", + "\u017D": "Z", + "\u017E": "z", + "\u017F": "s", + "\u0192": "f", + "\u01A0": "O", + "\u01A1": "o", + "\u01AF": "U", + "\u01B0": "u", + "\u01CD": "A", + "\u01CE": "a", + "\u01CF": "I", + "\u01D0": "i", + "\u01D1": "O", + "\u01D2": "o", + "\u01D3": "U", + "\u01D4": "u", + "\u01D5": "U", + "\u01D6": "u", + "\u01D7": "U", + "\u01D8": "u", + "\u01D9": "U", + "\u01DA": "u", + "\u01DB": "U", + "\u01DC": "u", + "\u1EE8": "U", + "\u1EE9": "u", + "\u1E78": "U", + "\u1E79": "u", + "\u01FA": "A", + "\u01FB": "a", + "\u01FC": "AE", + "\u01FD": "ae", + "\u01FE": "O", + "\u01FF": "o", + "\xDE": "TH", + "\xFE": "th", + "\u1E54": "P", + "\u1E55": "p", + "\u1E64": "S", + "\u1E65": "s", + "X\u0301": "X", + "x\u0301": "x", + "\u0403": "\u0413", + "\u0453": "\u0433", + "\u040C": "\u041A", + "\u045C": "\u043A", + "A\u030B": "A", + "a\u030B": "a", + "E\u030B": "E", + "e\u030B": "e", + "I\u030B": "I", + "i\u030B": "i", + "\u01F8": "N", + "\u01F9": "n", + "\u1ED2": "O", + "\u1ED3": "o", + "\u1E50": "O", + "\u1E51": "o", + "\u1EEA": "U", + "\u1EEB": "u", + "\u1E80": "W", + "\u1E81": "w", + "\u1EF2": "Y", + "\u1EF3": "y", + "\u0200": "A", + "\u0201": "a", + "\u0204": "E", + "\u0205": "e", + "\u0208": "I", + "\u0209": "i", + "\u020C": "O", + "\u020D": "o", + "\u0210": "R", + "\u0211": "r", + "\u0214": "U", + "\u0215": "u", + "B\u030C": "B", + "b\u030C": "b", + "\u010C\u0323": "C", + "\u010D\u0323": "c", + "\xCA\u030C": "E", + "\xEA\u030C": "e", + "F\u030C": "F", + "f\u030C": "f", + "\u01E6": "G", + "\u01E7": "g", + "\u021E": "H", + "\u021F": "h", + "J\u030C": "J", + "\u01F0": "j", + "\u01E8": "K", + "\u01E9": "k", + "M\u030C": "M", + "m\u030C": "m", + "P\u030C": "P", + "p\u030C": "p", + "Q\u030C": "Q", + "q\u030C": "q", + "\u0158\u0329": "R", + "\u0159\u0329": "r", + "\u1E66": "S", + "\u1E67": "s", + "V\u030C": "V", + "v\u030C": "v", + "W\u030C": "W", + "w\u030C": "w", + "X\u030C": "X", + "x\u030C": "x", + "Y\u030C": "Y", + "y\u030C": "y", + "A\u0327": "A", + "a\u0327": "a", + "B\u0327": "B", + "b\u0327": "b", + "\u1E10": "D", + "\u1E11": "d", + "\u0228": "E", + "\u0229": "e", + "\u0190\u0327": "E", + "\u025B\u0327": "e", + "\u1E28": "H", + "\u1E29": "h", + "I\u0327": "I", + "i\u0327": "i", + "\u0197\u0327": "I", + "\u0268\u0327": "i", + "M\u0327": "M", + "m\u0327": "m", + "O\u0327": "O", + "o\u0327": "o", + "Q\u0327": "Q", + "q\u0327": "q", + "U\u0327": "U", + "u\u0327": "u", + "X\u0327": "X", + "x\u0327": "x", + "Z\u0327": "Z", + "z\u0327": "z", + "\u0439": "\u0438", + "\u0419": "\u0418", + "\u0451": "\u0435", + "\u0401": "\u0415" + }; + var chars = Object.keys(characterMap).join("|"); + var allAccents = new RegExp(chars, "g"); + var firstAccent = new RegExp(chars, ""); + function matcher(match2) { + return characterMap[match2]; + } + var removeAccents2 = function(string) { + return string.replace(allAccents, matcher); + }; + var hasAccents = function(string) { + return !!string.match(firstAccent); + }; + module.exports = removeAccents2; + module.exports.has = hasAccents; + module.exports.remove = removeAccents2; + } +}); + +// node_modules/fast-deep-equal/es6/index.js +var require_es6 = __commonJS({ + "node_modules/fast-deep-equal/es6/index.js"(exports, module) { + "use strict"; + module.exports = function equal(a2, b2) { + if (a2 === b2) return true; + if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { + if (a2.constructor !== b2.constructor) return false; + var length, i2, keys; + if (Array.isArray(a2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (!equal(a2[i2], b2[i2])) return false; + return true; + } + if (a2 instanceof Map && b2 instanceof Map) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + for (i2 of a2.entries()) + if (!equal(i2[1], b2.get(i2[0]))) return false; + return true; + } + if (a2 instanceof Set && b2 instanceof Set) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + return true; + } + if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (a2[i2] !== b2[i2]) return false; + return true; + } + if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; + if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); + if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); + keys = Object.keys(a2); + length = keys.length; + if (length !== Object.keys(b2).length) return false; + for (i2 = length; i2-- !== 0; ) + if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; + for (i2 = length; i2-- !== 0; ) { + var key = keys[i2]; + if (!equal(a2[key], b2[key])) return false; + } + return true; + } + return a2 !== a2 && b2 !== b2; + }; + } +}); + +// package-external:@wordpress/date +var require_date = __commonJS({ + "package-external:@wordpress/date"(exports, module) { + module.exports = window.wp.date; + } +}); + +// package-external:@wordpress/warning +var require_warning = __commonJS({ + "package-external:@wordpress/warning"(exports, module) { + module.exports = window.wp.warning; + } +}); + +// package-external:@wordpress/editor +var require_editor = __commonJS({ + "package-external:@wordpress/editor"(exports, module) { + module.exports = window.wp.editor; + } +}); + +// package-external:@wordpress/notices +var require_notices = __commonJS({ + "package-external:@wordpress/notices"(exports, module) { + module.exports = window.wp.notices; + } +}); + +// routes/navigation-list/stage.tsx +var import_core_data2 = __toESM(require_core_data()); +var import_element59 = __toESM(require_element()); +import { useNavigate as useNavigate3, useSearch } from "@wordpress/route"; + +// node_modules/clsx/dist/clsx.mjs +function r(e2) { + var t2, f2, n2 = ""; + if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; + else if ("object" == typeof e2) if (Array.isArray(e2)) { + var o2 = e2.length; + for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2); + } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); + return n2; +} +function clsx() { + for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); + return n2; +} +var clsx_default = clsx; + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element = __toESM(require_element(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components2 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_components2.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + import_components2.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/navigation-list/stage.tsx +var import_i18n46 = __toESM(require_i18n()); + +// node_modules/dequal/dist/index.mjs +var has = Object.prototype.hasOwnProperty; +function find(iter, tar, key) { + for (key of iter.keys()) { + if (dequal(key, tar)) return key; + } +} +function dequal(foo, bar) { + var ctor, len, tmp; + if (foo === bar) return true; + if (foo && bar && (ctor = foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + if (ctor === Array) { + if ((len = foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])) ; + } + return len === -1; + } + if (ctor === Set) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!bar.has(tmp)) return false; + } + return true; + } + if (ctor === Map) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len[0]; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!dequal(len[1], bar.get(tmp))) { + return false; + } + } + return true; + } + if (ctor === ArrayBuffer) { + foo = new Uint8Array(foo); + bar = new Uint8Array(bar); + } else if (ctor === DataView) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo.getInt8(len) === bar.getInt8(len)) ; + } + return len === -1; + } + if (ArrayBuffer.isView(foo)) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo[len] === bar[len]) ; + } + return len === -1; + } + if (!ctor || typeof foo === "object") { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + return foo !== foo && bar !== bar; +} + +// packages/views/build-module/use-view.mjs +var import_element2 = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + const preserved = (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} +function stripActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + const { [key]: _, ...rest } = result; + result = rest; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + result = { + ...result, + filters: (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ) + }; + } + if (activeViewOverrides.sort && view.sort?.field === activeViewOverrides.sort.field && view.sort?.direction === activeViewOverrides.sort.direction) { + result = { + ...result, + sort: defaultView?.sort + }; + } + if (activeViewOverrides.layout && "layout" in result && result.layout) { + const layout = { ...result.layout }; + for (const key of Object.keys(activeViewOverrides.layout)) { + delete layout[key]; + } + result = { + ...result, + layout: Object.keys(layout).length > 0 ? layout : void 0 + }; + } + if (activeViewOverrides.groupBy && "groupBy" in result) { + const { groupBy: _, ...rest } = result; + result = rest; + } + return result; +} + +// packages/views/build-module/use-view.mjs +function omit(obj, keys) { + const result = { ...obj }; + for (const key of keys) { + delete result[key]; + } + return result; +} +function useView(config) { + const { + kind, + name, + slug, + defaultView, + activeViewOverrides, + queryParams, + onChangeQueryParams + } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data.useSelect)( + (select2) => { + return select2(import_preferences.store).get( + "core/views", + preferenceKey + ); + }, + [preferenceKey] + ); + const { set } = (0, import_data.useDispatch)(import_preferences.store); + const baseView = persistedView ?? defaultView; + const page = Number(queryParams?.page ?? baseView.page ?? 1); + const search = queryParams?.search ?? baseView.search ?? ""; + const view = (0, import_element2.useMemo)(() => { + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); + }, [baseView, page, search, activeViewOverrides, defaultView]); + const isModified = !!persistedView; + const updateView = (0, import_element2.useCallback)( + (newView) => { + const urlParams = { + page: newView?.page, + search: newView?.search + }; + const preferenceView = stripActiveViewOverrides( + omit(newView, ["page", "search"]), + activeViewOverrides, + defaultView + ); + if (onChangeQueryParams && !dequal(urlParams, { page, search })) { + onChangeQueryParams(urlParams); + } + const comparableBaseView = stripActiveViewOverrides( + baseView, + activeViewOverrides, + defaultView + ); + const comparableDefaultView = stripActiveViewOverrides( + defaultView, + activeViewOverrides, + defaultView + ); + if (!dequal(comparableBaseView, preferenceView)) { + if (dequal(preferenceView, comparableDefaultView)) { + set("core/views", preferenceKey, void 0); + } else { + set("core/views", preferenceKey, preferenceView); + } + } + }, + [ + onChangeQueryParams, + page, + search, + baseView, + defaultView, + activeViewOverrides, + set, + preferenceKey + ] + ); + const resetToDefault = (0, import_element2.useCallback)(() => { + set("core/views", preferenceKey, void 0); + }, [preferenceKey, set]); + return { + view, + isModified, + updateView, + resetToDefault + }; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); + +// packages/dataviews/build-module/dataviews/index.mjs +var import_element57 = __toESM(require_element(), 1); +var import_compose12 = __toESM(require_compose(), 1); + +// node_modules/@base-ui/utils/esm/useRefWithInit.js +var React2 = __toESM(require_react(), 1); +var UNINITIALIZED = {}; +function useRefWithInit(init2, initArg) { + const ref = React2.useRef(UNINITIALIZED); + if (ref.current === UNINITIALIZED) { + ref.current = init2(initArg); + } + return ref; +} + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var React5 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/useMergedRefs.js +function useMergedRefs(a2, b2, c2, d2) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChange(forkRef, a2, b2, c2, d2)) { + update(forkRef, [a2, b2, c2, d2]); + } + return forkRef.callback; +} +function useMergedRefsN(refs) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChangeN(forkRef, refs)) { + update(forkRef, refs); + } + return forkRef.callback; +} +function createForkRef() { + return { + callback: null, + cleanup: null, + refs: [] + }; +} +function didChange(forkRef, a2, b2, c2, d2) { + return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; +} +function didChangeN(forkRef, newRefs) { + return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]); +} +function update(forkRef, refs) { + forkRef.refs = refs; + if (refs.every((ref) => ref == null)) { + forkRef.callback = null; + return; + } + forkRef.callback = (instance) => { + if (forkRef.cleanup) { + forkRef.cleanup(); + forkRef.cleanup = null; + } + if (instance != null) { + const cleanupCallbacks = Array(refs.length).fill(null); + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const refCleanup = ref(instance); + if (typeof refCleanup === "function") { + cleanupCallbacks[i2] = refCleanup; + } + break; + } + case "object": { + ref.current = instance; + break; + } + default: + } + } + forkRef.cleanup = () => { + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const cleanupCallback = cleanupCallbacks[i2]; + if (typeof cleanupCallback === "function") { + cleanupCallback(); + } else { + ref(null); + } + break; + } + case "object": { + ref.current = null; + break; + } + default: + } + } + }; + } + }; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +var React4 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/reactVersion.js +var React3 = __toESM(require_react(), 1); +var majorVersion = parseInt(React3.version, 10); +function isReactVersionAtLeast(reactVersionToCheck) { + return majorVersion >= reactVersionToCheck; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +function getReactElementRef(element) { + if (!/* @__PURE__ */ React4.isValidElement(element)) { + return null; + } + const reactElement = element; + const propsWithRef = reactElement.props; + return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; +} + +// node_modules/@base-ui/utils/esm/mergeObjects.js +function mergeObjects(a2, b2) { + if (a2 && !b2) { + return a2; + } + if (!a2 && b2) { + return b2; + } + if (a2 || b2) { + return { + ...a2, + ...b2 + }; + } + return void 0; +} + +// node_modules/@base-ui/react/esm/utils/getStateAttributesProps.js +function getStateAttributesProps(state, customMapping) { + const props = {}; + for (const key in state) { + const value = state[key]; + if (customMapping?.hasOwnProperty(key)) { + const customProps = customMapping[key](value); + if (customProps != null) { + Object.assign(props, customProps); + } + continue; + } + if (value === true) { + props[`data-${key.toLowerCase()}`] = ""; + } else if (value) { + props[`data-${key.toLowerCase()}`] = value.toString(); + } + } + return props; +} + +// node_modules/@base-ui/react/esm/utils/resolveClassName.js +function resolveClassName(className, state) { + return typeof className === "function" ? className(state) : className; +} + +// node_modules/@base-ui/react/esm/utils/resolveStyle.js +function resolveStyle(style, state) { + return typeof style === "function" ? style(state) : style; +} + +// node_modules/@base-ui/react/esm/merge-props/mergeProps.js +var EMPTY_PROPS = {}; +function mergeProps(a2, b2, c2, d2, e2) { + let merged = { + ...resolvePropsGetter(a2, EMPTY_PROPS) + }; + if (b2) { + merged = mergeOne(merged, b2); + } + if (c2) { + merged = mergeOne(merged, c2); + } + if (d2) { + merged = mergeOne(merged, d2); + } + if (e2) { + merged = mergeOne(merged, e2); + } + return merged; +} +function mergePropsN(props) { + if (props.length === 0) { + return EMPTY_PROPS; + } + if (props.length === 1) { + return resolvePropsGetter(props[0], EMPTY_PROPS); + } + let merged = { + ...resolvePropsGetter(props[0], EMPTY_PROPS) + }; + for (let i2 = 1; i2 < props.length; i2 += 1) { + merged = mergeOne(merged, props[i2]); + } + return merged; +} +function mergeOne(merged, inputProps) { + if (isPropsGetter(inputProps)) { + return inputProps(merged); + } + return mutablyMergeInto(merged, inputProps); +} +function mutablyMergeInto(mergedProps, externalProps) { + if (!externalProps) { + return mergedProps; + } + for (const propName in externalProps) { + const externalPropValue = externalProps[propName]; + switch (propName) { + case "style": { + mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); + break; + } + case "className": { + mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); + break; + } + default: { + if (isEventHandler(propName, externalPropValue)) { + mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); + } else { + mergedProps[propName] = externalPropValue; + } + } + } + } + return mergedProps; +} +function isEventHandler(key, value) { + const code0 = key.charCodeAt(0); + const code1 = key.charCodeAt(1); + const code2 = key.charCodeAt(2); + return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); +} +function isPropsGetter(inputProps) { + return typeof inputProps === "function"; +} +function resolvePropsGetter(inputProps, previousProps) { + if (isPropsGetter(inputProps)) { + return inputProps(previousProps); + } + return inputProps ?? EMPTY_PROPS; +} +function mergeEventHandlers(ourHandler, theirHandler) { + if (!theirHandler) { + return ourHandler; + } + if (!ourHandler) { + return theirHandler; + } + return (event) => { + if (isSyntheticEvent(event)) { + const baseUIEvent = event; + makeEventPreventable(baseUIEvent); + const result2 = theirHandler(baseUIEvent); + if (!baseUIEvent.baseUIHandlerPrevented) { + ourHandler?.(baseUIEvent); + } + return result2; + } + const result = theirHandler(event); + ourHandler?.(event); + return result; + }; +} +function makeEventPreventable(event) { + event.preventBaseUIHandler = () => { + event.baseUIHandlerPrevented = true; + }; + return event; +} +function mergeClassNames(ourClassName, theirClassName) { + if (theirClassName) { + if (ourClassName) { + return theirClassName + " " + ourClassName; + } + return theirClassName; + } + return ourClassName; +} +function isSyntheticEvent(event) { + return event != null && typeof event === "object" && "nativeEvent" in event; +} + +// node_modules/@base-ui/utils/esm/empty.js +var EMPTY_ARRAY = Object.freeze([]); +var EMPTY_OBJECT = Object.freeze({}); + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var import_react = __toESM(require_react(), 1); +function useRenderElement(element, componentProps, params = {}) { + const renderProp = componentProps.render; + const outProps = useRenderElementProps(componentProps, params); + if (params.enabled === false) { + return null; + } + const state = params.state ?? EMPTY_OBJECT; + return evaluateRenderProp(element, renderProp, outProps, state); +} +function useRenderElementProps(componentProps, params = {}) { + const { + className: classNameProp, + style: styleProp, + render: renderProp + } = componentProps; + const { + state = EMPTY_OBJECT, + ref, + props, + stateAttributesMapping, + enabled = true + } = params; + const className = enabled ? resolveClassName(classNameProp, state) : void 0; + const style = enabled ? resolveStyle(styleProp, state) : void 0; + const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; + const outProps = enabled ? mergeObjects(stateProps, Array.isArray(props) ? mergePropsN(props) : props) ?? EMPTY_OBJECT : EMPTY_OBJECT; + if (typeof document !== "undefined") { + if (!enabled) { + useMergedRefs(null, null); + } else if (Array.isArray(ref)) { + outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); + } else { + outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); + } + } + if (!enabled) { + return EMPTY_OBJECT; + } + if (className !== void 0) { + outProps.className = mergeClassNames(outProps.className, className); + } + if (style !== void 0) { + outProps.style = mergeObjects(outProps.style, style); + } + return outProps; +} +function evaluateRenderProp(element, render4, props, state) { + if (render4) { + if (typeof render4 === "function") { + return render4(props, state); + } + const mergedProps = mergeProps(props, render4.props); + mergedProps.ref = props.ref; + return /* @__PURE__ */ React5.cloneElement(render4, mergedProps); + } + if (element) { + if (typeof element === "string") { + return renderTag(element, props); + } + } + throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage(8)); +} +function renderTag(Tag, props) { + if (Tag === "button") { + return /* @__PURE__ */ (0, import_react.createElement)("button", { + type: "button", + ...props, + key: props.key + }); + } + if (Tag === "img") { + return /* @__PURE__ */ (0, import_react.createElement)("img", { + alt: "", + ...props, + key: props.key + }); + } + return /* @__PURE__ */ React5.createElement(Tag, props); +} + +// node_modules/@base-ui/react/esm/use-render/useRender.js +function useRender(params) { + return useRenderElement(params.defaultTagName ?? "div", params, params); +} + +// packages/icons/build-module/library/arrow-down.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) }); + +// packages/icons/build-module/library/arrow-left.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives2.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) }); + +// packages/icons/build-module/library/arrow-right.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives3.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) }); + +// packages/icons/build-module/library/arrow-up.mjs +var import_primitives4 = __toESM(require_primitives(), 1); +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives4.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) }); + +// packages/icons/build-module/library/block-table.mjs +var import_primitives5 = __toESM(require_primitives(), 1); +var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); +var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives5.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) }); + +// packages/icons/build-module/library/category.mjs +var import_primitives6 = __toESM(require_primitives(), 1); +var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); +var category_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives6.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z" }) }); + +// packages/icons/build-module/library/check.mjs +var import_primitives7 = __toESM(require_primitives(), 1); +var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); +var check_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives7.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) }); + +// packages/icons/build-module/library/close-small.mjs +var import_primitives8 = __toESM(require_primitives(), 1); +var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); +var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives8.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) }); + +// packages/icons/build-module/library/cog.mjs +var import_primitives9 = __toESM(require_primitives(), 1); +var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); +var cog_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives9.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z" }) }); + +// packages/icons/build-module/library/envelope.mjs +var import_primitives10 = __toESM(require_primitives(), 1); +var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); +var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives10.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z" }) }); + +// packages/icons/build-module/library/error.mjs +var import_primitives11 = __toESM(require_primitives(), 1); +var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); +var error_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives11.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z" }) }); + +// packages/icons/build-module/library/format-list-bullets-rtl.mjs +var import_primitives12 = __toESM(require_primitives(), 1); +var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives12.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) }); + +// packages/icons/build-module/library/format-list-bullets.mjs +var import_primitives13 = __toESM(require_primitives(), 1); +var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives13.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) }); + +// packages/icons/build-module/library/funnel.mjs +var import_primitives14 = __toESM(require_primitives(), 1); +var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); +var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives14.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) }); + +// packages/icons/build-module/library/link.mjs +var import_primitives15 = __toESM(require_primitives(), 1); +var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); +var link_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives15.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) }); + +// packages/icons/build-module/library/mobile.mjs +var import_primitives16 = __toESM(require_primitives(), 1); +var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); +var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives16.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) }); + +// packages/icons/build-module/library/more-vertical.mjs +var import_primitives17 = __toESM(require_primitives(), 1); +var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); +var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives17.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); + +// packages/icons/build-module/library/next.mjs +var import_primitives18 = __toESM(require_primitives(), 1); +var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); +var next_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives18.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); + +// packages/icons/build-module/library/pencil.mjs +var import_primitives19 = __toESM(require_primitives(), 1); +var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); +var pencil_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives19.Path, { d: "m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z" }) }); + +// packages/icons/build-module/library/previous.mjs +var import_primitives20 = __toESM(require_primitives(), 1); +var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); +var previous_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives20.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); + +// packages/icons/build-module/library/scheduled.mjs +var import_primitives21 = __toESM(require_primitives(), 1); +var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); +var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives21.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z" }) }); + +// packages/icons/build-module/library/search.mjs +var import_primitives22 = __toESM(require_primitives(), 1); +var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); +var search_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives22.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) }); + +// packages/icons/build-module/library/seen.mjs +var import_primitives23 = __toESM(require_primitives(), 1); +var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); +var seen_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives23.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) }); + +// packages/icons/build-module/library/unseen.mjs +var import_primitives24 = __toESM(require_primitives(), 1); +var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); +var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives24.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives24.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) }); + +// packages/ui/build-module/stack/stack.mjs +var import_element3 = __toESM(require_element(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='71d20935c2']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "71d20935c2"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")); + document.head.appendChild(style); +} +var style_default = { "stack": "_19ce0419607e1896__stack" }; +var gapTokens = { + xs: "var(--wpds-dimension-gap-xs, 4px)", + sm: "var(--wpds-dimension-gap-sm, 8px)", + md: "var(--wpds-dimension-gap-md, 12px)", + lg: "var(--wpds-dimension-gap-lg, 16px)", + xl: "var(--wpds-dimension-gap-xl, 24px)", + "2xl": "var(--wpds-dimension-gap-2xl, 32px)", + "3xl": "var(--wpds-dimension-gap-3xl, 40px)" +}; +var Stack = (0, import_element3.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) { + const style = { + gap: gap && gapTokens[gap], + alignItems: align, + justifyContent: justify, + flexDirection: direction, + flexWrap: wrap + }; + const element = useRender({ + render: render4, + ref, + props: mergeProps(props, { style, className: style_default.stack }) + }); + return element; +}); + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var import_element4 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/constants.mjs +var import_i18n = __toESM(require_i18n(), 1); +var OPERATOR_IS_ANY = "isAny"; +var OPERATOR_IS_NONE = "isNone"; +var OPERATOR_IS_ALL = "isAll"; +var OPERATOR_IS_NOT_ALL = "isNotAll"; +var OPERATOR_BETWEEN = "between"; +var OPERATOR_IN_THE_PAST = "inThePast"; +var OPERATOR_OVER = "over"; +var OPERATOR_IS = "is"; +var OPERATOR_IS_NOT = "isNot"; +var OPERATOR_LESS_THAN = "lessThan"; +var OPERATOR_GREATER_THAN = "greaterThan"; +var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual"; +var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual"; +var OPERATOR_BEFORE = "before"; +var OPERATOR_AFTER = "after"; +var OPERATOR_BEFORE_INC = "beforeInc"; +var OPERATOR_AFTER_INC = "afterInc"; +var OPERATOR_CONTAINS = "contains"; +var OPERATOR_NOT_CONTAINS = "notContains"; +var OPERATOR_STARTS_WITH = "startsWith"; +var OPERATOR_ON = "on"; +var OPERATOR_NOT_ON = "notOn"; +var SORTING_DIRECTIONS = ["asc", "desc"]; +var sortArrows = { asc: "\u2191", desc: "\u2193" }; +var sortValues = { asc: "ascending", desc: "descending" }; +var sortLabels = { + asc: (0, import_i18n.__)("Sort ascending"), + desc: (0, import_i18n.__)("Sort descending") +}; +var sortIcons = { + asc: arrow_up_default, + desc: arrow_down_default +}; +var LAYOUT_TABLE = "table"; +var LAYOUT_GRID = "grid"; +var LAYOUT_LIST = "list"; +var LAYOUT_ACTIVITY = "activity"; +var LAYOUT_PICKER_GRID = "pickerGrid"; +var LAYOUT_PICKER_TABLE = "pickerTable"; + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var DataViewsContext = (0, import_element4.createContext)({ + view: { type: LAYOUT_TABLE }, + onChangeView: () => { + }, + fields: [], + data: [], + paginationInfo: { + totalItems: 0, + totalPages: 0 + }, + selection: [], + onChangeSelection: () => { + }, + setOpenedFilter: () => { + }, + openedFilter: null, + getItemId: (item) => item.id, + isItemClickable: () => true, + renderItemLink: void 0, + containerWidth: 0, + containerRef: (0, import_element4.createRef)(), + resizeObserverRef: () => { + }, + defaultLayouts: { list: {}, grid: {}, table: {} }, + filters: [], + isShowingFilter: false, + setIsShowingFilter: () => { + }, + hasInitiallyLoaded: false, + hasInfiniteScrollHandler: false, + config: { + perPageSizes: [] + } +}); +DataViewsContext.displayName = "DataViewsContext"; +var dataviews_context_default = DataViewsContext; + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var import_i18n21 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_i18n9 = __toESM(require_i18n(), 1); +var import_components8 = __toESM(require_components(), 1); +var import_element12 = __toESM(require_element(), 1); +var import_keycodes = __toESM(require_keycodes(), 1); + +// packages/dataviews/build-module/components/dataviews-selection-checkbox/index.mjs +var import_components3 = __toESM(require_components(), 1); +var import_i18n2 = __toESM(require_i18n(), 1); +var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); +function DataViewsSelectionCheckbox({ + selection, + onChangeSelection, + item, + getItemId: getItemId2, + titleField, + disabled, + ...extraProps +}) { + const id = getItemId2(item); + const checked = !disabled && selection.includes(id); + const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n2.__)("(no title)"); + return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( + import_components3.CheckboxControl, + { + className: "dataviews-selection-checkbox", + "aria-label": selectionLabel, + "aria-disabled": disabled, + checked, + onChange: () => { + if (disabled) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + }, + ...extraProps + } + ); +} + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_components4 = __toESM(require_components(), 1); +var import_i18n3 = __toESM(require_i18n(), 1); +var import_element5 = __toESM(require_element(), 1); +var import_data3 = __toESM(require_data(), 1); +var import_compose = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/lock-unlock.mjs +var import_private_apis = __toESM(require_private_apis(), 1); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/dataviews" +); + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); +var { Menu, kebabCase } = unlock(import_components4.privateApis); +function ButtonTrigger({ + action, + onClick, + items, + variant +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + import_components4.Button, + { + disabled: !!action.disabled, + accessibleWhenDisabled: true, + size: "compact", + variant, + onClick, + children: label + } + ); +} +function MenuItemTrigger({ + action, + onClick, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Menu.ItemLabel, { children: label }) }); +} +function ActionModal({ + action, + items, + closeModal +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader; + return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + import_components4.Modal, + { + title: modalHeader || label, + __experimentalHideHeader: !!action.hideModalHeader, + onRequestClose: closeModal, + focusOnMount: action.modalFocusOnMount ?? true, + size: action.modalSize || "medium", + overlayClassName: `dataviews-action-modal dataviews-action-modal__${kebabCase( + action.id + )}`, + children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(action.RenderModal, { items, closeModal }) + } + ); +} +function ActionsMenuGroup({ + actions, + item, + registry, + setActiveModalAction +}) { + const { primaryActions, regularActions } = (0, import_element5.useMemo)(() => { + return actions.reduce( + (acc, action) => { + (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action); + return acc; + }, + { + primaryActions: [], + regularActions: [] + } + ); + }, [actions]); + const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + MenuItemTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item] + }, + action.id + )); + return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Menu.Group, { children: [ + renderActionGroup(primaryActions), + renderActionGroup(regularActions) + ] }); +} +function ItemActions({ + item, + actions, + isCompact +}) { + const registry = (0, import_data3.useRegistry)(); + const { primaryActions, eligibleActions } = (0, import_element5.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isCompact) { + return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + isSmall: true, + registry + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)( + Stack, + { + direction: "row", + justify: "flex-end", + className: "dataviews-item-actions", + style: { + flexShrink: 0, + width: "auto" + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport) && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + registry + } + ) + ] + } + ); +} +function CompactItemActions({ + item, + actions, + isSmall, + registry +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element5.useState)( + null + ); + return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Menu, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + Menu.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + import_components4.Button, + { + size: isSmall ? "small" : "compact", + icon: more_vertical_default, + label: (0, import_i18n3.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + className: "dataviews-all-actions-button" + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + ActionsMenuGroup, + { + actions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} +function PrimaryActions({ + item, + actions, + registry, + buttonVariant +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element5.useState)(null); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isMobileViewport) { + return null; + } + if (!Array.isArray(actions) || actions.length === 0) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [ + actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + ButtonTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item], + variant: buttonVariant + }, + action.id + )), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_components5 = __toESM(require_components(), 1); +var import_i18n5 = __toESM(require_i18n(), 1); +var import_element6 = __toESM(require_element(), 1); +var import_data4 = __toESM(require_data(), 1); +var import_compose2 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/utils/get-footer-message.mjs +var import_i18n4 = __toESM(require_i18n(), 1); +function getFooterMessage(selectionCount, itemsCount, totalItems) { + if (selectionCount > 0) { + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item selected", "%d Items selected", selectionCount), + selectionCount + ); + } + if (totalItems > itemsCount) { + return (0, import_i18n4.sprintf)( + /* translators: %1$d: number of items. %2$d: total number of items. */ + (0, import_i18n4._n)("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems), + itemsCount, + totalItems + ); + } + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item", "%d Items", itemsCount), + itemsCount + ); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); +function ActionWithModal({ + action, + items, + ActionTriggerComponent +}) { + const [isModalOpen, setIsModalOpen] = (0, import_element6.useState)(false); + const actionTriggerProps = { + action, + onClick: () => { + setIsModalOpen(true); + }, + items + }; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ActionTriggerComponent, { ...actionTriggerProps }), + isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ActionModal, + { + action, + items, + closeModal: () => setIsModalOpen(false) + } + ) + ] }); +} +function useHasAPossibleBulkAction(actions, item) { + return (0, import_element6.useMemo)(() => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }, [actions, item]); +} +function useSomeItemHasAPossibleBulkAction(actions, data) { + return (0, import_element6.useMemo)(() => { + return data.some((item) => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }); + }, [actions, data]); +} +function BulkSelectionCheckbox({ + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 +}) { + const selectableItems = (0, import_element6.useMemo)(() => { + return data.filter((item) => { + return actions.some( + (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) + ); + }); + }, [data, actions]); + const selectedItems = data.filter( + (item) => selection.includes(getItemId2(item)) && selectableItems.includes(item) + ); + const areAllSelected = selectedItems.length === selectableItems.length; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components5.CheckboxControl, + { + className: "dataviews-view-table-selection-checkbox", + checked: areAllSelected, + indeterminate: !areAllSelected && !!selectedItems.length, + onChange: () => { + if (areAllSelected) { + onChangeSelection([]); + } else { + onChangeSelection( + selectableItems.map((item) => getItemId2(item)) + ); + } + }, + "aria-label": areAllSelected ? (0, import_i18n5.__)("Deselect all") : (0, import_i18n5.__)("Select all") + } + ); +} +function ActionTrigger({ + action, + onClick, + isBusy, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + if (isMobile) { + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components5.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + label, + icon: action.icon, + size: "compact", + onClick, + isBusy + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components5.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + size: "compact", + onClick, + isBusy, + children: label + } + ); +} +var EMPTY_ARRAY2 = []; +function ActionButton({ + action, + selectedItems, + actionInProgress, + setActionInProgress +}) { + const registry = (0, import_data4.useRegistry)(); + const selectedEligibleItems = (0, import_element6.useMemo)(() => { + return selectedItems.filter((item) => { + return !action.isEligible || action.isEligible(item); + }); + }, [action, selectedItems]); + if ("RenderModal" in action) { + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ActionWithModal, + { + action, + items: selectedEligibleItems, + ActionTriggerComponent: ActionTrigger + }, + action.id + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ActionTrigger, + { + action, + onClick: async () => { + setActionInProgress(action.id); + await action.callback(selectedItems, { + registry + }); + setActionInProgress(null); + }, + items: selectedEligibleItems, + isBusy: actionInProgress === action.id + }, + action.id + ); +} +function renderFooterContent(data, actions, getItemId2, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) { + const message2 = getFooterMessage( + selection.length, + data.length, + paginationInfo.totalItems + ); + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__container", + gap: "md", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ), + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }), + /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__action-buttons", + gap: "xs", + children: [ + actionsToShow.map((action) => { + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ActionButton, + { + action, + selectedItems, + actionInProgress, + setActionInProgress + }, + action.id + ); + }), + selectedItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components5.Button, + { + icon: close_small_default, + showTooltip: true, + tooltipPosition: "top", + size: "compact", + label: (0, import_i18n5.__)("Cancel"), + disabled: !!actionInProgress, + accessibleWhenDisabled: false, + onClick: () => { + onChangeSelection(EMPTY_ARRAY2); + } + } + ) + ] + } + ) + ] + } + ); +} +function FooterContent({ + selection, + actions, + onChangeSelection, + data, + getItemId: getItemId2, + paginationInfo +}) { + const [actionInProgress, setActionInProgress] = (0, import_element6.useState)( + null + ); + const footerContentRef = (0, import_element6.useRef)(void 0); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + const bulkActions = (0, import_element6.useMemo)( + () => actions.filter((action) => action.supportsBulk), + [actions] + ); + const selectableItems = (0, import_element6.useMemo)(() => { + return data.filter((item) => { + return bulkActions.some( + (action) => !action.isEligible || action.isEligible(item) + ); + }); + }, [data, bulkActions]); + const selectedItems = (0, import_element6.useMemo)(() => { + return data.filter( + (item) => selection.includes(getItemId2(item)) && selectableItems.includes(item) + ); + }, [selection, data, getItemId2, selectableItems]); + const actionsToShow = (0, import_element6.useMemo)( + () => actions.filter((action) => { + return action.supportsBulk && (!isMobile || action.icon) && selectedItems.some( + (item) => !action.isEligible || action.isEligible(item) + ); + }), + [actions, selectedItems, isMobile] + ); + if (!actionInProgress) { + if (footerContentRef.current) { + footerContentRef.current = void 0; + } + return renderFooterContent( + data, + actions, + getItemId2, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } else if (!footerContentRef.current) { + footerContentRef.current = renderFooterContent( + data, + actions, + getItemId2, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } + return footerContentRef.current; +} +function BulkActionsFooter() { + const { + data, + selection, + actions = EMPTY_ARRAY2, + onChangeSelection, + getItemId: getItemId2, + paginationInfo + } = (0, import_element6.useContext)(dataviews_context_default); + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + FooterContent, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2, + paginationInfo + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_i18n6 = __toESM(require_i18n(), 1); +var import_components6 = __toESM(require_components(), 1); +var import_element7 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/utils/get-hideable-fields.mjs +function getHideableFields(view, fields) { + const togglableFields = [ + view?.titleField, + view?.mediaField, + view?.descriptionField + ].filter(Boolean); + return fields.filter( + (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu2 } = unlock(import_components6.privateApis); +function WithMenuSeparators({ children }) { + return import_element7.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_element7.Fragment, { children: [ + i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.Separator, {}), + child + ] }, i2)); +} +var _HeaderMenu = (0, import_element7.forwardRef)(function HeaderMenu({ + fieldId, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove = true, + canInsertLeft = true, + canInsertRight = true +}, ref) { + const visibleFieldIds = view.fields ?? []; + const index = visibleFieldIds?.indexOf(fieldId); + const isSorted = view.sort?.field === fieldId; + let isHidable = false; + let isSortable = false; + let canAddFilter = false; + let operators = []; + const field = fields.find((f2) => f2.id === fieldId); + const { setIsShowingFilter } = (0, import_element7.useContext)(dataviews_context_default); + if (!field) { + return null; + } + isHidable = field.enableHiding !== false; + isSortable = field.enableSorting !== false; + const header = field.header; + operators = !!field.filterBy && field.filterBy?.operators || []; + canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary; + if (!isSortable && !canMove && !isHidable && !canAddFilter) { + return header; + } + const hiddenFields = getHideableFields(view, fields).filter( + (f2) => !visibleFieldIds.includes(f2.id) + ); + const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length; + const isRtl = (0, import_i18n6.isRTL)(); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)( + Menu2.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components6.Button, + { + size: "compact", + className: "dataviews-view-table-header-button", + ref, + variant: "tertiary" + } + ), + children: [ + header, + view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(WithMenuSeparators, { children: [ + isSortable && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map( + (direction) => { + const isChecked = view.sort && isSorted && view.sort.direction === direction; + const value = `${fieldId}-${direction}`; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + Menu2.RadioItem, + { + name: "view-table-sorting", + value, + checked: isChecked, + onChange: () => { + onChangeView({ + ...view, + sort: { + field: fieldId, + direction + }, + showLevels: false + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] }) + }, + value + ); + } + ) }), + canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components6.Icon, { icon: funnel_default }), + onClick: () => { + setOpenedFilter(fieldId); + setIsShowingFilter(true); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: fieldId, + value: void 0, + operator: operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Add filter") }) + } + ) }), + (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Menu2.Group, { children: [ + canMove && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components6.Icon, { icon: arrow_left_default }), + disabled: isRtl ? index >= visibleFieldIds.length - 1 : index < 1, + onClick: () => { + const targetIndex = isRtl ? index + 1 : index - 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move left") }) + } + ), + canMove && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components6.Icon, { icon: arrow_right_default }), + disabled: isRtl ? index < 1 : index >= visibleFieldIds.length - 1, + onClick: () => { + const targetIndex = isRtl ? index - 1 : index + 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move right") }) + } + ), + canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert left") }) }), + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index + 1 : index; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert right") }) }), + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index : index + 1; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components6.Icon, { icon: unseen_default }), + onClick: () => { + onHide(field); + onChangeView({ + ...view, + fields: visibleFieldIds.filter( + (id) => id !== fieldId + ) + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Hide column") }) + } + ) + ] }) + ] }) }) + ] }); +}); +var ColumnHeaderMenu = _HeaderMenu; +var column_header_menu_default = ColumnHeaderMenu; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs +var import_element8 = __toESM(require_element(), 1); +var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); +function getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className +}) { + if (!isItemClickable(item) || !onClickItem) { + return { className }; + } + return { + className: className ? `${className} ${className}--clickable` : void 0, + role: "button", + tabIndex: 0, + onClick: (event) => { + event.stopPropagation(); + onClickItem(item); + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + onClickItem(item); + } + } + }; +} +function ItemClickWrapper({ + item, + isItemClickable, + onClickItem, + renderItemLink, + className, + children, + ...extraProps +}) { + if (!isItemClickable(item)) { + return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className, ...extraProps, children }); + } + if (renderItemLink) { + const renderedElement = renderItemLink({ + item, + className: `${className} ${className}--clickable`, + ...extraProps, + children + }); + return (0, import_element8.cloneElement)(renderedElement, { + onClick: (event) => { + event.stopPropagation(); + if (renderedElement.props.onClick) { + renderedElement.props.onClick(event); + } + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + if (renderedElement.props.onKeyDown) { + renderedElement.props.onKeyDown(event); + } + } + } + }); + } + const clickProps = getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className + }); + return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { ...clickProps, ...extraProps, children }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-primary.mjs +var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); +function ColumnPrimary({ + item, + level, + titleField, + mediaField, + descriptionField, + onClickItem, + renderItemLink, + isItemClickable +}) { + return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Stack, { direction: "row", gap: "md", align: "flex-start", justify: "flex-start", children: [ + mediaField && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media", + "aria-label": isItemClickable(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "32px" } + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)( + Stack, + { + direction: "column", + align: "flex-start", + className: "dataviews-view-table__primary-column-content", + children: [ + titleField && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-title-field", + children: [ + level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "dataviews-view-table__level", children: [ + Array(level).fill("\u2014").join(" "), + "\xA0" + ] }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(titleField.render, { item, field: titleField }) + ] + } + ), + descriptionField && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) + ] + } + ) + ] }); +} +var column_primary_default = ColumnPrimary; + +// packages/dataviews/build-module/components/dataviews-layouts/table/use-is-horizontal-scroll-end.mjs +var import_compose3 = __toESM(require_compose(), 1); +var import_element9 = __toESM(require_element(), 1); +var import_i18n7 = __toESM(require_i18n(), 1); +var isScrolledToEnd = (element) => { + if ((0, import_i18n7.isRTL)()) { + const scrollLeft = Math.abs(element.scrollLeft); + return scrollLeft <= 1; + } + return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1; +}; +function useIsHorizontalScrollEnd({ + scrollContainerRef, + enabled = false +}) { + const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element9.useState)(false); + const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)( + (0, import_element9.useCallback)(() => { + const scrollContainer = scrollContainerRef.current; + if (scrollContainer) { + setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer)); + } + }, [scrollContainerRef, setIsHorizontalScrollEnd]), + 200 + ); + (0, import_element9.useEffect)(() => { + if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) { + return () => { + }; + } + handleIsHorizontalScrollEnd(); + scrollContainerRef.current.addEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.addEventListener("resize", handleIsHorizontalScrollEnd); + return () => { + scrollContainerRef.current?.removeEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.removeEventListener("resize", handleIsHorizontalScrollEnd); + }; + }, [scrollContainerRef, enabled]); + return isHorizontalScrollEnd; +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/get-data-by-group.mjs +function getDataByGroup(data, groupByField) { + return data.reduce((groups, item) => { + const groupName = groupByField.getValue({ item }); + if (!groups.has(groupName)) { + groups.set(groupName, []); + } + groups.get(groupName)?.push(item); + return groups; + }, /* @__PURE__ */ new Map()); +} + +// packages/dataviews/build-module/components/dataviews-view-config/properties-section.mjs +var import_components7 = __toESM(require_components(), 1); +var import_i18n8 = __toESM(require_i18n(), 1); +var import_element10 = __toESM(require_element(), 1); +var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); +function FieldItem({ + field, + isVisible: isVisible2, + onToggleVisibility +}) { + return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components7.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Stack, { direction: "row", gap: "sm", justify: "flex-start", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components7.Icon, { icon: check_default }) }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "dataviews-view-config__label", children: field.label }) + ] }) }); +} +function isDefined(item) { + return !!item; +} +function PropertiesSection({ + showLabel = true +}) { + const { view, fields, onChangeView } = (0, import_element10.useContext)(dataviews_context_default); + const regularFields = getHideableFields(view, fields); + if (!regularFields?.length) { + return null; + } + const titleField = fields.find((f2) => f2.id === view.titleField); + const previewField = fields.find((f2) => f2.id === view.mediaField); + const descriptionField = fields.find( + (f2) => f2.id === view.descriptionField + ); + const lockedFields = [ + { + field: titleField, + isVisibleFlag: "showTitle" + }, + { + field: previewField, + isVisibleFlag: "showMedia" + }, + { + field: descriptionField, + isVisibleFlag: "showDescription" + } + ].filter(({ field }) => isDefined(field)); + const visibleFieldIds = view.fields ?? []; + const visibleRegularFieldsCount = regularFields.filter( + (f2) => visibleFieldIds.includes(f2.id) + ).length; + const visibleLockedFields = lockedFields.filter( + ({ isVisibleFlag }) => ( + // @ts-expect-error + view[isVisibleFlag] ?? true + ) + ); + const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount; + const isSingleVisibleLockedField = totalVisibleFields === 1 && visibleLockedFields.length === 1; + return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Stack, { direction: "column", className: "dataviews-field-control", children: [ + showLabel && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components7.BaseControl.VisualLabel, { children: (0, import_i18n8.__)("Properties") }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-config__properties", + children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_components7.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [ + lockedFields.map(({ field, isVisibleFlag }) => { + const isVisible2 = view[isVisibleFlag] ?? true; + const fieldToRender = isSingleVisibleLockedField && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + [isVisibleFlag]: !isVisible2 + }); + } + }, + field.id + ); + }), + regularFields.map((field) => { + const isVisible2 = visibleFieldIds.includes(field.id); + const fieldToRender = totalVisibleFields === 1 && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + fields: isVisible2 ? visibleFieldIds.filter( + (fieldId) => fieldId !== field.id + ) : [...visibleFieldIds, field.id] + }); + } + }, + field.id + ); + }) + ] }) + } + ) + ] }); +} + +// packages/dataviews/build-module/hooks/use-delayed-loading.mjs +var import_element11 = __toESM(require_element(), 1); +function useDelayedLoading(isLoading, options = { delay: 400 }) { + const [showLoader, setShowLoader] = (0, import_element11.useState)(false); + (0, import_element11.useEffect)(() => { + if (!isLoading) { + return; + } + const timeout = setTimeout(() => { + setShowLoader(true); + }, options.delay); + return () => { + clearTimeout(timeout); + setShowLoader(false); + }; + }, [isLoading, options.delay]); + return showLoader; +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); +function getEffectiveAlign(explicitAlign, fieldType) { + if (explicitAlign) { + return explicitAlign; + } + if (fieldType === "integer" || fieldType === "number") { + return "end"; + } + return void 0; +} +function TableColumnField({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(field.render, { item, field }) }); +} +function TableRow({ + hasBulkActions, + item, + level, + actions, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + isItemClickable, + onClickItem, + renderItemLink, + onChangeSelection, + isActionsColumnSticky, + posinset +}) { + const { paginationInfo } = (0, import_element12.useContext)(dataviews_context_default); + const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item); + const isSelected2 = hasPossibleBulkAction && selection.includes(id); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const isTouchDeviceRef = (0, import_element12.useRef)(false); + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": hasPossibleBulkAction && isSelected2, + "has-bulk-actions": hasPossibleBulkAction + }), + onTouchStart: () => { + isTouchDeviceRef.current = true; + }, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : void 0, + onMouseDown: (event) => { + const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) { + event?.preventDefault(); + } + }, + onClick: (event) => { + if (!hasPossibleBulkAction) { + return; + } + const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") { + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: !hasPossibleBulkAction + } + ) }) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + column_primary_default, + { + item, + level, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable, + onClickItem, + renderItemLink + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find((f2) => f2.id === column); + const effectiveAlign = getEffectiveAlign(align, field?.type); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + TableColumnField, + { + fields, + item, + column, + align: effectiveAlign + } + ) + }, + column + ); + }), + !!actions?.length && // Disable reason: we are not making the element interactive, + // but preventing any click events from bubbling up to the + // table row. This allows us to add a click handler to the row + // itself (to toggle row selection) without erroneously + // intercepting click events from ItemActions. + /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "td", + { + className: clsx_default("dataviews-view-table__actions-column", { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": isActionsColumnSticky + }), + onClick: (e2) => e2.stopPropagation(), + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ItemActions, { item, actions }) + } + ) + ] + } + ); +} +function ViewTable({ + actions, + data, + fields, + getItemId: getItemId2, + getItemLevel, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + view, + className, + empty +}) { + const { containerRef } = (0, import_element12.useContext)(dataviews_context_default); + const isDelayedLoading = useDelayedLoading(isLoading); + const headerMenuRefs = (0, import_element12.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element12.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element12.useState)(); + const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element12.useState)(null); + (0, import_element12.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element12.useId)(); + const isHorizontalScrollEnd = useIsHorizontalScrollEnd({ + scrollContainerRef: containerRef, + enabled: !!actions?.length + }); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const handleHeaderContextMenu = (event) => { + event.preventDefault(); + event.stopPropagation(); + const virtualAnchor = { + getBoundingClientRect: () => ({ + x: event.clientX, + y: event.clientY, + top: event.clientY, + left: event.clientX, + right: event.clientX, + bottom: event.clientY, + width: 0, + height: 0, + toJSON: () => ({}) + }) + }; + window.requestAnimationFrame(() => { + setContextMenuAnchor(virtualAnchor); + }); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const isRtl = (0, import_i18n9.isRTL)(); + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + id: tableNoticeId, + children: empty + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + "table", + { + className: clsx_default("dataviews-view-table", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "has-bulk-actions": hasBulkActions, + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : void 0, + inert: !isInfiniteScroll && isLoading ? "true" : void 0, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("colgroup", { children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("col", { className: "dataviews-view-table__col-checkbox" }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("col", { className: "dataviews-view-table__col-first-data" }), + columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "col", + { + className: clsx_default( + `dataviews-view-table__col-${column}`, + { + "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0 + } + ) + }, + `col-${column}` + )), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("col", { className: "dataviews-view-table__col-actions" }) + ] }), + contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components8.Popover, + { + anchor: contextMenuAnchor, + onClose: () => setContextMenuAnchor(null), + placement: "bottom-start", + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(PropertiesSection, { showLabel: false }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("tr", { className: "dataviews-view-table__row", children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "th", + { + className: "dataviews-view-table__checkbox-column", + scope: "col", + onContextMenu: handleHeaderContextMenu, + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false, + canInsertLeft: isRtl ? view.layout?.enableMoving ?? true : false, + canInsertRight: isRtl ? false : view.layout?.enableMoving ?? true + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find( + (f2) => f2.id === column + ); + const effectiveAlign = getEffectiveAlign( + align, + field?.type + ); + const canInsertOrMove = view.layout?.enableMoving ?? true; + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: effectiveAlign + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: canInsertOrMove, + canInsertLeft: canInsertOrMove, + canInsertRight: canInsertOrMove + } + ) + }, + column + ); + }), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "th", + { + className: clsx_default( + "dataviews-view-table__actions-column", + { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd + } + ), + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n9.__)("Actions") }) + } + ) + ] }) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("tbody", { children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0), + className: "dataviews-view-table__group-header-cell", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n9.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n9.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) }), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd + }, + getItemId2(item) + )) + ] }, `group-${groupName}`) + ) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd, + posinset: isInfiniteScroll ? index + 1 : void 0 + }, + getItemId2(item) + )) }) + ] + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-loading", id: tableNoticeId, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components8.Spinner, {}) }) }) + ] }); +} +var table_default = ViewTable; + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_components11 = __toESM(require_components(), 1); +var import_i18n12 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_components10 = __toESM(require_components(), 1); +var import_i18n11 = __toESM(require_i18n(), 1); +var import_compose4 = __toESM(require_compose(), 1); +var import_keycodes2 = __toESM(require_keycodes(), 1); +var import_element14 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/preview-size-picker.mjs +var import_components9 = __toESM(require_components(), 1); +var import_i18n10 = __toESM(require_i18n(), 1); +var import_element13 = __toESM(require_element(), 1); +var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); +var imageSizes = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +var DEFAULT_PREVIEW_SIZE = imageSizes[2].value; +function useGridColumns() { + const context = (0, import_element13.useContext)(dataviews_context_default); + const view = context.view; + return (0, import_element13.useMemo)(() => { + const containerWidth = context.containerWidth; + const gap = 32; + const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE; + const columns = Math.floor( + (containerWidth + gap) / (previewSize + gap) + ); + return Math.max(1, columns); + }, [context.containerWidth, view.layout?.previewSize]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); +var { Badge } = unlock(import_components10.privateApis); +function chunk(array, size) { + const chunks = []; + for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) { + chunks.push(array.slice(i2, i2 + size)); + } + return chunks; +} +var GridItem = (0, import_element14.forwardRef)(function GridItem2({ + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config, + ...props +}, ref) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasBulkAction = useHasAPossibleBulkAction(actions, item); + const id = getItemId2(item); + const instanceId = (0, import_compose4.useInstanceId)(GridItem2); + const isSelected2 = selection.includes(id); + const mediaPlaceholder = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "dataviews-view-grid__media-placeholder" }); + const rendersMediaField = showMedia && mediaField?.render; + const renderedMediaField = rendersMediaField ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : mediaPlaceholder; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(titleField.render, { item, field: titleField }) : null; + let mediaA11yProps; + let titleA11yProps; + if (isItemClickable(item) && onClickItem) { + if (renderedTitleField) { + mediaA11yProps = { + "aria-labelledby": `dataviews-view-grid__title-field-${instanceId}` + }; + titleA11yProps = { + id: `dataviews-view-grid__title-field-${instanceId}` + }; + } else { + mediaA11yProps = { + "aria-label": (0, import_i18n11.__)("Navigate to item") + }; + } + } + return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( + Stack, + { + direction: "column", + ...props, + ref, + className: clsx_default( + props.className, + "dataviews-view-grid__row__gridcell", + "dataviews-view-grid__card", + { + "is-selected": hasBulkAction && isSelected2 + } + ), + onClickCapture: (event) => { + props.onClickCapture?.(event); + if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) { + event.stopPropagation(); + event.preventDefault(); + if (!hasBulkAction) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: clsx_default("dataviews-view-grid__media", { + "dataviews-view-grid__media--placeholder": !rendersMediaField + }), + ...mediaA11yProps, + children: renderedMediaField + } + ), + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: !hasBulkAction + } + ), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ItemActions, { item, actions, isCompact: true }) }), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-grid__title", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-grid__title-field dataviews-title-field", + ...titleA11yProps, + title: titleField?.getValueFormatted({ + item, + field: titleField + }) || void 0, + children: renderedTitleField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + Badge, + { + className: "dataviews-view-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components10.Flex, + { + className: "dataviews-view-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components10.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components10.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }), + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components10.FlexItem, + { + className: "dataviews-view-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + } + ); +}); +function CompositeGrid({ + data, + isInfiniteScroll, + className, + inert, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + actions +}) { + const { paginationInfo, resizeObserverRef } = (0, import_element14.useContext)(dataviews_context_default); + const gridColumns = useGridColumns(); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const size = "900px"; + const totalRows = Math.ceil(data.length / gridColumns); + return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components10.Composite, + { + role: isInfiniteScroll ? "feed" : "grid", + className: clsx_default("dataviews-view-grid", className), + focusWrap: true, + "aria-busy": isLoading, + "aria-rowcount": isInfiniteScroll ? void 0 : totalRows, + ref: resizeObserverRef, + inert, + children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components10.Composite.Row, + { + render: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + "div", + { + role: "row", + "aria-rowindex": i2 + 1, + "aria-label": (0, import_i18n11.sprintf)( + /* translators: %d: The row number in the grid */ + (0, import_i18n11.__)("Row %d"), + i2 + 1 + ), + className: "dataviews-view-grid__row", + style: { + gridTemplateColumns: `repeat( ${gridColumns}, minmax(0, 1fr) )` + } + } + ), + children: row.map((item, indexInRow) => { + const index = i2 * gridColumns + indexInRow; + return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components10.Composite.Item, + { + render: (props) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + GridItem, + { + ...props, + role: isInfiniteScroll ? "article" : "gridcell", + "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0, + "aria-posinset": isInfiniteScroll ? index + 1 : void 0, + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config: { + sizes: size + } + } + ) + }, + getItemId2(item) + ); + }) + }, + i2 + )) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); +function ViewGrid({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + selection, + view, + className, + empty +}) { + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const gridProps = { + className: clsx_default(className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + actions + }; + return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Stack, { direction: "column", gap: "lg", children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h3", { className: "dataviews-view-grid__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n12.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n12.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + CompositeGrid, + { + ...gridProps, + data: groupItems, + isInfiniteScroll: false + } + ) + ] + }, + groupName + ) + ) }), + // Render a single grid with all data. + !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + CompositeGrid, + { + ...gridProps, + data, + isInfiniteScroll: !!isInfiniteScroll + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components11.Spinner, {}) }) + ] + }); +} +var grid_default = ViewGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/list/index.mjs +var import_compose5 = __toESM(require_compose(), 1); +var import_components12 = __toESM(require_components(), 1); +var import_element15 = __toESM(require_element(), 1); +var import_i18n13 = __toESM(require_i18n(), 1); +var import_data5 = __toESM(require_data(), 1); +var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu3 } = unlock(import_components12.privateApis); +function generateItemWrapperCompositeId(idPrefix) { + return `${idPrefix}-item-wrapper`; +} +function generatePrimaryActionCompositeId(idPrefix, primaryActionId) { + return `${idPrefix}-primary-action-${primaryActionId}`; +} +function generateDropdownTriggerCompositeId(idPrefix) { + return `${idPrefix}-dropdown`; +} +function PrimaryActionGridCell({ + idPrefix, + primaryAction, + item +}) { + const registry = (0, import_data5.useRegistry)(); + const [isModalOpen, setIsModalOpen] = (0, import_element15.useState)(false); + const compositeItemId = generatePrimaryActionCompositeId( + idPrefix, + primaryAction.id + ); + const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]); + return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + text: label, + size: "small", + onClick: () => setIsModalOpen(true) + } + ), + children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + ActionModal, + { + action: primaryAction, + items: [item], + closeModal: () => setIsModalOpen(false) + } + ) + } + ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + size: "small", + onClick: () => { + primaryAction.callback([item], { registry }); + }, + children: label + } + ) + } + ) }, primaryAction.id); +} +function ListItem({ + view, + actions, + idPrefix, + isSelected: isSelected2, + item, + titleField, + mediaField, + descriptionField, + onSelect, + otherFields, + onDropdownTriggerKeyDown, + posinset +}) { + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element15.useRef)(null); + const labelId = `${idPrefix}-label`; + const descriptionId = `${idPrefix}-description`; + const registry = (0, import_data5.useRegistry)(); + const [isHovered, setIsHovered] = (0, import_element15.useState)(false); + const [activeModalAction, setActiveModalAction] = (0, import_element15.useState)( + null + ); + const handleHover = ({ type }) => { + const isHover = type === "mouseenter"; + setIsHovered(isHover); + }; + const { paginationInfo } = (0, import_element15.useContext)(dataviews_context_default); + (0, import_element15.useEffect)(() => { + if (isSelected2) { + itemRef.current?.scrollIntoView({ + behavior: "auto", + block: "nearest", + inline: "nearest" + }); + } + }, [isSelected2]); + const { primaryAction, eligibleActions } = (0, import_element15.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryAction: _primaryActions[0], + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1; + const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "52px" } + } + ) }) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(titleField.render, { item, field: titleField }) : null; + const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "row", + gap: "md", + className: "dataviews-view-list__item-actions", + children: [ + primaryAction && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + PrimaryActionGridCell, + { + idPrefix, + primaryAction, + item + } + ), + !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { role: "gridcell", children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Menu3, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + Menu3.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Composite.Item, + { + id: generateDropdownTriggerCompositeId( + idPrefix + ), + render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Button, + { + size: "small", + icon: more_vertical_default, + label: (0, import_i18n13.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + onKeyDown: onDropdownTriggerKeyDown + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + ActionsMenuGroup, + { + actions: eligibleActions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }) + ] + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Composite.Row, + { + ref: itemRef, + render: ( + /* aria-posinset breaks Composite.Row if passed to it directly. */ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + "div", + { + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0 + } + ) + ), + role: infiniteScrollEnabled ? "article" : "row", + className: clsx_default({ + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleHover, + onMouseLeave: handleHover, + children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-view-list__item-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Composite.Item, + { + id: generateItemWrapperCompositeId(idPrefix), + "aria-pressed": isSelected2, + "aria-labelledby": labelId, + "aria-describedby": descriptionId, + className: "dataviews-view-list__item", + onClick: () => onSelect(item) + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "row", + gap: "md", + justify: "start", + align: "flex-start", + style: { flex: 1, minWidth: 0 }, + children: [ + renderedMediaField, + /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "column", + gap: "xs", + className: "dataviews-view-list__field-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Stack, { direction: "row", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + "div", + { + className: "dataviews-title-field dataviews-view-list__title-field", + id: labelId, + children: renderedTitleField + } + ), + usedActions + ] }), + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + "div", + { + className: "dataviews-view-list__fields", + id: descriptionId, + children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + "div", + { + className: "dataviews-view-list__field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.VisuallyHidden, + { + as: "span", + className: "dataviews-view-list__field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) + } + ) + ] + } + ) + ] + } + ) + ] + } + ) + } + ); +} +function isDefined2(item) { + return !!item; +} +function ViewList(props) { + const { + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + selection, + view, + className, + empty + } = props; + const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list"); + const isDelayedLoading = useDelayedLoading(!!isLoading); + const selectedItem = data?.findLast( + (item) => selection.includes(getItemId2(item)) + ); + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2); + const onSelect = (item) => onChangeSelection([getItemId2(item)]); + const generateCompositeItemIdPrefix = (0, import_element15.useCallback)( + (item) => `${baseId}-${getItemId2(item)}`, + [baseId, getItemId2] + ); + const isActiveCompositeItem = (0, import_element15.useCallback)( + (item, idToCheck) => { + return idToCheck.startsWith( + generateCompositeItemIdPrefix(item) + ); + }, + [generateCompositeItemIdPrefix] + ); + const [activeCompositeId, setActiveCompositeId] = (0, import_element15.useState)(void 0); + (0, import_element15.useEffect)(() => { + if (selectedItem) { + setActiveCompositeId( + generateItemWrapperCompositeId( + generateCompositeItemIdPrefix(selectedItem) + ) + ); + } + }, [selectedItem, generateCompositeItemIdPrefix]); + const activeItemIndex = data.findIndex( + (item) => isActiveCompositeItem(item, activeCompositeId ?? "") + ); + const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex); + const isActiveIdInList = activeItemIndex !== -1; + const selectCompositeItem = (0, import_element15.useCallback)( + (targetIndex, generateCompositeId) => { + const clampedIndex = Math.min( + data.length - 1, + Math.max(0, targetIndex) + ); + if (!data[clampedIndex]) { + return; + } + const itemIdPrefix = generateCompositeItemIdPrefix( + data[clampedIndex] + ); + const targetCompositeItemId = generateCompositeId(itemIdPrefix); + setActiveCompositeId(targetCompositeItemId); + document.getElementById(targetCompositeItemId)?.focus(); + }, + [data, generateCompositeItemIdPrefix] + ); + (0, import_element15.useEffect)(() => { + const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1; + if (!isActiveIdInList && wasActiveIdInList) { + selectCompositeItem( + previousActiveItemIndex, + generateItemWrapperCompositeId + ); + } + }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]); + const onDropdownTriggerKeyDown = (0, import_element15.useCallback)( + (event) => { + if (event.key === "ArrowDown") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex + 1, + generateDropdownTriggerCompositeId + ); + } + if (event.key === "ArrowUp") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex - 1, + generateDropdownTriggerCompositeId + ); + } + }, + [selectCompositeItem, activeItemIndex] + ); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Composite, + { + id: `${baseId}`, + render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", {}), + className: "dataviews-view-list__group", + role: "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + Stack, + { + direction: "column", + gap: "lg", + className: clsx_default("dataviews-view-list", className), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h3", { className: "dataviews-view-list__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n13.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n13.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + groupItems.map((item) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown + }, + id + ); + }) + ] + }, + groupName + ) + ) + } + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components12.Composite, + { + id: baseId, + render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", {}), + className: clsx_default("dataviews-view-list", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + role: view.infiniteScrollEnabled ? "feed" : "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + children: data.map((item, index) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + }, + id + ); + }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components12.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_components14 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-group.mjs +var import_i18n14 = __toESM(require_i18n(), 1); +var import_element16 = __toESM(require_element(), 1); +var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); +function ActivityGroup({ + groupName, + groupData, + groupField, + showLabel = true, + children +}) { + const groupHeader = showLabel ? (0, import_element16.createInterpolateElement)( + // translators: %s: The label of the field e.g. "Status". + (0, import_i18n14.sprintf)((0, import_i18n14.__)("%s: "), groupField.label).trim(), + { + groupName: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + groupField.render, + { + item: groupData[0], + field: groupField + } + ) + } + ) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(groupField.render, { item: groupData[0], field: groupField }); + return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-activity__group", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }), + children + ] + }, + groupName + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-item.mjs +var import_components13 = __toESM(require_components(), 1); +var import_element17 = __toESM(require_element(), 1); +var import_data6 = __toESM(require_data(), 1); +var import_compose6 = __toESM(require_compose(), 1); +var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); +function ActivityItem(props) { + const { + view, + actions, + item, + titleField, + mediaField, + descriptionField, + otherFields, + posinset, + onClickItem, + renderItemLink, + isItemClickable + } = props; + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element17.useRef)(null); + const registry = (0, import_data6.useRegistry)(); + const { paginationInfo } = (0, import_element17.useContext)(dataviews_context_default); + const { primaryActions, eligibleActions } = (0, import_element17.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose6.useViewportMatch)("medium", "<"); + const density = view.layout?.density ?? "balanced"; + const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { + sizes: density === "comfortable" ? "32px" : "24px" + } + } + ) : null; + const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + "span", + { + className: "dataviews-view-activity__item-bullet", + "aria-hidden": "true" + } + ) }); + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(titleField.render, { item, field: titleField }) : null; + const verticalGap = (0, import_element17.useMemo)(() => { + switch (density) { + case "comfortable": + return "md"; + default: + return "sm"; + } + }, [density]); + return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + "div", + { + ref: itemRef, + role: infiniteScrollEnabled ? "article" : void 0, + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + className: clsx_default( + "dataviews-view-activity__item", + density === "compact" && "is-compact", + density === "balanced" && "is-balanced", + density === "comfortable" && "is-comfortable" + ), + children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + Stack, + { + direction: "column", + gap: "xs", + align: "center", + className: "dataviews-view-activity__item-type", + children: renderedMediaField + } + ), + /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( + Stack, + { + direction: "column", + gap: verticalGap, + align: "flex-start", + className: "dataviews-view-activity__item-content", + children: [ + renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-activity__item-title", + children: renderedTitleField + } + ), + showDescription && descriptionField && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( + "div", + { + className: "dataviews-view-activity__item-field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + import_components13.VisuallyHidden, + { + as: "span", + className: "dataviews-view-activity__item-field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) }), + !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry, + buttonVariant: "secondary" + } + ) + ] + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport && // At the same time, only show the menu if there are actions to show. + eligibleActions.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + ItemActions, + { + item, + actions: eligibleActions, + isCompact: true + } + ) }) + ] }) + } + ); +} +var activity_item_default = ActivityItem; + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-items.mjs +var import_react3 = __toESM(require_react(), 1); +function isDefined3(item) { + return !!item; +} +function ActivityItems(props) { + const { data, fields, getItemId: getItemId2, view } = props; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3); + return data.map((item, index) => { + return /* @__PURE__ */ (0, import_react3.createElement)( + activity_item_default, + { + ...props, + key: getItemId2(item), + item, + mediaField, + titleField, + descriptionField, + otherFields, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + } + ); + }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); +function ViewActivity(props) { + const { empty, data, fields, isLoading, view, className } = props; + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const isInert = !isInfiniteScroll && !!isLoading; + const wrapperClassName = clsx_default("dataviews-view-activity", className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }); + const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : []; + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "column", + gap: "sm", + className: wrapperClassName, + inert: isInert ? "true" : void 0, + children: groupedEntries.map( + ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ActivityGroup, + { + groupName, + groupData, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ActivityItems, + { + ...props, + data: groupData + } + ) + }, + groupName + ) + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "div", + { + className: wrapperClassName, + role: view.infiniteScrollEnabled ? "feed" : void 0, + inert: isInert ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ActivityItems, { ...props }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components14.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_components17 = __toESM(require_components(), 1); +var import_i18n17 = __toESM(require_i18n(), 1); +var import_compose7 = __toESM(require_compose(), 1); +var import_element21 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_components16 = __toESM(require_components(), 1); +var import_data7 = __toESM(require_data(), 1); +var import_element19 = __toESM(require_element(), 1); +var import_i18n16 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-pagination/index.mjs +var import_components15 = __toESM(require_components(), 1); +var import_element18 = __toESM(require_element(), 1); +var import_i18n15 = __toESM(require_i18n(), 1); +var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); +function DataViewsPagination() { + const { + view, + onChangeView, + paginationInfo: { totalItems = 0, totalPages } + } = (0, import_element18.useContext)(dataviews_context_default); + if (!totalItems || !totalPages || view.infiniteScrollEnabled) { + return null; + } + const currentPage = view.page ?? 1; + const pageSelectOptions = Array.from(Array(totalPages)).map( + (_, i2) => { + const page = i2 + 1; + return { + value: page.toString(), + label: page.toString(), + "aria-label": currentPage === page ? (0, import_i18n15.sprintf)( + // translators: 1: current page number. 2: total number of pages. + (0, import_i18n15.__)("Page %1$d of %2$d"), + currentPage, + totalPages + ) : page.toString() + }; + } + ); + return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-pagination", + justify: "end", + align: "center", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + align: "center", + gap: "xs", + className: "dataviews-pagination__page-select", + children: (0, import_element18.createInterpolateElement)( + (0, import_i18n15.sprintf)( + // translators: 1: Current page number, 2: Total number of pages. + (0, import_i18n15._x)( + "
      Page
      %1$s
      of %2$d
      ", + "paging" + ), + "", + totalPages + ), + { + div: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { "aria-hidden": true }), + CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + import_components15.SelectControl, + { + "aria-label": (0, import_i18n15.__)("Current page"), + value: currentPage.toString(), + options: pageSelectOptions, + onChange: (newValue) => { + onChangeView({ + ...view, + page: +newValue + }); + }, + size: "small", + variant: "minimal" + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(Stack, { direction: "row", gap: "xs", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + import_components15.Button, + { + onClick: () => onChangeView({ + ...view, + page: currentPage - 1 + }), + disabled: currentPage === 1, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Previous page"), + icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + import_components15.Button, + { + onClick: () => onChangeView({ ...view, page: currentPage + 1 }), + disabled: currentPage >= totalPages, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Next page"), + icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ) + ] }) + ] + } + ); +} +var dataviews_pagination_default = (0, import_element18.memo)(DataViewsPagination); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); +function useIsMultiselectPicker(actions) { + return (0, import_element19.useMemo)(() => { + return actions?.every((action) => action.supportsBulk); + }, [actions]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/grid-items.mjs +var import_element20 = __toESM(require_element(), 1); +var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); +var GridItems = (0, import_element20.forwardRef)(({ className, previewSize, ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + "div", + { + ref, + className: clsx_default("dataviews-view-grid-items", className), + style: { + gridTemplateColumns: previewSize && `repeat(auto-fill, minmax(${previewSize}px, 1fr))` + }, + ...props + } + ); +}); + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); +var { Badge: Badge2 } = unlock(import_components17.privateApis); +function GridItem3({ + view, + multiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config, + posinset, + setsize +}) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const id = getItemId2(item); + const isSelected2 = selection.includes(id); + const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(titleField.render, { item, field: titleField }) : null; + return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)( + import_components17.Composite.Item, + { + "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n17.__)("(no title)") : void 0, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Stack, { direction: "column", children, ...props }), + role: "option", + "aria-posinset": posinset, + "aria-setsize": setsize, + className: clsx_default("dataviews-view-picker-grid__card", { + "is-selected": isSelected2 + }), + "aria-selected": isSelected2, + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }), + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + Stack, + { + direction: "row", + justify: "space-between", + className: "dataviews-view-picker-grid__title-actions", + children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-picker-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + Badge2, + { + className: "dataviews-view-picker-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-picker-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + import_components17.Flex, + { + className: "dataviews-view-picker-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_components17.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }), + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + import_components17.FlexItem, + { + className: "dataviews-view-picker-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + }, + id + ); +} +function GridGroup({ + groupName, + groupField, + showLabel = true, + children +}) { + const headerId = (0, import_compose7.useInstanceId)( + GridGroup, + "dataviews-view-picker-grid-group__header" + ); + return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + role: "group", + "aria-labelledby": headerId, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + "h3", + { + className: "dataviews-view-picker-grid-group__header", + id: headerId, + children: showLabel ? (0, import_i18n17.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n17.__)("%1$s: %2$s"), + groupField.label, + groupName + ) : groupName + } + ), + children + ] + }, + groupName + ); +} +function ViewPickerGrid({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + selection, + view, + className, + empty +}) { + const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element21.useContext)(dataviews_context_default); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const hasData = !!data?.length; + const usedPreviewSize = view.layout?.previewSize; + const isMultiselect = useIsMultiselectPicker(actions); + const size = "900px"; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const currentPage = view?.page ?? 1; + const perPage = view?.perPage ?? 0; + const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; + return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + import_components17.Composite, + { + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + "aria-label": itemListLabel, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + Stack, + { + direction: "column", + gap: "lg", + children, + ...props + } + ), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + GridGroup, + { + groupName, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + GridItems, + { + previewSize: usedPreviewSize, + style: { + gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax(${usedPreviewSize}px, 1fr))` + }, + "aria-busy": isLoading, + ref: resizeObserverRef, + children: groupItems.map((item) => { + const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1; + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset: posInSet, + setsize: setSize + }, + getItemId2(item) + ); + }) + } + ) + }, + groupName + ) + ) + } + ), + // Render a single grid with all data. + hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + import_components17.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + GridItems, + { + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + previewSize: usedPreviewSize, + "aria-busy": isLoading, + ref: resizeObserverRef + } + ), + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + "aria-label": itemListLabel, + children: data.map((item, index) => { + let posinset = isInfiniteScroll ? index + 1 : void 0; + if (!isInfiniteScroll) { + posinset = (currentPage - 1) * perPage + index + 1; + } + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset, + setsize: setSize + }, + getItemId2(item) + ); + }) + } + ), + // Render empty state. + !hasData && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !isLoading + }), + children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_components17.Spinner, {}) }) : empty + } + ), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_components17.Spinner, {}) }) + ] + }); +} +var picker_grid_default = ViewPickerGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/picker-table/index.mjs +var import_i18n18 = __toESM(require_i18n(), 1); +var import_components18 = __toESM(require_components(), 1); +var import_element22 = __toESM(require_element(), 1); +var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); +function TableColumnField2({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(field.render, { item, field }) }); +} +function TableRow2({ + item, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect, + posinset +}) { + const { paginationInfo } = (0, import_element22.useContext)(dataviews_context_default); + const isSelected2 = selection.includes(id); + const [isHovered, setIsHovered] = (0, import_element22.useState)(false); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const handleMouseEnter = () => { + setIsHovered(true); + }; + const handleMouseLeave = () => { + setIsHovered(false); + }; + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + import_components18.Composite.Item, + { + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleMouseEnter, + onMouseLeave: handleMouseLeave, + children, + ...props + } + ), + "aria-selected": isSelected2, + "aria-setsize": paginationInfo.totalItems || void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : "option", + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "td", + { + className: "dataviews-view-table__checkbox-column", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ) }) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + column_primary_default, + { + item, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable: () => false + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + TableColumnField2, + { + fields, + item, + column, + align + } + ) + }, + column + ); + }) + ] + }, + id + ); +} +function ViewPickerTable({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + view, + className, + empty +}) { + const headerMenuRefs = (0, import_element22.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element22.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element22.useState)(); + const isMultiselect = useIsMultiselectPicker(actions) ?? false; + (0, import_element22.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element22.useId)(); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + "table", + { + className: clsx_default( + "dataviews-view-table", + "dataviews-view-picker-table", + className, + { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ) + } + ), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : "listbox", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + "tr", + { + className: "dataviews-view-table__row", + role: "presentation", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: align + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: view.layout?.enableMoving ?? true + } + ) + }, + column + ); + }) + ] + } + ) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + import_components18.Composite, + { + virtualFocus: true, + orientation: "vertical", + render: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("tbody", { role: "group" }), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "tr", + { + className: "dataviews-view-table__group-header-row", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1, + className: "dataviews-view-table__group-header-cell", + role: "presentation", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n18.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n18.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) + } + ), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + TableRow2, + { + item, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect: isMultiselect + }, + getItemId2(item) + )) + ] + }, + `group-${groupName}` + ) + ) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + import_components18.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("tbody", { role: "presentation" }), + virtualFocus: true, + orientation: "vertical", + children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + TableRow2, + { + item, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect: isMultiselect, + posinset: index + 1 + }, + getItemId2(item) + )) + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !hasData && !isLoading + }), + id: tableNoticeId, + children: [ + !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components18.Spinner, {}) }) : empty), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components18.Spinner, {}) }) + ] + } + ) + ] }); +} +var picker_table_default = ViewPickerTable; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/preview-size-picker.mjs +var import_components19 = __toESM(require_components(), 1); +var import_i18n19 = __toESM(require_i18n(), 1); +var import_element23 = __toESM(require_element(), 1); +var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); +var imageSizes2 = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +function PreviewSizePicker() { + const context = (0, import_element23.useContext)(dataviews_context_default); + const view = context.view; + const breakValues = imageSizes2.filter((size) => { + return context.containerWidth >= size.breakpoint; + }); + const layoutPreviewSize = view.layout?.previewSize ?? 230; + const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0; + const marks = breakValues.map((size, index) => { + return { + value: index + }; + }); + return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + import_components19.RangeControl, + { + __next40pxDefaultSize: true, + showTooltip: false, + label: (0, import_i18n19.__)("Preview size"), + value: previewSizeToUse, + min: 0, + max: breakValues.length - 1, + withInputField: false, + onChange: (value = 0) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + previewSize: breakValues[value].value + } + }); + }, + step: 1, + marks + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/density-picker.mjs +var import_components20 = __toESM(require_components(), 1); +var import_i18n20 = __toESM(require_i18n(), 1); +var import_element24 = __toESM(require_element(), 1); +var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); +function DensityPicker() { + const context = (0, import_element24.useContext)(dataviews_context_default); + const view = context.view; + return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)( + import_components20.__experimentalToggleGroupControl, + { + size: "__unstable-large", + label: (0, import_i18n20.__)("Density"), + value: view.layout?.density || "balanced", + onChange: (value) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + density: value + } + }); + }, + isBlock: true, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components20.__experimentalToggleGroupControlOption, + { + value: "comfortable", + label: (0, import_i18n20._x)( + "Comfortable", + "Density option for DataView layout" + ) + }, + "comfortable" + ), + /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components20.__experimentalToggleGroupControlOption, + { + value: "balanced", + label: (0, import_i18n20._x)("Balanced", "Density option for DataView layout") + }, + "balanced" + ), + /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components20.__experimentalToggleGroupControlOption, + { + value: "compact", + label: (0, import_i18n20._x)("Compact", "Density option for DataView layout") + }, + "compact" + ) + ] + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var VIEW_LAYOUTS = [ + { + type: LAYOUT_TABLE, + label: (0, import_i18n21.__)("Table"), + component: table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_GRID, + label: (0, import_i18n21.__)("Grid"), + component: grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker + }, + { + type: LAYOUT_LIST, + label: (0, import_i18n21.__)("List"), + component: ViewList, + icon: (0, import_i18n21.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_ACTIVITY, + label: (0, import_i18n21.__)("Activity"), + component: ViewActivity, + icon: scheduled_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_PICKER_GRID, + label: (0, import_i18n21.__)("Grid"), + component: picker_grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker, + isPicker: true + }, + { + type: LAYOUT_PICKER_TABLE, + label: (0, import_i18n21.__)("Table"), + component: picker_table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker, + isPicker: true + } +]; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_element32 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_components23 = __toESM(require_components(), 1); +var import_i18n24 = __toESM(require_i18n(), 1); +var import_element29 = __toESM(require_element(), 1); + +// node_modules/@ariakit/core/esm/__chunks/XMCVU3LR.js +function noop(..._) { +} +function applyState(argument, currentValue) { + if (isUpdater(argument)) { + const value = isLazyValue(currentValue) ? currentValue() : currentValue; + return argument(value); + } + return argument; +} +function isUpdater(argument) { + return typeof argument === "function"; +} +function isLazyValue(value) { + return typeof value === "function"; +} +function hasOwnProperty(object, prop) { + if (typeof Object.hasOwn === "function") { + return Object.hasOwn(object, prop); + } + return Object.prototype.hasOwnProperty.call(object, prop); +} +function chain(...fns) { + return (...args) => { + for (const fn of fns) { + if (typeof fn === "function") { + fn(...args); + } + } + }; +} +function normalizeString(str) { + return str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); +} +function omit2(object, keys) { + const result = { ...object }; + for (const key of keys) { + if (hasOwnProperty(result, key)) { + delete result[key]; + } + } + return result; +} +function pick(object, paths) { + const result = {}; + for (const key of paths) { + if (hasOwnProperty(object, key)) { + result[key] = object[key]; + } + } + return result; +} +function identity(value) { + return value; +} +function invariant(condition, message2) { + if (condition) return; + if (typeof message2 !== "string") throw new Error("Invariant failed"); + throw new Error(message2); +} +function getKeys(obj) { + return Object.keys(obj); +} +function isFalsyBooleanCallback(booleanOrCallback, ...args) { + const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback; + if (result == null) return false; + return !result; +} +function disabledFromProps(props) { + return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true"; +} +function removeUndefinedValues(obj) { + const result = {}; + for (const key in obj) { + if (obj[key] !== void 0) { + result[key] = obj[key]; + } + } + return result; +} +function defaultValue(...values) { + for (const value of values) { + if (value !== void 0) return value; + } + return void 0; +} + +// node_modules/@ariakit/react-core/esm/__chunks/YXGXYGQX.js +var import_react4 = __toESM(require_react(), 1); +function setRef(ref, value) { + if (typeof ref === "function") { + ref(value); + } else if (ref) { + ref.current = value; + } +} +function isValidElementWithRef(element) { + if (!element) return false; + if (!(0, import_react4.isValidElement)(element)) return false; + if ("ref" in element.props) return true; + if ("ref" in element) return true; + return false; +} +function getRefProperty(element) { + if (!isValidElementWithRef(element)) return null; + const props = { ...element.props }; + return props.ref || element.ref; +} +function mergeProps2(base, overrides) { + const props = { ...base }; + for (const key in overrides) { + if (!hasOwnProperty(overrides, key)) continue; + if (key === "className") { + const prop = "className"; + props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop]; + continue; + } + if (key === "style") { + const prop = "style"; + props[prop] = base[prop] ? { ...base[prop], ...overrides[prop] } : overrides[prop]; + continue; + } + const overrideValue = overrides[key]; + if (typeof overrideValue === "function" && key.startsWith("on")) { + const baseValue = base[key]; + if (typeof baseValue === "function") { + props[key] = (...args) => { + overrideValue(...args); + baseValue(...args); + }; + continue; + } + } + props[key] = overrideValue; + } + return props; +} + +// node_modules/@ariakit/core/esm/__chunks/3DNM6L6E.js +var canUseDOM = checkIsBrowser(); +function checkIsBrowser() { + var _a; + return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement); +} +function getDocument(node) { + if (!node) return document; + if ("self" in node) return node.document; + return node.ownerDocument || document; +} +function getActiveElement(node, activeDescendant = false) { + var _a; + const { activeElement } = getDocument(node); + if (!(activeElement == null ? void 0 : activeElement.nodeName)) { + return null; + } + if (isFrame(activeElement) && ((_a = activeElement.contentDocument) == null ? void 0 : _a.body)) { + return getActiveElement( + activeElement.contentDocument.body, + activeDescendant + ); + } + if (activeDescendant) { + const id = activeElement.getAttribute("aria-activedescendant"); + if (id) { + const element = getDocument(activeElement).getElementById(id); + if (element) { + return element; + } + } + } + return activeElement; +} +function contains(parent, child) { + return parent === child || parent.contains(child); +} +function isFrame(element) { + return element.tagName === "IFRAME"; +} +function isButton(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "button") return true; + if (tagName === "input" && element.type) { + return buttonInputTypes.indexOf(element.type) !== -1; + } + return false; +} +var buttonInputTypes = [ + "button", + "color", + "file", + "image", + "reset", + "submit" +]; +function isVisible(element) { + if (typeof element.checkVisibility === "function") { + return element.checkVisibility(); + } + const htmlElement = element; + return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0; +} +function isTextField(element) { + try { + const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null; + const isTextArea = element.tagName === "TEXTAREA"; + return isTextInput || isTextArea || false; + } catch (_error) { + return false; + } +} +function isTextbox(element) { + return element.isContentEditable || isTextField(element); +} +function getTextboxValue(element) { + if (isTextField(element)) { + return element.value; + } + if (element.isContentEditable) { + const range = getDocument(element).createRange(); + range.selectNodeContents(element); + return range.toString(); + } + return ""; +} +function getTextboxSelection(element) { + let start = 0; + let end = 0; + if (isTextField(element)) { + start = element.selectionStart || 0; + end = element.selectionEnd || 0; + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) { + const range = selection.getRangeAt(0); + const nextRange = range.cloneRange(); + nextRange.selectNodeContents(element); + nextRange.setEnd(range.startContainer, range.startOffset); + start = nextRange.toString().length; + nextRange.setEnd(range.endContainer, range.endOffset); + end = nextRange.toString().length; + } + } + return { start, end }; +} +function getPopupRole(element, fallback) { + const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"]; + const role = element == null ? void 0 : element.getAttribute("role"); + if (role && allowedPopupRoles.indexOf(role) !== -1) { + return role; + } + return fallback; +} +function getScrollingElement(element) { + if (!element) return null; + const isScrollableOverflow = (overflow) => { + if (overflow === "auto") return true; + if (overflow === "scroll") return true; + return false; + }; + if (element.clientHeight && element.scrollHeight > element.clientHeight) { + const { overflowY } = getComputedStyle(element); + if (isScrollableOverflow(overflowY)) return element; + } else if (element.clientWidth && element.scrollWidth > element.clientWidth) { + const { overflowX } = getComputedStyle(element); + if (isScrollableOverflow(overflowX)) return element; + } + return getScrollingElement(element.parentElement) || document.scrollingElement || document.body; +} +function setSelectionRange(element, ...args) { + if (/text|search|password|tel|url/i.test(element.type)) { + element.setSelectionRange(...args); + } +} +function sortBasedOnDOMPosition(items, getElement) { + const pairs = items.map((item, index) => [index, item]); + let isOrderDifferent = false; + pairs.sort(([indexA, a2], [indexB, b2]) => { + const elementA = getElement(a2); + const elementB = getElement(b2); + if (elementA === elementB) return 0; + if (!elementA || !elementB) return 0; + if (isElementPreceding(elementA, elementB)) { + if (indexA > indexB) { + isOrderDifferent = true; + } + return -1; + } + if (indexA < indexB) { + isOrderDifferent = true; + } + return 1; + }); + if (isOrderDifferent) { + return pairs.map(([_, item]) => item); + } + return items; +} +function isElementPreceding(a2, b2) { + return Boolean( + b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING + ); +} + +// node_modules/@ariakit/core/esm/__chunks/SNHYQNEZ.js +function isTouchDevice() { + return canUseDOM && !!navigator.maxTouchPoints; +} +function isApple() { + if (!canUseDOM) return false; + return /mac|iphone|ipad|ipod/i.test(navigator.platform); +} +function isSafari() { + return canUseDOM && isApple() && /apple/i.test(navigator.vendor); +} +function isFirefox() { + return canUseDOM && /firefox\//i.test(navigator.userAgent); +} + +// node_modules/@ariakit/core/esm/utils/events.js +function isPortalEvent(event) { + return Boolean( + event.currentTarget && !contains(event.currentTarget, event.target) + ); +} +function isSelfTarget(event) { + return event.target === event.currentTarget; +} +function isOpeningInNewTab(event) { + const element = event.currentTarget; + if (!element) return false; + const isAppleDevice = isApple(); + if (isAppleDevice && !event.metaKey) return false; + if (!isAppleDevice && !event.ctrlKey) return false; + const tagName = element.tagName.toLowerCase(); + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function isDownloading(event) { + const element = event.currentTarget; + if (!element) return false; + const tagName = element.tagName.toLowerCase(); + if (!event.altKey) return false; + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function fireBlurEvent(element, eventInit) { + const event = new FocusEvent("blur", eventInit); + const defaultAllowed = element.dispatchEvent(event); + const bubbleInit = { ...eventInit, bubbles: true }; + element.dispatchEvent(new FocusEvent("focusout", bubbleInit)); + return defaultAllowed; +} +function fireKeyboardEvent(element, type, eventInit) { + const event = new KeyboardEvent(type, eventInit); + return element.dispatchEvent(event); +} +function fireClickEvent(element, eventInit) { + const event = new MouseEvent("click", eventInit); + return element.dispatchEvent(event); +} +function isFocusEventOutside(event, container) { + const containerElement = container || event.currentTarget; + const relatedTarget = event.relatedTarget; + return !relatedTarget || !contains(containerElement, relatedTarget); +} +function queueBeforeEvent(element, type, callback, timeout) { + const createTimer = (callback2) => { + if (timeout) { + const timerId2 = setTimeout(callback2, timeout); + return () => clearTimeout(timerId2); + } + const timerId = requestAnimationFrame(callback2); + return () => cancelAnimationFrame(timerId); + }; + const cancelTimer = createTimer(() => { + element.removeEventListener(type, callSync, true); + callback(); + }); + const callSync = () => { + cancelTimer(); + callback(); + }; + element.addEventListener(type, callSync, { once: true, capture: true }); + return cancelTimer; +} +function addGlobalEventListener(type, listener, options, scope = window) { + const children = []; + try { + scope.document.addEventListener(type, listener, options); + for (const frame of Array.from(scope.frames)) { + children.push(addGlobalEventListener(type, listener, options, frame)); + } + } catch (e2) { + } + const removeEventListener = () => { + try { + scope.document.removeEventListener(type, listener, options); + } catch (e2) { + } + for (const remove of children) { + remove(); + } + }; + return removeEventListener; +} + +// node_modules/@ariakit/react-core/esm/__chunks/KPHZR4MB.js +var React6 = __toESM(require_react(), 1); +var import_react5 = __toESM(require_react(), 1); +var _React = { ...React6 }; +var useReactId = _React.useId; +var useReactDeferredValue = _React.useDeferredValue; +var useReactInsertionEffect = _React.useInsertionEffect; +var useSafeLayoutEffect = canUseDOM ? import_react5.useLayoutEffect : import_react5.useEffect; +function useInitialValue(value) { + const [initialValue] = (0, import_react5.useState)(value); + return initialValue; +} +function useLiveRef(value) { + const ref = (0, import_react5.useRef)(value); + useSafeLayoutEffect(() => { + ref.current = value; + }); + return ref; +} +function useEvent(callback) { + const ref = (0, import_react5.useRef)(() => { + throw new Error("Cannot call an event handler while rendering."); + }); + if (useReactInsertionEffect) { + useReactInsertionEffect(() => { + ref.current = callback; + }); + } else { + ref.current = callback; + } + return (0, import_react5.useCallback)((...args) => { + var _a; + return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args); + }, []); +} +function useTransactionState(callback) { + const [state, setState] = (0, import_react5.useState)(null); + useSafeLayoutEffect(() => { + if (state == null) return; + if (!callback) return; + let prevState = null; + callback((prev) => { + prevState = prev; + return state; + }); + return () => { + callback(prevState); + }; + }, [state, callback]); + return [state, setState]; +} +function useMergeRefs(...refs) { + return (0, import_react5.useMemo)(() => { + if (!refs.some(Boolean)) return; + return (value) => { + for (const ref of refs) { + setRef(ref, value); + } + }; + }, refs); +} +function useId3(defaultId) { + if (useReactId) { + const reactId = useReactId(); + if (defaultId) return defaultId; + return reactId; + } + const [id, setId] = (0, import_react5.useState)(defaultId); + useSafeLayoutEffect(() => { + if (defaultId || id) return; + const random = Math.random().toString(36).slice(2, 8); + setId(`id-${random}`); + }, [defaultId, id]); + return defaultId || id; +} +function useTagName(refOrElement, type) { + const stringOrUndefined = (type2) => { + if (typeof type2 !== "string") return; + return type2; + }; + const [tagName, setTagName] = (0, import_react5.useState)(() => stringOrUndefined(type)); + useSafeLayoutEffect(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type)); + }, [refOrElement, type]); + return tagName; +} +function useAttribute(refOrElement, attributeName, defaultValue2) { + const initialValue = useInitialValue(defaultValue2); + const [attribute, setAttribute] = (0, import_react5.useState)(initialValue); + (0, import_react5.useEffect)(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + if (!element) return; + const callback = () => { + const value = element.getAttribute(attributeName); + setAttribute(value == null ? initialValue : value); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { attributeFilter: [attributeName] }); + callback(); + return () => observer.disconnect(); + }, [refOrElement, attributeName, initialValue]); + return attribute; +} +function useUpdateEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + (0, import_react5.useEffect)(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + (0, import_react5.useEffect)( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useUpdateLayoutEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + useSafeLayoutEffect(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + useSafeLayoutEffect( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useForceUpdate() { + return (0, import_react5.useReducer)(() => [], []); +} +function useBooleanEvent(booleanOrCallback) { + return useEvent( + typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback + ); +} +function useWrapElement(props, callback, deps = []) { + const wrapElement = (0, import_react5.useCallback)( + (element) => { + if (props.wrapElement) { + element = props.wrapElement(element); + } + return callback(element); + }, + [...deps, props.wrapElement] + ); + return { ...props, wrapElement }; +} +function useMetadataProps(props, key, value) { + const parent = props.onLoadedMetadataCapture; + const onLoadedMetadataCapture = (0, import_react5.useMemo)(() => { + return Object.assign(() => { + }, { ...parent, [key]: value }); + }, [parent, key, value]); + return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }]; +} +var hasInstalledGlobalEventListeners = false; +function useIsMouseMoving() { + (0, import_react5.useEffect)(() => { + if (hasInstalledGlobalEventListeners) return; + addGlobalEventListener("mousemove", setMouseMoving, true); + addGlobalEventListener("mousedown", resetMouseMoving, true); + addGlobalEventListener("mouseup", resetMouseMoving, true); + addGlobalEventListener("keydown", resetMouseMoving, true); + addGlobalEventListener("scroll", resetMouseMoving, true); + hasInstalledGlobalEventListeners = true; + }, []); + const isMouseMoving = useEvent(() => mouseMoving); + return isMouseMoving; +} +var mouseMoving = false; +var previousScreenX = 0; +var previousScreenY = 0; +function hasMouseMovement(event) { + const movementX = event.movementX || event.screenX - previousScreenX; + const movementY = event.movementY || event.screenY - previousScreenY; + previousScreenX = event.screenX; + previousScreenY = event.screenY; + return movementX || movementY || false; +} +function setMouseMoving(event) { + if (!hasMouseMovement(event)) return; + mouseMoving = true; +} +function resetMouseMoving() { + mouseMoving = false; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GWSL6KNJ.js +var React7 = __toESM(require_react(), 1); +var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); +function forwardRef22(render4) { + const Role = React7.forwardRef( + // @ts-ignore Incompatible with React 19 types. Ignore for now. + (props, ref) => render4({ ...props, ref }) + ); + Role.displayName = render4.displayName || render4.name; + return Role; +} +function memo22(Component, propsAreEqual) { + return React7.memo(Component, propsAreEqual); +} +function createElement3(Type, props) { + const { wrapElement, render: render4, ...rest } = props; + const mergedRef = useMergeRefs(props.ref, getRefProperty(render4)); + let element; + if (React7.isValidElement(render4)) { + const renderProps = { + // @ts-ignore Incompatible with React 19 types. Ignore for now. + ...render4.props, + ref: mergedRef + }; + element = React7.cloneElement(render4, mergeProps2(rest, renderProps)); + } else if (render4) { + element = render4(rest); + } else { + element = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Type, { ...rest }); + } + if (wrapElement) { + return wrapElement(element); + } + return element; +} +function createHook(useProps) { + const useRole = (props = {}) => { + return useProps(props); + }; + useRole.displayName = useProps.name; + return useRole; +} +function createStoreContext(providers = [], scopedProviders = []) { + const context = React7.createContext(void 0); + const scopedContext = React7.createContext(void 0); + const useContext28 = () => React7.useContext(context); + const useScopedContext = (onlyScoped = false) => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (onlyScoped) return scoped; + return scoped || store; + }; + const useProviderContext = () => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (scoped && scoped === store) return; + return store; + }; + const ContextProvider = (props) => { + return providers.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(context.Provider, { ...props }) + ); + }; + const ScopedContextProvider = (props) => { + return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ContextProvider, { ...props, children: scopedProviders.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(scopedContext.Provider, { ...props }) + ) }); + }; + return { + context, + scopedContext, + useContext: useContext28, + useScopedContext, + useProviderContext, + ContextProvider, + ScopedContextProvider + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SMPCIMZM.js +var ctx = createStoreContext(); +var useCollectionContext = ctx.useContext; +var useCollectionScopedContext = ctx.useScopedContext; +var useCollectionProviderContext = ctx.useProviderContext; +var CollectionContextProvider = ctx.ContextProvider; +var CollectionScopedContextProvider = ctx.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/AVVXDJMZ.js +var import_react6 = __toESM(require_react(), 1); +var ctx2 = createStoreContext( + [CollectionContextProvider], + [CollectionScopedContextProvider] +); +var useCompositeContext = ctx2.useContext; +var useCompositeScopedContext = ctx2.useScopedContext; +var useCompositeProviderContext = ctx2.useProviderContext; +var CompositeContextProvider = ctx2.ContextProvider; +var CompositeScopedContextProvider = ctx2.ScopedContextProvider; +var CompositeItemContext = (0, import_react6.createContext)( + void 0 +); +var CompositeRowContext = (0, import_react6.createContext)( + void 0 +); + +// node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js +function findFirstEnabledItem(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItem(store, id) { + if (!id) return null; + return store.item(id) || null; +} +function groupItemsByRows(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function selectTextField(element, collapseToEnd = false) { + if (isTextField(element)) { + element.setSelectionRange( + collapseToEnd ? element.value.length : 0, + element.value.length + ); + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + selection == null ? void 0 : selection.selectAllChildren(element); + if (collapseToEnd) { + selection == null ? void 0 : selection.collapseToEnd(); + } + } +} +var FOCUS_SILENTLY = /* @__PURE__ */ Symbol("FOCUS_SILENTLY"); +function focusSilently(element) { + element[FOCUS_SILENTLY] = true; + element.focus({ preventScroll: true }); +} +function silentlyFocused(element) { + const isSilentlyFocused = element[FOCUS_SILENTLY]; + delete element[FOCUS_SILENTLY]; + return isSilentlyFocused; +} +function isItem(store, element, exclude) { + if (!element) return false; + if (element === exclude) return false; + const item = store.item(element.id); + if (!item) return false; + if (exclude && item.element === exclude) return false; + return true; +} + +// node_modules/@ariakit/react-core/esm/__chunks/Z2O3VLAQ.js +var import_react7 = __toESM(require_react(), 1); +var TagName = "div"; +var useCollectionItem = createHook( + function useCollectionItem2({ + store, + shouldRegisterItem = true, + getItem = identity, + // @ts-expect-error This prop may come from a collection renderer. + element, + ...props + }) { + const context = useCollectionContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react7.useRef)(element); + (0, import_react7.useEffect)(() => { + const element2 = ref.current; + if (!id) return; + if (!element2) return; + if (!shouldRegisterItem) return; + const item = getItem({ id, element: element2 }); + return store == null ? void 0 : store.renderItem(item); + }, [id, shouldRegisterItem, getItem, store]); + props = { + ...props, + ref: useMergeRefs(ref, props.ref) + }; + return removeUndefinedValues(props); + } +); +var CollectionItem = forwardRef22(function CollectionItem2(props) { + const htmlProps = useCollectionItem(props); + return createElement3(TagName, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js +var import_react8 = __toESM(require_react(), 1); +var FocusableContext = (0, import_react8.createContext)(true); + +// node_modules/@ariakit/core/esm/utils/focus.js +var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])"; +function isFocusable(element) { + if (!element.matches(selector)) return false; + if (!isVisible(element)) return false; + if (element.closest("[inert]")) return false; + return true; +} +function getClosestFocusable(element) { + while (element && !isFocusable(element)) { + element = element.closest(selector); + } + return element || null; +} +function hasFocus(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (activeElement === element) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + return activeDescendant === element.id; +} +function hasFocusWithin(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (contains(element, activeElement)) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + if (!("id" in element)) return false; + if (activeDescendant === element.id) return true; + return !!element.querySelector(`#${CSS.escape(activeDescendant)}`); +} +function focusIfNeeded(element) { + if (!hasFocusWithin(element) && isFocusable(element)) { + element.focus(); + } +} +function focusIntoView(element, options) { + if (!("scrollIntoView" in element)) { + element.focus(); + } else { + element.focus({ preventScroll: true }); + element.scrollIntoView({ block: "nearest", inline: "nearest", ...options }); + } +} + +// node_modules/@ariakit/react-core/esm/__chunks/U6HHPQDW.js +var import_react9 = __toESM(require_react(), 1); +var TagName2 = "div"; +var isSafariBrowser = isSafari(); +var alwaysFocusVisibleInputTypes = [ + "text", + "search", + "url", + "tel", + "email", + "password", + "number", + "date", + "month", + "week", + "time", + "datetime", + "datetime-local" +]; +var safariFocusAncestorSymbol = /* @__PURE__ */ Symbol("safariFocusAncestor"); +function markSafariFocusAncestor(element, value) { + if (!element) return; + element[safariFocusAncestorSymbol] = value; +} +function isAlwaysFocusVisible(element) { + const { tagName, readOnly, type } = element; + if (tagName === "TEXTAREA" && !readOnly) return true; + if (tagName === "SELECT" && !readOnly) return true; + if (tagName === "INPUT" && !readOnly) { + return alwaysFocusVisibleInputTypes.includes(type); + } + if (element.isContentEditable) return true; + const role = element.getAttribute("role"); + if (role === "combobox" && element.dataset.name) { + return true; + } + return false; +} +function getLabels(element) { + if ("labels" in element) { + return element.labels; + } + return null; +} +function isNativeCheckboxOrRadio(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "input" && element.type) { + return element.type === "radio" || element.type === "checkbox"; + } + return false; +} +function isNativeTabbable(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a"; +} +function supportsDisabledAttribute(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea"; +} +function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) { + if (!focusable) { + return tabIndexProp; + } + if (trulyDisabled) { + if (nativeTabbable && !supportsDisabled) { + return -1; + } + return; + } + if (nativeTabbable) { + return tabIndexProp; + } + return tabIndexProp || 0; +} +function useDisableEvent(onEvent, disabled) { + return useEvent((event) => { + onEvent == null ? void 0 : onEvent(event); + if (event.defaultPrevented) return; + if (disabled) { + event.stopPropagation(); + event.preventDefault(); + } + }); +} +var hasInstalledGlobalEventListeners2 = false; +var isKeyboardModality = true; +function onGlobalMouseDown(event) { + const target = event.target; + if (target && "hasAttribute" in target) { + if (!target.hasAttribute("data-focus-visible")) { + isKeyboardModality = false; + } + } +} +function onGlobalKeyDown(event) { + if (event.metaKey) return; + if (event.ctrlKey) return; + if (event.altKey) return; + isKeyboardModality = true; +} +var useFocusable = createHook( + function useFocusable2({ + focusable = true, + accessibleWhenDisabled, + autoFocus, + onFocusVisible, + ...props + }) { + const ref = (0, import_react9.useRef)(null); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (hasInstalledGlobalEventListeners2) return; + addGlobalEventListener("mousedown", onGlobalMouseDown, true); + addGlobalEventListener("keydown", onGlobalKeyDown, true); + hasInstalledGlobalEventListeners2 = true; + }, [focusable]); + if (isSafariBrowser) { + (0, import_react9.useEffect)(() => { + if (!focusable) return; + const element = ref.current; + if (!element) return; + if (!isNativeCheckboxOrRadio(element)) return; + const labels = getLabels(element); + if (!labels) return; + const onMouseUp = () => queueMicrotask(() => element.focus()); + for (const label of labels) { + label.addEventListener("mouseup", onMouseUp); + } + return () => { + for (const label of labels) { + label.removeEventListener("mouseup", onMouseUp); + } + }; + }, [focusable]); + } + const disabled = focusable && disabledFromProps(props); + const trulyDisabled = !!disabled && !accessibleWhenDisabled; + const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (trulyDisabled && focusVisible) { + setFocusVisible(false); + } + }, [focusable, trulyDisabled, focusVisible]); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (!focusVisible) return; + const element = ref.current; + if (!element) return; + if (typeof IntersectionObserver === "undefined") return; + const observer = new IntersectionObserver(() => { + if (!isFocusable(element)) { + setFocusVisible(false); + } + }); + observer.observe(element); + return () => observer.disconnect(); + }, [focusable, focusVisible]); + const onKeyPressCapture = useDisableEvent( + props.onKeyPressCapture, + disabled + ); + const onMouseDownCapture = useDisableEvent( + props.onMouseDownCapture, + disabled + ); + const onClickCapture = useDisableEvent(props.onClickCapture, disabled); + const onMouseDownProp = props.onMouseDown; + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + const element = event.currentTarget; + if (!isSafariBrowser) return; + if (isPortalEvent(event)) return; + if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return; + let receivedFocus = false; + const onFocus = () => { + receivedFocus = true; + }; + const options = { capture: true, once: true }; + element.addEventListener("focusin", onFocus, options); + const focusableContainer = getClosestFocusable(element.parentElement); + markSafariFocusAncestor(focusableContainer, true); + queueBeforeEvent(element, "mouseup", () => { + element.removeEventListener("focusin", onFocus, true); + markSafariFocusAncestor(focusableContainer, false); + if (receivedFocus) return; + focusIfNeeded(element); + }); + }); + const handleFocusVisible = (event, currentTarget) => { + if (currentTarget) { + event.currentTarget = currentTarget; + } + if (!focusable) return; + const element = event.currentTarget; + if (!element) return; + if (!hasFocus(element)) return; + onFocusVisible == null ? void 0 : onFocusVisible(event); + if (event.defaultPrevented) return; + element.dataset.focusVisible = "true"; + setFocusVisible(true); + }; + const onKeyDownCaptureProp = props.onKeyDownCapture; + const onKeyDownCapture = useEvent((event) => { + onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (focusVisible) return; + if (event.metaKey) return; + if (event.altKey) return; + if (event.ctrlKey) return; + if (!isSelfTarget(event)) return; + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + queueBeforeEvent(element, "focusout", applyFocusVisible); + }); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (!isSelfTarget(event)) { + setFocusVisible(false); + return; + } + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + if (isKeyboardModality || isAlwaysFocusVisible(event.target)) { + queueBeforeEvent(event.target, "focusout", applyFocusVisible); + } else { + setFocusVisible(false); + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + onBlurProp == null ? void 0 : onBlurProp(event); + if (!focusable) return; + if (!isFocusEventOutside(event)) return; + event.currentTarget.removeAttribute("data-focus-visible"); + setFocusVisible(false); + }); + const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext); + const autoFocusRef = useEvent((element) => { + if (!focusable) return; + if (!autoFocus) return; + if (!element) return; + if (!autoFocusOnShow) return; + queueMicrotask(() => { + if (hasFocus(element)) return; + if (!isFocusable(element)) return; + element.focus(); + }); + }); + const tagName = useTagName(ref); + const nativeTabbable = focusable && isNativeTabbable(tagName); + const supportsDisabled = focusable && supportsDisabledAttribute(tagName); + const styleProp = props.style; + const style = (0, import_react9.useMemo)(() => { + if (trulyDisabled) { + return { pointerEvents: "none", ...styleProp }; + } + return styleProp; + }, [trulyDisabled, styleProp]); + props = { + "data-focus-visible": focusable && focusVisible || void 0, + "data-autofocus": autoFocus || void 0, + "aria-disabled": disabled || void 0, + ...props, + ref: useMergeRefs(ref, autoFocusRef, props.ref), + style, + tabIndex: getTabIndex( + focusable, + trulyDisabled, + nativeTabbable, + supportsDisabled, + props.tabIndex + ), + disabled: supportsDisabled && trulyDisabled ? true : void 0, + // TODO: Test Focusable contentEditable. + contentEditable: disabled ? void 0 : props.contentEditable, + onKeyPressCapture, + onClickCapture, + onMouseDownCapture, + onMouseDown, + onKeyDownCapture, + onFocusCapture, + onBlur + }; + return removeUndefinedValues(props); + } +); +var Focusable = forwardRef22(function Focusable2(props) { + const htmlProps = useFocusable(props); + return createElement3(TagName2, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/PZ3OL7I2.js +var import_react10 = __toESM(require_react(), 1); +var TagName3 = "button"; +function isNativeClick(event) { + if (!event.isTrusted) return false; + const element = event.currentTarget; + if (event.key === "Enter") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A"; + } + if (event.key === " ") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT"; + } + return false; +} +var symbol = /* @__PURE__ */ Symbol("command"); +var useCommand = createHook( + function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { + const ref = (0, import_react10.useRef)(null); + const [isNativeButton, setIsNativeButton] = (0, import_react10.useState)(false); + (0, import_react10.useEffect)(() => { + if (!ref.current) return; + setIsNativeButton(isButton(ref.current)); + }, []); + const [active, setActive] = (0, import_react10.useState)(false); + const activeRef = (0, import_react10.useRef)(false); + const disabled = disabledFromProps(props); + const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + const element = event.currentTarget; + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (!isSelfTarget(event)) return; + if (isTextField(element)) return; + if (element.isContentEditable) return; + const isEnter = clickOnEnter && event.key === "Enter"; + const isSpace = clickOnSpace && event.key === " "; + const shouldPreventEnter = event.key === "Enter" && !clickOnEnter; + const shouldPreventSpace = event.key === " " && !clickOnSpace; + if (shouldPreventEnter || shouldPreventSpace) { + event.preventDefault(); + return; + } + if (isEnter || isSpace) { + const nativeClick = isNativeClick(event); + if (isEnter) { + if (!nativeClick) { + event.preventDefault(); + const { view, ...eventInit } = event; + const click = () => fireClickEvent(element, eventInit); + if (isFirefox()) { + queueBeforeEvent(element, "keyup", click); + } else { + queueMicrotask(click); + } + } + } else if (isSpace) { + activeRef.current = true; + if (!nativeClick) { + event.preventDefault(); + setActive(true); + } + } + } + }); + const onKeyUpProp = props.onKeyUp; + const onKeyUp = useEvent((event) => { + onKeyUpProp == null ? void 0 : onKeyUpProp(event); + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (event.metaKey) return; + const isSpace = clickOnSpace && event.key === " "; + if (activeRef.current && isSpace) { + activeRef.current = false; + if (!isNativeClick(event)) { + event.preventDefault(); + setActive(false); + const element = event.currentTarget; + const { view, ...eventInit } = event; + queueMicrotask(() => fireClickEvent(element, eventInit)); + } + } + }); + props = { + "data-active": active || void 0, + type: isNativeButton ? "button" : void 0, + ...metadataProps, + ...props, + ref: useMergeRefs(ref, props.ref), + onKeyDown, + onKeyUp + }; + props = useFocusable(props); + return props; + } +); +var Command = forwardRef22(function Command2(props) { + const htmlProps = useCommand(props); + return createElement3(TagName3, htmlProps); +}); + +// node_modules/@ariakit/core/esm/__chunks/SXKM4CGU.js +function getInternal(store, key) { + const internals = store.__unstableInternals; + invariant(internals, "Invalid store"); + return internals[key]; +} +function createStore(initialState, ...stores) { + let state = initialState; + let prevStateBatch = state; + let lastUpdate = /* @__PURE__ */ Symbol(); + let destroy = noop; + const instances = /* @__PURE__ */ new Set(); + const updatedKeys = /* @__PURE__ */ new Set(); + const setups = /* @__PURE__ */ new Set(); + const listeners = /* @__PURE__ */ new Set(); + const batchListeners = /* @__PURE__ */ new Set(); + const disposables = /* @__PURE__ */ new WeakMap(); + const listenerKeys = /* @__PURE__ */ new WeakMap(); + const storeSetup = (callback) => { + setups.add(callback); + return () => setups.delete(callback); + }; + const storeInit = () => { + const initialized = instances.size; + const instance = /* @__PURE__ */ Symbol(); + instances.add(instance); + const maybeDestroy = () => { + instances.delete(instance); + if (instances.size) return; + destroy(); + }; + if (initialized) return maybeDestroy; + const desyncs = getKeys(state).map( + (key) => chain( + ...stores.map((store) => { + var _a; + const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store); + if (!storeState) return; + if (!hasOwnProperty(storeState, key)) return; + return sync(store, [key], (state2) => { + setState( + key, + state2[key], + // @ts-expect-error - Not public API. This is just to prevent + // infinite loops. + true + ); + }); + }) + ) + ); + const teardowns = []; + for (const setup2 of setups) { + teardowns.push(setup2()); + } + const cleanups = stores.map(init); + destroy = chain(...desyncs, ...teardowns, ...cleanups); + return maybeDestroy; + }; + const sub = (keys, listener, set = listeners) => { + set.add(listener); + listenerKeys.set(listener, keys); + return () => { + var _a; + (_a = disposables.get(listener)) == null ? void 0 : _a(); + disposables.delete(listener); + listenerKeys.delete(listener); + set.delete(listener); + }; + }; + const storeSubscribe = (keys, listener) => sub(keys, listener); + const storeSync = (keys, listener) => { + disposables.set(listener, listener(state, state)); + return sub(keys, listener); + }; + const storeBatch = (keys, listener) => { + disposables.set(listener, listener(state, prevStateBatch)); + return sub(keys, listener, batchListeners); + }; + const storePick = (keys) => createStore(pick(state, keys), finalStore); + const storeOmit = (keys) => createStore(omit2(state, keys), finalStore); + const getState = () => state; + const setState = (key, value, fromStores = false) => { + var _a; + if (!hasOwnProperty(state, key)) return; + const nextValue = applyState(value, state[key]); + if (nextValue === state[key]) return; + if (!fromStores) { + for (const store of stores) { + (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue); + } + } + const prevState = state; + state = { ...state, [key]: nextValue }; + const thisUpdate = /* @__PURE__ */ Symbol(); + lastUpdate = thisUpdate; + updatedKeys.add(key); + const run = (listener, prev, uKeys) => { + var _a2; + const keys = listenerKeys.get(listener); + const updated = (k) => uKeys ? uKeys.has(k) : k === key; + if (!keys || keys.some(updated)) { + (_a2 = disposables.get(listener)) == null ? void 0 : _a2(); + disposables.set(listener, listener(state, prev)); + } + }; + for (const listener of listeners) { + run(listener, prevState); + } + queueMicrotask(() => { + if (lastUpdate !== thisUpdate) return; + const snapshot = state; + for (const listener of batchListeners) { + run(listener, prevStateBatch, updatedKeys); + } + prevStateBatch = snapshot; + updatedKeys.clear(); + }); + }; + const finalStore = { + getState, + setState, + __unstableInternals: { + setup: storeSetup, + init: storeInit, + subscribe: storeSubscribe, + sync: storeSync, + batch: storeBatch, + pick: storePick, + omit: storeOmit + } + }; + return finalStore; +} +function setup(store, ...args) { + if (!store) return; + return getInternal(store, "setup")(...args); +} +function init(store, ...args) { + if (!store) return; + return getInternal(store, "init")(...args); +} +function subscribe(store, ...args) { + if (!store) return; + return getInternal(store, "subscribe")(...args); +} +function sync(store, ...args) { + if (!store) return; + return getInternal(store, "sync")(...args); +} +function batch(store, ...args) { + if (!store) return; + return getInternal(store, "batch")(...args); +} +function omit22(store, ...args) { + if (!store) return; + return getInternal(store, "omit")(...args); +} +function pick2(store, ...args) { + if (!store) return; + return getInternal(store, "pick")(...args); +} +function mergeStore(...stores) { + var _a; + const initialState = {}; + for (const store2 of stores) { + const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2); + if (nextState) { + Object.assign(initialState, nextState); + } + } + const store = createStore(initialState, ...stores); + return Object.assign({}, ...stores, store); +} +function throwOnConflictingProps(props, store) { + if (false) return; + if (!store) return; + const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => { + var _a; + const stateKey = key.replace("default", ""); + return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}${stateKey.slice(1)}`; + }); + if (!defaultKeys.length) return; + const storeState = store.getState(); + const conflictingProps = defaultKeys.filter( + (key) => hasOwnProperty(storeState, key) + ); + if (!conflictingProps.length) return; + throw new Error( + `Passing a store prop in conjunction with a default state is not supported. + +const store = useSelectStore(); + + ^ ^ + +Instead, pass the default state to the topmost store: + +const store = useSelectStore({ defaultValue: "Apple" }); + + +See https://github.com/ariakit/ariakit/pull/2745 for more details. + +If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit +` + ); +} + +// node_modules/@ariakit/react-core/esm/__chunks/Q5W46E73.js +var React8 = __toESM(require_react(), 1); +var import_shim = __toESM(require_shim(), 1); +var { useSyncExternalStore } = import_shim.default; +var noopSubscribe = () => () => { +}; +function useStoreState(store, keyOrSelector = identity) { + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const key = typeof keyOrSelector === "string" ? keyOrSelector : null; + const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null; + const state = store == null ? void 0 : store.getState(); + if (selector2) return selector2(state); + if (!state) return; + if (!key) return; + if (!hasOwnProperty(state, key)) return; + return state[key]; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreStateObject(store, object) { + const objRef = React8.useRef( + {} + ); + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const state = store == null ? void 0 : store.getState(); + let updated = false; + const obj = objRef.current; + for (const prop in object) { + const keyOrSelector = object[prop]; + if (typeof keyOrSelector === "function") { + const value = keyOrSelector(state); + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + if (typeof keyOrSelector === "string") { + if (!state) continue; + if (!hasOwnProperty(state, keyOrSelector)) continue; + const value = state[keyOrSelector]; + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + } + if (updated) { + objRef.current = { ...obj }; + } + return objRef.current; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreProps(store, props, key, setKey) { + const value = hasOwnProperty(props, key) ? props[key] : void 0; + const setValue = setKey ? props[setKey] : void 0; + const propsRef = useLiveRef({ value, setValue }); + useSafeLayoutEffect(() => { + return sync(store, [key], (state, prev) => { + const { value: value2, setValue: setValue2 } = propsRef.current; + if (!setValue2) return; + if (state[key] === prev[key]) return; + if (state[key] === value2) return; + setValue2(state[key]); + }); + }, [store, key]); + useSafeLayoutEffect(() => { + if (value === void 0) return; + store.setState(key, value); + return batch(store, [key], () => { + if (value === void 0) return; + store.setState(key, value); + }); + }); +} +function useStore(createStore2, props) { + const [store, setStore] = React8.useState(() => createStore2(props)); + useSafeLayoutEffect(() => init(store), [store]); + const useState26 = React8.useCallback( + (keyOrSelector) => useStoreState(store, keyOrSelector), + [store] + ); + const memoizedStore = React8.useMemo( + () => ({ ...store, useState: useState26 }), + [store, useState26] + ); + const updateStore = useEvent(() => { + setStore((store2) => createStore2({ ...props, ...store2.getState() })); + }); + return [memoizedStore, updateStore]; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WZWDIE3S.js +var import_react11 = __toESM(require_react(), 1); +var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); +var TagName4 = "button"; +function isEditableElement(element) { + if (isTextbox(element)) return true; + return element.tagName === "INPUT" && !isButton(element); +} +function getNextPageOffset(scrollingElement, pageUp = false) { + const height = scrollingElement.clientHeight; + const { top } = scrollingElement.getBoundingClientRect(); + const pageSize = Math.max(height * 0.875, height - 40) * 1.5; + const pageOffset = pageUp ? height - pageSize + top : pageSize + top; + if (scrollingElement.tagName === "HTML") { + return pageOffset + scrollingElement.scrollTop; + } + return pageOffset; +} +function getItemOffset(itemElement, pageUp = false) { + const { top } = itemElement.getBoundingClientRect(); + if (pageUp) { + return top + itemElement.clientHeight; + } + return top; +} +function findNextPageItemId(element, store, next, pageUp = false) { + var _a; + if (!store) return; + if (!next) return; + const { renderedItems } = store.getState(); + const scrollingElement = getScrollingElement(element); + if (!scrollingElement) return; + const nextPageOffset = getNextPageOffset(scrollingElement, pageUp); + let id; + let prevDifference; + for (let i2 = 0; i2 < renderedItems.length; i2 += 1) { + const previousId = id; + id = next(i2); + if (!id) break; + if (id === previousId) continue; + const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element; + if (!itemElement) continue; + const itemOffset = getItemOffset(itemElement, pageUp); + const difference = itemOffset - nextPageOffset; + const absDifference = Math.abs(difference); + if (pageUp && difference <= 0 || !pageUp && difference >= 0) { + if (prevDifference !== void 0 && prevDifference < absDifference) { + id = previousId; + } + break; + } + prevDifference = absDifference; + } + return id; +} +function targetIsAnotherItem(event, store) { + if (isSelfTarget(event)) return false; + return isItem(store, event.target); +} +var useCompositeItem = createHook( + function useCompositeItem2({ + store, + rowId: rowIdProp, + preventScrollOnKeyDown = false, + moveOnKeyPress = true, + tabbable = false, + getItem: getItemProp, + "aria-setsize": ariaSetSizeProp, + "aria-posinset": ariaPosInSetProp, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react11.useRef)(null); + const row = (0, import_react11.useContext)(CompositeRowContext); + const disabled = disabledFromProps(props); + const trulyDisabled = disabled && !props.accessibleWhenDisabled; + const { + rowId, + baseElement, + isActiveItem, + ariaSetSize, + ariaPosInSet, + isTabbable + } = useStoreStateObject(store, { + rowId(state) { + if (rowIdProp) return rowIdProp; + if (!state) return; + if (!(row == null ? void 0 : row.baseElement)) return; + if (row.baseElement !== state.baseElement) return; + return row.id; + }, + baseElement(state) { + return (state == null ? void 0 : state.baseElement) || void 0; + }, + isActiveItem(state) { + return !!state && state.activeId === id; + }, + ariaSetSize(state) { + if (ariaSetSizeProp != null) return ariaSetSizeProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaSetSize)) return; + if (row.baseElement !== state.baseElement) return; + return row.ariaSetSize; + }, + ariaPosInSet(state) { + if (ariaPosInSetProp != null) return ariaPosInSetProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaPosInSet)) return; + if (row.baseElement !== state.baseElement) return; + const itemsInRow = state.renderedItems.filter( + (item) => item.rowId === rowId + ); + return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id); + }, + isTabbable(state) { + if (!(state == null ? void 0 : state.renderedItems.length)) return true; + if (state.virtualFocus) return false; + if (tabbable) return true; + if (state.activeId === null) return false; + const item = store == null ? void 0 : store.item(state.activeId); + if (item == null ? void 0 : item.disabled) return true; + if (!(item == null ? void 0 : item.element)) return true; + return state.activeId === id; + } + }); + const getItem = (0, import_react11.useCallback)( + (item) => { + var _a; + const nextItem = { + ...item, + id: id || item.id, + rowId, + disabled: !!trulyDisabled, + children: (_a = item.element) == null ? void 0 : _a.textContent + }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [id, rowId, trulyDisabled, getItemProp] + ); + const onFocusProp = props.onFocus; + const hasFocusedComposite = (0, import_react11.useRef)(false); + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (isPortalEvent(event)) return; + if (!id) return; + if (!store) return; + if (targetIsAnotherItem(event, store)) return; + const { virtualFocus, baseElement: baseElement2 } = store.getState(); + store.setActiveId(id); + if (isTextbox(event.currentTarget)) { + selectTextField(event.currentTarget); + } + if (!virtualFocus) return; + if (!isSelfTarget(event)) return; + if (isEditableElement(event.currentTarget)) return; + if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return; + if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) { + event.currentTarget.scrollIntoView({ + block: "nearest", + inline: "nearest" + }); + } + hasFocusedComposite.current = true; + const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget); + if (fromComposite) { + focusSilently(baseElement2); + } else { + baseElement2.focus(); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + const state = store == null ? void 0 : store.getState(); + if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) { + hasFocusedComposite.current = false; + event.preventDefault(); + event.stopPropagation(); + } + }); + const onKeyDownProp = props.onKeyDown; + const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown); + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + if (!isSelfTarget(event)) return; + if (!store) return; + const { currentTarget } = event; + const state = store.getState(); + const item = store.item(id); + const isGrid2 = !!(item == null ? void 0 : item.rowId); + const isVertical = state.orientation !== "horizontal"; + const isHorizontal = state.orientation !== "vertical"; + const canHomeEnd = () => { + if (isGrid2) return true; + if (isHorizontal) return true; + if (!state.baseElement) return true; + if (!isTextField(state.baseElement)) return true; + return false; + }; + const keyMap = { + ArrowUp: (isGrid2 || isVertical) && store.up, + ArrowRight: (isGrid2 || isHorizontal) && store.next, + ArrowDown: (isGrid2 || isVertical) && store.down, + ArrowLeft: (isGrid2 || isHorizontal) && store.previous, + Home: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.first(); + } + return store == null ? void 0 : store.previous(-1); + }, + End: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.last(); + } + return store == null ? void 0 : store.next(-1); + }, + PageUp: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true); + }, + PageDown: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down); + } + }; + const action = keyMap[event.key]; + if (action) { + if (isTextbox(currentTarget)) { + const selection = getTextboxSelection(currentTarget); + const isLeft = isHorizontal && event.key === "ArrowLeft"; + const isRight = isHorizontal && event.key === "ArrowRight"; + const isUp = isVertical && event.key === "ArrowUp"; + const isDown = isVertical && event.key === "ArrowDown"; + if (isRight || isDown) { + const { length: valueLength } = getTextboxValue(currentTarget); + if (selection.end !== valueLength) return; + } else if ((isLeft || isUp) && selection.start !== 0) return; + } + const nextId = action(); + if (preventScrollOnKeyDownProp(event) || nextId !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(nextId); + } + } + }); + const providerValue = (0, import_react11.useMemo)( + () => ({ id, baseElement }), + [id, baseElement] + ); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }), + [providerValue] + ); + props = { + id, + "data-active-item": isActiveItem || void 0, + ...props, + ref: useMergeRefs(ref, props.ref), + tabIndex: isTabbable ? props.tabIndex : -1, + onFocus, + onBlurCapture, + onKeyDown + }; + props = useCommand(props); + props = useCollectionItem({ + store, + ...props, + getItem, + shouldRegisterItem: id ? props.shouldRegisterItem : false + }); + return removeUndefinedValues({ + ...props, + "aria-setsize": ariaSetSize, + "aria-posinset": ariaPosInSet + }); + } +); +var CompositeItem = memo22( + forwardRef22(function CompositeItem2(props) { + const htmlProps = useCompositeItem(props); + return createElement3(TagName4, htmlProps); + }) +); + +// node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js +function toArray(arg) { + if (Array.isArray(arg)) { + return arg; + } + return typeof arg !== "undefined" ? [arg] : []; +} +function flatten2DArray(array) { + const flattened = []; + for (const row of array) { + flattened.push(...row); + } + return flattened; +} +function reverseArray(array) { + return array.slice().reverse(); +} + +// node_modules/@ariakit/react-core/esm/__chunks/ZMWF7ASR.js +var import_react12 = __toESM(require_react(), 1); +var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); +var TagName5 = "div"; +function isGrid(items) { + return items.some((item) => !!item.rowId); +} +function isPrintableKey(event) { + const target = event.target; + if (target && !isTextField(target)) return false; + return event.key.length === 1 && !event.ctrlKey && !event.metaKey; +} +function isModifierKey(event) { + return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta"; +} +function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) { + return useEvent((event) => { + var _a; + onKeyboardEvent == null ? void 0 : onKeyboardEvent(event); + if (event.defaultPrevented) return; + if (event.isPropagationStopped()) return; + if (!isSelfTarget(event)) return; + if (isModifierKey(event)) return; + if (isPrintableKey(event)) return; + const state = store.getState(); + const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element; + if (!activeElement) return; + const { view, ...eventInit } = event; + const previousElement = previousElementRef == null ? void 0 : previousElementRef.current; + if (activeElement !== previousElement) { + activeElement.focus(); + } + if (!fireKeyboardEvent(activeElement, event.type, eventInit)) { + event.preventDefault(); + } + if (event.currentTarget.contains(activeElement)) { + event.stopPropagation(); + } + }); +} +function findFirstEnabledItemInTheLastRow(items) { + return findFirstEnabledItem( + flatten2DArray(reverseArray(groupItemsByRows(items))) + ); +} +function useScheduleFocus(store) { + const [scheduled, setScheduled] = (0, import_react12.useState)(false); + const schedule = (0, import_react12.useCallback)(() => setScheduled(true), []); + const activeItem = store.useState( + (state) => getEnabledItem(store, state.activeId) + ); + (0, import_react12.useEffect)(() => { + const activeElement = activeItem == null ? void 0 : activeItem.element; + if (!scheduled) return; + if (!activeElement) return; + setScheduled(false); + activeElement.focus({ preventScroll: true }); + }, [activeItem, scheduled]); + return schedule; +} +var useComposite = createHook( + function useComposite2({ + store, + composite = true, + focusOnMove = composite, + moveOnKeyPress = true, + ...props + }) { + const context = useCompositeProviderContext(); + store = store || context; + invariant( + store, + "Composite must receive a `store` prop or be wrapped in a CompositeProvider component." + ); + const ref = (0, import_react12.useRef)(null); + const previousElementRef = (0, import_react12.useRef)(null); + const scheduleFocus = useScheduleFocus(store); + const moves = store.useState("moves"); + const [, setBaseElement] = useTransactionState( + composite ? store.setBaseElement : null + ); + (0, import_react12.useEffect)(() => { + var _a; + if (!store) return; + if (!moves) return; + if (!composite) return; + if (!focusOnMove) return; + const { activeId: activeId2 } = store.getState(); + const itemElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + if (!itemElement) return; + focusIntoView(itemElement); + }, [store, moves, composite, focusOnMove]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!moves) return; + if (!composite) return; + const { baseElement, activeId: activeId2 } = store.getState(); + const isSelfAcive = activeId2 === null; + if (!isSelfAcive) return; + if (!baseElement) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (previousElement) { + fireBlurEvent(previousElement, { relatedTarget: baseElement }); + } + if (!hasFocus(baseElement)) { + baseElement.focus(); + } + }, [store, moves, composite]); + const activeId = store.useState("activeId"); + const virtualFocus = store.useState("virtualFocus"); + useSafeLayoutEffect(() => { + var _a; + if (!store) return; + if (!composite) return; + if (!virtualFocus) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (!previousElement) return; + const activeElement = (_a = getEnabledItem(store, activeId)) == null ? void 0 : _a.element; + const relatedTarget = activeElement || getActiveElement(previousElement); + if (relatedTarget === previousElement) return; + fireBlurEvent(previousElement, { relatedTarget }); + }, [store, activeId, virtualFocus, composite]); + const onKeyDownCapture = useKeyboardEventProxy( + store, + props.onKeyDownCapture, + previousElementRef + ); + const onKeyUpCapture = useKeyboardEventProxy( + store, + props.onKeyUpCapture, + previousElementRef + ); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (!virtualFocus2) return; + const previousActiveElement = event.relatedTarget; + const isSilentlyFocused = silentlyFocused(event.currentTarget); + if (isSelfTarget(event) && isSilentlyFocused) { + event.stopPropagation(); + previousElementRef.current = previousActiveElement; + } + }); + const onFocusProp = props.onFocus; + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (!composite) return; + if (!store) return; + const { relatedTarget } = event; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (virtualFocus2) { + if (isSelfTarget(event) && !isItem(store, relatedTarget)) { + queueMicrotask(scheduleFocus); + } + } else if (isSelfTarget(event)) { + store.setActiveId(null); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + var _a; + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState(); + if (!virtualFocus2) return; + const activeElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + const nextActiveElement = event.relatedTarget; + const nextActiveElementIsItem = isItem(store, nextActiveElement); + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (isSelfTarget(event) && nextActiveElementIsItem) { + if (nextActiveElement === activeElement) { + if (previousElement && previousElement !== nextActiveElement) { + fireBlurEvent(previousElement, event); + } + } else if (activeElement) { + fireBlurEvent(activeElement, event); + } else if (previousElement) { + fireBlurEvent(previousElement, event); + } + event.stopPropagation(); + } else { + const targetIsItem = isItem(store, event.target); + if (!targetIsItem && activeElement) { + fireBlurEvent(activeElement, event); + } + } + }); + const onKeyDownProp = props.onKeyDown; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + var _a; + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.nativeEvent.isComposing) return; + if (event.defaultPrevented) return; + if (!store) return; + if (!isSelfTarget(event)) return; + const { orientation, renderedItems, activeId: activeId2 } = store.getState(); + const activeItem = getEnabledItem(store, activeId2); + if ((_a = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a.isConnected) return; + const isVertical = orientation !== "horizontal"; + const isHorizontal = orientation !== "vertical"; + const grid = isGrid(renderedItems); + const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End"; + if (isHorizontalKey && isTextField(event.currentTarget)) return; + const up = () => { + if (grid) { + const item = findFirstEnabledItemInTheLastRow(renderedItems); + return item == null ? void 0 : item.id; + } + return store == null ? void 0 : store.last(); + }; + const keyMap = { + ArrowUp: (grid || isVertical) && up, + ArrowRight: (grid || isHorizontal) && store.first, + ArrowDown: (grid || isVertical) && store.first, + ArrowLeft: (grid || isHorizontal) && store.last, + Home: store.first, + End: store.last, + PageUp: store.first, + PageDown: store.last + }; + const action = keyMap[event.key]; + if (action) { + const id = action(); + if (id !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(id); + } + } + }); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CompositeContextProvider, { value: store, children: element }), + [store] + ); + const activeDescendant = store.useState((state) => { + var _a; + if (!store) return; + if (!composite) return; + if (!state.virtualFocus) return; + return (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.id; + }); + props = { + "aria-activedescendant": activeDescendant, + ...props, + ref: useMergeRefs(ref, setBaseElement, props.ref), + onKeyDownCapture, + onKeyUpCapture, + onFocusCapture, + onFocus, + onBlurCapture, + onKeyDown + }; + const focusable = store.useState( + (state) => composite && (state.virtualFocus || state.activeId === null) + ); + props = useFocusable({ focusable, ...props }); + return props; + } +); +var Composite5 = forwardRef22(function Composite22(props) { + const htmlProps = useComposite(props); + return createElement3(TagName5, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/LVDQFHCH.js +var ctx3 = createStoreContext(); +var useDisclosureContext = ctx3.useContext; +var useDisclosureScopedContext = ctx3.useScopedContext; +var useDisclosureProviderContext = ctx3.useProviderContext; +var DisclosureContextProvider = ctx3.ContextProvider; +var DisclosureScopedContextProvider = ctx3.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/A62MDFCW.js +var import_react13 = __toESM(require_react(), 1); +var ctx4 = createStoreContext( + [DisclosureContextProvider], + [DisclosureScopedContextProvider] +); +var useDialogContext = ctx4.useContext; +var useDialogScopedContext = ctx4.useScopedContext; +var useDialogProviderContext = ctx4.useProviderContext; +var DialogContextProvider = ctx4.ContextProvider; +var DialogScopedContextProvider = ctx4.ScopedContextProvider; +var DialogHeadingContext = (0, import_react13.createContext)(void 0); +var DialogDescriptionContext = (0, import_react13.createContext)(void 0); + +// node_modules/@ariakit/react-core/esm/__chunks/6B3RXHKP.js +var import_react14 = __toESM(require_react(), 1); +var import_react_dom = __toESM(require_react_dom(), 1); +var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); +var TagName6 = "div"; +function afterTimeout(timeoutMs, cb) { + const timeoutId = setTimeout(cb, timeoutMs); + return () => clearTimeout(timeoutId); +} +function afterPaint2(cb) { + let raf = requestAnimationFrame(() => { + raf = requestAnimationFrame(cb); + }); + return () => cancelAnimationFrame(raf); +} +function parseCSSTime(...times) { + return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => { + const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3; + const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier; + if (currentTime > longestTime) return currentTime; + return longestTime; + }, 0); +} +function isHidden(mounted, hidden, alwaysVisible) { + return !alwaysVisible && hidden !== false && (!mounted || !!hidden); +} +var useDisclosureContent = createHook(function useDisclosureContent2({ store, alwaysVisible, ...props }) { + const context = useDisclosureProviderContext(); + store = store || context; + invariant( + store, + "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component." + ); + const ref = (0, import_react14.useRef)(null); + const id = useId3(props.id); + const [transition, setTransition] = (0, import_react14.useState)(null); + const open = store.useState("open"); + const mounted = store.useState("mounted"); + const animated = store.useState("animated"); + const contentElement = store.useState("contentElement"); + const otherElement = useStoreState(store.disclosure, "contentElement"); + useSafeLayoutEffect(() => { + if (!ref.current) return; + store == null ? void 0 : store.setContentElement(ref.current); + }, [store]); + useSafeLayoutEffect(() => { + let previousAnimated; + store == null ? void 0 : store.setState("animated", (animated2) => { + previousAnimated = animated2; + return true; + }); + return () => { + if (previousAnimated === void 0) return; + store == null ? void 0 : store.setState("animated", previousAnimated); + }; + }, [store]); + useSafeLayoutEffect(() => { + if (!animated) return; + if (!(contentElement == null ? void 0 : contentElement.isConnected)) { + setTransition(null); + return; + } + return afterPaint2(() => { + setTransition(open ? "enter" : mounted ? "leave" : null); + }); + }, [animated, contentElement, open, mounted]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!animated) return; + if (!transition) return; + if (!contentElement) return; + const stopAnimation = () => store == null ? void 0 : store.setState("animating", false); + const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation); + if (transition === "leave" && open) return; + if (transition === "enter" && !open) return; + if (typeof animated === "number") { + const timeout2 = animated; + return afterTimeout(timeout2, stopAnimationSync); + } + const { + transitionDuration, + animationDuration, + transitionDelay, + animationDelay + } = getComputedStyle(contentElement); + const { + transitionDuration: transitionDuration2 = "0", + animationDuration: animationDuration2 = "0", + transitionDelay: transitionDelay2 = "0", + animationDelay: animationDelay2 = "0" + } = otherElement ? getComputedStyle(otherElement) : {}; + const delay = parseCSSTime( + transitionDelay, + animationDelay, + transitionDelay2, + animationDelay2 + ); + const duration = parseCSSTime( + transitionDuration, + animationDuration, + transitionDuration2, + animationDuration2 + ); + const timeout = delay + duration; + if (!timeout) { + if (transition === "enter") { + store.setState("animated", false); + } + stopAnimation(); + return; + } + const frameRate = 1e3 / 60; + const maxTimeout = Math.max(timeout - frameRate, 0); + return afterTimeout(maxTimeout, stopAnimationSync); + }, [store, animated, contentElement, otherElement, open, transition]); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(DialogScopedContextProvider, { value: store, children: element }), + [store] + ); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const styleProp = props.style; + const style = (0, import_react14.useMemo)(() => { + if (hidden) { + return { ...styleProp, display: "none" }; + } + return styleProp; + }, [hidden, styleProp]); + props = { + id, + "data-open": open || void 0, + "data-enter": transition === "enter" || void 0, + "data-leave": transition === "leave" || void 0, + hidden, + ...props, + ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref), + style + }; + return removeUndefinedValues(props); +}); +var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) { + const htmlProps = useDisclosureContent(props); + return createElement3(TagName6, htmlProps); +}); +var DisclosureContent = forwardRef22(function DisclosureContent2({ + unmountOnHide, + ...props +}) { + const context = useDisclosureProviderContext(); + const store = props.store || context; + const mounted = useStoreState( + store, + (state) => !unmountOnHide || (state == null ? void 0 : state.mounted) + ); + if (mounted === false) return null; + return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(DisclosureContentImpl, { ...props }); +}); + +// node_modules/@ariakit/core/esm/__chunks/75BJEVSH.js +function createDisclosureStore(props = {}) { + const store = mergeStore( + props.store, + omit22(props.disclosure, ["contentElement", "disclosureElement"]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const open = defaultValue( + props.open, + syncState == null ? void 0 : syncState.open, + props.defaultOpen, + false + ); + const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false); + const initialState = { + open, + animated, + animating: !!animated && open, + mounted: open, + contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null), + disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null) + }; + const disclosure = createStore(initialState, store); + setup( + disclosure, + () => sync(disclosure, ["animated", "animating"], (state) => { + if (state.animated) return; + disclosure.setState("animating", false); + }) + ); + setup( + disclosure, + () => subscribe(disclosure, ["open"], () => { + if (!disclosure.getState().animated) return; + disclosure.setState("animating", true); + }) + ); + setup( + disclosure, + () => sync(disclosure, ["open", "animating"], (state) => { + disclosure.setState("mounted", state.open || state.animating); + }) + ); + return { + ...disclosure, + disclosure: props.disclosure, + setOpen: (value) => disclosure.setState("open", value), + show: () => disclosure.setState("open", true), + hide: () => disclosure.setState("open", false), + toggle: () => disclosure.setState("open", (open2) => !open2), + stopAnimation: () => disclosure.setState("animating", false), + setContentElement: (value) => disclosure.setState("contentElement", value), + setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WLZ6H5FH.js +function useDisclosureStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store, props.disclosure]); + useStoreProps(store, props, "open", "setOpen"); + useStoreProps(store, props, "mounted", "setMounted"); + useStoreProps(store, props, "animated"); + return Object.assign(store, { disclosure: props.disclosure }); +} + +// node_modules/@ariakit/react-core/esm/__chunks/JMU4N4M5.js +var ctx5 = createStoreContext( + [DialogContextProvider], + [DialogScopedContextProvider] +); +var usePopoverContext = ctx5.useContext; +var usePopoverScopedContext = ctx5.useScopedContext; +var usePopoverProviderContext = ctx5.useProviderContext; +var PopoverContextProvider = ctx5.ContextProvider; +var PopoverScopedContextProvider = ctx5.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/__chunks/N5XGANPW.js +function getCommonParent(items) { + var _a; + const firstItem = items.find((item) => !!item.element); + const lastItem = [...items].reverse().find((item) => !!item.element); + let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement; + while (parentElement && (lastItem == null ? void 0 : lastItem.element)) { + const parent = parentElement; + if (lastItem && parent.contains(lastItem.element)) { + return parentElement; + } + parentElement = parentElement.parentElement; + } + return getDocument(parentElement).body; +} +function getPrivateStore(store) { + return store == null ? void 0 : store.__unstablePrivateStore; +} +function createCollectionStore(props = {}) { + var _a; + throwOnConflictingProps(props, props.store); + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const items = defaultValue( + props.items, + syncState == null ? void 0 : syncState.items, + props.defaultItems, + [] + ); + const itemsMap = new Map(items.map((item) => [item.id, item])); + const initialState = { + items, + renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, []) + }; + const syncPrivateStore = getPrivateStore(props.store); + const privateStore = createStore( + { items, renderedItems: initialState.renderedItems }, + syncPrivateStore + ); + const collection = createStore(initialState, props.store); + const sortItems = (renderedItems) => { + const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element); + privateStore.setState("renderedItems", sortedItems); + collection.setState("renderedItems", sortedItems); + }; + setup(collection, () => init(privateStore)); + setup(privateStore, () => { + return batch(privateStore, ["items"], (state) => { + collection.setState("items", state.items); + }); + }); + setup(privateStore, () => { + return batch(privateStore, ["renderedItems"], (state) => { + let firstRun = true; + let raf = requestAnimationFrame(() => { + const { renderedItems } = collection.getState(); + if (state.renderedItems === renderedItems) return; + sortItems(state.renderedItems); + }); + if (typeof IntersectionObserver !== "function") { + return () => cancelAnimationFrame(raf); + } + const ioCallback = () => { + if (firstRun) { + firstRun = false; + return; + } + cancelAnimationFrame(raf); + raf = requestAnimationFrame(() => sortItems(state.renderedItems)); + }; + const root = getCommonParent(state.renderedItems); + const observer = new IntersectionObserver(ioCallback, { root }); + for (const item of state.renderedItems) { + if (!item.element) continue; + observer.observe(item.element); + } + return () => { + cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + }); + const mergeItem = (item, setItems, canDeleteFromMap = false) => { + let prevItem; + setItems((items2) => { + const index = items2.findIndex(({ id }) => id === item.id); + const nextItems = items2.slice(); + if (index !== -1) { + prevItem = items2[index]; + const nextItem = { ...prevItem, ...item }; + nextItems[index] = nextItem; + itemsMap.set(item.id, nextItem); + } else { + nextItems.push(item); + itemsMap.set(item.id, item); + } + return nextItems; + }); + const unmergeItem = () => { + setItems((items2) => { + if (!prevItem) { + if (canDeleteFromMap) { + itemsMap.delete(item.id); + } + return items2.filter(({ id }) => id !== item.id); + } + const index = items2.findIndex(({ id }) => id === item.id); + if (index === -1) return items2; + const nextItems = items2.slice(); + nextItems[index] = prevItem; + itemsMap.set(item.id, prevItem); + return nextItems; + }); + }; + return unmergeItem; + }; + const registerItem = (item) => mergeItem( + item, + (getItems) => privateStore.setState("items", getItems), + true + ); + return { + ...collection, + registerItem, + renderItem: (item) => chain( + registerItem(item), + mergeItem( + item, + (getItems) => privateStore.setState("renderedItems", getItems) + ) + ), + item: (id) => { + if (!id) return null; + let item = itemsMap.get(id); + if (!item) { + const { items: items2 } = privateStore.getState(); + item = items2.find((item2) => item2.id === id); + if (item) { + itemsMap.set(id, item); + } + } + return item || null; + }, + // @ts-expect-error Internal + __unstablePrivateStore: privateStore + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GVAFFF2B.js +function useCollectionStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store]); + useStoreProps(store, props, "items", "setItems"); + return store; +} + +// node_modules/@ariakit/core/esm/__chunks/RVTIKFRL.js +var NULL_ITEM = { id: null }; +function findFirstEnabledItem2(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItems(items, excludeId) { + return items.filter((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getItemsInRow(items, rowId) { + return items.filter((item) => item.rowId === rowId); +} +function flipItems(items, activeId, shouldInsertNullItem = false) { + const index = items.findIndex((item) => item.id === activeId); + return [ + ...items.slice(index + 1), + ...shouldInsertNullItem ? [NULL_ITEM] : [], + ...items.slice(0, index) + ]; +} +function groupItemsByRows2(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function getMaxRowLength(array) { + let maxLength = 0; + for (const { length } of array) { + if (length > maxLength) { + maxLength = length; + } + } + return maxLength; +} +function createEmptyItem(rowId) { + return { + id: "__EMPTY_ITEM__", + disabled: true, + rowId + }; +} +function normalizeRows(rows, activeId, focusShift) { + const maxLength = getMaxRowLength(rows); + for (const row of rows) { + for (let i2 = 0; i2 < maxLength; i2 += 1) { + const item = row[i2]; + if (!item || focusShift && item.disabled) { + const isFirst = i2 === 0; + const previousItem = isFirst && focusShift ? findFirstEnabledItem2(row) : row[i2 - 1]; + row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId); + } + } + } + return rows; +} +function verticalizeItems(items) { + const rows = groupItemsByRows2(items); + const maxLength = getMaxRowLength(rows); + const verticalized = []; + for (let i2 = 0; i2 < maxLength; i2 += 1) { + for (const row of rows) { + const item = row[i2]; + if (item) { + verticalized.push({ + ...item, + // If there's no rowId, it means that it's not a grid composite, but + // a single row instead. So, instead of verticalizing it, that is, + // assigning a different rowId based on the column index, we keep it + // undefined so they will be part of the same row. This is useful + // when using up/down on one-dimensional composites. + rowId: item.rowId ? `${i2}` : void 0 + }); + } + } + } + return verticalized; +} +function createCompositeStore(props = {}) { + var _a; + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const collection = createCollectionStore(props); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId + ); + const initialState = { + ...collection.getState(), + id: defaultValue( + props.id, + syncState == null ? void 0 : syncState.id, + `id-${Math.random().toString(36).slice(2, 8)}` + ), + activeId, + baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null), + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + activeId === null + ), + moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "both" + ), + rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + false + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false), + focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false) + }; + const composite = createStore(initialState, collection, props.store); + setup( + composite, + () => sync(composite, ["renderedItems", "activeId"], (state) => { + composite.setState("activeId", (activeId2) => { + var _a2; + if (activeId2 !== void 0) return activeId2; + return (_a2 = findFirstEnabledItem2(state.renderedItems)) == null ? void 0 : _a2.id; + }); + }) + ); + const getNextId = (direction = "next", options = {}) => { + var _a2, _b; + const defaultState = composite.getState(); + const { + skip = 0, + activeId: activeId2 = defaultState.activeId, + focusShift = defaultState.focusShift, + focusLoop = defaultState.focusLoop, + focusWrap = defaultState.focusWrap, + includesBaseElement = defaultState.includesBaseElement, + renderedItems = defaultState.renderedItems, + rtl = defaultState.rtl + } = options; + const isVerticalDirection = direction === "up" || direction === "down"; + const isNextDirection = direction === "next" || direction === "down"; + const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection; + const canShift = focusShift && !skip; + let items = !isVerticalDirection ? renderedItems : flatten2DArray( + normalizeRows(groupItemsByRows2(renderedItems), activeId2, canShift) + ); + items = canReverse ? reverseArray(items) : items; + items = isVerticalDirection ? verticalizeItems(items) : items; + if (activeId2 == null) { + return (_a2 = findFirstEnabledItem2(items)) == null ? void 0 : _a2.id; + } + const activeItem = items.find((item) => item.id === activeId2); + if (!activeItem) { + return (_b = findFirstEnabledItem2(items)) == null ? void 0 : _b.id; + } + const isGrid2 = items.some((item) => item.rowId); + const activeIndex = items.indexOf(activeItem); + const nextItems = items.slice(activeIndex + 1); + const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId); + if (skip) { + const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2); + const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one. + nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1]; + return nextItem2 == null ? void 0 : nextItem2.id; + } + const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"); + const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical"); + const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false; + if (canLoop) { + const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId); + const sortedItems = flipItems(loopItems, activeId2, hasNullItem); + const nextItem2 = findFirstEnabledItem2(sortedItems, activeId2); + return nextItem2 == null ? void 0 : nextItem2.id; + } + if (canWrap) { + const nextItem2 = findFirstEnabledItem2( + // We can use nextItems, which contains all the next items, including + // items from other rows, to wrap between rows. However, if there is a + // null item (the composite container), we'll only use the next items in + // the row. So moving next from the last item will focus on the + // composite container. On grid composites, horizontal navigation never + // focuses on the composite container, only vertical. + hasNullItem ? nextItemsInRow : nextItems, + activeId2 + ); + const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id; + return nextId; + } + const nextItem = findFirstEnabledItem2(nextItemsInRow, activeId2); + if (!nextItem && hasNullItem) { + return null; + } + return nextItem == null ? void 0 : nextItem.id; + }; + return { + ...collection, + ...composite, + setBaseElement: (element) => composite.setState("baseElement", element), + setActiveId: (id) => composite.setState("activeId", id), + move: (id) => { + if (id === void 0) return; + composite.setState("activeId", id); + composite.setState("moves", (moves) => moves + 1); + }, + first: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(composite.getState().renderedItems)) == null ? void 0 : _a2.id; + }, + last: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id; + }, + next: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("next", options); + }, + previous: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("previous", options); + }, + down: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("down", options); + }, + up: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("up", options); + } + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/IQYAUKXT.js +function useCompositeStoreOptions(props) { + const id = useId3(props.id); + return { id, ...props }; +} +function useCompositeStoreProps(store, update2, props) { + store = useCollectionStoreProps(store, update2, props); + useStoreProps(store, props, "activeId", "setActiveId"); + useStoreProps(store, props, "includesBaseElement"); + useStoreProps(store, props, "virtualFocus"); + useStoreProps(store, props, "orientation"); + useStoreProps(store, props, "rtl"); + useStoreProps(store, props, "focusLoop"); + useStoreProps(store, props, "focusWrap"); + useStoreProps(store, props, "focusShift"); + return store; +} + +// node_modules/@ariakit/react-core/esm/__chunks/CVCFNOHX.js +var import_react15 = __toESM(require_react(), 1); +var ComboboxListRoleContext = (0, import_react15.createContext)( + void 0 +); +var ctx6 = createStoreContext( + [PopoverContextProvider, CompositeContextProvider], + [PopoverScopedContextProvider, CompositeScopedContextProvider] +); +var useComboboxContext = ctx6.useContext; +var useComboboxScopedContext = ctx6.useScopedContext; +var useComboboxProviderContext = ctx6.useProviderContext; +var ComboboxContextProvider = ctx6.ContextProvider; +var ComboboxScopedContextProvider = ctx6.ScopedContextProvider; +var ComboboxItemValueContext = (0, import_react15.createContext)( + void 0 +); +var ComboboxItemCheckedContext = (0, import_react15.createContext)(false); + +// node_modules/@ariakit/core/esm/__chunks/KMAUV3TY.js +function createDialogStore(props = {}) { + return createDisclosureStore(props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4NYSH4UO.js +function useDialogStoreProps(store, update2, props) { + return useDisclosureStoreProps(store, update2, props); +} + +// node_modules/@ariakit/core/esm/__chunks/BFGNM53A.js +function createPopoverStore({ + popover: otherPopover, + ...props +} = {}) { + const store = mergeStore( + props.store, + omit22(otherPopover, [ + "arrowElement", + "anchorElement", + "contentElement", + "popoverElement", + "disclosureElement" + ]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const dialog = createDialogStore({ ...props, store }); + const placement = defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom" + ); + const initialState = { + ...dialog.getState(), + placement, + currentPlacement: placement, + anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null), + popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null), + arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null), + rendered: /* @__PURE__ */ Symbol("rendered") + }; + const popover = createStore(initialState, dialog, store); + return { + ...dialog, + ...popover, + setAnchorElement: (element) => popover.setState("anchorElement", element), + setPopoverElement: (element) => popover.setState("popoverElement", element), + setArrowElement: (element) => popover.setState("arrowElement", element), + render: () => popover.setState("rendered", /* @__PURE__ */ Symbol("rendered")) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/B6FLPFJM.js +function usePopoverStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.popover]); + useStoreProps(store, props, "placement"); + return useDialogStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4POTBZ2J.js +var TagName7 = "div"; +var usePopoverAnchor = createHook( + function usePopoverAnchor2({ store, ...props }) { + const context = usePopoverProviderContext(); + store = store || context; + props = { + ...props, + ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref) + }; + return props; + } +); +var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) { + const htmlProps = usePopoverAnchor(props); + return createElement3(TagName7, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/X6LNAU2F.js +var import_react16 = __toESM(require_react(), 1); +var TagName8 = "div"; +function getMouseDestination(event) { + const relatedTarget = event.relatedTarget; + if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) { + return relatedTarget; + } + return null; +} +function hoveringInside(event) { + const nextElement = getMouseDestination(event); + if (!nextElement) return false; + return contains(event.currentTarget, nextElement); +} +var symbol2 = /* @__PURE__ */ Symbol("composite-hover"); +function movingToAnotherItem(event) { + let dest = getMouseDestination(event); + if (!dest) return false; + do { + if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true; + dest = dest.parentElement; + } while (dest); + return false; +} +var useCompositeHover = createHook( + function useCompositeHover2({ + store, + focusOnHover = true, + blurOnHoverEnd = !!focusOnHover, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + invariant( + store, + "CompositeHover must be wrapped in a Composite component." + ); + const isMouseMoving = useIsMouseMoving(); + const onMouseMoveProp = props.onMouseMove; + const focusOnHoverProp = useBooleanEvent(focusOnHover); + const onMouseMove = useEvent((event) => { + onMouseMoveProp == null ? void 0 : onMouseMoveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (!focusOnHoverProp(event)) return; + if (!hasFocusWithin(event.currentTarget)) { + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (baseElement && !hasFocus(baseElement)) { + baseElement.focus(); + } + } + store == null ? void 0 : store.setActiveId(event.currentTarget.id); + }); + const onMouseLeaveProp = props.onMouseLeave; + const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd); + const onMouseLeave = useEvent((event) => { + var _a; + onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (hoveringInside(event)) return; + if (movingToAnotherItem(event)) return; + if (!focusOnHoverProp(event)) return; + if (!blurOnHoverEndProp(event)) return; + store == null ? void 0 : store.setActiveId(null); + (_a = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a.focus(); + }); + const ref = (0, import_react16.useCallback)((element) => { + if (!element) return; + element[symbol2] = true; + }, []); + props = { + ...props, + ref: useMergeRefs(ref, props.ref), + onMouseMove, + onMouseLeave + }; + return removeUndefinedValues(props); + } +); +var CompositeHover = memo22( + forwardRef22(function CompositeHover2(props) { + const htmlProps = useCompositeHover(props); + return createElement3(TagName8, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox.js +var import_react17 = __toESM(require_react(), 1); +var TagName9 = "input"; +function isFirstItemAutoSelected(items, activeValue, autoSelect) { + if (!autoSelect) return false; + const firstItem = items.find((item) => !item.disabled && item.value); + return (firstItem == null ? void 0 : firstItem.value) === activeValue; +} +function hasCompletionString(value, activeValue) { + if (!activeValue) return false; + if (value == null) return false; + value = normalizeString(value); + return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0; +} +function isInputEvent(event) { + return event.type === "input"; +} +function isAriaAutoCompleteValue(value) { + return value === "inline" || value === "list" || value === "both" || value === "none"; +} +function getDefaultAutoSelectId(items) { + const item = items.find((item2) => { + var _a; + if (item2.disabled) return false; + return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab"; + }); + return item == null ? void 0 : item.id; +} +var useCombobox = createHook( + function useCombobox2({ + store, + focusable = true, + autoSelect: autoSelectProp = false, + getAutoSelectId, + setValueOnChange, + showMinLength = 0, + showOnChange, + showOnMouseDown, + showOnClick = showOnMouseDown, + showOnKeyDown, + showOnKeyPress = showOnKeyDown, + blurActiveItemOnClick, + setValueOnClick = true, + moveOnKeyPress = true, + autoComplete = "list", + ...props + }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react17.useRef)(null); + const [valueUpdated, forceValueUpdate] = useForceUpdate(); + const canAutoSelectRef = (0, import_react17.useRef)(false); + const composingRef = (0, import_react17.useRef)(false); + const autoSelect = store.useState( + (state) => state.virtualFocus && autoSelectProp + ); + const inline = autoComplete === "inline" || autoComplete === "both"; + const [canInline, setCanInline] = (0, import_react17.useState)(inline); + useUpdateLayoutEffect(() => { + if (!inline) return; + setCanInline(true); + }, [inline]); + const storeValue = store.useState("value"); + const prevSelectedValueRef = (0, import_react17.useRef)(void 0); + (0, import_react17.useEffect)(() => { + return sync(store, ["selectedValue", "activeId"], (_, prev) => { + prevSelectedValueRef.current = prev.selectedValue; + }); + }, []); + const inlineActiveValue = store.useState((state) => { + var _a; + if (!inline) return; + if (!canInline) return; + if (state.activeValue && Array.isArray(state.selectedValue)) { + if (state.selectedValue.includes(state.activeValue)) return; + if ((_a = prevSelectedValueRef.current) == null ? void 0 : _a.includes(state.activeValue)) return; + } + return state.activeValue; + }); + const items = store.useState("renderedItems"); + const open = store.useState("open"); + const contentElement = store.useState("contentElement"); + const value = (0, import_react17.useMemo)(() => { + if (!inline) return storeValue; + if (!canInline) return storeValue; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (firstItemAutoSelected) { + if (hasCompletionString(storeValue, inlineActiveValue)) { + const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || ""; + return storeValue + slice; + } + return storeValue; + } + return inlineActiveValue || storeValue; + }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]); + (0, import_react17.useEffect)(() => { + const element = ref.current; + if (!element) return; + const onCompositeItemMove = () => setCanInline(true); + element.addEventListener("combobox-item-move", onCompositeItemMove); + return () => { + element.removeEventListener("combobox-item-move", onCompositeItemMove); + }; + }, []); + (0, import_react17.useEffect)(() => { + if (!inline) return; + if (!canInline) return; + if (!inlineActiveValue) return; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (!firstItemAutoSelected) return; + if (!hasCompletionString(storeValue, inlineActiveValue)) return; + let cleanup = noop; + queueMicrotask(() => { + const element = ref.current; + if (!element) return; + const { start: prevStart, end: prevEnd } = getTextboxSelection(element); + const nextStart = storeValue.length; + const nextEnd = inlineActiveValue.length; + setSelectionRange(element, nextStart, nextEnd); + cleanup = () => { + if (!hasFocus(element)) return; + const { start, end } = getTextboxSelection(element); + if (start !== nextStart) return; + if (end !== nextEnd) return; + setSelectionRange(element, prevStart, prevEnd); + }; + }); + return () => cleanup(); + }, [ + valueUpdated, + inline, + canInline, + inlineActiveValue, + items, + autoSelect, + storeValue + ]); + const scrollingElementRef = (0, import_react17.useRef)(null); + const getAutoSelectIdProp = useEvent(getAutoSelectId); + const autoSelectIdRef = (0, import_react17.useRef)(null); + (0, import_react17.useEffect)(() => { + if (!open) return; + if (!contentElement) return; + const scrollingElement = getScrollingElement(contentElement); + if (!scrollingElement) return; + scrollingElementRef.current = scrollingElement; + const onUserScroll = () => { + canAutoSelectRef.current = false; + }; + const onScroll = () => { + if (!store) return; + if (!canAutoSelectRef.current) return; + const { activeId } = store.getState(); + if (activeId === null) return; + if (activeId === autoSelectIdRef.current) return; + canAutoSelectRef.current = false; + }; + const options = { passive: true, capture: true }; + scrollingElement.addEventListener("wheel", onUserScroll, options); + scrollingElement.addEventListener("touchmove", onUserScroll, options); + scrollingElement.addEventListener("scroll", onScroll, options); + return () => { + scrollingElement.removeEventListener("wheel", onUserScroll, true); + scrollingElement.removeEventListener("touchmove", onUserScroll, true); + scrollingElement.removeEventListener("scroll", onScroll, true); + }; + }, [open, contentElement, store]); + useSafeLayoutEffect(() => { + if (!storeValue) return; + if (composingRef.current) return; + canAutoSelectRef.current = true; + }, [storeValue]); + useSafeLayoutEffect(() => { + if (autoSelect !== "always" && open) return; + canAutoSelectRef.current = open; + }, [autoSelect, open]); + const resetValueOnSelect = store.useState("resetValueOnSelect"); + useUpdateEffect(() => { + var _a, _b; + const canAutoSelect = canAutoSelectRef.current; + if (!store) return; + if (!open) return; + if (!canAutoSelect && !resetValueOnSelect) return; + const { baseElement, contentElement: contentElement2, activeId } = store.getState(); + if (baseElement && !hasFocus(baseElement)) return; + if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) { + const observer = new MutationObserver(forceValueUpdate); + observer.observe(contentElement2, { attributeFilter: ["data-placing"] }); + return () => observer.disconnect(); + } + if (autoSelect && canAutoSelect) { + const userAutoSelectId = getAutoSelectIdProp(items); + const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a = getDefaultAutoSelectId(items)) != null ? _a : store.first(); + autoSelectIdRef.current = autoSelectId; + store.move(autoSelectId != null ? autoSelectId : null); + } else { + const element = (_b = store.item(activeId || store.first())) == null ? void 0 : _b.element; + if (element && "scrollIntoView" in element) { + element.scrollIntoView({ block: "nearest", inline: "nearest" }); + } + } + return; + }, [ + store, + open, + valueUpdated, + storeValue, + autoSelect, + resetValueOnSelect, + getAutoSelectIdProp, + items + ]); + (0, import_react17.useEffect)(() => { + if (!inline) return; + const combobox = ref.current; + if (!combobox) return; + const elements = [combobox, contentElement].filter( + (value2) => !!value2 + ); + const onBlur2 = (event) => { + if (elements.every((el) => isFocusEventOutside(event, el))) { + store == null ? void 0 : store.setValue(value); + } + }; + for (const element of elements) { + element.addEventListener("focusout", onBlur2); + } + return () => { + for (const element of elements) { + element.removeEventListener("focusout", onBlur2); + } + }; + }, [inline, contentElement, store, value]); + const canShow = (event) => { + const currentTarget = event.currentTarget; + return currentTarget.value.length >= showMinLength; + }; + const onChangeProp = props.onChange; + const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow); + const setValueOnChangeProp = useBooleanEvent( + // If the combobox is combined with tags, the value will be set by the tag + // input component. + setValueOnChange != null ? setValueOnChange : !store.tag + ); + const onChange = useEvent((event) => { + onChangeProp == null ? void 0 : onChangeProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const currentTarget = event.currentTarget; + const { value: value2, selectionStart, selectionEnd } = currentTarget; + const nativeEvent = event.nativeEvent; + canAutoSelectRef.current = true; + if (isInputEvent(nativeEvent)) { + if (nativeEvent.isComposing) { + canAutoSelectRef.current = false; + composingRef.current = true; + } + if (inline) { + const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText"; + const caretAtEnd = selectionStart === value2.length; + setCanInline(textInserted && caretAtEnd); + } + } + if (setValueOnChangeProp(event)) { + const isSameValue = value2 === store.getState().value; + store.setValue(value2); + queueMicrotask(() => { + setSelectionRange(currentTarget, selectionStart, selectionEnd); + }); + if (inline && autoSelect && isSameValue) { + forceValueUpdate(); + } + } + if (showOnChangeProp(event)) { + store.show(); + } + if (!autoSelect || !canAutoSelectRef.current) { + store.setActiveId(null); + } + }); + const onCompositionEndProp = props.onCompositionEnd; + const onCompositionEnd = useEvent((event) => { + canAutoSelectRef.current = true; + composingRef.current = false; + onCompositionEndProp == null ? void 0 : onCompositionEndProp(event); + if (event.defaultPrevented) return; + if (!autoSelect) return; + forceValueUpdate(); + }); + const onMouseDownProp = props.onMouseDown; + const blurActiveItemOnClickProp = useBooleanEvent( + blurActiveItemOnClick != null ? blurActiveItemOnClick : (() => !!(store == null ? void 0 : store.getState().includesBaseElement)) + ); + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow); + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (event.button) return; + if (event.ctrlKey) return; + if (!store) return; + if (blurActiveItemOnClickProp(event)) { + store.setActiveId(null); + } + if (setValueOnClickProp(event)) { + store.setValue(value); + } + if (showOnClickProp(event)) { + queueBeforeEvent(event.currentTarget, "mouseup", store.show); + } + }); + const onKeyDownProp = props.onKeyDown; + const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (!event.repeat) { + canAutoSelectRef.current = false; + } + if (event.defaultPrevented) return; + if (event.ctrlKey) return; + if (event.altKey) return; + if (event.shiftKey) return; + if (event.metaKey) return; + if (!store) return; + const { open: open2 } = store.getState(); + if (open2) return; + if (event.key === "ArrowUp" || event.key === "ArrowDown") { + if (showOnKeyPressProp(event)) { + event.preventDefault(); + store.show(); + } + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + canAutoSelectRef.current = false; + onBlurProp == null ? void 0 : onBlurProp(event); + if (event.defaultPrevented) return; + }); + const id = useId3(props.id); + const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0; + const isActiveItem = store.useState((state) => state.activeId === null); + props = { + id, + role: "combobox", + "aria-autocomplete": ariaAutoComplete, + "aria-haspopup": getPopupRole(contentElement, "listbox"), + "aria-expanded": open, + "aria-controls": contentElement == null ? void 0 : contentElement.id, + "data-active-item": isActiveItem || void 0, + value, + ...props, + ref: useMergeRefs(ref, props.ref), + onChange, + onCompositionEnd, + onMouseDown, + onKeyDown, + onBlur + }; + props = useComposite({ + store, + focusable, + ...props, + // Enable inline autocomplete when the user moves from the combobox input + // to an item. + moveOnKeyPress: (event) => { + if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false; + if (inline) setCanInline(true); + return true; + } + }); + props = usePopoverAnchor({ store, ...props }); + return { autoComplete: "off", ...props }; + } +); +var Combobox = forwardRef22(function Combobox2(props) { + const htmlProps = useCombobox(props); + return createElement3(TagName9, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/IBXZ2LQC.js +var import_react18 = __toESM(require_react(), 1); +var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); +var TagName10 = "div"; +function isSelected(storeValue, itemValue) { + if (itemValue == null) return; + if (storeValue == null) return false; + if (Array.isArray(storeValue)) { + return storeValue.includes(itemValue); + } + return storeValue === itemValue; +} +function getItemRole(popupRole) { + var _a; + const itemRoleByPopupRole = { + menu: "menuitem", + listbox: "option", + tree: "treeitem" + }; + const key = popupRole; + return (_a = itemRoleByPopupRole[key]) != null ? _a : "option"; +} +var useComboboxItem = createHook( + function useComboboxItem2({ + store, + value, + hideOnClick, + setValueOnClick, + selectValueOnClick = true, + resetValueOnSelect, + focusOnHover = false, + moveOnKeyPress = true, + getItem: getItemProp, + ...props + }) { + var _a; + const context = useComboboxScopedContext(); + store = store || context; + invariant( + store, + "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component." + ); + const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, { + resetValueOnSelectState: "resetValueOnSelect", + multiSelectable(state) { + return Array.isArray(state.selectedValue); + }, + selected(state) { + return isSelected(state.selectedValue, value); + } + }); + const getItem = (0, import_react18.useCallback)( + (item) => { + const nextItem = { ...item, value }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [value, getItemProp] + ); + setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable; + hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable; + const onClickProp = props.onClick; + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const selectValueOnClickProp = useBooleanEvent(selectValueOnClick); + const resetValueOnSelectProp = useBooleanEvent( + (_a = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a : multiSelectable + ); + const hideOnClickProp = useBooleanEvent(hideOnClick); + const onClick = useEvent((event) => { + onClickProp == null ? void 0 : onClickProp(event); + if (event.defaultPrevented) return; + if (isDownloading(event)) return; + if (isOpeningInNewTab(event)) return; + if (value != null) { + if (selectValueOnClickProp(event)) { + if (resetValueOnSelectProp(event)) { + store == null ? void 0 : store.resetValue(); + } + store == null ? void 0 : store.setSelectedValue((prevValue) => { + if (!Array.isArray(prevValue)) return value; + if (prevValue.includes(value)) { + return prevValue.filter((v2) => v2 !== value); + } + return [...prevValue, value]; + }); + } + if (setValueOnClickProp(event)) { + store == null ? void 0 : store.setValue(value); + } + } + if (hideOnClickProp(event)) { + store == null ? void 0 : store.hide(); + } + }); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (!baseElement) return; + if (hasFocus(baseElement)) return; + const printable = event.key.length === 1; + if (printable || event.key === "Backspace" || event.key === "Delete") { + queueMicrotask(() => baseElement.focus()); + if (isTextField(baseElement)) { + store == null ? void 0 : store.setValue(baseElement.value); + } + } + }); + if (multiSelectable && selected != null) { + props = { + "aria-selected": selected, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }), + [value, selected] + ); + const popupRole = (0, import_react18.useContext)(ComboboxListRoleContext); + props = { + role: getItemRole(popupRole), + children: value, + ...props, + onClick, + onKeyDown + }; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + props = useCompositeItem({ + store, + ...props, + getItem, + // Dispatch a custom event on the combobox input when moving to an item + // with the keyboard so the Combobox component can enable inline + // autocompletion. + moveOnKeyPress: (event) => { + if (!moveOnKeyPressProp(event)) return false; + const moveEvent = new Event("combobox-item-move"); + const baseElement = store == null ? void 0 : store.getState().baseElement; + baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent); + return true; + } + }); + props = useCompositeHover({ store, focusOnHover, ...props }); + return props; + } +); +var ComboboxItem = memo22( + forwardRef22(function ComboboxItem2(props) { + const htmlProps = useComboboxItem(props); + return createElement3(TagName10, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js +var import_react19 = __toESM(require_react(), 1); +var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); +var TagName11 = "span"; +function normalizeValue(value) { + return normalizeString(value).toLowerCase(); +} +function getOffsets(string, values) { + const offsets = []; + for (const value of values) { + let pos = 0; + const length = value.length; + while (string.indexOf(value, pos) !== -1) { + const index = string.indexOf(value, pos); + if (index !== -1) { + offsets.push([index, length]); + } + pos = index + 1; + } + } + return offsets; +} +function filterOverlappingOffsets(offsets) { + return offsets.filter(([offset, length], i2, arr) => { + return !arr.some( + ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length + ); + }); +} +function sortOffsets(offsets) { + return offsets.sort(([a2], [b2]) => a2 - b2); +} +function splitValue(itemValue, userValue) { + if (!itemValue) return itemValue; + if (!userValue) return itemValue; + const userValues = toArray(userValue).filter(Boolean).map(normalizeValue); + const parts = []; + const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + "span", + { + "data-autocomplete-value": autocomplete ? "" : void 0, + "data-user-value": autocomplete ? void 0 : "", + children: value + }, + parts.length + ); + const offsets = sortOffsets( + filterOverlappingOffsets( + // Convert userValues into a set to avoid duplicates + getOffsets(normalizeValue(itemValue), new Set(userValues)) + ) + ); + if (!offsets.length) { + parts.push(span(itemValue, true)); + return parts; + } + const [firstOffset] = offsets[0]; + const values = [ + itemValue.slice(0, firstOffset), + ...offsets.flatMap(([offset, length], i2) => { + var _a; + const value = itemValue.slice(offset, offset + length); + const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0]; + const nextValue = itemValue.slice(offset + length, nextOffset); + return [value, nextValue]; + }) + ]; + values.forEach((value, i2) => { + if (!value) return; + parts.push(span(value, i2 % 2 === 0)); + }); + return parts; +} +var useComboboxItemValue = createHook(function useComboboxItemValue2({ store, value, userValue, ...props }) { + const context = useComboboxScopedContext(); + store = store || context; + const itemContext = (0, import_react19.useContext)(ComboboxItemValueContext); + const itemValue = value != null ? value : itemContext; + const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value); + const children = (0, import_react19.useMemo)(() => { + if (!itemValue) return; + if (!inputValue) return itemValue; + return splitValue(itemValue, inputValue); + }, [itemValue, inputValue]); + props = { + children, + ...props + }; + return removeUndefinedValues(props); +}); +var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) { + const htmlProps = useComboboxItemValue(props); + return createElement3(TagName11, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-label.js +var TagName12 = "label"; +var useComboboxLabel = createHook( + function useComboboxLabel2({ store, ...props }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const comboboxId = store.useState((state) => { + var _a; + return (_a = state.baseElement) == null ? void 0 : _a.id; + }); + props = { + htmlFor: comboboxId, + ...props + }; + return removeUndefinedValues(props); + } +); +var ComboboxLabel = memo22( + forwardRef22(function ComboboxLabel2(props) { + const htmlProps = useComboboxLabel(props); + return createElement3(TagName12, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/__chunks/2G6YEJT4.js +var import_react20 = __toESM(require_react(), 1); +var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); +var TagName13 = "div"; +var useComboboxList = createHook( + function useComboboxList2({ store, alwaysVisible, ...props }) { + const scopedContext = useComboboxScopedContext(true); + const context = useComboboxContext(); + store = store || context; + const scopedContextSameStore = !!store && store === scopedContext; + invariant( + store, + "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react20.useRef)(null); + const id = useId3(props.id); + const mounted = store.useState("mounted"); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const style = hidden ? { ...props.style, display: "none" } : props.style; + const multiSelectable = store.useState( + (state) => Array.isArray(state.selectedValue) + ); + const role = useAttribute(ref, "role", props.role); + const isCompositeRole = role === "listbox" || role === "tree" || role === "grid"; + const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0; + const [hasListboxInside, setHasListboxInside] = (0, import_react20.useState)(false); + const contentElement = store.useState("contentElement"); + useSafeLayoutEffect(() => { + if (!mounted) return; + const element = ref.current; + if (!element) return; + if (contentElement !== element) return; + const callback = () => { + setHasListboxInside(!!element.querySelector("[role='listbox']")); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { + subtree: true, + childList: true, + attributeFilter: ["role"] + }); + callback(); + return () => observer.disconnect(); + }, [mounted, contentElement]); + if (!hasListboxInside) { + props = { + role: "listbox", + "aria-multiselectable": ariaMultiSelectable, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }), + [store, role] + ); + const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null; + props = { + id, + hidden, + ...props, + ref: useMergeRefs(setContentElement, ref, props.ref), + style + }; + return removeUndefinedValues(props); + } +); +var ComboboxList = forwardRef22(function ComboboxList2(props) { + const htmlProps = useComboboxList(props); + return createElement3(TagName13, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/XSIEPKGA.js +var import_react21 = __toESM(require_react(), 1); +var TagValueContext = (0, import_react21.createContext)(null); +var TagRemoveIdContext = (0, import_react21.createContext)( + null +); +var ctx7 = createStoreContext( + [CompositeContextProvider], + [CompositeScopedContextProvider] +); +var useTagContext = ctx7.useContext; +var useTagScopedContext = ctx7.useScopedContext; +var useTagProviderContext = ctx7.useProviderContext; +var TagContextProvider = ctx7.ContextProvider; +var TagScopedContextProvider = ctx7.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/combobox/combobox-store.js +var isTouchSafari = isSafari() && isTouchDevice(); +function createComboboxStore({ + tag, + ...props +} = {}) { + const store = mergeStore(props.store, pick2(tag, ["value", "rtl"])); + throwOnConflictingProps(props, store); + const tagState = tag == null ? void 0 : tag.getState(); + const syncState = store == null ? void 0 : store.getState(); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId, + null + ); + const composite = createCompositeStore({ + ...props, + activeId, + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + true + ), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "vertical" + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + true + ) + }); + const popover = createPopoverStore({ + ...props, + placement: defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom-start" + ) + }); + const value = defaultValue( + props.value, + syncState == null ? void 0 : syncState.value, + props.defaultValue, + "" + ); + const selectedValue = defaultValue( + props.selectedValue, + syncState == null ? void 0 : syncState.selectedValue, + tagState == null ? void 0 : tagState.values, + props.defaultSelectedValue, + "" + ); + const multiSelectable = Array.isArray(selectedValue); + const initialState = { + ...composite.getState(), + ...popover.getState(), + value, + selectedValue, + resetValueOnSelect: defaultValue( + props.resetValueOnSelect, + syncState == null ? void 0 : syncState.resetValueOnSelect, + multiSelectable + ), + resetValueOnHide: defaultValue( + props.resetValueOnHide, + syncState == null ? void 0 : syncState.resetValueOnHide, + multiSelectable && !tag + ), + activeValue: syncState == null ? void 0 : syncState.activeValue + }; + const combobox = createStore(initialState, composite, popover, store); + if (isTouchSafari) { + setup( + combobox, + () => sync(combobox, ["virtualFocus"], () => { + combobox.setState("virtualFocus", false); + }) + ); + } + setup(combobox, () => { + if (!tag) return; + return chain( + sync(combobox, ["selectedValue"], (state) => { + if (!Array.isArray(state.selectedValue)) return; + tag.setValues(state.selectedValue); + }), + sync(tag, ["values"], (state) => { + combobox.setState("selectedValue", state.values); + }) + ); + }); + setup( + combobox, + () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => { + if (!state.resetValueOnHide) return; + if (state.mounted) return; + combobox.setState("value", value); + }) + ); + setup( + combobox, + () => sync(combobox, ["open"], (state) => { + if (state.open) return; + combobox.setState("activeId", activeId); + combobox.setState("moves", 0); + }) + ); + setup( + combobox, + () => sync(combobox, ["moves", "activeId"], (state, prevState) => { + if (state.moves === prevState.moves) { + combobox.setState("activeValue", void 0); + } + }) + ); + setup( + combobox, + () => batch(combobox, ["moves", "renderedItems"], (state, prev) => { + if (state.moves === prev.moves) return; + const { activeId: activeId2 } = combobox.getState(); + const activeItem = composite.item(activeId2); + combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value); + }) + ); + return { + ...popover, + ...composite, + ...combobox, + tag, + setValue: (value2) => combobox.setState("value", value2), + resetValue: () => combobox.setState("value", initialState.value), + setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SVN33SY6.js +function useComboboxStoreOptions(props) { + const tag = useTagContext(); + props = { + ...props, + tag: props.tag !== void 0 ? props.tag : tag + }; + return useCompositeStoreOptions(props); +} +function useComboboxStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.tag]); + useStoreProps(store, props, "value", "setValue"); + useStoreProps(store, props, "selectedValue", "setSelectedValue"); + useStoreProps(store, props, "resetValueOnHide"); + useStoreProps(store, props, "resetValueOnSelect"); + return Object.assign( + useCompositeStoreProps( + usePopoverStoreProps(store, update2, props), + update2, + props + ), + { tag: props.tag } + ); +} +function useComboboxStore(props = {}) { + props = useComboboxStoreOptions(props); + const [store, update2] = useStore(createComboboxStore, props); + return useComboboxStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js +var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); +function ComboboxProvider(props = {}) { + const store = useComboboxStore(props); + return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ComboboxContextProvider, { value: store, children: props.children }); +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_remove_accents = __toESM(require_remove_accents(), 1); +var import_compose8 = __toESM(require_compose(), 1); +var import_i18n22 = __toESM(require_i18n(), 1); +var import_element26 = __toESM(require_element(), 1); +var import_components21 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/utils.mjs +var EMPTY_ARRAY3 = []; +var getCurrentValue = (filterDefinition, currentFilter) => { + if (filterDefinition.singleSelection) { + return currentFilter?.value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value; + } + if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) { + return [currentFilter.value]; + } + return EMPTY_ARRAY3; +}; + +// packages/dataviews/build-module/hooks/use-elements.mjs +var import_element25 = __toESM(require_element(), 1); +var EMPTY_ARRAY4 = []; +function useElements({ + elements, + getElements +}) { + const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY4; + const [records, setRecords] = (0, import_element25.useState)(staticElements); + const [isLoading, setIsLoading] = (0, import_element25.useState)(false); + (0, import_element25.useEffect)(() => { + if (!getElements) { + setRecords(staticElements); + return; + } + let cancelled = false; + setIsLoading(true); + getElements().then((fetchedElements) => { + if (!cancelled) { + const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements; + setRecords(dynamicElements); + } + }).catch(() => { + if (!cancelled) { + setRecords(staticElements); + } + }).finally(() => { + if (!cancelled) { + setIsLoading(false); + } + }); + return () => { + cancelled = true; + }; + }, [getElements, staticElements]); + return { + elements: records, + isLoading + }; +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); +function normalizeSearchInput(input = "") { + return (0, import_remove_accents.default)(input.trim().toLowerCase()); +} +var getNewValue = (filterDefinition, currentFilter, value) => { + if (filterDefinition.singleSelection) { + return value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value]; + } + return [value]; +}; +function generateFilterElementCompositeItemId(prefix, filterElementValue) { + return `${prefix}-${filterElementValue}`; +} +var MultiSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-multi-selection", + { "is-selected": selected } + ), + children: selected && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components21.Icon, { icon: check_default }) + } + ); +}; +var SingleSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-single-selection", + { "is-selected": selected } + ) + } + ); +}; +function ListBox({ view, filter, onChangeView }) { + const baseId = (0, import_compose8.useInstanceId)(ListBox, "dataviews-filter-list-box"); + const [activeCompositeId, setActiveCompositeId] = (0, import_element26.useState)( + // When there are one or less operators, the first item is set as active + // (by setting the initial `activeId` to `undefined`). + // With 2 or more operators, the focus is moved on the operators control + // (by setting the initial `activeId` to `null`), meaning that there won't + // be an active item initially. Focus is then managed via the + // `onFocusVisible` callback. + filter.operators?.length === 1 ? void 0 : null + ); + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components21.Composite, + { + virtualFocus: true, + focusLoop: true, + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + role: "listbox", + className: "dataviews-filters__search-widget-listbox", + "aria-label": (0, import_i18n22.sprintf)( + /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */ + (0, import_i18n22.__)("List of: %1$s"), + filter.name + ), + onFocusVisible: () => { + if (!activeCompositeId && filter.elements.length) { + setActiveCompositeId( + generateFilterElementCompositeItemId( + baseId, + filter.elements[0].value + ) + ); + } + }, + render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components21.Composite.Typeahead, {}), + children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)( + import_components21.Composite.Hover, + { + render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components21.Composite.Item, + { + id: generateFilterElementCompositeItemId( + baseId, + element.value + ), + render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + "div", + { + "aria-label": element.label, + role: "option", + className: "dataviews-filters__search-widget-listitem" + } + ), + onClick: () => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + } + } + ), + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes(element.value) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: element.label + } + ) + ] + }, + element.value + )) + } + ); +} +function ComboboxList22({ view, filter, onChangeView }) { + const [searchValue, setSearchValue] = (0, import_element26.useState)(""); + const deferredSearchValue = (0, import_element26.useDeferredValue)(searchValue); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const matches = (0, import_element26.useMemo)(() => { + const normalizedSearch = normalizeSearchInput(deferredSearchValue); + return filter.elements.filter( + (item) => normalizeSearchInput(item.label).includes(normalizedSearch) + ); + }, [filter.elements, deferredSearchValue]); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)( + ComboboxProvider, + { + selectedValue: currentValue, + setSelectedValue: (value) => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map((_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value + }; + } + return _filter; + }) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + setValue: setSearchValue, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + ComboboxLabel, + { + render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components21.VisuallyHidden, { children: (0, import_i18n22.__)("Search items") }), + children: (0, import_i18n22.__)("Search items") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Combobox, + { + autoSelect: "always", + placeholder: (0, import_i18n22.__)("Search"), + className: "dataviews-filters__search-widget-filter-combobox__input" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components21.Icon, { icon: search_default }) }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)( + ComboboxList, + { + className: "dataviews-filters__search-widget-filter-combobox-list", + alwaysVisible: true, + children: [ + matches.map((element) => { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)( + ComboboxItem, + { + resetValueOnSelect: false, + value: element.value, + className: "dataviews-filters__search-widget-listitem", + hideOnClick: false, + setValueOnClick: false, + focusOnHover: true, + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes( + element.value + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + ComboboxItemValue, + { + className: "dataviews-filters__search-widget-filter-combobox-item-value", + value: element.label + } + ), + !!element.description && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description }) + ] + } + ) + ] + }, + element.value + ); + }), + !matches.length && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { children: (0, import_i18n22.__)("No results found") }) + ] + } + ) + ] + } + ); +} +function SearchWidget(props) { + const { elements, isLoading } = useElements({ + elements: props.filter.elements, + getElements: props.filter.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components21.Spinner, {}) }); + } + if (elements.length === 0) { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n22.__)("No elements found") }); + } + const Widget = elements.length > 10 ? ComboboxList22 : ListBox; + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Widget, { ...props, filter: { ...props.filter, elements } }); +} + +// packages/dataviews/build-module/components/dataviews-filters/input-widget.mjs +var import_es6 = __toESM(require_es6(), 1); +var import_compose9 = __toESM(require_compose(), 1); +var import_element27 = __toESM(require_element(), 1); +var import_components22 = __toESM(require_components(), 1); +var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); +function InputWidget({ + filter, + view, + onChangeView, + fields +}) { + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const field = (0, import_element27.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Deactivate validation for filters. + isValid: {}, + // Configure getValue/setValue as if Item was a plain object. + getValue: ({ item }) => item[currentField.id], + setValue: ({ value }) => ({ + [currentField.id]: value + }) + }; + } + return currentField; + }, [fields, filter.field]); + const data = (0, import_element27.useMemo)(() => { + return (view.filters ?? []).reduce( + (acc, activeFilter) => { + acc[activeFilter.field] = activeFilter.value; + return acc; + }, + {} + ); + }, [view.filters]); + const handleChange = (0, import_compose9.useEvent)((updatedData) => { + if (!field || !currentFilter) { + return; + } + const nextValue = field.getValue({ item: updatedData }); + if ((0, import_es6.default)(nextValue, currentValue)) { + return; + } + onChangeView({ + ...view, + filters: (view.filters ?? []).map( + (_filter) => _filter.field === filter.field ? { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + // Consider empty strings as undefined: + // + // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records + // - empty string as value means "search empty string": returns only the records that have an empty string as value + // + // In practice, this means the filter will not be able to find an empty string as the value. + value: nextValue === "" ? void 0 : nextValue + } : _filter + ) + }); + }); + if (!field || !field.Edit || !currentFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + import_components22.Flex, + { + className: "dataviews-filters__user-input-widget", + gap: 2.5, + direction: "column", + children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + field.Edit, + { + hideLabelFromVision: true, + data, + field, + operator: currentFilter.operator, + onChange: handleChange + } + ) + } + ); +} + +// packages/dataviews/node_modules/date-fns/constants.js +var daysInYear = 365.2425; +var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3; +var minTime = -maxTime; +var millisecondsInWeek = 6048e5; +var millisecondsInDay = 864e5; +var secondsInHour = 3600; +var secondsInDay = secondsInHour * 24; +var secondsInWeek = secondsInDay * 7; +var secondsInYear = secondsInDay * daysInYear; +var secondsInMonth = secondsInYear / 12; +var secondsInQuarter = secondsInMonth * 3; +var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom"); + +// packages/dataviews/node_modules/date-fns/constructFrom.js +function constructFrom(date, value) { + if (typeof date === "function") return date(value); + if (date && typeof date === "object" && constructFromSymbol in date) + return date[constructFromSymbol](value); + if (date instanceof Date) return new date.constructor(value); + return new Date(value); +} + +// packages/dataviews/node_modules/date-fns/toDate.js +function toDate(argument, context) { + return constructFrom(context || argument, argument); +} + +// packages/dataviews/node_modules/date-fns/addDays.js +function addDays(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) return _date; + _date.setDate(_date.getDate() + amount); + return _date; +} + +// packages/dataviews/node_modules/date-fns/addMonths.js +function addMonths(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) { + return _date; + } + const dayOfMonth = _date.getDate(); + const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime()); + endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); + const daysInMonth = endOfDesiredMonth.getDate(); + if (dayOfMonth >= daysInMonth) { + return endOfDesiredMonth; + } else { + _date.setFullYear( + endOfDesiredMonth.getFullYear(), + endOfDesiredMonth.getMonth(), + dayOfMonth + ); + return _date; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js +var defaultOptions = {}; +function getDefaultOptions() { + return defaultOptions; +} + +// packages/dataviews/node_modules/date-fns/startOfWeek.js +function startOfWeek(date, options) { + const defaultOptions2 = getDefaultOptions(); + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const _date = toDate(date, options?.in); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + _date.setDate(_date.getDate() - diff); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeek.js +function startOfISOWeek(date, options) { + return startOfWeek(date, { ...options, weekStartsOn: 1 }); +} + +// packages/dataviews/node_modules/date-fns/getISOWeekYear.js +function getISOWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const fourthOfJanuaryOfNextYear = constructFrom(_date, 0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); + const fourthOfJanuaryOfThisYear = constructFrom(_date, 0); + fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); + if (_date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (_date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +function getTimezoneOffsetInMilliseconds(date) { + const _date = toDate(date); + const utcDate = new Date( + Date.UTC( + _date.getFullYear(), + _date.getMonth(), + _date.getDate(), + _date.getHours(), + _date.getMinutes(), + _date.getSeconds(), + _date.getMilliseconds() + ) + ); + utcDate.setUTCFullYear(_date.getFullYear()); + return +date - +utcDate; +} + +// packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js +function normalizeDates(context, ...dates) { + const normalize = constructFrom.bind( + null, + context || dates.find((date) => typeof date === "object") + ); + return dates.map(normalize); +} + +// packages/dataviews/node_modules/date-fns/startOfDay.js +function startOfDay(date, options) { + const _date = toDate(date, options?.in); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js +function differenceInCalendarDays(laterDate, earlierDate, options) { + const [laterDate_, earlierDate_] = normalizeDates( + options?.in, + laterDate, + earlierDate + ); + const laterStartOfDay = startOfDay(laterDate_); + const earlierStartOfDay = startOfDay(earlierDate_); + const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay); + const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); + return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay); +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js +function startOfISOWeekYear(date, options) { + const year = getISOWeekYear(date, options); + const fourthOfJanuary = constructFrom(options?.in || date, 0); + fourthOfJanuary.setFullYear(year, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + return startOfISOWeek(fourthOfJanuary); +} + +// packages/dataviews/node_modules/date-fns/addWeeks.js +function addWeeks(date, amount, options) { + return addDays(date, amount * 7, options); +} + +// packages/dataviews/node_modules/date-fns/addYears.js +function addYears(date, amount, options) { + return addMonths(date, amount * 12, options); +} + +// packages/dataviews/node_modules/date-fns/isDate.js +function isDate(value) { + return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"; +} + +// packages/dataviews/node_modules/date-fns/isValid.js +function isValid(date) { + return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date))); +} + +// packages/dataviews/node_modules/date-fns/startOfMonth.js +function startOfMonth(date, options) { + const _date = toDate(date, options?.in); + _date.setDate(1); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfYear.js +function startOfYear(date, options) { + const date_ = toDate(date, options?.in); + date_.setFullYear(date_.getFullYear(), 0, 1); + date_.setHours(0, 0, 0, 0); + return date_; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +var formatDistanceLocale = { + lessThanXSeconds: { + one: "less than a second", + other: "less than {{count}} seconds" + }, + xSeconds: { + one: "1 second", + other: "{{count}} seconds" + }, + halfAMinute: "half a minute", + lessThanXMinutes: { + one: "less than a minute", + other: "less than {{count}} minutes" + }, + xMinutes: { + one: "1 minute", + other: "{{count}} minutes" + }, + aboutXHours: { + one: "about 1 hour", + other: "about {{count}} hours" + }, + xHours: { + one: "1 hour", + other: "{{count}} hours" + }, + xDays: { + one: "1 day", + other: "{{count}} days" + }, + aboutXWeeks: { + one: "about 1 week", + other: "about {{count}} weeks" + }, + xWeeks: { + one: "1 week", + other: "{{count}} weeks" + }, + aboutXMonths: { + one: "about 1 month", + other: "about {{count}} months" + }, + xMonths: { + one: "1 month", + other: "{{count}} months" + }, + aboutXYears: { + one: "about 1 year", + other: "about {{count}} years" + }, + xYears: { + one: "1 year", + other: "{{count}} years" + }, + overXYears: { + one: "over 1 year", + other: "over {{count}} years" + }, + almostXYears: { + one: "almost 1 year", + other: "almost {{count}} years" + } +}; +var formatDistance = (token, count, options) => { + let result; + const tokenValue = formatDistanceLocale[token]; + if (typeof tokenValue === "string") { + result = tokenValue; + } else if (count === 1) { + result = tokenValue.one; + } else { + result = tokenValue.other.replace("{{count}}", count.toString()); + } + if (options?.addSuffix) { + if (options.comparison && options.comparison > 0) { + return "in " + result; + } else { + return result + " ago"; + } + } + return result; +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +function buildFormatLongFn(args) { + return (options = {}) => { + const width = options.width ? String(options.width) : args.defaultWidth; + const format6 = args.formats[width] || args.formats[args.defaultWidth]; + return format6; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js +var dateFormats = { + full: "EEEE, MMMM do, y", + long: "MMMM do, y", + medium: "MMM d, y", + short: "MM/dd/yyyy" +}; +var timeFormats = { + full: "h:mm:ss a zzzz", + long: "h:mm:ss a z", + medium: "h:mm:ss a", + short: "h:mm a" +}; +var dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: "{{date}}, {{time}}", + short: "{{date}}, {{time}}" +}; +var formatLong = { + date: buildFormatLongFn({ + formats: dateFormats, + defaultWidth: "full" + }), + time: buildFormatLongFn({ + formats: timeFormats, + defaultWidth: "full" + }), + dateTime: buildFormatLongFn({ + formats: dateTimeFormats, + defaultWidth: "full" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +var formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: "P" +}; +var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +function buildLocalizeFn(args) { + return (value, options) => { + const context = options?.context ? String(options.context) : "standalone"; + let valuesArray; + if (context === "formatting" && args.formattingValues) { + const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + const width = options?.width ? String(options.width) : defaultWidth; + valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + const defaultWidth = args.defaultWidth; + const width = options?.width ? String(options.width) : args.defaultWidth; + valuesArray = args.values[width] || args.values[defaultWidth]; + } + const index = args.argumentCallback ? args.argumentCallback(value) : value; + return valuesArray[index]; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js +var eraValues = { + narrow: ["B", "A"], + abbreviated: ["BC", "AD"], + wide: ["Before Christ", "Anno Domini"] +}; +var quarterValues = { + narrow: ["1", "2", "3", "4"], + abbreviated: ["Q1", "Q2", "Q3", "Q4"], + wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] +}; +var monthValues = { + narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], + abbreviated: [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + wide: [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] +}; +var dayValues = { + narrow: ["S", "M", "T", "W", "T", "F", "S"], + short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + wide: [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] +}; +var dayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + } +}; +var formattingDayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + } +}; +var ordinalNumber = (dirtyNumber, _options) => { + const number = Number(dirtyNumber); + const rem100 = number % 100; + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + "st"; + case 2: + return number + "nd"; + case 3: + return number + "rd"; + } + } + return number + "th"; +}; +var localize = { + ordinalNumber, + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: "wide" + }), + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: "wide", + argumentCallback: (quarter) => quarter - 1 + }), + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: "wide" + }), + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: "wide" + }), + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: "wide", + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: "wide" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js +function buildMatchFn(args) { + return (string, options = {}) => { + const width = options.width; + const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; + const matchResult = string.match(matchPattern); + if (!matchResult) { + return null; + } + const matchedString = matchResult[0]; + const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; + const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : ( + // [TODO] -- I challenge you to fix the type + findKey(parsePatterns, (pattern) => pattern.test(matchedString)) + ); + let value; + value = args.valueCallback ? args.valueCallback(key) : key; + value = options.valueCallback ? ( + // [TODO] -- I challenge you to fix the type + options.valueCallback(value) + ) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} +function findKey(object, predicate) { + for (const key in object) { + if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) { + return key; + } + } + return void 0; +} +function findIndex(array, predicate) { + for (let key = 0; key < array.length; key++) { + if (predicate(array[key])) { + return key; + } + } + return void 0; +} + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +function buildMatchPatternFn(args) { + return (string, options = {}) => { + const matchResult = string.match(args.matchPattern); + if (!matchResult) return null; + const matchedString = matchResult[0]; + const parseResult = string.match(args.parsePattern); + if (!parseResult) return null; + let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; + value = options.valueCallback ? options.valueCallback(value) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js +var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +var parseOrdinalNumberPattern = /\d+/i; +var matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i +}; +var parseEraPatterns = { + any: [/^b/i, /^(a|c)/i] +}; +var matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i +}; +var parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i] +}; +var matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i +}; +var parseMonthPatterns = { + narrow: [ + /^j/i, + /^f/i, + /^m/i, + /^a/i, + /^m/i, + /^j/i, + /^j/i, + /^a/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ], + any: [ + /^ja/i, + /^f/i, + /^mar/i, + /^ap/i, + /^may/i, + /^jun/i, + /^jul/i, + /^au/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ] +}; +var matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i +}; +var parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] +}; +var matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i +}; +var parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i + } +}; +var match = { + ordinalNumber: buildMatchPatternFn({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: (value) => parseInt(value, 10) + }), + era: buildMatchFn({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseEraPatterns, + defaultParseWidth: "any" + }), + quarter: buildMatchFn({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseQuarterPatterns, + defaultParseWidth: "any", + valueCallback: (index) => index + 1 + }), + month: buildMatchFn({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseMonthPatterns, + defaultParseWidth: "any" + }), + day: buildMatchFn({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseDayPatterns, + defaultParseWidth: "any" + }), + dayPeriod: buildMatchFn({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: "any", + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: "any" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US.js +var enUS = { + code: "en-US", + formatDistance, + formatLong, + formatRelative, + localize, + match, + options: { + weekStartsOn: 0, + firstWeekContainsDate: 1 + } +}; + +// packages/dataviews/node_modules/date-fns/getDayOfYear.js +function getDayOfYear(date, options) { + const _date = toDate(date, options?.in); + const diff = differenceInCalendarDays(_date, startOfYear(_date)); + const dayOfYear = diff + 1; + return dayOfYear; +} + +// packages/dataviews/node_modules/date-fns/getISOWeek.js +function getISOWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/getWeekYear.js +function getWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const firstWeekOfNextYear = constructFrom(options?.in || date, 0); + firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfWeek(firstWeekOfNextYear, options); + const firstWeekOfThisYear = constructFrom(options?.in || date, 0); + firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfWeek(firstWeekOfThisYear, options); + if (+_date >= +startOfNextYear) { + return year + 1; + } else if (+_date >= +startOfThisYear) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/startOfWeekYear.js +function startOfWeekYear(date, options) { + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const year = getWeekYear(date, options); + const firstWeek = constructFrom(options?.in || date, 0); + firstWeek.setFullYear(year, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + const _date = startOfWeek(firstWeek, options); + return _date; +} + +// packages/dataviews/node_modules/date-fns/getWeek.js +function getWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js +function addLeadingZeros(number, targetLength) { + const sign = number < 0 ? "-" : ""; + const output = Math.abs(number).toString().padStart(targetLength, "0"); + return sign + output; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js +var lightFormatters = { + // Year + y(date, token) { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); + }, + // Month + M(date, token) { + const month = date.getMonth(); + return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); + }, + // Day of the month + d(date, token) { + return addLeadingZeros(date.getDate(), token.length); + }, + // AM or PM + a(date, token) { + const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return dayPeriodEnumValue.toUpperCase(); + case "aaa": + return dayPeriodEnumValue; + case "aaaaa": + return dayPeriodEnumValue[0]; + case "aaaa": + default: + return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; + } + }, + // Hour [1-12] + h(date, token) { + return addLeadingZeros(date.getHours() % 12 || 12, token.length); + }, + // Hour [0-23] + H(date, token) { + return addLeadingZeros(date.getHours(), token.length); + }, + // Minute + m(date, token) { + return addLeadingZeros(date.getMinutes(), token.length); + }, + // Second + s(date, token) { + return addLeadingZeros(date.getSeconds(), token.length); + }, + // Fraction of second + S(date, token) { + const numberOfDigits = token.length; + const milliseconds = date.getMilliseconds(); + const fractionalSeconds = Math.trunc( + milliseconds * Math.pow(10, numberOfDigits - 3) + ); + return addLeadingZeros(fractionalSeconds, token.length); + } +}; + +// packages/dataviews/node_modules/date-fns/_lib/format/formatters.js +var dayPeriodEnum = { + am: "am", + pm: "pm", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" +}; +var formatters = { + // Era + G: function(date, token, localize2) { + const era = date.getFullYear() > 0 ? 1 : 0; + switch (token) { + // AD, BC + case "G": + case "GG": + case "GGG": + return localize2.era(era, { width: "abbreviated" }); + // A, B + case "GGGGG": + return localize2.era(era, { width: "narrow" }); + // Anno Domini, Before Christ + case "GGGG": + default: + return localize2.era(era, { width: "wide" }); + } + }, + // Year + y: function(date, token, localize2) { + if (token === "yo") { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize2.ordinalNumber(year, { unit: "year" }); + } + return lightFormatters.y(date, token); + }, + // Local week-numbering year + Y: function(date, token, localize2, options) { + const signedWeekYear = getWeekYear(date, options); + const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; + if (token === "YY") { + const twoDigitYear = weekYear % 100; + return addLeadingZeros(twoDigitYear, 2); + } + if (token === "Yo") { + return localize2.ordinalNumber(weekYear, { unit: "year" }); + } + return addLeadingZeros(weekYear, token.length); + }, + // ISO week-numbering year + R: function(date, token) { + const isoWeekYear = getISOWeekYear(date); + return addLeadingZeros(isoWeekYear, token.length); + }, + // Extended year. This is a single number designating the year of this calendar system. + // The main difference between `y` and `u` localizers are B.C. years: + // | Year | `y` | `u` | + // |------|-----|-----| + // | AC 1 | 1 | 1 | + // | BC 1 | 1 | 0 | + // | BC 2 | 2 | -1 | + // Also `yy` always returns the last two digits of a year, + // while `uu` pads single digit years to 2 characters and returns other years unchanged. + u: function(date, token) { + const year = date.getFullYear(); + return addLeadingZeros(year, token.length); + }, + // Quarter + Q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "Q": + return String(quarter); + // 01, 02, 03, 04 + case "QQ": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "Qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "QQQ": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "formatting" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "QQQQQ": + return localize2.quarter(quarter, { + width: "narrow", + context: "formatting" + }); + // 1st quarter, 2nd quarter, ... + case "QQQQ": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone quarter + q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "q": + return String(quarter); + // 01, 02, 03, 04 + case "qq": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "qqq": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "standalone" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "qqqqq": + return localize2.quarter(quarter, { + width: "narrow", + context: "standalone" + }); + // 1st quarter, 2nd quarter, ... + case "qqqq": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "standalone" + }); + } + }, + // Month + M: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + case "M": + case "MM": + return lightFormatters.M(date, token); + // 1st, 2nd, ..., 12th + case "Mo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "MMM": + return localize2.month(month, { + width: "abbreviated", + context: "formatting" + }); + // J, F, ..., D + case "MMMMM": + return localize2.month(month, { + width: "narrow", + context: "formatting" + }); + // January, February, ..., December + case "MMMM": + default: + return localize2.month(month, { width: "wide", context: "formatting" }); + } + }, + // Stand-alone month + L: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + // 1, 2, ..., 12 + case "L": + return String(month + 1); + // 01, 02, ..., 12 + case "LL": + return addLeadingZeros(month + 1, 2); + // 1st, 2nd, ..., 12th + case "Lo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "LLL": + return localize2.month(month, { + width: "abbreviated", + context: "standalone" + }); + // J, F, ..., D + case "LLLLL": + return localize2.month(month, { + width: "narrow", + context: "standalone" + }); + // January, February, ..., December + case "LLLL": + default: + return localize2.month(month, { width: "wide", context: "standalone" }); + } + }, + // Local week of year + w: function(date, token, localize2, options) { + const week = getWeek(date, options); + if (token === "wo") { + return localize2.ordinalNumber(week, { unit: "week" }); + } + return addLeadingZeros(week, token.length); + }, + // ISO week of year + I: function(date, token, localize2) { + const isoWeek = getISOWeek(date); + if (token === "Io") { + return localize2.ordinalNumber(isoWeek, { unit: "week" }); + } + return addLeadingZeros(isoWeek, token.length); + }, + // Day of the month + d: function(date, token, localize2) { + if (token === "do") { + return localize2.ordinalNumber(date.getDate(), { unit: "date" }); + } + return lightFormatters.d(date, token); + }, + // Day of year + D: function(date, token, localize2) { + const dayOfYear = getDayOfYear(date); + if (token === "Do") { + return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); + } + return addLeadingZeros(dayOfYear, token.length); + }, + // Day of week + E: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + switch (token) { + // Tue + case "E": + case "EE": + case "EEE": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "EEEEE": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "EEEEEE": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "EEEE": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Local day of week + e: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (Nth day of week with current locale or weekStartsOn) + case "e": + return String(localDayOfWeek); + // Padded numerical value + case "ee": + return addLeadingZeros(localDayOfWeek, 2); + // 1st, 2nd, ..., 7th + case "eo": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "eee": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "eeeee": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "eeeeee": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "eeee": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone local day of week + c: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (same as in `e`) + case "c": + return String(localDayOfWeek); + // Padded numerical value + case "cc": + return addLeadingZeros(localDayOfWeek, token.length); + // 1st, 2nd, ..., 7th + case "co": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "ccc": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "standalone" + }); + // T + case "ccccc": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "standalone" + }); + // Tu + case "cccccc": + return localize2.day(dayOfWeek, { + width: "short", + context: "standalone" + }); + // Tuesday + case "cccc": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "standalone" + }); + } + }, + // ISO day of week + i: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + switch (token) { + // 2 + case "i": + return String(isoDayOfWeek); + // 02 + case "ii": + return addLeadingZeros(isoDayOfWeek, token.length); + // 2nd + case "io": + return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); + // Tue + case "iii": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "iiiii": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "iiiiii": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "iiii": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // AM or PM + a: function(date, token, localize2) { + const hours = date.getHours(); + const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "aaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "aaaaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "aaaa": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // AM, PM, midnight, noon + b: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours === 12) { + dayPeriodEnumValue = dayPeriodEnum.noon; + } else if (hours === 0) { + dayPeriodEnumValue = dayPeriodEnum.midnight; + } else { + dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + } + switch (token) { + case "b": + case "bb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "bbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "bbbbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "bbbb": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // in the morning, in the afternoon, in the evening, at night + B: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours >= 17) { + dayPeriodEnumValue = dayPeriodEnum.evening; + } else if (hours >= 12) { + dayPeriodEnumValue = dayPeriodEnum.afternoon; + } else if (hours >= 4) { + dayPeriodEnumValue = dayPeriodEnum.morning; + } else { + dayPeriodEnumValue = dayPeriodEnum.night; + } + switch (token) { + case "B": + case "BB": + case "BBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "BBBBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "BBBB": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // Hour [1-12] + h: function(date, token, localize2) { + if (token === "ho") { + let hours = date.getHours() % 12; + if (hours === 0) hours = 12; + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return lightFormatters.h(date, token); + }, + // Hour [0-23] + H: function(date, token, localize2) { + if (token === "Ho") { + return localize2.ordinalNumber(date.getHours(), { unit: "hour" }); + } + return lightFormatters.H(date, token); + }, + // Hour [0-11] + K: function(date, token, localize2) { + const hours = date.getHours() % 12; + if (token === "Ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Hour [1-24] + k: function(date, token, localize2) { + let hours = date.getHours(); + if (hours === 0) hours = 24; + if (token === "ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Minute + m: function(date, token, localize2) { + if (token === "mo") { + return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" }); + } + return lightFormatters.m(date, token); + }, + // Second + s: function(date, token, localize2) { + if (token === "so") { + return localize2.ordinalNumber(date.getSeconds(), { unit: "second" }); + } + return lightFormatters.s(date, token); + }, + // Fraction of second + S: function(date, token) { + return lightFormatters.S(date, token); + }, + // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) + X: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + if (timezoneOffset === 0) { + return "Z"; + } + switch (token) { + // Hours and optional minutes + case "X": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XX` + case "XXXX": + case "XX": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XXX` + case "XXXXX": + case "XXX": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) + x: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Hours and optional minutes + case "x": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xx` + case "xxxx": + case "xx": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xxx` + case "xxxxx": + case "xxx": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (GMT) + O: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "O": + case "OO": + case "OOO": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "OOOO": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (specific non-location) + z: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "z": + case "zz": + case "zzz": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "zzzz": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Seconds timestamp + t: function(date, token, _localize) { + const timestamp = Math.trunc(+date / 1e3); + return addLeadingZeros(timestamp, token.length); + }, + // Milliseconds timestamp + T: function(date, token, _localize) { + return addLeadingZeros(+date, token.length); + } +}; +function formatTimezoneShort(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = Math.trunc(absOffset / 60); + const minutes = absOffset % 60; + if (minutes === 0) { + return sign + String(hours); + } + return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); +} +function formatTimezoneWithOptionalMinutes(offset, delimiter) { + if (offset % 60 === 0) { + const sign = offset > 0 ? "-" : "+"; + return sign + addLeadingZeros(Math.abs(offset) / 60, 2); + } + return formatTimezone(offset, delimiter); +} +function formatTimezone(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); + const minutes = addLeadingZeros(absOffset % 60, 2); + return sign + hours + delimiter + minutes; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js +var dateLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "P": + return formatLong2.date({ width: "short" }); + case "PP": + return formatLong2.date({ width: "medium" }); + case "PPP": + return formatLong2.date({ width: "long" }); + case "PPPP": + default: + return formatLong2.date({ width: "full" }); + } +}; +var timeLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "p": + return formatLong2.time({ width: "short" }); + case "pp": + return formatLong2.time({ width: "medium" }); + case "ppp": + return formatLong2.time({ width: "long" }); + case "pppp": + default: + return formatLong2.time({ width: "full" }); + } +}; +var dateTimeLongFormatter = (pattern, formatLong2) => { + const matchResult = pattern.match(/(P+)(p+)?/) || []; + const datePattern = matchResult[1]; + const timePattern = matchResult[2]; + if (!timePattern) { + return dateLongFormatter(pattern, formatLong2); + } + let dateTimeFormat; + switch (datePattern) { + case "P": + dateTimeFormat = formatLong2.dateTime({ width: "short" }); + break; + case "PP": + dateTimeFormat = formatLong2.dateTime({ width: "medium" }); + break; + case "PPP": + dateTimeFormat = formatLong2.dateTime({ width: "long" }); + break; + case "PPPP": + default: + dateTimeFormat = formatLong2.dateTime({ width: "full" }); + break; + } + return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); +}; +var longFormatters = { + p: timeLongFormatter, + P: dateTimeLongFormatter +}; + +// packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js +var dayOfYearTokenRE = /^D+$/; +var weekYearTokenRE = /^Y+$/; +var throwTokens = ["D", "DD", "YY", "YYYY"]; +function isProtectedDayOfYearToken(token) { + return dayOfYearTokenRE.test(token); +} +function isProtectedWeekYearToken(token) { + return weekYearTokenRE.test(token); +} +function warnOrThrowProtectedError(token, format6, input) { + const _message = message(token, format6, input); + console.warn(_message); + if (throwTokens.includes(token)) throw new RangeError(_message); +} +function message(token, format6, input) { + const subject = token[0] === "Y" ? "years" : "days of the month"; + return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format6}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; +} + +// packages/dataviews/node_modules/date-fns/format.js +var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; +var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp = /^'([^]*?)'?$/; +var doubleQuoteRegExp = /''/g; +var unescapedLatinCharacterRegExp = /[a-zA-Z]/; +function format(date, formatStr, options) { + const defaultOptions2 = getDefaultOptions(); + const locale = options?.locale ?? defaultOptions2.locale ?? enUS; + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const originalDate = toDate(date, options?.in); + if (!isValid(originalDate)) { + throw new RangeError("Invalid time value"); + } + let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => { + const firstCharacter = substring[0]; + if (firstCharacter === "p" || firstCharacter === "P") { + const longFormatter = longFormatters[firstCharacter]; + return longFormatter(substring, locale.formatLong); + } + return substring; + }).join("").match(formattingTokensRegExp).map((substring) => { + if (substring === "''") { + return { isToken: false, value: "'" }; + } + const firstCharacter = substring[0]; + if (firstCharacter === "'") { + return { isToken: false, value: cleanEscapedString(substring) }; + } + if (formatters[firstCharacter]) { + return { isToken: true, value: substring }; + } + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" + ); + } + return { isToken: false, value: substring }; + }); + if (locale.localize.preprocessor) { + parts = locale.localize.preprocessor(originalDate, parts); + } + const formatterOptions = { + firstWeekContainsDate, + weekStartsOn, + locale + }; + return parts.map((part) => { + if (!part.isToken) return part.value; + const token = part.value; + if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { + warnOrThrowProtectedError(token, formatStr, String(date)); + } + const formatter = formatters[token[0]]; + return formatter(originalDate, token, locale.localize, formatterOptions); + }).join(""); +} +function cleanEscapedString(input) { + const matched = input.match(escapedStringRegExp); + if (!matched) { + return input; + } + return matched[1].replace(doubleQuoteRegExp, "'"); +} + +// packages/dataviews/node_modules/date-fns/subDays.js +function subDays(date, amount, options) { + return addDays(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subMonths.js +function subMonths(date, amount, options) { + return addMonths(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subWeeks.js +function subWeeks(date, amount, options) { + return addWeeks(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subYears.js +function subYears(date, amount, options) { + return addYears(date, -amount, options); +} + +// packages/dataviews/build-module/utils/operators.mjs +var import_i18n23 = __toESM(require_i18n(), 1); +var import_element28 = __toESM(require_element(), 1); +var import_date = __toESM(require_date(), 1); +var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); +var filterTextWrappers = { + Name: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }), + Value: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" }) +}; +function getRelativeDate(value, unit) { + switch (unit) { + case "days": + return subDays(/* @__PURE__ */ new Date(), value); + case "weeks": + return subWeeks(/* @__PURE__ */ new Date(), value); + case "months": + return subMonths(/* @__PURE__ */ new Date(), value); + case "years": + return subYears(/* @__PURE__ */ new Date(), value); + default: + return /* @__PURE__ */ new Date(); + } +} +var isNoneOperatorDefinition = { + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is none of"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */ + (0, import_i18n23.__)("%1$s is none of: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter: ((item, field, filterValue) => { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return !filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return !filterValue.includes(fieldValue); + } + return false; + }), + selection: "multi" +}; +var OPERATORS = [ + { + name: OPERATOR_IS_ANY, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return filterValue.includes(fieldValue); + } + return false; + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NONE, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_IS_ALL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes all"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes all: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + return filterValue.every((value) => { + return field.getValue({ item })?.includes(value); + }); + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NOT_ALL, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_BETWEEN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Between (inc)"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Item count"). 2: Filter value min. 3: Filter value max. e.g.: "Item count between (inc): 10 and 180". */ + (0, import_i18n23.__)( + "%1$s between (inc): %2$s and %3$s" + ), + filter.name, + activeElements[0].label[0], + activeElements[0].label[1] + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!Array.isArray(filterValue) || filterValue.length !== 2 || filterValue[0] === void 0 || filterValue[1] === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") { + return fieldValue >= filterValue[0] && fieldValue <= filterValue[1]; + } + return false; + }, + selection: "custom" + }, + { + name: OPERATOR_IN_THE_PAST, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("In the past"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */ + (0, import_i18n23.__)( + "%1$s is in the past: %2$s" + ), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date(); + }, + selection: "custom" + }, + { + name: OPERATOR_OVER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Over"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */ + (0, import_i18n23.__)("%1$s is over: %2$s"), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue < targetDate; + }, + selection: "custom" + }, + { + name: OPERATOR_IS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue === field.getValue({ item }) || filterValue === void 0; + }, + selection: "single" + }, + { + name: OPERATOR_IS_NOT, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is not"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue !== field.getValue({ item }); + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */ + (0, import_i18n23.__)("%1$s is less than: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue < filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue > filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than or equal"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is less than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue <= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than or equal"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue >= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is before: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate < filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is after: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate > filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before (inc)"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or before: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate <= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After (inc)"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or after: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate >= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Contains"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */ + (0, import_i18n23.__)("%1$s contains: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Doesn't contain"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */ + (0, import_i18n23.__)( + "%1$s doesn't contain: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_STARTS_WITH, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Starts with"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */ + (0, import_i18n23.__)("%1$s starts with: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("On"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() === fieldDate.getTime(); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Not on"), + filterText: (filter, activeElements) => (0, import_element28.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() !== fieldDate.getTime(); + }, + selection: "single" + } +]; +var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name); +var getAllOperatorNames = () => OPERATORS.map((op) => op.name); +var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some( + (op) => op.name === name +); +var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); +var ENTER = "Enter"; +var SPACE = " "; +var FilterText = ({ + activeElements, + filterInView, + filter +}) => { + if (activeElements === void 0 || activeElements.length === 0) { + return filter.name; + } + const operator = getOperatorByName(filterInView?.operator); + if (operator !== void 0) { + return operator.filterText(filter, activeElements); + } + return (0, import_i18n24.sprintf)( + /* translators: 1: Filter name e.g.: "Unknown status for Author". */ + (0, import_i18n24.__)("Unknown status for %1$s"), + filter.name + ); +}; +function OperatorSelector({ + filter, + view, + onChangeView +}) { + const operatorOptions = filter.operators?.map((operator) => ({ + value: operator, + label: getOperatorByName(operator)?.label || operator + })); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const value = currentFilter?.operator || filter.operators[0]; + return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "flex-start", + className: "dataviews-filters__summary-operators-container", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_components23.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }), + /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components23.SelectControl, + { + className: "dataviews-filters__summary-operators-filter-select", + label: (0, import_i18n24.__)("Conditions"), + value, + options: operatorOptions, + onChange: (newValue) => { + const newOperator = newValue; + const currentOperator = currentFilter?.operator; + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + const currentOpSelectionModel = getOperatorByName( + currentOperator + )?.selection; + const newOpSelectionModel = getOperatorByName( + newOperator + )?.selection; + const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [ + currentOpSelectionModel, + newOpSelectionModel + ].includes("custom"); + return { + ..._filter, + value: shouldResetValue ? void 0 : _filter.value, + operator: newOperator + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: newOperator, + value: void 0 + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + size: "small", + variant: "minimal", + hideLabelFromVision: true + } + ) + ] + } + ); +} +function Filter({ + addFilterRef, + openedFilter, + fields, + ...commonProps +}) { + const toggleRef = (0, import_element29.useRef)(null); + const { filter, view, onChangeView } = commonProps; + const filterInView = view.filters?.find( + (f2) => f2.field === filter.field + ); + let activeElements = []; + const field = (0, import_element29.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Configure getValue as if Item was a plain object. + // See related input-widget.tsx + getValue: ({ item }) => item[currentField.id] + }; + } + return currentField; + }, [fields, filter.field]); + const { elements } = useElements({ + elements: filter.elements, + getElements: filter.getElements + }); + if (elements.length > 0) { + activeElements = elements.filter((element) => { + if (filter.singleSelection) { + return element.value === filterInView?.value; + } + return filterInView?.value?.includes(element.value); + }); + } else if (Array.isArray(filterInView?.value)) { + const label = filterInView.value.map((v2) => { + const formattedValue = field?.getValueFormatted({ + item: { [field.id]: v2 }, + field + }); + return formattedValue || String(v2); + }); + activeElements = [ + { + value: filterInView.value, + // @ts-ignore + label + } + ]; + } else if (typeof filterInView?.value === "object") { + activeElements = [ + { value: filterInView.value, label: filterInView.value } + ]; + } else if (filterInView?.value !== void 0) { + const label = field !== void 0 ? field.getValueFormatted({ + item: { [field.id]: filterInView.value }, + field + }) : String(filterInView.value); + activeElements = [ + { + value: filterInView.value, + label + } + ]; + } + const isPrimary = filter.isPrimary; + const isLocked = filterInView?.isLocked; + const hasValues = !isLocked && filterInView?.value !== void 0; + const canResetOrRemove = !isLocked && (!isPrimary || hasValues); + return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components23.Dropdown, + { + defaultOpen: openedFilter === filter.field, + contentClassName: "dataviews-filters__summary-popover", + popoverProps: { placement: "bottom-start", role: "dialog" }, + onClose: () => { + toggleRef.current?.focus(); + }, + renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [ + /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components23.Tooltip, + { + text: (0, import_i18n24.sprintf)( + /* translators: 1: Filter name. */ + (0, import_i18n24.__)("Filter by: %1$s"), + filter.name.toLowerCase() + ), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + "div", + { + className: clsx_default( + "dataviews-filters__summary-chip", + { + "has-reset": canResetOrRemove, + "has-values": hasValues, + "is-not-clickable": isLocked + } + ), + role: "button", + tabIndex: isLocked ? -1 : 0, + onClick: () => { + if (!isLocked) { + onToggle(); + } + }, + onKeyDown: (event) => { + if (!isLocked && [ENTER, SPACE].includes(event.key)) { + onToggle(); + event.preventDefault(); + } + }, + "aria-disabled": isLocked, + "aria-pressed": isOpen, + "aria-expanded": isOpen, + ref: toggleRef, + children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + FilterText, + { + activeElements, + filterInView, + filter + } + ) + } + ) + } + ), + canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components23.Tooltip, + { + text: isPrimary ? (0, import_i18n24.__)("Reset") : (0, import_i18n24.__)("Remove"), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + "button", + { + className: clsx_default( + "dataviews-filters__summary-chip-remove", + { "has-values": hasValues } + ), + onClick: () => { + onChangeView({ + ...view, + page: 1, + filters: view.filters?.filter( + (_filter) => _filter.field !== filter.field + ) + }); + if (!isPrimary) { + addFilterRef.current?.focus(); + } else { + toggleRef.current?.focus(); + } + }, + children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_components23.Icon, { icon: close_small_default }) + } + ) + } + ) + ] }), + renderContent: () => { + return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Stack, { direction: "column", justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(OperatorSelector, { ...commonProps }), + commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + SearchWidget, + { + ...commonProps, + filter: { + ...commonProps.filter, + elements + } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(InputWidget, { ...commonProps, fields }) + ] }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/add-filter.mjs +var import_components24 = __toESM(require_components(), 1); +var import_i18n25 = __toESM(require_i18n(), 1); +var import_element30 = __toESM(require_element(), 1); +var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu4 } = unlock(import_components24.privateApis); +function AddFilterMenu({ + filters, + view, + onChangeView, + setOpenedFilter, + triggerProps +}) { + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(Menu4, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Menu4.TriggerButton, { ...triggerProps }), + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + Menu4.Item, + { + onClick: () => { + setOpenedFilter(filter.field); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: filter.field, + value: void 0, + operator: filter.operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Menu4.ItemLabel, { children: filter.name }) + }, + filter.field + ); + }) }) + ] }); +} +function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) { + if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) { + return null; + } + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + AddFilterMenu, + { + triggerProps: { + render: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + import_components24.Button, + { + accessibleWhenDisabled: true, + size: "compact", + className: "dataviews-filters-button", + variant: "tertiary", + disabled: !inactiveFilters.length, + ref + } + ), + children: (0, import_i18n25.__)("Add filter") + }, + ...{ filters, view, onChangeView, setOpenedFilter } + } + ); +} +var add_filter_default = (0, import_element30.forwardRef)(AddFilter); + +// packages/dataviews/build-module/components/dataviews-filters/reset-filters.mjs +var import_components25 = __toESM(require_components(), 1); +var import_i18n26 = __toESM(require_i18n(), 1); +var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); +function ResetFilter({ + filters, + view, + onChangeView +}) { + const isPrimary = (field) => filters.some( + (_filter) => _filter.field === field && _filter.isPrimary + ); + const isDisabled = !view.search && !view.filters?.some( + (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field)) + ); + return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + import_components25.Button, + { + disabled: isDisabled, + accessibleWhenDisabled: true, + size: "compact", + variant: "tertiary", + className: "dataviews-filters__reset-button", + onClick: () => { + onChangeView({ + ...view, + page: 1, + search: "", + filters: view.filters?.filter((f2) => !!f2.isLocked) || [] + }); + }, + children: (0, import_i18n26.__)("Reset") + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/use-filters.mjs +var import_element31 = __toESM(require_element(), 1); +function useFilters(fields, view) { + return (0, import_element31.useMemo)(() => { + const filters = []; + fields.forEach((field) => { + if (field.filterBy === false || !field.hasElements && !field.Edit) { + return; + } + const operators = field.filterBy.operators; + const isPrimary = !!field.filterBy?.isPrimary; + const isLocked = view.filters?.some( + (f2) => f2.field === field.id && !!f2.isLocked + ) ?? false; + filters.push({ + field: field.id, + name: field.label, + elements: field.elements, + getElements: field.getElements, + hasElements: field.hasElements, + singleSelection: operators.some( + (op) => isSingleSelectionOperator(op) + ), + operators, + isVisible: isLocked || isPrimary || !!view.filters?.some( + (f2) => f2.field === field.id && isRegisteredOperator(f2.operator) + ), + isPrimary, + isLocked + }); + }); + filters.sort((a2, b2) => { + if (a2.isLocked && !b2.isLocked) { + return -1; + } + if (!a2.isLocked && b2.isLocked) { + return 1; + } + if (a2.isPrimary && !b2.isPrimary) { + return -1; + } + if (!a2.isPrimary && b2.isPrimary) { + return 1; + } + return a2.name.localeCompare(b2.name); + }); + return filters; + }, [fields, view]); +} +var use_filters_default = useFilters; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); +function Filters({ className }) { + const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element32.useContext)(dataviews_context_default); + const addFilterRef = (0, import_element32.useRef)(null); + const filters = use_filters_default(fields, view); + const addFilter = /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( + add_filter_default, + { + filters, + view, + onChangeView, + ref: addFilterRef, + setOpenedFilter + }, + "add-filter" + ); + const visibleFilters = filters.filter((filter) => filter.isVisible); + if (visibleFilters.length === 0) { + return null; + } + const filterComponents = [ + ...visibleFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( + Filter, + { + filter, + view, + fields, + onChangeView, + addFilterRef, + openedFilter + }, + filter.field + ); + }), + addFilter + ]; + filterComponents.push( + /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( + ResetFilter, + { + filters, + view, + onChangeView + }, + "reset-filters" + ) + ); + return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + gap: "sm", + style: { width: "fit-content" }, + wrap: "wrap", + className, + children: filterComponents + } + ); +} +var filters_default = (0, import_element32.memo)(Filters); + +// packages/dataviews/build-module/components/dataviews-filters/toggle.mjs +var import_element33 = __toESM(require_element(), 1); +var import_components26 = __toESM(require_components(), 1); +var import_i18n27 = __toESM(require_i18n(), 1); +var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); +function FiltersToggle() { + const { + filters, + view, + onChangeView, + setOpenedFilter, + isShowingFilter, + setIsShowingFilter + } = (0, import_element33.useContext)(dataviews_context_default); + const buttonRef = (0, import_element33.useRef)(null); + const onChangeViewWithFilterVisibility = (0, import_element33.useCallback)( + (_view) => { + onChangeView(_view); + setIsShowingFilter(true); + }, + [onChangeView, setIsShowingFilter] + ); + if (filters.length === 0) { + return null; + } + const hasVisibleFilters = filters.some((filter) => filter.isVisible); + const addFilterButtonProps = { + label: (0, import_i18n27.__)("Add filter"), + "aria-expanded": false, + isPressed: false + }; + const toggleFiltersButtonProps = { + label: (0, import_i18n27._x)("Filter", "verb"), + "aria-expanded": isShowingFilter, + isPressed: isShowingFilter, + onClick: () => { + if (!isShowingFilter) { + setOpenedFilter(null); + } + setIsShowingFilter(!isShowingFilter); + } + }; + const hasPrimaryOrLockedFilters = filters.some( + (filter) => filter.isPrimary || filter.isLocked + ); + const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + import_components26.Button, + { + ref: buttonRef, + className: "dataviews-filters__visibility-toggle", + size: "compact", + icon: funnel_default, + disabled: hasPrimaryOrLockedFilters, + accessibleWhenDisabled: true, + ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + AddFilterMenu, + { + filters, + view, + onChangeView: onChangeViewWithFilterVisibility, + setOpenedFilter, + triggerProps: { render: buttonComponent } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + FilterVisibilityToggle, + { + buttonRef, + filtersCount: view.filters?.length, + children: buttonComponent + } + ) }); +} +function FilterVisibilityToggle({ + buttonRef, + filtersCount, + children +}) { + (0, import_element33.useEffect)( + () => () => { + buttonRef.current?.focus(); + }, + [buttonRef] + ); + return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [ + children, + !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount }) + ] }); +} +var toggle_default = FiltersToggle; + +// packages/dataviews/build-module/components/dataviews-filters/filters-toggled.mjs +var import_element34 = __toESM(require_element(), 1); +var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); +function FiltersToggled(props) { + const { isShowingFilter } = (0, import_element34.useContext)(dataviews_context_default); + if (!isShowingFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(filters_default, { ...props }); +} +var filters_toggled_default = FiltersToggled; + +// packages/dataviews/build-module/components/dataviews-layout/index.mjs +var import_element35 = __toESM(require_element(), 1); +var import_i18n28 = __toESM(require_i18n(), 1); +var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); +function DataViewsLayout({ className }) { + const { + actions = [], + data, + fields, + getItemId: getItemId2, + getItemLevel, + hasInitiallyLoaded, + isLoading, + view, + onChangeView, + selection, + onChangeSelection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + defaultLayouts, + empty = /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { children: (0, import_i18n28.__)("No results") }) + } = (0, import_element35.useContext)(dataviews_context_default); + if (!hasInitiallyLoaded) { + return null; + } + const ViewComponent = VIEW_LAYOUTS.find( + (v2) => v2.type === view.type && defaultLayouts[v2.type] + )?.component; + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + ViewComponent, + { + className, + actions, + data, + fields, + getItemId: getItemId2, + getItemLevel, + isLoading, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + renderItemLink, + isItemClickable, + view, + empty + } + ); +} + +// packages/dataviews/build-module/components/dataviews-footer/index.mjs +var import_element36 = __toESM(require_element(), 1); +var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); +var EMPTY_ARRAY5 = []; +function DataViewsFooter() { + const { + view, + paginationInfo: { totalItems = 0, totalPages }, + data, + actions = EMPTY_ARRAY5, + isLoading, + hasInitiallyLoaded, + hasInfiniteScrollHandler + } = (0, import_element36.useContext)(dataviews_context_default); + const isRefreshing = !!isLoading && hasInitiallyLoaded && !hasInfiniteScrollHandler && !!data?.length; + const isDelayedRefreshing = useDelayedLoading(!!isRefreshing); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type); + if (!isRefreshing && (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions)) { + return null; + } + return (!!totalItems || isRefreshing) && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)( + "div", + { + className: "dataviews-footer", + inert: isRefreshing ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)( + Stack, + { + direction: "row", + justify: "end", + align: "center", + className: clsx_default("dataviews-footer__content", { + "is-refreshing": isDelayedRefreshing + }), + gap: "sm", + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(BulkActionsFooter, {}), + /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(dataviews_pagination_default, {}) + ] + } + ) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-search/index.mjs +var import_i18n29 = __toESM(require_i18n(), 1); +var import_element37 = __toESM(require_element(), 1); +var import_components27 = __toESM(require_components(), 1); +var import_compose10 = __toESM(require_compose(), 1); +var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); +var DataViewsSearch = (0, import_element37.memo)(function Search({ label }) { + const { view, onChangeView } = (0, import_element37.useContext)(dataviews_context_default); + const [search, setSearch, debouncedSearch] = (0, import_compose10.useDebouncedInput)( + view.search + ); + (0, import_element37.useEffect)(() => { + setSearch(view.search ?? ""); + }, [view.search, setSearch]); + const onChangeViewRef = (0, import_element37.useRef)(onChangeView); + const viewRef = (0, import_element37.useRef)(view); + (0, import_element37.useEffect)(() => { + onChangeViewRef.current = onChangeView; + viewRef.current = view; + }, [onChangeView, view]); + (0, import_element37.useEffect)(() => { + if (debouncedSearch !== viewRef.current?.search) { + onChangeViewRef.current({ + ...viewRef.current, + page: 1, + search: debouncedSearch + }); + } + }, [debouncedSearch]); + const searchLabel = label || (0, import_i18n29.__)("Search"); + return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)( + import_components27.SearchControl, + { + className: "dataviews-search", + onChange: setSearch, + value: search, + label: searchLabel, + placeholder: searchLabel, + size: "compact" + } + ); +}); +var dataviews_search_default = DataViewsSearch; + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_components29 = __toESM(require_components(), 1); +var import_i18n31 = __toESM(require_i18n(), 1); +var import_element39 = __toESM(require_element(), 1); +var import_warning = __toESM(require_warning(), 1); +var import_compose11 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +var import_components28 = __toESM(require_components(), 1); +var import_i18n30 = __toESM(require_i18n(), 1); +var import_element38 = __toESM(require_element(), 1); +var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); +function InfiniteScrollToggle() { + const context = (0, import_element38.useContext)(dataviews_context_default); + const { view, onChangeView } = context; + const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false; + if (!context.hasInfiniteScrollHandler) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components28.ToggleControl, + { + label: (0, import_i18n30.__)("Enable infinite scroll"), + help: (0, import_i18n30.__)( + "Automatically load more content as you scroll, instead of showing pagination links." + ), + checked: infiniteScrollEnabled, + onChange: (newValue) => { + onChangeView({ + ...view, + infiniteScrollEnabled: newValue + }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu5 } = unlock(import_components29.privateApis); +var DATAVIEWS_CONFIG_POPOVER_PROPS = { + className: "dataviews-config__popover", + placement: "bottom-end", + offset: 9 +}; +function ViewTypeMenu() { + const { view, onChangeView, defaultLayouts } = (0, import_element39.useContext)(dataviews_context_default); + const availableLayouts = Object.keys(defaultLayouts); + if (availableLayouts.length <= 1) { + return null; + } + const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type); + return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Menu5, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + Menu5.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.Button, + { + size: "compact", + icon: activeView?.icon, + label: (0, import_i18n31.__)("Layout") + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => { + const config = VIEW_LAYOUTS.find( + (v2) => v2.type === layout + ); + if (!config) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + Menu5.RadioItem, + { + value: layout, + name: "view-actions-available-view", + checked: layout === view.type, + hideOnClick: true, + onChange: (e2) => { + switch (e2.target.value) { + case "list": + case "grid": + case "table": + case "pickerGrid": + case "pickerTable": + case "activity": + const viewWithoutLayout = { ...view }; + if ("layout" in viewWithoutLayout) { + delete viewWithoutLayout.layout; + } + return onChangeView({ + ...viewWithoutLayout, + type: e2.target.value, + ...defaultLayouts[e2.target.value] + }); + } + (0, import_warning.default)("Invalid dataview"); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Menu5.ItemLabel, { children: config.label }) + }, + layout + ); + }) }) + ] }); +} +function SortFieldControl() { + const { view, fields, onChangeView } = (0, import_element39.useContext)(dataviews_context_default); + const orderOptions = (0, import_element39.useMemo)(() => { + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + return sortableFields.map((field) => { + return { + label: field.label, + value: field.id + }; + }); + }, [fields]); + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.SelectControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n31.__)("Sort by"), + value: view.sort?.field, + options: orderOptions, + onChange: (value) => { + onChangeView({ + ...view, + sort: { + direction: view?.sort?.direction || "desc", + field: value + }, + showLevels: false + }); + } + } + ); +} +function SortDirectionControl() { + const { view, fields, onChangeView } = (0, import_element39.useContext)(dataviews_context_default); + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + if (sortableFields.length === 0) { + return null; + } + let value = view.sort?.direction; + if (!value && view.sort?.field) { + value = "desc"; + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.__experimentalToggleGroupControl, + { + className: "dataviews-view-config__sort-direction", + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Order"), + value, + onChange: (newDirection) => { + if (newDirection === "asc" || newDirection === "desc") { + onChangeView({ + ...view, + sort: { + direction: newDirection, + field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field. + fields.find( + (field) => field.enableSorting !== false + )?.id || "" + }, + showLevels: false + }); + return; + } + (0, import_warning.default)("Invalid direction"); + }, + children: SORTING_DIRECTIONS.map((direction) => { + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.__experimentalToggleGroupControlOptionIcon, + { + value: direction, + icon: sortIcons[direction], + label: sortLabels[direction] + }, + direction + ); + }) + } + ); +} +function ItemsPerPageControl() { + const { view, config, onChangeView } = (0, import_element39.useContext)(dataviews_context_default); + const { infiniteScrollEnabled } = view; + if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.__experimentalToggleGroupControl, + { + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Items per page"), + value: view.perPage || 10, + disabled: !view?.sort?.field, + onChange: (newItemsPerPage) => { + const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10); + onChangeView({ + ...view, + perPage: newItemsPerPageNumber, + page: 1 + }); + }, + children: config.perPageSizes.map((value) => { + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.__experimentalToggleGroupControlOption, + { + value, + label: value.toString() + }, + value + ); + }) + } + ); +} +function ResetViewButton() { + const { onReset } = (0, import_element39.useContext)(dataviews_context_default); + if (onReset === void 0) { + return null; + } + const isDisabled = onReset === false; + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.Button, + { + variant: "tertiary", + size: "compact", + disabled: isDisabled, + accessibleWhenDisabled: true, + className: "dataviews-view-config__reset-button", + onClick: () => { + if (typeof onReset === "function") { + onReset(); + } + }, + children: (0, import_i18n31.__)("Reset view") + } + ); +} +function DataviewsViewConfigDropdown() { + const { view, onReset } = (0, import_element39.useContext)(dataviews_context_default); + const popoverId = (0, import_compose11.useInstanceId)( + _DataViewsViewConfig, + "dataviews-view-config-dropdown" + ); + const activeLayout = VIEW_LAYOUTS.find( + (layout) => layout.type === view.type + ); + const isModified = typeof onReset === "function"; + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.Dropdown, + { + expandOnMobile: true, + popoverProps: { + ...DATAVIEWS_CONFIG_POPOVER_PROPS, + id: popoverId + }, + renderToggle: ({ onToggle, isOpen }) => { + return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "dataviews-view-config__toggle-wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.Button, + { + size: "compact", + icon: cog_default, + label: (0, import_i18n31._x)( + "View options", + "View is used as a noun" + ), + onClick: onToggle, + "aria-expanded": isOpen ? "true" : "false", + "aria-controls": popoverId + } + ), + isModified && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "dataviews-view-config__modified-indicator" }) + ] }); + }, + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.__experimentalDropdownContentWrapper, + { + paddingSize: "medium", + className: "dataviews-config__popover-content-wrapper", + children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-config", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)( + Stack, + { + direction: "row", + justify: "space-between", + align: "center", + className: "dataviews-view-config__header", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components29.__experimentalHeading, + { + level: 2, + className: "dataviews-settings-section__title", + children: (0, import_i18n31.__)("Appearance") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(ResetViewButton, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + className: "dataviews-view-config__sort-controls", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(SortFieldControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(SortDirectionControl, {}) + ] + } + ), + !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(activeLayout.viewConfigOptions, {}), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(InfiniteScrollToggle, {}), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(ItemsPerPageControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PropertiesSection, {}) + ] }) + ] + } + ) + } + ) + } + ); +} +function _DataViewsViewConfig() { + return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(ViewTypeMenu, {}), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(DataviewsViewConfigDropdown, {}) + ] }); +} +var DataViewsViewConfig = (0, import_element39.memo)(_DataViewsViewConfig); +var dataviews_view_config_default = DataViewsViewConfig; + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_components30 = __toESM(require_components(), 1); +var import_element40 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs +function getCustomValidity(isValid2, validity) { + let customValidity; + if (isValid2?.required && validity?.required) { + customValidity = validity?.required?.message ? validity.required : void 0; + } else if (isValid2?.pattern && validity?.pattern) { + customValidity = validity.pattern; + } else if (isValid2?.min && validity?.min) { + customValidity = validity.min; + } else if (isValid2?.max && validity?.max) { + customValidity = validity.max; + } else if (isValid2?.minLength && validity?.minLength) { + customValidity = validity.minLength; + } else if (isValid2?.maxLength && validity?.maxLength) { + customValidity = validity.maxLength; + } else if (isValid2?.elements && validity?.elements) { + customValidity = validity.elements; + } else if (validity?.custom) { + customValidity = validity.custom; + } + return customValidity; +} + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); +var { ValidatedCheckboxControl } = unlock(import_components30.privateApis); +function Checkbox({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, label, description, isValid: isValid2 } = field; + const onChangeControl = (0, import_element40.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [data, getValue, onChange, setValue]); + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + ValidatedCheckboxControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/combobox.mjs +var import_components31 = __toESM(require_components(), 1); +var import_element41 = __toESM(require_element(), 1); +var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); +var { ValidatedComboboxControl } = unlock(import_components31.privateApis); +function Combobox3({ + data, + field, + onChange, + hideLabelFromVision, + validity +}) { + const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element41.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components31.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + ValidatedComboboxControl, + { + required: !!field.isValid?.required, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + placeholder, + options: elements, + onChange: onChangeControl, + hideLabelFromVision, + allowReset: true, + expandOnFocus: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_components33 = __toESM(require_components(), 1); +var import_element43 = __toESM(require_element(), 1); +var import_i18n33 = __toESM(require_i18n(), 1); +var import_date3 = __toESM(require_date(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs +var import_components32 = __toESM(require_components(), 1); +var import_element42 = __toESM(require_element(), 1); +var import_i18n32 = __toESM(require_i18n(), 1); +var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); +var TIME_UNITS_OPTIONS = { + [OPERATOR_IN_THE_PAST]: [ + { value: "days", label: (0, import_i18n32.__)("Days") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks") }, + { value: "months", label: (0, import_i18n32.__)("Months") }, + { value: "years", label: (0, import_i18n32.__)("Years") } + ], + [OPERATOR_OVER]: [ + { value: "days", label: (0, import_i18n32.__)("Days ago") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks ago") }, + { value: "months", label: (0, import_i18n32.__)("Months ago") }, + { value: "years", label: (0, import_i18n32.__)("Years ago") } + ] +}; +function RelativeDateControl({ + className, + data, + field, + onChange, + hideLabelFromVision, + operator +}) { + const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"]; + const { id, label, getValue, setValue } = field; + const fieldValue = getValue({ item: data }); + const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {}; + const onChangeValue = (0, import_element42.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: { value: Number(newValue), unit } + }) + ), + [onChange, setValue, data, unit] + ); + const onChangeUnit = (0, import_element42.useCallback)( + (newUnit) => onChange( + setValue({ + item: data, + value: { value: relValue, unit: newUnit } + }) + ), + [onChange, setValue, data, relValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( + import_components32.BaseControl, + { + id, + className: clsx_default(className, "dataviews-controls__relative-date"), + label, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(Stack, { direction: "row", gap: "sm", children: [ + /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( + import_components32.__experimentalNumberControl, + { + __next40pxDefaultSize: true, + className: "dataviews-controls__relative-date-number", + spinControls: "none", + min: 1, + step: 1, + value: relValue, + onChange: onChangeValue + } + ), + /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( + import_components32.SelectControl, + { + className: "dataviews-controls__relative-date-unit", + __next40pxDefaultSize: true, + label: (0, import_i18n32.__)("Unit"), + value: unit, + options, + onChange: onChangeUnit, + hideLabelFromVision: true + } + ) + ] }) + } + ); +} + +// packages/dataviews/build-module/field-types/utils/parse-date-time.mjs +var import_date2 = __toESM(require_date(), 1); +function parseDateTime(dateTimeString) { + if (!dateTimeString) { + return null; + } + const parsed = (0, import_date2.getDate)(dateTimeString); + return parsed && isValid(parsed) ? parsed : null; +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar, ValidatedInputControl } = unlock(import_components33.privateApis); +var formatDateTime = (value) => { + if (!value) { + return ""; + } + return (0, import_date3.dateI18n)("Y-m-d\\TH:i", (0, import_date3.getDate)(value)); +}; +function CalendarDateTimeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, description, setValue, getValue, isValid: isValid2 } = field; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + const parsedDate = parseDateTime(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const inputControlRef = (0, import_element43.useRef)(null); + const validationTimeoutRef = (0, import_element43.useRef)(void 0); + const previousFocusRef = (0, import_element43.useRef)(null); + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + (0, import_element43.useEffect)(() => { + return () => { + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + }; + }, []); + const onSelectDate = (0, import_element43.useCallback)( + (newDate) => { + let dateTimeValue; + if (newDate) { + const wpDate = (0, import_date3.dateI18n)("Y-m-d", newDate); + let wpTime; + if (value) { + wpTime = (0, import_date3.dateI18n)("H:i", (0, import_date3.getDate)(value)); + } else { + wpTime = (0, import_date3.dateI18n)("H:i", newDate); + } + const finalDateTime = (0, import_date3.getDate)(`${wpDate}T${wpTime}`); + dateTimeValue = finalDateTime.toISOString(); + onChangeCallback(dateTimeValue); + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + } else { + onChangeCallback(void 0); + } + previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement; + validationTimeoutRef.current = setTimeout(() => { + if (inputControlRef.current) { + inputControlRef.current.focus(); + inputControlRef.current.blur(); + onChangeCallback(dateTimeValue); + if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) { + previousFocusRef.current.focus(); + } + } + }, 0); + }, + [onChangeCallback, value] + ); + const handleManualDateTimeChange = (0, import_element43.useCallback)( + (newValue) => { + if (newValue) { + const dateTime = (0, import_date3.getDate)(newValue); + onChangeCallback(dateTime.toISOString()); + const parsedDate = parseDateTime(dateTime.toISOString()); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } else { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const { format: fieldFormat } = field; + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek; + const { + timezone: { string: timezoneString } + } = (0, import_date3.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + import_components33.BaseControl, + { + id, + label: displayLabel, + help: description, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + DateCalendar, + { + style: { width: "100%" }, + selected: value ? parseDateTime(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ), + /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + ValidatedInputControl, + { + ref: inputControlRef, + __next40pxDefaultSize: true, + required: !!isValid2?.required, + customValidity: getCustomValidity(isValid2, validity), + type: "datetime-local", + label: (0, import_i18n33.__)("Date time"), + hideLabelFromVision: true, + value: formatDateTime(value), + onChange: handleManualDateTimeChange + } + ) + ] }) + } + ); +} +function DateTime({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__datetime", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + CalendarDateTimeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/date.mjs +var import_components34 = __toESM(require_components(), 1); +var import_element44 = __toESM(require_element(), 1); +var import_i18n34 = __toESM(require_i18n(), 1); +var import_date4 = __toESM(require_date(), 1); +var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components34.privateApis); +var DATE_PRESETS = [ + { + id: "today", + label: (0, import_i18n34.__)("Today"), + getValue: () => (0, import_date4.getDate)(null) + }, + { + id: "yesterday", + label: (0, import_i18n34.__)("Yesterday"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 1); + } + }, + { + id: "past-week", + label: (0, import_i18n34.__)("Past week"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 7); + } + }, + { + id: "past-month", + label: (0, import_i18n34.__)("Past month"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subMonths(today, 1); + } + } +]; +var DATE_RANGE_PRESETS = [ + { + id: "last-7-days", + label: (0, import_i18n34.__)("Last 7 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 7), today]; + } + }, + { + id: "last-30-days", + label: (0, import_i18n34.__)("Last 30 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 30), today]; + } + }, + { + id: "month-to-date", + label: (0, import_i18n34.__)("Month to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfMonth(today), today]; + } + }, + { + id: "last-year", + label: (0, import_i18n34.__)("Last year"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subYears(today, 1), today]; + } + }, + { + id: "year-to-date", + label: (0, import_i18n34.__)("Year to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfYear(today), today]; + } + } +]; +var parseDate = (dateString) => { + if (!dateString) { + return null; + } + const parsed = (0, import_date4.getDate)(dateString); + return parsed && isValid(parsed) ? parsed : null; +}; +var formatDate = (date) => { + if (!date) { + return ""; + } + return typeof date === "string" ? date : format(date, "yyyy-MM-dd"); +}; +function ValidatedDateControl({ + field, + validity, + inputRefs, + isTouched, + setIsTouched, + children +}) { + const { isValid: isValid2 } = field; + const [customValidity, setCustomValidity] = (0, import_element44.useState)(void 0); + const validateRefs = (0, import_element44.useCallback)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + for (const ref of refs) { + const input = ref.current; + if (input && !input.validity.valid) { + setCustomValidity({ + type: "invalid", + message: input.validationMessage + }); + return; + } + } + setCustomValidity(void 0); + }, [inputRefs]); + (0, import_element44.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + for (const ref of refs) { + const input = ref.current; + if (input) { + input.setCustomValidity( + result?.type === "invalid" && result.message ? result.message : "" + ); + } + } + }, [inputRefs, isValid2, validity]); + (0, import_element44.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const handleInvalid = (event) => { + event.preventDefault(); + setIsTouched(true); + }; + for (const ref of refs) { + ref.current?.addEventListener("invalid", handleInvalid); + } + return () => { + for (const ref of refs) { + ref.current?.removeEventListener("invalid", handleInvalid); + } + }; + }, [inputRefs, setIsTouched]); + (0, import_element44.useEffect)(() => { + if (!isTouched) { + return; + } + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + if (result) { + setCustomValidity(result); + } else { + validateRefs(); + } + }, [isTouched, isValid2, validity, validateRefs]); + const onBlur = (event) => { + if (isTouched) { + return; + } + if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) { + setIsTouched(true); + } + }; + return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { onBlur, children: [ + children, + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)( + "p", + { + className: clsx_default( + "components-validated-control__indicator", + customValidity.type === "invalid" ? "is-invalid" : void 0 + ), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.Icon, + { + className: "components-validated-control__indicator-icon", + icon: error_default, + size: 16, + fill: "currentColor" + } + ), + customValidity.message + ] + } + ) }) + ] }); +} +function CalendarDateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { + id, + label, + setValue, + getValue, + isValid: isValid2, + format: fieldFormat + } = field; + const [selectedPresetId, setSelectedPresetId] = (0, import_element44.useState)( + null + ); + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element44.useState)(() => { + const parsedDate = parseDate(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element44.useState)(false); + const validityTargetRef = (0, import_element44.useRef)(null); + const onChangeCallback = (0, import_element44.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const onSelectDate = (0, import_element44.useCallback)( + (newDate) => { + const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0; + onChangeCallback(dateValue); + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handlePresetClick = (0, import_element44.useCallback)( + (preset) => { + const presetDate = preset.getValue(); + const dateValue = formatDate(presetDate); + setCalendarMonth(presetDate); + onChangeCallback(dateValue); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handleManualDateChange = (0, import_element44.useCallback)( + (newValue) => { + onChangeCallback(newValue); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const { + timezone: { string: timezoneString } + } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: validityTargetRef, + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + disabled: !!selectedPresetId, + accessibleWhenDisabled: false, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: validityTargetRef, + type: "date", + label: (0, import_i18n34.__)("Date"), + hideLabelFromVision: true, + value, + onChange: handleManualDateChange, + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + DateCalendar2, + { + style: { width: "100%" }, + selected: value ? parseDate(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function CalendarDateRangeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, getValue, setValue, format: fieldFormat } = field; + let value; + const fieldValue = getValue({ item: data }); + if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) { + value = fieldValue; + } + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const onChangeCallback = (0, import_element44.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + const [selectedPresetId, setSelectedPresetId] = (0, import_element44.useState)( + null + ); + const selectedRange = (0, import_element44.useMemo)(() => { + if (!value) { + return { from: void 0, to: void 0 }; + } + const [from, to] = value; + return { + from: parseDate(from) || void 0, + to: parseDate(to) || void 0 + }; + }, [value]); + const [calendarMonth, setCalendarMonth] = (0, import_element44.useState)(() => { + return selectedRange.from || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element44.useState)(false); + const fromInputRef = (0, import_element44.useRef)(null); + const toInputRef = (0, import_element44.useRef)(null); + const updateDateRange = (0, import_element44.useCallback)( + (fromDate, toDate2) => { + if (fromDate && toDate2) { + onChangeCallback([ + formatDate(fromDate), + formatDate(toDate2) + ]); + } else if (!fromDate && !toDate2) { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const onSelectCalendarRange = (0, import_element44.useCallback)( + (newRange) => { + updateDateRange(newRange?.from, newRange?.to); + setSelectedPresetId(null); + setIsTouched(true); + }, + [updateDateRange] + ); + const handlePresetClick = (0, import_element44.useCallback)( + (preset) => { + const [startDate, endDate] = preset.getValue(); + setCalendarMonth(startDate); + updateDateRange(startDate, endDate); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [updateDateRange] + ); + const handleManualDateChange = (0, import_element44.useCallback)( + (fromOrTo, newValue) => { + const [currentFrom, currentTo] = value || [ + void 0, + void 0 + ]; + const updatedFrom = fromOrTo === "from" ? newValue : currentFrom; + const updatedTo = fromOrTo === "to" ? newValue : currentTo; + updateDateRange(updatedFrom, updatedTo); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [value, updateDateRange] + ); + const { timezone } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (field.isValid?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!field.isValid?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: [fromInputRef, toInputRef], + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_RANGE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + accessibleWhenDisabled: false, + disabled: !!selectedPresetId, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "space-between", + className: "dataviews-controls__date-range-inputs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: fromInputRef, + type: "date", + label: (0, import_i18n34.__)("From"), + hideLabelFromVision: true, + value: value?.[0], + onChange: (newValue) => handleManualDateChange("from", newValue), + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components34.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: toInputRef, + type: "date", + label: (0, import_i18n34.__)("To"), + hideLabelFromVision: true, + value: value?.[1], + onChange: (newValue) => handleManualDateChange("to", newValue), + required: !!field.isValid?.required + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + DateRangeCalendar, + { + style: { width: "100%" }, + selected: selectedRange, + onSelect: onSelectCalendarRange, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezone.string || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function DateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__date", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + if (operator === OPERATOR_BETWEEN) { + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + CalendarDateRangeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + CalendarDateControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/select.mjs +var import_components35 = __toESM(require_components(), 1); +var import_element45 = __toESM(require_element(), 1); +var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); +var { ValidatedSelectControl } = unlock(import_components35.privateApis); +function Select({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { type, label, description, getValue, setValue, isValid: isValid2 } = field; + const isMultiple = type === "array"; + const value = getValue({ item: data }) ?? (isMultiple ? [] : ""); + const onChangeControl = (0, import_element45.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_components35.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + ValidatedSelectControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + options: elements, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + multiple: isMultiple + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs +var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); +var ELEMENTS_THRESHOLD = 10; +function AdaptiveSelect(props) { + const { field } = props; + const { elements } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (elements.length >= ELEMENTS_THRESHOLD) { + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Combobox3, { ...props }); + } + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Select, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_components37 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs +var import_components36 = __toESM(require_components(), 1); +var import_element46 = __toESM(require_element(), 1); +var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components36.privateApis); +function ValidatedText({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + type, + prefix, + suffix, + validity +}) { + const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element46.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: newValue + }) + ), + [data, setValue, onChange] + ); + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + ValidatedInputControl2, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + hideLabelFromVision, + type, + prefix, + suffix, + pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1); +function Email({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "email", + prefix: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_components37.Icon, { icon: envelope_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/telephone.mjs +var import_components38 = __toESM(require_components(), 1); +var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1); +function Telephone({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "tel", + prefix: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_components38.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_components38.Icon, { icon: mobile_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/url.mjs +var import_components39 = __toESM(require_components(), 1); +var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1); +function Url({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "url", + prefix: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_components39.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_components39.Icon, { icon: link_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs +var import_components40 = __toESM(require_components(), 1); +var import_element47 = __toESM(require_element(), 1); +var import_i18n35 = __toESM(require_i18n(), 1); +var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1); +var { ValidatedNumberControl } = unlock(import_components40.privateApis); +function toNumberOrEmpty(value) { + if (value === "" || value === void 0) { + return ""; + } + const number = Number(value); + return Number.isFinite(number) ? number : ""; +} +function BetweenControls({ + value, + onChange, + hideLabelFromVision, + step +}) { + const [min = "", max = ""] = value; + const onChangeMin = (0, import_element47.useCallback)( + (newValue) => onChange([toNumberOrEmpty(newValue), max]), + [onChange, max] + ); + const onChangeMax = (0, import_element47.useCallback)( + (newValue) => onChange([min, toNumberOrEmpty(newValue)]), + [onChange, min] + ); + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components40.BaseControl, + { + help: (0, import_i18n35.__)("The max. value must be greater than the min. value."), + children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_components40.Flex, { direction: "row", gap: 4, children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components40.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Min."), + value: min, + max: max ? Number(max) - step : void 0, + onChange: onChangeMin, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components40.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Max."), + value: max, + min: min ? Number(min) + step : void 0, + onChange: onChangeMax, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ) + ] }) + } + ); +} +function ValidatedNumber({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + const decimals = field.format?.decimals ?? 0; + const step = Math.pow(10, Math.abs(decimals) * -1); + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element47.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + // Do not convert an empty string or undefined to a number, + // otherwise there's a mismatch between the UI control (empty) + // and the data relied by onChange (0). + value: ["", void 0].includes(newValue) ? void 0 : Number(newValue) + }) + ); + }, + [data, onChange, setValue] + ); + const onChangeBetweenControls = (0, import_element47.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + if (operator === OPERATOR_BETWEEN) { + let valueBetween = ["", ""]; + if (Array.isArray(value) && value.length === 2 && value.every( + (element) => typeof element === "number" || element === "" + )) { + valueBetween = value; + } + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + BetweenControls, + { + value: valueBetween, + onChange: onChangeBetweenControls, + hideLabelFromVision, + step + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + ValidatedNumberControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + value, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + step, + min: isValid2.min ? isValid2.min.constraint : void 0, + max: isValid2.max ? isValid2.max.constraint : void 0 + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/integer.mjs +var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1); +function Integer(props) { + return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/number.mjs +var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1); +function Number2(props) { + return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/radio.mjs +var import_components41 = __toESM(require_components(), 1); +var import_element48 = __toESM(require_element(), 1); +var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1); +var { ValidatedRadioControl } = unlock(import_components41.privateApis); +function Radio({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = getValue({ item: data }); + const onChangeControl = (0, import_element48.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_components41.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + ValidatedRadioControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + onChange: onChangeControl, + options: elements, + selected: value, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/text.mjs +var import_element49 = __toESM(require_element(), 1); +var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1); +function Text({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { prefix, suffix } = config || {}; + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + prefix: prefix ? (0, import_element49.createElement)(prefix) : void 0, + suffix: suffix ? (0, import_element49.createElement)(suffix) : void 0 + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle.mjs +var import_components42 = __toESM(require_components(), 1); +var import_element50 = __toESM(require_element(), 1); +var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleControl } = unlock(import_components42.privateApis); +function Toggle({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const onChangeControl = (0, import_element50.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [onChange, setValue, data, getValue]); + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ValidatedToggleControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/textarea.mjs +var import_components43 = __toESM(require_components(), 1); +var import_element51 = __toESM(require_element(), 1); +var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1); +var { ValidatedTextareaControl } = unlock(import_components43.privateApis); +function Textarea({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { rows = 4 } = config || {}; + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }); + const onChangeControl = (0, import_element51.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( + ValidatedTextareaControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + rows, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs +var import_components44 = __toESM(require_components(), 1); +var import_element52 = __toESM(require_element(), 1); +var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleGroupControl } = unlock(import_components44.privateApis); +function ToggleGroup({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element52.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_components44.Spinner, {}); + } + if (elements.length === 0) { + return null; + } + const selectedOption = elements.find((el) => el.value === value); + return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)( + ValidatedToggleGroupControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + __next40pxDefaultSize: true, + isBlock: true, + label: field.label, + help: selectedOption?.description || field.description, + onChange: onChangeControl, + value, + hideLabelFromVision, + children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime90.jsx)( + import_components44.__experimentalToggleGroupControlOption, + { + label: el.label, + value: el.value + }, + el.value + )) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/array.mjs +var import_components45 = __toESM(require_components(), 1); +var import_element53 = __toESM(require_element(), 1); +var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1); +var { ValidatedFormTokenField } = unlock(import_components45.privateApis); +function ArrayControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const arrayValueAsElements = (0, import_element53.useMemo)( + () => Array.isArray(value) ? value.map((token) => { + const element = elements?.find( + (suggestion) => suggestion.value === token + ); + return element || { value: token, label: token }; + }) : [], + [value, elements] + ); + const onChangeControl = (0, import_element53.useCallback)( + (tokens) => { + const valueTokens = tokens.map((token) => { + if (typeof token === "object" && "value" in token) { + return token.value; + } + return token; + }); + onChange(setValue({ item: data, value: valueTokens })); + }, + [onChange, setValue, data] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_components45.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)( + ValidatedFormTokenField, + { + required: !!isValid2?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label: hideLabelFromVision ? void 0 : label, + value: arrayValueAsElements, + onChange: onChangeControl, + placeholder, + suggestions: elements?.map((element) => element.value), + __experimentalValidateInput: (token) => { + if (field.isValid?.elements && elements) { + return elements.some( + (element) => element.value === token || element.label === token + ); + } + return true; + }, + __experimentalExpandOnFocus: elements && elements.length > 0, + __experimentalShowHowTo: !field.isValid?.elements, + displayTransform: (token) => { + if (typeof token === "object" && "label" in token) { + return token.label; + } + if (typeof token === "string" && elements) { + const element = elements.find( + (el) => el.value === token + ); + return element?.label || token; + } + return token; + }, + __experimentalRenderItem: ({ item }) => { + if (typeof item === "string" && elements) { + const element = elements.find( + (el) => el.value === item + ); + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { children: element?.label || item }); + } + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { children: item }); + } + } + ); +} + +// node_modules/colord/index.mjs +var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; +var t = function(r3) { + return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; +}; +var n = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0; +}; +var e = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2; +}; +var u = function(r3) { + return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; +}; +var a = function(r3) { + return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; +}; +var o = function(r3) { + return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; +}; +var i = /^#([0-9a-f]{3,8})$/i; +var s = function(r3) { + var t2 = r3.toString(16); + return t2.length < 2 ? "0" + t2 : t2; +}; +var h = function(r3) { + var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0; + return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; +}; +var b = function(r3) { + var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; + t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100; + var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6; + return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 }; +}; +var g = function(r3) { + return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; +}; +var d = function(r3) { + return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; +}; +var f = function(r3) { + return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a })); + var t2, n2, e2; +}; +var c = function(r3) { + return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a }; + var t2, n2, e2, u2; +}; +var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var y = { string: [[function(r3) { + var t2 = i.exec(r3); + return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; +}, "hex"], [function(r3) { + var t2 = v.exec(r3) || m.exec(r3); + return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null; +}, "rgb"], [function(t2) { + var n2 = l.exec(t2) || p.exec(t2); + if (!n2) return null; + var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); + return f(a2); +}, "hsl"]], object: [[function(r3) { + var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2; + return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; +}, "rgb"], [function(r3) { + var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2; + if (!t(n2) || !t(e2) || !t(u2)) return null; + var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) }); + return f(i2); +}, "hsl"], [function(r3) { + var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; + if (!t(n2) || !t(a2) || !t(o2)) return null; + var h2 = (function(r4) { + return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; + })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) }); + return b(h2); +}, "hsv"]] }; +var N = function(r3, t2) { + for (var n2 = 0; n2 < t2.length; n2++) { + var e2 = t2[n2][0](r3); + if (e2) return [e2, t2[n2][1]]; + } + return [null, void 0]; +}; +var x = function(r3) { + return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; +}; +var M = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a }; +}; +var H = function(r3) { + return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; +}; +var $ = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a }; +}; +var j = (function() { + function r3(r4) { + this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; + } + return r3.prototype.isValid = function() { + return null !== this.parsed; + }, r3.prototype.brightness = function() { + return n(H(this.rgba), 2); + }, r3.prototype.isDark = function() { + return H(this.rgba) < 0.5; + }, r3.prototype.isLight = function() { + return H(this.rgba) >= 0.5; + }, r3.prototype.toHex = function() { + return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2; + var r4, t2, e2, u2, a2, i2; + }, r3.prototype.toRgb = function() { + return o(this.rgba); + }, r3.prototype.toRgbString = function() { + return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsl = function() { + return d(c(this.rgba)); + }, r3.prototype.toHslString = function() { + return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsv = function() { + return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; + var r4; + }, r3.prototype.invert = function() { + return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); + var r4; + }, r3.prototype.saturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); + }, r3.prototype.desaturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); + }, r3.prototype.grayscale = function() { + return w(M(this.rgba, -1)); + }, r3.prototype.lighten = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); + }, r3.prototype.darken = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); + }, r3.prototype.rotate = function(r4) { + return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); + }, r3.prototype.alpha = function(r4) { + return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3); + var t2; + }, r3.prototype.hue = function(r4) { + var t2 = c(this.rgba); + return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h); + }, r3.prototype.isEqual = function(r4) { + return this.toHex() === w(r4).toHex(); + }, r3; +})(); +var w = function(r3) { + return r3 instanceof j ? r3 : new j(r3); +}; + +// packages/dataviews/build-module/components/dataform-controls/color.mjs +var import_components46 = __toESM(require_components(), 1); +var import_element54 = __toESM(require_element(), 1); +var import_i18n36 = __toESM(require_i18n(), 1); +var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl3 } = unlock(import_components46.privateApis); +var ColorPickerDropdown = ({ + color, + onColorChange +}) => { + const validColor = color && w(color).isValid() ? color : "#ffffff"; + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + import_components46.Dropdown, + { + className: "dataviews-controls__color-picker-dropdown", + popoverProps: { resize: false }, + renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + import_components46.Button, + { + onClick: onToggle, + "aria-label": (0, import_i18n36.__)("Open color picker"), + size: "small", + icon: () => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_components46.ColorIndicator, { colorValue: validColor }) + } + ), + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_components46.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + import_components46.ColorPicker, + { + color: validColor, + onChange: onColorChange, + enableAlpha: true + } + ) }) + } + ); +}; +function Color({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }) || ""; + const handleColorChange = (0, import_element54.useCallback)( + (newColor) => { + onChange(setValue({ item: data, value: newColor })); + }, + [data, onChange, setValue] + ); + const handleInputChange = (0, import_element54.useCallback)( + (newValue) => { + onChange(setValue({ item: data, value: newValue || "" })); + }, + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + ValidatedInputControl3, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value, + help: description, + onChange: handleInputChange, + hideLabelFromVision, + type: "text", + prefix: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_components46.__experimentalInputControlPrefixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + ColorPickerDropdown, + { + color: value, + onColorChange: handleColorChange + } + ) }) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/password.mjs +var import_components47 = __toESM(require_components(), 1); +var import_element55 = __toESM(require_element(), 1); +var import_i18n37 = __toESM(require_i18n(), 1); +var import_jsx_runtime93 = __toESM(require_jsx_runtime(), 1); +function Password({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const [isVisible2, setIsVisible] = (0, import_element55.useState)(false); + const toggleVisibility = (0, import_element55.useCallback)(() => { + setIsVisible((prev) => !prev); + }, []); + return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: isVisible2 ? "text" : "password", + suffix: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components47.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + import_components47.Button, + { + icon: isVisible2 ? unseen_default : seen_default, + onClick: toggleVisibility, + size: "small", + label: isVisible2 ? (0, import_i18n37.__)("Hide password") : (0, import_i18n37.__)("Show password") + } + ) }) + } + } + ); +} + +// packages/dataviews/build-module/field-types/utils/has-elements.mjs +function hasElements(field) { + return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function"; +} + +// packages/dataviews/build-module/components/dataform-controls/index.mjs +var import_jsx_runtime94 = __toESM(require_jsx_runtime(), 1); +var FORM_CONTROLS = { + adaptiveSelect: AdaptiveSelect, + array: ArrayControl, + checkbox: Checkbox, + color: Color, + combobox: Combobox3, + datetime: DateTime, + date: DateControl, + email: Email, + telephone: Telephone, + url: Url, + integer: Integer, + number: Number2, + password: Password, + radio: Radio, + select: Select, + text: Text, + toggle: Toggle, + textarea: Textarea, + toggleGroup: ToggleGroup +}; +function isEditConfig(value) { + return value && typeof value === "object" && typeof value.control === "string"; +} +function createConfiguredControl(config) { + const { control, ...controlConfig } = config; + const BaseControlType = getControlByType(control); + if (BaseControlType === null) { + return null; + } + return function ConfiguredControl(props) { + return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(BaseControlType, { ...props, config: controlConfig }); + }; +} +function getControl(field, fallback) { + if (typeof field.Edit === "function") { + return field.Edit; + } + if (typeof field.Edit === "string") { + return getControlByType(field.Edit); + } + if (isEditConfig(field.Edit)) { + return createConfiguredControl(field.Edit); + } + if (hasElements(field) && field.type !== "array") { + return getControlByType("adaptiveSelect"); + } + if (fallback === null) { + return null; + } + return getControlByType(fallback); +} +function getControlByType(type) { + if (Object.keys(FORM_CONTROLS).includes(type)) { + return FORM_CONTROLS[type]; + } + return null; +} + +// packages/dataviews/build-module/field-types/utils/get-filter-by.mjs +function getFilterBy(field, defaultOperators, validOperators) { + if (field.filterBy === false) { + return false; + } + const operators = field.filterBy?.operators?.filter( + (op) => validOperators.includes(op) + ) ?? defaultOperators; + if (operators.length === 0) { + return false; + } + return { + isPrimary: !!field.filterBy?.isPrimary, + operators + }; +} +var get_filter_by_default = getFilterBy; + +// packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs +var getValueFromId = (id) => ({ item }) => { + const path = id.split("."); + let value = item; + for (const segment of path) { + if (value.hasOwnProperty(segment)) { + value = value[segment]; + } else { + value = void 0; + } + } + return value; +}; +var get_value_from_id_default = getValueFromId; + +// packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs +var setValueFromId = (id) => ({ value }) => { + const path = id.split("."); + const result = {}; + let current = result; + for (const segment of path.slice(0, -1)) { + current[segment] = {}; + current = current[segment]; + } + current[path.at(-1)] = value; + return result; +}; +var set_value_from_id_default = setValueFromId; + +// packages/dataviews/build-module/field-types/email.mjs +var import_i18n38 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/render-from-elements.mjs +function RenderFromElements({ + item, + field +}) { + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = field.getValue({ item }); + if (isLoading) { + return value; + } + if (elements.length === 0) { + return value; + } + return elements?.find((element) => element.value === value)?.label || field.getValue({ item }); +} + +// packages/dataviews/build-module/field-types/utils/render-default.mjs +var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1); +function render({ + item, + field +}) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(RenderFromElements, { item, field }); + } + return field.getValueFormatted({ item, field }); +} + +// packages/dataviews/build-module/field-types/utils/sort-text.mjs +var sort_text_default = (a2, b2, direction) => { + return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2); +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-required.mjs +function isValidRequired(item, field) { + const value = field.getValue({ item }); + return ![void 0, "", null].includes(value); +} + +// packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs +function isValidMinLength(item, field) { + if (typeof field.isValid.minLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length >= field.isValid.minLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs +function isValidMaxLength(item, field) { + if (typeof field.isValid.maxLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length <= field.isValid.maxLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs +function isValidPattern(item, field) { + if (field.isValid.pattern?.constraint === void 0) { + return true; + } + try { + const regexp = new RegExp(field.isValid.pattern.constraint); + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return regexp.test(String(value)); + } catch { + return false; + } +} + +// packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs +function isValidElements(item, field) { + const elements = field.elements ?? []; + const validValues = elements.map((el) => el.value); + if (validValues.length === 0) { + return true; + } + const value = field.getValue({ item }); + return [].concat(value).every((v2) => validValues.includes(v2)); +} + +// packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs +function getValueFormatted({ + item, + field +}) { + return field.getValue({ item }); +} +var get_value_formatted_default_default = getValueFormatted; + +// packages/dataviews/build-module/field-types/email.mjs +var emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; +function isValidCustom(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !emailRegex.test(value)) { + return (0, import_i18n38.__)("Value must be a valid email address."); + } + return null; +} +var email_default = { + type: "email", + render, + Edit: "email", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements, + custom: isValidCustom + } +}; + +// packages/dataviews/build-module/field-types/integer.mjs +var import_i18n39 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/sort-number.mjs +var sort_number_default = (a2, b2, direction) => { + return direction === "asc" ? a2 - b2 : b2 - a2; +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-min.mjs +function isValidMin(item, field) { + if (typeof field.isValid.min?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) >= field.isValid.min.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max.mjs +function isValidMax(item, field) { + if (typeof field.isValid.max?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) <= field.isValid.max.constraint; +} + +// packages/dataviews/build-module/field-types/integer.mjs +var format2 = { + separatorThousand: "," +}; +function getValueFormatted2({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatInteger; + if (field.type !== "integer") { + formatInteger = format2; + } else { + formatInteger = field.format; + } + const { separatorThousand } = formatInteger; + const integerValue = Math.trunc(value); + if (!separatorThousand) { + return String(integerValue); + } + return String(integerValue).replace( + /\B(?=(\d{3})+(?!\d))/g, + separatorThousand + ); +} +function isValidCustom2(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Number.isInteger(value)) { + return (0, import_i18n39.__)("Value must be an integer."); + } + return null; +} +var integer_default = { + type: "integer", + render, + Edit: "integer", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format2, + getValueFormatted: getValueFormatted2, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom2 + } +}; + +// packages/dataviews/build-module/field-types/number.mjs +var import_i18n40 = __toESM(require_i18n(), 1); +var format3 = { + separatorThousand: ",", + separatorDecimal: ".", + decimals: 2 +}; +function getValueFormatted3({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatNumber; + if (field.type !== "number") { + formatNumber = format3; + } else { + formatNumber = field.format; + } + const { separatorThousand, separatorDecimal, decimals } = formatNumber; + const fixedValue = value.toFixed(decimals); + const [integerPart, decimalPart] = fixedValue.split("."); + const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart; + return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart; +} +function isEmpty2(value) { + return value === "" || value === void 0 || value === null; +} +function isValidCustom3(item, field) { + const value = field.getValue({ item }); + if (!isEmpty2(value) && !Number.isFinite(value)) { + return (0, import_i18n40.__)("Value must be a number."); + } + return null; +} +var number_default = { + type: "number", + render, + Edit: "number", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format3, + getValueFormatted: getValueFormatted3, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom3 + } +}; + +// packages/dataviews/build-module/field-types/text.mjs +var text_default = { + type: "text", + render, + Edit: "text", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + // Single selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/datetime.mjs +var import_date6 = __toESM(require_date(), 1); +var format4 = { + datetime: (0, import_date6.getSettings)().formats.datetime, + weekStartsOn: (0, import_date6.getSettings)().l10n.startOfWeek +}; +function getValueFormatted4({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDatetime; + if (field.type !== "datetime") { + formatDatetime = format4; + } else { + formatDatetime = field.format; + } + return (0, import_date6.dateI18n)(formatDatetime.datetime, (0, import_date6.getDate)(value)); +} +var sort = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var datetime_default = { + type: "datetime", + render, + Edit: "datetime", + sort, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + format: format4, + getValueFormatted: getValueFormatted4, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/date.mjs +var import_date7 = __toESM(require_date(), 1); +var format5 = { + date: (0, import_date7.getSettings)().formats.date, + weekStartsOn: (0, import_date7.getSettings)().l10n.startOfWeek +}; +function getValueFormatted5({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDate2; + if (field.type !== "date") { + formatDate2 = format5; + } else { + formatDate2 = field.format; + } + return (0, import_date7.dateI18n)(formatDate2.date, (0, import_date7.getDate)(value)); +} +var sort2 = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var date_default = { + type: "date", + render, + Edit: "date", + sort: sort2, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + format: format5, + getValueFormatted: getValueFormatted5, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/boolean.mjs +var import_i18n41 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs +function isValidRequiredForBool(item, field) { + const value = field.getValue({ item }); + return value === true; +} + +// packages/dataviews/build-module/field-types/boolean.mjs +function getValueFormatted6({ + item, + field +}) { + const value = field.getValue({ item }); + if (value === true) { + return (0, import_i18n41.__)("True"); + } + if (value === false) { + return (0, import_i18n41.__)("False"); + } + return ""; +} +function isValidCustom4(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && ![true, false].includes(value)) { + return (0, import_i18n41.__)("Value must be true, false, or undefined"); + } + return null; +} +var sort3 = (a2, b2, direction) => { + const boolA = Boolean(a2); + const boolB = Boolean(b2); + if (boolA === boolB) { + return 0; + } + if (direction === "asc") { + return boolA ? 1 : -1; + } + return boolA ? -1 : 1; +}; +var boolean_default = { + type: "boolean", + render, + Edit: "checkbox", + sort: sort3, + validate: { + required: isValidRequiredForBool, + elements: isValidElements, + custom: isValidCustom4 + }, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + format: {}, + getValueFormatted: getValueFormatted6 +}; + +// packages/dataviews/build-module/field-types/media.mjs +var media_default = { + type: "media", + render: () => null, + Edit: null, + sort: () => 0, + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: get_value_formatted_default_default, + // cannot validate any constraint, so + // the only available validation for the field author + // would be providing a custom validator. + validate: {} +}; + +// packages/dataviews/build-module/field-types/array.mjs +var import_i18n42 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs +function isValidRequiredForArray(item, field) { + const value = field.getValue({ item }); + return Array.isArray(value) && value.length > 0 && value.every( + (element) => ![void 0, "", null].includes(element) + ); +} + +// packages/dataviews/build-module/field-types/array.mjs +function getValueFormatted7({ + item, + field +}) { + const value = field.getValue({ item }); + const arr = Array.isArray(value) ? value : []; + return arr.join(", "); +} +function render2({ item, field }) { + return getValueFormatted7({ item, field }); +} +function isValidCustom5(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Array.isArray(value)) { + return (0, import_i18n42.__)("Value must be an array."); + } + if (!value.every((v2) => typeof v2 === "string")) { + return (0, import_i18n42.__)("Every value must be a string."); + } + return null; +} +var sort4 = (a2, b2, direction) => { + const arrA = Array.isArray(a2) ? a2 : []; + const arrB = Array.isArray(b2) ? b2 : []; + if (arrA.length !== arrB.length) { + return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length; + } + const joinedA = arrA.join(","); + const joinedB = arrB.join(","); + return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA); +}; +var array_default = { + type: "array", + render: render2, + Edit: "array", + sort: sort4, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: getValueFormatted7, + validate: { + required: isValidRequiredForArray, + elements: isValidElements, + custom: isValidCustom5 + } +}; + +// packages/dataviews/build-module/field-types/password.mjs +function getValueFormatted8({ + item, + field +}) { + return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : ""; +} +var password_default = { + type: "password", + render, + Edit: "password", + sort: () => 0, + // Passwords should not be sortable for security reasons + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: getValueFormatted8, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/telephone.mjs +var telephone_default = { + type: "telephone", + render, + Edit: "telephone", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/color.mjs +var import_i18n43 = __toESM(require_i18n(), 1); +var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1); +function render3({ item, field }) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RenderFromElements, { item, field }); + } + const value = get_value_formatted_default_default({ item, field }); + if (!value || !w(value).isValid()) { + return value; + } + return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime96.jsx)( + "div", + { + style: { + width: "16px", + height: "16px", + borderRadius: "50%", + backgroundColor: value, + border: "1px solid #ddd", + flexShrink: 0 + } + } + ), + /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { children: value }) + ] }); +} +function isValidCustom6(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !w(value).isValid()) { + return (0, import_i18n43.__)("Value must be a valid color."); + } + return null; +} +var sort5 = (a2, b2, direction) => { + const colorA = w(a2); + const colorB = w(b2); + if (!colorA.isValid() && !colorB.isValid()) { + return 0; + } + if (!colorA.isValid()) { + return direction === "asc" ? 1 : -1; + } + if (!colorB.isValid()) { + return direction === "asc" ? -1 : 1; + } + const hslA = colorA.toHsl(); + const hslB = colorB.toHsl(); + if (hslA.h !== hslB.h) { + return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h; + } + if (hslA.s !== hslB.s) { + return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s; + } + return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l; +}; +var color_default = { + type: "color", + render: render3, + Edit: "color", + sort: sort5, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_IS_ANY, + OPERATOR_IS_NONE + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements, + custom: isValidCustom6 + } +}; + +// packages/dataviews/build-module/field-types/url.mjs +var url_default = { + type: "url", + render, + Edit: "url", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/no-type.mjs +var sort6 = (a2, b2, direction) => { + if (typeof a2 === "number" && typeof b2 === "number") { + return sort_number_default(a2, b2, direction); + } + return sort_text_default(a2, b2, direction); +}; +var no_type_default = { + // type: no type for this one + render, + Edit: null, + sort: sort6, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: getAllOperatorNames(), + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/utils/get-is-valid.mjs +function getIsValid(field, fieldType) { + let required; + if (field.isValid?.required === true && fieldType.validate.required !== void 0) { + required = { + constraint: true, + validate: fieldType.validate.required + }; + } + let elements; + if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out + field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) { + elements = { + constraint: true, + validate: fieldType.validate.elements + }; + } + let min; + if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) { + min = { + constraint: field.isValid.min, + validate: fieldType.validate.min + }; + } + let max; + if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) { + max = { + constraint: field.isValid.max, + validate: fieldType.validate.max + }; + } + let minLength; + if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) { + minLength = { + constraint: field.isValid.minLength, + validate: fieldType.validate.minLength + }; + } + let maxLength; + if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) { + maxLength = { + constraint: field.isValid.maxLength, + validate: fieldType.validate.maxLength + }; + } + let pattern; + if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) { + pattern = { + constraint: field.isValid?.pattern, + validate: fieldType.validate.pattern + }; + } + const custom = field.isValid?.custom ?? fieldType.validate.custom; + return { + required, + elements, + min, + max, + minLength, + maxLength, + pattern, + custom + }; +} + +// packages/dataviews/build-module/field-types/utils/get-filter.mjs +function getFilter(fieldType) { + return fieldType.validOperators.reduce((accumulator, operator) => { + const operatorObj = getOperatorByName(operator); + if (operatorObj?.filter) { + accumulator[operator] = operatorObj.filter; + } + return accumulator; + }, {}); +} + +// packages/dataviews/build-module/field-types/utils/get-format.mjs +function getFormat(field, fieldType) { + return { + ...fieldType.format, + ...field.format + }; +} +var get_format_default = getFormat; + +// packages/dataviews/build-module/field-types/index.mjs +function getFieldTypeByName(type) { + const found = [ + email_default, + integer_default, + number_default, + text_default, + datetime_default, + date_default, + boolean_default, + media_default, + array_default, + password_default, + telephone_default, + color_default, + url_default + ].find((fieldType) => fieldType?.type === type); + if (!!found) { + return found; + } + return no_type_default; +} +function normalizeFields(fields) { + return fields.map((field) => { + const fieldType = getFieldTypeByName(field.type); + const getValue = field.getValue || get_value_from_id_default(field.id); + const sort7 = function(a2, b2, direction) { + const aValue = getValue({ item: a2 }); + const bValue = getValue({ item: b2 }); + return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction); + }; + return { + id: field.id, + label: field.label || field.id, + header: field.header || field.label || field.id, + description: field.description, + placeholder: field.placeholder, + getValue, + setValue: field.setValue || set_value_from_id_default(field.id), + elements: field.elements, + getElements: field.getElements, + hasElements: hasElements(field), + isVisible: field.isVisible, + enableHiding: field.enableHiding ?? true, + readOnly: field.readOnly ?? false, + // The type provides defaults for the following props + type: fieldType.type, + render: field.render ?? fieldType.render, + Edit: getControl(field, fieldType.Edit), + sort: sort7, + enableSorting: field.enableSorting ?? fieldType.enableSorting, + enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch, + isValid: getIsValid(field, fieldType), + filterBy: get_filter_by_default( + field, + fieldType.defaultOperators, + fieldType.validOperators + ), + filter: getFilter(fieldType), + format: get_format_default(field, fieldType), + getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted + }; + }); +} + +// packages/dataviews/build-module/hooks/use-data.mjs +var import_element56 = __toESM(require_element(), 1); +function useData(data, isLoading, paginationInfo) { + const previousDataRef = (0, import_element56.useRef)(data); + const previousPaginationInfoRef = (0, import_element56.useRef)(paginationInfo); + const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element56.useState)( + !isLoading + ); + (0, import_element56.useEffect)(() => { + if (!isLoading) { + previousDataRef.current = data; + previousPaginationInfoRef.current = paginationInfo; + setHasInitiallyLoaded(true); + } + }, [data, isLoading, paginationInfo]); + return { + data: isLoading && previousDataRef.current?.length ? previousDataRef.current : data, + paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo, + hasInitiallyLoaded + }; +} + +// packages/dataviews/build-module/dataviews/index.mjs +var import_jsx_runtime97 = __toESM(require_jsx_runtime(), 1); +var defaultGetItemId = (item) => item.id; +var defaultIsItemClickable = () => true; +var EMPTY_ARRAY6 = []; +var dataViewsLayouts = VIEW_LAYOUTS.filter( + (viewLayout) => !viewLayout.isPicker +); +function DefaultUI({ + header, + search = true, + searchLabel = void 0 +}) { + return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(import_jsx_runtime97.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)( + Stack, + { + direction: "row", + align: "top", + justify: "space-between", + className: "dataviews__view-actions", + gap: "xs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)( + Stack, + { + direction: "row", + justify: "start", + gap: "sm", + className: "dataviews__search", + children: [ + search && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(dataviews_search_default, { label: searchLabel }), + /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(toggle_default, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(dataviews_view_config_default, {}), + header + ] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }), + /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(DataViewsLayout, {}), + /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(DataViewsFooter, {}) + ] }); +} +function DataViews({ + view, + onChangeView, + fields, + search = true, + searchLabel = void 0, + actions = EMPTY_ARRAY6, + data, + getItemId: getItemId2 = defaultGetItemId, + getItemLevel, + isLoading = false, + paginationInfo, + defaultLayouts: defaultLayoutsProperty, + selection: selectionProperty, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable = defaultIsItemClickable, + header, + children, + config = { perPageSizes: [10, 20, 50, 100] }, + empty, + onReset +}) { + const { infiniteScrollHandler } = paginationInfo; + const containerRef = (0, import_element57.useRef)(null); + const [containerWidth, setContainerWidth] = (0, import_element57.useState)(0); + const resizeObserverRef = (0, import_compose12.useResizeObserver)( + (resizeObserverEntries) => { + setContainerWidth( + resizeObserverEntries[0].borderBoxSize[0].inlineSize + ); + }, + { box: "border-box" } + ); + const [selectionState, setSelectionState] = (0, import_element57.useState)([]); + const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0; + const selection = isUncontrolled ? selectionState : selectionProperty; + const [openedFilter, setOpenedFilter] = (0, import_element57.useState)(null); + function setSelectionWithChange(value) { + const newValue = typeof value === "function" ? value(selection) : value; + if (isUncontrolled) { + setSelectionState(newValue); + } + if (onChangeSelection) { + onChangeSelection(newValue); + } + } + const _fields = (0, import_element57.useMemo)(() => normalizeFields(fields), [fields]); + const _selection = (0, import_element57.useMemo)(() => { + return selection.filter( + (id) => data.some((item) => getItemId2(item) === id) + ); + }, [selection, data, getItemId2]); + const filters = use_filters_default(_fields, view); + const hasPrimaryOrLockedFilters = (0, import_element57.useMemo)( + () => (filters || []).some( + (filter) => filter.isPrimary || filter.isLocked + ), + [filters] + ); + const [isShowingFilter, setIsShowingFilter] = (0, import_element57.useState)( + hasPrimaryOrLockedFilters + ); + (0, import_element57.useEffect)(() => { + if (hasPrimaryOrLockedFilters && !isShowingFilter) { + setIsShowingFilter(true); + } + }, [hasPrimaryOrLockedFilters, isShowingFilter]); + (0, import_element57.useEffect)(() => { + if (!view.infiniteScrollEnabled || !containerRef.current) { + return; + } + const handleScroll = (0, import_compose12.throttle)((event) => { + const target = event.target; + const scrollTop = target.scrollTop; + const scrollHeight = target.scrollHeight; + const clientHeight = target.clientHeight; + if (scrollTop + clientHeight >= scrollHeight - 100) { + infiniteScrollHandler?.(); + } + }, 100); + const container = containerRef.current; + container.addEventListener("scroll", handleScroll); + return () => { + container.removeEventListener("scroll", handleScroll); + handleScroll.cancel(); + }; + }, [infiniteScrollHandler, view.infiniteScrollEnabled]); + const defaultLayouts = (0, import_element57.useMemo)( + () => Object.fromEntries( + Object.entries(defaultLayoutsProperty).filter( + ([layoutType]) => { + return dataViewsLayouts.some( + (viewLayout) => viewLayout.type === layoutType + ); + } + ) + ), + [defaultLayoutsProperty] + ); + const { + data: displayData, + paginationInfo: displayPaginationInfo, + hasInitiallyLoaded + } = useData(data, isLoading, paginationInfo); + if (!defaultLayouts[view.type]) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)( + dataviews_context_default.Provider, + { + value: { + view, + onChangeView, + fields: _fields, + actions, + data: displayData, + isLoading, + paginationInfo: displayPaginationInfo, + selection: _selection, + onChangeSelection: setSelectionWithChange, + openedFilter, + setOpenedFilter, + getItemId: getItemId2, + getItemLevel, + isItemClickable, + onClickItem, + renderItemLink, + containerWidth, + containerRef, + resizeObserverRef, + defaultLayouts, + filters, + isShowingFilter, + setIsShowingFilter, + config, + empty, + hasInitiallyLoaded, + hasInfiniteScrollHandler: !!infiniteScrollHandler, + onReset + }, + children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "dataviews-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)( + DefaultUI, + { + header, + search, + searchLabel + } + ) }) + } + ); +} +var DataViewsSubComponents = DataViews; +DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter; +DataViewsSubComponents.Filters = filters_default; +DataViewsSubComponents.FiltersToggled = filters_toggled_default; +DataViewsSubComponents.FiltersToggle = toggle_default; +DataViewsSubComponents.Layout = DataViewsLayout; +DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu; +DataViewsSubComponents.Pagination = DataViewsPagination; +DataViewsSubComponents.Search = dataviews_search_default; +DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown; +DataViewsSubComponents.Footer = DataViewsFooter; +var dataviews_default = DataViewsSubComponents; + +// routes/navigation-list/stage.tsx +var import_components49 = __toESM(require_components()); +var import_editor = __toESM(require_editor()); + +// routes/lock-unlock.ts +var import_private_apis2 = __toESM(require_private_apis()); +var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// routes/navigation-list/view-utils.ts +var DEFAULT_VIEW = { + type: "list", + sort: { + field: "date", + direction: "desc" + }, + titleField: "title" +}; +function getDefaultView() { + return DEFAULT_VIEW; +} + +// routes/navigation-list/actions/edit-navigation.tsx +var import_i18n44 = __toESM(require_i18n()); +import { useNavigate } from "@wordpress/route"; +function useEditNavigationAction() { + const navigate = useNavigate(); + return { + id: "edit", + label: (0, import_i18n44.__)("Edit"), + isPrimary: true, + icon: pencil_default, + callback: (items) => { + const item = items[0]; + navigate({ + to: `/navigation/edit/${item.id}` + }); + }, + isEligible(item) { + return item.type === "wp_navigation" && String(item.status) !== "trash"; + } + }; +} + +// routes/navigation-list/add-navigation.tsx +var import_element58 = __toESM(require_element()); +var import_i18n45 = __toESM(require_i18n()); +var import_core_data = __toESM(require_core_data()); +var import_notices = __toESM(require_notices()); +var import_data8 = __toESM(require_data()); +var import_components48 = __toESM(require_components()); +import { useNavigate as useNavigate2 } from "@wordpress/route"; +var NAVIGATION_POST_TYPE = "wp_navigation"; +var AddNavigationModal = ({ + closeModal +}) => { + const [menuTitle, setMenuTitle] = (0, import_element58.useState)(""); + const [isBusy, setIsBusy] = (0, import_element58.useState)(false); + const navigate = useNavigate2(); + const { saveEntityRecord } = (0, import_data8.useDispatch)(import_core_data.store); + const { createSuccessNotice, createErrorNotice } = (0, import_data8.useDispatch)(import_notices.store); + const handleConfirmAdd = async () => { + if (!menuTitle || !menuTitle.trim()) { + return; + } + const trimmedTitle = menuTitle.trim(); + setIsBusy(true); + try { + const savedRecord = await saveEntityRecord( + "postType", + NAVIGATION_POST_TYPE, + { + title: trimmedTitle, + status: "publish" + }, + { + throwOnError: true + } + ); + if (savedRecord) { + createSuccessNotice( + (0, import_i18n45.__)("Navigation menu created successfully."), + { + type: "snackbar" + } + ); + navigate({ + to: `/navigation/edit/${encodeURIComponent( + savedRecord.id + )}` + }); + } + } catch (error) { + const errorMessage = error instanceof Error ? error.message : "Unknown error"; + createErrorNotice( + (0, import_i18n45.sprintf)( + /* translators: %s: error message describing why the navigation menu could not be created. */ + (0, import_i18n45.__)("Unable to create navigation menu: %s"), + errorMessage + ), + { + type: "snackbar" + } + ); + } + setIsBusy(false); + closeModal?.(); + }; + return /* @__PURE__ */ React.createElement( + import_components48.Modal, + { + title: (0, import_i18n45.__)("Add New Navigation Menu"), + onRequestClose: () => closeModal?.(), + focusOnMount: "firstContentElement", + size: "small" + }, + /* @__PURE__ */ React.createElement( + "form", + { + onSubmit: (event) => { + event.preventDefault(); + handleConfirmAdd(); + } + }, + /* @__PURE__ */ React.createElement(import_components48.__experimentalVStack, { spacing: 4 }, /* @__PURE__ */ React.createElement( + import_components48.TextControl, + { + autoComplete: "off", + value: menuTitle, + onChange: setMenuTitle, + label: (0, import_i18n45.__)("Name"), + placeholder: (0, import_i18n45.__)("Enter menu name"), + disabled: isBusy + } + ), /* @__PURE__ */ React.createElement(import_components48.__experimentalHStack, { justify: "right", spacing: 2 }, /* @__PURE__ */ React.createElement( + import_components48.Button, + { + variant: "tertiary", + onClick: closeModal, + disabled: isBusy, + accessibleWhenDisabled: true + }, + (0, import_i18n45.__)("Cancel") + ), /* @__PURE__ */ React.createElement( + import_components48.Button, + { + variant: "primary", + type: "submit", + "aria-busy": isBusy, + disabled: isBusy || !menuTitle?.trim(), + accessibleWhenDisabled: true + }, + (0, import_i18n45.__)("Create Menu") + ))) + ) + ); +}; + +// routes/navigation-list/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='4cd54e4f28']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "4cd54e4f28"); + style.appendChild(document.createTextNode("")); + document.head.appendChild(style); +} + +// routes/navigation-list/stage.tsx +var { useEntityRecordsWithPermissions } = unlock2(import_core_data2.privateApis); +var { usePostActions, usePostFields } = unlock2(import_editor.privateApis); +var NAVIGATION_POST_TYPE2 = "wp_navigation"; +var PRELOADED_NAVIGATION_MENUS_QUERY = { + per_page: 100, + status: ["publish", "draft"], + order: "desc", + orderby: "date" +}; +function getItemId(item) { + return item.id.toString(); +} +function NavigationList() { + const navigate = useNavigate3(); + const searchParams = useSearch({ from: "/navigation/list" }); + const defaultView = (0, import_element59.useMemo)(() => { + return getDefaultView(); + }, []); + const handleQueryParamsChange = (0, import_element59.useCallback)( + (params) => { + navigate({ + search: { + ...searchParams, + ...params + } + }); + }, + [searchParams, navigate] + ); + const { view, updateView, isModified, resetToDefault } = useView({ + kind: "postType", + name: NAVIGATION_POST_TYPE2, + slug: "default-new", + defaultView, + queryParams: searchParams, + onChangeQueryParams: handleQueryParamsChange + }); + const { + records: navigationMenus, + totalItems, + totalPages, + isResolving + } = useEntityRecordsWithPermissions( + "postType", + NAVIGATION_POST_TYPE2, + PRELOADED_NAVIGATION_MENUS_QUERY + ); + const fields = usePostFields({ + postType: NAVIGATION_POST_TYPE2 + }); + const [showAddModal, setShowAddModal] = (0, import_element59.useState)(false); + const editAction = useEditNavigationAction(); + const postTypeActions = usePostActions({ + postType: NAVIGATION_POST_TYPE2, + context: "list" + }); + const actions = (0, import_element59.useMemo)(() => { + return [ + editAction, + ...postTypeActions?.flatMap((action) => { + switch (action.id) { + // Skip revisions as Gutenberg does not support it in this context + case "view-post-revisions": + return []; + } + return [action]; + }) ?? [] + ]; + }, [editAction, postTypeActions]); + const selection = (searchParams.ids ?? []).map((id) => id.toString()) ?? []; + const firstNavigationId = (0, import_element59.useMemo)(() => { + if (navigationMenus && navigationMenus.length > 0) { + return navigationMenus[0].id.toString(); + } + return null; + }, [navigationMenus]); + if (selection.length === 0 && firstNavigationId) { + selection.push(firstNavigationId); + } + if (view.type === "list") { + selection.splice(1); + } + return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement( + page_default, + { + title: (0, import_i18n46.__)("Navigation"), + className: "navigation-page", + hasPadding: false, + actions: /* @__PURE__ */ React.createElement( + import_components49.Button, + { + variant: "primary", + size: "compact", + onClick: () => setShowAddModal(true) + }, + (0, import_i18n46.__)("Add New") + ) + }, + /* @__PURE__ */ React.createElement( + dataviews_default, + { + data: navigationMenus, + fields, + view, + onChangeView: updateView, + isLoading: isResolving || !fields, + actions, + paginationInfo: { + totalItems, + totalPages + }, + defaultLayouts: { + list: {} + }, + getItemId, + selection, + onReset: isModified ? resetToDefault : false, + onChangeSelection: (items) => { + navigate({ + search: { + ...searchParams, + ids: items.length > 0 ? items.map((id) => Number(id)) : void 0 + } + }); + } + } + ) + ), showAddModal && /* @__PURE__ */ React.createElement( + AddNavigationModal, + { + closeModal: () => setShowAddModal(false) + } + )); +} +var stage = NavigationList; +export { + stage +}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.development.js: + (** + * @license React + * use-sync-external-store-shim.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/navigation-list/content.min.asset.php b/src/wp-includes/build/routes/navigation-list/content.min.asset.php new file mode 100644 index 0000000000000..c919e50586a07 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-list/content.min.asset.php @@ -0,0 +1 @@ + array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-warning'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'a885dc9fca8de5745946'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/navigation-list/content.min.js b/src/wp-includes/build/routes/navigation-list/content.min.js new file mode 100644 index 0000000000000..e48ff26ec5b51 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-list/content.min.js @@ -0,0 +1,14 @@ +var wh=Object.create;var pc=Object.defineProperty;var yh=Object.getOwnPropertyDescriptor;var Sh=Object.getOwnPropertyNames;var Ch=Object.getPrototypeOf,_h=Object.prototype.hasOwnProperty;var De=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Eh=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Sh(e))!_h.call(t,n)&&n!==r&&pc(t,n,{get:()=>e[n],enumerable:!(o=yh(e,n))||o.enumerable});return t};var c=(t,e,r)=>(r=t!=null?wh(Ch(t)):{},Eh(e||!t||!t.__esModule?pc(r,"default",{value:t,enumerable:!0}):r,t));var Is=De((jy,vc)=>{vc.exports=window.wp.coreData});var j=De((Wy,gc)=>{gc.exports=window.wp.element});var U=De((zy,hc)=>{hc.exports=window.wp.i18n});var G=De((Gy,bc)=>{bc.exports=window.wp.components});var V=De((qy,xc)=>{xc.exports=window.ReactJSXRuntime});var br=De((a1,Vc)=>{Vc.exports=window.wp.data});var Ts=De((s1,Nc)=>{Nc.exports=window.wp.preferences});var Et=De((w1,kc)=>{kc.exports=window.wp.compose});var le=De((y1,Mc)=>{Mc.exports=window.React});var Qc=De(($1,Xc)=>{Xc.exports=window.ReactDOM});var ef=De(Jc=>{"use strict";var Bo=le();function zh(t,e){return t===e&&(t!==0||1/t===1/e)||t!==t&&e!==e}var Gh=typeof Object.is=="function"?Object.is:zh,qh=Bo.useState,Yh=Bo.useEffect,Uh=Bo.useLayoutEffect,$h=Bo.useDebugValue;function Kh(t,e){var r=e(),o=qh({inst:{value:r,getSnapshot:e}}),n=o[0].inst,i=o[1];return Uh(function(){n.value=r,n.getSnapshot=e,Ws(n)&&i({inst:n})},[t,r,e]),Yh(function(){return Ws(n)&&i({inst:n}),t(function(){Ws(n)&&i({inst:n})})},[t]),$h(r),r}function Ws(t){var e=t.getSnapshot;t=t.value;try{var r=e();return!Gh(t,r)}catch{return!0}}function Zh(t,e){return e()}var Xh=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Zh:Kh;Jc.useSyncExternalStore=Bo.useSyncExternalStore!==void 0?Bo.useSyncExternalStore:Xh});var rf=De((Z1,tf)=>{"use strict";tf.exports=ef()});var ye=De((J1,nf)=>{nf.exports=window.wp.primitives});var Il=De((KS,af)=>{af.exports=window.wp.privateApis});var Tl=De((nC,vf)=>{vf.exports=window.wp.keycodes});var Xm=De((PO,Na)=>{var $m={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u1EA4:"A",\u1EAE:"A",\u1EB2:"A",\u1EB4:"A",\u1EB6:"A",\u00C6:"AE",\u1EA6:"A",\u1EB0:"A",\u0202:"A",\u1EA2:"A",\u1EA0:"A",\u1EA8:"A",\u1EAA:"A",\u1EAC:"A",\u00C7:"C",\u1E08:"C",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u1EBE:"E",\u1E16:"E",\u1EC0:"E",\u1E14:"E",\u1E1C:"E",\u0206:"E",\u1EBA:"E",\u1EBC:"E",\u1EB8:"E",\u1EC2:"E",\u1EC4:"E",\u1EC6:"E",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u1E2E:"I",\u020A:"I",\u1EC8:"I",\u1ECA:"I",\u00D0:"D",\u00D1:"N",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u1ED0:"O",\u1E4C:"O",\u1E52:"O",\u020E:"O",\u1ECE:"O",\u1ECC:"O",\u1ED4:"O",\u1ED6:"O",\u1ED8:"O",\u1EDC:"O",\u1EDE:"O",\u1EE0:"O",\u1EDA:"O",\u1EE2:"O",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u1EE6:"U",\u1EE4:"U",\u1EEC:"U",\u1EEE:"U",\u1EF0:"U",\u00DD:"Y",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u1EA5:"a",\u1EAF:"a",\u1EB3:"a",\u1EB5:"a",\u1EB7:"a",\u00E6:"ae",\u1EA7:"a",\u1EB1:"a",\u0203:"a",\u1EA3:"a",\u1EA1:"a",\u1EA9:"a",\u1EAB:"a",\u1EAD:"a",\u00E7:"c",\u1E09:"c",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u1EBF:"e",\u1E17:"e",\u1EC1:"e",\u1E15:"e",\u1E1D:"e",\u0207:"e",\u1EBB:"e",\u1EBD:"e",\u1EB9:"e",\u1EC3:"e",\u1EC5:"e",\u1EC7:"e",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u1E2F:"i",\u020B:"i",\u1EC9:"i",\u1ECB:"i",\u00F0:"d",\u00F1:"n",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u1ED1:"o",\u1E4D:"o",\u1E53:"o",\u020F:"o",\u1ECF:"o",\u1ECD:"o",\u1ED5:"o",\u1ED7:"o",\u1ED9:"o",\u1EDD:"o",\u1EDF:"o",\u1EE1:"o",\u1EDB:"o",\u1EE3:"o",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u1EE7:"u",\u1EE5:"u",\u1EED:"u",\u1EEF:"u",\u1EF1:"u",\u00FD:"y",\u00FF:"y",\u0100:"A",\u0101:"a",\u0102:"A",\u0103:"a",\u0104:"A",\u0105:"a",\u0106:"C",\u0107:"c",\u0108:"C",\u0109:"c",\u010A:"C",\u010B:"c",\u010C:"C",\u010D:"c",C\u0306:"C",c\u0306:"c",\u010E:"D",\u010F:"d",\u0110:"D",\u0111:"d",\u0112:"E",\u0113:"e",\u0114:"E",\u0115:"e",\u0116:"E",\u0117:"e",\u0118:"E",\u0119:"e",\u011A:"E",\u011B:"e",\u011C:"G",\u01F4:"G",\u011D:"g",\u01F5:"g",\u011E:"G",\u011F:"g",\u0120:"G",\u0121:"g",\u0122:"G",\u0123:"g",\u0124:"H",\u0125:"h",\u0126:"H",\u0127:"h",\u1E2A:"H",\u1E2B:"h",\u0128:"I",\u0129:"i",\u012A:"I",\u012B:"i",\u012C:"I",\u012D:"i",\u012E:"I",\u012F:"i",\u0130:"I",\u0131:"i",\u0132:"IJ",\u0133:"ij",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u1E30:"K",\u1E31:"k",K\u0306:"K",k\u0306:"k",\u0139:"L",\u013A:"l",\u013B:"L",\u013C:"l",\u013D:"L",\u013E:"l",\u013F:"L",\u0140:"l",\u0141:"l",\u0142:"l",\u1E3E:"M",\u1E3F:"m",M\u0306:"M",m\u0306:"m",\u0143:"N",\u0144:"n",\u0145:"N",\u0146:"n",\u0147:"N",\u0148:"n",\u0149:"n",N\u0306:"N",n\u0306:"n",\u014C:"O",\u014D:"o",\u014E:"O",\u014F:"o",\u0150:"O",\u0151:"o",\u0152:"OE",\u0153:"oe",P\u0306:"P",p\u0306:"p",\u0154:"R",\u0155:"r",\u0156:"R",\u0157:"r",\u0158:"R",\u0159:"r",R\u0306:"R",r\u0306:"r",\u0212:"R",\u0213:"r",\u015A:"S",\u015B:"s",\u015C:"S",\u015D:"s",\u015E:"S",\u0218:"S",\u0219:"s",\u015F:"s",\u0160:"S",\u0161:"s",\u0162:"T",\u0163:"t",\u021B:"t",\u021A:"T",\u0164:"T",\u0165:"t",\u0166:"T",\u0167:"t",T\u0306:"T",t\u0306:"t",\u0168:"U",\u0169:"u",\u016A:"U",\u016B:"u",\u016C:"U",\u016D:"u",\u016E:"U",\u016F:"u",\u0170:"U",\u0171:"u",\u0172:"U",\u0173:"u",\u0216:"U",\u0217:"u",V\u0306:"V",v\u0306:"v",\u0174:"W",\u0175:"w",\u1E82:"W",\u1E83:"w",X\u0306:"X",x\u0306:"x",\u0176:"Y",\u0177:"y",\u0178:"Y",Y\u0306:"Y",y\u0306:"y",\u0179:"Z",\u017A:"z",\u017B:"Z",\u017C:"z",\u017D:"Z",\u017E:"z",\u017F:"s",\u0192:"f",\u01A0:"O",\u01A1:"o",\u01AF:"U",\u01B0:"u",\u01CD:"A",\u01CE:"a",\u01CF:"I",\u01D0:"i",\u01D1:"O",\u01D2:"o",\u01D3:"U",\u01D4:"u",\u01D5:"U",\u01D6:"u",\u01D7:"U",\u01D8:"u",\u01D9:"U",\u01DA:"u",\u01DB:"U",\u01DC:"u",\u1EE8:"U",\u1EE9:"u",\u1E78:"U",\u1E79:"u",\u01FA:"A",\u01FB:"a",\u01FC:"AE",\u01FD:"ae",\u01FE:"O",\u01FF:"o",\u00DE:"TH",\u00FE:"th",\u1E54:"P",\u1E55:"p",\u1E64:"S",\u1E65:"s",X\u0301:"X",x\u0301:"x",\u0403:"\u0413",\u0453:"\u0433",\u040C:"\u041A",\u045C:"\u043A",A\u030B:"A",a\u030B:"a",E\u030B:"E",e\u030B:"e",I\u030B:"I",i\u030B:"i",\u01F8:"N",\u01F9:"n",\u1ED2:"O",\u1ED3:"o",\u1E50:"O",\u1E51:"o",\u1EEA:"U",\u1EEB:"u",\u1E80:"W",\u1E81:"w",\u1EF2:"Y",\u1EF3:"y",\u0200:"A",\u0201:"a",\u0204:"E",\u0205:"e",\u0208:"I",\u0209:"i",\u020C:"O",\u020D:"o",\u0210:"R",\u0211:"r",\u0214:"U",\u0215:"u",B\u030C:"B",b\u030C:"b",\u010C\u0323:"C",\u010D\u0323:"c",\u00CA\u030C:"E",\u00EA\u030C:"e",F\u030C:"F",f\u030C:"f",\u01E6:"G",\u01E7:"g",\u021E:"H",\u021F:"h",J\u030C:"J",\u01F0:"j",\u01E8:"K",\u01E9:"k",M\u030C:"M",m\u030C:"m",P\u030C:"P",p\u030C:"p",Q\u030C:"Q",q\u030C:"q",\u0158\u0329:"R",\u0159\u0329:"r",\u1E66:"S",\u1E67:"s",V\u030C:"V",v\u030C:"v",W\u030C:"W",w\u030C:"w",X\u030C:"X",x\u030C:"x",Y\u030C:"Y",y\u030C:"y",A\u0327:"A",a\u0327:"a",B\u0327:"B",b\u0327:"b",\u1E10:"D",\u1E11:"d",\u0228:"E",\u0229:"e",\u0190\u0327:"E",\u025B\u0327:"e",\u1E28:"H",\u1E29:"h",I\u0327:"I",i\u0327:"i",\u0197\u0327:"I",\u0268\u0327:"i",M\u0327:"M",m\u0327:"m",O\u0327:"O",o\u0327:"o",Q\u0327:"Q",q\u0327:"q",U\u0327:"U",u\u0327:"u",X\u0327:"X",x\u0327:"x",Z\u0327:"Z",z\u0327:"z",\u0439:"\u0438",\u0419:"\u0418",\u0451:"\u0435",\u0401:"\u0415"},Km=Object.keys($m).join("|"),e0=new RegExp(Km,"g"),t0=new RegExp(Km,"");function r0(t){return $m[t]}var Zm=function(t){return t.replace(e0,r0)},o0=function(t){return!!t.match(t0)};Na.exports=Zm;Na.exports.has=o0;Na.exports.remove=Zm});var lp=De((DO,sp)=>{"use strict";sp.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var o,n,i;if(Array.isArray(e)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(!t(e[n],r[n]))return!1;return!0}if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;for(n of e.entries())if(!t(n[1],r.get(n[0])))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(e[n]!==r[n])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(i=Object.keys(e),o=i.length,o!==Object.keys(r).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=o;n--!==0;){var a=i[n];if(!t(e[a],r[a]))return!1}return!0}return e!==e&&r!==r}});var No=De((eV,jp)=>{jp.exports=window.wp.date});var mv=De((KV,dv)=>{dv.exports=window.wp.warning});var rh=De((s3,th)=>{th.exports=window.wp.editor});var lh=De((v3,sh)=>{sh.exports=window.wp.notices});var dh=c(Is()),fo=c(j());import{useNavigate as Ry,useSearch as Vy}from"@wordpress/route";function wc(t){var e,r,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e(0,Sc.jsx)(o,{ref:i,className:W("admin-ui-navigable-region",e),"aria-label":r,role:"region",tabIndex:"-1",...n,children:t}));Cc.displayName="NavigableRegion";var _c=Cc;var Mr=c(G(),1);var Ec=c(G(),1),{Fill:Pc,Slot:Ac}=(0,Ec.createSlotFill)("SidebarToggle");var hr=c(V(),1);function Ic({breadcrumbs:t,badges:e,title:r,subTitle:o,actions:n,showSidebarToggle:i=!0}){return(0,hr.jsxs)(Mr.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,hr.jsxs)(Mr.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,hr.jsxs)(Mr.__experimentalHStack,{spacing:2,justify:"left",children:[i&&(0,hr.jsx)(Ac,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),r&&(0,hr.jsx)(Mr.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:r}),t,e]}),(0,hr.jsx)(Mr.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:n})]}),o&&(0,hr.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var Cn=c(V(),1);function Oc({breadcrumbs:t,badges:e,title:r,subTitle:o,children:n,className:i,actions:a,hasPadding:l=!1,showSidebarToggle:s=!0}){let u=W("admin-ui-page",i);return(0,Cn.jsxs)(_c,{className:u,ariaLabel:r,children:[(r||t||e)&&(0,Cn.jsx)(Ic,{breadcrumbs:t,badges:e,title:r,subTitle:o,actions:a,showSidebarToggle:s}),l?(0,Cn.jsx)("div",{className:"admin-ui-page__content has-padding",children:n}):n]})}Oc.SidebarToggleFill=Pc;var Os=Oc;var dc=c(U());var Tc=Object.prototype.hasOwnProperty;function Rc(t,e,r){for(r of t.keys())if(Fr(r,e))return r}function Fr(t,e){var r,o,n;if(t===e)return!0;if(t&&e&&(r=t.constructor)===e.constructor){if(r===Date)return t.getTime()===e.getTime();if(r===RegExp)return t.toString()===e.toString();if(r===Array){if((o=t.length)===e.length)for(;o--&&Fr(t[o],e[o]););return o===-1}if(r===Set){if(t.size!==e.size)return!1;for(o of t)if(n=o,n&&typeof n=="object"&&(n=Rc(e,n),!n)||!e.has(n))return!1;return!0}if(r===Map){if(t.size!==e.size)return!1;for(o of t)if(n=o[0],n&&typeof n=="object"&&(n=Rc(e,n),!n)||!Fr(o[1],e.get(n)))return!1;return!0}if(r===ArrayBuffer)t=new Uint8Array(t),e=new Uint8Array(e);else if(r===DataView){if((o=t.byteLength)===e.byteLength)for(;o--&&t.getInt8(o)===e.getInt8(o););return o===-1}if(ArrayBuffer.isView(t)){if((o=t.byteLength)===e.byteLength)for(;o--&&t[o]===e[o];);return o===-1}if(!r||typeof t=="object"){o=0;for(r in t)if(Tc.call(t,r)&&++o&&!Tc.call(e,r)||!(r in e)||!Fr(t[r],e[r]))return!1;return Object.keys(e).length===o}}return t!==t&&e!==e}var _n=c(j(),1),pi=c(br(),1),Ns=c(Ts(),1);function Rs(t,e,r){return`dataviews-${t}-${e}-${r}`}var Dc=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function Vs(t,e,r){if(!e)return t;let o=t;for(let n of Dc)n in e&&(o={...o,[n]:e[n]});if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(a=>a.field)),i=(t.filters??[]).filter(a=>!n.has(a.field));o={...o,filters:[...i,...e.filters]}}return e.sort&&r&&t.sort?.field===r.sort?.field&&t.sort?.direction===r.sort?.direction&&(o={...o,sort:e.sort}),e.layout&&(o={...o,layout:{...o.layout,...e.layout}}),e.groupBy&&(o={...o,groupBy:e.groupBy}),o}function mi(t,e,r){if(!e)return t;let o=t;for(let n of Dc)if(n in e){let{[n]:i,...a}=o;o=a}if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(i=>i.field));o={...o,filters:(t.filters??[]).filter(i=>!n.has(i.field))}}if(e.sort&&t.sort?.field===e.sort.field&&t.sort?.direction===e.sort.direction&&(o={...o,sort:r?.sort}),e.layout&&"layout"in o&&o.layout){let n={...o.layout};for(let i of Object.keys(e.layout))delete n[i];o={...o,layout:Object.keys(n).length>0?n:void 0}}if(e.groupBy&&"groupBy"in o){let{groupBy:n,...i}=o;o=i}return o}function Ah(t,e){let r={...t};for(let o of e)delete r[o];return r}function Ds(t){let{kind:e,name:r,slug:o,defaultView:n,activeViewOverrides:i,queryParams:a,onChangeQueryParams:l}=t,s=Rs(e,r,o),u=(0,pi.useSelect)(S=>S(Ns.store).get("core/views",s),[s]),{set:f}=(0,pi.useDispatch)(Ns.store),m=u??n,d=Number(a?.page??m.page??1),p=a?.search??m.search??"",v=(0,_n.useMemo)(()=>Vs({...m,page:d,search:p},i,n),[m,d,p,i,n]),y=!!u,g=(0,_n.useCallback)(S=>{let A={page:S?.page,search:S?.search},T=mi(Ah(S,["page","search"]),i,n);l&&!Fr(A,{page:d,search:p})&&l(A);let O=mi(m,i,n),k=mi(n,i,n);Fr(O,T)||(Fr(T,k)?f("core/views",s,void 0):f("core/views",s,T))},[l,d,p,m,n,i,f,s]),b=(0,_n.useCallback)(()=>{f("core/views",s,void 0)},[s,f]);return{view:v,isModified:y,updateView:g,resetToDefault:b}}var Ih=c(br(),1),Oh=c(Ts(),1);var bt=c(j(),1),Es=c(Et(),1);var Lc=c(le(),1),Fc={};function ks(t,e){let r=Lc.useRef(Fc);return r.current===Fc&&(r.current=t(e)),r}function Ms(t,...e){let r=new URL(`https://base-ui.com/production-error/${t}`);return e.forEach(o=>r.searchParams.append("args[]",o)),`Base UI error #${t}; visit ${r} for the full message.`}var gi=c(le(),1);function Fs(t,e,r,o){let n=ks(Hc).current;return Rh(n,t,e,r,o)&&jc(n,[t,e,r,o]),n.callback}function Bc(t){let e=ks(Hc).current;return Vh(e,t)&&jc(e,t),e.callback}function Hc(){return{callback:null,cleanup:null,refs:[]}}function Rh(t,e,r,o,n){return t.refs[0]!==e||t.refs[1]!==r||t.refs[2]!==o||t.refs[3]!==n}function Vh(t,e){return t.refs.length!==e.length||t.refs.some((r,o)=>r!==e[o])}function jc(t,e){if(t.refs=e,e.every(r=>r==null)){t.callback=null;return}t.callback=r=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),r!=null){let o=Array(e.length).fill(null);for(let n=0;n{for(let n=0;n=t}function Ls(t){if(!Gc.isValidElement(t))return null;let e=t,r=e.props;return(zc(19)?r?.ref:e.ref)??null}function En(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function qc(t,e){let r={};for(let o in t){let n=t[o];if(e?.hasOwnProperty(o)){let i=e[o](n);i!=null&&Object.assign(r,i);continue}n===!0?r[`data-${o.toLowerCase()}`]="":n&&(r[`data-${o.toLowerCase()}`]=n.toString())}return r}function Yc(t,e){return typeof t=="function"?t(e):t}function Uc(t,e){return typeof t=="function"?t(e):t}var An={};function vi(t,e,r,o,n){let i={...Bs(t,An)};return e&&(i=Pn(i,e)),r&&(i=Pn(i,r)),o&&(i=Pn(i,o)),n&&(i=Pn(i,n)),i}function $c(t){if(t.length===0)return An;if(t.length===1)return Bs(t[0],An);let e={...Bs(t[0],An)};for(let r=1;r=65&&n<=90&&(typeof e=="function"||typeof e>"u")}function Kc(t){return typeof t=="function"}function Bs(t,e){return Kc(t)?t(e):t??An}function Mh(t,e){return e?t?r=>{if(Lh(r)){let n=r;Fh(n);let i=e(n);return n.baseUIHandlerPrevented||t?.(n),i}let o=e(r);return t?.(r),o}:e:t}function Fh(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Hs(t,e){return e?t?e+" "+t:e:t}function Lh(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}var Bh=Object.freeze([]),Lr=Object.freeze({});var js=c(le(),1);function Zc(t,e,r={}){let o=e.render,n=Hh(e,r);if(r.enabled===!1)return null;let i=r.state??Lr;return jh(t,o,n,i)}function Hh(t,e={}){let{className:r,style:o,render:n}=t,{state:i=Lr,ref:a,props:l,stateAttributesMapping:s,enabled:u=!0}=e,f=u?Yc(r,i):void 0,m=u?Uc(o,i):void 0,d=u?qc(i,s):Lr,p=u?En(d,Array.isArray(l)?$c(l):l)??Lr:Lr;return typeof document<"u"&&(u?Array.isArray(a)?p.ref=Bc([p.ref,Ls(n),...a]):p.ref=Fs(p.ref,Ls(n),a):Fs(null,null)),u?(f!==void 0&&(p.className=Hs(p.className,f)),m!==void 0&&(p.style=En(p.style,m)),p):Lr}function jh(t,e,r,o){if(e){if(typeof e=="function")return e(r,o);let n=vi(r,e.props);return n.ref=r.ref,gi.cloneElement(e,n)}if(t&&typeof t=="string")return Wh(t,r);throw new Error(Ms(8))}function Wh(t,e){return t==="button"?(0,js.createElement)("button",{type:"button",...e,key:e.key}):t==="img"?(0,js.createElement)("img",{alt:"",...e,key:e.key}):gi.createElement(t,e)}function of(t){return Zc(t.defaultTagName??"div",t,t)}var hi=c(ye(),1),zs=c(V(),1),Gs=(0,zs.jsx)(hi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,zs.jsx)(hi.Path,{d:"m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z"})});var bi=c(ye(),1),qs=c(V(),1),Ys=(0,qs.jsx)(bi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,qs.jsx)(bi.Path,{d:"M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z"})});var xi=c(ye(),1),Us=c(V(),1),$s=(0,Us.jsx)(xi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Us.jsx)(xi.Path,{d:"m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z"})});var wi=c(ye(),1),Ks=c(V(),1),Zs=(0,Ks.jsx)(wi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Ks.jsx)(wi.Path,{d:"M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z"})});var yi=c(ye(),1),Xs=c(V(),1),Si=(0,Xs.jsx)(yi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Xs.jsx)(yi.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z"})});var Ci=c(ye(),1),Qs=c(V(),1),_i=(0,Qs.jsx)(Ci.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Qs.jsx)(Ci.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z"})});var Ei=c(ye(),1),Js=c(V(),1),In=(0,Js.jsx)(Ei.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Js.jsx)(Ei.Path,{d:"M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z"})});var Pi=c(ye(),1),el=c(V(),1),On=(0,el.jsx)(Pi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,el.jsx)(Pi.Path,{d:"M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"})});var Ai=c(ye(),1),tl=c(V(),1),rl=(0,tl.jsx)(Ai.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,tl.jsx)(Ai.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z"})});var Ii=c(ye(),1),ol=c(V(),1),nl=(0,ol.jsx)(Ii.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,ol.jsx)(Ii.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z"})});var Oi=c(ye(),1),il=c(V(),1),al=(0,il.jsx)(Oi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,il.jsx)(Oi.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z"})});var Ti=c(ye(),1),sl=c(V(),1),ll=(0,sl.jsx)(Ti.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,sl.jsx)(Ti.Path,{d:"M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"})});var Ri=c(ye(),1),ul=c(V(),1),cl=(0,ul.jsx)(Ri.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,ul.jsx)(Ri.Path,{d:"M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})});var Vi=c(ye(),1),fl=c(V(),1),Tn=(0,fl.jsx)(Vi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,fl.jsx)(Vi.Path,{d:"M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z"})});var Ni=c(ye(),1),dl=c(V(),1),ml=(0,dl.jsx)(Ni.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,dl.jsx)(Ni.Path,{d:"M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z"})});var Di=c(ye(),1),pl=c(V(),1),vl=(0,pl.jsx)(Di.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,pl.jsx)(Di.Path,{d:"M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z"})});var ki=c(ye(),1),gl=c(V(),1),Rn=(0,gl.jsx)(ki.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,gl.jsx)(ki.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})});var Mi=c(ye(),1),hl=c(V(),1),Fi=(0,hl.jsx)(Mi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,hl.jsx)(Mi.Path,{d:"M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z"})});var Li=c(ye(),1),bl=c(V(),1),xl=(0,bl.jsx)(Li.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,bl.jsx)(Li.Path,{d:"m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z"})});var Bi=c(ye(),1),wl=c(V(),1),Hi=(0,wl.jsx)(Bi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,wl.jsx)(Bi.Path,{d:"M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z"})});var ji=c(ye(),1),yl=c(V(),1),Sl=(0,yl.jsx)(ji.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,yl.jsx)(ji.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z"})});var Wi=c(ye(),1),Cl=c(V(),1),_l=(0,Cl.jsx)(Wi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Cl.jsx)(Wi.Path,{d:"M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"})});var zi=c(ye(),1),El=c(V(),1),Pl=(0,El.jsx)(zi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,El.jsx)(zi.Path,{d:"M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z"})});var Gi=c(ye(),1),Al=c(V(),1),Vn=(0,Al.jsx)(Gi.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Al.jsx)(Gi.Path,{d:"M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z"})});var sf=c(j(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='71d20935c2']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","71d20935c2"),t.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")),document.head.appendChild(t)}var Qh={stack:"_19ce0419607e1896__stack"},Jh={xs:"var(--wpds-dimension-gap-xs, 4px)",sm:"var(--wpds-dimension-gap-sm, 8px)",md:"var(--wpds-dimension-gap-md, 12px)",lg:"var(--wpds-dimension-gap-lg, 16px)",xl:"var(--wpds-dimension-gap-xl, 24px)","2xl":"var(--wpds-dimension-gap-2xl, 32px)","3xl":"var(--wpds-dimension-gap-3xl, 40px)"},F=(0,sf.forwardRef)(function({direction:e,gap:r,align:o,justify:n,wrap:i,render:a,...l},s){let u={gap:r&&Jh[r],alignItems:o,justifyContent:n,flexDirection:e,flexWrap:i};return of({render:a,ref:s,props:vi(l,{style:u,className:Qh.stack})})});var Ki=c(j(),1);var Ol=c(U(),1);var Ce="isAny",_e="isNone",nt="isAll",it="isNotAll",ft="between",dt="inThePast",xt="over",Ee="is",Pe="isNot",Br="lessThan",Hr="greaterThan",jr="lessThanOrEqual",Wr="greaterThanOrEqual",zr="before",Gr="after",qr="beforeInc",Yr="afterInc",Ut="contains",$t="notContains",Kt="startsWith",Ur="on",$r="notOn",qi=["asc","desc"],lf={asc:"\u2191",desc:"\u2193"},Yi={asc:"ascending",desc:"descending"},Ui={asc:(0,Ol.__)("Sort ascending"),desc:(0,Ol.__)("Sort descending")},uf={asc:Zs,desc:Gs},Ho="table",$i="grid",cf="list",ff="activity",df="pickerGrid",mf="pickerTable";var pf=(0,Ki.createContext)({view:{type:Ho},onChangeView:()=>{},fields:[],data:[],paginationInfo:{totalItems:0,totalPages:0},selection:[],onChangeSelection:()=>{},setOpenedFilter:()=>{},openedFilter:null,getItemId:t=>t.id,isItemClickable:()=>!0,renderItemLink:void 0,containerWidth:0,containerRef:(0,Ki.createRef)(),resizeObserverRef:()=>{},defaultLayouts:{list:{},grid:{},table:{}},filters:[],isShowingFilter:!1,setIsShowingFilter:()=>{},hasInitiallyLoaded:!1,hasInfiniteScrollHandler:!1,config:{perPageSizes:[]}});pf.displayName="DataViewsContext";var q=pf;var Sr=c(U(),1);var bo=c(U(),1),oa=c(G(),1),wt=c(j(),1),Ml=c(Tl(),1);var gf=c(G(),1),hf=c(U(),1),bf=c(V(),1);function Kr({selection:t,onChangeSelection:e,item:r,getItemId:o,titleField:n,disabled:i,...a}){let l=o(r),s=!i&&t.includes(l),u=n?.getValue?.({item:r})||(0,hf.__)("(no title)");return(0,bf.jsx)(gf.CheckboxControl,{className:"dataviews-selection-checkbox","aria-label":u,"aria-disabled":i,checked:s,onChange:()=>{i||e(t.includes(l)?t.filter(f=>l!==f):[...t,l])},...a})}var go=c(G(),1),yf=c(U(),1),Wo=c(j(),1);var Sf=c(br(),1),Rl=c(Et(),1);var xf=c(Il(),1),{lock:aC,unlock:K}=(0,xf.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/dataviews");var he=c(V(),1),{Menu:jo,kebabCase:eb}=K(go.privateApis);function tb({action:t,onClick:e,items:r,variant:o}){let n=typeof t.label=="string"?t.label:t.label(r);return(0,he.jsx)(go.Button,{disabled:!!t.disabled,accessibleWhenDisabled:!0,size:"compact",variant:o,onClick:e,children:n})}function rb({action:t,onClick:e,items:r}){let o=typeof t.label=="string"?t.label:t.label(r);return(0,he.jsx)(jo.Item,{disabled:t.disabled,onClick:e,children:(0,he.jsx)(jo.ItemLabel,{children:o})})}function ho({action:t,items:e,closeModal:r}){let o=typeof t.label=="string"?t.label:t.label(e),n=typeof t.modalHeader=="function"?t.modalHeader(e):t.modalHeader;return(0,he.jsx)(go.Modal,{title:n||o,__experimentalHideHeader:!!t.hideModalHeader,onRequestClose:r,focusOnMount:t.modalFocusOnMount??!0,size:t.modalSize||"medium",overlayClassName:`dataviews-action-modal dataviews-action-modal__${eb(t.id)}`,children:(0,he.jsx)(t.RenderModal,{items:e,closeModal:r})})}function Vl({actions:t,item:e,registry:r,setActiveModalAction:o}){let{primaryActions:n,regularActions:i}=(0,Wo.useMemo)(()=>t.reduce((l,s)=>((s.isPrimary?l.primaryActions:l.regularActions).push(s),l),{primaryActions:[],regularActions:[]}),[t]),a=l=>l.map(s=>(0,he.jsx)(rb,{action:s,onClick:()=>{if("RenderModal"in s){o(s);return}s.callback([e],{registry:r})},items:[e]},s.id));return(0,he.jsxs)(jo.Group,{children:[a(n),a(i)]})}function zo({item:t,actions:e,isCompact:r}){let o=(0,Sf.useRegistry)(),{primaryActions:n,eligibleActions:i}=(0,Wo.useMemo)(()=>{let l=e.filter(u=>!u.isEligible||u.isEligible(t));return{primaryActions:l.filter(u=>u.isPrimary),eligibleActions:l}},[e,t]),a=(0,Rl.useViewportMatch)("medium","<");return r?(0,he.jsx)(wf,{item:t,actions:i,isSmall:!0,registry:o}):(0,he.jsxs)(F,{direction:"row",justify:"flex-end",className:"dataviews-item-actions",style:{flexShrink:0,width:"auto"},children:[(0,he.jsx)(Nl,{item:t,actions:n,registry:o}),(n.lengthi(null)})]})}function Nl({item:t,actions:e,registry:r,buttonVariant:o}){let[n,i]=(0,Wo.useState)(null);return(0,Rl.useViewportMatch)("medium","<")||!Array.isArray(e)||e.length===0?null:(0,he.jsxs)(he.Fragment,{children:[e.map(l=>(0,he.jsx)(tb,{action:l,onClick:()=>{if("RenderModal"in l){i(l);return}l.callback([t],{registry:r})},items:[t],variant:o},l.id)),!!n&&(0,he.jsx)(ho,{action:n,items:[t],closeModal:()=>i(null)})]})}var Go=c(G(),1),Zi=c(U(),1),at=c(j(),1),Pf=c(br(),1);var Dl=c(Et(),1);var Zr=c(U(),1);function Cf(t,e,r){return t>0?(0,Zr.sprintf)((0,Zr._n)("%d Item selected","%d Items selected",t),t):r>e?(0,Zr.sprintf)((0,Zr._n)("%1$d of %2$d Item","%1$d of %2$d Items",r),e,r):(0,Zr.sprintf)((0,Zr._n)("%d Item","%d Items",e),e)}var ze=c(V(),1);function ob({action:t,items:e,ActionTriggerComponent:r}){let[o,n]=(0,at.useState)(!1);return(0,ze.jsxs)(ze.Fragment,{children:[(0,ze.jsx)(r,{...{action:t,onClick:()=>{n(!0)},items:e}}),o&&(0,ze.jsx)(ho,{action:t,items:e,closeModal:()=>n(!1)})]})}function Xi(t,e){return(0,at.useMemo)(()=>t.some(r=>r.supportsBulk&&(!r.isEligible||r.isEligible(e))),[t,e])}function qo(t,e){return(0,at.useMemo)(()=>e.some(r=>t.some(o=>o.supportsBulk&&(!o.isEligible||o.isEligible(r)))),[t,e])}function Nn({selection:t,onChangeSelection:e,data:r,actions:o,getItemId:n}){let i=(0,at.useMemo)(()=>r.filter(s=>o.some(u=>u.supportsBulk&&(!u.isEligible||u.isEligible(s)))),[r,o]),a=r.filter(s=>t.includes(n(s))&&i.includes(s)),l=a.length===i.length;return(0,ze.jsx)(Go.CheckboxControl,{className:"dataviews-view-table-selection-checkbox",checked:l,indeterminate:!l&&!!a.length,onChange:()=>{e(l?[]:i.map(s=>n(s)))},"aria-label":l?(0,Zi.__)("Deselect all"):(0,Zi.__)("Select all")})}function _f({action:t,onClick:e,isBusy:r,items:o}){let n=typeof t.label=="string"?t.label:t.label(o);return(0,Dl.useViewportMatch)("medium","<")?(0,ze.jsx)(Go.Button,{disabled:r,accessibleWhenDisabled:!0,label:n,icon:t.icon,size:"compact",onClick:e,isBusy:r}):(0,ze.jsx)(Go.Button,{disabled:r,accessibleWhenDisabled:!0,size:"compact",onClick:e,isBusy:r,children:n})}var Af=[];function nb({action:t,selectedItems:e,actionInProgress:r,setActionInProgress:o}){let n=(0,Pf.useRegistry)(),i=(0,at.useMemo)(()=>e.filter(a=>!t.isEligible||t.isEligible(a)),[t,e]);return"RenderModal"in t?(0,ze.jsx)(ob,{action:t,items:i,ActionTriggerComponent:_f},t.id):(0,ze.jsx)(_f,{action:t,onClick:async()=>{o(t.id),await t.callback(e,{registry:n}),o(null)},items:i,isBusy:r===t.id},t.id)}function Ef(t,e,r,o,n,i,a,l,s,u){let f=Cf(o.length,t.length,u.totalItems);return(0,ze.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__container",gap:"md",align:"center",children:[(0,ze.jsx)(Nn,{selection:o,onChangeSelection:s,data:t,actions:e,getItemId:r}),(0,ze.jsx)("span",{className:"dataviews-bulk-actions-footer__item-count",children:f}),(0,ze.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__action-buttons",gap:"xs",children:[n.map(m=>(0,ze.jsx)(nb,{action:m,selectedItems:i,actionInProgress:a,setActionInProgress:l},m.id)),i.length>0&&(0,ze.jsx)(Go.Button,{icon:On,showTooltip:!0,tooltipPosition:"top",size:"compact",label:(0,Zi.__)("Cancel"),disabled:!!a,accessibleWhenDisabled:!1,onClick:()=>{s(Af)}})]})]})}function ib({selection:t,actions:e,onChangeSelection:r,data:o,getItemId:n,paginationInfo:i}){let[a,l]=(0,at.useState)(null),s=(0,at.useRef)(void 0),u=(0,Dl.useViewportMatch)("medium","<"),f=(0,at.useMemo)(()=>e.filter(v=>v.supportsBulk),[e]),m=(0,at.useMemo)(()=>o.filter(v=>f.some(y=>!y.isEligible||y.isEligible(v))),[o,f]),d=(0,at.useMemo)(()=>o.filter(v=>t.includes(n(v))&&m.includes(v)),[t,o,n,m]),p=(0,at.useMemo)(()=>e.filter(v=>v.supportsBulk&&(!u||v.icon)&&d.some(y=>!v.isEligible||v.isEligible(y))),[e,d,u]);if(a)s.current||(s.current=Ef(o,e,n,t,p,d,a,l,r,i));else return s.current&&(s.current=void 0),Ef(o,e,n,t,p,d,a,l,r,i);return s.current}function Qi(){let{data:t,selection:e,actions:r=Af,onChangeSelection:o,getItemId:n,paginationInfo:i}=(0,at.useContext)(q);return(0,ze.jsx)(ib,{selection:e,onChangeSelection:o,data:t,actions:r,getItemId:n,paginationInfo:i})}var xr=c(U(),1);var wr=c(G(),1),Xr=c(j(),1);function Ji(t,e){let r=[t?.titleField,t?.mediaField,t?.descriptionField].filter(Boolean);return e.filter(o=>!r.includes(o.id)&&o.type!=="media"&&o.enableHiding!==!1)}var X=c(V(),1),{Menu:ue}=K(wr.privateApis);function ab({children:t}){return Xr.Children.toArray(t).filter(Boolean).map((e,r)=>(0,X.jsxs)(Xr.Fragment,{children:[r>0&&(0,X.jsx)(ue.Separator,{}),e]},r))}var sb=(0,Xr.forwardRef)(function({fieldId:e,view:r,fields:o,onChangeView:n,onHide:i,setOpenedFilter:a,canMove:l=!0,canInsertLeft:s=!0,canInsertRight:u=!0},f){let m=r.fields??[],d=m?.indexOf(e),p=r.sort?.field===e,v=!1,y=!1,g=!1,b=[],S=o.find(C=>C.id===e),{setIsShowingFilter:A}=(0,Xr.useContext)(q);if(!S)return null;v=S.enableHiding!==!1,y=S.enableSorting!==!1;let T=S.header;if(b=!!S.filterBy&&S.filterBy?.operators||[],g=!r.filters?.some(C=>e===C.field)&&!!(S.hasElements||S.Edit)&&S.filterBy!==!1&&!S.filterBy?.isPrimary,!y&&!l&&!v&&!g)return T;let O=Ji(r,o).filter(C=>!m.includes(C.id)),k=(s||u)&&!!O.length,D=(0,xr.isRTL)();return(0,X.jsxs)(ue,{children:[(0,X.jsxs)(ue.TriggerButton,{render:(0,X.jsx)(wr.Button,{size:"compact",className:"dataviews-view-table-header-button",ref:f,variant:"tertiary"}),children:[T,r.sort&&p&&(0,X.jsx)("span",{"aria-hidden":"true",children:lf[r.sort.direction]})]}),(0,X.jsx)(ue.Popover,{style:{minWidth:"240px"},children:(0,X.jsxs)(ab,{children:[y&&(0,X.jsx)(ue.Group,{children:qi.map(C=>{let I=r.sort&&p&&r.sort.direction===C,N=`${e}-${C}`;return(0,X.jsx)(ue.RadioItem,{name:"view-table-sorting",value:N,checked:I,onChange:()=>{n({...r,sort:{field:e,direction:C},showLevels:!1})},children:(0,X.jsx)(ue.ItemLabel,{children:Ui[C]})},N)})}),g&&(0,X.jsx)(ue.Group,{children:(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:Tn}),onClick:()=>{a(e),A(!0),n({...r,page:1,filters:[...r.filters||[],{field:e,value:void 0,operator:b[0]}]})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,xr.__)("Add filter")})})}),(l||v||k)&&S&&(0,X.jsxs)(ue.Group,{children:[l&&(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:Ys}),disabled:D?d>=m.length-1:d<1,onClick:()=>{let C=D?d+1:d-1,I=[...m];I.splice(d,1),I.splice(C,0,e),n({...r,fields:I})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,xr.__)("Move left")})}),l&&(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:$s}),disabled:D?d<1:d>=m.length-1,onClick:()=>{let C=D?d-1:d+1,I=[...m];I.splice(d,1),I.splice(C,0,e),n({...r,fields:I})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,xr.__)("Move right")})}),s&&!!O.length&&(0,X.jsxs)(ue,{children:[(0,X.jsx)(ue.SubmenuTriggerItem,{children:(0,X.jsx)(ue.ItemLabel,{children:(0,xr.__)("Insert left")})}),(0,X.jsx)(ue.Popover,{children:O.map(C=>{let I=D?d+1:d;return(0,X.jsx)(ue.Item,{onClick:()=>{n({...r,fields:[...m.slice(0,I),C.id,...m.slice(I)]})},children:(0,X.jsx)(ue.ItemLabel,{children:C.label})},C.id)})})]}),u&&!!O.length&&(0,X.jsxs)(ue,{children:[(0,X.jsx)(ue.SubmenuTriggerItem,{children:(0,X.jsx)(ue.ItemLabel,{children:(0,xr.__)("Insert right")})}),(0,X.jsx)(ue.Popover,{children:O.map(C=>{let I=D?d:d+1;return(0,X.jsx)(ue.Item,{onClick:()=>{n({...r,fields:[...m.slice(0,I),C.id,...m.slice(I)]})},children:(0,X.jsx)(ue.ItemLabel,{children:C.label})},C.id)})})]}),v&&S&&(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:Vn}),onClick:()=>{i(S),n({...r,fields:m.filter(C=>C!==e)})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,xr.__)("Hide column")})})]})]})})]})}),lb=sb,Yo=lb;var If=c(j(),1),kl=c(V(),1);function ub({item:t,isItemClickable:e,onClickItem:r,className:o}){return!e(t)||!r?{className:o}:{className:o?`${o} ${o}--clickable`:void 0,role:"button",tabIndex:0,onClick:n=>{n.stopPropagation(),r(t)},onKeyDown:n=>{(n.key==="Enter"||n.key===""||n.key===" ")&&(n.stopPropagation(),r(t))}}}function Qr({item:t,isItemClickable:e,onClickItem:r,renderItemLink:o,className:n,children:i,...a}){if(!e(t))return(0,kl.jsx)("div",{className:n,...a,children:i});if(o){let s=o({item:t,className:`${n} ${n}--clickable`,...a,children:i});return(0,If.cloneElement)(s,{onClick:u=>{u.stopPropagation(),s.props.onClick&&s.props.onClick(u)},onKeyDown:u=>{(u.key==="Enter"||u.key===""||u.key===" ")&&(u.stopPropagation(),s.props.onKeyDown&&s.props.onKeyDown(u))}})}let l=ub({item:t,isItemClickable:e,onClickItem:r,className:n});return(0,kl.jsx)("div",{...l,...a,children:i})}var Zt=c(V(),1);function cb({item:t,level:e,titleField:r,mediaField:o,descriptionField:n,onClickItem:i,renderItemLink:a,isItemClickable:l}){return(0,Zt.jsxs)(F,{direction:"row",gap:"md",align:"flex-start",justify:"flex-start",children:[o&&(0,Zt.jsx)(Qr,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-column-primary__media","aria-label":l(t)&&(i||a)&&r?r.getValue?.({item:t}):void 0,children:(0,Zt.jsx)(o.render,{item:t,field:o,config:{sizes:"32px"}})}),(0,Zt.jsxs)(F,{direction:"column",align:"flex-start",className:"dataviews-view-table__primary-column-content",children:[r&&(0,Zt.jsxs)(Qr,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-title-field",children:[e!==void 0&&e>0&&(0,Zt.jsxs)("span",{className:"dataviews-view-table__level",children:[Array(e).fill("\u2014").join(" "),"\xA0"]}),(0,Zt.jsx)(r.render,{item:t,field:r})]}),n&&(0,Zt.jsx)(n.render,{item:t,field:n})]})]})}var ea=cb;var Of=c(Et(),1),Uo=c(j(),1),Tf=c(U(),1),fb=t=>(0,Tf.isRTL)()?Math.abs(t.scrollLeft)<=1:t.scrollLeft+t.clientWidth>=t.scrollWidth-1;function Rf({scrollContainerRef:t,enabled:e=!1}){let[r,o]=(0,Uo.useState)(!1),n=(0,Of.useDebounce)((0,Uo.useCallback)(()=>{let i=t.current;i&&o(fb(i))},[t,o]),200);return(0,Uo.useEffect)(()=>typeof window>"u"||!e||!t.current?()=>{}:(n(),t.current.addEventListener("scroll",n),window.addEventListener("resize",n),()=>{t.current?.removeEventListener("scroll",n),window.removeEventListener("resize",n)}),[t,e]),r}function Dt(t,e){return t.reduce((r,o)=>{let n=e.getValue({item:o});return r.has(n)||r.set(n,[]),r.get(n)?.push(o),r},new Map)}var Jr=c(G(),1),Nf=c(U(),1),Df=c(j(),1);var Pt=c(V(),1);function Vf({field:t,isVisible:e,onToggleVisibility:r}){return(0,Pt.jsx)(Jr.__experimentalItem,{onClick:t.enableHiding?r:void 0,children:(0,Pt.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",align:"center",children:[(0,Pt.jsx)("div",{style:{height:24,width:24},children:e&&(0,Pt.jsx)(Jr.Icon,{icon:In})}),(0,Pt.jsx)("span",{className:"dataviews-view-config__label",children:t.label})]})})}function db(t){return!!t}function ta({showLabel:t=!0}){let{view:e,fields:r,onChangeView:o}=(0,Df.useContext)(q),n=Ji(e,r);if(!n?.length)return null;let i=r.find(v=>v.id===e.titleField),a=r.find(v=>v.id===e.mediaField),l=r.find(v=>v.id===e.descriptionField),s=[{field:i,isVisibleFlag:"showTitle"},{field:a,isVisibleFlag:"showMedia"},{field:l,isVisibleFlag:"showDescription"}].filter(({field:v})=>db(v)),u=e.fields??[],f=n.filter(v=>u.includes(v.id)).length,m=s.filter(({isVisibleFlag:v})=>e[v]??!0),d=m.length+f,p=d===1&&m.length===1;return(0,Pt.jsxs)(F,{direction:"column",className:"dataviews-field-control",children:[t&&(0,Pt.jsx)(Jr.BaseControl.VisualLabel,{children:(0,Nf.__)("Properties")}),(0,Pt.jsx)(F,{direction:"column",className:"dataviews-view-config__properties",children:(0,Pt.jsxs)(Jr.__experimentalItemGroup,{isBordered:!0,isSeparated:!0,size:"medium",children:[s.map(({field:v,isVisibleFlag:y})=>{let g=e[y]??!0,b=p&&g?{...v,enableHiding:!1}:v;return(0,Pt.jsx)(Vf,{field:b,isVisible:g,onToggleVisibility:()=>{o({...e,[y]:!g})}},v.id)}),n.map(v=>{let y=u.includes(v.id),g=d===1&&y?{...v,enableHiding:!1}:v;return(0,Pt.jsx)(Vf,{field:g,isVisible:y,onToggleVisibility:()=>{o({...e,fields:y?u.filter(b=>b!==v.id):[...u,v.id]})}},v.id)})]})})]})}var ra=c(j(),1);function Xt(t,e={delay:400}){let[r,o]=(0,ra.useState)(!1);return(0,ra.useEffect)(()=>{if(!t)return;let n=setTimeout(()=>{o(!0)},e.delay);return()=>{clearTimeout(n),o(!1)}},[t,e.delay]),r}var $=c(V(),1);function Mf(t,e){if(t)return t;if(e==="integer"||e==="number")return"end"}function mb({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=W("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,$.jsx)("div",{className:i,children:(0,$.jsx)(n.render,{item:t,field:n})})}function kf({hasBulkActions:t,item:e,level:r,actions:o,fields:n,id:i,view:a,titleField:l,mediaField:s,descriptionField:u,selection:f,getItemId:m,isItemClickable:d,onClickItem:p,renderItemLink:v,onChangeSelection:y,isActionsColumnSticky:g,posinset:b}){let{paginationInfo:S}=(0,wt.useContext)(q),A=Xi(o,e),T=A&&f.includes(i),{showTitle:O=!0,showMedia:k=!0,showDescription:D=!0,infiniteScrollEnabled:C}=a,I=(0,wt.useRef)(!1),N=a.fields??[],h=l&&O||s&&k||u&&D;return(0,$.jsxs)("tr",{className:W("dataviews-view-table__row",{"is-selected":A&&T,"has-bulk-actions":A}),onTouchStart:()=>{I.current=!0},"aria-setsize":C?S.totalItems:void 0,"aria-posinset":b,role:C?"article":void 0,onMouseDown:E=>{let P=(0,Ml.isAppleOS)()?E.metaKey:E.ctrlKey;E.button===0&&P&&window.navigator.userAgent.toLowerCase().includes("firefox")&&E?.preventDefault()},onClick:E=>{if(!A)return;((0,Ml.isAppleOS)()?E.metaKey:E.ctrlKey)&&!I.current&&document.getSelection()?.type!=="Range"&&y(f.includes(i)?f.filter(x=>i!==x):[...f,i])},children:[t&&(0,$.jsx)("td",{className:"dataviews-view-table__checkbox-column",children:(0,$.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,$.jsx)(Kr,{item:e,selection:f,onChangeSelection:y,getItemId:m,titleField:l,disabled:!A})})}),h&&(0,$.jsx)("td",{children:(0,$.jsx)(ea,{item:e,level:r,titleField:O?l:void 0,mediaField:k?s:void 0,descriptionField:D?u:void 0,isItemClickable:d,onClickItem:p,renderItemLink:v})}),N.map(E=>{let{width:P,maxWidth:x,minWidth:R,align:w}=a.layout?.styles?.[E]??{},_=n.find(H=>H.id===E),M=Mf(w,_?.type);return(0,$.jsx)("td",{style:{width:P,maxWidth:x,minWidth:R},children:(0,$.jsx)(mb,{fields:n,item:e,column:E,align:M})},E)}),!!o?.length&&(0,$.jsx)("td",{className:W("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":g}),onClick:E=>E.stopPropagation(),children:(0,$.jsx)(zo,{item:e,actions:o})})]})}function pb({actions:t,data:e,fields:r,getItemId:o,getItemLevel:n,isLoading:i=!1,onChangeView:a,onChangeSelection:l,selection:s,setOpenedFilter:u,onClickItem:f,isItemClickable:m,renderItemLink:d,view:p,className:v,empty:y}){let{containerRef:g}=(0,wt.useContext)(q),b=Xt(i),S=(0,wt.useRef)(new Map),A=(0,wt.useRef)(void 0),[T,O]=(0,wt.useState)(),[k,D]=(0,wt.useState)(null);(0,wt.useEffect)(()=>{A.current&&(A.current.focus(),A.current=void 0)});let C=(0,wt.useId)(),I=Rf({scrollContainerRef:g,enabled:!!t?.length}),N=qo(t,e);if(T){A.current=T,O(void 0);return}let h=Y=>{let Q=S.current.get(Y.id),ge=Q?S.current.get(Q.fallback):void 0;O(ge?.node)},E=Y=>{Y.preventDefault(),Y.stopPropagation();let Q={getBoundingClientRect:()=>({x:Y.clientX,y:Y.clientY,top:Y.clientY,left:Y.clientX,right:Y.clientX,bottom:Y.clientY,width:0,height:0,toJSON:()=>({})})};window.requestAnimationFrame(()=>{D(Q)})},P=!!e?.length,x=r.find(Y=>Y.id===p.titleField),R=r.find(Y=>Y.id===p.mediaField),w=r.find(Y=>Y.id===p.descriptionField),_=p.groupBy?.field?r.find(Y=>Y.id===p.groupBy?.field):null,M=_?Dt(e,_):null,{showTitle:H=!0,showMedia:ae=!0,showDescription:Se=!0}=p,Ne=x&&H||R&&ae||w&&Se,He=p.fields??[],rt=(Y,Q)=>ge=>{ge?S.current.set(Y,{node:ge,fallback:He[Q>0?Q-1:1]}):S.current.delete(Y)},Yt=p.infiniteScrollEnabled&&!M,mr=(0,bo.isRTL)();return P?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("table",{className:W("dataviews-view-table",v,{[`has-${p.layout?.density}-density`]:p.layout?.density&&["compact","comfortable"].includes(p.layout.density),"has-bulk-actions":N,"is-refreshing":!Yt&&b}),"aria-busy":i,"aria-describedby":C,role:Yt?"feed":void 0,inert:!Yt&&i?"true":void 0,children:[(0,$.jsxs)("colgroup",{children:[N&&(0,$.jsx)("col",{className:"dataviews-view-table__col-checkbox"}),Ne&&(0,$.jsx)("col",{className:"dataviews-view-table__col-first-data"}),He.map((Y,Q)=>(0,$.jsx)("col",{className:W(`dataviews-view-table__col-${Y}`,{"dataviews-view-table__col-first-data":!Ne&&Q===0})},`col-${Y}`)),!!t?.length&&(0,$.jsx)("col",{className:"dataviews-view-table__col-actions"})]}),k&&(0,$.jsx)(oa.Popover,{anchor:k,onClose:()=>D(null),placement:"bottom-start",children:(0,$.jsx)(ta,{showLabel:!1})}),(0,$.jsx)("thead",{onContextMenu:E,children:(0,$.jsxs)("tr",{className:"dataviews-view-table__row",children:[N&&(0,$.jsx)("th",{className:"dataviews-view-table__checkbox-column",scope:"col",onContextMenu:E,children:(0,$.jsx)(Nn,{selection:s,onChangeSelection:l,data:e,actions:t,getItemId:o})}),Ne&&(0,$.jsx)("th",{scope:"col",children:x&&(0,$.jsx)(Yo,{ref:rt(x.id,0),fieldId:x.id,view:p,fields:r,onChangeView:a,onHide:h,setOpenedFilter:u,canMove:!1,canInsertLeft:mr?p.layout?.enableMoving??!0:!1,canInsertRight:mr?!1:p.layout?.enableMoving??!0})}),He.map((Y,Q)=>{let{width:ge,maxWidth:pr,minWidth:vr,align:mo}=p.layout?.styles?.[Y]??{},po=r.find(As=>As.id===Y),Lo=Mf(mo,po?.type),Sn=p.layout?.enableMoving??!0;return(0,$.jsx)("th",{style:{width:ge,maxWidth:pr,minWidth:vr,textAlign:Lo},"aria-sort":p.sort?.direction&&p.sort?.field===Y?Yi[p.sort.direction]:void 0,scope:"col",children:(0,$.jsx)(Yo,{ref:rt(Y,Q),fieldId:Y,view:p,fields:r,onChangeView:a,onHide:h,setOpenedFilter:u,canMove:Sn,canInsertLeft:Sn,canInsertRight:Sn})},Y)}),!!t?.length&&(0,$.jsx)("th",{className:W("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":!I}),children:(0,$.jsx)("span",{className:"dataviews-view-table-header",children:(0,bo.__)("Actions")})})]})}),P&&_&&M?Array.from(M.entries()).map(([Y,Q])=>(0,$.jsxs)("tbody",{children:[(0,$.jsx)("tr",{className:"dataviews-view-table__group-header-row",children:(0,$.jsx)("td",{colSpan:He.length+(Ne?1:0)+(N?1:0)+(t?.length?1:0),className:"dataviews-view-table__group-header-cell",children:p.groupBy?.showLabel===!1?Y:(0,bo.sprintf)((0,bo.__)("%1$s: %2$s"),_.label,Y)})}),Q.map((ge,pr)=>(0,$.jsx)(kf,{item:ge,level:p.showLevels&&typeof n=="function"?n(ge):void 0,hasBulkActions:N,actions:t,fields:r,id:o(ge)||pr.toString(),view:p,titleField:x,mediaField:R,descriptionField:w,selection:s,getItemId:o,onChangeSelection:l,onClickItem:f,renderItemLink:d,isItemClickable:m,isActionsColumnSticky:!I},o(ge)))]},`group-${Y}`)):(0,$.jsx)("tbody",{children:P&&e.map((Y,Q)=>(0,$.jsx)(kf,{item:Y,level:p.showLevels&&typeof n=="function"?n(Y):void 0,hasBulkActions:N,actions:t,fields:r,id:o(Y)||Q.toString(),view:p,titleField:x,mediaField:R,descriptionField:w,selection:s,getItemId:o,onChangeSelection:l,onClickItem:f,renderItemLink:d,isItemClickable:m,isActionsColumnSticky:!I,posinset:Yt?Q+1:void 0},o(Y)))})]}),Yt&&i&&(0,$.jsx)("div",{className:"dataviews-loading",id:C,children:(0,$.jsx)("p",{className:"dataviews-loading-more",children:(0,$.jsx)(oa.Spinner,{})})})]}):(0,$.jsx)("div",{className:W("dataviews-no-results",{"is-refreshing":b}),id:C,children:y})}var Ff=pb;var jf=c(G(),1),aa=c(U(),1);var At=c(G(),1);var Dn=c(U(),1),Bf=c(Et(),1),Hf=c(Tl(),1),ia=c(j(),1);var vb=c(G(),1),gb=c(U(),1),na=c(j(),1);var hb=c(V(),1),bb=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}],xb=bb[2].value;function Lf(){let t=(0,na.useContext)(q),e=t.view;return(0,na.useMemo)(()=>{let r=t.containerWidth,o=32,n=e.layout?.previewSize??xb,i=Math.floor((r+o)/(n+o));return Math.max(1,i)},[t.containerWidth,e.layout?.previewSize])}var ne=c(V(),1),{Badge:wb}=K(At.privateApis);function yb(t,e){let r=[];for(let o=0,n=t.length;o{if(b.onClickCapture?.(w),(0,Hf.isAppleOS)()?w.metaKey:w.ctrlKey){if(w.stopPropagation(),w.preventDefault(),!k)return;o(r.includes(D)?r.filter(_=>D!==_):[...r,D])}},children:[(0,ne.jsx)(Qr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:W("dataviews-view-grid__media",{"dataviews-view-grid__media--placeholder":!h}),...x,children:E}),y&&(0,ne.jsx)(Kr,{item:s,selection:r,onChangeSelection:o,getItemId:l,titleField:m,disabled:!k}),!!u?.length&&(0,ne.jsx)("div",{className:"dataviews-view-grid__media-actions",children:(0,ne.jsx)(zo,{item:s,actions:u,isCompact:!0})}),A&&(0,ne.jsx)("div",{className:"dataviews-view-grid__title",children:(0,ne.jsx)(Qr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:"dataviews-view-grid__title-field dataviews-title-field",...R,title:m?.getValueFormatted({item:s,field:m})||void 0,children:P})}),(0,ne.jsxs)(F,{direction:"column",gap:"xs",children:[O&&d?.render&&(0,ne.jsx)(d.render,{item:s,field:d}),!!v?.length&&(0,ne.jsx)(F,{direction:"row",className:"dataviews-view-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:v.map(w=>(0,ne.jsx)(wb,{className:"dataviews-view-grid__field-value",children:(0,ne.jsx)(w.render,{item:s,field:w})},w.id))}),!!p?.length&&(0,ne.jsx)(F,{direction:"column",className:"dataviews-view-grid__fields",gap:"xs",children:p.map(w=>(0,ne.jsx)(At.Flex,{className:"dataviews-view-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)(At.Tooltip,{text:w.label,children:(0,ne.jsx)(At.FlexItem,{className:"dataviews-view-grid__field-name",children:w.header})}),(0,ne.jsx)(At.FlexItem,{className:"dataviews-view-grid__field-value",style:{maxHeight:"none"},children:(0,ne.jsx)(w.render,{item:s,field:w})})]})},w.id))})]})]})});function Fl({data:t,isInfiniteScroll:e,className:r,inert:o,isLoading:n,view:i,fields:a,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:f,renderItemLink:m,getItemId:d,actions:p}){let{paginationInfo:v,resizeObserverRef:y}=(0,ia.useContext)(q),g=Lf(),b=qo(p,t),S=a.find(N=>N.id===i?.titleField),A=a.find(N=>N.id===i?.mediaField),T=a.find(N=>N.id===i?.descriptionField),O=i.fields??[],{regularFields:k,badgeFields:D}=O.reduce((N,h)=>{let E=a.find(x=>x.id===h);if(!E)return N;let P=i.layout?.badgeFields?.includes(h)?"badgeFields":"regularFields";return N[P].push(E),N},{regularFields:[],badgeFields:[]}),C="900px",I=Math.ceil(t.length/g);return(0,ne.jsx)(At.Composite,{role:e?"feed":"grid",className:W("dataviews-view-grid",r),focusWrap:!0,"aria-busy":n,"aria-rowcount":e?void 0:I,ref:y,inert:o,children:yb(t,g).map((N,h)=>(0,ne.jsx)(At.Composite.Row,{render:(0,ne.jsx)("div",{role:"row","aria-rowindex":h+1,"aria-label":(0,Dn.sprintf)((0,Dn.__)("Row %d"),h+1),className:"dataviews-view-grid__row",style:{gridTemplateColumns:`repeat( ${g}, minmax(0, 1fr) )`}}),children:N.map((E,P)=>{let x=h*g+P;return(0,ne.jsx)(At.Composite.Item,{render:R=>(0,ne.jsx)(Sb,{...R,role:e?"article":"gridcell","aria-setsize":e?v.totalItems:void 0,"aria-posinset":e?x+1:void 0,view:i,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:f,renderItemLink:m,getItemId:d,item:E,actions:p,mediaField:A,titleField:S,descriptionField:T,regularFields:k,badgeFields:D,hasBulkActions:b,config:{sizes:C}})},d(E))})},h))})}var It=c(V(),1);function Cb({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,selection:u,view:f,className:m,empty:d}){let p=Xt(!!n),v=!!e?.length,y=f.groupBy?.field?r.find(A=>A.id===f.groupBy?.field):null,g=y?Dt(e,y):null,b=f.infiniteScrollEnabled&&!g;if(!v)return(0,It.jsx)("div",{className:W("dataviews-no-results",{"is-refreshing":p}),children:d});let S={className:W(m,{"is-refreshing":!b&&p}),inert:!b&&n?"true":void 0,isLoading:n,view:f,fields:r,selection:u,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,getItemId:o,actions:t};return(0,It.jsxs)(It.Fragment,{children:[v&&y&&g&&(0,It.jsx)(F,{direction:"column",gap:"lg",children:Array.from(g.entries()).map(([A,T])=>(0,It.jsxs)(F,{direction:"column",gap:"sm",children:[(0,It.jsx)("h3",{className:"dataviews-view-grid__group-header",children:f.groupBy?.showLabel===!1?A:(0,aa.sprintf)((0,aa.__)("%1$s: %2$s"),y.label,A)}),(0,It.jsx)(Fl,{...S,data:T,isInfiniteScroll:!1})]},A))}),!g&&(0,It.jsx)(Fl,{...S,data:e,isInfiniteScroll:!!b}),b&&n&&(0,It.jsx)("p",{className:"dataviews-loading-more",children:(0,It.jsx)(jf.Spinner,{})})]})}var Wf=Cb;var sa=c(Et(),1),Ye=c(G(),1),Be=c(j(),1),kn=c(U(),1);var jl=c(br(),1);var z=c(V(),1),{Menu:Ll}=K(Ye.privateApis);function Bl(t){return`${t}-item-wrapper`}function _b(t,e){return`${t}-primary-action-${e}`}function Hl(t){return`${t}-dropdown`}function Eb({idPrefix:t,primaryAction:e,item:r}){let o=(0,jl.useRegistry)(),[n,i]=(0,Be.useState)(!1),a=_b(t,e.id),l=typeof e.label=="string"?e.label:e.label([r]);return"RenderModal"in e?(0,z.jsx)("div",{role:"gridcell",children:(0,z.jsx)(Ye.Composite.Item,{id:a,render:(0,z.jsx)(Ye.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,text:l,size:"small",onClick:()=>i(!0)}),children:n&&(0,z.jsx)(ho,{action:e,items:[r],closeModal:()=>i(!1)})})},e.id):(0,z.jsx)("div",{role:"gridcell",children:(0,z.jsx)(Ye.Composite.Item,{id:a,render:(0,z.jsx)(Ye.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,size:"small",onClick:()=>{e.callback([r],{registry:o})},children:l})})},e.id)}function zf({view:t,actions:e,idPrefix:r,isSelected:o,item:n,titleField:i,mediaField:a,descriptionField:l,onSelect:s,otherFields:u,onDropdownTriggerKeyDown:f,posinset:m}){let{showTitle:d=!0,showMedia:p=!0,showDescription:v=!0,infiniteScrollEnabled:y}=t,g=(0,Be.useRef)(null),b=`${r}-label`,S=`${r}-description`,A=(0,jl.useRegistry)(),[T,O]=(0,Be.useState)(!1),[k,D]=(0,Be.useState)(null),C=({type:w})=>{O(w==="mouseenter")},{paginationInfo:I}=(0,Be.useContext)(q);(0,Be.useEffect)(()=>{o&&g.current?.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})},[o]);let{primaryAction:N,eligibleActions:h}=(0,Be.useMemo)(()=>{let w=e.filter(M=>!M.isEligible||M.isEligible(n));return{primaryAction:w.filter(M=>M.isPrimary)[0],eligibleActions:w}},[e,n]),E=N&&e.length===1,P=p&&a?.render?(0,z.jsx)("div",{className:"dataviews-view-list__media-wrapper",children:(0,z.jsx)(a.render,{item:n,field:a,config:{sizes:"52px"}})}):null,x=d&&i?.render?(0,z.jsx)(i.render,{item:n,field:i}):null,R=h?.length>0&&(0,z.jsxs)(F,{direction:"row",gap:"md",className:"dataviews-view-list__item-actions",children:[N&&(0,z.jsx)(Eb,{idPrefix:r,primaryAction:N,item:n}),!E&&(0,z.jsxs)("div",{role:"gridcell",children:[(0,z.jsxs)(Ll,{placement:"bottom-end",children:[(0,z.jsx)(Ll.TriggerButton,{render:(0,z.jsx)(Ye.Composite.Item,{id:Hl(r),render:(0,z.jsx)(Ye.Button,{size:"small",icon:Rn,label:(0,kn.__)("Actions"),accessibleWhenDisabled:!0,disabled:!e.length,onKeyDown:f})})}),(0,z.jsx)(Ll.Popover,{children:(0,z.jsx)(Vl,{actions:h,item:n,registry:A,setActiveModalAction:D})})]}),!!k&&(0,z.jsx)(ho,{action:k,items:[n],closeModal:()=>D(null)})]})]});return(0,z.jsx)(Ye.Composite.Row,{ref:g,render:(0,z.jsx)("div",{"aria-posinset":m,"aria-setsize":y?I.totalItems:void 0}),role:y?"article":"row",className:W({"is-selected":o,"is-hovered":T}),onMouseEnter:C,onMouseLeave:C,children:(0,z.jsxs)(F,{direction:"row",className:"dataviews-view-list__item-wrapper",children:[(0,z.jsx)("div",{role:"gridcell",children:(0,z.jsx)(Ye.Composite.Item,{id:Bl(r),"aria-pressed":o,"aria-labelledby":b,"aria-describedby":S,className:"dataviews-view-list__item",onClick:()=>s(n)})}),(0,z.jsxs)(F,{direction:"row",gap:"md",justify:"start",align:"flex-start",style:{flex:1,minWidth:0},children:[P,(0,z.jsxs)(F,{direction:"column",gap:"xs",className:"dataviews-view-list__field-wrapper",children:[(0,z.jsxs)(F,{direction:"row",align:"center",children:[(0,z.jsx)("div",{className:"dataviews-title-field dataviews-view-list__title-field",id:b,children:x}),R]}),v&&l?.render&&(0,z.jsx)("div",{className:"dataviews-view-list__field",children:(0,z.jsx)(l.render,{item:n,field:l})}),(0,z.jsx)("div",{className:"dataviews-view-list__fields",id:S,children:u.map(w=>(0,z.jsxs)("div",{className:"dataviews-view-list__field",children:[(0,z.jsx)(Ye.VisuallyHidden,{as:"span",className:"dataviews-view-list__field-label",children:w.label}),(0,z.jsx)("span",{className:"dataviews-view-list__field-value",children:(0,z.jsx)(w.render,{item:n,field:w})})]},w.id))})]})]})]})})}function Pb(t){return!!t}function Wl(t){let{actions:e,data:r,fields:o,getItemId:n,isLoading:i,onChangeSelection:a,selection:l,view:s,className:u,empty:f}=t,m=(0,sa.useInstanceId)(Wl,"view-list"),d=Xt(!!i),p=r?.findLast(w=>l.includes(n(w))),v=o.find(w=>w.id===s.titleField),y=o.find(w=>w.id===s.mediaField),g=o.find(w=>w.id===s.descriptionField),b=(s?.fields??[]).map(w=>o.find(_=>w===_.id)).filter(Pb),S=w=>a([n(w)]),A=(0,Be.useCallback)(w=>`${m}-${n(w)}`,[m,n]),T=(0,Be.useCallback)((w,_)=>_.startsWith(A(w)),[A]),[O,k]=(0,Be.useState)(void 0);(0,Be.useEffect)(()=>{p&&k(Bl(A(p)))},[p,A]);let D=r.findIndex(w=>T(w,O??"")),C=(0,sa.usePrevious)(D),I=D!==-1,N=(0,Be.useCallback)((w,_)=>{let M=Math.min(r.length-1,Math.max(0,w));if(!r[M])return;let H=A(r[M]),ae=_(H);k(ae),document.getElementById(ae)?.focus()},[r,A]);(0,Be.useEffect)(()=>{!I&&(C!==void 0&&C!==-1)&&N(C,Bl)},[I,N,C]);let h=(0,Be.useCallback)(w=>{w.key==="ArrowDown"&&(w.preventDefault(),N(D+1,Hl)),w.key==="ArrowUp"&&(w.preventDefault(),N(D-1,Hl))},[N,D]),E=!!r?.length,P=s.groupBy?.field?o.find(w=>w.id===s.groupBy?.field):null,x=E&&P?Dt(r,P):null,R=s.infiniteScrollEnabled&&!x;return E?E&&P&&x?(0,z.jsx)(Ye.Composite,{id:`${m}`,render:(0,z.jsx)("div",{}),className:"dataviews-view-list__group",role:"grid",activeId:O,setActiveId:k,children:(0,z.jsx)(F,{direction:"column",gap:"lg",className:W("dataviews-view-list",u),children:Array.from(x.entries()).map(([w,_])=>(0,z.jsxs)(F,{direction:"column",gap:"sm",children:[(0,z.jsx)("h3",{className:"dataviews-view-list__group-header",children:s.groupBy?.showLabel===!1?w:(0,kn.sprintf)((0,kn.__)("%1$s: %2$s"),P.label,w)}),_.map(M=>{let H=A(M);return(0,z.jsx)(zf,{view:s,idPrefix:H,actions:e,item:M,isSelected:M===p,onSelect:S,mediaField:y,titleField:v,descriptionField:g,otherFields:b,onDropdownTriggerKeyDown:h},H)})]},w))})}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Ye.Composite,{id:m,render:(0,z.jsx)("div",{}),className:W("dataviews-view-list",u,{[`has-${s.layout?.density}-density`]:s.layout?.density&&["compact","comfortable"].includes(s.layout.density),"is-refreshing":!R&&d}),role:s.infiniteScrollEnabled?"feed":"grid",activeId:O,setActiveId:k,inert:!R&&i?"true":void 0,children:r.map((w,_)=>{let M=A(w);return(0,z.jsx)(zf,{view:s,idPrefix:M,actions:e,item:w,isSelected:w===p,onSelect:S,mediaField:y,titleField:v,descriptionField:g,otherFields:b,onDropdownTriggerKeyDown:h,posinset:s.infiniteScrollEnabled?_+1:void 0},M)})}),R&&i&&(0,z.jsx)("p",{className:"dataviews-loading-more",children:(0,z.jsx)(Ye.Spinner,{})})]}):(0,z.jsx)("div",{className:W("dataviews-no-results",{"is-refreshing":d}),children:f})}var Xf=c(G(),1);var la=c(U(),1),Gf=c(j(),1);var $o=c(V(),1);function qf({groupName:t,groupData:e,groupField:r,showLabel:o=!0,children:n}){let i=o?(0,Gf.createInterpolateElement)((0,la.sprintf)((0,la.__)("%s: "),r.label).trim(),{groupName:(0,$o.jsx)(r.render,{item:e[0],field:r})}):(0,$o.jsx)(r.render,{item:e[0],field:r});return(0,$o.jsxs)(F,{direction:"column",className:"dataviews-view-activity__group",children:[(0,$o.jsx)("h3",{className:"dataviews-view-activity__group-header",children:i}),n]},t)}var Yf=c(G(),1),xo=c(j(),1),Uf=c(br(),1),$f=c(Et(),1);var ke=c(V(),1);function Ab(t){let{view:e,actions:r,item:o,titleField:n,mediaField:i,descriptionField:a,otherFields:l,posinset:s,onClickItem:u,renderItemLink:f,isItemClickable:m}=t,{showTitle:d=!0,showMedia:p=!0,showDescription:v=!0,infiniteScrollEnabled:y}=e,g=(0,xo.useRef)(null),b=(0,Uf.useRegistry)(),{paginationInfo:S}=(0,xo.useContext)(q),{primaryActions:A,eligibleActions:T}=(0,xo.useMemo)(()=>{let h=r.filter(P=>!P.isEligible||P.isEligible(o));return{primaryActions:h.filter(P=>P.isPrimary),eligibleActions:h}},[r,o]),O=(0,$f.useViewportMatch)("medium","<"),k=e.layout?.density??"balanced",D=p&&k!=="compact"&&i?.render?(0,ke.jsx)(i.render,{item:o,field:i,config:{sizes:k==="comfortable"?"32px":"24px"}}):null,C=(0,ke.jsx)("div",{className:"dataviews-view-activity__item-type-icon",children:D||(0,ke.jsx)("span",{className:"dataviews-view-activity__item-bullet","aria-hidden":"true"})}),I=d&&n?.render?(0,ke.jsx)(n.render,{item:o,field:n}):null,N=(0,xo.useMemo)(()=>k==="comfortable"?"md":"sm",[k]);return(0,ke.jsx)("div",{ref:g,role:y?"article":void 0,"aria-posinset":s,"aria-setsize":y?S.totalItems:void 0,className:W("dataviews-view-activity__item",k==="compact"&&"is-compact",k==="balanced"&&"is-balanced",k==="comfortable"&&"is-comfortable"),children:(0,ke.jsxs)(F,{direction:"row",gap:"lg",justify:"start",align:"flex-start",children:[(0,ke.jsx)(F,{direction:"column",gap:"xs",align:"center",className:"dataviews-view-activity__item-type",children:C}),(0,ke.jsxs)(F,{direction:"column",gap:N,align:"flex-start",className:"dataviews-view-activity__item-content",children:[I&&(0,ke.jsx)(Qr,{item:o,isItemClickable:m,onClickItem:u,renderItemLink:f,className:"dataviews-view-activity__item-title",children:I}),v&&a&&(0,ke.jsx)("div",{className:"dataviews-view-activity__item-description",children:(0,ke.jsx)(a.render,{item:o,field:a})}),(0,ke.jsx)("div",{className:"dataviews-view-activity__item-fields",children:l.map(h=>(0,ke.jsxs)("div",{className:"dataviews-view-activity__item-field",children:[(0,ke.jsx)(Yf.VisuallyHidden,{as:"span",className:"dataviews-view-activity__item-field-label",children:h.label}),(0,ke.jsx)("span",{className:"dataviews-view-activity__item-field-value",children:(0,ke.jsx)(h.render,{item:o,field:h})})]},h.id))}),!!A?.length&&(0,ke.jsx)(Nl,{item:o,actions:A,registry:b,buttonVariant:"secondary"})]}),(A.length0)&&(0,ke.jsx)("div",{className:"dataviews-view-activity__item-actions",children:(0,ke.jsx)(zo,{item:o,actions:T,isCompact:!0})})]})})}var Kf=Ab;var Zf=c(le(),1);function Ib(t){return!!t}function zl(t){let{data:e,fields:r,getItemId:o,view:n}=t,i=r.find(u=>u.id===n.titleField),a=r.find(u=>u.id===n.mediaField),l=r.find(u=>u.id===n.descriptionField),s=(n?.fields??[]).map(u=>r.find(f=>u===f.id)).filter(Ib);return e.map((u,f)=>(0,Zf.createElement)(Kf,{...t,key:o(u),item:u,mediaField:a,titleField:i,descriptionField:l,otherFields:s,posinset:n.infiniteScrollEnabled?f+1:void 0}))}var Ot=c(V(),1);function Qf(t){let{empty:e,data:r,fields:o,isLoading:n,view:i,className:a}=t,l=Xt(!!n),s=!!r?.length,u=i.groupBy?.field?o.find(y=>y.id===i.groupBy?.field):null,f=s&&u?Dt(r,u):null,m=i.infiniteScrollEnabled&&!f;if(!s)return(0,Ot.jsx)("div",{className:W("dataviews-no-results",{"is-refreshing":l}),children:e});let d=!m&&!!n,p=W("dataviews-view-activity",a,{"is-refreshing":!m&&l}),v=f?Array.from(f.entries()):[];return s&&u&&f?(0,Ot.jsx)(F,{direction:"column",gap:"sm",className:p,inert:d?"true":void 0,children:v.map(([y,g])=>(0,Ot.jsx)(qf,{groupName:y,groupData:g,groupField:u,showLabel:i.groupBy?.showLabel!==!1,children:(0,Ot.jsx)(zl,{...t,data:g})},y))}):(0,Ot.jsxs)(Ot.Fragment,{children:[(0,Ot.jsx)("div",{className:p,role:i.infiniteScrollEnabled?"feed":void 0,inert:d?"true":void 0,children:(0,Ot.jsx)(zl,{...t})}),m&&n&&(0,Ot.jsx)("p",{className:"dataviews-loading-more",children:(0,Ot.jsx)(Xf.Spinner,{})})]})}var yt=c(G(),1),Fn=c(U(),1),id=c(Et(),1),ad=c(j(),1);var ed=c(G(),1),Ob=c(br(),1),ua=c(j(),1);var Tb=c(U(),1);var Mn=c(G(),1),Ko=c(j(),1),Tt=c(U(),1);var yr=c(V(),1);function Gl(){let{view:t,onChangeView:e,paginationInfo:{totalItems:r=0,totalPages:o}}=(0,Ko.useContext)(q);if(!r||!o||t.infiniteScrollEnabled)return null;let n=t.page??1,i=Array.from(Array(o)).map((a,l)=>{let s=l+1;return{value:s.toString(),label:s.toString(),"aria-label":n===s?(0,Tt.sprintf)((0,Tt.__)("Page %1$d of %2$d"),n,o):s.toString()}});return!!r&&o!==1&&(0,yr.jsxs)(F,{direction:"row",className:"dataviews-pagination",justify:"end",align:"center",gap:"xl",children:[(0,yr.jsx)(F,{direction:"row",justify:"flex-start",align:"center",gap:"xs",className:"dataviews-pagination__page-select",children:(0,Ko.createInterpolateElement)((0,Tt.sprintf)((0,Tt._x)("
      Page
      %1$s
      of %2$d
      ","paging"),"",o),{div:(0,yr.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,yr.jsx)(Mn.SelectControl,{"aria-label":(0,Tt.__)("Current page"),value:n.toString(),options:i,onChange:a=>{e({...t,page:+a})},size:"small",variant:"minimal"})})}),(0,yr.jsxs)(F,{direction:"row",gap:"xs",align:"center",children:[(0,yr.jsx)(Mn.Button,{onClick:()=>e({...t,page:n-1}),disabled:n===1,accessibleWhenDisabled:!0,label:(0,Tt.__)("Previous page"),icon:(0,Tt.isRTL)()?Fi:Hi,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,yr.jsx)(Mn.Button,{onClick:()=>e({...t,page:n+1}),disabled:n>=o,accessibleWhenDisabled:!0,label:(0,Tt.__)("Next page"),icon:(0,Tt.isRTL)()?Hi:Fi,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})}var Jf=(0,Ko.memo)(Gl);var td=c(V(),1);function ca(t){return(0,ua.useMemo)(()=>t?.every(e=>e.supportsBulk),[t])}var rd=c(j(),1);var od=c(V(),1),ql=(0,rd.forwardRef)(({className:t,previewSize:e,...r},o)=>(0,od.jsx)("div",{ref:o,className:W("dataviews-view-grid-items",t),style:{gridTemplateColumns:e&&`repeat(auto-fill, minmax(${e}px, 1fr))`},...r}));var Z=c(V(),1),{Badge:Rb}=K(yt.privateApis);function nd({view:t,multiselect:e,selection:r,onChangeSelection:o,getItemId:n,item:i,mediaField:a,titleField:l,descriptionField:s,regularFields:u,badgeFields:f,config:m,posinset:d,setsize:p}){let{showTitle:v=!0,showMedia:y=!0,showDescription:g=!0}=t,b=n(i),S=r.includes(b),A=a?.render?(0,Z.jsx)(a.render,{item:i,field:a,config:m}):null,T=v&&l?.render?(0,Z.jsx)(l.render,{item:i,field:l}):null;return(0,Z.jsxs)(yt.Composite.Item,{"aria-label":l?l.getValue({item:i})||(0,Fn.__)("(no title)"):void 0,render:({children:O,...k})=>(0,Z.jsx)(F,{direction:"column",children:O,...k}),role:"option","aria-posinset":d,"aria-setsize":p,className:W("dataviews-view-picker-grid__card",{"is-selected":S}),"aria-selected":S,onClick:()=>{if(S)o(r.filter(O=>b!==O));else{let O=e?[...r,b]:[b];o(O)}},children:[y&&A&&(0,Z.jsx)("div",{className:"dataviews-view-picker-grid__media",children:A}),y&&A&&(0,Z.jsx)(Kr,{item:i,selection:r,onChangeSelection:o,getItemId:n,titleField:l,disabled:!1,"aria-hidden":!0,tabIndex:-1}),v&&(0,Z.jsx)(F,{direction:"row",justify:"space-between",className:"dataviews-view-picker-grid__title-actions",children:(0,Z.jsx)("div",{className:"dataviews-view-picker-grid__title-field dataviews-title-field",children:T})}),(0,Z.jsxs)(F,{direction:"column",gap:"xs",children:[g&&s?.render&&(0,Z.jsx)(s.render,{item:i,field:s}),!!f?.length&&(0,Z.jsx)(F,{direction:"row",className:"dataviews-view-picker-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:f.map(O=>(0,Z.jsx)(Rb,{className:"dataviews-view-picker-grid__field-value",children:(0,Z.jsx)(O.render,{item:i,field:O})},O.id))}),!!u?.length&&(0,Z.jsx)(F,{direction:"column",className:"dataviews-view-picker-grid__fields",gap:"xs",children:u.map(O=>(0,Z.jsx)(yt.Flex,{className:"dataviews-view-picker-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(yt.FlexItem,{className:"dataviews-view-picker-grid__field-name",children:O.header}),(0,Z.jsx)(yt.FlexItem,{className:"dataviews-view-picker-grid__field-value",style:{maxHeight:"none"},children:(0,Z.jsx)(O.render,{item:i,field:O})})]})},O.id))})]})]},b)}function sd({groupName:t,groupField:e,showLabel:r=!0,children:o}){let n=(0,id.useInstanceId)(sd,"dataviews-view-picker-grid-group__header");return(0,Z.jsxs)(F,{direction:"column",gap:"sm",role:"group","aria-labelledby":n,children:[(0,Z.jsx)("h3",{className:"dataviews-view-picker-grid-group__header",id:n,children:r?(0,Fn.sprintf)((0,Fn.__)("%1$s: %2$s"),e.label,t):t}),o]},t)}function Vb({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,selection:a,view:l,className:s,empty:u}){let{resizeObserverRef:f,paginationInfo:m,itemListLabel:d}=(0,ad.useContext)(q),p=r.find(P=>P.id===l?.titleField),v=r.find(P=>P.id===l?.mediaField),y=r.find(P=>P.id===l?.descriptionField),g=l.fields??[],{regularFields:b,badgeFields:S}=g.reduce((P,x)=>{let R=r.find(_=>_.id===x);if(!R)return P;let w=l.layout?.badgeFields?.includes(x)?"badgeFields":"regularFields";return P[w].push(R),P},{regularFields:[],badgeFields:[]}),A=!!e?.length,T=l.layout?.previewSize,O=ca(t),k="900px",D=l.groupBy?.field?r.find(P=>P.id===l.groupBy?.field):null,C=D?Dt(e,D):null,I=l.infiniteScrollEnabled&&!C,N=l?.page??1,h=l?.perPage??0,E=I?m?.totalItems:void 0;return(0,Z.jsxs)(Z.Fragment,{children:[A&&D&&C&&(0,Z.jsx)(yt.Composite,{virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":O,className:W("dataviews-view-picker-grid",s),"aria-label":d,render:({children:P,...x})=>(0,Z.jsx)(F,{direction:"column",gap:"lg",children:P,...x}),children:Array.from(C.entries()).map(([P,x])=>(0,Z.jsx)(sd,{groupName:P,groupField:D,showLabel:l.groupBy?.showLabel!==!1,children:(0,Z.jsx)(ql,{previewSize:T,style:{gridTemplateColumns:T&&`repeat(auto-fill, minmax(${T}px, 1fr))`},"aria-busy":n,ref:f,children:x.map(R=>{let w=(N-1)*h+e.indexOf(R)+1;return(0,Z.jsx)(nd,{view:l,multiselect:O,selection:a,onChangeSelection:i,getItemId:o,item:R,mediaField:v,titleField:p,descriptionField:y,regularFields:b,badgeFields:S,config:{sizes:k},posinset:w,setsize:E},o(R))})})},P))}),A&&!C&&(0,Z.jsx)(yt.Composite,{render:(0,Z.jsx)(ql,{className:W("dataviews-view-picker-grid",s),previewSize:T,"aria-busy":n,ref:f}),virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":O,"aria-label":d,children:e.map((P,x)=>{let R=I?x+1:void 0;return I||(R=(N-1)*h+x+1),(0,Z.jsx)(nd,{view:l,multiselect:O,selection:a,onChangeSelection:i,getItemId:o,item:P,mediaField:v,titleField:p,descriptionField:y,regularFields:b,badgeFields:S,config:{sizes:k},posinset:R,setsize:E},o(P))})}),!A&&(0,Z.jsx)("div",{className:W({"dataviews-loading":n,"dataviews-no-results":!n}),children:n?(0,Z.jsx)("p",{children:(0,Z.jsx)(yt.Spinner,{})}):u}),A&&n&&(0,Z.jsx)("p",{className:"dataviews-loading-more",children:(0,Z.jsx)(yt.Spinner,{})})]})}var ld=Vb;var fa=c(U(),1),wo=c(G(),1),kt=c(j(),1);var J=c(V(),1);function Nb({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=W("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,J.jsx)("div",{className:i,children:(0,J.jsx)(n.render,{item:t,field:n})})}function ud({item:t,fields:e,id:r,view:o,titleField:n,mediaField:i,descriptionField:a,selection:l,getItemId:s,onChangeSelection:u,multiselect:f,posinset:m}){let{paginationInfo:d}=(0,kt.useContext)(q),p=l.includes(r),[v,y]=(0,kt.useState)(!1),{showTitle:g=!0,showMedia:b=!0,showDescription:S=!0,infiniteScrollEnabled:A}=o,T=()=>{y(!0)},O=()=>{y(!1)},k=o.fields??[],D=n&&g||i&&b||a&&S;return(0,J.jsxs)(wo.Composite.Item,{render:({children:C,...I})=>(0,J.jsx)("tr",{className:W("dataviews-view-table__row",{"is-selected":p,"is-hovered":v}),onMouseEnter:T,onMouseLeave:O,children:C,...I}),"aria-selected":p,"aria-setsize":d.totalItems||void 0,"aria-posinset":m,role:A?"article":"option",onClick:()=>{if(p)u(l.filter(C=>r!==C));else{let C=f?[...l,r]:[r];u(C)}},children:[(0,J.jsx)("td",{className:"dataviews-view-table__checkbox-column",role:"presentation",children:(0,J.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,J.jsx)(Kr,{item:t,selection:l,onChangeSelection:u,getItemId:s,titleField:n,disabled:!1,"aria-hidden":!0,tabIndex:-1})})}),D&&(0,J.jsx)("td",{role:"presentation",children:(0,J.jsx)(ea,{item:t,titleField:g?n:void 0,mediaField:b?i:void 0,descriptionField:S?a:void 0,isItemClickable:()=>!1})}),k.map(C=>{let{width:I,maxWidth:N,minWidth:h,align:E}=o.layout?.styles?.[C]??{};return(0,J.jsx)("td",{style:{width:I,maxWidth:N,minWidth:h},role:"presentation",children:(0,J.jsx)(Nb,{fields:e,item:t,column:C,align:E})},C)})]},r)}function Db({actions:t,data:e,fields:r,getItemId:o,isLoading:n=!1,onChangeView:i,onChangeSelection:a,selection:l,setOpenedFilter:s,view:u,className:f,empty:m}){let d=(0,kt.useRef)(new Map),p=(0,kt.useRef)(void 0),[v,y]=(0,kt.useState)(),g=ca(t)??!1;(0,kt.useEffect)(()=>{p.current&&(p.current.focus(),p.current=void 0)});let b=(0,kt.useId)();if(v){p.current=v,y(void 0);return}let S=w=>{let _=d.current.get(w.id),M=_?d.current.get(_.fallback):void 0;y(M?.node)},A=!!e?.length,T=r.find(w=>w.id===u.titleField),O=r.find(w=>w.id===u.mediaField),k=r.find(w=>w.id===u.descriptionField),D=u.groupBy?.field?r.find(w=>w.id===u.groupBy?.field):null,C=D?Dt(e,D):null,{showTitle:I=!0,showMedia:N=!0,showDescription:h=!0}=u,E=T&&I||O&&N||k&&h,P=u.fields??[],x=(w,_)=>M=>{M?d.current.set(w,{node:M,fallback:P[_>0?_-1:1]}):d.current.delete(w)},R=u.infiniteScrollEnabled&&!C;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)("table",{className:W("dataviews-view-table","dataviews-view-picker-table",f,{[`has-${u.layout?.density}-density`]:u.layout?.density&&["compact","comfortable"].includes(u.layout.density)}),"aria-busy":n,"aria-describedby":b,role:R?"feed":"listbox",children:[(0,J.jsx)("thead",{role:"presentation",children:(0,J.jsxs)("tr",{className:"dataviews-view-table__row",role:"presentation",children:[(0,J.jsx)("th",{className:"dataviews-view-table__checkbox-column",children:g&&(0,J.jsx)(Nn,{selection:l,onChangeSelection:a,data:e,actions:t,getItemId:o})}),E&&(0,J.jsx)("th",{children:T&&(0,J.jsx)(Yo,{ref:x(T.id,0),fieldId:T.id,view:u,fields:r,onChangeView:i,onHide:S,setOpenedFilter:s,canMove:!1})}),P.map((w,_)=>{let{width:M,maxWidth:H,minWidth:ae,align:Se}=u.layout?.styles?.[w]??{};return(0,J.jsx)("th",{style:{width:M,maxWidth:H,minWidth:ae,textAlign:Se},"aria-sort":u.sort?.direction&&u.sort?.field===w?Yi[u.sort.direction]:void 0,scope:"col",children:(0,J.jsx)(Yo,{ref:x(w,_),fieldId:w,view:u,fields:r,onChangeView:i,onHide:S,setOpenedFilter:s,canMove:u.layout?.enableMoving??!0})},w)})]})}),A&&D&&C?Array.from(C.entries()).map(([w,_])=>(0,J.jsxs)(wo.Composite,{virtualFocus:!0,orientation:"vertical",render:(0,J.jsx)("tbody",{role:"group"}),children:[(0,J.jsx)("tr",{className:"dataviews-view-table__group-header-row",role:"presentation",children:(0,J.jsx)("td",{colSpan:P.length+(E?1:0)+1,className:"dataviews-view-table__group-header-cell",role:"presentation",children:u.groupBy?.showLabel===!1?w:(0,fa.sprintf)((0,fa.__)("%1$s: %2$s"),D.label,w)})}),_.map((M,H)=>(0,J.jsx)(ud,{item:M,fields:r,id:o(M)||H.toString(),view:u,titleField:T,mediaField:O,descriptionField:k,selection:l,getItemId:o,onChangeSelection:a,multiselect:g},o(M)))]},`group-${w}`)):(0,J.jsx)(wo.Composite,{render:(0,J.jsx)("tbody",{role:"presentation"}),virtualFocus:!0,orientation:"vertical",children:A&&e.map((w,_)=>(0,J.jsx)(ud,{item:w,fields:r,id:o(w)||_.toString(),view:u,titleField:T,mediaField:O,descriptionField:k,selection:l,getItemId:o,onChangeSelection:a,multiselect:g,posinset:_+1},o(w)))})]}),(0,J.jsxs)("div",{className:W({"dataviews-loading":n,"dataviews-no-results":!A&&!n}),id:b,children:[!A&&(n?(0,J.jsx)("p",{children:(0,J.jsx)(wo.Spinner,{})}):m),A&&n&&(0,J.jsx)("p",{className:"dataviews-loading-more",children:(0,J.jsx)(wo.Spinner,{})})]})]})}var cd=Db;var fd=c(G(),1),dd=c(U(),1),md=c(j(),1);var pd=c(V(),1),kb=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}];function Yl(){let t=(0,md.useContext)(q),e=t.view,r=kb.filter(a=>t.containerWidth>=a.breakpoint),o=e.layout?.previewSize??230,n=r.map((a,l)=>({...a,index:l})).filter(a=>a.value<=o).sort((a,l)=>l.value-a.value)[0]?.index??0,i=r.map((a,l)=>({value:l}));return(0,pd.jsx)(fd.RangeControl,{__next40pxDefaultSize:!0,showTooltip:!1,label:(0,dd.__)("Preview size"),value:n,min:0,max:r.length-1,withInputField:!1,onChange:(a=0)=>{t.onChangeView({...e,layout:{...e.layout,previewSize:r[a].value}})},step:1,marks:i})}var Zo=c(G(),1),Xo=c(U(),1),vd=c(j(),1);var Qo=c(V(),1);function Ln(){let t=(0,vd.useContext)(q),e=t.view;return(0,Qo.jsxs)(Zo.__experimentalToggleGroupControl,{size:"__unstable-large",label:(0,Xo.__)("Density"),value:e.layout?.density||"balanced",onChange:r=>{t.onChangeView({...e,layout:{...e.layout,density:r}})},isBlock:!0,children:[(0,Qo.jsx)(Zo.__experimentalToggleGroupControlOption,{value:"comfortable",label:(0,Xo._x)("Comfortable","Density option for DataView layout")},"comfortable"),(0,Qo.jsx)(Zo.__experimentalToggleGroupControlOption,{value:"balanced",label:(0,Xo._x)("Balanced","Density option for DataView layout")},"balanced"),(0,Qo.jsx)(Zo.__experimentalToggleGroupControlOption,{value:"compact",label:(0,Xo._x)("Compact","Density option for DataView layout")},"compact")]})}var eo=[{type:Ho,label:(0,Sr.__)("Table"),component:Ff,icon:Si,viewConfigOptions:Ln},{type:$i,label:(0,Sr.__)("Grid"),component:Wf,icon:_i,viewConfigOptions:Yl},{type:cf,label:(0,Sr.__)("List"),component:Wl,icon:(0,Sr.isRTL)()?ll:cl,viewConfigOptions:Ln},{type:ff,label:(0,Sr.__)("Activity"),component:Qf,icon:Sl,viewConfigOptions:Ln},{type:df,label:(0,Sr.__)("Grid"),component:ld,icon:_i,viewConfigOptions:Yl,isPicker:!0},{type:mf,label:(0,Sr.__)("Table"),component:cd,icon:Si,viewConfigOptions:Ln,isPicker:!0}];var pn=c(j(),1);var jt=c(G(),1),Tr=c(U(),1),Ga=c(j(),1);function Bn(...t){}function Ul(t,e){if(Mb(t)){let r=Fb(e)?e():e;return t(r)}return t}function Mb(t){return typeof t=="function"}function Fb(t){return typeof t=="function"}function St(t,e){return typeof Object.hasOwn=="function"?Object.hasOwn(t,e):Object.prototype.hasOwnProperty.call(t,e)}function to(...t){return(...e)=>{for(let r of t)typeof r=="function"&&r(...e)}}function Hn(t){return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function $l(t,e){let r={...t};for(let o of e)St(r,o)&&delete r[o];return r}function Kl(t,e){let r={};for(let o of e)St(t,o)&&(r[o]=t[o]);return r}function jn(t){return t}function Xe(t,e){if(!t)throw typeof e!="string"?new Error("Invariant failed"):new Error(e)}function Zl(t){return Object.keys(t)}function Xl(t,...e){let r=typeof t=="function"?t(...e):t;return r==null?!1:!r}function yo(t){return t.disabled||t["aria-disabled"]===!0||t["aria-disabled"]==="true"}function Qe(t){let e={};for(let r in t)t[r]!==void 0&&(e[r]=t[r]);return e}function ee(...t){for(let e of t)if(e!==void 0)return e}var gd=c(le(),1);function hd(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function Lb(t){return!t||!(0,gd.isValidElement)(t)?!1:"ref"in t.props||"ref"in t}function bd(t){return Lb(t)?{...t.props}.ref||t.ref:null}function xd(t,e){let r={...t};for(let o in e){if(!St(e,o))continue;if(o==="className"){let i="className";r[i]=t[i]?`${t[i]} ${e[i]}`:e[i];continue}if(o==="style"){let i="style";r[i]=t[i]?{...t[i],...e[i]}:e[i];continue}let n=e[o];if(typeof n=="function"&&o.startsWith("on")){let i=t[o];if(typeof i=="function"){r[o]=(...a)=>{n(...a),i(...a)};continue}}r[o]=n}return r}var ro=Bb();function Bb(){var t;return typeof window<"u"&&!!((t=window.document)!=null&&t.createElement)}function Cr(t){return t?"self"in t?t.document:t.ownerDocument||document:document}function So(t,e=!1){var r;let{activeElement:o}=Cr(t);if(!o?.nodeName)return null;if(Ql(o)&&((r=o.contentDocument)!=null&&r.body))return So(o.contentDocument.body,e);if(e){let n=o.getAttribute("aria-activedescendant");if(n){let i=Cr(o).getElementById(n);if(i)return i}}return o}function Qt(t,e){return t===e||t.contains(e)}function Ql(t){return t.tagName==="IFRAME"}function _r(t){let e=t.tagName.toLowerCase();return e==="button"?!0:e==="input"&&t.type?Hb.indexOf(t.type)!==-1:!1}var Hb=["button","color","file","image","reset","submit"];function Jl(t){if(typeof t.checkVisibility=="function")return t.checkVisibility();let e=t;return e.offsetWidth>0||e.offsetHeight>0||t.getClientRects().length>0}function mt(t){try{let e=t instanceof HTMLInputElement&&t.selectionStart!==null,r=t.tagName==="TEXTAREA";return e||r||!1}catch{return!1}}function Wn(t){return t.isContentEditable||mt(t)}function eu(t){if(mt(t))return t.value;if(t.isContentEditable){let e=Cr(t).createRange();return e.selectNodeContents(t),e.toString()}return""}function Jo(t){let e=0,r=0;if(mt(t))e=t.selectionStart||0,r=t.selectionEnd||0;else if(t.isContentEditable){let o=Cr(t).getSelection();if(o?.rangeCount&&o.anchorNode&&Qt(t,o.anchorNode)&&o.focusNode&&Qt(t,o.focusNode)){let n=o.getRangeAt(0),i=n.cloneRange();i.selectNodeContents(t),i.setEnd(n.startContainer,n.startOffset),e=i.toString().length,i.setEnd(n.endContainer,n.endOffset),r=i.toString().length}}return{start:e,end:r}}function tu(t,e){let r=["dialog","menu","listbox","tree","grid"],o=t?.getAttribute("role");return o&&r.indexOf(o)!==-1?o:e}function en(t){if(!t)return null;let e=r=>r==="auto"||r==="scroll";if(t.clientHeight&&t.scrollHeight>t.clientHeight){let{overflowY:r}=getComputedStyle(t);if(e(r))return t}else if(t.clientWidth&&t.scrollWidth>t.clientWidth){let{overflowX:r}=getComputedStyle(t);if(e(r))return t}return en(t.parentElement)||document.scrollingElement||document.body}function zn(t,...e){/text|search|password|tel|url/i.test(t.type)&&t.setSelectionRange(...e)}function ru(t,e){let r=t.map((n,i)=>[i,n]),o=!1;return r.sort(([n,i],[a,l])=>{let s=e(i),u=e(l);return s===u||!s||!u?0:jb(s,u)?(n>a&&(o=!0),-1):(ni):t}function jb(t,e){return!!(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_PRECEDING)}function ou(){return ro&&!!navigator.maxTouchPoints}function da(){return ro?/mac|iphone|ipad|ipod/i.test(navigator.platform):!1}function Co(){return ro&&da()&&/apple/i.test(navigator.vendor)}function nu(){return ro&&/firefox\//i.test(navigator.userAgent)}function ma(t){return!!(t.currentTarget&&!Qt(t.currentTarget,t.target))}function st(t){return t.target===t.currentTarget}function wd(t){let e=t.currentTarget;if(!e)return!1;let r=da();if(r&&!t.metaKey||!r&&!t.ctrlKey)return!1;let o=e.tagName.toLowerCase();return o==="a"||o==="button"&&e.type==="submit"||o==="input"&&e.type==="submit"}function yd(t){let e=t.currentTarget;if(!e)return!1;let r=e.tagName.toLowerCase();return t.altKey?r==="a"||r==="button"&&e.type==="submit"||r==="input"&&e.type==="submit":!1}function _o(t,e){let r=new FocusEvent("blur",e),o=t.dispatchEvent(r),n={...e,bubbles:!0};return t.dispatchEvent(new FocusEvent("focusout",n)),o}function Sd(t,e,r){let o=new KeyboardEvent(e,r);return t.dispatchEvent(o)}function iu(t,e){let r=new MouseEvent("click",e);return t.dispatchEvent(r)}function pa(t,e){let r=e||t.currentTarget,o=t.relatedTarget;return!o||!Qt(r,o)}function oo(t,e,r,o){let i=(l=>{if(o){let u=setTimeout(l,o);return()=>clearTimeout(u)}let s=requestAnimationFrame(l);return()=>cancelAnimationFrame(s)})(()=>{t.removeEventListener(e,a,!0),r()}),a=()=>{i(),r()};return t.addEventListener(e,a,{once:!0,capture:!0}),i}function Jt(t,e,r,o=window){let n=[];try{o.document.addEventListener(t,e,r);for(let a of Array.from(o.frames))n.push(Jt(t,e,r,a))}catch{}return()=>{try{o.document.removeEventListener(t,e,r)}catch{}for(let a of n)a()}}var Wb=c(le(),1),de=c(le(),1),au={...Wb},Cd=au.useId,t2=au.useDeferredValue,_d=au.useInsertionEffect,Ae=ro?de.useLayoutEffect:de.useEffect;function zb(t){let[e]=(0,de.useState)(t);return e}function Id(t){let e=(0,de.useRef)(t);return Ae(()=>{e.current=t}),e}function te(t){let e=(0,de.useRef)(()=>{throw new Error("Cannot call an event handler while rendering.")});return _d?_d(()=>{e.current=t}):e.current=t,(0,de.useCallback)((...r)=>{var o;return(o=e.current)==null?void 0:o.call(e,...r)},[])}function Od(t){let[e,r]=(0,de.useState)(null);return Ae(()=>{if(e==null||!t)return;let o=null;return t(n=>(o=n,e)),()=>{t(o)}},[e,t]),[e,r]}function Ie(...t){return(0,de.useMemo)(()=>{if(t.some(Boolean))return e=>{for(let r of t)hd(r,e)}},t)}function Mt(t){if(Cd){let o=Cd();return t||o}let[e,r]=(0,de.useState)(t);return Ae(()=>{if(t||e)return;let o=Math.random().toString(36).slice(2,8);r(`id-${o}`)},[t,e]),t||e}function Td(t,e){let r=i=>{if(typeof i=="string")return i},[o,n]=(0,de.useState)(()=>r(e));return Ae(()=>{let i=t&&"current"in t?t.current:t;n(i?.tagName.toLowerCase()||r(e))},[t,e]),o}function Rd(t,e,r){let o=zb(r),[n,i]=(0,de.useState)(o);return(0,de.useEffect)(()=>{let a=t&&"current"in t?t.current:t;if(!a)return;let l=()=>{let u=a.getAttribute(e);i(u??o)},s=new MutationObserver(l);return s.observe(a,{attributeFilter:[e]}),l(),()=>s.disconnect()},[t,e,o]),n}function er(t,e){let r=(0,de.useRef)(!1);(0,de.useEffect)(()=>{if(r.current)return t();r.current=!0},e),(0,de.useEffect)(()=>()=>{r.current=!1},[])}function Vd(t,e){let r=(0,de.useRef)(!1);Ae(()=>{if(r.current)return t();r.current=!0},e),Ae(()=>()=>{r.current=!1},[])}function Nd(){return(0,de.useReducer)(()=>[],[])}function Me(t){return te(typeof t=="function"?t:()=>t)}function tr(t,e,r=[]){let o=(0,de.useCallback)(n=>(t.wrapElement&&(n=t.wrapElement(n)),e(n)),[...r,t.wrapElement]);return{...t,wrapElement:o}}function Dd(t,e,r){let o=t.onLoadedMetadataCapture,n=(0,de.useMemo)(()=>Object.assign(()=>{},{...o,[e]:r}),[o,e,r]);return[o?.[e],{onLoadedMetadataCapture:n}]}var Ed=!1;function kd(){return(0,de.useEffect)(()=>{Ed||(Jt("mousemove",qb,!0),Jt("mousedown",va,!0),Jt("mouseup",va,!0),Jt("keydown",va,!0),Jt("scroll",va,!0),Ed=!0)},[]),te(()=>su)}var su=!1,Pd=0,Ad=0;function Gb(t){let e=t.movementX||t.screenX-Pd,r=t.movementY||t.screenY-Ad;return Pd=t.screenX,Ad=t.screenY,e||r||!1}function qb(t){Gb(t)&&(su=!0)}function va(){su=!1}var pt=c(le(),1),Eo=c(V(),1);function me(t){let e=pt.forwardRef((r,o)=>t({...r,ref:o}));return e.displayName=t.displayName||t.name,e}function no(t,e){return pt.memo(t,e)}function be(t,e){let{wrapElement:r,render:o,...n}=e,i=Ie(e.ref,bd(o)),a;if(pt.isValidElement(o)){let l={...o.props,ref:i};a=pt.cloneElement(o,xd(n,l))}else o?a=o(n):a=(0,Eo.jsx)(t,{...n});return r?r(a):a}function xe(t){let e=(r={})=>t(r);return e.displayName=t.name,e}function Ct(t=[],e=[]){let r=pt.createContext(void 0),o=pt.createContext(void 0),n=()=>pt.useContext(r),i=(u=!1)=>{let f=pt.useContext(o),m=n();return u?f:f||m},a=()=>{let u=pt.useContext(o),f=n();if(!(u&&u===f))return f},l=u=>t.reduceRight((f,m)=>(0,Eo.jsx)(m,{...u,children:f}),(0,Eo.jsx)(r.Provider,{...u}));return{context:r,scopedContext:o,useContext:n,useScopedContext:i,useProviderContext:a,ContextProvider:l,ScopedContextProvider:u=>(0,Eo.jsx)(l,{...u,children:e.reduceRight((f,m)=>(0,Eo.jsx)(m,{...u,children:f}),(0,Eo.jsx)(o.Provider,{...u}))})}}var Gn=Ct(),Md=Gn.useContext,s2=Gn.useScopedContext,l2=Gn.useProviderContext,Fd=Gn.ContextProvider,Ld=Gn.ScopedContextProvider;var lu=c(le(),1),qn=Ct([Fd],[Ld]),ga=qn.useContext,d2=qn.useScopedContext,Bd=qn.useProviderContext,tn=qn.ContextProvider,ha=qn.ScopedContextProvider,Hd=(0,lu.createContext)(void 0),jd=(0,lu.createContext)(void 0);function Wd(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function rr(t,e){return e&&t.item(e)||null}function zd(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function Gd(t,e=!1){if(mt(t))t.setSelectionRange(e?t.value.length:0,t.value.length);else if(t.isContentEditable){let r=Cr(t).getSelection();r?.selectAllChildren(t),e&&r?.collapseToEnd()}}var uu=Symbol("FOCUS_SILENTLY");function qd(t){t[uu]=!0,t.focus({preventScroll:!0})}function Yd(t){let e=t[uu];return delete t[uu],e}function Po(t,e,r){if(!e||e===r)return!1;let o=t.item(e.id);return!(!o||r&&o.element===r)}var ba=c(le(),1),Yb="div",cu=xe(function({store:e,shouldRegisterItem:r=!0,getItem:o=jn,element:n,...i}){let a=Md();e=e||a;let l=Mt(i.id),s=(0,ba.useRef)(n);return(0,ba.useEffect)(()=>{let u=s.current;if(!l||!u||!r)return;let f=o({id:l,element:u});return e?.renderItem(f)},[l,r,o,e]),i={...i,ref:Ie(s,i.ref)},Qe(i)}),w2=me(function(e){let r=cu(e);return be(Yb,r)});var Ud=c(le(),1),$d=(0,Ud.createContext)(!0);var Kd="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function Yn(t){return!(!t.matches(Kd)||!Jl(t)||t.closest("[inert]"))}function Zd(t){for(;t&&!Yn(t);)t=t.closest(Kd);return t||null}function Ft(t){let e=So(t);if(!e)return!1;if(e===t)return!0;let r=e.getAttribute("aria-activedescendant");return r?r===t.id:!1}function fu(t){let e=So(t);if(!e)return!1;if(Qt(t,e))return!0;let r=e.getAttribute("aria-activedescendant");return!r||!("id"in t)?!1:r===t.id?!0:!!t.querySelector(`#${CSS.escape(r)}`)}function Xd(t){!fu(t)&&Yn(t)&&t.focus()}function Qd(t,e){"scrollIntoView"in t?(t.focus({preventScroll:!0}),t.scrollIntoView({block:"nearest",inline:"nearest",...e})):t.focus()}var Rt=c(le(),1),Ub="div",Jd=Co(),$b=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"],Kb=Symbol("safariFocusAncestor");function em(t,e){t&&(t[Kb]=e)}function Zb(t){let{tagName:e,readOnly:r,type:o}=t;return e==="TEXTAREA"&&!r||e==="SELECT"&&!r?!0:e==="INPUT"&&!r?$b.includes(o):!!(t.isContentEditable||t.getAttribute("role")==="combobox"&&t.dataset.name)}function Xb(t){return"labels"in t?t.labels:null}function tm(t){return t.tagName.toLowerCase()==="input"&&t.type?t.type==="radio"||t.type==="checkbox":!1}function Qb(t){return t?t==="button"||t==="summary"||t==="input"||t==="select"||t==="textarea"||t==="a":!0}function Jb(t){return t?t==="button"||t==="input"||t==="select"||t==="textarea":!0}function ex(t,e,r,o,n){return t?e?r&&!o?-1:void 0:r?n:n||0:n}function du(t,e){return te(r=>{t?.(r),!r.defaultPrevented&&e&&(r.stopPropagation(),r.preventDefault())})}var rm=!1,mu=!0;function tx(t){let e=t.target;e&&"hasAttribute"in e&&(e.hasAttribute("data-focus-visible")||(mu=!1))}function rx(t){t.metaKey||t.ctrlKey||t.altKey||(mu=!0)}var Un=xe(function({focusable:e=!0,accessibleWhenDisabled:r,autoFocus:o,onFocusVisible:n,...i}){let a=(0,Rt.useRef)(null);(0,Rt.useEffect)(()=>{e&&(rm||(Jt("mousedown",tx,!0),Jt("keydown",rx,!0),rm=!0))},[e]),Jd&&(0,Rt.useEffect)(()=>{if(!e)return;let x=a.current;if(!x||!tm(x))return;let R=Xb(x);if(!R)return;let w=()=>queueMicrotask(()=>x.focus());for(let _ of R)_.addEventListener("mouseup",w);return()=>{for(let _ of R)_.removeEventListener("mouseup",w)}},[e]);let l=e&&yo(i),s=!!l&&!r,[u,f]=(0,Rt.useState)(!1);(0,Rt.useEffect)(()=>{e&&s&&u&&f(!1)},[e,s,u]),(0,Rt.useEffect)(()=>{if(!e||!u)return;let x=a.current;if(!x||typeof IntersectionObserver>"u")return;let R=new IntersectionObserver(()=>{Yn(x)||f(!1)});return R.observe(x),()=>R.disconnect()},[e,u]);let m=du(i.onKeyPressCapture,l),d=du(i.onMouseDownCapture,l),p=du(i.onClickCapture,l),v=i.onMouseDown,y=te(x=>{if(v?.(x),x.defaultPrevented||!e)return;let R=x.currentTarget;if(!Jd||ma(x)||!_r(R)&&!tm(R))return;let w=!1,_=()=>{w=!0},M={capture:!0,once:!0};R.addEventListener("focusin",_,M);let H=Zd(R.parentElement);em(H,!0),oo(R,"mouseup",()=>{R.removeEventListener("focusin",_,!0),em(H,!1),!w&&Xd(R)})}),g=(x,R)=>{if(R&&(x.currentTarget=R),!e)return;let w=x.currentTarget;w&&Ft(w)&&(n?.(x),!x.defaultPrevented&&(w.dataset.focusVisible="true",f(!0)))},b=i.onKeyDownCapture,S=te(x=>{if(b?.(x),x.defaultPrevented||!e||u||x.metaKey||x.altKey||x.ctrlKey||!st(x))return;let R=x.currentTarget;oo(R,"focusout",()=>g(x,R))}),A=i.onFocusCapture,T=te(x=>{if(A?.(x),x.defaultPrevented||!e)return;if(!st(x)){f(!1);return}let R=x.currentTarget,w=()=>g(x,R);mu||Zb(x.target)?oo(x.target,"focusout",w):f(!1)}),O=i.onBlur,k=te(x=>{O?.(x),e&&pa(x)&&(x.currentTarget.removeAttribute("data-focus-visible"),f(!1))}),D=(0,Rt.useContext)($d),C=te(x=>{e&&o&&x&&D&&queueMicrotask(()=>{Ft(x)||Yn(x)&&x.focus()})}),I=Td(a),N=e&&Qb(I),h=e&&Jb(I),E=i.style,P=(0,Rt.useMemo)(()=>s?{pointerEvents:"none",...E}:E,[s,E]);return i={"data-focus-visible":e&&u||void 0,"data-autofocus":o||void 0,"aria-disabled":l||void 0,...i,ref:Ie(a,C,i.ref),style:P,tabIndex:ex(e,s,N,h,i.tabIndex),disabled:h&&s?!0:void 0,contentEditable:l?void 0:i.contentEditable,onKeyPressCapture:m,onClickCapture:p,onMouseDownCapture:d,onMouseDown:y,onKeyDownCapture:S,onFocusCapture:T,onBlur:k},Qe(i)}),M2=me(function(e){let r=Un(e);return be(Ub,r)});var io=c(le(),1),ox="button";function om(t){if(!t.isTrusted)return!1;let e=t.currentTarget;return t.key==="Enter"?_r(e)||e.tagName==="SUMMARY"||e.tagName==="A":t.key===" "?_r(e)||e.tagName==="SUMMARY"||e.tagName==="INPUT"||e.tagName==="SELECT":!1}var nx=Symbol("command"),pu=xe(function({clickOnEnter:e=!0,clickOnSpace:r=!0,...o}){let n=(0,io.useRef)(null),[i,a]=(0,io.useState)(!1);(0,io.useEffect)(()=>{n.current&&a(_r(n.current))},[]);let[l,s]=(0,io.useState)(!1),u=(0,io.useRef)(!1),f=yo(o),[m,d]=Dd(o,nx,!0),p=o.onKeyDown,v=te(b=>{p?.(b);let S=b.currentTarget;if(b.defaultPrevented||m||f||!st(b)||mt(S)||S.isContentEditable)return;let A=e&&b.key==="Enter",T=r&&b.key===" ",O=b.key==="Enter"&&!e,k=b.key===" "&&!r;if(O||k){b.preventDefault();return}if(A||T){let D=om(b);if(A){if(!D){b.preventDefault();let{view:C,...I}=b,N=()=>iu(S,I);nu()?oo(S,"keyup",N):queueMicrotask(N)}}else T&&(u.current=!0,D||(b.preventDefault(),s(!0)))}}),y=o.onKeyUp,g=te(b=>{if(y?.(b),b.defaultPrevented||m||f||b.metaKey)return;let S=r&&b.key===" ";if(u.current&&S&&(u.current=!1,!om(b))){b.preventDefault(),s(!1);let A=b.currentTarget,{view:T,...O}=b;queueMicrotask(()=>iu(A,O))}});return o={"data-active":l||void 0,type:i?"button":void 0,...d,...o,ref:Ie(n,o.ref),onKeyDown:v,onKeyUp:g},o=Un(o),o}),q2=me(function(e){let r=pu(e);return be(ox,r)});function Ao(t,e){let r=t.__unstableInternals;return Xe(r,"Invalid store"),r[e]}function vt(t,...e){let r=t,o=r,n=Symbol(),i=Bn,a=new Set,l=new Set,s=new Set,u=new Set,f=new Set,m=new WeakMap,d=new WeakMap,p=C=>(s.add(C),()=>s.delete(C)),v=()=>{let C=a.size,I=Symbol();a.add(I);let N=()=>{a.delete(I),!a.size&&i()};if(C)return N;let h=Zl(r).map(x=>to(...e.map(R=>{var w;let _=(w=R?.getState)==null?void 0:w.call(R);if(_&&St(_,x))return $e(R,[x],M=>{k(x,M[x],!0)})}))),E=[];for(let x of s)E.push(x());let P=e.map(rn);return i=to(...h,...E,...P),N},y=(C,I,N=u)=>(N.add(I),d.set(I,C),()=>{var h;(h=m.get(I))==null||h(),m.delete(I),d.delete(I),N.delete(I)}),g=(C,I)=>y(C,I),b=(C,I)=>(m.set(I,I(r,r)),y(C,I)),S=(C,I)=>(m.set(I,I(r,o)),y(C,I,f)),A=C=>vt(Kl(r,C),D),T=C=>vt($l(r,C),D),O=()=>r,k=(C,I,N=!1)=>{var h;if(!St(r,C))return;let E=Ul(I,r[C]);if(E===r[C])return;if(!N)for(let w of e)(h=w?.setState)==null||h.call(w,C,E);let P=r;r={...r,[C]:E};let x=Symbol();n=x,l.add(C);let R=(w,_,M)=>{var H;let ae=d.get(w),Se=Ne=>M?M.has(Ne):Ne===C;(!ae||ae.some(Se))&&((H=m.get(w))==null||H(),m.set(w,w(r,_)))};for(let w of u)R(w,P);queueMicrotask(()=>{if(n!==x)return;let w=r;for(let _ of f)R(_,o,l);o=w,l.clear()})},D={getState:O,setState:k,__unstableInternals:{setup:p,init:v,subscribe:g,sync:b,batch:S,pick:A,omit:T}};return D}function Ue(t,...e){if(t)return Ao(t,"setup")(...e)}function rn(t,...e){if(t)return Ao(t,"init")(...e)}function on(t,...e){if(t)return Ao(t,"subscribe")(...e)}function $e(t,...e){if(t)return Ao(t,"sync")(...e)}function ao(t,...e){if(t)return Ao(t,"batch")(...e)}function $n(t,...e){if(t)return Ao(t,"omit")(...e)}function vu(t,...e){if(t)return Ao(t,"pick")(...e)}function Io(...t){var e;let r={};for(let n of t){let i=(e=n?.getState)==null?void 0:e.call(n);i&&Object.assign(r,i)}let o=vt(r,...t);return Object.assign({},...t,o)}var or=c(le(),1),nm=c(rf(),1),{useSyncExternalStore:im}=nm.default,am=()=>()=>{};function nn(t,e=jn){let r=or.useCallback(n=>t?on(t,null,n):am(),[t]),o=()=>{let n=typeof e=="string"?e:null,i=typeof e=="function"?e:null,a=t?.getState();if(i)return i(a);if(a&&n&&St(a,n))return a[n]};return im(r,o,o)}function wa(t,e){let r=or.useRef({}),o=or.useCallback(i=>t?on(t,null,i):am(),[t]),n=()=>{let i=t?.getState(),a=!1,l=r.current;for(let s in e){let u=e[s];if(typeof u=="function"){let f=u(i);f!==l[s]&&(l[s]=f,a=!0)}if(typeof u=="string"){if(!i||!St(i,u))continue;let f=i[u];f!==l[s]&&(l[s]=f,a=!0)}}return a&&(r.current={...l}),r.current};return im(o,n,n)}function Oe(t,e,r,o){let n=St(e,r)?e[r]:void 0,i=o?e[o]:void 0,a=Id({value:n,setValue:i});Ae(()=>$e(t,[r],(l,s)=>{let{value:u,setValue:f}=a.current;f&&l[r]!==s[r]&&l[r]!==u&&f(l[r])}),[t,r]),Ae(()=>{if(n!==void 0)return t.setState(r,n),ao(t,[r],()=>{n!==void 0&&t.setState(r,n)})})}function an(t,e){let[r,o]=or.useState(()=>t(e));Ae(()=>rn(r),[r]);let n=or.useCallback(l=>nn(r,l),[r]),i=or.useMemo(()=>({...r,useState:n}),[r,n]),a=te(()=>{o(l=>t({...e,...l.getState()}))});return[i,a]}var Er=c(le(),1),lm=c(V(),1),ix="button";function ax(t){return Wn(t)?!0:t.tagName==="INPUT"&&!_r(t)}function sx(t,e=!1){let r=t.clientHeight,{top:o}=t.getBoundingClientRect(),n=Math.max(r*.875,r-40)*1.5,i=e?r-n+o:n+o;return t.tagName==="HTML"?i+t.scrollTop:i}function lx(t,e=!1){let{top:r}=t.getBoundingClientRect();return e?r+t.clientHeight:r}function sm(t,e,r,o=!1){var n;if(!e||!r)return;let{renderedItems:i}=e.getState(),a=en(t);if(!a)return;let l=sx(a,o),s,u;for(let f=0;f=0){u!==void 0&&uH.rowId===g);return p.ariaPosInSet+M.findIndex(H=>H.id===m)},isTabbable(_){if(!_?.renderedItems.length)return!0;if(_.virtualFocus)return!1;if(i)return!0;if(_.activeId===null)return!1;let M=e?.item(_.activeId);return M?.disabled||!M?.element?!0:_.activeId===m}}),k=(0,Er.useCallback)(_=>{var M;let H={..._,id:m||_.id,rowId:g,disabled:!!y,children:(M=_.element)==null?void 0:M.textContent};return a?a(H):H},[m,g,y,a]),D=u.onFocus,C=(0,Er.useRef)(!1),I=te(_=>{if(D?.(_),_.defaultPrevented||ma(_)||!m||!e||ux(_,e))return;let{virtualFocus:M,baseElement:H}=e.getState();if(e.setActiveId(m),Wn(_.currentTarget)&&Gd(_.currentTarget),!M||!st(_)||ax(_.currentTarget)||!H?.isConnected)return;Co()&&_.currentTarget.hasAttribute("data-autofocus")&&_.currentTarget.scrollIntoView({block:"nearest",inline:"nearest"}),C.current=!0,_.relatedTarget===H||Po(e,_.relatedTarget)?qd(H):H.focus()}),N=u.onBlurCapture,h=te(_=>{if(N?.(_),_.defaultPrevented)return;let M=e?.getState();M?.virtualFocus&&C.current&&(C.current=!1,_.preventDefault(),_.stopPropagation())}),E=u.onKeyDown,P=Me(o),x=Me(n),R=te(_=>{if(E?.(_),_.defaultPrevented||!st(_)||!e)return;let{currentTarget:M}=_,H=e.getState(),ae=e.item(m),Se=!!ae?.rowId,Ne=H.orientation!=="horizontal",He=H.orientation!=="vertical",rt=()=>!!(Se||He||!H.baseElement||!mt(H.baseElement)),mr={ArrowUp:(Se||Ne)&&e.up,ArrowRight:(Se||He)&&e.next,ArrowDown:(Se||Ne)&&e.down,ArrowLeft:(Se||He)&&e.previous,Home:()=>{if(rt())return!Se||_.ctrlKey?e?.first():e?.previous(-1)},End:()=>{if(rt())return!Se||_.ctrlKey?e?.last():e?.next(-1)},PageUp:()=>sm(M,e,e?.up,!0),PageDown:()=>sm(M,e,e?.down)}[_.key];if(mr){if(Wn(M)){let Q=Jo(M),ge=He&&_.key==="ArrowLeft",pr=He&&_.key==="ArrowRight",vr=Ne&&_.key==="ArrowUp",mo=Ne&&_.key==="ArrowDown";if(pr||mo){let{length:po}=eu(M);if(Q.end!==po)return}else if((ge||vr)&&Q.start!==0)return}let Y=mr();if(P(_)||Y!==void 0){if(!x(_))return;_.preventDefault(),e.move(Y)}}}),w=(0,Er.useMemo)(()=>({id:m,baseElement:b}),[m,b]);return u=tr(u,_=>(0,lm.jsx)(Hd.Provider,{value:w,children:_}),[w]),u={id:m,"data-active-item":S||void 0,...u,ref:Ie(d,u.ref),tabIndex:O?u.tabIndex:-1,onFocus:I,onBlurCapture:h,onKeyDown:R},u=pu(u),u=cu({store:e,...u,getItem:k,shouldRegisterItem:m?u.shouldRegisterItem:!1}),Qe({...u,"aria-setsize":A,"aria-posinset":T})}),dP=no(me(function(e){let r=gu(e);return be(ix,r)}));function hu(t){return Array.isArray(t)?t:typeof t<"u"?[t]:[]}function Kn(t){let e=[];for(let r of t)e.push(...r);return e}function sn(t){return t.slice().reverse()}var nr=c(le(),1),cm=c(V(),1),cx="div";function fx(t){return t.some(e=>!!e.rowId)}function dx(t){let e=t.target;return e&&!mt(e)?!1:t.key.length===1&&!t.ctrlKey&&!t.metaKey}function mx(t){return t.key==="Shift"||t.key==="Control"||t.key==="Alt"||t.key==="Meta"}function um(t,e,r){return te(o=>{var n;if(e?.(o),o.defaultPrevented||o.isPropagationStopped()||!st(o)||mx(o)||dx(o))return;let i=t.getState(),a=(n=rr(t,i.activeId))==null?void 0:n.element;if(!a)return;let{view:l,...s}=o,u=r?.current;a!==u&&a.focus(),Sd(a,o.type,s)||o.preventDefault(),o.currentTarget.contains(a)&&o.stopPropagation()})}function px(t){return Wd(Kn(sn(zd(t))))}function vx(t){let[e,r]=(0,nr.useState)(!1),o=(0,nr.useCallback)(()=>r(!0),[]),n=t.useState(i=>rr(t,i.activeId));return(0,nr.useEffect)(()=>{let i=n?.element;e&&i&&(r(!1),i.focus({preventScroll:!0}))},[n,e]),o}var bu=xe(function({store:e,composite:r=!0,focusOnMove:o=r,moveOnKeyPress:n=!0,...i}){let a=Bd();e=e||a,Xe(e,!1);let l=(0,nr.useRef)(null),s=(0,nr.useRef)(null),u=vx(e),f=e.useState("moves"),[,m]=Od(r?e.setBaseElement:null);(0,nr.useEffect)(()=>{var h;if(!e||!f||!r||!o)return;let{activeId:E}=e.getState(),P=(h=rr(e,E))==null?void 0:h.element;P&&Qd(P)},[e,f,r,o]),Ae(()=>{if(!e||!f||!r)return;let{baseElement:h,activeId:E}=e.getState();if(!(E===null)||!h)return;let x=s.current;s.current=null,x&&_o(x,{relatedTarget:h}),Ft(h)||h.focus()},[e,f,r]);let d=e.useState("activeId"),p=e.useState("virtualFocus");Ae(()=>{var h;if(!e||!r||!p)return;let E=s.current;if(s.current=null,!E)return;let x=((h=rr(e,d))==null?void 0:h.element)||So(E);x!==E&&_o(E,{relatedTarget:x})},[e,d,p,r]);let v=um(e,i.onKeyDownCapture,s),y=um(e,i.onKeyUpCapture,s),g=i.onFocusCapture,b=te(h=>{if(g?.(h),h.defaultPrevented||!e)return;let{virtualFocus:E}=e.getState();if(!E)return;let P=h.relatedTarget,x=Yd(h.currentTarget);st(h)&&x&&(h.stopPropagation(),s.current=P)}),S=i.onFocus,A=te(h=>{if(S?.(h),h.defaultPrevented||!r||!e)return;let{relatedTarget:E}=h,{virtualFocus:P}=e.getState();P?st(h)&&!Po(e,E)&&queueMicrotask(u):st(h)&&e.setActiveId(null)}),T=i.onBlurCapture,O=te(h=>{var E;if(T?.(h),h.defaultPrevented||!e)return;let{virtualFocus:P,activeId:x}=e.getState();if(!P)return;let R=(E=rr(e,x))==null?void 0:E.element,w=h.relatedTarget,_=Po(e,w),M=s.current;s.current=null,st(h)&&_?(w===R?M&&M!==w&&_o(M,h):R?_o(R,h):M&&_o(M,h),h.stopPropagation()):!Po(e,h.target)&&R&&_o(R,h)}),k=i.onKeyDown,D=Me(n),C=te(h=>{var E;if(k?.(h),h.nativeEvent.isComposing||h.defaultPrevented||!e||!st(h))return;let{orientation:P,renderedItems:x,activeId:R}=e.getState(),w=rr(e,R);if((E=w?.element)!=null&&E.isConnected)return;let _=P!=="horizontal",M=P!=="vertical",H=fx(x);if((h.key==="ArrowLeft"||h.key==="ArrowRight"||h.key==="Home"||h.key==="End")&&mt(h.currentTarget))return;let He={ArrowUp:(H||_)&&(()=>{if(H){let rt=px(x);return rt?.id}return e?.last()}),ArrowRight:(H||M)&&e.first,ArrowDown:(H||_)&&e.first,ArrowLeft:(H||M)&&e.last,Home:e.first,End:e.last,PageUp:e.first,PageDown:e.last}[h.key];if(He){let rt=He();if(rt!==void 0){if(!D(h))return;h.preventDefault(),e.move(rt)}}});i=tr(i,h=>(0,cm.jsx)(tn,{value:e,children:h}),[e]),i={"aria-activedescendant":e.useState(h=>{var E;if(e&&r&&h.virtualFocus)return(E=rr(e,h.activeId))==null?void 0:E.id}),...i,ref:Ie(l,m,i.ref),onKeyDownCapture:v,onKeyUpCapture:y,onFocusCapture:b,onFocus:A,onBlurCapture:O,onKeyDown:C};let N=e.useState(h=>r&&(h.virtualFocus||h.activeId===null));return i=Un({focusable:N,...i}),i}),IP=me(function(e){let r=bu(e);return be(cx,r)});var Zn=Ct(),RP=Zn.useContext,VP=Zn.useScopedContext,xu=Zn.useProviderContext,fm=Zn.ContextProvider,dm=Zn.ScopedContextProvider;var wu=c(le(),1),Xn=Ct([fm],[dm]),MP=Xn.useContext,FP=Xn.useScopedContext,LP=Xn.useProviderContext,mm=Xn.ContextProvider,ya=Xn.ScopedContextProvider,BP=(0,wu.createContext)(void 0),HP=(0,wu.createContext)(void 0);var ln=c(le(),1),gm=c(Qc(),1),yu=c(V(),1),gx="div";function pm(t,e){let r=setTimeout(e,t);return()=>clearTimeout(r)}function hx(t){let e=requestAnimationFrame(()=>{e=requestAnimationFrame(t)});return()=>cancelAnimationFrame(e)}function vm(...t){return t.join(", ").split(", ").reduce((e,r)=>{let o=r.endsWith("ms")?1:1e3,n=Number.parseFloat(r||"0s")*o;return n>e?n:e},0)}function Su(t,e,r){return!r&&e!==!1&&(!t||!!e)}var bx=xe(function({store:e,alwaysVisible:r,...o}){let n=xu();e=e||n,Xe(e,!1);let i=(0,ln.useRef)(null),a=Mt(o.id),[l,s]=(0,ln.useState)(null),u=e.useState("open"),f=e.useState("mounted"),m=e.useState("animated"),d=e.useState("contentElement"),p=nn(e.disclosure,"contentElement");Ae(()=>{i.current&&e?.setContentElement(i.current)},[e]),Ae(()=>{let b;return e?.setState("animated",S=>(b=S,!0)),()=>{b!==void 0&&e?.setState("animated",b)}},[e]),Ae(()=>{if(m){if(!d?.isConnected){s(null);return}return hx(()=>{s(u?"enter":f?"leave":null)})}},[m,d,u,f]),Ae(()=>{if(!e||!m||!l||!d)return;let b=()=>e?.setState("animating",!1),S=()=>(0,gm.flushSync)(b);if(l==="leave"&&u||l==="enter"&&!u)return;if(typeof m=="number")return pm(m,S);let{transitionDuration:A,animationDuration:T,transitionDelay:O,animationDelay:k}=getComputedStyle(d),{transitionDuration:D="0",animationDuration:C="0",transitionDelay:I="0",animationDelay:N="0"}=p?getComputedStyle(p):{},h=vm(O,k,I,N),E=vm(A,T,D,C),P=h+E;if(!P){l==="enter"&&e.setState("animated",!1),b();return}let x=1e3/60,R=Math.max(P-x,0);return pm(R,S)},[e,m,d,p,u,l]),o=tr(o,b=>(0,yu.jsx)(ya,{value:e,children:b}),[e]);let v=Su(f,o.hidden,r),y=o.style,g=(0,ln.useMemo)(()=>v?{...y,display:"none"}:y,[v,y]);return o={id:a,"data-open":u||void 0,"data-enter":l==="enter"||void 0,"data-leave":l==="leave"||void 0,hidden:v,...o,ref:Ie(a?e.setContentElement:null,i,o.ref),style:g},Qe(o)}),xx=me(function(e){let r=bx(e);return be(gx,r)}),$P=me(function({unmountOnHide:e,...r}){let o=xu(),n=r.store||o;return nn(n,a=>!e||a?.mounted)===!1?null:(0,yu.jsx)(xx,{...r})});function hm(t={}){let e=Io(t.store,$n(t.disclosure,["contentElement","disclosureElement"]));let r=e?.getState(),o=ee(t.open,r?.open,t.defaultOpen,!1),n=ee(t.animated,r?.animated,!1),i={open:o,animated:n,animating:!!n&&o,mounted:o,contentElement:ee(r?.contentElement,null),disclosureElement:ee(r?.disclosureElement,null)},a=vt(i,e);return Ue(a,()=>$e(a,["animated","animating"],l=>{l.animated||a.setState("animating",!1)})),Ue(a,()=>on(a,["open"],()=>{a.getState().animated&&a.setState("animating",!0)})),Ue(a,()=>$e(a,["open","animating"],l=>{a.setState("mounted",l.open||l.animating)})),{...a,disclosure:t.disclosure,setOpen:l=>a.setState("open",l),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",l=>!l),stopAnimation:()=>a.setState("animating",!1),setContentElement:l=>a.setState("contentElement",l),setDisclosureElement:l=>a.setState("disclosureElement",l)}}function bm(t,e,r){return er(e,[r.store,r.disclosure]),Oe(t,r,"open","setOpen"),Oe(t,r,"mounted","setMounted"),Oe(t,r,"animated"),Object.assign(t,{disclosure:r.disclosure})}var Qn=Ct([mm],[ya]),nA=Qn.useContext,iA=Qn.useScopedContext,xm=Qn.useProviderContext,wm=Qn.ContextProvider,ym=Qn.ScopedContextProvider;function wx(t){var e;let r=t.find(i=>!!i.element),o=[...t].reverse().find(i=>!!i.element),n=(e=r?.element)==null?void 0:e.parentElement;for(;n&&o?.element;){if(o&&n.contains(o.element))return n;n=n.parentElement}return Cr(n).body}function yx(t){return t?.__unstablePrivateStore}function Sm(t={}){var e;t.store;let r=(e=t.store)==null?void 0:e.getState(),o=ee(t.items,r?.items,t.defaultItems,[]),n=new Map(o.map(d=>[d.id,d])),i={items:o,renderedItems:ee(r?.renderedItems,[])},a=yx(t.store),l=vt({items:o,renderedItems:i.renderedItems},a),s=vt(i,t.store),u=d=>{let p=ru(d,v=>v.element);l.setState("renderedItems",p),s.setState("renderedItems",p)};Ue(s,()=>rn(l)),Ue(l,()=>ao(l,["items"],d=>{s.setState("items",d.items)})),Ue(l,()=>ao(l,["renderedItems"],d=>{let p=!0,v=requestAnimationFrame(()=>{let{renderedItems:S}=s.getState();d.renderedItems!==S&&u(d.renderedItems)});if(typeof IntersectionObserver!="function")return()=>cancelAnimationFrame(v);let y=()=>{if(p){p=!1;return}cancelAnimationFrame(v),v=requestAnimationFrame(()=>u(d.renderedItems))},g=wx(d.renderedItems),b=new IntersectionObserver(y,{root:g});for(let S of d.renderedItems)S.element&&b.observe(S.element);return()=>{cancelAnimationFrame(v),b.disconnect()}}));let f=(d,p,v=!1)=>{let y;return p(b=>{let S=b.findIndex(({id:T})=>T===d.id),A=b.slice();if(S!==-1){y=b[S];let T={...y,...d};A[S]=T,n.set(d.id,T)}else A.push(d),n.set(d.id,d);return A}),()=>{p(b=>{if(!y)return v&&n.delete(d.id),b.filter(({id:T})=>T!==d.id);let S=b.findIndex(({id:T})=>T===d.id);if(S===-1)return b;let A=b.slice();return A[S]=y,n.set(d.id,y),A})}},m=d=>f(d,p=>l.setState("items",p),!0);return{...s,registerItem:m,renderItem:d=>to(m(d),f(d,p=>l.setState("renderedItems",p))),item:d=>{if(!d)return null;let p=n.get(d);if(!p){let{items:v}=l.getState();p=v.find(y=>y.id===d),p&&n.set(d,p)}return p||null},__unstablePrivateStore:l}}function Cm(t,e,r){return er(e,[r.store]),Oe(t,r,"items","setItems"),t}var Sx={id:null};function Pr(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function Cx(t,e){return t.filter(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function _m(t,e){return t.filter(r=>r.rowId===e)}function _x(t,e,r=!1){let o=t.findIndex(n=>n.id===e);return[...t.slice(o+1),...r?[Sx]:[],...t.slice(0,o)]}function Em(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function Pm(t){let e=0;for(let{length:r}of t)r>e&&(e=r);return e}function Ex(t){return{id:"__EMPTY_ITEM__",disabled:!0,rowId:t}}function Px(t,e,r){let o=Pm(t);for(let n of t)for(let i=0;i$e(a,["renderedItems","activeId"],s=>{a.setState("activeId",u=>{var f;return u!==void 0?u:(f=Pr(s.renderedItems))==null?void 0:f.id})}));let l=(s="next",u={})=>{var f,m;let d=a.getState(),{skip:p=0,activeId:v=d.activeId,focusShift:y=d.focusShift,focusLoop:g=d.focusLoop,focusWrap:b=d.focusWrap,includesBaseElement:S=d.includesBaseElement,renderedItems:A=d.renderedItems,rtl:T=d.rtl}=u,O=s==="up"||s==="down",k=s==="next"||s==="down",D=k?T&&!O:!T||O,C=y&&!p,I=O?Kn(Px(Em(A),v,C)):A;if(I=D?sn(I):I,I=O?Ax(I):I,v==null)return(f=Pr(I))==null?void 0:f.id;let N=I.find(H=>H.id===v);if(!N)return(m=Pr(I))==null?void 0:m.id;let h=I.some(H=>H.rowId),E=I.indexOf(N),P=I.slice(E+1),x=_m(P,N.rowId);if(p){let H=Cx(x,v),ae=H.slice(p)[0]||H[H.length-1];return ae?.id}let R=g&&(O?g!=="horizontal":g!=="vertical"),w=h&&b&&(O?b!=="horizontal":b!=="vertical"),_=k?(!h||O)&&R&&S:O?S:!1;if(R){let H=w&&!_?I:_m(I,N.rowId),ae=_x(H,v,_),Se=Pr(ae,v);return Se?.id}if(w){let H=Pr(_?x:P,v);return _?H?.id||null:H?.id}let M=Pr(x,v);return!M&&_?null:M?.id};return{...o,...a,setBaseElement:s=>a.setState("baseElement",s),setActiveId:s=>a.setState("activeId",s),move:s=>{s!==void 0&&(a.setState("activeId",s),a.setState("moves",u=>u+1))},first:()=>{var s;return(s=Pr(a.getState().renderedItems))==null?void 0:s.id},last:()=>{var s;return(s=Pr(sn(a.getState().renderedItems)))==null?void 0:s.id},next:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("next",s)),previous:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("previous",s)),down:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("down",s)),up:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("up",s))}}function Im(t){return{id:Mt(t.id),...t}}function Om(t,e,r){return t=Cm(t,e,r),Oe(t,r,"activeId","setActiveId"),Oe(t,r,"includesBaseElement"),Oe(t,r,"virtualFocus"),Oe(t,r,"orientation"),Oe(t,r,"rtl"),Oe(t,r,"focusLoop"),Oe(t,r,"focusWrap"),Oe(t,r,"focusShift"),t}var Sa=c(le(),1),Ca=(0,Sa.createContext)(void 0),Jn=Ct([wm,tn],[ym,ha]),Cu=Jn.useContext,un=Jn.useScopedContext,_a=Jn.useProviderContext,Tm=Jn.ContextProvider,Rm=Jn.ScopedContextProvider,Ea=(0,Sa.createContext)(void 0),Vm=(0,Sa.createContext)(!1);function Nm(t={}){return hm(t)}function Dm(t,e,r){return bm(t,e,r)}function km({popover:t,...e}={}){let r=Io(e.store,$n(t,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"]));let o=r?.getState(),n=Nm({...e,store:r}),i=ee(e.placement,o?.placement,"bottom"),a={...n.getState(),placement:i,currentPlacement:i,anchorElement:ee(o?.anchorElement,null),popoverElement:ee(o?.popoverElement,null),arrowElement:ee(o?.arrowElement,null),rendered:Symbol("rendered")},l=vt(a,n,r);return{...n,...l,setAnchorElement:s=>l.setState("anchorElement",s),setPopoverElement:s=>l.setState("popoverElement",s),setArrowElement:s=>l.setState("arrowElement",s),render:()=>l.setState("rendered",Symbol("rendered"))}}function Mm(t,e,r){return er(e,[r.popover]),Oe(t,r,"placement"),Dm(t,e,r)}var Ix="div",_u=xe(function({store:e,...r}){let o=xm();return e=e||o,r={...r,ref:Ie(e?.setAnchorElement,r.ref)},r}),WA=me(function(e){let r=_u(e);return be(Ix,r)});var Fm=c(le(),1),Ox="div";function Lm(t){let e=t.relatedTarget;return e?.nodeType===Node.ELEMENT_NODE?e:null}function Tx(t){let e=Lm(t);return e?Qt(t.currentTarget,e):!1}var Eu=Symbol("composite-hover");function Rx(t){let e=Lm(t);if(!e)return!1;do{if(St(e,Eu)&&e[Eu])return!0;e=e.parentElement}while(e);return!1}var Pu=xe(function({store:e,focusOnHover:r=!0,blurOnHoverEnd:o=!!r,...n}){let i=ga();e=e||i,Xe(e,!1);let a=kd(),l=n.onMouseMove,s=Me(r),u=te(v=>{if(l?.(v),!v.defaultPrevented&&a()&&s(v)){if(!fu(v.currentTarget)){let y=e?.getState().baseElement;y&&!Ft(y)&&y.focus()}e?.setActiveId(v.currentTarget.id)}}),f=n.onMouseLeave,m=Me(o),d=te(v=>{var y;f?.(v),!v.defaultPrevented&&a()&&(Tx(v)||Rx(v)||s(v)&&m(v)&&(e?.setActiveId(null),(y=e?.getState().baseElement)==null||y.focus()))}),p=(0,Fm.useCallback)(v=>{v&&(v[Eu]=!0)},[]);return n={...n,ref:Ie(p,n.ref),onMouseMove:u,onMouseLeave:d},Qe(n)}),ZA=no(me(function(e){let r=Pu(e);return be(Ox,r)}));var Je=c(le(),1),Vx="input";function Bm(t,e,r){if(!r)return!1;let o=t.find(n=>!n.disabled&&n.value);return o?.value===e}function Hm(t,e){return!e||t==null?!1:(t=Hn(t),e.length>t.length&&e.toLowerCase().indexOf(t.toLowerCase())===0)}function Nx(t){return t.type==="input"}function Dx(t){return t==="inline"||t==="list"||t==="both"||t==="none"}function kx(t){let e=t.find(r=>{var o;return r.disabled?!1:((o=r.element)==null?void 0:o.getAttribute("role"))!=="tab"});return e?.id}var Mx=xe(function({store:e,focusable:r=!0,autoSelect:o=!1,getAutoSelectId:n,setValueOnChange:i,showMinLength:a=0,showOnChange:l,showOnMouseDown:s,showOnClick:u=s,showOnKeyDown:f,showOnKeyPress:m=f,blurActiveItemOnClick:d,setValueOnClick:p=!0,moveOnKeyPress:v=!0,autoComplete:y="list",...g}){let b=_a();e=e||b,Xe(e,!1);let S=(0,Je.useRef)(null),[A,T]=Nd(),O=(0,Je.useRef)(!1),k=(0,Je.useRef)(!1),D=e.useState(L=>L.virtualFocus&&o),C=y==="inline"||y==="both",[I,N]=(0,Je.useState)(C);Vd(()=>{C&&N(!0)},[C]);let h=e.useState("value"),E=(0,Je.useRef)(void 0);(0,Je.useEffect)(()=>$e(e,["selectedValue","activeId"],(L,se)=>{E.current=se.selectedValue}),[]);let P=e.useState(L=>{var se;if(C&&I&&!(L.activeValue&&Array.isArray(L.selectedValue)&&(L.selectedValue.includes(L.activeValue)||(se=E.current)!=null&&se.includes(L.activeValue))))return L.activeValue}),x=e.useState("renderedItems"),R=e.useState("open"),w=e.useState("contentElement"),_=(0,Je.useMemo)(()=>{if(!C||!I)return h;if(Bm(x,P,D)){if(Hm(h,P)){let se=P?.slice(h.length)||"";return h+se}return h}return P||h},[C,I,x,P,D,h]);(0,Je.useEffect)(()=>{let L=S.current;if(!L)return;let se=()=>N(!0);return L.addEventListener("combobox-item-move",se),()=>{L.removeEventListener("combobox-item-move",se)}},[]),(0,Je.useEffect)(()=>{if(!C||!I||!P||!Bm(x,P,D)||!Hm(h,P))return;let se=Bn;return queueMicrotask(()=>{let je=S.current;if(!je)return;let{start:We,end:Nt}=Jo(je),gr=h.length,ot=P.length;zn(je,gr,ot),se=()=>{if(!Ft(je))return;let{start:vo,end:xh}=Jo(je);vo===gr&&xh===ot&&zn(je,We,Nt)}}),()=>se()},[A,C,I,P,x,D,h]);let M=(0,Je.useRef)(null),H=te(n),ae=(0,Je.useRef)(null);(0,Je.useEffect)(()=>{if(!R||!w)return;let L=en(w);if(!L)return;M.current=L;let se=()=>{O.current=!1},je=()=>{if(!e||!O.current)return;let{activeId:Nt}=e.getState();Nt!==null&&Nt!==ae.current&&(O.current=!1)},We={passive:!0,capture:!0};return L.addEventListener("wheel",se,We),L.addEventListener("touchmove",se,We),L.addEventListener("scroll",je,We),()=>{L.removeEventListener("wheel",se,!0),L.removeEventListener("touchmove",se,!0),L.removeEventListener("scroll",je,!0)}},[R,w,e]),Ae(()=>{h&&(k.current||(O.current=!0))},[h]),Ae(()=>{D!=="always"&&R||(O.current=R)},[D,R]);let Se=e.useState("resetValueOnSelect");er(()=>{var L,se;let je=O.current;if(!e||!R||!je&&!Se)return;let{baseElement:We,contentElement:Nt,activeId:gr}=e.getState();if(!(We&&!Ft(We))){if(Nt?.hasAttribute("data-placing")){let ot=new MutationObserver(T);return ot.observe(Nt,{attributeFilter:["data-placing"]}),()=>ot.disconnect()}if(D&&je){let ot=H(x),vo=ot!==void 0?ot:(L=kx(x))!=null?L:e.first();ae.current=vo,e.move(vo??null)}else{let ot=(se=e.item(gr||e.first()))==null?void 0:se.element;ot&&"scrollIntoView"in ot&&ot.scrollIntoView({block:"nearest",inline:"nearest"})}}},[e,R,A,h,D,Se,H,x]),(0,Je.useEffect)(()=>{if(!C)return;let L=S.current;if(!L)return;let se=[L,w].filter(We=>!!We),je=We=>{se.every(Nt=>pa(We,Nt))&&e?.setValue(_)};for(let We of se)We.addEventListener("focusout",je);return()=>{for(let We of se)We.removeEventListener("focusout",je)}},[C,w,e,_]);let Ne=L=>L.currentTarget.value.length>=a,He=g.onChange,rt=Me(l??Ne),Yt=Me(i??!e.tag),mr=te(L=>{if(He?.(L),L.defaultPrevented||!e)return;let se=L.currentTarget,{value:je,selectionStart:We,selectionEnd:Nt}=se,gr=L.nativeEvent;if(O.current=!0,Nx(gr)&&(gr.isComposing&&(O.current=!1,k.current=!0),C)){let ot=gr.inputType==="insertText"||gr.inputType==="insertCompositionText",vo=We===je.length;N(ot&&vo)}if(Yt(L)){let ot=je===e.getState().value;e.setValue(je),queueMicrotask(()=>{zn(se,We,Nt)}),C&&D&&ot&&T()}rt(L)&&e.show(),(!D||!O.current)&&e.setActiveId(null)}),Y=g.onCompositionEnd,Q=te(L=>{O.current=!0,k.current=!1,Y?.(L),!L.defaultPrevented&&D&&T()}),ge=g.onMouseDown,pr=Me(d??(()=>!!e?.getState().includesBaseElement)),vr=Me(p),mo=Me(u??Ne),po=te(L=>{ge?.(L),!L.defaultPrevented&&(L.button||L.ctrlKey||e&&(pr(L)&&e.setActiveId(null),vr(L)&&e.setValue(_),mo(L)&&oo(L.currentTarget,"mouseup",e.show)))}),Lo=g.onKeyDown,Sn=Me(m??Ne),As=te(L=>{if(Lo?.(L),L.repeat||(O.current=!1),L.defaultPrevented||L.ctrlKey||L.altKey||L.shiftKey||L.metaKey||!e)return;let{open:se}=e.getState();se||(L.key==="ArrowUp"||L.key==="ArrowDown")&&Sn(L)&&(L.preventDefault(),e.show())}),mc=g.onBlur,vh=te(L=>{O.current=!1,mc?.(L),L.defaultPrevented}),gh=Mt(g.id),hh=Dx(y)?y:void 0,bh=e.useState(L=>L.activeId===null);return g={id:gh,role:"combobox","aria-autocomplete":hh,"aria-haspopup":tu(w,"listbox"),"aria-expanded":R,"aria-controls":w?.id,"data-active-item":bh||void 0,value:_,...g,ref:Ie(S,g.ref),onChange:mr,onCompositionEnd:Q,onMouseDown:po,onKeyDown:As,onBlur:vh},g=bu({store:e,focusable:r,...g,moveOnKeyPress:L=>Xl(v,L)?!1:(C&&N(!0),!0)}),g=_u({store:e,...g}),{autoComplete:"off",...g}}),Pa=me(function(e){let r=Mx(e);return be(Vx,r)});var Aa=c(le(),1),Au=c(V(),1),Fx="div";function Lx(t,e){if(e!=null)return t==null?!1:Array.isArray(t)?t.includes(e):t===e}function Bx(t){var e;return(e={menu:"menuitem",listbox:"option",tree:"treeitem"}[t])!=null?e:"option"}var jm=xe(function({store:e,value:r,hideOnClick:o,setValueOnClick:n,selectValueOnClick:i=!0,resetValueOnSelect:a,focusOnHover:l=!1,moveOnKeyPress:s=!0,getItem:u,...f}){var m;let d=un();e=e||d,Xe(e,!1);let{resetValueOnSelectState:p,multiSelectable:v,selected:y}=wa(e,{resetValueOnSelectState:"resetValueOnSelect",multiSelectable(h){return Array.isArray(h.selectedValue)},selected(h){return Lx(h.selectedValue,r)}}),g=(0,Aa.useCallback)(h=>{let E={...h,value:r};return u?u(E):E},[r,u]);n=n??!v,o=o??(r!=null&&!v);let b=f.onClick,S=Me(n),A=Me(i),T=Me((m=a??p)!=null?m:v),O=Me(o),k=te(h=>{b?.(h),!h.defaultPrevented&&(yd(h)||wd(h)||(r!=null&&(A(h)&&(T(h)&&e?.resetValue(),e?.setSelectedValue(E=>Array.isArray(E)?E.includes(r)?E.filter(P=>P!==r):[...E,r]:r)),S(h)&&e?.setValue(r)),O(h)&&e?.hide()))}),D=f.onKeyDown,C=te(h=>{if(D?.(h),h.defaultPrevented)return;let E=e?.getState().baseElement;if(!E||Ft(E))return;(h.key.length===1||h.key==="Backspace"||h.key==="Delete")&&(queueMicrotask(()=>E.focus()),mt(E)&&e?.setValue(E.value))});v&&y!=null&&(f={"aria-selected":y,...f}),f=tr(f,h=>(0,Au.jsx)(Ea.Provider,{value:r,children:(0,Au.jsx)(Vm.Provider,{value:y??!1,children:h})}),[r,y]);let I=(0,Aa.useContext)(Ca);f={role:Bx(I),children:r,...f,onClick:k,onKeyDown:C};let N=Me(s);return f=gu({store:e,...f,getItem:g,moveOnKeyPress:h=>{if(!N(h))return!1;let E=new Event("combobox-item-move"),P=e?.getState().baseElement;return P?.dispatchEvent(E),!0}}),f=Pu({store:e,focusOnHover:l,...f}),f}),ei=no(me(function(e){let r=jm(e);return be(Fx,r)}));var Ia=c(le(),1),zm=c(V(),1),Hx="span";function Wm(t){return Hn(t).toLowerCase()}function jx(t,e){let r=[];for(let o of e){let n=0,i=o.length;for(;t.indexOf(o,n)!==-1;){let a=t.indexOf(o,n);a!==-1&&r.push([a,i]),n=a+1}}return r}function Wx(t){return t.filter(([e,r],o,n)=>!n.some(([i,a],l)=>l!==o&&i<=e&&i+a>=e+r))}function zx(t){return t.sort(([e],[r])=>e-r)}function Gx(t,e){if(!t||!e)return t;let r=hu(e).filter(Boolean).map(Wm),o=[],n=(s,u=!1)=>(0,zm.jsx)("span",{"data-autocomplete-value":u?"":void 0,"data-user-value":u?void 0:"",children:s},o.length),i=zx(Wx(jx(Wm(t),new Set(r))));if(!i.length)return o.push(n(t,!0)),o;let[a]=i[0];return[t.slice(0,a),...i.flatMap(([s,u],f)=>{var m;let d=t.slice(s,s+u),p=(m=i[f+1])==null?void 0:m[0],v=t.slice(s+u,p);return[d,v]})].forEach((s,u)=>{s&&o.push(n(s,u%2===0))}),o}var qx=xe(function({store:e,value:r,userValue:o,...n}){let i=un();e=e||i;let a=(0,Ia.useContext)(Ea),l=r??a,s=nn(e,f=>o??f?.value);return n={children:(0,Ia.useMemo)(()=>{if(l)return s?Gx(l,s):l},[l,s]),...n},Qe(n)}),Oa=me(function(e){let r=qx(e);return be(Hx,r)});var Yx="label",Ux=xe(function({store:e,...r}){let o=_a();return e=e||o,Xe(e,!1),r={htmlFor:e.useState(i=>{var a;return(a=i.baseElement)==null?void 0:a.id}),...r},Qe(r)}),Ta=no(me(function(e){let r=Ux(e);return be(Yx,r)}));var Ra=c(le(),1),Iu=c(V(),1),$x="div",Gm=xe(function({store:e,alwaysVisible:r,...o}){let n=un(!0),i=Cu();e=e||i;let a=!!e&&e===n;Xe(e,!1);let l=(0,Ra.useRef)(null),s=Mt(o.id),u=e.useState("mounted"),f=Su(u,o.hidden,r),m=f?{...o.style,display:"none"}:o.style,d=e.useState(T=>Array.isArray(T.selectedValue)),p=Rd(l,"role",o.role),y=(p==="listbox"||p==="tree"||p==="grid")&&d||void 0,[g,b]=(0,Ra.useState)(!1),S=e.useState("contentElement");Ae(()=>{if(!u)return;let T=l.current;if(!T||S!==T)return;let O=()=>{b(!!T.querySelector("[role='listbox']"))},k=new MutationObserver(O);return k.observe(T,{subtree:!0,childList:!0,attributeFilter:["role"]}),O(),()=>k.disconnect()},[u,S]),g||(o={role:"listbox","aria-multiselectable":y,...o}),o=tr(o,T=>(0,Iu.jsx)(Rm,{value:e,children:(0,Iu.jsx)(Ca.Provider,{value:p,children:T})}),[e,p]);let A=s&&(!n||!a)?e.setContentElement:null;return o={id:s,hidden:f,...o,ref:Ie(A,l,o.ref),style:m},Qe(o)}),ti=me(function(e){let r=Gm(e);return be($x,r)});var Ou=c(le(),1),WI=(0,Ou.createContext)(null),zI=(0,Ou.createContext)(null),ri=Ct([tn],[ha]),qm=ri.useContext,GI=ri.useScopedContext,qI=ri.useProviderContext,YI=ri.ContextProvider,UI=ri.ScopedContextProvider;var Kx=Co()&&ou();function Ym({tag:t,...e}={}){let r=Io(e.store,vu(t,["value","rtl"]));let o=t?.getState(),n=r?.getState(),i=ee(e.activeId,n?.activeId,e.defaultActiveId,null),a=Am({...e,activeId:i,includesBaseElement:ee(e.includesBaseElement,n?.includesBaseElement,!0),orientation:ee(e.orientation,n?.orientation,"vertical"),focusLoop:ee(e.focusLoop,n?.focusLoop,!0),focusWrap:ee(e.focusWrap,n?.focusWrap,!0),virtualFocus:ee(e.virtualFocus,n?.virtualFocus,!0)}),l=km({...e,placement:ee(e.placement,n?.placement,"bottom-start")}),s=ee(e.value,n?.value,e.defaultValue,""),u=ee(e.selectedValue,n?.selectedValue,o?.values,e.defaultSelectedValue,""),f=Array.isArray(u),m={...a.getState(),...l.getState(),value:s,selectedValue:u,resetValueOnSelect:ee(e.resetValueOnSelect,n?.resetValueOnSelect,f),resetValueOnHide:ee(e.resetValueOnHide,n?.resetValueOnHide,f&&!t),activeValue:n?.activeValue},d=vt(m,a,l,r);return Kx&&Ue(d,()=>$e(d,["virtualFocus"],()=>{d.setState("virtualFocus",!1)})),Ue(d,()=>{if(t)return to($e(d,["selectedValue"],p=>{Array.isArray(p.selectedValue)&&t.setValues(p.selectedValue)}),$e(t,["values"],p=>{d.setState("selectedValue",p.values)}))}),Ue(d,()=>$e(d,["resetValueOnHide","mounted"],p=>{p.resetValueOnHide&&(p.mounted||d.setState("value",s))})),Ue(d,()=>$e(d,["open"],p=>{p.open||(d.setState("activeId",i),d.setState("moves",0))})),Ue(d,()=>$e(d,["moves","activeId"],(p,v)=>{p.moves===v.moves&&d.setState("activeValue",void 0)})),Ue(d,()=>ao(d,["moves","renderedItems"],(p,v)=>{if(p.moves===v.moves)return;let{activeId:y}=d.getState(),g=a.item(y);d.setState("activeValue",g?.value)})),{...l,...a,...d,tag:t,setValue:p=>d.setState("value",p),resetValue:()=>d.setState("value",m.value),setSelectedValue:p=>d.setState("selectedValue",p)}}function Xx(t){let e=qm();return t={...t,tag:t.tag!==void 0?t.tag:e},Im(t)}function Qx(t,e,r){return er(e,[r.tag]),Oe(t,r,"value","setValue"),Oe(t,r,"selectedValue","setSelectedValue"),Oe(t,r,"resetValueOnHide"),Oe(t,r,"resetValueOnSelect"),Object.assign(Om(Mm(t,e,r),e,r),{tag:r.tag})}function Tu(t={}){t=Xx(t);let[e,r]=an(Ym,t);return Qx(e,r,t)}var Um=c(V(),1);function Va(t={}){let e=Tu(t);return(0,Um.jsx)(Tm,{value:e,children:t.children})}var tp=c(Xm(),1);var rp=c(Et(),1),Ar=c(U(),1),Oo=c(j(),1),Lt=c(G(),1);var n0=[],oi=(t,e)=>t.singleSelection?e?.value:Array.isArray(e?.value)?e.value:!Array.isArray(e?.value)&&e?.value?[e.value]:n0;var ni=c(j(),1),i0=[];function Ke({elements:t,getElements:e}){let r=Array.isArray(t)&&t.length>0?t:i0,[o,n]=(0,ni.useState)(r),[i,a]=(0,ni.useState)(!1);return(0,ni.useEffect)(()=>{if(!e){n(r);return}let l=!1;return a(!0),e().then(s=>{if(!l){let u=Array.isArray(s)&&s.length>0?s:r;n(u)}}).catch(()=>{l||n(r)}).finally(()=>{l||a(!1)}),()=>{l=!0}},[e,r]),{elements:o,isLoading:i}}var oe=c(V(),1);function Qm(t=""){return(0,tp.default)(t.trim().toLowerCase())}var Jm=(t,e,r)=>t.singleSelection?r:Array.isArray(e?.value)?e.value.includes(r)?e.value.filter(o=>o!==r):[...e.value,r]:[r];function ep(t,e){return`${t}-${e}`}var op=({selected:t})=>(0,oe.jsx)("span",{className:W("dataviews-filters__search-widget-listitem-multi-selection",{"is-selected":t}),children:t&&(0,oe.jsx)(Lt.Icon,{icon:In})}),np=({selected:t})=>(0,oe.jsx)("span",{className:W("dataviews-filters__search-widget-listitem-single-selection",{"is-selected":t})});function ip({view:t,filter:e,onChangeView:r}){let o=(0,rp.useInstanceId)(ip,"dataviews-filter-list-box"),[n,i]=(0,Oo.useState)(e.operators?.length===1?void 0:null),a=t.filters?.find(s=>s.field===e.field),l=oi(e,a);return(0,oe.jsx)(Lt.Composite,{virtualFocus:!0,focusLoop:!0,activeId:n,setActiveId:i,role:"listbox",className:"dataviews-filters__search-widget-listbox","aria-label":(0,Ar.sprintf)((0,Ar.__)("List of: %1$s"),e.name),onFocusVisible:()=>{!n&&e.elements.length&&i(ep(o,e.elements[0].value))},render:(0,oe.jsx)(Lt.Composite.Typeahead,{}),children:e.elements.map(s=>(0,oe.jsxs)(Lt.Composite.Hover,{render:(0,oe.jsx)(Lt.Composite.Item,{id:ep(o,s.value),render:(0,oe.jsx)("div",{"aria-label":s.label,role:"option",className:"dataviews-filters__search-widget-listitem"}),onClick:()=>{let u=a?[...(t.filters??[]).map(f=>f.field===e.field?{...f,operator:a.operator||e.operators[0],value:Jm(e,a,s.value)}:f)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:Jm(e,a,s.value)}];r({...t,page:1,filters:u})}}),children:[e.singleSelection&&(0,oe.jsx)(np,{selected:l===s.value}),!e.singleSelection&&(0,oe.jsx)(op,{selected:l.includes(s.value)}),(0,oe.jsx)("span",{className:"dataviews-filters__search-widget-listitem-value",title:s.label,children:s.label})]},s.value))})}function a0({view:t,filter:e,onChangeView:r}){let[o,n]=(0,Oo.useState)(""),i=(0,Oo.useDeferredValue)(o),a=t.filters?.find(u=>u.field===e.field),l=oi(e,a),s=(0,Oo.useMemo)(()=>{let u=Qm(i);return e.elements.filter(f=>Qm(f.label).includes(u))},[e.elements,i]);return(0,oe.jsxs)(Va,{selectedValue:l,setSelectedValue:u=>{let f=a?[...(t.filters??[]).map(m=>m.field===e.field?{...m,operator:a.operator||e.operators[0],value:u}:m)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:u}];r({...t,page:1,filters:f})},setValue:n,children:[(0,oe.jsxs)("div",{className:"dataviews-filters__search-widget-filter-combobox__wrapper",children:[(0,oe.jsx)(Ta,{render:(0,oe.jsx)(Lt.VisuallyHidden,{children:(0,Ar.__)("Search items")}),children:(0,Ar.__)("Search items")}),(0,oe.jsx)(Pa,{autoSelect:"always",placeholder:(0,Ar.__)("Search"),className:"dataviews-filters__search-widget-filter-combobox__input"}),(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-filter-combobox__icon",children:(0,oe.jsx)(Lt.Icon,{icon:_l})})]}),(0,oe.jsxs)(ti,{className:"dataviews-filters__search-widget-filter-combobox-list",alwaysVisible:!0,children:[s.map(u=>(0,oe.jsxs)(ei,{resetValueOnSelect:!1,value:u.value,className:"dataviews-filters__search-widget-listitem",hideOnClick:!1,setValueOnClick:!1,focusOnHover:!0,children:[e.singleSelection&&(0,oe.jsx)(np,{selected:l===u.value}),!e.singleSelection&&(0,oe.jsx)(op,{selected:l.includes(u.value)}),(0,oe.jsxs)("span",{className:"dataviews-filters__search-widget-listitem-value",title:u.label,children:[(0,oe.jsx)(Oa,{className:"dataviews-filters__search-widget-filter-combobox-item-value",value:u.label}),!!u.description&&(0,oe.jsx)("span",{className:"dataviews-filters__search-widget-listitem-description",children:u.description})]})]},u.value)),!s.length&&(0,oe.jsx)("p",{children:(0,Ar.__)("No results found")})]})]})}function ap(t){let{elements:e,isLoading:r}=Ke({elements:t.filter.elements,getElements:t.filter.getElements});if(r)return(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,oe.jsx)(Lt.Spinner,{})});if(e.length===0)return(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,Ar.__)("No elements found")});let o=e.length>10?a0:ip;return(0,oe.jsx)(o,{...t,filter:{...t.filter,elements:e}})}var up=c(lp(),1),cp=c(Et(),1),Ru=c(j(),1),fp=c(G(),1);var Vu=c(V(),1);function dp({filter:t,view:e,onChangeView:r,fields:o}){let n=e.filters?.find(u=>u.field===t.field),i=oi(t,n),a=(0,Ru.useMemo)(()=>{let u=o.find(f=>f.id===t.field);return u&&{...u,isValid:{},getValue:({item:f})=>f[u.id],setValue:({value:f})=>({[u.id]:f})}},[o,t.field]),l=(0,Ru.useMemo)(()=>(e.filters??[]).reduce((u,f)=>(u[f.field]=f.value,u),{}),[e.filters]),s=(0,cp.useEvent)(u=>{if(!a||!n)return;let f=a.getValue({item:u});(0,up.default)(f,i)||r({...e,filters:(e.filters??[]).map(m=>m.field===t.field?{...m,operator:n.operator||t.operators[0],value:f===""?void 0:f}:m)})});return!a||!a.Edit||!n?null:(0,Vu.jsx)(fp.Flex,{className:"dataviews-filters__user-input-widget",gap:2.5,direction:"column",children:(0,Vu.jsx)(a.Edit,{hideLabelFromVision:!0,data:l,field:a,operator:n.operator,onChange:s})})}var s0=Math.pow(10,8)*24*60*60*1e3,FO=-s0,Da=6048e5,mp=864e5;var l0=3600;var pp=l0*24,LO=pp*7,u0=pp*365.2425,c0=u0/12,BO=c0*3,Nu=Symbol.for("constructDateFrom");function Ge(t,e){return typeof t=="function"?t(e):t&&typeof t=="object"&&Nu in t?t[Nu](e):t instanceof Date?new t.constructor(e):new Date(e)}function fe(t,e){return Ge(e||t,t)}function ka(t,e,r){let o=fe(t,r?.in);return isNaN(e)?Ge(r?.in||t,NaN):(e&&o.setDate(o.getDate()+e),o)}function Ma(t,e,r){let o=fe(t,r?.in);if(isNaN(e))return Ge(r?.in||t,NaN);if(!e)return o;let n=o.getDate(),i=Ge(r?.in||t,o.getTime());i.setMonth(o.getMonth()+e+1,0);let a=i.getDate();return n>=a?i:(o.setFullYear(i.getFullYear(),i.getMonth(),n),o)}var f0={};function so(){return f0}function Ir(t,e){let r=so(),o=e?.weekStartsOn??e?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,n=fe(t,e?.in),i=n.getDay(),a=(i=i.getTime()?o+1:r.getTime()>=l.getTime()?o:o-1}function Du(t){let e=fe(t),r=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return r.setUTCFullYear(e.getFullYear()),+t-+r}function vp(t,...e){let r=Ge.bind(null,t||e.find(o=>typeof o=="object"));return e.map(r)}function ku(t,e){let r=fe(t,e?.in);return r.setHours(0,0,0,0),r}function gp(t,e,r){let[o,n]=vp(r?.in,t,e),i=ku(o),a=ku(n),l=+i-Du(i),s=+a-Du(a);return Math.round((l-s)/mp)}function hp(t,e){let r=Fa(t,e),o=Ge(e?.in||t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),To(o)}function bp(t,e,r){return ka(t,e*7,r)}function xp(t,e,r){return Ma(t,e*12,r)}function wp(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function cn(t){return!(!wp(t)&&typeof t!="number"||isNaN(+fe(t)))}function yp(t,e){let r=fe(t,e?.in);return r.setDate(1),r.setHours(0,0,0,0),r}function La(t,e){let r=fe(t,e?.in);return r.setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r}var d0={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Sp=(t,e,r)=>{let o,n=d0[t];return typeof n=="string"?o=n:e===1?o=n.one:o=n.other.replace("{{count}}",e.toString()),r?.addSuffix?r.comparison&&r.comparison>0?"in "+o:o+" ago":o};function Ba(t){return(e={})=>{let r=e.width?String(e.width):t.defaultWidth;return t.formats[r]||t.formats[t.defaultWidth]}}var m0={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},p0={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},v0={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Cp={date:Ba({formats:m0,defaultWidth:"full"}),time:Ba({formats:p0,defaultWidth:"full"}),dateTime:Ba({formats:v0,defaultWidth:"full"})};var g0={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},_p=(t,e,r,o)=>g0[t];function fn(t){return(e,r)=>{let o=r?.context?String(r.context):"standalone",n;if(o==="formatting"&&t.formattingValues){let a=t.defaultFormattingWidth||t.defaultWidth,l=r?.width?String(r.width):a;n=t.formattingValues[l]||t.formattingValues[a]}else{let a=t.defaultWidth,l=r?.width?String(r.width):t.defaultWidth;n=t.values[l]||t.values[a]}let i=t.argumentCallback?t.argumentCallback(e):e;return n[i]}}var h0={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},b0={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},x0={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},w0={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},y0={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},S0={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},C0=(t,e)=>{let r=Number(t),o=r%100;if(o>20||o<10)switch(o%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},Ep={ordinalNumber:C0,era:fn({values:h0,defaultWidth:"wide"}),quarter:fn({values:b0,defaultWidth:"wide",argumentCallback:t=>t-1}),month:fn({values:x0,defaultWidth:"wide"}),day:fn({values:w0,defaultWidth:"wide"}),dayPeriod:fn({values:y0,defaultWidth:"wide",formattingValues:S0,defaultFormattingWidth:"wide"})};function dn(t){return(e,r={})=>{let o=r.width,n=o&&t.matchPatterns[o]||t.matchPatterns[t.defaultMatchWidth],i=e.match(n);if(!i)return null;let a=i[0],l=o&&t.parsePatterns[o]||t.parsePatterns[t.defaultParseWidth],s=Array.isArray(l)?E0(l,m=>m.test(a)):_0(l,m=>m.test(a)),u;u=t.valueCallback?t.valueCallback(s):s,u=r.valueCallback?r.valueCallback(u):u;let f=e.slice(a.length);return{value:u,rest:f}}}function _0(t,e){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&e(t[r]))return r}function E0(t,e){for(let r=0;r{let o=e.match(t.matchPattern);if(!o)return null;let n=o[0],i=e.match(t.parsePattern);if(!i)return null;let a=t.valueCallback?t.valueCallback(i[0]):i[0];a=r.valueCallback?r.valueCallback(a):a;let l=e.slice(n.length);return{value:a,rest:l}}}var P0=/^(\d+)(th|st|nd|rd)?/i,A0=/\d+/i,I0={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},O0={any:[/^b/i,/^(a|c)/i]},T0={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},R0={any:[/1/i,/2/i,/3/i,/4/i]},V0={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},N0={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},D0={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},k0={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},M0={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},F0={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Ap={ordinalNumber:Pp({matchPattern:P0,parsePattern:A0,valueCallback:t=>parseInt(t,10)}),era:dn({matchPatterns:I0,defaultMatchWidth:"wide",parsePatterns:O0,defaultParseWidth:"any"}),quarter:dn({matchPatterns:T0,defaultMatchWidth:"wide",parsePatterns:R0,defaultParseWidth:"any",valueCallback:t=>t+1}),month:dn({matchPatterns:V0,defaultMatchWidth:"wide",parsePatterns:N0,defaultParseWidth:"any"}),day:dn({matchPatterns:D0,defaultMatchWidth:"wide",parsePatterns:k0,defaultParseWidth:"any"}),dayPeriod:dn({matchPatterns:M0,defaultMatchWidth:"any",parsePatterns:F0,defaultParseWidth:"any"})};var Mu={code:"en-US",formatDistance:Sp,formatLong:Cp,formatRelative:_p,localize:Ep,match:Ap,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Ip(t,e){let r=fe(t,e?.in);return gp(r,La(r))+1}function Op(t,e){let r=fe(t,e?.in),o=+To(r)-+hp(r);return Math.round(o/Da)+1}function Ha(t,e){let r=fe(t,e?.in),o=r.getFullYear(),n=so(),i=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,a=Ge(e?.in||t,0);a.setFullYear(o+1,0,i),a.setHours(0,0,0,0);let l=Ir(a,e),s=Ge(e?.in||t,0);s.setFullYear(o,0,i),s.setHours(0,0,0,0);let u=Ir(s,e);return+r>=+l?o+1:+r>=+u?o:o-1}function Tp(t,e){let r=so(),o=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,n=Ha(t,e),i=Ge(e?.in||t,0);return i.setFullYear(n,0,o),i.setHours(0,0,0,0),Ir(i,e)}function Rp(t,e){let r=fe(t,e?.in),o=+Ir(r,e)-+Tp(r,e);return Math.round(o/Da)+1}function ie(t,e){let r=t<0?"-":"",o=Math.abs(t).toString().padStart(e,"0");return r+o}var Or={y(t,e){let r=t.getFullYear(),o=r>0?r:1-r;return ie(e==="yy"?o%100:o,e.length)},M(t,e){let r=t.getMonth();return e==="M"?String(r+1):ie(r+1,2)},d(t,e){return ie(t.getDate(),e.length)},a(t,e){let r=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return r==="am"?"a.m.":"p.m."}},h(t,e){return ie(t.getHours()%12||12,e.length)},H(t,e){return ie(t.getHours(),e.length)},m(t,e){return ie(t.getMinutes(),e.length)},s(t,e){return ie(t.getSeconds(),e.length)},S(t,e){let r=e.length,o=t.getMilliseconds(),n=Math.trunc(o*Math.pow(10,r-3));return ie(n,e.length)}};var mn={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Fu={G:function(t,e,r){let o=t.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return r.era(o,{width:"abbreviated"});case"GGGGG":return r.era(o,{width:"narrow"});default:return r.era(o,{width:"wide"})}},y:function(t,e,r){if(e==="yo"){let o=t.getFullYear(),n=o>0?o:1-o;return r.ordinalNumber(n,{unit:"year"})}return Or.y(t,e)},Y:function(t,e,r,o){let n=Ha(t,o),i=n>0?n:1-n;if(e==="YY"){let a=i%100;return ie(a,2)}return e==="Yo"?r.ordinalNumber(i,{unit:"year"}):ie(i,e.length)},R:function(t,e){let r=Fa(t);return ie(r,e.length)},u:function(t,e){let r=t.getFullYear();return ie(r,e.length)},Q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"Q":return String(o);case"QQ":return ie(o,2);case"Qo":return r.ordinalNumber(o,{unit:"quarter"});case"QQQ":return r.quarter(o,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(o,{width:"narrow",context:"formatting"});default:return r.quarter(o,{width:"wide",context:"formatting"})}},q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"q":return String(o);case"qq":return ie(o,2);case"qo":return r.ordinalNumber(o,{unit:"quarter"});case"qqq":return r.quarter(o,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(o,{width:"narrow",context:"standalone"});default:return r.quarter(o,{width:"wide",context:"standalone"})}},M:function(t,e,r){let o=t.getMonth();switch(e){case"M":case"MM":return Or.M(t,e);case"Mo":return r.ordinalNumber(o+1,{unit:"month"});case"MMM":return r.month(o,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(o,{width:"narrow",context:"formatting"});default:return r.month(o,{width:"wide",context:"formatting"})}},L:function(t,e,r){let o=t.getMonth();switch(e){case"L":return String(o+1);case"LL":return ie(o+1,2);case"Lo":return r.ordinalNumber(o+1,{unit:"month"});case"LLL":return r.month(o,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(o,{width:"narrow",context:"standalone"});default:return r.month(o,{width:"wide",context:"standalone"})}},w:function(t,e,r,o){let n=Rp(t,o);return e==="wo"?r.ordinalNumber(n,{unit:"week"}):ie(n,e.length)},I:function(t,e,r){let o=Op(t);return e==="Io"?r.ordinalNumber(o,{unit:"week"}):ie(o,e.length)},d:function(t,e,r){return e==="do"?r.ordinalNumber(t.getDate(),{unit:"date"}):Or.d(t,e)},D:function(t,e,r){let o=Ip(t);return e==="Do"?r.ordinalNumber(o,{unit:"dayOfYear"}):ie(o,e.length)},E:function(t,e,r){let o=t.getDay();switch(e){case"E":case"EE":case"EEE":return r.day(o,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(o,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},e:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return ie(i,2);case"eo":return r.ordinalNumber(i,{unit:"day"});case"eee":return r.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},c:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return ie(i,e.length);case"co":return r.ordinalNumber(i,{unit:"day"});case"ccc":return r.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(n,{width:"narrow",context:"standalone"});case"cccccc":return r.day(n,{width:"short",context:"standalone"});default:return r.day(n,{width:"wide",context:"standalone"})}},i:function(t,e,r){let o=t.getDay(),n=o===0?7:o;switch(e){case"i":return String(n);case"ii":return ie(n,e.length);case"io":return r.ordinalNumber(n,{unit:"day"});case"iii":return r.day(o,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(o,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},a:function(t,e,r){let n=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(t,e,r){let o=t.getHours(),n;switch(o===12?n=mn.noon:o===0?n=mn.midnight:n=o/12>=1?"pm":"am",e){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(t,e,r){let o=t.getHours(),n;switch(o>=17?n=mn.evening:o>=12?n=mn.afternoon:o>=4?n=mn.morning:n=mn.night,e){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(t,e,r){if(e==="ho"){let o=t.getHours()%12;return o===0&&(o=12),r.ordinalNumber(o,{unit:"hour"})}return Or.h(t,e)},H:function(t,e,r){return e==="Ho"?r.ordinalNumber(t.getHours(),{unit:"hour"}):Or.H(t,e)},K:function(t,e,r){let o=t.getHours()%12;return e==="Ko"?r.ordinalNumber(o,{unit:"hour"}):ie(o,e.length)},k:function(t,e,r){let o=t.getHours();return o===0&&(o=24),e==="ko"?r.ordinalNumber(o,{unit:"hour"}):ie(o,e.length)},m:function(t,e,r){return e==="mo"?r.ordinalNumber(t.getMinutes(),{unit:"minute"}):Or.m(t,e)},s:function(t,e,r){return e==="so"?r.ordinalNumber(t.getSeconds(),{unit:"second"}):Or.s(t,e)},S:function(t,e){return Or.S(t,e)},X:function(t,e,r){let o=t.getTimezoneOffset();if(o===0)return"Z";switch(e){case"X":return Np(o);case"XXXX":case"XX":return Ro(o);default:return Ro(o,":")}},x:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"x":return Np(o);case"xxxx":case"xx":return Ro(o);default:return Ro(o,":")}},O:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+Vp(o,":");default:return"GMT"+Ro(o,":")}},z:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+Vp(o,":");default:return"GMT"+Ro(o,":")}},t:function(t,e,r){let o=Math.trunc(+t/1e3);return ie(o,e.length)},T:function(t,e,r){return ie(+t,e.length)}};function Vp(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=Math.trunc(o/60),i=o%60;return i===0?r+String(n):r+String(n)+e+ie(i,2)}function Np(t,e){return t%60===0?(t>0?"-":"+")+ie(Math.abs(t)/60,2):Ro(t,e)}function Ro(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=ie(Math.trunc(o/60),2),i=ie(o%60,2);return r+n+e+i}var Dp=(t,e)=>{switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}},kp=(t,e)=>{switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}},L0=(t,e)=>{let r=t.match(/(P+)(p+)?/)||[],o=r[1],n=r[2];if(!n)return Dp(t,e);let i;switch(o){case"P":i=e.dateTime({width:"short"});break;case"PP":i=e.dateTime({width:"medium"});break;case"PPP":i=e.dateTime({width:"long"});break;default:i=e.dateTime({width:"full"});break}return i.replace("{{date}}",Dp(o,e)).replace("{{time}}",kp(n,e))},Mp={p:kp,P:L0};var B0=/^D+$/,H0=/^Y+$/,j0=["D","DD","YY","YYYY"];function Fp(t){return B0.test(t)}function Lp(t){return H0.test(t)}function Bp(t,e,r){let o=W0(t,e,r);if(console.warn(o),j0.includes(t))throw new RangeError(o)}function W0(t,e,r){let o=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${e}\`) for formatting ${o} to the input \`${r}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var z0=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,G0=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,q0=/^'([^]*?)'?$/,Y0=/''/g,U0=/[a-zA-Z]/;function Lu(t,e,r){let o=so(),n=r?.locale??o.locale??Mu,i=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??o.firstWeekContainsDate??o.locale?.options?.firstWeekContainsDate??1,a=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??o.weekStartsOn??o.locale?.options?.weekStartsOn??0,l=fe(t,r?.in);if(!cn(l))throw new RangeError("Invalid time value");let s=e.match(G0).map(f=>{let m=f[0];if(m==="p"||m==="P"){let d=Mp[m];return d(f,n.formatLong)}return f}).join("").match(z0).map(f=>{if(f==="''")return{isToken:!1,value:"'"};let m=f[0];if(m==="'")return{isToken:!1,value:$0(f)};if(Fu[m])return{isToken:!0,value:f};if(m.match(U0))throw new RangeError("Format string contains an unescaped latin alphabet character `"+m+"`");return{isToken:!1,value:f}});n.localize.preprocessor&&(s=n.localize.preprocessor(l,s));let u={firstWeekContainsDate:i,weekStartsOn:a,locale:n};return s.map(f=>{if(!f.isToken)return f.value;let m=f.value;(!r?.useAdditionalWeekYearTokens&&Lp(m)||!r?.useAdditionalDayOfYearTokens&&Fp(m))&&Bp(m,e,String(t));let d=Fu[m[0]];return d(l,m,n.localize,u)}).join("")}function $0(t){let e=t.match(q0);return e?e[1].replace(Y0,"'"):t}function Vo(t,e,r){return ka(t,-e,r)}function ja(t,e,r){return Ma(t,-e,r)}function Hp(t,e,r){return bp(t,-e,r)}function Wa(t,e,r){return xp(t,-e,r)}var B=c(U(),1),Te=c(j(),1),gt=c(No(),1);var Bu=c(V(),1),Fe={Name:(0,Bu.jsx)("span",{className:"dataviews-filters__summary-filter-text-name"}),Value:(0,Bu.jsx)("span",{className:"dataviews-filters__summary-filter-text-value"})};function Wp(t,e){switch(e){case"days":return Vo(new Date,t);case"weeks":return Hp(new Date,t);case"months":return ja(new Date,t);case"years":return Wa(new Date,t);default:return new Date}}var zp={label:(0,B.__)("Is none of"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is none of: %2$s"),t.name,e.map(r=>r.label).join(", ")),Fe),filter:((t,e,r)=>{if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?!r.some(n=>o.includes(n)):typeof o=="string"?!r.includes(o):!1}),selection:"multi"},za=[{name:Ce,label:(0,B.__)("Includes"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s includes: %2$s"),t.name,e.map(r=>r.label).join(", ")),Fe),filter(t,e,r){if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?r.some(n=>o.includes(n)):typeof o=="string"?r.includes(o):!1},selection:"multi"},{name:_e,...zp},{name:nt,label:(0,B.__)("Includes all"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s includes all: %2$s"),t.name,e.map(r=>r.label).join(", ")),Fe),filter(t,e,r){return r?.length?r.every(o=>e.getValue({item:t})?.includes(o)):!0},selection:"multi"},{name:it,...zp},{name:ft,label:(0,B.__)("Between (inc)"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s between (inc): %2$s and %3$s"),t.name,e[0].label[0],e[0].label[1]),Fe),filter(t,e,r){if(!Array.isArray(r)||r.length!==2||r[0]===void 0||r[1]===void 0)return!0;let o=e.getValue({item:t});return typeof o=="number"||o instanceof Date||typeof o=="string"?o>=r[0]&&o<=r[1]:!1},selection:"custom"},{name:dt,label:(0,B.__)("In the past"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is in the past: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Fe),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Wp(r.value,r.unit),n=(0,gt.getDate)(e.getValue({item:t}));return n>=o&&n<=new Date},selection:"custom"},{name:xt,label:(0,B.__)("Over"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is over: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Fe),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Wp(r.value,r.unit);return(0,gt.getDate)(e.getValue({item:t}))(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===e.getValue({item:t})||r===void 0},selection:"single"},{name:Pe,label:(0,B.__)("Is not"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is not: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r!==e.getValue({item:t})},selection:"single"},{name:Br,label:(0,B.__)("Less than"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is less than: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is greater than: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>r},selection:"single"},{name:jr,label:(0,B.__)("Less than or equal"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is less than or equal to: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})<=r},selection:"single"},{name:Wr,label:(0,B.__)("Greater than or equal"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is greater than or equal to: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>=r},selection:"single"},{name:zr,label:(0,B.__)("Before"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is before: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is after: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))>o},selection:"single"},{name:qr,label:(0,B.__)("Before (inc)"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is on or before: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))<=o},selection:"single"},{name:Yr,label:(0,B.__)("After (inc)"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is on or after: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))>=o},selection:"single"},{name:Ut,label:(0,B.__)("Contains"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s contains: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:$t,label:(0,B.__)("Doesn't contain"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s doesn't contain: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&!o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:Kt,label:(0,B.__)("Starts with"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s starts with: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().startsWith(String(r).toLowerCase())},selection:"single"},{name:Ur,label:(0,B.__)("On"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r),n=(0,gt.getDate)(e.getValue({item:t}));return o.getTime()===n.getTime()},selection:"single"},{name:$r,label:(0,B.__)("Not on"),filterText:(t,e)=>(0,Te.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is not: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r),n=(0,gt.getDate)(e.getValue({item:t}));return o.getTime()!==n.getTime()},selection:"single"}],Do=t=>za.find(e=>e.name===t),Gp=()=>za.map(t=>t.name),qp=t=>za.filter(e=>e.selection==="single").some(e=>e.name===t),Yp=t=>za.some(e=>e.name===t);var et=c(V(),1),K0="Enter",Z0=" ",X0=({activeElements:t,filterInView:e,filter:r})=>{if(t===void 0||t.length===0)return r.name;let o=Do(e?.operator);return o!==void 0?o.filterText(r,t):(0,Tr.sprintf)((0,Tr.__)("Unknown status for %1$s"),r.name)};function Q0({filter:t,view:e,onChangeView:r}){let o=t.operators?.map(a=>({value:a,label:Do(a)?.label||a})),n=e.filters?.find(a=>a.field===t.field),i=n?.operator||t.operators[0];return o.length>1&&(0,et.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",className:"dataviews-filters__summary-operators-container",align:"center",children:[(0,et.jsx)(jt.FlexItem,{className:"dataviews-filters__summary-operators-filter-name",children:t.name}),(0,et.jsx)(jt.SelectControl,{className:"dataviews-filters__summary-operators-filter-select",label:(0,Tr.__)("Conditions"),value:i,options:o,onChange:a=>{let l=a,s=n?.operator,u=n?[...(e.filters??[]).map(f=>{if(f.field===t.field){let m=Do(s)?.selection,d=Do(l)?.selection,p=m!==d||[m,d].includes("custom");return{...f,value:p?void 0:f.value,operator:l}}return f})]:[...e.filters??[],{field:t.field,operator:l,value:void 0}];r({...e,page:1,filters:u})},size:"small",variant:"minimal",hideLabelFromVision:!0})]})}function Up({addFilterRef:t,openedFilter:e,fields:r,...o}){let n=(0,Ga.useRef)(null),{filter:i,view:a,onChangeView:l}=o,s=a.filters?.find(g=>g.field===i.field),u=[],f=(0,Ga.useMemo)(()=>{let g=r.find(b=>b.id===i.field);return g&&{...g,getValue:({item:b})=>b[g.id]}},[r,i.field]),{elements:m}=Ke({elements:i.elements,getElements:i.getElements});if(m.length>0)u=m.filter(g=>i.singleSelection?g.value===s?.value:s?.value?.includes(g.value));else if(Array.isArray(s?.value)){let g=s.value.map(b=>f?.getValueFormatted({item:{[f.id]:b},field:f})||String(b));u=[{value:s.value,label:g}]}else if(typeof s?.value=="object")u=[{value:s.value,label:s.value}];else if(s?.value!==void 0){let g=f!==void 0?f.getValueFormatted({item:{[f.id]:s.value},field:f}):String(s.value);u=[{value:s.value,label:g}]}let d=i.isPrimary,p=s?.isLocked,v=!p&&s?.value!==void 0,y=!p&&(!d||v);return(0,et.jsx)(jt.Dropdown,{defaultOpen:e===i.field,contentClassName:"dataviews-filters__summary-popover",popoverProps:{placement:"bottom-start",role:"dialog"},onClose:()=>{n.current?.focus()},renderToggle:({isOpen:g,onToggle:b})=>(0,et.jsxs)("div",{className:"dataviews-filters__summary-chip-container",children:[(0,et.jsx)(jt.Tooltip,{text:(0,Tr.sprintf)((0,Tr.__)("Filter by: %1$s"),i.name.toLowerCase()),placement:"top",children:(0,et.jsx)("div",{className:W("dataviews-filters__summary-chip",{"has-reset":y,"has-values":v,"is-not-clickable":p}),role:"button",tabIndex:p?-1:0,onClick:()=>{p||b()},onKeyDown:S=>{!p&&[K0,Z0].includes(S.key)&&(b(),S.preventDefault())},"aria-disabled":p,"aria-pressed":g,"aria-expanded":g,ref:n,children:(0,et.jsx)(X0,{activeElements:u,filterInView:s,filter:i})})}),y&&(0,et.jsx)(jt.Tooltip,{text:d?(0,Tr.__)("Reset"):(0,Tr.__)("Remove"),placement:"top",children:(0,et.jsx)("button",{className:W("dataviews-filters__summary-chip-remove",{"has-values":v}),onClick:()=>{l({...a,page:1,filters:a.filters?.filter(S=>S.field!==i.field)}),d?n.current?.focus():t.current?.focus()},children:(0,et.jsx)(jt.Icon,{icon:On})})})]}),renderContent:()=>(0,et.jsxs)(F,{direction:"column",justify:"flex-start",children:[(0,et.jsx)(Q0,{...o}),o.filter.hasElements?(0,et.jsx)(ap,{...o,filter:{...o.filter,elements:m}}):(0,et.jsx)(dp,{...o,fields:r})]})})}var qa=c(G(),1),$p=c(U(),1),Kp=c(j(),1);var Rr=c(V(),1),{Menu:ii}=K(qa.privateApis);function Hu({filters:t,view:e,onChangeView:r,setOpenedFilter:o,triggerProps:n}){let i=t.filter(a=>!a.isVisible);return(0,Rr.jsxs)(ii,{children:[(0,Rr.jsx)(ii.TriggerButton,{...n}),(0,Rr.jsx)(ii.Popover,{children:i.map(a=>(0,Rr.jsx)(ii.Item,{onClick:()=>{o(a.field),r({...e,page:1,filters:[...e.filters||[],{field:a.field,value:void 0,operator:a.operators[0]}]})},children:(0,Rr.jsx)(ii.ItemLabel,{children:a.name})},a.field))})]})}function J0({filters:t,view:e,onChangeView:r,setOpenedFilter:o},n){if(!t.length||t.every(({isPrimary:a})=>a))return null;let i=t.filter(a=>!a.isVisible);return(0,Rr.jsx)(Hu,{triggerProps:{render:(0,Rr.jsx)(qa.Button,{accessibleWhenDisabled:!0,size:"compact",className:"dataviews-filters-button",variant:"tertiary",disabled:!i.length,ref:n}),children:(0,$p.__)("Add filter")},filters:t,view:e,onChangeView:r,setOpenedFilter:o})}var Zp=(0,Kp.forwardRef)(J0);var Xp=c(G(),1),Qp=c(U(),1),Jp=c(V(),1);function ev({filters:t,view:e,onChangeView:r}){let o=i=>t.some(a=>a.field===i&&a.isPrimary),n=!e.search&&!e.filters?.some(i=>!i.isLocked&&(i.value!==void 0||!o(i.field)));return(0,Jp.jsx)(Xp.Button,{disabled:n,accessibleWhenDisabled:!0,size:"compact",variant:"tertiary",className:"dataviews-filters__reset-button",onClick:()=>{r({...e,page:1,search:"",filters:e.filters?.filter(i=>!!i.isLocked)||[]})},children:(0,Qp.__)("Reset")})}var tv=c(j(),1);function ew(t,e){return(0,tv.useMemo)(()=>{let r=[];return t.forEach(o=>{if(o.filterBy===!1||!o.hasElements&&!o.Edit)return;let n=o.filterBy.operators,i=!!o.filterBy?.isPrimary,a=e.filters?.some(l=>l.field===o.id&&!!l.isLocked)??!1;r.push({field:o.id,name:o.label,elements:o.elements,getElements:o.getElements,hasElements:o.hasElements,singleSelection:n.some(l=>qp(l)),operators:n,isVisible:a||i||!!e.filters?.some(l=>l.field===o.id&&Yp(l.operator)),isPrimary:i,isLocked:a})}),r.sort((o,n)=>o.isLocked&&!n.isLocked?-1:!o.isLocked&&n.isLocked?1:o.isPrimary&&!n.isPrimary?-1:!o.isPrimary&&n.isPrimary?1:o.name.localeCompare(n.name)),r},[t,e])}var ai=ew;var si=c(V(),1);function tw({className:t}){let{fields:e,view:r,onChangeView:o,openedFilter:n,setOpenedFilter:i}=(0,pn.useContext)(q),a=(0,pn.useRef)(null),l=ai(e,r),s=(0,si.jsx)(Zp,{filters:l,view:r,onChangeView:o,ref:a,setOpenedFilter:i},"add-filter"),u=l.filter(m=>m.isVisible);if(u.length===0)return null;let f=[...u.map(m=>(0,si.jsx)(Up,{filter:m,view:r,fields:e,onChangeView:o,addFilterRef:a,openedFilter:n},m.field)),s];return f.push((0,si.jsx)(ev,{filters:l,view:r,onChangeView:o},"reset-filters")),(0,si.jsx)(F,{direction:"row",justify:"flex-start",gap:"sm",style:{width:"fit-content"},wrap:"wrap",className:t,children:f})}var li=(0,pn.memo)(tw);var lo=c(j(),1),rv=c(G(),1);var Ya=c(U(),1);var ir=c(V(),1);function rw(){let{filters:t,view:e,onChangeView:r,setOpenedFilter:o,isShowingFilter:n,setIsShowingFilter:i}=(0,lo.useContext)(q),a=(0,lo.useRef)(null),l=(0,lo.useCallback)(p=>{r(p),i(!0)},[r,i]);if(t.length===0)return null;let s=t.some(p=>p.isVisible),u={label:(0,Ya.__)("Add filter"),"aria-expanded":!1,isPressed:!1},f={label:(0,Ya._x)("Filter","verb"),"aria-expanded":n,isPressed:n,onClick:()=>{n||o(null),i(!n)}},m=t.some(p=>p.isPrimary||p.isLocked),d=(0,ir.jsx)(rv.Button,{ref:a,className:"dataviews-filters__visibility-toggle",size:"compact",icon:Tn,disabled:m,accessibleWhenDisabled:!0,...s?f:u});return(0,ir.jsx)("div",{className:"dataviews-filters__container-visibility-toggle",children:s?(0,ir.jsx)(ow,{buttonRef:a,filtersCount:e.filters?.length,children:d}):(0,ir.jsx)(Hu,{filters:t,view:e,onChangeView:l,setOpenedFilter:o,triggerProps:{render:d}})})}function ow({buttonRef:t,filtersCount:e,children:r}){return(0,lo.useEffect)(()=>()=>{t.current?.focus()},[t]),(0,ir.jsxs)(ir.Fragment,{children:[r,!!e&&(0,ir.jsx)("span",{className:"dataviews-filters-toggle__count",children:e})]})}var Ua=rw;var ov=c(j(),1);var nv=c(V(),1);function nw(t){let{isShowingFilter:e}=(0,ov.useContext)(q);return e?(0,nv.jsx)(li,{...t}):null}var $a=nw;var iv=c(j(),1),av=c(U(),1);var ju=c(V(),1);function Wu({className:t}){let{actions:e=[],data:r,fields:o,getItemId:n,getItemLevel:i,hasInitiallyLoaded:a,isLoading:l,view:s,onChangeView:u,selection:f,onChangeSelection:m,setOpenedFilter:d,onClickItem:p,isItemClickable:v,renderItemLink:y,defaultLayouts:g,empty:b=(0,ju.jsx)("p",{children:(0,av.__)("No results")})}=(0,iv.useContext)(q);if(!a)return null;let S=eo.find(A=>A.type===s.type&&g[A.type])?.component;return(0,ju.jsx)(S,{className:t,actions:e,data:r,fields:o,getItemId:n,getItemLevel:i,isLoading:l,onChangeView:u,onChangeSelection:m,selection:f,setOpenedFilter:d,onClickItem:p,renderItemLink:y,isItemClickable:v,view:s,empty:b})}var sv=c(j(),1);var vn=c(V(),1),iw=[];function zu(){let{view:t,paginationInfo:{totalItems:e=0,totalPages:r},data:o,actions:n=iw,isLoading:i,hasInitiallyLoaded:a,hasInfiniteScrollHandler:l}=(0,sv.useContext)(q),s=!!i&&a&&!l&&!!o?.length,u=Xt(!!s),f=qo(n,o)&&[Ho,$i].includes(t.type);return!s&&(!e||!r||r<=1&&!f)?null:(!!e||s)&&(0,vn.jsx)("div",{className:"dataviews-footer",inert:s?"true":void 0,children:(0,vn.jsxs)(F,{direction:"row",justify:"end",align:"center",className:W("dataviews-footer__content",{"is-refreshing":u}),gap:"sm",children:[f&&(0,vn.jsx)(Qi,{}),(0,vn.jsx)(Jf,{})]})})}var lv=c(U(),1),Wt=c(j(),1),uv=c(G(),1),cv=c(Et(),1);var fv=c(V(),1),aw=(0,Wt.memo)(function({label:e}){let{view:r,onChangeView:o}=(0,Wt.useContext)(q),[n,i,a]=(0,cv.useDebouncedInput)(r.search);(0,Wt.useEffect)(()=>{i(r.search??"")},[r.search,i]);let l=(0,Wt.useRef)(o),s=(0,Wt.useRef)(r);(0,Wt.useEffect)(()=>{l.current=o,s.current=r},[o,r]),(0,Wt.useEffect)(()=>{a!==s.current?.search&&l.current({...s.current,page:1,search:a})},[a]);let u=e||(0,lv.__)("Search");return(0,fv.jsx)(uv.SearchControl,{className:"dataviews-search",onChange:i,value:n,label:u,placeholder:u,size:"compact"})}),Gu=aw;var Le=c(G(),1),Vr=c(U(),1),zt=c(j(),1);var Yu=c(mv(),1),bv=c(Et(),1);var pv=c(G(),1),qu=c(U(),1),vv=c(j(),1);var gv=c(V(),1);function hv(){let t=(0,vv.useContext)(q),{view:e,onChangeView:r}=t,o=e.infiniteScrollEnabled??!1;return t.hasInfiniteScrollHandler?(0,gv.jsx)(pv.ToggleControl,{label:(0,qu.__)("Enable infinite scroll"),help:(0,qu.__)("Automatically load more content as you scroll, instead of showing pagination links."),checked:o,onChange:n=>{r({...e,infiniteScrollEnabled:n})}}):null}var re=c(V(),1),{Menu:ui}=K(Le.privateApis),sw={className:"dataviews-config__popover",placement:"bottom-end",offset:9};function Uu(){let{view:t,onChangeView:e,defaultLayouts:r}=(0,zt.useContext)(q),o=Object.keys(r);if(o.length<=1)return null;let n=eo.find(i=>t.type===i.type);return(0,re.jsxs)(ui,{children:[(0,re.jsx)(ui.TriggerButton,{render:(0,re.jsx)(Le.Button,{size:"compact",icon:n?.icon,label:(0,Vr.__)("Layout")})}),(0,re.jsx)(ui.Popover,{children:o.map(i=>{let a=eo.find(l=>l.type===i);return a?(0,re.jsx)(ui.RadioItem,{value:i,name:"view-actions-available-view",checked:i===t.type,hideOnClick:!0,onChange:l=>{switch(l.target.value){case"list":case"grid":case"table":case"pickerGrid":case"pickerTable":case"activity":let s={...t};return"layout"in s&&delete s.layout,e({...s,type:l.target.value,...r[l.target.value]})}(0,Yu.default)("Invalid dataview")},children:(0,re.jsx)(ui.ItemLabel,{children:a.label})},i):null})})]})}function lw(){let{view:t,fields:e,onChangeView:r}=(0,zt.useContext)(q),o=(0,zt.useMemo)(()=>e.filter(i=>i.enableSorting!==!1).map(i=>({label:i.label,value:i.id})),[e]);return(0,re.jsx)(Le.SelectControl,{__next40pxDefaultSize:!0,label:(0,Vr.__)("Sort by"),value:t.sort?.field,options:o,onChange:n=>{r({...t,sort:{direction:t?.sort?.direction||"desc",field:n},showLevels:!1})}})}function uw(){let{view:t,fields:e,onChangeView:r}=(0,zt.useContext)(q);if(e.filter(i=>i.enableSorting!==!1).length===0)return null;let n=t.sort?.direction;return!n&&t.sort?.field&&(n="desc"),(0,re.jsx)(Le.__experimentalToggleGroupControl,{className:"dataviews-view-config__sort-direction",__next40pxDefaultSize:!0,isBlock:!0,label:(0,Vr.__)("Order"),value:n,onChange:i=>{if(i==="asc"||i==="desc"){r({...t,sort:{direction:i,field:t.sort?.field||e.find(a=>a.enableSorting!==!1)?.id||""},showLevels:!1});return}(0,Yu.default)("Invalid direction")},children:qi.map(i=>(0,re.jsx)(Le.__experimentalToggleGroupControlOptionIcon,{value:i,icon:uf[i],label:Ui[i]},i))})}function cw(){let{view:t,config:e,onChangeView:r}=(0,zt.useContext)(q),{infiniteScrollEnabled:o}=t;return!e||!e.perPageSizes||e.perPageSizes.length<2||e.perPageSizes.length>6||o?null:(0,re.jsx)(Le.__experimentalToggleGroupControl,{__next40pxDefaultSize:!0,isBlock:!0,label:(0,Vr.__)("Items per page"),value:t.perPage||10,disabled:!t?.sort?.field,onChange:n=>{let i=typeof n=="number"||n===void 0?n:parseInt(n,10);r({...t,perPage:i,page:1})},children:e.perPageSizes.map(n=>(0,re.jsx)(Le.__experimentalToggleGroupControlOption,{value:n,label:n.toString()},n))})}function fw(){let{onReset:t}=(0,zt.useContext)(q);return t===void 0?null:(0,re.jsx)(Le.Button,{variant:"tertiary",size:"compact",disabled:t===!1,accessibleWhenDisabled:!0,className:"dataviews-view-config__reset-button",onClick:()=>{typeof t=="function"&&t()},children:(0,Vr.__)("Reset view")})}function $u(){let{view:t,onReset:e}=(0,zt.useContext)(q),r=(0,bv.useInstanceId)(xv,"dataviews-view-config-dropdown"),o=eo.find(i=>i.type===t.type),n=typeof e=="function";return(0,re.jsx)(Le.Dropdown,{expandOnMobile:!0,popoverProps:{...sw,id:r},renderToggle:({onToggle:i,isOpen:a})=>(0,re.jsxs)("div",{className:"dataviews-view-config__toggle-wrapper",children:[(0,re.jsx)(Le.Button,{size:"compact",icon:rl,label:(0,Vr._x)("View options","View is used as a noun"),onClick:i,"aria-expanded":a?"true":"false","aria-controls":r}),n&&(0,re.jsx)("span",{className:"dataviews-view-config__modified-indicator"})]}),renderContent:()=>(0,re.jsx)(Le.__experimentalDropdownContentWrapper,{paddingSize:"medium",className:"dataviews-config__popover-content-wrapper",children:(0,re.jsxs)(F,{direction:"column",className:"dataviews-view-config",gap:"xl",children:[(0,re.jsxs)(F,{direction:"row",justify:"space-between",align:"center",className:"dataviews-view-config__header",children:[(0,re.jsx)(Le.__experimentalHeading,{level:2,className:"dataviews-settings-section__title",children:(0,Vr.__)("Appearance")}),(0,re.jsx)(fw,{})]}),(0,re.jsxs)(F,{direction:"column",gap:"lg",children:[(0,re.jsxs)(F,{direction:"row",gap:"sm",className:"dataviews-view-config__sort-controls",children:[(0,re.jsx)(lw,{}),(0,re.jsx)(uw,{})]}),!!o?.viewConfigOptions&&(0,re.jsx)(o.viewConfigOptions,{}),(0,re.jsx)(hv,{}),(0,re.jsx)(cw,{}),(0,re.jsx)(ta,{})]})]})})})}function xv(){return(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(Uu,{}),(0,re.jsx)($u,{})]})}var dw=(0,zt.memo)(xv),wv=dw;var yv=c(G(),1),Sv=c(j(),1);function pe(t,e){let r;return t?.required&&e?.required?r=e?.required?.message?e.required:void 0:t?.pattern&&e?.pattern?r=e.pattern:t?.min&&e?.min?r=e.min:t?.max&&e?.max?r=e.max:t?.minLength&&e?.minLength?r=e.minLength:t?.maxLength&&e?.maxLength?r=e.maxLength:t?.elements&&e?.elements?r=e.elements:e?.custom&&(r=e.custom),r}var Cv=c(V(),1),{ValidatedCheckboxControl:mw}=K(yv.privateApis);function _v({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,label:s,description:u,isValid:f}=t,m=(0,Sv.useCallback)(()=>{e(l({item:r,value:!a({item:r})}))},[r,a,e,l]);return(0,Cv.jsx)(mw,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:pe(f,i),hidden:o,label:s,help:u,checked:a({item:r}),onChange:m})}var Ka=c(G(),1),Ev=c(j(),1);var Ku=c(V(),1),{ValidatedComboboxControl:pw}=K(Ka.privateApis);function Za({data:t,field:e,onChange:r,hideLabelFromVision:o,validity:n}){let{label:i,description:a,placeholder:l,getValue:s,setValue:u,isValid:f}=e,m=s({item:t})??"",d=(0,Ev.useCallback)(y=>r(u({item:t,value:y??""})),[t,r,u]),{elements:p,isLoading:v}=Ke({elements:e.elements,getElements:e.getElements});return v?(0,Ku.jsx)(Ka.Spinner,{}):(0,Ku.jsx)(pw,{required:!!e.isValid?.required,customValidity:pe(f,n),label:i,value:m,help:a,placeholder:l,options:p,onChange:d,hideLabelFromVision:o,allowReset:!0,expandOnFocus:!0})}var es=c(G(),1),Bt=c(j(),1),Ja=c(U(),1),Vt=c(No(),1);var hn=c(G(),1),Zu=c(j(),1),ar=c(U(),1);var gn=c(V(),1),vw={[dt]:[{value:"days",label:(0,ar.__)("Days")},{value:"weeks",label:(0,ar.__)("Weeks")},{value:"months",label:(0,ar.__)("Months")},{value:"years",label:(0,ar.__)("Years")}],[xt]:[{value:"days",label:(0,ar.__)("Days ago")},{value:"weeks",label:(0,ar.__)("Weeks ago")},{value:"months",label:(0,ar.__)("Months ago")},{value:"years",label:(0,ar.__)("Years ago")}]};function Xa({className:t,data:e,field:r,onChange:o,hideLabelFromVision:n,operator:i}){let a=vw[i===dt?"inThePast":"over"],{id:l,label:s,getValue:u,setValue:f}=r,m=u({item:e}),{value:d="",unit:p=a[0].value}=m&&typeof m=="object"?m:{},v=(0,Zu.useCallback)(g=>o(f({item:e,value:{value:Number(g),unit:p}})),[o,f,e,p]),y=(0,Zu.useCallback)(g=>o(f({item:e,value:{value:d,unit:g}})),[o,f,e,d]);return(0,gn.jsx)(hn.BaseControl,{id:l,className:W(t,"dataviews-controls__relative-date"),label:s,hideLabelFromVision:n,children:(0,gn.jsxs)(F,{direction:"row",gap:"sm",children:[(0,gn.jsx)(hn.__experimentalNumberControl,{__next40pxDefaultSize:!0,className:"dataviews-controls__relative-date-number",spinControls:"none",min:1,step:1,value:d,onChange:v}),(0,gn.jsx)(hn.SelectControl,{className:"dataviews-controls__relative-date-unit",__next40pxDefaultSize:!0,label:(0,ar.__)("Unit"),value:p,options:a,onChange:y,hideLabelFromVision:!0})]})})}var Pv=c(No(),1);function Qa(t){if(!t)return null;let e=(0,Pv.getDate)(t);return e&&cn(e)?e:null}var uo=c(V(),1),{DateCalendar:gw,ValidatedInputControl:hw}=K(es.privateApis),bw=t=>t?(0,Vt.dateI18n)("Y-m-d\\TH:i",(0,Vt.getDate)(t)):"";function xw({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,description:s,setValue:u,getValue:f,isValid:m}=e,d=f({item:t}),p=typeof d=="string"?d:void 0,[v,y]=(0,Bt.useState)(()=>Qa(p)||new Date),g=(0,Bt.useRef)(null),b=(0,Bt.useRef)(void 0),S=(0,Bt.useRef)(null),A=(0,Bt.useCallback)(N=>r(u({item:t,value:N})),[t,r,u]);(0,Bt.useEffect)(()=>()=>{b.current&&clearTimeout(b.current)},[]);let T=(0,Bt.useCallback)(N=>{let h;if(N){let E=(0,Vt.dateI18n)("Y-m-d",N),P;p?P=(0,Vt.dateI18n)("H:i",(0,Vt.getDate)(p)):P=(0,Vt.dateI18n)("H:i",N),h=(0,Vt.getDate)(`${E}T${P}`).toISOString(),A(h),b.current&&clearTimeout(b.current)}else A(void 0);S.current=g.current&&g.current.ownerDocument.activeElement,b.current=setTimeout(()=>{g.current&&(g.current.focus(),g.current.blur(),A(h),S.current&&S.current instanceof HTMLElement&&S.current.focus())},0)},[A,p]),O=(0,Bt.useCallback)(N=>{if(N){let h=(0,Vt.getDate)(N);A(h.toISOString());let E=Qa(h.toISOString());E&&y(E)}else A(void 0)},[A]),{format:k}=e,D=k.weekStartsOn??(0,Vt.getSettings)().l10n.startOfWeek,{timezone:{string:C}}=(0,Vt.getSettings)(),I=l;return m?.required&&!n&&!o?I=`${l} (${(0,Ja.__)("Required")})`:!m?.required&&n&&!o&&(I=`${l} (${(0,Ja.__)("Optional")})`),(0,uo.jsx)(es.BaseControl,{id:a,label:I,help:s,hideLabelFromVision:o,children:(0,uo.jsxs)(F,{direction:"column",gap:"lg",children:[(0,uo.jsx)(gw,{style:{width:"100%"},selected:p&&Qa(p)||void 0,onSelect:T,month:v,onMonthChange:y,timeZone:C||void 0,weekStartsOn:D}),(0,uo.jsx)(hw,{ref:g,__next40pxDefaultSize:!0,required:!!m?.required,customValidity:pe(m,i),type:"datetime-local",label:(0,Ja.__)("Date time"),hideLabelFromVision:!0,value:bw(p),onChange:O})]})})}function Av({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===dt||i===xt?(0,uo.jsx)(Xa,{className:"dataviews-controls__datetime",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):(0,uo.jsx)(xw,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var ut=c(G(),1),ce=c(j(),1),qe=c(U(),1),lt=c(No(),1);var ve=c(V(),1),{DateCalendar:ww,DateRangeCalendar:yw}=K(ut.privateApis),Sw=[{id:"today",label:(0,qe.__)("Today"),getValue:()=>(0,lt.getDate)(null)},{id:"yesterday",label:(0,qe.__)("Yesterday"),getValue:()=>{let t=(0,lt.getDate)(null);return Vo(t,1)}},{id:"past-week",label:(0,qe.__)("Past week"),getValue:()=>{let t=(0,lt.getDate)(null);return Vo(t,7)}},{id:"past-month",label:(0,qe.__)("Past month"),getValue:()=>{let t=(0,lt.getDate)(null);return ja(t,1)}}],Cw=[{id:"last-7-days",label:(0,qe.__)("Last 7 days"),getValue:()=>{let t=(0,lt.getDate)(null);return[Vo(t,7),t]}},{id:"last-30-days",label:(0,qe.__)("Last 30 days"),getValue:()=>{let t=(0,lt.getDate)(null);return[Vo(t,30),t]}},{id:"month-to-date",label:(0,qe.__)("Month to date"),getValue:()=>{let t=(0,lt.getDate)(null);return[yp(t),t]}},{id:"last-year",label:(0,qe.__)("Last year"),getValue:()=>{let t=(0,lt.getDate)(null);return[Wa(t,1),t]}},{id:"year-to-date",label:(0,qe.__)("Year to date"),getValue:()=>{let t=(0,lt.getDate)(null);return[La(t),t]}}],bn=t=>{if(!t)return null;let e=(0,lt.getDate)(t);return e&&cn(e)?e:null},Xu=t=>t?typeof t=="string"?t:Lu(t,"yyyy-MM-dd"):"";function Iv({field:t,validity:e,inputRefs:r,isTouched:o,setIsTouched:n,children:i}){let{isValid:a}=t,[l,s]=(0,ce.useState)(void 0),u=(0,ce.useCallback)(()=>{let m=Array.isArray(r)?r:[r];for(let d of m){let p=d.current;if(p&&!p.validity.valid){s({type:"invalid",message:p.validationMessage});return}}s(void 0)},[r]);return(0,ce.useEffect)(()=>{let m=Array.isArray(r)?r:[r],d=e?pe(a,e):void 0;for(let p of m){let v=p.current;v&&v.setCustomValidity(d?.type==="invalid"&&d.message?d.message:"")}},[r,a,e]),(0,ce.useEffect)(()=>{let m=Array.isArray(r)?r:[r],d=p=>{p.preventDefault(),n(!0)};for(let p of m)p.current?.addEventListener("invalid",d);return()=>{for(let p of m)p.current?.removeEventListener("invalid",d)}},[r,n]),(0,ce.useEffect)(()=>{if(!o)return;let m=e?pe(a,e):void 0;m?s(m):u()},[o,a,e,u]),(0,ve.jsxs)("div",{onBlur:m=>{o||(!m.relatedTarget||!m.currentTarget.contains(m.relatedTarget))&&n(!0)},children:[i,(0,ve.jsx)("div",{"aria-live":"polite",children:l&&(0,ve.jsxs)("p",{className:W("components-validated-control__indicator",l.type==="invalid"?"is-invalid":void 0),children:[(0,ve.jsx)(ut.Icon,{className:"components-validated-control__indicator-icon",icon:al,size:16,fill:"currentColor"}),l.message]})})]})}function _w({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,setValue:s,getValue:u,isValid:f,format:m}=e,[d,p]=(0,ce.useState)(null),v=m.weekStartsOn??(0,lt.getSettings)().l10n.startOfWeek,y=u({item:t}),g=typeof y=="string"?y:void 0,[b,S]=(0,ce.useState)(()=>bn(g)||new Date),[A,T]=(0,ce.useState)(!1),O=(0,ce.useRef)(null),k=(0,ce.useCallback)(E=>r(s({item:t,value:E})),[t,r,s]),D=(0,ce.useCallback)(E=>{let P=E?Lu(E,"yyyy-MM-dd"):void 0;k(P),p(null),T(!0)},[k]),C=(0,ce.useCallback)(E=>{let P=E.getValue(),x=Xu(P);S(P),k(x),p(E.id),T(!0)},[k]),I=(0,ce.useCallback)(E=>{if(k(E),E){let P=bn(E);P&&S(P)}p(null),T(!0)},[k]),{timezone:{string:N}}=(0,lt.getSettings)(),h=l;return f?.required&&!n?h=`${l} (${(0,qe.__)("Required")})`:!f?.required&&n&&(h=`${l} (${(0,qe.__)("Optional")})`),(0,ve.jsx)(Iv,{field:e,validity:i,inputRefs:O,isTouched:A,setIsTouched:T,children:(0,ve.jsx)(ut.BaseControl,{id:a,className:"dataviews-controls__date",label:h,hideLabelFromVision:o,children:(0,ve.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ve.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[Sw.map(E=>{let P=d===E.id;return(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:P,size:"small",onClick:()=>C(E),children:E.label},E.id)}),(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!d,size:"small",disabled:!!d,accessibleWhenDisabled:!1,children:(0,qe.__)("Custom")})]}),(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:O,type:"date",label:(0,qe.__)("Date"),hideLabelFromVision:!0,value:g,onChange:I,required:!!e.isValid?.required}),(0,ve.jsx)(ww,{style:{width:"100%"},selected:g&&bn(g)||void 0,onSelect:D,month:b,onMonthChange:S,timeZone:N||void 0,weekStartsOn:v})]})})})}function Ew({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,getValue:s,setValue:u,format:f}=e,m,d=s({item:t});Array.isArray(d)&&d.length===2&&d.every(x=>typeof x=="string")&&(m=d);let p=f.weekStartsOn??(0,lt.getSettings)().l10n.startOfWeek,v=(0,ce.useCallback)(x=>{r(u({item:t,value:x}))},[t,r,u]),[y,g]=(0,ce.useState)(null),b=(0,ce.useMemo)(()=>{if(!m)return{from:void 0,to:void 0};let[x,R]=m;return{from:bn(x)||void 0,to:bn(R)||void 0}},[m]),[S,A]=(0,ce.useState)(()=>b.from||new Date),[T,O]=(0,ce.useState)(!1),k=(0,ce.useRef)(null),D=(0,ce.useRef)(null),C=(0,ce.useCallback)((x,R)=>{x&&R?v([Xu(x),Xu(R)]):!x&&!R&&v(void 0)},[v]),I=(0,ce.useCallback)(x=>{C(x?.from,x?.to),g(null),O(!0)},[C]),N=(0,ce.useCallback)(x=>{let[R,w]=x.getValue();A(R),C(R,w),g(x.id),O(!0)},[C]),h=(0,ce.useCallback)((x,R)=>{let[w,_]=m||[void 0,void 0];if(C(x==="from"?R:w,x==="to"?R:_),R){let ae=bn(R);ae&&A(ae)}g(null),O(!0)},[m,C]),{timezone:E}=(0,lt.getSettings)(),P=l;return e.isValid?.required&&!n?P=`${l} (${(0,qe.__)("Required")})`:!e.isValid?.required&&n&&(P=`${l} (${(0,qe.__)("Optional")})`),(0,ve.jsx)(Iv,{field:e,validity:i,inputRefs:[k,D],isTouched:T,setIsTouched:O,children:(0,ve.jsx)(ut.BaseControl,{id:a,className:"dataviews-controls__date",label:P,hideLabelFromVision:o,children:(0,ve.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ve.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[Cw.map(x=>{let R=y===x.id;return(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:R,size:"small",onClick:()=>N(x),children:x.label},x.id)}),(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!y,size:"small",accessibleWhenDisabled:!1,disabled:!!y,children:(0,qe.__)("Custom")})]}),(0,ve.jsxs)(F,{direction:"row",gap:"sm",justify:"space-between",className:"dataviews-controls__date-range-inputs",children:[(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:k,type:"date",label:(0,qe.__)("From"),hideLabelFromVision:!0,value:m?.[0],onChange:x=>h("from",x),required:!!e.isValid?.required}),(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:D,type:"date",label:(0,qe.__)("To"),hideLabelFromVision:!0,value:m?.[1],onChange:x=>h("to",x),required:!!e.isValid?.required})]}),(0,ve.jsx)(yw,{style:{width:"100%"},selected:b,onSelect:I,month:S,onMonthChange:A,timeZone:E.string||void 0,weekStartsOn:p})]})})})}function Ov({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===dt||i===xt?(0,ve.jsx)(Xa,{className:"dataviews-controls__date",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):i===ft?(0,ve.jsx)(Ew,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a}):(0,ve.jsx)(_w,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var ts=c(G(),1),Tv=c(j(),1);var Qu=c(V(),1),{ValidatedSelectControl:Pw}=K(ts.privateApis);function rs({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{type:a,label:l,description:s,getValue:u,setValue:f,isValid:m}=e,d=a==="array",p=u({item:t})??(d?[]:""),v=(0,Tv.useCallback)(b=>r(f({item:t,value:b})),[t,r,f]),{elements:y,isLoading:g}=Ke({elements:e.elements,getElements:e.getElements});return g?(0,Qu.jsx)(ts.Spinner,{}):(0,Qu.jsx)(Pw,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(m,i),label:l,value:p,help:s,options:y,onChange:v,__next40pxDefaultSize:!0,hideLabelFromVision:o,multiple:d})}var Ju=c(V(),1),Aw=10;function Rv(t){let{field:e}=t,{elements:r}=Ke({elements:e.elements,getElements:e.getElements});return r.length>=Aw?(0,Ju.jsx)(Za,{...t}):(0,Ju.jsx)(rs,{...t})}var ns=c(G(),1);var Vv=c(G(),1),Nv=c(j(),1);var Dv=c(V(),1),{ValidatedInputControl:Iw}=K(Vv.privateApis);function sr({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,type:i,prefix:a,suffix:l,validity:s}){let{label:u,placeholder:f,description:m,getValue:d,setValue:p,isValid:v}=e,y=d({item:t}),g=(0,Nv.useCallback)(b=>r(p({item:t,value:b})),[t,p,r]);return(0,Dv.jsx)(Iw,{required:!!v.required,markWhenOptional:n,customValidity:pe(v,s),label:u,placeholder:f,value:y??"",help:m,onChange:g,hideLabelFromVision:o,type:i,prefix:a,suffix:l,pattern:v.pattern?v.pattern.constraint:void 0,minLength:v.minLength?v.minLength.constraint:void 0,maxLength:v.maxLength?v.maxLength.constraint:void 0,__next40pxDefaultSize:!0})}var os=c(V(),1);function kv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,os.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"email",prefix:(0,os.jsx)(ns.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,os.jsx)(ns.Icon,{icon:nl})})})}var as=c(G(),1);var is=c(V(),1);function Mv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,is.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"tel",prefix:(0,is.jsx)(as.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,is.jsx)(as.Icon,{icon:vl})})})}var ls=c(G(),1);var ss=c(V(),1);function Fv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,ss.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"url",prefix:(0,ss.jsx)(ls.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,ss.jsx)(ls.Icon,{icon:ml})})})}var Nr=c(G(),1),ci=c(j(),1),us=c(U(),1);var co=c(V(),1),{ValidatedNumberControl:Ow}=K(Nr.privateApis);function Lv(t){if(t===""||t===void 0)return"";let e=Number(t);return Number.isFinite(e)?e:""}function Tw({value:t,onChange:e,hideLabelFromVision:r,step:o}){let[n="",i=""]=t,a=(0,ci.useCallback)(s=>e([Lv(s),i]),[e,i]),l=(0,ci.useCallback)(s=>e([n,Lv(s)]),[e,n]);return(0,co.jsx)(Nr.BaseControl,{help:(0,us.__)("The max. value must be greater than the min. value."),children:(0,co.jsxs)(Nr.Flex,{direction:"row",gap:4,children:[(0,co.jsx)(Nr.__experimentalNumberControl,{label:(0,us.__)("Min."),value:n,max:i?Number(i)-o:void 0,onChange:a,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o}),(0,co.jsx)(Nr.__experimentalNumberControl,{label:(0,us.__)("Max."),value:i,min:n?Number(n)+o:void 0,onChange:l,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o})]})})}function cs({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){let l=e.format?.decimals??0,s=Math.pow(10,Math.abs(l)*-1),{label:u,description:f,getValue:m,setValue:d,isValid:p}=e,v=m({item:t})??"",y=(0,ci.useCallback)(b=>{r(d({item:t,value:["",void 0].includes(b)?void 0:Number(b)}))},[t,r,d]),g=(0,ci.useCallback)(b=>{r(d({item:t,value:b}))},[t,r,d]);if(i===ft){let b=["",""];return Array.isArray(v)&&v.length===2&&v.every(S=>typeof S=="number"||S==="")&&(b=v),(0,co.jsx)(Tw,{value:b,onChange:g,hideLabelFromVision:o,step:s})}return(0,co.jsx)(Ow,{required:!!p.required,markWhenOptional:n,customValidity:pe(p,a),label:u,help:f,value:v,onChange:y,__next40pxDefaultSize:!0,hideLabelFromVision:o,step:s,min:p.min?p.min.constraint:void 0,max:p.max?p.max.constraint:void 0})}var Bv=c(V(),1);function Hv(t){return(0,Bv.jsx)(cs,{...t})}var jv=c(V(),1);function Wv(t){return(0,jv.jsx)(cs,{...t})}var fs=c(G(),1),zv=c(j(),1);var ec=c(V(),1),{ValidatedRadioControl:Rw}=K(fs.privateApis);function Gv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:f}=e,{elements:m,isLoading:d}=Ke({elements:e.elements,getElements:e.getElements}),p=s({item:t}),v=(0,zv.useCallback)(y=>r(u({item:t,value:y})),[t,r,u]);return d?(0,ec.jsx)(fs.Spinner,{}):(0,ec.jsx)(Rw,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(f,i),label:a,help:l,onChange:v,options:m,selected:p,hideLabelFromVision:o})}var tc=c(j(),1);var qv=c(V(),1);function Yv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{prefix:l,suffix:s}=i||{};return(0,qv.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a,prefix:l?(0,tc.createElement)(l):void 0,suffix:s?(0,tc.createElement)(s):void 0})}var Uv=c(G(),1),$v=c(j(),1);var Kv=c(V(),1),{ValidatedToggleControl:Vw}=K(Uv.privateApis);function Zv({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:f}=t,m=(0,$v.useCallback)(()=>{e(u({item:r,value:!s({item:r})}))},[e,u,r,s]);return(0,Kv.jsx)(Vw,{required:!!f.required,markWhenOptional:n,customValidity:pe(f,i),hidden:o,label:a,help:l,checked:s({item:r}),onChange:m})}var Xv=c(G(),1),Qv=c(j(),1);var Jv=c(V(),1),{ValidatedTextareaControl:Nw}=K(Xv.privateApis);function eg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{rows:l=4}=i||{},{label:s,placeholder:u,description:f,setValue:m,isValid:d}=e,p=e.getValue({item:t}),v=(0,Qv.useCallback)(y=>r(m({item:t,value:y})),[t,r,m]);return(0,Jv.jsx)(Nw,{required:!!d.required,markWhenOptional:n,customValidity:pe(d,a),label:s,placeholder:u,value:p??"",help:f,onChange:v,rows:l,minLength:d.minLength?d.minLength.constraint:void 0,maxLength:d.maxLength?d.maxLength.constraint:void 0,__next40pxDefaultSize:!0,hideLabelFromVision:o})}var xn=c(G(),1),tg=c(j(),1);var ds=c(V(),1),{ValidatedToggleGroupControl:Dw}=K(xn.privateApis);function rg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,isValid:s}=e,u=a({item:t}),f=(0,tg.useCallback)(v=>r(l({item:t,value:v})),[t,r,l]),{elements:m,isLoading:d}=Ke({elements:e.elements,getElements:e.getElements});if(d)return(0,ds.jsx)(xn.Spinner,{});if(m.length===0)return null;let p=m.find(v=>v.value===u);return(0,ds.jsx)(Dw,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(s,i),__next40pxDefaultSize:!0,isBlock:!0,label:e.label,help:p?.description||e.description,onChange:f,value:u,hideLabelFromVision:o,children:m.map(v=>(0,ds.jsx)(xn.__experimentalToggleGroupControlOption,{label:v.label,value:v.value},v.value))})}var ms=c(G(),1),ps=c(j(),1);var fi=c(V(),1),{ValidatedFormTokenField:kw}=K(ms.privateApis);function og({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,getValue:s,setValue:u,isValid:f}=e,m=s({item:t}),{elements:d,isLoading:p}=Ke({elements:e.elements,getElements:e.getElements}),v=(0,ps.useMemo)(()=>Array.isArray(m)?m.map(g=>d?.find(S=>S.value===g)||{value:g,label:g}):[],[m,d]),y=(0,ps.useCallback)(g=>{let b=g.map(S=>typeof S=="object"&&"value"in S?S.value:S);r(u({item:t,value:b}))},[r,u,t]);return p?(0,fi.jsx)(ms.Spinner,{}):(0,fi.jsx)(kw,{required:!!f?.required,markWhenOptional:n,customValidity:pe(f,i),label:o?void 0:a,value:v,onChange:y,placeholder:l,suggestions:d?.map(g=>g.value),__experimentalValidateInput:g=>e.isValid?.elements&&d?d.some(b=>b.value===g||b.label===g):!0,__experimentalExpandOnFocus:d&&d.length>0,__experimentalShowHowTo:!e.isValid?.elements,displayTransform:g=>typeof g=="object"&&"label"in g?g.label:typeof g=="string"&&d&&d.find(S=>S.value===g)?.label||g,__experimentalRenderItem:({item:g})=>{if(typeof g=="string"&&d){let b=d.find(S=>S.value===g);return(0,fi.jsx)("span",{children:b?.label||g})}return(0,fi.jsx)("span",{children:g})}})}var Mw={grad:.9,turn:360,rad:360/(2*Math.PI)},Dr=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},Ze=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},Ht=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},dg=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},ng=function(t){return{r:Ht(t.r,0,255),g:Ht(t.g,0,255),b:Ht(t.b,0,255),a:Ht(t.a)}},rc=function(t){return{r:Ze(t.r),g:Ze(t.g),b:Ze(t.b),a:Ze(t.a,3)}},Fw=/^#([0-9a-f]{3,8})$/i,vs=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},mg=function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=Math.max(e,r,o),a=i-Math.min(e,r,o),l=a?i===e?(r-o)/a:i===r?2+(o-e)/a:4+(e-r)/a:0;return{h:60*(l<0?l+6:l),s:i?a/i*100:0,v:i/255*100,a:n}},pg=function(t){var e=t.h,r=t.s,o=t.v,n=t.a;e=e/360*6,r/=100,o/=100;var i=Math.floor(e),a=o*(1-r),l=o*(1-(e-i)*r),s=o*(1-(1-e+i)*r),u=i%6;return{r:255*[o,l,a,a,s,o][u],g:255*[s,o,o,l,a,a][u],b:255*[a,a,s,o,o,l][u],a:n}},ig=function(t){return{h:dg(t.h),s:Ht(t.s,0,100),l:Ht(t.l,0,100),a:Ht(t.a)}},ag=function(t){return{h:Ze(t.h),s:Ze(t.s),l:Ze(t.l),a:Ze(t.a,3)}},sg=function(t){return pg((r=(e=t).s,{h:e.h,s:(r*=((o=e.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:e.a}));var e,r,o},di=function(t){return{h:(e=mg(t)).h,s:(n=(200-(r=e.s))*(o=e.v)/100)>0&&n<200?r*o/100/(n<=100?n:200-n)*100:0,l:n/2,a:e.a};var e,r,o,n},Lw=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Bw=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Hw=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,jw=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,lg={string:[[function(t){var e=Fw.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?Ze(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?Ze(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=Hw.exec(t)||jw.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:ng({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=Lw.exec(t)||Bw.exec(t);if(!e)return null;var r,o,n=ig({h:(r=e[1],o=e[2],o===void 0&&(o="deg"),Number(r)*(Mw[o]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return sg(n)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=n===void 0?1:n;return Dr(e)&&Dr(r)&&Dr(o)?ng({r:Number(e),g:Number(r),b:Number(o),a:Number(i)}):null},"rgb"],[function(t){var e=t.h,r=t.s,o=t.l,n=t.a,i=n===void 0?1:n;if(!Dr(e)||!Dr(r)||!Dr(o))return null;var a=ig({h:Number(e),s:Number(r),l:Number(o),a:Number(i)});return sg(a)},"hsl"],[function(t){var e=t.h,r=t.s,o=t.v,n=t.a,i=n===void 0?1:n;if(!Dr(e)||!Dr(r)||!Dr(o))return null;var a=(function(l){return{h:dg(l.h),s:Ht(l.s,0,100),v:Ht(l.v,0,100),a:Ht(l.a)}})({h:Number(e),s:Number(r),v:Number(o),a:Number(i)});return pg(a)},"hsv"]]},ug=function(t,e){for(var r=0;r=.5},t.prototype.toHex=function(){return e=rc(this.rgba),r=e.r,o=e.g,n=e.b,a=(i=e.a)<1?vs(Ze(255*i)):"","#"+vs(r)+vs(o)+vs(n)+a;var e,r,o,n,i,a},t.prototype.toRgb=function(){return rc(this.rgba)},t.prototype.toRgbString=function(){return e=rc(this.rgba),r=e.r,o=e.g,n=e.b,(i=e.a)<1?"rgba("+r+", "+o+", "+n+", "+i+")":"rgb("+r+", "+o+", "+n+")";var e,r,o,n,i},t.prototype.toHsl=function(){return ag(di(this.rgba))},t.prototype.toHslString=function(){return e=ag(di(this.rgba)),r=e.h,o=e.s,n=e.l,(i=e.a)<1?"hsla("+r+", "+o+"%, "+n+"%, "+i+")":"hsl("+r+", "+o+"%, "+n+"%)";var e,r,o,n,i},t.prototype.toHsv=function(){return e=mg(this.rgba),{h:Ze(e.h),s:Ze(e.s),v:Ze(e.v),a:Ze(e.a,3)};var e},t.prototype.invert=function(){return ct({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),ct(oc(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),ct(oc(this.rgba,-e))},t.prototype.grayscale=function(){return ct(oc(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),ct(cg(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),ct(cg(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?ct({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):Ze(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=di(this.rgba);return typeof e=="number"?ct({h:e,s:r.s,l:r.l,a:r.a}):Ze(r.h)},t.prototype.isEqual=function(e){return this.toHex()===ct(e).toHex()},t})(),ct=function(t){return t instanceof fg?t:new fg(t)};var _t=c(G(),1),ic=c(j(),1),vg=c(U(),1);var kr=c(V(),1),{ValidatedInputControl:zw}=K(_t.privateApis),Gw=({color:t,onColorChange:e})=>{let r=t&&ct(t).isValid()?t:"#ffffff";return(0,kr.jsx)(_t.Dropdown,{className:"dataviews-controls__color-picker-dropdown",popoverProps:{resize:!1},renderToggle:({onToggle:o})=>(0,kr.jsx)(_t.Button,{onClick:o,"aria-label":(0,vg.__)("Open color picker"),size:"small",icon:()=>(0,kr.jsx)(_t.ColorIndicator,{colorValue:r})}),renderContent:()=>(0,kr.jsx)(_t.__experimentalDropdownContentWrapper,{paddingSize:"none",children:(0,kr.jsx)(_t.ColorPicker,{color:r,onChange:e,enableAlpha:!0})})})};function gg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,description:s,setValue:u,isValid:f}=e,m=e.getValue({item:t})||"",d=(0,ic.useCallback)(v=>{r(u({item:t,value:v}))},[t,r,u]),p=(0,ic.useCallback)(v=>{r(u({item:t,value:v||""}))},[t,r,u]);return(0,kr.jsx)(zw,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(f,i),label:a,placeholder:l,value:m,help:s,onChange:p,hideLabelFromVision:o,type:"text",prefix:(0,kr.jsx)(_t.__experimentalInputControlPrefixWrapper,{variant:"control",children:(0,kr.jsx)(Gw,{color:m,onColorChange:d})})})}var hs=c(G(),1),bs=c(j(),1),ac=c(U(),1);var gs=c(V(),1);function hg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let[a,l]=(0,bs.useState)(!1),s=(0,bs.useCallback)(()=>{l(u=>!u)},[]);return(0,gs.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:a?"text":"password",suffix:(0,gs.jsx)(hs.__experimentalInputControlSuffixWrapper,{variant:"control",children:(0,gs.jsx)(hs.Button,{icon:a?Vn:Pl,onClick:s,size:"small",label:a?(0,ac.__)("Hide password"):(0,ac.__)("Show password")})})})}function xs(t){return Array.isArray(t.elements)&&t.elements.length>0||typeof t.getElements=="function"}var xg=c(V(),1),bg={adaptiveSelect:Rv,array:og,checkbox:_v,color:gg,combobox:Za,datetime:Av,date:Ov,email:kv,telephone:Mv,url:Fv,integer:Hv,number:Wv,password:hg,radio:Gv,select:rs,text:Yv,toggle:Zv,textarea:eg,toggleGroup:rg};function qw(t){return t&&typeof t=="object"&&typeof t.control=="string"}function Yw(t){let{control:e,...r}=t,o=ws(e);return o===null?null:function(i){return(0,xg.jsx)(o,{...i,config:r})}}function wg(t,e){return typeof t.Edit=="function"?t.Edit:typeof t.Edit=="string"?ws(t.Edit):qw(t.Edit)?Yw(t.Edit):xs(t)&&t.type!=="array"?ws("adaptiveSelect"):e===null?null:ws(e)}function ws(t){return Object.keys(bg).includes(t)?bg[t]:null}function Uw(t,e,r){if(t.filterBy===!1)return!1;let o=t.filterBy?.operators?.filter(n=>r.includes(n))??e;return o.length===0?!1:{isPrimary:!!t.filterBy?.isPrimary,operators:o}}var yg=Uw;var $w=t=>({item:e})=>{let r=t.split("."),o=e;for(let n of r)o.hasOwnProperty(n)?o=o[n]:o=void 0;return o},Sg=$w;var Kw=t=>({value:e})=>{let r=t.split("."),o={},n=o;for(let i of r.slice(0,-1))n[i]={},n=n[i];return n[r.at(-1)]=e,o},Cg=Kw;var Eg=c(U(),1);function ys({item:t,field:e}){let{elements:r,isLoading:o}=Ke({elements:e.elements,getElements:e.getElements}),n=e.getValue({item:t});return o||r.length===0?n:r?.find(i=>i.value===n)?.label||e.getValue({item:t})}var _g=c(V(),1);function Re({item:t,field:e}){return e.hasElements?(0,_g.jsx)(ys,{item:t,field:e}):e.getValueFormatted({item:t,field:e})}var lr=(t,e,r)=>r==="asc"?t.localeCompare(e):e.localeCompare(t);function Ve(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)}function ur(t,e){if(typeof e.isValid.minLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length>=e.isValid.minLength.constraint}function cr(t,e){if(typeof e.isValid.maxLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length<=e.isValid.maxLength.constraint}function fr(t,e){if(e.isValid.pattern?.constraint===void 0)return!0;try{let r=new RegExp(e.isValid.pattern.constraint),o=e.getValue({item:t});return[void 0,"",null].includes(o)?!0:r.test(String(o))}catch{return!1}}function we(t,e){let o=(e.elements??[]).map(i=>i.value);if(o.length===0)return!0;let n=e.getValue({item:t});return[].concat(n).every(i=>o.includes(i))}function Zw({item:t,field:e}){return e.getValue({item:t})}var ht=Zw;var Xw=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function Qw(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Xw.test(r)?(0,Eg.__)("Value must be a valid email address."):null}var Pg={type:"email",render:Re,Edit:"email",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ce,_e],validOperators:[Ee,Pe,Ut,$t,Kt,Ce,_e,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:fr,minLength:ur,maxLength:cr,elements:we,custom:Qw}};var Ag=c(U(),1);var wn=(t,e,r)=>r==="asc"?t-e:e-t;function Ss(t,e){if(typeof e.isValid.min?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)>=e.isValid.min.constraint}function Cs(t,e){if(typeof e.isValid.max?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)<=e.isValid.max.constraint}var Ig={separatorThousand:","};function Jw({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="integer"?o=Ig:o=e.format;let{separatorThousand:n}=o,i=Math.trunc(r);return n?String(i).replace(/\B(?=(\d{3})+(?!\d))/g,n):String(i)}function ey(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Number.isInteger(r)?(0,Ag.__)("Value must be an integer."):null}var Og={type:"integer",render:Re,Edit:"integer",sort:wn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe,Br,Hr,jr,Wr,ft],validOperators:[Ee,Pe,Br,Hr,jr,Wr,ft,Ce,_e,nt,it],format:Ig,getValueFormatted:Jw,validate:{required:Ve,min:Ss,max:Cs,elements:we,custom:ey}};var Tg=c(U(),1);var Rg={separatorThousand:",",separatorDecimal:".",decimals:2};function ty({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="number"?o=Rg:o=e.format;let{separatorThousand:n,separatorDecimal:i,decimals:a}=o,l=r.toFixed(a),[s,u]=l.split("."),f=n?s.replace(/\B(?=(\d{3})+(?!\d))/g,n):s;return a===0?f:f+i+u}function ry(t){return t===""||t===void 0||t===null}function oy(t,e){let r=e.getValue({item:t});return!ry(r)&&!Number.isFinite(r)?(0,Tg.__)("Value must be a number."):null}var Vg={type:"number",render:Re,Edit:"number",sort:wn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe,Br,Hr,jr,Wr,ft],validOperators:[Ee,Pe,Br,Hr,jr,Wr,ft,Ce,_e,nt,it],format:Rg,getValueFormatted:ty,validate:{required:Ve,min:Ss,max:Cs,elements:we,custom:oy}};var Ng={type:"text",render:Re,Edit:"text",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ce,_e],validOperators:[Ee,Pe,Ut,$t,Kt,Ce,_e,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:fr,minLength:ur,maxLength:cr,elements:we}};var ko=c(No(),1);var Dg={datetime:(0,ko.getSettings)().formats.datetime,weekStartsOn:(0,ko.getSettings)().l10n.startOfWeek};function ny({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="datetime"?o=Dg:o=e.format,(0,ko.dateI18n)(o.datetime,(0,ko.getDate)(r))}var iy=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},kg={type:"datetime",render:Re,Edit:"datetime",sort:iy,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ur,$r,zr,Gr,qr,Yr,dt,xt],validOperators:[Ur,$r,zr,Gr,qr,Yr,dt,xt],format:Dg,getValueFormatted:ny,validate:{required:Ve,elements:we}};var Mo=c(No(),1);var Mg={date:(0,Mo.getSettings)().formats.date,weekStartsOn:(0,Mo.getSettings)().l10n.startOfWeek};function ay({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="date"?o=Mg:o=e.format,(0,Mo.dateI18n)(o.date,(0,Mo.getDate)(r))}var sy=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},Fg={type:"date",render:Re,Edit:"date",sort:sy,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ur,$r,zr,Gr,qr,Yr,dt,xt,ft],validOperators:[Ur,$r,zr,Gr,qr,Yr,dt,xt,ft],format:Mg,getValueFormatted:ay,validate:{required:Ve,elements:we}};var _s=c(U(),1);function Lg(t,e){return e.getValue({item:t})===!0}function ly({item:t,field:e}){let r=e.getValue({item:t});return r===!0?(0,_s.__)("True"):r===!1?(0,_s.__)("False"):""}function uy(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&![!0,!1].includes(r)?(0,_s.__)("Value must be true, false, or undefined"):null}var cy=(t,e,r)=>{let o=!!t;return o===!!e?0:r==="asc"?o?1:-1:o?-1:1},Bg={type:"boolean",render:Re,Edit:"checkbox",sort:cy,validate:{required:Lg,elements:we,custom:uy},enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ee,Pe],format:{},getValueFormatted:ly};var Hg={type:"media",render:()=>null,Edit:null,sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:ht,validate:{}};var sc=c(U(),1);function jg(t,e){let r=e.getValue({item:t});return Array.isArray(r)&&r.length>0&&r.every(o=>![void 0,"",null].includes(o))}function Wg({item:t,field:e}){let r=e.getValue({item:t});return(Array.isArray(r)?r:[]).join(", ")}function fy({item:t,field:e}){return Wg({item:t,field:e})}function dy(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Array.isArray(r)?(0,sc.__)("Value must be an array."):r.every(o=>typeof o=="string")?null:(0,sc.__)("Every value must be a string.")}var my=(t,e,r)=>{let o=Array.isArray(t)?t:[],n=Array.isArray(e)?e:[];if(o.length!==n.length)return r==="asc"?o.length-n.length:n.length-o.length;let i=o.join(","),a=n.join(",");return r==="asc"?i.localeCompare(a):a.localeCompare(i)},zg={type:"array",render:fy,Edit:"array",sort:my,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ce,_e],validOperators:[Ce,_e,nt,it],format:{},getValueFormatted:Wg,validate:{required:jg,elements:we,custom:dy}};function py({item:t,field:e}){return e.getValue({item:t})?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":""}var Gg={type:"password",render:Re,Edit:"password",sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:py,validate:{required:Ve,pattern:fr,minLength:ur,maxLength:cr,elements:we}};var qg={type:"telephone",render:Re,Edit:"telephone",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ce,_e],validOperators:[Ee,Pe,Ut,$t,Kt,Ce,_e,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:fr,minLength:ur,maxLength:cr,elements:we}};var Yg=c(U(),1);var yn=c(V(),1);function vy({item:t,field:e}){if(e.hasElements)return(0,yn.jsx)(ys,{item:t,field:e});let r=ht({item:t,field:e});return!r||!ct(r).isValid()?r:(0,yn.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,yn.jsx)("div",{style:{width:"16px",height:"16px",borderRadius:"50%",backgroundColor:r,border:"1px solid #ddd",flexShrink:0}}),(0,yn.jsx)("span",{children:r})]})}function gy(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!ct(r).isValid()?(0,Yg.__)("Value must be a valid color."):null}var hy=(t,e,r)=>{let o=ct(t),n=ct(e);if(!o.isValid()&&!n.isValid())return 0;if(!o.isValid())return r==="asc"?1:-1;if(!n.isValid())return r==="asc"?-1:1;let i=o.toHsl(),a=n.toHsl();return i.h!==a.h?r==="asc"?i.h-a.h:a.h-i.h:i.s!==a.s?r==="asc"?i.s-a.s:a.s-i.s:r==="asc"?i.l-a.l:a.l-i.l},Ug={type:"color",render:vy,Edit:"color",sort:hy,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ce,_e],validOperators:[Ee,Pe,Ce,_e],format:{},getValueFormatted:ht,validate:{required:Ve,elements:we,custom:gy}};var $g={type:"url",render:Re,Edit:"url",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ce,_e],validOperators:[Ee,Pe,Ut,$t,Kt,Ce,_e,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:fr,minLength:ur,maxLength:cr,elements:we}};var by=(t,e,r)=>typeof t=="number"&&typeof e=="number"?wn(t,e,r):lr(t,e,r),Kg={render:Re,Edit:null,sort:by,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:Gp(),format:{},getValueFormatted:ht,validate:{required:Ve,elements:we}};function Zg(t,e){let r;t.isValid?.required===!0&&e.validate.required!==void 0&&(r={constraint:!0,validate:e.validate.required});let o;(t.isValid?.elements===!0||t.isValid?.elements===void 0&&(t.elements||t.getElements))&&e.validate.elements!==void 0&&(o={constraint:!0,validate:e.validate.elements});let n;typeof t.isValid?.min=="number"&&e.validate.min!==void 0&&(n={constraint:t.isValid.min,validate:e.validate.min});let i;typeof t.isValid?.max=="number"&&e.validate.max!==void 0&&(i={constraint:t.isValid.max,validate:e.validate.max});let a;typeof t.isValid?.minLength=="number"&&e.validate.minLength!==void 0&&(a={constraint:t.isValid.minLength,validate:e.validate.minLength});let l;typeof t.isValid?.maxLength=="number"&&e.validate.maxLength!==void 0&&(l={constraint:t.isValid.maxLength,validate:e.validate.maxLength});let s;t.isValid?.pattern!==void 0&&e.validate.pattern!==void 0&&(s={constraint:t.isValid?.pattern,validate:e.validate.pattern});let u=t.isValid?.custom??e.validate.custom;return{required:r,elements:o,min:n,max:i,minLength:a,maxLength:l,pattern:s,custom:u}}function Xg(t){return t.validOperators.reduce((e,r)=>{let o=Do(r);return o?.filter&&(e[r]=o.filter),e},{})}function xy(t,e){return{...e.format,...t.format}}var Qg=xy;function wy(t){let e=[Pg,Og,Vg,Ng,kg,Fg,Bg,Hg,zg,Gg,qg,Ug,$g].find(r=>r?.type===t);return e||Kg}function Jg(t){return t.map(e=>{let r=wy(e.type),o=e.getValue||Sg(e.id),n=function(i,a,l){let s=o({item:i}),u=o({item:a});return e.sort?e.sort(s,u,l):r.sort(s,u,l)};return{id:e.id,label:e.label||e.id,header:e.header||e.label||e.id,description:e.description,placeholder:e.placeholder,getValue:o,setValue:e.setValue||Cg(e.id),elements:e.elements,getElements:e.getElements,hasElements:xs(e),isVisible:e.isVisible,enableHiding:e.enableHiding??!0,readOnly:e.readOnly??!1,type:r.type,render:e.render??r.render,Edit:wg(e,r.Edit),sort:n,enableSorting:e.enableSorting??r.enableSorting,enableGlobalSearch:e.enableGlobalSearch??r.enableGlobalSearch,isValid:Zg(e,r),filterBy:yg(e,r.defaultOperators,r.validOperators),filter:Xg(r),format:Qg(e,r),getValueFormatted:e.getValueFormatted??r.getValueFormatted}})}var Fo=c(j(),1);function eh(t,e,r){let o=(0,Fo.useRef)(t),n=(0,Fo.useRef)(r),[i,a]=(0,Fo.useState)(!e);return(0,Fo.useEffect)(()=>{e||(o.current=t,n.current=r,a(!0))},[t,e,r]),{data:e&&o.current?.length?o.current:t,paginationInfo:e&&o.current?.length?n.current:r,hasInitiallyLoaded:i}}var tt=c(V(),1),yy=t=>t.id,Sy=()=>!0,Cy=[],_y=eo.filter(t=>!t.isPicker);function Ey({header:t,search:e=!0,searchLabel:r=void 0}){return(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsxs)(F,{direction:"row",align:"top",justify:"space-between",className:"dataviews__view-actions",gap:"xs",children:[(0,tt.jsxs)(F,{direction:"row",justify:"start",gap:"sm",className:"dataviews__search",children:[e&&(0,tt.jsx)(Gu,{label:r}),(0,tt.jsx)(Ua,{})]}),(0,tt.jsxs)(F,{direction:"row",gap:"xs",style:{flexShrink:0},children:[(0,tt.jsx)(wv,{}),t]})]}),(0,tt.jsx)($a,{className:"dataviews-filters__container"}),(0,tt.jsx)(Wu,{}),(0,tt.jsx)(zu,{})]})}function Py({view:t,onChangeView:e,fields:r,search:o=!0,searchLabel:n=void 0,actions:i=Cy,data:a,getItemId:l=yy,getItemLevel:s,isLoading:u=!1,paginationInfo:f,defaultLayouts:m,selection:d,onChangeSelection:p,onClickItem:v,renderItemLink:y,isItemClickable:g=Sy,header:b,children:S,config:A={perPageSizes:[10,20,50,100]},empty:T,onReset:O}){let{infiniteScrollHandler:k}=f,D=(0,bt.useRef)(null),[C,I]=(0,bt.useState)(0),N=(0,Es.useResizeObserver)(Q=>{I(Q[0].borderBoxSize[0].inlineSize)},{box:"border-box"}),[h,E]=(0,bt.useState)([]),P=d===void 0||p===void 0,x=P?h:d,[R,w]=(0,bt.useState)(null);function _(Q){let ge=typeof Q=="function"?Q(x):Q;P&&E(ge),p&&p(ge)}let M=(0,bt.useMemo)(()=>Jg(r),[r]),H=(0,bt.useMemo)(()=>x.filter(Q=>a.some(ge=>l(ge)===Q)),[x,a,l]),ae=ai(M,t),Se=(0,bt.useMemo)(()=>(ae||[]).some(Q=>Q.isPrimary||Q.isLocked),[ae]),[Ne,He]=(0,bt.useState)(Se);(0,bt.useEffect)(()=>{Se&&!Ne&&He(!0)},[Se,Ne]),(0,bt.useEffect)(()=>{if(!t.infiniteScrollEnabled||!D.current)return;let Q=(0,Es.throttle)(pr=>{let vr=pr.target,mo=vr.scrollTop,po=vr.scrollHeight,Lo=vr.clientHeight;mo+Lo>=po-100&&k?.()},100),ge=D.current;return ge.addEventListener("scroll",Q),()=>{ge.removeEventListener("scroll",Q),Q.cancel()}},[k,t.infiniteScrollEnabled]);let rt=(0,bt.useMemo)(()=>Object.fromEntries(Object.entries(m).filter(([Q])=>_y.some(ge=>ge.type===Q))),[m]),{data:Yt,paginationInfo:mr,hasInitiallyLoaded:Y}=eh(a,u,f);return rt[t.type]?(0,tt.jsx)(q.Provider,{value:{view:t,onChangeView:e,fields:M,actions:i,data:Yt,isLoading:u,paginationInfo:mr,selection:H,onChangeSelection:_,openedFilter:R,setOpenedFilter:w,getItemId:l,getItemLevel:s,isItemClickable:g,onClickItem:v,renderItemLink:y,containerWidth:C,containerRef:D,resizeObserverRef:N,defaultLayouts:rt,filters:ae,isShowingFilter:Ne,setIsShowingFilter:He,config:A,empty:T,hasInitiallyLoaded:Y,hasInfiniteScrollHandler:!!k,onReset:O},children:(0,tt.jsx)("div",{className:"dataviews-wrapper",ref:D,children:S??(0,tt.jsx)(Ey,{header:b,search:o,searchLabel:n})})}):null}var Gt=Py;Gt.BulkActionToolbar=Qi;Gt.Filters=li;Gt.FiltersToggled=$a;Gt.FiltersToggle=Ua;Gt.Layout=Wu;Gt.LayoutSwitcher=Uu;Gt.Pagination=Gl;Gt.Search=Gu;Gt.ViewConfig=$u;Gt.Footer=zu;var lc=Gt;var mh=c(G()),ph=c(rh());var oh=c(Il()),{lock:l3,unlock:uc}=(0,oh.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var Ay={type:"list",sort:{field:"date",direction:"desc"},titleField:"title"};function nh(){return Ay}var ih=c(U());import{useNavigate as Iy}from"@wordpress/route";function ah(){let t=Iy();return{id:"edit",label:(0,ih.__)("Edit"),isPrimary:!0,icon:xl,callback:e=>{let r=e[0];t({to:`/navigation/edit/${r.id}`})},isEligible(e){return e.type==="wp_navigation"&&String(e.status)!=="trash"}}}var cc=c(j()),dr=c(U()),uh=c(Is()),ch=c(lh()),fc=c(br()),qt=c(G());import{useNavigate as Oy}from"@wordpress/route";var Ty="wp_navigation",fh=({closeModal:t})=>{let[e,r]=(0,cc.useState)(""),[o,n]=(0,cc.useState)(!1),i=Oy(),{saveEntityRecord:a}=(0,fc.useDispatch)(uh.store),{createSuccessNotice:l,createErrorNotice:s}=(0,fc.useDispatch)(ch.store),u=async()=>{if(!e||!e.trim())return;let f=e.trim();n(!0);try{let m=await a("postType",Ty,{title:f,status:"publish"},{throwOnError:!0});m&&(l((0,dr.__)("Navigation menu created successfully."),{type:"snackbar"}),i({to:`/navigation/edit/${encodeURIComponent(m.id)}`}))}catch(m){let d=m instanceof Error?m.message:"Unknown error";s((0,dr.sprintf)((0,dr.__)("Unable to create navigation menu: %s"),d),{type:"snackbar"})}n(!1),t?.()};return React.createElement(qt.Modal,{title:(0,dr.__)("Add New Navigation Menu"),onRequestClose:()=>t?.(),focusOnMount:"firstContentElement",size:"small"},React.createElement("form",{onSubmit:f=>{f.preventDefault(),u()}},React.createElement(qt.__experimentalVStack,{spacing:4},React.createElement(qt.TextControl,{autoComplete:"off",value:e,onChange:r,label:(0,dr.__)("Name"),placeholder:(0,dr.__)("Enter menu name"),disabled:o}),React.createElement(qt.__experimentalHStack,{justify:"right",spacing:2},React.createElement(qt.Button,{variant:"tertiary",onClick:t,disabled:o,accessibleWhenDisabled:!0},(0,dr.__)("Cancel")),React.createElement(qt.Button,{variant:"primary",type:"submit","aria-busy":o,disabled:o||!e?.trim(),accessibleWhenDisabled:!0},(0,dr.__)("Create Menu"))))))};if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='4cd54e4f28']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","4cd54e4f28"),t.appendChild(document.createTextNode("")),document.head.appendChild(t)}var{useEntityRecordsWithPermissions:Ny}=uc(dh.privateApis),{usePostActions:Dy,usePostFields:ky}=uc(ph.privateApis),Ps="wp_navigation",My={per_page:100,status:["publish","draft"],order:"desc",orderby:"date"};function Fy(t){return t.id.toString()}function Ly(){let t=Ry(),e=Vy({from:"/navigation/list"}),r=(0,fo.useMemo)(()=>nh(),[]),o=(0,fo.useCallback)(T=>{t({search:{...e,...T}})},[e,t]),{view:n,updateView:i,isModified:a,resetToDefault:l}=Ds({kind:"postType",name:Ps,slug:"default-new",defaultView:r,queryParams:e,onChangeQueryParams:o}),{records:s,totalItems:u,totalPages:f,isResolving:m}=Ny("postType",Ps,My),d=ky({postType:Ps}),[p,v]=(0,fo.useState)(!1),y=ah(),g=Dy({postType:Ps,context:"list"}),b=(0,fo.useMemo)(()=>[y,...g?.flatMap(T=>T.id==="view-post-revisions"?[]:[T])??[]],[y,g]),S=(e.ids??[]).map(T=>T.toString())??[],A=(0,fo.useMemo)(()=>s&&s.length>0?s[0].id.toString():null,[s]);return S.length===0&&A&&S.push(A),n.type==="list"&&S.splice(1),React.createElement(React.Fragment,null,React.createElement(Os,{title:(0,dc.__)("Navigation"),className:"navigation-page",hasPadding:!1,actions:React.createElement(mh.Button,{variant:"primary",size:"compact",onClick:()=>v(!0)},(0,dc.__)("Add New"))},React.createElement(lc,{data:s,fields:d,view:n,onChangeView:i,isLoading:m||!d,actions:b,paginationInfo:{totalItems:u,totalPages:f},defaultLayouts:{list:{}},getItemId:Fy,selection:S,onReset:a?l:!1,onChangeSelection:T=>{t({search:{...e,ids:T.length>0?T.map(O=>Number(O)):void 0}})}})),p&&React.createElement(fh,{closeModal:()=>v(!1)}))}var By=Ly;export{By as stage}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.production.js: + (** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/navigation-list/route.js b/src/wp-includes/build/routes/navigation-list/route.js new file mode 100644 index 0000000000000..90057b2651ba4 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-list/route.js @@ -0,0 +1,105 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/navigation-list/route.ts +var import_data = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var import_i18n = __toESM(require_i18n()); +var NAVIGATION_POST_TYPE = "wp_navigation"; +var PRELOADED_NAVIGATION_MENUS_QUERY = { + per_page: -1, + status: ["publish", "draft"], + order: "desc", + orderby: "date" +}; +var route = { + title: () => (0, import_i18n.__)("Navigation"), + canvas: async ({ + search + }) => { + const [firstNavigation] = await (0, import_data.resolveSelect)( + import_core_data.store + ).getEntityRecords( + "postType", + NAVIGATION_POST_TYPE, + PRELOADED_NAVIGATION_MENUS_QUERY + ); + if (!firstNavigation) { + return { postType: NAVIGATION_POST_TYPE, isPreview: true }; + } + const postId = search.ids ? parseInt(search.ids[0]) : firstNavigation.id; + return { + postType: NAVIGATION_POST_TYPE, + postId, + isPreview: true, + editLink: `/types/wp_navigation/edit/${postId}` + }; + }, + loader: async () => { + await Promise.all([ + // Preload navigation menus + (0, import_data.resolveSelect)(import_core_data.store).getEntityRecords( + "postType", + NAVIGATION_POST_TYPE, + PRELOADED_NAVIGATION_MENUS_QUERY + ), + (0, import_data.resolveSelect)(import_core_data.store).canUser("create", { + kind: "postType", + name: NAVIGATION_POST_TYPE + }), + // Preload post type object (what usePostFields needs) + (0, import_data.resolveSelect)(import_core_data.store).getPostType(NAVIGATION_POST_TYPE), + // Preload users data (what usePostFields needs for author field) + (0, import_data.resolveSelect)(import_core_data.store).getEntityRecords("root", "user", { + per_page: -1 + }) + ]); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/navigation-list/route.min.asset.php b/src/wp-includes/build/routes/navigation-list/route.min.asset.php new file mode 100644 index 0000000000000..a87001a3800b0 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-list/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data', 'wp-i18n'), 'version' => '8f17b624b7cbd80b2078'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/navigation-list/route.min.js b/src/wp-includes/build/routes/navigation-list/route.min.js new file mode 100644 index 0000000000000..1adfef1cb85d3 --- /dev/null +++ b/src/wp-includes/build/routes/navigation-list/route.min.js @@ -0,0 +1 @@ +var E=Object.create;var c=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var p=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var I=(e,t,r,d)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of N(t))!f.call(e,a)&&a!==r&&c(e,a,{get:()=>t[a],enumerable:!(d=l(t,a))||d.enumerable});return e};var n=(e,t,r)=>(r=e!=null?E(P(e)):{},I(t||!e||!e.__esModule?c(r,"default",{value:e,enumerable:!0}):r,e));var g=p((R,w)=>{w.exports=window.wp.data});var _=p((x,y)=>{y.exports=window.wp.coreData});var m=p((O,T)=>{T.exports=window.wp.i18n});var s=n(g()),i=n(_()),v=n(m()),o="wp_navigation",u={per_page:-1,status:["publish","draft"],order:"desc",orderby:"date"},S={title:()=>(0,v.__)("Navigation"),canvas:async({search:e})=>{let[t]=await(0,s.resolveSelect)(i.store).getEntityRecords("postType",o,u);if(!t)return{postType:o,isPreview:!0};let r=e.ids?parseInt(e.ids[0]):t.id;return{postType:o,postId:r,isPreview:!0,editLink:`/types/wp_navigation/edit/${r}`}},loader:async()=>{await Promise.all([(0,s.resolveSelect)(i.store).getEntityRecords("postType",o,u),(0,s.resolveSelect)(i.store).canUser("create",{kind:"postType",name:o}),(0,s.resolveSelect)(i.store).getPostType(o),(0,s.resolveSelect)(i.store).getEntityRecords("root","user",{per_page:-1})])}};export{S as route}; diff --git a/src/wp-includes/build/routes/navigation/route.js b/src/wp-includes/build/routes/navigation/route.js new file mode 100644 index 0000000000000..055c33d9898f5 --- /dev/null +++ b/src/wp-includes/build/routes/navigation/route.js @@ -0,0 +1,10 @@ +// routes/navigation/route.ts +import { redirect } from "@wordpress/route"; +var route = { + beforeLoad: () => { + throw redirect({ to: "/navigation/list" }); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/navigation/route.min.asset.php b/src/wp-includes/build/routes/navigation/route.min.asset.php new file mode 100644 index 0000000000000..4daf5219746e2 --- /dev/null +++ b/src/wp-includes/build/routes/navigation/route.min.asset.php @@ -0,0 +1 @@ + array(), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '5b48b1ef7d48927a4d20'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/navigation/route.min.js b/src/wp-includes/build/routes/navigation/route.min.js new file mode 100644 index 0000000000000..416aa740e19ac --- /dev/null +++ b/src/wp-includes/build/routes/navigation/route.min.js @@ -0,0 +1 @@ +import{redirect as o}from"@wordpress/route";var r={beforeLoad:()=>{throw o({to:"/navigation/list"})}};export{r as route}; diff --git a/src/wp-includes/build/routes/pattern-list/content.js b/src/wp-includes/build/routes/pattern-list/content.js new file mode 100644 index 0000000000000..996e737bdd1ea --- /dev/null +++ b/src/wp-includes/build/routes/pattern-list/content.js @@ -0,0 +1,17745 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// package-external:@wordpress/compose +var require_compose = __commonJS({ + "package-external:@wordpress/compose"(exports, module) { + module.exports = window.wp.compose; + } +}); + +// vendor-external:react +var require_react = __commonJS({ + "vendor-external:react"(exports, module) { + module.exports = window.React; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// vendor-external:react-dom +var require_react_dom = __commonJS({ + "vendor-external:react-dom"(exports, module) { + module.exports = window.ReactDOM; + } +}); + +// node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +var require_use_sync_external_store_shim_development = __commonJS({ + "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { + "use strict"; + (function() { + function is(x2, y2) { + return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; + } + function useSyncExternalStore$2(subscribe2, getSnapshot) { + didWarnOld18Alpha || void 0 === React9.startTransition || (didWarnOld18Alpha = true, console.error( + "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." + )); + var value = getSnapshot(); + if (!didWarnUncachedGetSnapshot) { + var cachedValue = getSnapshot(); + objectIs(value, cachedValue) || (console.error( + "The result of getSnapshot should be cached to avoid an infinite loop" + ), didWarnUncachedGetSnapshot = true); + } + cachedValue = useState25({ + inst: { value, getSnapshot } + }); + var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; + useLayoutEffect2( + function() { + inst.value = value; + inst.getSnapshot = getSnapshot; + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }, + [subscribe2, value, getSnapshot] + ); + useEffect19( + function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + return subscribe2(function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }); + }, + [subscribe2] + ); + useDebugValue(value); + return value; + } + function checkIfSnapshotChanged(inst) { + var latestGetSnapshot = inst.getSnapshot; + inst = inst.value; + try { + var nextValue = latestGetSnapshot(); + return !objectIs(inst, nextValue); + } catch (error) { + return true; + } + } + function useSyncExternalStore$1(subscribe2, getSnapshot) { + return getSnapshot(); + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var React9 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState25 = React9.useState, useEffect19 = React9.useEffect, useLayoutEffect2 = React9.useLayoutEffect, useDebugValue = React9.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; + exports.useSyncExternalStore = void 0 !== React9.useSyncExternalStore ? React9.useSyncExternalStore : shim; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); + } +}); + +// node_modules/use-sync-external-store/shim/index.js +var require_shim = __commonJS({ + "node_modules/use-sync-external-store/shim/index.js"(exports, module) { + "use strict"; + if (false) { + module.exports = null; + } else { + module.exports = require_use_sync_external_store_shim_development(); + } + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// package-external:@wordpress/keycodes +var require_keycodes = __commonJS({ + "package-external:@wordpress/keycodes"(exports, module) { + module.exports = window.wp.keycodes; + } +}); + +// node_modules/remove-accents/index.js +var require_remove_accents = __commonJS({ + "node_modules/remove-accents/index.js"(exports, module) { + var characterMap = { + "\xC0": "A", + "\xC1": "A", + "\xC2": "A", + "\xC3": "A", + "\xC4": "A", + "\xC5": "A", + "\u1EA4": "A", + "\u1EAE": "A", + "\u1EB2": "A", + "\u1EB4": "A", + "\u1EB6": "A", + "\xC6": "AE", + "\u1EA6": "A", + "\u1EB0": "A", + "\u0202": "A", + "\u1EA2": "A", + "\u1EA0": "A", + "\u1EA8": "A", + "\u1EAA": "A", + "\u1EAC": "A", + "\xC7": "C", + "\u1E08": "C", + "\xC8": "E", + "\xC9": "E", + "\xCA": "E", + "\xCB": "E", + "\u1EBE": "E", + "\u1E16": "E", + "\u1EC0": "E", + "\u1E14": "E", + "\u1E1C": "E", + "\u0206": "E", + "\u1EBA": "E", + "\u1EBC": "E", + "\u1EB8": "E", + "\u1EC2": "E", + "\u1EC4": "E", + "\u1EC6": "E", + "\xCC": "I", + "\xCD": "I", + "\xCE": "I", + "\xCF": "I", + "\u1E2E": "I", + "\u020A": "I", + "\u1EC8": "I", + "\u1ECA": "I", + "\xD0": "D", + "\xD1": "N", + "\xD2": "O", + "\xD3": "O", + "\xD4": "O", + "\xD5": "O", + "\xD6": "O", + "\xD8": "O", + "\u1ED0": "O", + "\u1E4C": "O", + "\u1E52": "O", + "\u020E": "O", + "\u1ECE": "O", + "\u1ECC": "O", + "\u1ED4": "O", + "\u1ED6": "O", + "\u1ED8": "O", + "\u1EDC": "O", + "\u1EDE": "O", + "\u1EE0": "O", + "\u1EDA": "O", + "\u1EE2": "O", + "\xD9": "U", + "\xDA": "U", + "\xDB": "U", + "\xDC": "U", + "\u1EE6": "U", + "\u1EE4": "U", + "\u1EEC": "U", + "\u1EEE": "U", + "\u1EF0": "U", + "\xDD": "Y", + "\xE0": "a", + "\xE1": "a", + "\xE2": "a", + "\xE3": "a", + "\xE4": "a", + "\xE5": "a", + "\u1EA5": "a", + "\u1EAF": "a", + "\u1EB3": "a", + "\u1EB5": "a", + "\u1EB7": "a", + "\xE6": "ae", + "\u1EA7": "a", + "\u1EB1": "a", + "\u0203": "a", + "\u1EA3": "a", + "\u1EA1": "a", + "\u1EA9": "a", + "\u1EAB": "a", + "\u1EAD": "a", + "\xE7": "c", + "\u1E09": "c", + "\xE8": "e", + "\xE9": "e", + "\xEA": "e", + "\xEB": "e", + "\u1EBF": "e", + "\u1E17": "e", + "\u1EC1": "e", + "\u1E15": "e", + "\u1E1D": "e", + "\u0207": "e", + "\u1EBB": "e", + "\u1EBD": "e", + "\u1EB9": "e", + "\u1EC3": "e", + "\u1EC5": "e", + "\u1EC7": "e", + "\xEC": "i", + "\xED": "i", + "\xEE": "i", + "\xEF": "i", + "\u1E2F": "i", + "\u020B": "i", + "\u1EC9": "i", + "\u1ECB": "i", + "\xF0": "d", + "\xF1": "n", + "\xF2": "o", + "\xF3": "o", + "\xF4": "o", + "\xF5": "o", + "\xF6": "o", + "\xF8": "o", + "\u1ED1": "o", + "\u1E4D": "o", + "\u1E53": "o", + "\u020F": "o", + "\u1ECF": "o", + "\u1ECD": "o", + "\u1ED5": "o", + "\u1ED7": "o", + "\u1ED9": "o", + "\u1EDD": "o", + "\u1EDF": "o", + "\u1EE1": "o", + "\u1EDB": "o", + "\u1EE3": "o", + "\xF9": "u", + "\xFA": "u", + "\xFB": "u", + "\xFC": "u", + "\u1EE7": "u", + "\u1EE5": "u", + "\u1EED": "u", + "\u1EEF": "u", + "\u1EF1": "u", + "\xFD": "y", + "\xFF": "y", + "\u0100": "A", + "\u0101": "a", + "\u0102": "A", + "\u0103": "a", + "\u0104": "A", + "\u0105": "a", + "\u0106": "C", + "\u0107": "c", + "\u0108": "C", + "\u0109": "c", + "\u010A": "C", + "\u010B": "c", + "\u010C": "C", + "\u010D": "c", + "C\u0306": "C", + "c\u0306": "c", + "\u010E": "D", + "\u010F": "d", + "\u0110": "D", + "\u0111": "d", + "\u0112": "E", + "\u0113": "e", + "\u0114": "E", + "\u0115": "e", + "\u0116": "E", + "\u0117": "e", + "\u0118": "E", + "\u0119": "e", + "\u011A": "E", + "\u011B": "e", + "\u011C": "G", + "\u01F4": "G", + "\u011D": "g", + "\u01F5": "g", + "\u011E": "G", + "\u011F": "g", + "\u0120": "G", + "\u0121": "g", + "\u0122": "G", + "\u0123": "g", + "\u0124": "H", + "\u0125": "h", + "\u0126": "H", + "\u0127": "h", + "\u1E2A": "H", + "\u1E2B": "h", + "\u0128": "I", + "\u0129": "i", + "\u012A": "I", + "\u012B": "i", + "\u012C": "I", + "\u012D": "i", + "\u012E": "I", + "\u012F": "i", + "\u0130": "I", + "\u0131": "i", + "\u0132": "IJ", + "\u0133": "ij", + "\u0134": "J", + "\u0135": "j", + "\u0136": "K", + "\u0137": "k", + "\u1E30": "K", + "\u1E31": "k", + "K\u0306": "K", + "k\u0306": "k", + "\u0139": "L", + "\u013A": "l", + "\u013B": "L", + "\u013C": "l", + "\u013D": "L", + "\u013E": "l", + "\u013F": "L", + "\u0140": "l", + "\u0141": "l", + "\u0142": "l", + "\u1E3E": "M", + "\u1E3F": "m", + "M\u0306": "M", + "m\u0306": "m", + "\u0143": "N", + "\u0144": "n", + "\u0145": "N", + "\u0146": "n", + "\u0147": "N", + "\u0148": "n", + "\u0149": "n", + "N\u0306": "N", + "n\u0306": "n", + "\u014C": "O", + "\u014D": "o", + "\u014E": "O", + "\u014F": "o", + "\u0150": "O", + "\u0151": "o", + "\u0152": "OE", + "\u0153": "oe", + "P\u0306": "P", + "p\u0306": "p", + "\u0154": "R", + "\u0155": "r", + "\u0156": "R", + "\u0157": "r", + "\u0158": "R", + "\u0159": "r", + "R\u0306": "R", + "r\u0306": "r", + "\u0212": "R", + "\u0213": "r", + "\u015A": "S", + "\u015B": "s", + "\u015C": "S", + "\u015D": "s", + "\u015E": "S", + "\u0218": "S", + "\u0219": "s", + "\u015F": "s", + "\u0160": "S", + "\u0161": "s", + "\u0162": "T", + "\u0163": "t", + "\u021B": "t", + "\u021A": "T", + "\u0164": "T", + "\u0165": "t", + "\u0166": "T", + "\u0167": "t", + "T\u0306": "T", + "t\u0306": "t", + "\u0168": "U", + "\u0169": "u", + "\u016A": "U", + "\u016B": "u", + "\u016C": "U", + "\u016D": "u", + "\u016E": "U", + "\u016F": "u", + "\u0170": "U", + "\u0171": "u", + "\u0172": "U", + "\u0173": "u", + "\u0216": "U", + "\u0217": "u", + "V\u0306": "V", + "v\u0306": "v", + "\u0174": "W", + "\u0175": "w", + "\u1E82": "W", + "\u1E83": "w", + "X\u0306": "X", + "x\u0306": "x", + "\u0176": "Y", + "\u0177": "y", + "\u0178": "Y", + "Y\u0306": "Y", + "y\u0306": "y", + "\u0179": "Z", + "\u017A": "z", + "\u017B": "Z", + "\u017C": "z", + "\u017D": "Z", + "\u017E": "z", + "\u017F": "s", + "\u0192": "f", + "\u01A0": "O", + "\u01A1": "o", + "\u01AF": "U", + "\u01B0": "u", + "\u01CD": "A", + "\u01CE": "a", + "\u01CF": "I", + "\u01D0": "i", + "\u01D1": "O", + "\u01D2": "o", + "\u01D3": "U", + "\u01D4": "u", + "\u01D5": "U", + "\u01D6": "u", + "\u01D7": "U", + "\u01D8": "u", + "\u01D9": "U", + "\u01DA": "u", + "\u01DB": "U", + "\u01DC": "u", + "\u1EE8": "U", + "\u1EE9": "u", + "\u1E78": "U", + "\u1E79": "u", + "\u01FA": "A", + "\u01FB": "a", + "\u01FC": "AE", + "\u01FD": "ae", + "\u01FE": "O", + "\u01FF": "o", + "\xDE": "TH", + "\xFE": "th", + "\u1E54": "P", + "\u1E55": "p", + "\u1E64": "S", + "\u1E65": "s", + "X\u0301": "X", + "x\u0301": "x", + "\u0403": "\u0413", + "\u0453": "\u0433", + "\u040C": "\u041A", + "\u045C": "\u043A", + "A\u030B": "A", + "a\u030B": "a", + "E\u030B": "E", + "e\u030B": "e", + "I\u030B": "I", + "i\u030B": "i", + "\u01F8": "N", + "\u01F9": "n", + "\u1ED2": "O", + "\u1ED3": "o", + "\u1E50": "O", + "\u1E51": "o", + "\u1EEA": "U", + "\u1EEB": "u", + "\u1E80": "W", + "\u1E81": "w", + "\u1EF2": "Y", + "\u1EF3": "y", + "\u0200": "A", + "\u0201": "a", + "\u0204": "E", + "\u0205": "e", + "\u0208": "I", + "\u0209": "i", + "\u020C": "O", + "\u020D": "o", + "\u0210": "R", + "\u0211": "r", + "\u0214": "U", + "\u0215": "u", + "B\u030C": "B", + "b\u030C": "b", + "\u010C\u0323": "C", + "\u010D\u0323": "c", + "\xCA\u030C": "E", + "\xEA\u030C": "e", + "F\u030C": "F", + "f\u030C": "f", + "\u01E6": "G", + "\u01E7": "g", + "\u021E": "H", + "\u021F": "h", + "J\u030C": "J", + "\u01F0": "j", + "\u01E8": "K", + "\u01E9": "k", + "M\u030C": "M", + "m\u030C": "m", + "P\u030C": "P", + "p\u030C": "p", + "Q\u030C": "Q", + "q\u030C": "q", + "\u0158\u0329": "R", + "\u0159\u0329": "r", + "\u1E66": "S", + "\u1E67": "s", + "V\u030C": "V", + "v\u030C": "v", + "W\u030C": "W", + "w\u030C": "w", + "X\u030C": "X", + "x\u030C": "x", + "Y\u030C": "Y", + "y\u030C": "y", + "A\u0327": "A", + "a\u0327": "a", + "B\u0327": "B", + "b\u0327": "b", + "\u1E10": "D", + "\u1E11": "d", + "\u0228": "E", + "\u0229": "e", + "\u0190\u0327": "E", + "\u025B\u0327": "e", + "\u1E28": "H", + "\u1E29": "h", + "I\u0327": "I", + "i\u0327": "i", + "\u0197\u0327": "I", + "\u0268\u0327": "i", + "M\u0327": "M", + "m\u0327": "m", + "O\u0327": "O", + "o\u0327": "o", + "Q\u0327": "Q", + "q\u0327": "q", + "U\u0327": "U", + "u\u0327": "u", + "X\u0327": "X", + "x\u0327": "x", + "Z\u0327": "Z", + "z\u0327": "z", + "\u0439": "\u0438", + "\u0419": "\u0418", + "\u0451": "\u0435", + "\u0401": "\u0415" + }; + var chars = Object.keys(characterMap).join("|"); + var allAccents = new RegExp(chars, "g"); + var firstAccent = new RegExp(chars, ""); + function matcher(match2) { + return characterMap[match2]; + } + var removeAccents3 = function(string) { + return string.replace(allAccents, matcher); + }; + var hasAccents = function(string) { + return !!string.match(firstAccent); + }; + module.exports = removeAccents3; + module.exports.has = hasAccents; + module.exports.remove = removeAccents3; + } +}); + +// node_modules/fast-deep-equal/es6/index.js +var require_es6 = __commonJS({ + "node_modules/fast-deep-equal/es6/index.js"(exports, module) { + "use strict"; + module.exports = function equal(a2, b2) { + if (a2 === b2) return true; + if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { + if (a2.constructor !== b2.constructor) return false; + var length, i2, keys; + if (Array.isArray(a2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (!equal(a2[i2], b2[i2])) return false; + return true; + } + if (a2 instanceof Map && b2 instanceof Map) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + for (i2 of a2.entries()) + if (!equal(i2[1], b2.get(i2[0]))) return false; + return true; + } + if (a2 instanceof Set && b2 instanceof Set) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + return true; + } + if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (a2[i2] !== b2[i2]) return false; + return true; + } + if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; + if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); + if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); + keys = Object.keys(a2); + length = keys.length; + if (length !== Object.keys(b2).length) return false; + for (i2 = length; i2-- !== 0; ) + if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; + for (i2 = length; i2-- !== 0; ) { + var key = keys[i2]; + if (!equal(a2[key], b2[key])) return false; + } + return true; + } + return a2 !== a2 && b2 !== b2; + }; + } +}); + +// package-external:@wordpress/date +var require_date = __commonJS({ + "package-external:@wordpress/date"(exports, module) { + module.exports = window.wp.date; + } +}); + +// package-external:@wordpress/warning +var require_warning = __commonJS({ + "package-external:@wordpress/warning"(exports, module) { + module.exports = window.wp.warning; + } +}); + +// package-external:@wordpress/deprecated +var require_deprecated = __commonJS({ + "package-external:@wordpress/deprecated"(exports, module) { + module.exports = window.wp.deprecated; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/editor +var require_editor = __commonJS({ + "package-external:@wordpress/editor"(exports, module) { + module.exports = window.wp.editor; + } +}); + +// package-external:@wordpress/patterns +var require_patterns = __commonJS({ + "package-external:@wordpress/patterns"(exports, module) { + module.exports = window.wp.patterns; + } +}); + +// package-external:@wordpress/block-editor +var require_block_editor = __commonJS({ + "package-external:@wordpress/block-editor"(exports, module) { + module.exports = window.wp.blockEditor; + } +}); + +// routes/pattern-list/stage.tsx +import { + useParams, + useNavigate, + useSearch, + Link, + useInvalidate +} from "@wordpress/route"; + +// node_modules/dequal/dist/index.mjs +var has = Object.prototype.hasOwnProperty; +function find(iter, tar, key) { + for (key of iter.keys()) { + if (dequal(key, tar)) return key; + } +} +function dequal(foo, bar) { + var ctor, len, tmp; + if (foo === bar) return true; + if (foo && bar && (ctor = foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + if (ctor === Array) { + if ((len = foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])) ; + } + return len === -1; + } + if (ctor === Set) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!bar.has(tmp)) return false; + } + return true; + } + if (ctor === Map) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len[0]; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!dequal(len[1], bar.get(tmp))) { + return false; + } + } + return true; + } + if (ctor === ArrayBuffer) { + foo = new Uint8Array(foo); + bar = new Uint8Array(bar); + } else if (ctor === DataView) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo.getInt8(len) === bar.getInt8(len)) ; + } + return len === -1; + } + if (ArrayBuffer.isView(foo)) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo[len] === bar[len]) ; + } + return len === -1; + } + if (!ctor || typeof foo === "object") { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + return foo !== foo && bar !== bar; +} + +// packages/views/build-module/use-view.mjs +var import_element = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + const preserved = (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} +function stripActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + const { [key]: _, ...rest } = result; + result = rest; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + result = { + ...result, + filters: (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ) + }; + } + if (activeViewOverrides.sort && view.sort?.field === activeViewOverrides.sort.field && view.sort?.direction === activeViewOverrides.sort.direction) { + result = { + ...result, + sort: defaultView?.sort + }; + } + if (activeViewOverrides.layout && "layout" in result && result.layout) { + const layout = { ...result.layout }; + for (const key of Object.keys(activeViewOverrides.layout)) { + delete layout[key]; + } + result = { + ...result, + layout: Object.keys(layout).length > 0 ? layout : void 0 + }; + } + if (activeViewOverrides.groupBy && "groupBy" in result) { + const { groupBy: _, ...rest } = result; + result = rest; + } + return result; +} + +// packages/views/build-module/use-view.mjs +function omit(obj, keys) { + const result = { ...obj }; + for (const key of keys) { + delete result[key]; + } + return result; +} +function useView(config) { + const { + kind, + name, + slug, + defaultView, + activeViewOverrides, + queryParams, + onChangeQueryParams + } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data.useSelect)( + (select2) => { + return select2(import_preferences.store).get( + "core/views", + preferenceKey + ); + }, + [preferenceKey] + ); + const { set } = (0, import_data.useDispatch)(import_preferences.store); + const baseView = persistedView ?? defaultView; + const page = Number(queryParams?.page ?? baseView.page ?? 1); + const search = queryParams?.search ?? baseView.search ?? ""; + const view = (0, import_element.useMemo)(() => { + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); + }, [baseView, page, search, activeViewOverrides, defaultView]); + const isModified = !!persistedView; + const updateView = (0, import_element.useCallback)( + (newView) => { + const urlParams = { + page: newView?.page, + search: newView?.search + }; + const preferenceView = stripActiveViewOverrides( + omit(newView, ["page", "search"]), + activeViewOverrides, + defaultView + ); + if (onChangeQueryParams && !dequal(urlParams, { page, search })) { + onChangeQueryParams(urlParams); + } + const comparableBaseView = stripActiveViewOverrides( + baseView, + activeViewOverrides, + defaultView + ); + const comparableDefaultView = stripActiveViewOverrides( + defaultView, + activeViewOverrides, + defaultView + ); + if (!dequal(comparableBaseView, preferenceView)) { + if (dequal(preferenceView, comparableDefaultView)) { + set("core/views", preferenceKey, void 0); + } else { + set("core/views", preferenceKey, preferenceView); + } + } + }, + [ + onChangeQueryParams, + page, + search, + baseView, + defaultView, + activeViewOverrides, + set, + preferenceKey + ] + ); + const resetToDefault = (0, import_element.useCallback)(() => { + set("core/views", preferenceKey, void 0); + }, [preferenceKey, set]); + return { + view, + isModified, + updateView, + resetToDefault + }; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); + +// packages/dataviews/build-module/dataviews/index.mjs +var import_element56 = __toESM(require_element(), 1); +var import_compose12 = __toESM(require_compose(), 1); + +// node_modules/@base-ui/utils/esm/useRefWithInit.js +var React2 = __toESM(require_react(), 1); +var UNINITIALIZED = {}; +function useRefWithInit(init2, initArg) { + const ref = React2.useRef(UNINITIALIZED); + if (ref.current === UNINITIALIZED) { + ref.current = init2(initArg); + } + return ref; +} + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var React5 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/useMergedRefs.js +function useMergedRefs(a2, b2, c2, d2) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChange(forkRef, a2, b2, c2, d2)) { + update(forkRef, [a2, b2, c2, d2]); + } + return forkRef.callback; +} +function useMergedRefsN(refs) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChangeN(forkRef, refs)) { + update(forkRef, refs); + } + return forkRef.callback; +} +function createForkRef() { + return { + callback: null, + cleanup: null, + refs: [] + }; +} +function didChange(forkRef, a2, b2, c2, d2) { + return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; +} +function didChangeN(forkRef, newRefs) { + return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]); +} +function update(forkRef, refs) { + forkRef.refs = refs; + if (refs.every((ref) => ref == null)) { + forkRef.callback = null; + return; + } + forkRef.callback = (instance) => { + if (forkRef.cleanup) { + forkRef.cleanup(); + forkRef.cleanup = null; + } + if (instance != null) { + const cleanupCallbacks = Array(refs.length).fill(null); + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const refCleanup = ref(instance); + if (typeof refCleanup === "function") { + cleanupCallbacks[i2] = refCleanup; + } + break; + } + case "object": { + ref.current = instance; + break; + } + default: + } + } + forkRef.cleanup = () => { + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const cleanupCallback = cleanupCallbacks[i2]; + if (typeof cleanupCallback === "function") { + cleanupCallback(); + } else { + ref(null); + } + break; + } + case "object": { + ref.current = null; + break; + } + default: + } + } + }; + } + }; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +var React4 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/reactVersion.js +var React3 = __toESM(require_react(), 1); +var majorVersion = parseInt(React3.version, 10); +function isReactVersionAtLeast(reactVersionToCheck) { + return majorVersion >= reactVersionToCheck; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +function getReactElementRef(element) { + if (!/* @__PURE__ */ React4.isValidElement(element)) { + return null; + } + const reactElement = element; + const propsWithRef = reactElement.props; + return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; +} + +// node_modules/@base-ui/utils/esm/mergeObjects.js +function mergeObjects(a2, b2) { + if (a2 && !b2) { + return a2; + } + if (!a2 && b2) { + return b2; + } + if (a2 || b2) { + return { + ...a2, + ...b2 + }; + } + return void 0; +} + +// node_modules/@base-ui/react/esm/utils/getStateAttributesProps.js +function getStateAttributesProps(state, customMapping) { + const props = {}; + for (const key in state) { + const value = state[key]; + if (customMapping?.hasOwnProperty(key)) { + const customProps = customMapping[key](value); + if (customProps != null) { + Object.assign(props, customProps); + } + continue; + } + if (value === true) { + props[`data-${key.toLowerCase()}`] = ""; + } else if (value) { + props[`data-${key.toLowerCase()}`] = value.toString(); + } + } + return props; +} + +// node_modules/@base-ui/react/esm/utils/resolveClassName.js +function resolveClassName(className, state) { + return typeof className === "function" ? className(state) : className; +} + +// node_modules/@base-ui/react/esm/utils/resolveStyle.js +function resolveStyle(style, state) { + return typeof style === "function" ? style(state) : style; +} + +// node_modules/@base-ui/react/esm/merge-props/mergeProps.js +var EMPTY_PROPS = {}; +function mergeProps(a2, b2, c2, d2, e2) { + let merged = { + ...resolvePropsGetter(a2, EMPTY_PROPS) + }; + if (b2) { + merged = mergeOne(merged, b2); + } + if (c2) { + merged = mergeOne(merged, c2); + } + if (d2) { + merged = mergeOne(merged, d2); + } + if (e2) { + merged = mergeOne(merged, e2); + } + return merged; +} +function mergePropsN(props) { + if (props.length === 0) { + return EMPTY_PROPS; + } + if (props.length === 1) { + return resolvePropsGetter(props[0], EMPTY_PROPS); + } + let merged = { + ...resolvePropsGetter(props[0], EMPTY_PROPS) + }; + for (let i2 = 1; i2 < props.length; i2 += 1) { + merged = mergeOne(merged, props[i2]); + } + return merged; +} +function mergeOne(merged, inputProps) { + if (isPropsGetter(inputProps)) { + return inputProps(merged); + } + return mutablyMergeInto(merged, inputProps); +} +function mutablyMergeInto(mergedProps, externalProps) { + if (!externalProps) { + return mergedProps; + } + for (const propName in externalProps) { + const externalPropValue = externalProps[propName]; + switch (propName) { + case "style": { + mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); + break; + } + case "className": { + mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); + break; + } + default: { + if (isEventHandler(propName, externalPropValue)) { + mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); + } else { + mergedProps[propName] = externalPropValue; + } + } + } + } + return mergedProps; +} +function isEventHandler(key, value) { + const code0 = key.charCodeAt(0); + const code1 = key.charCodeAt(1); + const code2 = key.charCodeAt(2); + return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); +} +function isPropsGetter(inputProps) { + return typeof inputProps === "function"; +} +function resolvePropsGetter(inputProps, previousProps) { + if (isPropsGetter(inputProps)) { + return inputProps(previousProps); + } + return inputProps ?? EMPTY_PROPS; +} +function mergeEventHandlers(ourHandler, theirHandler) { + if (!theirHandler) { + return ourHandler; + } + if (!ourHandler) { + return theirHandler; + } + return (event) => { + if (isSyntheticEvent(event)) { + const baseUIEvent = event; + makeEventPreventable(baseUIEvent); + const result2 = theirHandler(baseUIEvent); + if (!baseUIEvent.baseUIHandlerPrevented) { + ourHandler?.(baseUIEvent); + } + return result2; + } + const result = theirHandler(event); + ourHandler?.(event); + return result; + }; +} +function makeEventPreventable(event) { + event.preventBaseUIHandler = () => { + event.baseUIHandlerPrevented = true; + }; + return event; +} +function mergeClassNames(ourClassName, theirClassName) { + if (theirClassName) { + if (ourClassName) { + return theirClassName + " " + ourClassName; + } + return theirClassName; + } + return ourClassName; +} +function isSyntheticEvent(event) { + return event != null && typeof event === "object" && "nativeEvent" in event; +} + +// node_modules/@base-ui/utils/esm/empty.js +var EMPTY_ARRAY = Object.freeze([]); +var EMPTY_OBJECT = Object.freeze({}); + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var import_react = __toESM(require_react(), 1); +function useRenderElement(element, componentProps, params = {}) { + const renderProp = componentProps.render; + const outProps = useRenderElementProps(componentProps, params); + if (params.enabled === false) { + return null; + } + const state = params.state ?? EMPTY_OBJECT; + return evaluateRenderProp(element, renderProp, outProps, state); +} +function useRenderElementProps(componentProps, params = {}) { + const { + className: classNameProp, + style: styleProp, + render: renderProp + } = componentProps; + const { + state = EMPTY_OBJECT, + ref, + props, + stateAttributesMapping, + enabled = true + } = params; + const className = enabled ? resolveClassName(classNameProp, state) : void 0; + const style = enabled ? resolveStyle(styleProp, state) : void 0; + const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; + const outProps = enabled ? mergeObjects(stateProps, Array.isArray(props) ? mergePropsN(props) : props) ?? EMPTY_OBJECT : EMPTY_OBJECT; + if (typeof document !== "undefined") { + if (!enabled) { + useMergedRefs(null, null); + } else if (Array.isArray(ref)) { + outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); + } else { + outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); + } + } + if (!enabled) { + return EMPTY_OBJECT; + } + if (className !== void 0) { + outProps.className = mergeClassNames(outProps.className, className); + } + if (style !== void 0) { + outProps.style = mergeObjects(outProps.style, style); + } + return outProps; +} +function evaluateRenderProp(element, render4, props, state) { + if (render4) { + if (typeof render4 === "function") { + return render4(props, state); + } + const mergedProps = mergeProps(props, render4.props); + mergedProps.ref = props.ref; + return /* @__PURE__ */ React5.cloneElement(render4, mergedProps); + } + if (element) { + if (typeof element === "string") { + return renderTag(element, props); + } + } + throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage(8)); +} +function renderTag(Tag, props) { + if (Tag === "button") { + return /* @__PURE__ */ (0, import_react.createElement)("button", { + type: "button", + ...props, + key: props.key + }); + } + if (Tag === "img") { + return /* @__PURE__ */ (0, import_react.createElement)("img", { + alt: "", + ...props, + key: props.key + }); + } + return /* @__PURE__ */ React5.createElement(Tag, props); +} + +// node_modules/@base-ui/react/esm/use-render/useRender.js +function useRender(params) { + return useRenderElement(params.defaultTagName ?? "div", params, params); +} + +// node_modules/clsx/dist/clsx.mjs +function r(e2) { + var t2, f2, n2 = ""; + if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; + else if ("object" == typeof e2) if (Array.isArray(e2)) { + var o2 = e2.length; + for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2); + } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); + return n2; +} +function clsx() { + for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); + return n2; +} +var clsx_default = clsx; + +// packages/icons/build-module/library/arrow-down.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) }); + +// packages/icons/build-module/library/arrow-left.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) }); + +// packages/icons/build-module/library/arrow-right.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) }); + +// packages/icons/build-module/library/arrow-up.mjs +var import_primitives4 = __toESM(require_primitives(), 1); +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) }); + +// packages/icons/build-module/library/block-table.mjs +var import_primitives5 = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) }); + +// packages/icons/build-module/library/category.mjs +var import_primitives6 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var category_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z" }) }); + +// packages/icons/build-module/library/check.mjs +var import_primitives7 = __toESM(require_primitives(), 1); +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +var check_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) }); + +// packages/icons/build-module/library/close-small.mjs +var import_primitives8 = __toESM(require_primitives(), 1); +var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); +var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) }); + +// packages/icons/build-module/library/cog.mjs +var import_primitives9 = __toESM(require_primitives(), 1); +var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); +var cog_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z" }) }); + +// packages/icons/build-module/library/envelope.mjs +var import_primitives10 = __toESM(require_primitives(), 1); +var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); +var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z" }) }); + +// packages/icons/build-module/library/error.mjs +var import_primitives11 = __toESM(require_primitives(), 1); +var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); +var error_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z" }) }); + +// packages/icons/build-module/library/format-list-bullets-rtl.mjs +var import_primitives12 = __toESM(require_primitives(), 1); +var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) }); + +// packages/icons/build-module/library/format-list-bullets.mjs +var import_primitives13 = __toESM(require_primitives(), 1); +var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) }); + +// packages/icons/build-module/library/funnel.mjs +var import_primitives14 = __toESM(require_primitives(), 1); +var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); +var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) }); + +// packages/icons/build-module/library/link.mjs +var import_primitives15 = __toESM(require_primitives(), 1); +var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); +var link_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) }); + +// packages/icons/build-module/library/mobile.mjs +var import_primitives16 = __toESM(require_primitives(), 1); +var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); +var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) }); + +// packages/icons/build-module/library/more-vertical.mjs +var import_primitives17 = __toESM(require_primitives(), 1); +var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); +var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); + +// packages/icons/build-module/library/next.mjs +var import_primitives18 = __toESM(require_primitives(), 1); +var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); +var next_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); + +// packages/icons/build-module/library/previous.mjs +var import_primitives19 = __toESM(require_primitives(), 1); +var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); +var previous_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); + +// packages/icons/build-module/library/scheduled.mjs +var import_primitives20 = __toESM(require_primitives(), 1); +var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); +var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z" }) }); + +// packages/icons/build-module/library/search.mjs +var import_primitives21 = __toESM(require_primitives(), 1); +var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); +var search_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) }); + +// packages/icons/build-module/library/seen.mjs +var import_primitives22 = __toESM(require_primitives(), 1); +var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); +var seen_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) }); + +// packages/icons/build-module/library/unseen.mjs +var import_primitives23 = __toESM(require_primitives(), 1); +var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); +var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) }); + +// packages/ui/build-module/stack/stack.mjs +var import_element2 = __toESM(require_element(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='71d20935c2']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "71d20935c2"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")); + document.head.appendChild(style); +} +var style_default = { "stack": "_19ce0419607e1896__stack" }; +var gapTokens = { + xs: "var(--wpds-dimension-gap-xs, 4px)", + sm: "var(--wpds-dimension-gap-sm, 8px)", + md: "var(--wpds-dimension-gap-md, 12px)", + lg: "var(--wpds-dimension-gap-lg, 16px)", + xl: "var(--wpds-dimension-gap-xl, 24px)", + "2xl": "var(--wpds-dimension-gap-2xl, 32px)", + "3xl": "var(--wpds-dimension-gap-3xl, 40px)" +}; +var Stack = (0, import_element2.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) { + const style = { + gap: gap && gapTokens[gap], + alignItems: align, + justifyContent: justify, + flexDirection: direction, + flexWrap: wrap + }; + const element = useRender({ + render: render4, + ref, + props: mergeProps(props, { style, className: style_default.stack }) + }); + return element; +}); + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var import_element3 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/constants.mjs +var import_i18n = __toESM(require_i18n(), 1); +var OPERATOR_IS_ANY = "isAny"; +var OPERATOR_IS_NONE = "isNone"; +var OPERATOR_IS_ALL = "isAll"; +var OPERATOR_IS_NOT_ALL = "isNotAll"; +var OPERATOR_BETWEEN = "between"; +var OPERATOR_IN_THE_PAST = "inThePast"; +var OPERATOR_OVER = "over"; +var OPERATOR_IS = "is"; +var OPERATOR_IS_NOT = "isNot"; +var OPERATOR_LESS_THAN = "lessThan"; +var OPERATOR_GREATER_THAN = "greaterThan"; +var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual"; +var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual"; +var OPERATOR_BEFORE = "before"; +var OPERATOR_AFTER = "after"; +var OPERATOR_BEFORE_INC = "beforeInc"; +var OPERATOR_AFTER_INC = "afterInc"; +var OPERATOR_CONTAINS = "contains"; +var OPERATOR_NOT_CONTAINS = "notContains"; +var OPERATOR_STARTS_WITH = "startsWith"; +var OPERATOR_ON = "on"; +var OPERATOR_NOT_ON = "notOn"; +var SORTING_DIRECTIONS = ["asc", "desc"]; +var sortArrows = { asc: "\u2191", desc: "\u2193" }; +var sortValues = { asc: "ascending", desc: "descending" }; +var sortLabels = { + asc: (0, import_i18n.__)("Sort ascending"), + desc: (0, import_i18n.__)("Sort descending") +}; +var sortIcons = { + asc: arrow_up_default, + desc: arrow_down_default +}; +var LAYOUT_TABLE = "table"; +var LAYOUT_GRID = "grid"; +var LAYOUT_LIST = "list"; +var LAYOUT_ACTIVITY = "activity"; +var LAYOUT_PICKER_GRID = "pickerGrid"; +var LAYOUT_PICKER_TABLE = "pickerTable"; + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var DataViewsContext = (0, import_element3.createContext)({ + view: { type: LAYOUT_TABLE }, + onChangeView: () => { + }, + fields: [], + data: [], + paginationInfo: { + totalItems: 0, + totalPages: 0 + }, + selection: [], + onChangeSelection: () => { + }, + setOpenedFilter: () => { + }, + openedFilter: null, + getItemId: (item) => item.id, + isItemClickable: () => true, + renderItemLink: void 0, + containerWidth: 0, + containerRef: (0, import_element3.createRef)(), + resizeObserverRef: () => { + }, + defaultLayouts: { list: {}, grid: {}, table: {} }, + filters: [], + isShowingFilter: false, + setIsShowingFilter: () => { + }, + hasInitiallyLoaded: false, + hasInfiniteScrollHandler: false, + config: { + perPageSizes: [] + } +}); +DataViewsContext.displayName = "DataViewsContext"; +var dataviews_context_default = DataViewsContext; + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var import_i18n21 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_i18n9 = __toESM(require_i18n(), 1); +var import_components6 = __toESM(require_components(), 1); +var import_element11 = __toESM(require_element(), 1); +var import_keycodes = __toESM(require_keycodes(), 1); + +// packages/dataviews/build-module/components/dataviews-selection-checkbox/index.mjs +var import_components = __toESM(require_components(), 1); +var import_i18n2 = __toESM(require_i18n(), 1); +var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); +function DataViewsSelectionCheckbox({ + selection, + onChangeSelection, + item, + getItemId, + titleField, + disabled, + ...extraProps +}) { + const id = getItemId(item); + const checked = !disabled && selection.includes(id); + const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n2.__)("(no title)"); + return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)( + import_components.CheckboxControl, + { + className: "dataviews-selection-checkbox", + "aria-label": selectionLabel, + "aria-disabled": disabled, + checked, + onChange: () => { + if (disabled) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + }, + ...extraProps + } + ); +} + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_components2 = __toESM(require_components(), 1); +var import_i18n3 = __toESM(require_i18n(), 1); +var import_element4 = __toESM(require_element(), 1); +var import_data3 = __toESM(require_data(), 1); +var import_compose = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/lock-unlock.mjs +var import_private_apis = __toESM(require_private_apis(), 1); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/dataviews" +); + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); +var { Menu, kebabCase } = unlock(import_components2.privateApis); +function ButtonTrigger({ + action, + onClick, + items, + variant +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + import_components2.Button, + { + disabled: !!action.disabled, + accessibleWhenDisabled: true, + size: "compact", + variant, + onClick, + children: label + } + ); +} +function MenuItemTrigger({ + action, + onClick, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.ItemLabel, { children: label }) }); +} +function ActionModal({ + action, + items, + closeModal +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader; + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + import_components2.Modal, + { + title: modalHeader || label, + __experimentalHideHeader: !!action.hideModalHeader, + onRequestClose: closeModal, + focusOnMount: action.modalFocusOnMount ?? true, + size: action.modalSize || "medium", + overlayClassName: `dataviews-action-modal dataviews-action-modal__${kebabCase( + action.id + )}`, + children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(action.RenderModal, { items, closeModal }) + } + ); +} +function ActionsMenuGroup({ + actions, + item, + registry, + setActiveModalAction +}) { + const { primaryActions, regularActions } = (0, import_element4.useMemo)(() => { + return actions.reduce( + (acc, action) => { + (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action); + return acc; + }, + { + primaryActions: [], + regularActions: [] + } + ); + }, [actions]); + const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + MenuItemTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item] + }, + action.id + )); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Menu.Group, { children: [ + renderActionGroup(primaryActions), + renderActionGroup(regularActions) + ] }); +} +function ItemActions({ + item, + actions, + isCompact +}) { + const registry = (0, import_data3.useRegistry)(); + const { primaryActions, eligibleActions } = (0, import_element4.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isCompact) { + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + isSmall: true, + registry + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)( + Stack, + { + direction: "row", + justify: "flex-end", + className: "dataviews-item-actions", + style: { + flexShrink: 0, + width: "auto" + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + registry + } + ) + ] + } + ); +} +function CompactItemActions({ + item, + actions, + isSmall, + registry +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)( + null + ); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Menu, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + Menu.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + import_components2.Button, + { + size: isSmall ? "small" : "compact", + icon: more_vertical_default, + label: (0, import_i18n3.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + className: "dataviews-all-actions-button" + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ActionsMenuGroup, + { + actions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} +function PrimaryActions({ + item, + actions, + registry, + buttonVariant +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)(null); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isMobileViewport) { + return null; + } + if (!Array.isArray(actions) || actions.length === 0) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [ + actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ButtonTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item], + variant: buttonVariant + }, + action.id + )), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_components3 = __toESM(require_components(), 1); +var import_i18n5 = __toESM(require_i18n(), 1); +var import_element5 = __toESM(require_element(), 1); +var import_data4 = __toESM(require_data(), 1); +var import_compose2 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/utils/get-footer-message.mjs +var import_i18n4 = __toESM(require_i18n(), 1); +function getFooterMessage(selectionCount, itemsCount, totalItems) { + if (selectionCount > 0) { + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item selected", "%d Items selected", selectionCount), + selectionCount + ); + } + if (totalItems > itemsCount) { + return (0, import_i18n4.sprintf)( + /* translators: %1$d: number of items. %2$d: total number of items. */ + (0, import_i18n4._n)("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems), + itemsCount, + totalItems + ); + } + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item", "%d Items", itemsCount), + itemsCount + ); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); +function ActionWithModal({ + action, + items, + ActionTriggerComponent +}) { + const [isModalOpen, setIsModalOpen] = (0, import_element5.useState)(false); + const actionTriggerProps = { + action, + onClick: () => { + setIsModalOpen(true); + }, + items + }; + return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ActionTriggerComponent, { ...actionTriggerProps }), + isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionModal, + { + action, + items, + closeModal: () => setIsModalOpen(false) + } + ) + ] }); +} +function useHasAPossibleBulkAction(actions, item) { + return (0, import_element5.useMemo)(() => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }, [actions, item]); +} +function useSomeItemHasAPossibleBulkAction(actions, data) { + return (0, import_element5.useMemo)(() => { + return data.some((item) => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }); + }, [actions, data]); +} +function BulkSelectionCheckbox({ + selection, + onChangeSelection, + data, + actions, + getItemId +}) { + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return actions.some( + (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) + ); + }); + }, [data, actions]); + const selectedItems = data.filter( + (item) => selection.includes(getItemId(item)) && selectableItems.includes(item) + ); + const areAllSelected = selectedItems.length === selectableItems.length; + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.CheckboxControl, + { + className: "dataviews-view-table-selection-checkbox", + checked: areAllSelected, + indeterminate: !areAllSelected && !!selectedItems.length, + onChange: () => { + if (areAllSelected) { + onChangeSelection([]); + } else { + onChangeSelection( + selectableItems.map((item) => getItemId(item)) + ); + } + }, + "aria-label": areAllSelected ? (0, import_i18n5.__)("Deselect all") : (0, import_i18n5.__)("Select all") + } + ); +} +function ActionTrigger({ + action, + onClick, + isBusy, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + if (isMobile) { + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + label, + icon: action.icon, + size: "compact", + onClick, + isBusy + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + size: "compact", + onClick, + isBusy, + children: label + } + ); +} +var EMPTY_ARRAY2 = []; +function ActionButton({ + action, + selectedItems, + actionInProgress, + setActionInProgress +}) { + const registry = (0, import_data4.useRegistry)(); + const selectedEligibleItems = (0, import_element5.useMemo)(() => { + return selectedItems.filter((item) => { + return !action.isEligible || action.isEligible(item); + }); + }, [action, selectedItems]); + if ("RenderModal" in action) { + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionWithModal, + { + action, + items: selectedEligibleItems, + ActionTriggerComponent: ActionTrigger + }, + action.id + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionTrigger, + { + action, + onClick: async () => { + setActionInProgress(action.id); + await action.callback(selectedItems, { + registry + }); + setActionInProgress(null); + }, + items: selectedEligibleItems, + isBusy: actionInProgress === action.id + }, + action.id + ); +} +function renderFooterContent(data, actions, getItemId, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) { + const message2 = getFooterMessage( + selection.length, + data.length, + paginationInfo.totalItems + ); + return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__container", + gap: "md", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId + } + ), + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }), + /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__action-buttons", + gap: "xs", + children: [ + actionsToShow.map((action) => { + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionButton, + { + action, + selectedItems, + actionInProgress, + setActionInProgress + }, + action.id + ); + }), + selectedItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.Button, + { + icon: close_small_default, + showTooltip: true, + tooltipPosition: "top", + size: "compact", + label: (0, import_i18n5.__)("Cancel"), + disabled: !!actionInProgress, + accessibleWhenDisabled: false, + onClick: () => { + onChangeSelection(EMPTY_ARRAY2); + } + } + ) + ] + } + ) + ] + } + ); +} +function FooterContent({ + selection, + actions, + onChangeSelection, + data, + getItemId, + paginationInfo +}) { + const [actionInProgress, setActionInProgress] = (0, import_element5.useState)( + null + ); + const footerContentRef = (0, import_element5.useRef)(void 0); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + const bulkActions = (0, import_element5.useMemo)( + () => actions.filter((action) => action.supportsBulk), + [actions] + ); + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return bulkActions.some( + (action) => !action.isEligible || action.isEligible(item) + ); + }); + }, [data, bulkActions]); + const selectedItems = (0, import_element5.useMemo)(() => { + return data.filter( + (item) => selection.includes(getItemId(item)) && selectableItems.includes(item) + ); + }, [selection, data, getItemId, selectableItems]); + const actionsToShow = (0, import_element5.useMemo)( + () => actions.filter((action) => { + return action.supportsBulk && (!isMobile || action.icon) && selectedItems.some( + (item) => !action.isEligible || action.isEligible(item) + ); + }), + [actions, selectedItems, isMobile] + ); + if (!actionInProgress) { + if (footerContentRef.current) { + footerContentRef.current = void 0; + } + return renderFooterContent( + data, + actions, + getItemId, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } else if (!footerContentRef.current) { + footerContentRef.current = renderFooterContent( + data, + actions, + getItemId, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } + return footerContentRef.current; +} +function BulkActionsFooter() { + const { + data, + selection, + actions = EMPTY_ARRAY2, + onChangeSelection, + getItemId, + paginationInfo + } = (0, import_element5.useContext)(dataviews_context_default); + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + FooterContent, + { + selection, + onChangeSelection, + data, + actions, + getItemId, + paginationInfo + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_i18n6 = __toESM(require_i18n(), 1); +var import_components4 = __toESM(require_components(), 1); +var import_element6 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/utils/get-hideable-fields.mjs +function getHideableFields(view, fields) { + const togglableFields = [ + view?.titleField, + view?.mediaField, + view?.descriptionField + ].filter(Boolean); + return fields.filter( + (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu2 } = unlock(import_components4.privateApis); +function WithMenuSeparators({ children }) { + return import_element6.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_element6.Fragment, { children: [ + i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Separator, {}), + child + ] }, i2)); +} +var _HeaderMenu = (0, import_element6.forwardRef)(function HeaderMenu({ + fieldId, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove = true, + canInsertLeft = true, + canInsertRight = true +}, ref) { + const visibleFieldIds = view.fields ?? []; + const index = visibleFieldIds?.indexOf(fieldId); + const isSorted = view.sort?.field === fieldId; + let isHidable = false; + let isSortable = false; + let canAddFilter = false; + let operators = []; + const field = fields.find((f2) => f2.id === fieldId); + const { setIsShowingFilter } = (0, import_element6.useContext)(dataviews_context_default); + if (!field) { + return null; + } + isHidable = field.enableHiding !== false; + isSortable = field.enableSorting !== false; + const header = field.header; + operators = !!field.filterBy && field.filterBy?.operators || []; + canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary; + if (!isSortable && !canMove && !isHidable && !canAddFilter) { + return header; + } + const hiddenFields = getHideableFields(view, fields).filter( + (f2) => !visibleFieldIds.includes(f2.id) + ); + const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length; + const isRtl = (0, import_i18n6.isRTL)(); + return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)( + Menu2.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + import_components4.Button, + { + size: "compact", + className: "dataviews-view-table-header-button", + ref, + variant: "tertiary" + } + ), + children: [ + header, + view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(WithMenuSeparators, { children: [ + isSortable && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map( + (direction) => { + const isChecked = view.sort && isSorted && view.sort.direction === direction; + const value = `${fieldId}-${direction}`; + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.RadioItem, + { + name: "view-table-sorting", + value, + checked: isChecked, + onChange: () => { + onChangeView({ + ...view, + sort: { + field: fieldId, + direction + }, + showLevels: false + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] }) + }, + value + ); + } + ) }), + canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: funnel_default }), + onClick: () => { + setOpenedFilter(fieldId); + setIsShowingFilter(true); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: fieldId, + value: void 0, + operator: operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Add filter") }) + } + ) }), + (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2.Group, { children: [ + canMove && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: arrow_left_default }), + disabled: isRtl ? index >= visibleFieldIds.length - 1 : index < 1, + onClick: () => { + const targetIndex = isRtl ? index + 1 : index - 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move left") }) + } + ), + canMove && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: arrow_right_default }), + disabled: isRtl ? index < 1 : index >= visibleFieldIds.length - 1, + onClick: () => { + const targetIndex = isRtl ? index - 1 : index + 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move right") }) + } + ), + canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert left") }) }), + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index + 1 : index; + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert right") }) }), + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index : index + 1; + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: unseen_default }), + onClick: () => { + onHide(field); + onChangeView({ + ...view, + fields: visibleFieldIds.filter( + (id) => id !== fieldId + ) + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Hide column") }) + } + ) + ] }) + ] }) }) + ] }); +}); +var ColumnHeaderMenu = _HeaderMenu; +var column_header_menu_default = ColumnHeaderMenu; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs +var import_element7 = __toESM(require_element(), 1); +var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); +function getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className +}) { + if (!isItemClickable(item) || !onClickItem) { + return { className }; + } + return { + className: className ? `${className} ${className}--clickable` : void 0, + role: "button", + tabIndex: 0, + onClick: (event) => { + event.stopPropagation(); + onClickItem(item); + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + onClickItem(item); + } + } + }; +} +function ItemClickWrapper({ + item, + isItemClickable, + onClickItem, + renderItemLink, + className, + children, + ...extraProps +}) { + if (!isItemClickable(item)) { + return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className, ...extraProps, children }); + } + if (renderItemLink) { + const renderedElement = renderItemLink({ + item, + className: `${className} ${className}--clickable`, + ...extraProps, + children + }); + return (0, import_element7.cloneElement)(renderedElement, { + onClick: (event) => { + event.stopPropagation(); + if (renderedElement.props.onClick) { + renderedElement.props.onClick(event); + } + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + if (renderedElement.props.onKeyDown) { + renderedElement.props.onKeyDown(event); + } + } + } + }); + } + const clickProps = getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className + }); + return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ...clickProps, ...extraProps, children }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-primary.mjs +var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); +function ColumnPrimary({ + item, + level, + titleField, + mediaField, + descriptionField, + onClickItem, + renderItemLink, + isItemClickable +}) { + return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Stack, { direction: "row", gap: "md", align: "flex-start", justify: "flex-start", children: [ + mediaField && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media", + "aria-label": isItemClickable(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "32px" } + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)( + Stack, + { + direction: "column", + align: "flex-start", + className: "dataviews-view-table__primary-column-content", + children: [ + titleField && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-title-field", + children: [ + level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "dataviews-view-table__level", children: [ + Array(level).fill("\u2014").join(" "), + "\xA0" + ] }), + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(titleField.render, { item, field: titleField }) + ] + } + ), + descriptionField && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) + ] + } + ) + ] }); +} +var column_primary_default = ColumnPrimary; + +// packages/dataviews/build-module/components/dataviews-layouts/table/use-is-horizontal-scroll-end.mjs +var import_compose3 = __toESM(require_compose(), 1); +var import_element8 = __toESM(require_element(), 1); +var import_i18n7 = __toESM(require_i18n(), 1); +var isScrolledToEnd = (element) => { + if ((0, import_i18n7.isRTL)()) { + const scrollLeft = Math.abs(element.scrollLeft); + return scrollLeft <= 1; + } + return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1; +}; +function useIsHorizontalScrollEnd({ + scrollContainerRef, + enabled = false +}) { + const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element8.useState)(false); + const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)( + (0, import_element8.useCallback)(() => { + const scrollContainer = scrollContainerRef.current; + if (scrollContainer) { + setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer)); + } + }, [scrollContainerRef, setIsHorizontalScrollEnd]), + 200 + ); + (0, import_element8.useEffect)(() => { + if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) { + return () => { + }; + } + handleIsHorizontalScrollEnd(); + scrollContainerRef.current.addEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.addEventListener("resize", handleIsHorizontalScrollEnd); + return () => { + scrollContainerRef.current?.removeEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.removeEventListener("resize", handleIsHorizontalScrollEnd); + }; + }, [scrollContainerRef, enabled]); + return isHorizontalScrollEnd; +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/get-data-by-group.mjs +function getDataByGroup(data, groupByField) { + return data.reduce((groups, item) => { + const groupName = groupByField.getValue({ item }); + if (!groups.has(groupName)) { + groups.set(groupName, []); + } + groups.get(groupName)?.push(item); + return groups; + }, /* @__PURE__ */ new Map()); +} + +// packages/dataviews/build-module/components/dataviews-view-config/properties-section.mjs +var import_components5 = __toESM(require_components(), 1); +var import_i18n8 = __toESM(require_i18n(), 1); +var import_element9 = __toESM(require_element(), 1); +var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); +function FieldItem({ + field, + isVisible: isVisible2, + onToggleVisibility +}) { + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components5.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Stack, { direction: "row", gap: "sm", justify: "flex-start", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components5.Icon, { icon: check_default }) }), + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "dataviews-view-config__label", children: field.label }) + ] }) }); +} +function isDefined(item) { + return !!item; +} +function PropertiesSection({ + showLabel = true +}) { + const { view, fields, onChangeView } = (0, import_element9.useContext)(dataviews_context_default); + const regularFields = getHideableFields(view, fields); + if (!regularFields?.length) { + return null; + } + const titleField = fields.find((f2) => f2.id === view.titleField); + const previewField2 = fields.find((f2) => f2.id === view.mediaField); + const descriptionField = fields.find( + (f2) => f2.id === view.descriptionField + ); + const lockedFields = [ + { + field: titleField, + isVisibleFlag: "showTitle" + }, + { + field: previewField2, + isVisibleFlag: "showMedia" + }, + { + field: descriptionField, + isVisibleFlag: "showDescription" + } + ].filter(({ field }) => isDefined(field)); + const visibleFieldIds = view.fields ?? []; + const visibleRegularFieldsCount = regularFields.filter( + (f2) => visibleFieldIds.includes(f2.id) + ).length; + const visibleLockedFields = lockedFields.filter( + ({ isVisibleFlag }) => ( + // @ts-expect-error + view[isVisibleFlag] ?? true + ) + ); + const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount; + const isSingleVisibleLockedField = totalVisibleFields === 1 && visibleLockedFields.length === 1; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Stack, { direction: "column", className: "dataviews-field-control", children: [ + showLabel && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components5.BaseControl.VisualLabel, { children: (0, import_i18n8.__)("Properties") }), + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-config__properties", + children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_components5.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [ + lockedFields.map(({ field, isVisibleFlag }) => { + const isVisible2 = view[isVisibleFlag] ?? true; + const fieldToRender = isSingleVisibleLockedField && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + [isVisibleFlag]: !isVisible2 + }); + } + }, + field.id + ); + }), + regularFields.map((field) => { + const isVisible2 = visibleFieldIds.includes(field.id); + const fieldToRender = totalVisibleFields === 1 && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + fields: isVisible2 ? visibleFieldIds.filter( + (fieldId) => fieldId !== field.id + ) : [...visibleFieldIds, field.id] + }); + } + }, + field.id + ); + }) + ] }) + } + ) + ] }); +} + +// packages/dataviews/build-module/hooks/use-delayed-loading.mjs +var import_element10 = __toESM(require_element(), 1); +function useDelayedLoading(isLoading, options = { delay: 400 }) { + const [showLoader, setShowLoader] = (0, import_element10.useState)(false); + (0, import_element10.useEffect)(() => { + if (!isLoading) { + return; + } + const timeout = setTimeout(() => { + setShowLoader(true); + }, options.delay); + return () => { + clearTimeout(timeout); + setShowLoader(false); + }; + }, [isLoading, options.delay]); + return showLoader; +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); +function getEffectiveAlign(explicitAlign, fieldType) { + if (explicitAlign) { + return explicitAlign; + } + if (fieldType === "integer" || fieldType === "number") { + return "end"; + } + return void 0; +} +function TableColumnField({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(field.render, { item, field }) }); +} +function TableRow({ + hasBulkActions, + item, + level, + actions, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId, + isItemClickable, + onClickItem, + renderItemLink, + onChangeSelection, + isActionsColumnSticky, + posinset +}) { + const { paginationInfo } = (0, import_element11.useContext)(dataviews_context_default); + const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item); + const isSelected2 = hasPossibleBulkAction && selection.includes(id); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const isTouchDeviceRef = (0, import_element11.useRef)(false); + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": hasPossibleBulkAction && isSelected2, + "has-bulk-actions": hasPossibleBulkAction + }), + onTouchStart: () => { + isTouchDeviceRef.current = true; + }, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : void 0, + onMouseDown: (event) => { + const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) { + event?.preventDefault(); + } + }, + onClick: (event) => { + if (!hasPossibleBulkAction) { + return; + } + const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") { + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId, + titleField, + disabled: !hasPossibleBulkAction + } + ) }) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + column_primary_default, + { + item, + level, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable, + onClickItem, + renderItemLink + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find((f2) => f2.id === column); + const effectiveAlign = getEffectiveAlign(align, field?.type); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + TableColumnField, + { + fields, + item, + column, + align: effectiveAlign + } + ) + }, + column + ); + }), + !!actions?.length && // Disable reason: we are not making the element interactive, + // but preventing any click events from bubbling up to the + // table row. This allows us to add a click handler to the row + // itself (to toggle row selection) without erroneously + // intercepting click events from ItemActions. + /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "td", + { + className: clsx_default("dataviews-view-table__actions-column", { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": isActionsColumnSticky + }), + onClick: (e2) => e2.stopPropagation(), + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ItemActions, { item, actions }) + } + ) + ] + } + ); +} +function ViewTable({ + actions, + data, + fields, + getItemId, + getItemLevel, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + view, + className, + empty +}) { + const { containerRef } = (0, import_element11.useContext)(dataviews_context_default); + const isDelayedLoading = useDelayedLoading(isLoading); + const headerMenuRefs = (0, import_element11.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element11.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element11.useState)(); + const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element11.useState)(null); + (0, import_element11.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element11.useId)(); + const isHorizontalScrollEnd = useIsHorizontalScrollEnd({ + scrollContainerRef: containerRef, + enabled: !!actions?.length + }); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const handleHeaderContextMenu = (event) => { + event.preventDefault(); + event.stopPropagation(); + const virtualAnchor = { + getBoundingClientRect: () => ({ + x: event.clientX, + y: event.clientY, + top: event.clientY, + left: event.clientX, + right: event.clientX, + bottom: event.clientY, + width: 0, + height: 0, + toJSON: () => ({}) + }) + }; + window.requestAnimationFrame(() => { + setContextMenuAnchor(virtualAnchor); + }); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const isRtl = (0, import_i18n9.isRTL)(); + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + id: tableNoticeId, + children: empty + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)( + "table", + { + className: clsx_default("dataviews-view-table", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "has-bulk-actions": hasBulkActions, + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : void 0, + inert: !isInfiniteScroll && isLoading ? "true" : void 0, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("colgroup", { children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-checkbox" }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-first-data" }), + columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "col", + { + className: clsx_default( + `dataviews-view-table__col-${column}`, + { + "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0 + } + ) + }, + `col-${column}` + )), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-actions" }) + ] }), + contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components6.Popover, + { + anchor: contextMenuAnchor, + onClose: () => setContextMenuAnchor(null), + placement: "bottom-start", + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PropertiesSection, { showLabel: false }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("tr", { className: "dataviews-view-table__row", children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "th", + { + className: "dataviews-view-table__checkbox-column", + scope: "col", + onContextMenu: handleHeaderContextMenu, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId + } + ) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false, + canInsertLeft: isRtl ? view.layout?.enableMoving ?? true : false, + canInsertRight: isRtl ? false : view.layout?.enableMoving ?? true + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find( + (f2) => f2.id === column + ); + const effectiveAlign = getEffectiveAlign( + align, + field?.type + ); + const canInsertOrMove = view.layout?.enableMoving ?? true; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: effectiveAlign + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: canInsertOrMove, + canInsertLeft: canInsertOrMove, + canInsertRight: canInsertOrMove + } + ) + }, + column + ); + }), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "th", + { + className: clsx_default( + "dataviews-view-table__actions-column", + { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd + } + ), + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n9.__)("Actions") }) + } + ) + ] }) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("tbody", { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0), + className: "dataviews-view-table__group-header-cell", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n9.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n9.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) }), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd + }, + getItemId(item) + )) + ] }, `group-${groupName}`) + ) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd, + posinset: isInfiniteScroll ? index + 1 : void 0 + }, + getItemId(item) + )) }) + ] + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "dataviews-loading", id: tableNoticeId, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components6.Spinner, {}) }) }) + ] }); +} +var table_default = ViewTable; + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_components9 = __toESM(require_components(), 1); +var import_i18n12 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_components8 = __toESM(require_components(), 1); +var import_i18n11 = __toESM(require_i18n(), 1); +var import_compose4 = __toESM(require_compose(), 1); +var import_keycodes2 = __toESM(require_keycodes(), 1); +var import_element13 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/preview-size-picker.mjs +var import_components7 = __toESM(require_components(), 1); +var import_i18n10 = __toESM(require_i18n(), 1); +var import_element12 = __toESM(require_element(), 1); +var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); +var imageSizes = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +var DEFAULT_PREVIEW_SIZE = imageSizes[2].value; +function useGridColumns() { + const context = (0, import_element12.useContext)(dataviews_context_default); + const view = context.view; + return (0, import_element12.useMemo)(() => { + const containerWidth = context.containerWidth; + const gap = 32; + const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE; + const columns = Math.floor( + (containerWidth + gap) / (previewSize + gap) + ); + return Math.max(1, columns); + }, [context.containerWidth, view.layout?.previewSize]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); +var { Badge } = unlock(import_components8.privateApis); +function chunk(array, size) { + const chunks = []; + for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) { + chunks.push(array.slice(i2, i2 + size)); + } + return chunks; +} +var GridItem = (0, import_element13.forwardRef)(function GridItem2({ + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config, + ...props +}, ref) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasBulkAction = useHasAPossibleBulkAction(actions, item); + const id = getItemId(item); + const instanceId = (0, import_compose4.useInstanceId)(GridItem2); + const isSelected2 = selection.includes(id); + const mediaPlaceholder = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "dataviews-view-grid__media-placeholder" }); + const rendersMediaField = showMedia && mediaField?.render; + const renderedMediaField = rendersMediaField ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : mediaPlaceholder; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(titleField.render, { item, field: titleField }) : null; + let mediaA11yProps; + let titleA11yProps; + if (isItemClickable(item) && onClickItem) { + if (renderedTitleField) { + mediaA11yProps = { + "aria-labelledby": `dataviews-view-grid__title-field-${instanceId}` + }; + titleA11yProps = { + id: `dataviews-view-grid__title-field-${instanceId}` + }; + } else { + mediaA11yProps = { + "aria-label": (0, import_i18n11.__)("Navigate to item") + }; + } + } + return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)( + Stack, + { + direction: "column", + ...props, + ref, + className: clsx_default( + props.className, + "dataviews-view-grid__row__gridcell", + "dataviews-view-grid__card", + { + "is-selected": hasBulkAction && isSelected2 + } + ), + onClickCapture: (event) => { + props.onClickCapture?.(event); + if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) { + event.stopPropagation(); + event.preventDefault(); + if (!hasBulkAction) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: clsx_default("dataviews-view-grid__media", { + "dataviews-view-grid__media--placeholder": !rendersMediaField + }), + ...mediaA11yProps, + children: renderedMediaField + } + ), + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId, + titleField, + disabled: !hasBulkAction + } + ), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ItemActions, { item, actions, isCompact: true }) }), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "dataviews-view-grid__title", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-grid__title-field dataviews-title-field", + ...titleA11yProps, + title: titleField?.getValueFormatted({ + item, + field: titleField + }) || void 0, + children: renderedTitleField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + Badge, + { + className: "dataviews-view-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Flex, + { + className: "dataviews-view-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components8.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components8.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.FlexItem, + { + className: "dataviews-view-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + } + ); +}); +function CompositeGrid({ + data, + isInfiniteScroll, + className, + inert, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId, + actions +}) { + const { paginationInfo, resizeObserverRef } = (0, import_element13.useContext)(dataviews_context_default); + const gridColumns = useGridColumns(); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const size = "900px"; + const totalRows = Math.ceil(data.length / gridColumns); + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Composite, + { + role: isInfiniteScroll ? "feed" : "grid", + className: clsx_default("dataviews-view-grid", className), + focusWrap: true, + "aria-busy": isLoading, + "aria-rowcount": isInfiniteScroll ? void 0 : totalRows, + ref: resizeObserverRef, + inert, + children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Composite.Row, + { + render: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "div", + { + role: "row", + "aria-rowindex": i2 + 1, + "aria-label": (0, import_i18n11.sprintf)( + /* translators: %d: The row number in the grid */ + (0, import_i18n11.__)("Row %d"), + i2 + 1 + ), + className: "dataviews-view-grid__row", + style: { + gridTemplateColumns: `repeat( ${gridColumns}, minmax(0, 1fr) )` + } + } + ), + children: row.map((item, indexInRow) => { + const index = i2 * gridColumns + indexInRow; + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Composite.Item, + { + render: (props) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + GridItem, + { + ...props, + role: isInfiniteScroll ? "article" : "gridcell", + "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0, + "aria-posinset": isInfiniteScroll ? index + 1 : void 0, + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config: { + sizes: size + } + } + ) + }, + getItemId(item) + ); + }) + }, + i2 + )) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); +function ViewGrid({ + actions, + data, + fields, + getItemId, + isLoading, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + selection, + view, + className, + empty +}) { + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const gridProps = { + className: clsx_default(className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId, + actions + }; + return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Stack, { direction: "column", gap: "lg", children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("h3", { className: "dataviews-view-grid__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n12.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n12.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + CompositeGrid, + { + ...gridProps, + data: groupItems, + isInfiniteScroll: false + } + ) + ] + }, + groupName + ) + ) }), + // Render a single grid with all data. + !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + CompositeGrid, + { + ...gridProps, + data, + isInfiniteScroll: !!isInfiniteScroll + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components9.Spinner, {}) }) + ] + }); +} +var grid_default = ViewGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/list/index.mjs +var import_compose5 = __toESM(require_compose(), 1); +var import_components10 = __toESM(require_components(), 1); +var import_element14 = __toESM(require_element(), 1); +var import_i18n13 = __toESM(require_i18n(), 1); +var import_data5 = __toESM(require_data(), 1); +var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu3 } = unlock(import_components10.privateApis); +function generateItemWrapperCompositeId(idPrefix) { + return `${idPrefix}-item-wrapper`; +} +function generatePrimaryActionCompositeId(idPrefix, primaryActionId) { + return `${idPrefix}-primary-action-${primaryActionId}`; +} +function generateDropdownTriggerCompositeId(idPrefix) { + return `${idPrefix}-dropdown`; +} +function PrimaryActionGridCell({ + idPrefix, + primaryAction, + item +}) { + const registry = (0, import_data5.useRegistry)(); + const [isModalOpen, setIsModalOpen] = (0, import_element14.useState)(false); + const compositeItemId = generatePrimaryActionCompositeId( + idPrefix, + primaryAction.id + ); + const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]); + return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + text: label, + size: "small", + onClick: () => setIsModalOpen(true) + } + ), + children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ActionModal, + { + action: primaryAction, + items: [item], + closeModal: () => setIsModalOpen(false) + } + ) + } + ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + size: "small", + onClick: () => { + primaryAction.callback([item], { registry }); + }, + children: label + } + ) + } + ) }, primaryAction.id); +} +function ListItem({ + view, + actions, + idPrefix, + isSelected: isSelected2, + item, + titleField, + mediaField, + descriptionField, + onSelect, + otherFields, + onDropdownTriggerKeyDown, + posinset +}) { + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element14.useRef)(null); + const labelId = `${idPrefix}-label`; + const descriptionId = `${idPrefix}-description`; + const registry = (0, import_data5.useRegistry)(); + const [isHovered, setIsHovered] = (0, import_element14.useState)(false); + const [activeModalAction, setActiveModalAction] = (0, import_element14.useState)( + null + ); + const handleHover = ({ type }) => { + const isHover = type === "mouseenter"; + setIsHovered(isHover); + }; + const { paginationInfo } = (0, import_element14.useContext)(dataviews_context_default); + (0, import_element14.useEffect)(() => { + if (isSelected2) { + itemRef.current?.scrollIntoView({ + behavior: "auto", + block: "nearest", + inline: "nearest" + }); + } + }, [isSelected2]); + const { primaryAction, eligibleActions } = (0, import_element14.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryAction: _primaryActions[0], + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1; + const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "52px" } + } + ) }) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(titleField.render, { item, field: titleField }) : null; + const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "row", + gap: "md", + className: "dataviews-view-list__item-actions", + children: [ + primaryAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + PrimaryActionGridCell, + { + idPrefix, + primaryAction, + item + } + ), + !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { role: "gridcell", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Menu3, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + Menu3.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: generateDropdownTriggerCompositeId( + idPrefix + ), + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Button, + { + size: "small", + icon: more_vertical_default, + label: (0, import_i18n13.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + onKeyDown: onDropdownTriggerKeyDown + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ActionsMenuGroup, + { + actions: eligibleActions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }) + ] + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Row, + { + ref: itemRef, + render: ( + /* aria-posinset breaks Composite.Row if passed to it directly. */ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0 + } + ) + ), + role: infiniteScrollEnabled ? "article" : "row", + className: clsx_default({ + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleHover, + onMouseLeave: handleHover, + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-view-list__item-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: generateItemWrapperCompositeId(idPrefix), + "aria-pressed": isSelected2, + "aria-labelledby": labelId, + "aria-describedby": descriptionId, + className: "dataviews-view-list__item", + onClick: () => onSelect(item) + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "row", + gap: "md", + justify: "start", + align: "flex-start", + style: { flex: 1, minWidth: 0 }, + children: [ + renderedMediaField, + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "column", + gap: "xs", + className: "dataviews-view-list__field-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Stack, { direction: "row", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + className: "dataviews-title-field dataviews-view-list__title-field", + id: labelId, + children: renderedTitleField + } + ), + usedActions + ] }), + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + className: "dataviews-view-list__fields", + id: descriptionId, + children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + "div", + { + className: "dataviews-view-list__field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.VisuallyHidden, + { + as: "span", + className: "dataviews-view-list__field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) + } + ) + ] + } + ) + ] + } + ) + ] + } + ) + } + ); +} +function isDefined2(item) { + return !!item; +} +function ViewList(props) { + const { + actions, + data, + fields, + getItemId, + isLoading, + onChangeSelection, + selection, + view, + className, + empty + } = props; + const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list"); + const isDelayedLoading = useDelayedLoading(!!isLoading); + const selectedItem = data?.findLast( + (item) => selection.includes(getItemId(item)) + ); + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2); + const onSelect = (item) => onChangeSelection([getItemId(item)]); + const generateCompositeItemIdPrefix = (0, import_element14.useCallback)( + (item) => `${baseId}-${getItemId(item)}`, + [baseId, getItemId] + ); + const isActiveCompositeItem = (0, import_element14.useCallback)( + (item, idToCheck) => { + return idToCheck.startsWith( + generateCompositeItemIdPrefix(item) + ); + }, + [generateCompositeItemIdPrefix] + ); + const [activeCompositeId, setActiveCompositeId] = (0, import_element14.useState)(void 0); + (0, import_element14.useEffect)(() => { + if (selectedItem) { + setActiveCompositeId( + generateItemWrapperCompositeId( + generateCompositeItemIdPrefix(selectedItem) + ) + ); + } + }, [selectedItem, generateCompositeItemIdPrefix]); + const activeItemIndex = data.findIndex( + (item) => isActiveCompositeItem(item, activeCompositeId ?? "") + ); + const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex); + const isActiveIdInList = activeItemIndex !== -1; + const selectCompositeItem = (0, import_element14.useCallback)( + (targetIndex, generateCompositeId) => { + const clampedIndex = Math.min( + data.length - 1, + Math.max(0, targetIndex) + ); + if (!data[clampedIndex]) { + return; + } + const itemIdPrefix = generateCompositeItemIdPrefix( + data[clampedIndex] + ); + const targetCompositeItemId = generateCompositeId(itemIdPrefix); + setActiveCompositeId(targetCompositeItemId); + document.getElementById(targetCompositeItemId)?.focus(); + }, + [data, generateCompositeItemIdPrefix] + ); + (0, import_element14.useEffect)(() => { + const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1; + if (!isActiveIdInList && wasActiveIdInList) { + selectCompositeItem( + previousActiveItemIndex, + generateItemWrapperCompositeId + ); + } + }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]); + const onDropdownTriggerKeyDown = (0, import_element14.useCallback)( + (event) => { + if (event.key === "ArrowDown") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex + 1, + generateDropdownTriggerCompositeId + ); + } + if (event.key === "ArrowUp") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex - 1, + generateDropdownTriggerCompositeId + ); + } + }, + [selectCompositeItem, activeItemIndex] + ); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite, + { + id: `${baseId}`, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {}), + className: "dataviews-view-list__group", + role: "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + Stack, + { + direction: "column", + gap: "lg", + className: clsx_default("dataviews-view-list", className), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("h3", { className: "dataviews-view-list__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n13.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n13.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + groupItems.map((item) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown + }, + id + ); + }) + ] + }, + groupName + ) + ) + } + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite, + { + id: baseId, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {}), + className: clsx_default("dataviews-view-list", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + role: view.infiniteScrollEnabled ? "feed" : "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + children: data.map((item, index) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + }, + id + ); + }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components10.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_components12 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-group.mjs +var import_i18n14 = __toESM(require_i18n(), 1); +var import_element15 = __toESM(require_element(), 1); +var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); +function ActivityGroup({ + groupName, + groupData, + groupField, + showLabel = true, + children +}) { + const groupHeader = showLabel ? (0, import_element15.createInterpolateElement)( + // translators: %s: The label of the field e.g. "Status". + (0, import_i18n14.sprintf)((0, import_i18n14.__)("%s: "), groupField.label).trim(), + { + groupName: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + groupField.render, + { + item: groupData[0], + field: groupField + } + ) + } + ) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(groupField.render, { item: groupData[0], field: groupField }); + return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-activity__group", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }), + children + ] + }, + groupName + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-item.mjs +var import_components11 = __toESM(require_components(), 1); +var import_element16 = __toESM(require_element(), 1); +var import_data6 = __toESM(require_data(), 1); +var import_compose6 = __toESM(require_compose(), 1); +var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); +function ActivityItem(props) { + const { + view, + actions, + item, + titleField, + mediaField, + descriptionField, + otherFields, + posinset, + onClickItem, + renderItemLink, + isItemClickable + } = props; + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element16.useRef)(null); + const registry = (0, import_data6.useRegistry)(); + const { paginationInfo } = (0, import_element16.useContext)(dataviews_context_default); + const { primaryActions, eligibleActions } = (0, import_element16.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose6.useViewportMatch)("medium", "<"); + const density = view.layout?.density ?? "balanced"; + const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { + sizes: density === "comfortable" ? "32px" : "24px" + } + } + ) : null; + const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + "span", + { + className: "dataviews-view-activity__item-bullet", + "aria-hidden": "true" + } + ) }); + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(titleField.render, { item, field: titleField }) : null; + const verticalGap = (0, import_element16.useMemo)(() => { + switch (density) { + case "comfortable": + return "md"; + default: + return "sm"; + } + }, [density]); + return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + "div", + { + ref: itemRef, + role: infiniteScrollEnabled ? "article" : void 0, + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + className: clsx_default( + "dataviews-view-activity__item", + density === "compact" && "is-compact", + density === "balanced" && "is-balanced", + density === "comfortable" && "is-comfortable" + ), + children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + Stack, + { + direction: "column", + gap: "xs", + align: "center", + className: "dataviews-view-activity__item-type", + children: renderedMediaField + } + ), + /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( + Stack, + { + direction: "column", + gap: verticalGap, + align: "flex-start", + className: "dataviews-view-activity__item-content", + children: [ + renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-activity__item-title", + children: renderedTitleField + } + ), + showDescription && descriptionField && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( + "div", + { + className: "dataviews-view-activity__item-field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components11.VisuallyHidden, + { + as: "span", + className: "dataviews-view-activity__item-field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) }), + !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry, + buttonVariant: "secondary" + } + ) + ] + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport && // At the same time, only show the menu if there are actions to show. + eligibleActions.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + ItemActions, + { + item, + actions: eligibleActions, + isCompact: true + } + ) }) + ] }) + } + ); +} +var activity_item_default = ActivityItem; + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-items.mjs +var import_react3 = __toESM(require_react(), 1); +function isDefined3(item) { + return !!item; +} +function ActivityItems(props) { + const { data, fields, getItemId, view } = props; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3); + return data.map((item, index) => { + return /* @__PURE__ */ (0, import_react3.createElement)( + activity_item_default, + { + ...props, + key: getItemId(item), + item, + mediaField, + titleField, + descriptionField, + otherFields, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + } + ); + }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); +function ViewActivity(props) { + const { empty, data, fields, isLoading, view, className } = props; + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const isInert = !isInfiniteScroll && !!isLoading; + const wrapperClassName = clsx_default("dataviews-view-activity", className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }); + const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : []; + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + Stack, + { + direction: "column", + gap: "sm", + className: wrapperClassName, + inert: isInert ? "true" : void 0, + children: groupedEntries.map( + ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + ActivityGroup, + { + groupName, + groupData, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + ActivityItems, + { + ...props, + data: groupData + } + ) + }, + groupName + ) + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + "div", + { + className: wrapperClassName, + role: view.infiniteScrollEnabled ? "feed" : void 0, + inert: isInert ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ActivityItems, { ...props }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components12.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_components15 = __toESM(require_components(), 1); +var import_i18n17 = __toESM(require_i18n(), 1); +var import_compose7 = __toESM(require_compose(), 1); +var import_element20 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_components14 = __toESM(require_components(), 1); +var import_data7 = __toESM(require_data(), 1); +var import_element18 = __toESM(require_element(), 1); +var import_i18n16 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-pagination/index.mjs +var import_components13 = __toESM(require_components(), 1); +var import_element17 = __toESM(require_element(), 1); +var import_i18n15 = __toESM(require_i18n(), 1); +var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); +function DataViewsPagination() { + const { + view, + onChangeView, + paginationInfo: { totalItems = 0, totalPages } + } = (0, import_element17.useContext)(dataviews_context_default); + if (!totalItems || !totalPages || view.infiniteScrollEnabled) { + return null; + } + const currentPage = view.page ?? 1; + const pageSelectOptions = Array.from(Array(totalPages)).map( + (_, i2) => { + const page = i2 + 1; + return { + value: page.toString(), + label: page.toString(), + "aria-label": currentPage === page ? (0, import_i18n15.sprintf)( + // translators: 1: current page number. 2: total number of pages. + (0, import_i18n15.__)("Page %1$d of %2$d"), + currentPage, + totalPages + ) : page.toString() + }; + } + ); + return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-pagination", + justify: "end", + align: "center", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + align: "center", + gap: "xs", + className: "dataviews-pagination__page-select", + children: (0, import_element17.createInterpolateElement)( + (0, import_i18n15.sprintf)( + // translators: 1: Current page number, 2: Total number of pages. + (0, import_i18n15._x)( + "
      Page
      %1$s
      of %2$d
      ", + "paging" + ), + "", + totalPages + ), + { + div: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { "aria-hidden": true }), + CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components13.SelectControl, + { + "aria-label": (0, import_i18n15.__)("Current page"), + value: currentPage.toString(), + options: pageSelectOptions, + onChange: (newValue) => { + onChangeView({ + ...view, + page: +newValue + }); + }, + size: "small", + variant: "minimal" + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Stack, { direction: "row", gap: "xs", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ + ...view, + page: currentPage - 1 + }), + disabled: currentPage === 1, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Previous page"), + icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ ...view, page: currentPage + 1 }), + disabled: currentPage >= totalPages, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Next page"), + icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ) + ] }) + ] + } + ); +} +var dataviews_pagination_default = (0, import_element17.memo)(DataViewsPagination); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); +function useIsMultiselectPicker(actions) { + return (0, import_element18.useMemo)(() => { + return actions?.every((action) => action.supportsBulk); + }, [actions]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/grid-items.mjs +var import_element19 = __toESM(require_element(), 1); +var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); +var GridItems = (0, import_element19.forwardRef)(({ className, previewSize, ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + "div", + { + ref, + className: clsx_default("dataviews-view-grid-items", className), + style: { + gridTemplateColumns: previewSize && `repeat(auto-fill, minmax(${previewSize}px, 1fr))` + }, + ...props + } + ); +}); + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); +var { Badge: Badge2 } = unlock(import_components15.privateApis); +function GridItem3({ + view, + multiselect, + selection, + onChangeSelection, + getItemId, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config, + posinset, + setsize +}) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const id = getItemId(item); + const isSelected2 = selection.includes(id); + const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(titleField.render, { item, field: titleField }) : null; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + import_components15.Composite.Item, + { + "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n17.__)("(no title)") : void 0, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Stack, { direction: "column", children, ...props }), + role: "option", + "aria-posinset": posinset, + "aria-setsize": setsize, + className: clsx_default("dataviews-view-picker-grid__card", { + "is-selected": isSelected2 + }), + "aria-selected": isSelected2, + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }), + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "row", + justify: "space-between", + className: "dataviews-view-picker-grid__title-actions", + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-picker-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Badge2, + { + className: "dataviews-view-picker-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-picker-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.Flex, + { + className: "dataviews-view-picker-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components15.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }), + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.FlexItem, + { + className: "dataviews-view-picker-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + }, + id + ); +} +function GridGroup({ + groupName, + groupField, + showLabel = true, + children +}) { + const headerId = (0, import_compose7.useInstanceId)( + GridGroup, + "dataviews-view-picker-grid-group__header" + ); + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + role: "group", + "aria-labelledby": headerId, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "h3", + { + className: "dataviews-view-picker-grid-group__header", + id: headerId, + children: showLabel ? (0, import_i18n17.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n17.__)("%1$s: %2$s"), + groupField.label, + groupName + ) : groupName + } + ), + children + ] + }, + groupName + ); +} +function ViewPickerGrid({ + actions, + data, + fields, + getItemId, + isLoading, + onChangeSelection, + selection, + view, + className, + empty +}) { + const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element20.useContext)(dataviews_context_default); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const hasData = !!data?.length; + const usedPreviewSize = view.layout?.previewSize; + const isMultiselect = useIsMultiselectPicker(actions); + const size = "900px"; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const currentPage = view?.page ?? 1; + const perPage = view?.perPage ?? 0; + const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.Composite, + { + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + "aria-label": itemListLabel, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "column", + gap: "lg", + children, + ...props + } + ), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridGroup, + { + groupName, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItems, + { + previewSize: usedPreviewSize, + style: { + gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax(${usedPreviewSize}px, 1fr))` + }, + "aria-busy": isLoading, + ref: resizeObserverRef, + children: groupItems.map((item) => { + const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset: posInSet, + setsize: setSize + }, + getItemId(item) + ); + }) + } + ) + }, + groupName + ) + ) + } + ), + // Render a single grid with all data. + hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItems, + { + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + previewSize: usedPreviewSize, + "aria-busy": isLoading, + ref: resizeObserverRef + } + ), + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + "aria-label": itemListLabel, + children: data.map((item, index) => { + let posinset = isInfiniteScroll ? index + 1 : void 0; + if (!isInfiniteScroll) { + posinset = (currentPage - 1) * perPage + index + 1; + } + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset, + setsize: setSize + }, + getItemId(item) + ); + }) + } + ), + // Render empty state. + !hasData && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !isLoading + }), + children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components15.Spinner, {}) }) : empty + } + ), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components15.Spinner, {}) }) + ] + }); +} +var picker_grid_default = ViewPickerGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/picker-table/index.mjs +var import_i18n18 = __toESM(require_i18n(), 1); +var import_components16 = __toESM(require_components(), 1); +var import_element21 = __toESM(require_element(), 1); +var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); +function TableColumnField2({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(field.render, { item, field }) }); +} +function TableRow2({ + item, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId, + onChangeSelection, + multiselect, + posinset +}) { + const { paginationInfo } = (0, import_element21.useContext)(dataviews_context_default); + const isSelected2 = selection.includes(id); + const [isHovered, setIsHovered] = (0, import_element21.useState)(false); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const handleMouseEnter = () => { + setIsHovered(true); + }; + const handleMouseLeave = () => { + setIsHovered(false); + }; + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + import_components16.Composite.Item, + { + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleMouseEnter, + onMouseLeave: handleMouseLeave, + children, + ...props + } + ), + "aria-selected": isSelected2, + "aria-setsize": paginationInfo.totalItems || void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : "option", + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "td", + { + className: "dataviews-view-table__checkbox-column", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ) }) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + column_primary_default, + { + item, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable: () => false + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + TableColumnField2, + { + fields, + item, + column, + align + } + ) + }, + column + ); + }) + ] + }, + id + ); +} +function ViewPickerTable({ + actions, + data, + fields, + getItemId, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + view, + className, + empty +}) { + const headerMenuRefs = (0, import_element21.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element21.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element21.useState)(); + const isMultiselect = useIsMultiselectPicker(actions) ?? false; + (0, import_element21.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element21.useId)(); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + "table", + { + className: clsx_default( + "dataviews-view-table", + "dataviews-view-picker-table", + className, + { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ) + } + ), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : "listbox", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + "tr", + { + className: "dataviews-view-table__row", + role: "presentation", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId + } + ) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: align + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: view.layout?.enableMoving ?? true + } + ) + }, + column + ); + }) + ] + } + ) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + import_components16.Composite, + { + virtualFocus: true, + orientation: "vertical", + render: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tbody", { role: "group" }), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "tr", + { + className: "dataviews-view-table__group-header-row", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1, + className: "dataviews-view-table__group-header-cell", + role: "presentation", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n18.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n18.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) + } + ), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + TableRow2, + { + item, + fields, + id: getItemId(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId, + onChangeSelection, + multiselect: isMultiselect + }, + getItemId(item) + )) + ] + }, + `group-${groupName}` + ) + ) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + import_components16.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tbody", { role: "presentation" }), + virtualFocus: true, + orientation: "vertical", + children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + TableRow2, + { + item, + fields, + id: getItemId(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId, + onChangeSelection, + multiselect: isMultiselect, + posinset: index + 1 + }, + getItemId(item) + )) + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !hasData && !isLoading + }), + id: tableNoticeId, + children: [ + !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components16.Spinner, {}) }) : empty), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components16.Spinner, {}) }) + ] + } + ) + ] }); +} +var picker_table_default = ViewPickerTable; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/preview-size-picker.mjs +var import_components17 = __toESM(require_components(), 1); +var import_i18n19 = __toESM(require_i18n(), 1); +var import_element22 = __toESM(require_element(), 1); +var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); +var imageSizes2 = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +function PreviewSizePicker() { + const context = (0, import_element22.useContext)(dataviews_context_default); + const view = context.view; + const breakValues = imageSizes2.filter((size) => { + return context.containerWidth >= size.breakpoint; + }); + const layoutPreviewSize = view.layout?.previewSize ?? 230; + const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0; + const marks = breakValues.map((size, index) => { + return { + value: index + }; + }); + return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)( + import_components17.RangeControl, + { + __next40pxDefaultSize: true, + showTooltip: false, + label: (0, import_i18n19.__)("Preview size"), + value: previewSizeToUse, + min: 0, + max: breakValues.length - 1, + withInputField: false, + onChange: (value = 0) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + previewSize: breakValues[value].value + } + }); + }, + step: 1, + marks + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/density-picker.mjs +var import_components18 = __toESM(require_components(), 1); +var import_i18n20 = __toESM(require_i18n(), 1); +var import_element23 = __toESM(require_element(), 1); +var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); +function DensityPicker() { + const context = (0, import_element23.useContext)(dataviews_context_default); + const view = context.view; + return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)( + import_components18.__experimentalToggleGroupControl, + { + size: "__unstable-large", + label: (0, import_i18n20.__)("Density"), + value: view.layout?.density || "balanced", + onChange: (value) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + density: value + } + }); + }, + isBlock: true, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "comfortable", + label: (0, import_i18n20._x)( + "Comfortable", + "Density option for DataView layout" + ) + }, + "comfortable" + ), + /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "balanced", + label: (0, import_i18n20._x)("Balanced", "Density option for DataView layout") + }, + "balanced" + ), + /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "compact", + label: (0, import_i18n20._x)("Compact", "Density option for DataView layout") + }, + "compact" + ) + ] + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var VIEW_LAYOUTS = [ + { + type: LAYOUT_TABLE, + label: (0, import_i18n21.__)("Table"), + component: table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_GRID, + label: (0, import_i18n21.__)("Grid"), + component: grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker + }, + { + type: LAYOUT_LIST, + label: (0, import_i18n21.__)("List"), + component: ViewList, + icon: (0, import_i18n21.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_ACTIVITY, + label: (0, import_i18n21.__)("Activity"), + component: ViewActivity, + icon: scheduled_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_PICKER_GRID, + label: (0, import_i18n21.__)("Grid"), + component: picker_grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker, + isPicker: true + }, + { + type: LAYOUT_PICKER_TABLE, + label: (0, import_i18n21.__)("Table"), + component: picker_table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker, + isPicker: true + } +]; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_element31 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_components21 = __toESM(require_components(), 1); +var import_i18n24 = __toESM(require_i18n(), 1); +var import_element28 = __toESM(require_element(), 1); + +// node_modules/@ariakit/core/esm/__chunks/XMCVU3LR.js +function noop(..._) { +} +function applyState(argument, currentValue) { + if (isUpdater(argument)) { + const value = isLazyValue(currentValue) ? currentValue() : currentValue; + return argument(value); + } + return argument; +} +function isUpdater(argument) { + return typeof argument === "function"; +} +function isLazyValue(value) { + return typeof value === "function"; +} +function hasOwnProperty(object, prop) { + if (typeof Object.hasOwn === "function") { + return Object.hasOwn(object, prop); + } + return Object.prototype.hasOwnProperty.call(object, prop); +} +function chain(...fns) { + return (...args) => { + for (const fn of fns) { + if (typeof fn === "function") { + fn(...args); + } + } + }; +} +function normalizeString(str) { + return str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); +} +function omit2(object, keys) { + const result = { ...object }; + for (const key of keys) { + if (hasOwnProperty(result, key)) { + delete result[key]; + } + } + return result; +} +function pick(object, paths) { + const result = {}; + for (const key of paths) { + if (hasOwnProperty(object, key)) { + result[key] = object[key]; + } + } + return result; +} +function identity(value) { + return value; +} +function invariant(condition, message2) { + if (condition) return; + if (typeof message2 !== "string") throw new Error("Invariant failed"); + throw new Error(message2); +} +function getKeys(obj) { + return Object.keys(obj); +} +function isFalsyBooleanCallback(booleanOrCallback, ...args) { + const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback; + if (result == null) return false; + return !result; +} +function disabledFromProps(props) { + return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true"; +} +function removeUndefinedValues(obj) { + const result = {}; + for (const key in obj) { + if (obj[key] !== void 0) { + result[key] = obj[key]; + } + } + return result; +} +function defaultValue(...values) { + for (const value of values) { + if (value !== void 0) return value; + } + return void 0; +} + +// node_modules/@ariakit/react-core/esm/__chunks/YXGXYGQX.js +var import_react4 = __toESM(require_react(), 1); +function setRef(ref, value) { + if (typeof ref === "function") { + ref(value); + } else if (ref) { + ref.current = value; + } +} +function isValidElementWithRef(element) { + if (!element) return false; + if (!(0, import_react4.isValidElement)(element)) return false; + if ("ref" in element.props) return true; + if ("ref" in element) return true; + return false; +} +function getRefProperty(element) { + if (!isValidElementWithRef(element)) return null; + const props = { ...element.props }; + return props.ref || element.ref; +} +function mergeProps2(base, overrides) { + const props = { ...base }; + for (const key in overrides) { + if (!hasOwnProperty(overrides, key)) continue; + if (key === "className") { + const prop = "className"; + props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop]; + continue; + } + if (key === "style") { + const prop = "style"; + props[prop] = base[prop] ? { ...base[prop], ...overrides[prop] } : overrides[prop]; + continue; + } + const overrideValue = overrides[key]; + if (typeof overrideValue === "function" && key.startsWith("on")) { + const baseValue = base[key]; + if (typeof baseValue === "function") { + props[key] = (...args) => { + overrideValue(...args); + baseValue(...args); + }; + continue; + } + } + props[key] = overrideValue; + } + return props; +} + +// node_modules/@ariakit/core/esm/__chunks/3DNM6L6E.js +var canUseDOM = checkIsBrowser(); +function checkIsBrowser() { + var _a; + return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement); +} +function getDocument(node) { + if (!node) return document; + if ("self" in node) return node.document; + return node.ownerDocument || document; +} +function getActiveElement(node, activeDescendant = false) { + var _a; + const { activeElement } = getDocument(node); + if (!(activeElement == null ? void 0 : activeElement.nodeName)) { + return null; + } + if (isFrame(activeElement) && ((_a = activeElement.contentDocument) == null ? void 0 : _a.body)) { + return getActiveElement( + activeElement.contentDocument.body, + activeDescendant + ); + } + if (activeDescendant) { + const id = activeElement.getAttribute("aria-activedescendant"); + if (id) { + const element = getDocument(activeElement).getElementById(id); + if (element) { + return element; + } + } + } + return activeElement; +} +function contains(parent, child) { + return parent === child || parent.contains(child); +} +function isFrame(element) { + return element.tagName === "IFRAME"; +} +function isButton(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "button") return true; + if (tagName === "input" && element.type) { + return buttonInputTypes.indexOf(element.type) !== -1; + } + return false; +} +var buttonInputTypes = [ + "button", + "color", + "file", + "image", + "reset", + "submit" +]; +function isVisible(element) { + if (typeof element.checkVisibility === "function") { + return element.checkVisibility(); + } + const htmlElement = element; + return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0; +} +function isTextField(element) { + try { + const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null; + const isTextArea = element.tagName === "TEXTAREA"; + return isTextInput || isTextArea || false; + } catch (_error) { + return false; + } +} +function isTextbox(element) { + return element.isContentEditable || isTextField(element); +} +function getTextboxValue(element) { + if (isTextField(element)) { + return element.value; + } + if (element.isContentEditable) { + const range = getDocument(element).createRange(); + range.selectNodeContents(element); + return range.toString(); + } + return ""; +} +function getTextboxSelection(element) { + let start = 0; + let end = 0; + if (isTextField(element)) { + start = element.selectionStart || 0; + end = element.selectionEnd || 0; + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) { + const range = selection.getRangeAt(0); + const nextRange = range.cloneRange(); + nextRange.selectNodeContents(element); + nextRange.setEnd(range.startContainer, range.startOffset); + start = nextRange.toString().length; + nextRange.setEnd(range.endContainer, range.endOffset); + end = nextRange.toString().length; + } + } + return { start, end }; +} +function getPopupRole(element, fallback) { + const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"]; + const role = element == null ? void 0 : element.getAttribute("role"); + if (role && allowedPopupRoles.indexOf(role) !== -1) { + return role; + } + return fallback; +} +function getScrollingElement(element) { + if (!element) return null; + const isScrollableOverflow = (overflow) => { + if (overflow === "auto") return true; + if (overflow === "scroll") return true; + return false; + }; + if (element.clientHeight && element.scrollHeight > element.clientHeight) { + const { overflowY } = getComputedStyle(element); + if (isScrollableOverflow(overflowY)) return element; + } else if (element.clientWidth && element.scrollWidth > element.clientWidth) { + const { overflowX } = getComputedStyle(element); + if (isScrollableOverflow(overflowX)) return element; + } + return getScrollingElement(element.parentElement) || document.scrollingElement || document.body; +} +function setSelectionRange(element, ...args) { + if (/text|search|password|tel|url/i.test(element.type)) { + element.setSelectionRange(...args); + } +} +function sortBasedOnDOMPosition(items, getElement) { + const pairs = items.map((item, index) => [index, item]); + let isOrderDifferent = false; + pairs.sort(([indexA, a2], [indexB, b2]) => { + const elementA = getElement(a2); + const elementB = getElement(b2); + if (elementA === elementB) return 0; + if (!elementA || !elementB) return 0; + if (isElementPreceding(elementA, elementB)) { + if (indexA > indexB) { + isOrderDifferent = true; + } + return -1; + } + if (indexA < indexB) { + isOrderDifferent = true; + } + return 1; + }); + if (isOrderDifferent) { + return pairs.map(([_, item]) => item); + } + return items; +} +function isElementPreceding(a2, b2) { + return Boolean( + b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING + ); +} + +// node_modules/@ariakit/core/esm/__chunks/SNHYQNEZ.js +function isTouchDevice() { + return canUseDOM && !!navigator.maxTouchPoints; +} +function isApple() { + if (!canUseDOM) return false; + return /mac|iphone|ipad|ipod/i.test(navigator.platform); +} +function isSafari() { + return canUseDOM && isApple() && /apple/i.test(navigator.vendor); +} +function isFirefox() { + return canUseDOM && /firefox\//i.test(navigator.userAgent); +} + +// node_modules/@ariakit/core/esm/utils/events.js +function isPortalEvent(event) { + return Boolean( + event.currentTarget && !contains(event.currentTarget, event.target) + ); +} +function isSelfTarget(event) { + return event.target === event.currentTarget; +} +function isOpeningInNewTab(event) { + const element = event.currentTarget; + if (!element) return false; + const isAppleDevice = isApple(); + if (isAppleDevice && !event.metaKey) return false; + if (!isAppleDevice && !event.ctrlKey) return false; + const tagName = element.tagName.toLowerCase(); + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function isDownloading(event) { + const element = event.currentTarget; + if (!element) return false; + const tagName = element.tagName.toLowerCase(); + if (!event.altKey) return false; + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function fireBlurEvent(element, eventInit) { + const event = new FocusEvent("blur", eventInit); + const defaultAllowed = element.dispatchEvent(event); + const bubbleInit = { ...eventInit, bubbles: true }; + element.dispatchEvent(new FocusEvent("focusout", bubbleInit)); + return defaultAllowed; +} +function fireKeyboardEvent(element, type, eventInit) { + const event = new KeyboardEvent(type, eventInit); + return element.dispatchEvent(event); +} +function fireClickEvent(element, eventInit) { + const event = new MouseEvent("click", eventInit); + return element.dispatchEvent(event); +} +function isFocusEventOutside(event, container) { + const containerElement = container || event.currentTarget; + const relatedTarget = event.relatedTarget; + return !relatedTarget || !contains(containerElement, relatedTarget); +} +function queueBeforeEvent(element, type, callback, timeout) { + const createTimer = (callback2) => { + if (timeout) { + const timerId2 = setTimeout(callback2, timeout); + return () => clearTimeout(timerId2); + } + const timerId = requestAnimationFrame(callback2); + return () => cancelAnimationFrame(timerId); + }; + const cancelTimer = createTimer(() => { + element.removeEventListener(type, callSync, true); + callback(); + }); + const callSync = () => { + cancelTimer(); + callback(); + }; + element.addEventListener(type, callSync, { once: true, capture: true }); + return cancelTimer; +} +function addGlobalEventListener(type, listener, options, scope = window) { + const children = []; + try { + scope.document.addEventListener(type, listener, options); + for (const frame of Array.from(scope.frames)) { + children.push(addGlobalEventListener(type, listener, options, frame)); + } + } catch (e2) { + } + const removeEventListener = () => { + try { + scope.document.removeEventListener(type, listener, options); + } catch (e2) { + } + for (const remove of children) { + remove(); + } + }; + return removeEventListener; +} + +// node_modules/@ariakit/react-core/esm/__chunks/KPHZR4MB.js +var React6 = __toESM(require_react(), 1); +var import_react5 = __toESM(require_react(), 1); +var _React = { ...React6 }; +var useReactId = _React.useId; +var useReactDeferredValue = _React.useDeferredValue; +var useReactInsertionEffect = _React.useInsertionEffect; +var useSafeLayoutEffect = canUseDOM ? import_react5.useLayoutEffect : import_react5.useEffect; +function useInitialValue(value) { + const [initialValue] = (0, import_react5.useState)(value); + return initialValue; +} +function useLiveRef(value) { + const ref = (0, import_react5.useRef)(value); + useSafeLayoutEffect(() => { + ref.current = value; + }); + return ref; +} +function useEvent(callback) { + const ref = (0, import_react5.useRef)(() => { + throw new Error("Cannot call an event handler while rendering."); + }); + if (useReactInsertionEffect) { + useReactInsertionEffect(() => { + ref.current = callback; + }); + } else { + ref.current = callback; + } + return (0, import_react5.useCallback)((...args) => { + var _a; + return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args); + }, []); +} +function useTransactionState(callback) { + const [state, setState] = (0, import_react5.useState)(null); + useSafeLayoutEffect(() => { + if (state == null) return; + if (!callback) return; + let prevState = null; + callback((prev) => { + prevState = prev; + return state; + }); + return () => { + callback(prevState); + }; + }, [state, callback]); + return [state, setState]; +} +function useMergeRefs(...refs) { + return (0, import_react5.useMemo)(() => { + if (!refs.some(Boolean)) return; + return (value) => { + for (const ref of refs) { + setRef(ref, value); + } + }; + }, refs); +} +function useId3(defaultId) { + if (useReactId) { + const reactId = useReactId(); + if (defaultId) return defaultId; + return reactId; + } + const [id, setId] = (0, import_react5.useState)(defaultId); + useSafeLayoutEffect(() => { + if (defaultId || id) return; + const random = Math.random().toString(36).slice(2, 8); + setId(`id-${random}`); + }, [defaultId, id]); + return defaultId || id; +} +function useTagName(refOrElement, type) { + const stringOrUndefined = (type2) => { + if (typeof type2 !== "string") return; + return type2; + }; + const [tagName, setTagName] = (0, import_react5.useState)(() => stringOrUndefined(type)); + useSafeLayoutEffect(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type)); + }, [refOrElement, type]); + return tagName; +} +function useAttribute(refOrElement, attributeName, defaultValue2) { + const initialValue = useInitialValue(defaultValue2); + const [attribute, setAttribute] = (0, import_react5.useState)(initialValue); + (0, import_react5.useEffect)(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + if (!element) return; + const callback = () => { + const value = element.getAttribute(attributeName); + setAttribute(value == null ? initialValue : value); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { attributeFilter: [attributeName] }); + callback(); + return () => observer.disconnect(); + }, [refOrElement, attributeName, initialValue]); + return attribute; +} +function useUpdateEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + (0, import_react5.useEffect)(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + (0, import_react5.useEffect)( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useUpdateLayoutEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + useSafeLayoutEffect(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + useSafeLayoutEffect( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useForceUpdate() { + return (0, import_react5.useReducer)(() => [], []); +} +function useBooleanEvent(booleanOrCallback) { + return useEvent( + typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback + ); +} +function useWrapElement(props, callback, deps = []) { + const wrapElement = (0, import_react5.useCallback)( + (element) => { + if (props.wrapElement) { + element = props.wrapElement(element); + } + return callback(element); + }, + [...deps, props.wrapElement] + ); + return { ...props, wrapElement }; +} +function useMetadataProps(props, key, value) { + const parent = props.onLoadedMetadataCapture; + const onLoadedMetadataCapture = (0, import_react5.useMemo)(() => { + return Object.assign(() => { + }, { ...parent, [key]: value }); + }, [parent, key, value]); + return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }]; +} +var hasInstalledGlobalEventListeners = false; +function useIsMouseMoving() { + (0, import_react5.useEffect)(() => { + if (hasInstalledGlobalEventListeners) return; + addGlobalEventListener("mousemove", setMouseMoving, true); + addGlobalEventListener("mousedown", resetMouseMoving, true); + addGlobalEventListener("mouseup", resetMouseMoving, true); + addGlobalEventListener("keydown", resetMouseMoving, true); + addGlobalEventListener("scroll", resetMouseMoving, true); + hasInstalledGlobalEventListeners = true; + }, []); + const isMouseMoving = useEvent(() => mouseMoving); + return isMouseMoving; +} +var mouseMoving = false; +var previousScreenX = 0; +var previousScreenY = 0; +function hasMouseMovement(event) { + const movementX = event.movementX || event.screenX - previousScreenX; + const movementY = event.movementY || event.screenY - previousScreenY; + previousScreenX = event.screenX; + previousScreenY = event.screenY; + return movementX || movementY || false; +} +function setMouseMoving(event) { + if (!hasMouseMovement(event)) return; + mouseMoving = true; +} +function resetMouseMoving() { + mouseMoving = false; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GWSL6KNJ.js +var React7 = __toESM(require_react(), 1); +var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); +function forwardRef22(render4) { + const Role = React7.forwardRef( + // @ts-ignore Incompatible with React 19 types. Ignore for now. + (props, ref) => render4({ ...props, ref }) + ); + Role.displayName = render4.displayName || render4.name; + return Role; +} +function memo22(Component, propsAreEqual) { + return React7.memo(Component, propsAreEqual); +} +function createElement3(Type, props) { + const { wrapElement, render: render4, ...rest } = props; + const mergedRef = useMergeRefs(props.ref, getRefProperty(render4)); + let element; + if (React7.isValidElement(render4)) { + const renderProps = { + // @ts-ignore Incompatible with React 19 types. Ignore for now. + ...render4.props, + ref: mergedRef + }; + element = React7.cloneElement(render4, mergeProps2(rest, renderProps)); + } else if (render4) { + element = render4(rest); + } else { + element = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Type, { ...rest }); + } + if (wrapElement) { + return wrapElement(element); + } + return element; +} +function createHook(useProps) { + const useRole = (props = {}) => { + return useProps(props); + }; + useRole.displayName = useProps.name; + return useRole; +} +function createStoreContext(providers = [], scopedProviders = []) { + const context = React7.createContext(void 0); + const scopedContext = React7.createContext(void 0); + const useContext28 = () => React7.useContext(context); + const useScopedContext = (onlyScoped = false) => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (onlyScoped) return scoped; + return scoped || store; + }; + const useProviderContext = () => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (scoped && scoped === store) return; + return store; + }; + const ContextProvider = (props) => { + return providers.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(context.Provider, { ...props }) + ); + }; + const ScopedContextProvider = (props) => { + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ContextProvider, { ...props, children: scopedProviders.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(scopedContext.Provider, { ...props }) + ) }); + }; + return { + context, + scopedContext, + useContext: useContext28, + useScopedContext, + useProviderContext, + ContextProvider, + ScopedContextProvider + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SMPCIMZM.js +var ctx = createStoreContext(); +var useCollectionContext = ctx.useContext; +var useCollectionScopedContext = ctx.useScopedContext; +var useCollectionProviderContext = ctx.useProviderContext; +var CollectionContextProvider = ctx.ContextProvider; +var CollectionScopedContextProvider = ctx.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/AVVXDJMZ.js +var import_react6 = __toESM(require_react(), 1); +var ctx2 = createStoreContext( + [CollectionContextProvider], + [CollectionScopedContextProvider] +); +var useCompositeContext = ctx2.useContext; +var useCompositeScopedContext = ctx2.useScopedContext; +var useCompositeProviderContext = ctx2.useProviderContext; +var CompositeContextProvider = ctx2.ContextProvider; +var CompositeScopedContextProvider = ctx2.ScopedContextProvider; +var CompositeItemContext = (0, import_react6.createContext)( + void 0 +); +var CompositeRowContext = (0, import_react6.createContext)( + void 0 +); + +// node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js +function findFirstEnabledItem(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItem(store, id) { + if (!id) return null; + return store.item(id) || null; +} +function groupItemsByRows(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function selectTextField(element, collapseToEnd = false) { + if (isTextField(element)) { + element.setSelectionRange( + collapseToEnd ? element.value.length : 0, + element.value.length + ); + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + selection == null ? void 0 : selection.selectAllChildren(element); + if (collapseToEnd) { + selection == null ? void 0 : selection.collapseToEnd(); + } + } +} +var FOCUS_SILENTLY = /* @__PURE__ */ Symbol("FOCUS_SILENTLY"); +function focusSilently(element) { + element[FOCUS_SILENTLY] = true; + element.focus({ preventScroll: true }); +} +function silentlyFocused(element) { + const isSilentlyFocused = element[FOCUS_SILENTLY]; + delete element[FOCUS_SILENTLY]; + return isSilentlyFocused; +} +function isItem(store, element, exclude) { + if (!element) return false; + if (element === exclude) return false; + const item = store.item(element.id); + if (!item) return false; + if (exclude && item.element === exclude) return false; + return true; +} + +// node_modules/@ariakit/react-core/esm/__chunks/Z2O3VLAQ.js +var import_react7 = __toESM(require_react(), 1); +var TagName = "div"; +var useCollectionItem = createHook( + function useCollectionItem2({ + store, + shouldRegisterItem = true, + getItem = identity, + // @ts-expect-error This prop may come from a collection renderer. + element, + ...props + }) { + const context = useCollectionContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react7.useRef)(element); + (0, import_react7.useEffect)(() => { + const element2 = ref.current; + if (!id) return; + if (!element2) return; + if (!shouldRegisterItem) return; + const item = getItem({ id, element: element2 }); + return store == null ? void 0 : store.renderItem(item); + }, [id, shouldRegisterItem, getItem, store]); + props = { + ...props, + ref: useMergeRefs(ref, props.ref) + }; + return removeUndefinedValues(props); + } +); +var CollectionItem = forwardRef22(function CollectionItem2(props) { + const htmlProps = useCollectionItem(props); + return createElement3(TagName, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js +var import_react8 = __toESM(require_react(), 1); +var FocusableContext = (0, import_react8.createContext)(true); + +// node_modules/@ariakit/core/esm/utils/focus.js +var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])"; +function isFocusable(element) { + if (!element.matches(selector)) return false; + if (!isVisible(element)) return false; + if (element.closest("[inert]")) return false; + return true; +} +function getClosestFocusable(element) { + while (element && !isFocusable(element)) { + element = element.closest(selector); + } + return element || null; +} +function hasFocus(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (activeElement === element) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + return activeDescendant === element.id; +} +function hasFocusWithin(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (contains(element, activeElement)) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + if (!("id" in element)) return false; + if (activeDescendant === element.id) return true; + return !!element.querySelector(`#${CSS.escape(activeDescendant)}`); +} +function focusIfNeeded(element) { + if (!hasFocusWithin(element) && isFocusable(element)) { + element.focus(); + } +} +function focusIntoView(element, options) { + if (!("scrollIntoView" in element)) { + element.focus(); + } else { + element.focus({ preventScroll: true }); + element.scrollIntoView({ block: "nearest", inline: "nearest", ...options }); + } +} + +// node_modules/@ariakit/react-core/esm/__chunks/U6HHPQDW.js +var import_react9 = __toESM(require_react(), 1); +var TagName2 = "div"; +var isSafariBrowser = isSafari(); +var alwaysFocusVisibleInputTypes = [ + "text", + "search", + "url", + "tel", + "email", + "password", + "number", + "date", + "month", + "week", + "time", + "datetime", + "datetime-local" +]; +var safariFocusAncestorSymbol = /* @__PURE__ */ Symbol("safariFocusAncestor"); +function markSafariFocusAncestor(element, value) { + if (!element) return; + element[safariFocusAncestorSymbol] = value; +} +function isAlwaysFocusVisible(element) { + const { tagName, readOnly, type } = element; + if (tagName === "TEXTAREA" && !readOnly) return true; + if (tagName === "SELECT" && !readOnly) return true; + if (tagName === "INPUT" && !readOnly) { + return alwaysFocusVisibleInputTypes.includes(type); + } + if (element.isContentEditable) return true; + const role = element.getAttribute("role"); + if (role === "combobox" && element.dataset.name) { + return true; + } + return false; +} +function getLabels(element) { + if ("labels" in element) { + return element.labels; + } + return null; +} +function isNativeCheckboxOrRadio(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "input" && element.type) { + return element.type === "radio" || element.type === "checkbox"; + } + return false; +} +function isNativeTabbable(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a"; +} +function supportsDisabledAttribute(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea"; +} +function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) { + if (!focusable) { + return tabIndexProp; + } + if (trulyDisabled) { + if (nativeTabbable && !supportsDisabled) { + return -1; + } + return; + } + if (nativeTabbable) { + return tabIndexProp; + } + return tabIndexProp || 0; +} +function useDisableEvent(onEvent, disabled) { + return useEvent((event) => { + onEvent == null ? void 0 : onEvent(event); + if (event.defaultPrevented) return; + if (disabled) { + event.stopPropagation(); + event.preventDefault(); + } + }); +} +var hasInstalledGlobalEventListeners2 = false; +var isKeyboardModality = true; +function onGlobalMouseDown(event) { + const target = event.target; + if (target && "hasAttribute" in target) { + if (!target.hasAttribute("data-focus-visible")) { + isKeyboardModality = false; + } + } +} +function onGlobalKeyDown(event) { + if (event.metaKey) return; + if (event.ctrlKey) return; + if (event.altKey) return; + isKeyboardModality = true; +} +var useFocusable = createHook( + function useFocusable2({ + focusable = true, + accessibleWhenDisabled, + autoFocus, + onFocusVisible, + ...props + }) { + const ref = (0, import_react9.useRef)(null); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (hasInstalledGlobalEventListeners2) return; + addGlobalEventListener("mousedown", onGlobalMouseDown, true); + addGlobalEventListener("keydown", onGlobalKeyDown, true); + hasInstalledGlobalEventListeners2 = true; + }, [focusable]); + if (isSafariBrowser) { + (0, import_react9.useEffect)(() => { + if (!focusable) return; + const element = ref.current; + if (!element) return; + if (!isNativeCheckboxOrRadio(element)) return; + const labels = getLabels(element); + if (!labels) return; + const onMouseUp = () => queueMicrotask(() => element.focus()); + for (const label of labels) { + label.addEventListener("mouseup", onMouseUp); + } + return () => { + for (const label of labels) { + label.removeEventListener("mouseup", onMouseUp); + } + }; + }, [focusable]); + } + const disabled = focusable && disabledFromProps(props); + const trulyDisabled = !!disabled && !accessibleWhenDisabled; + const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (trulyDisabled && focusVisible) { + setFocusVisible(false); + } + }, [focusable, trulyDisabled, focusVisible]); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (!focusVisible) return; + const element = ref.current; + if (!element) return; + if (typeof IntersectionObserver === "undefined") return; + const observer = new IntersectionObserver(() => { + if (!isFocusable(element)) { + setFocusVisible(false); + } + }); + observer.observe(element); + return () => observer.disconnect(); + }, [focusable, focusVisible]); + const onKeyPressCapture = useDisableEvent( + props.onKeyPressCapture, + disabled + ); + const onMouseDownCapture = useDisableEvent( + props.onMouseDownCapture, + disabled + ); + const onClickCapture = useDisableEvent(props.onClickCapture, disabled); + const onMouseDownProp = props.onMouseDown; + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + const element = event.currentTarget; + if (!isSafariBrowser) return; + if (isPortalEvent(event)) return; + if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return; + let receivedFocus = false; + const onFocus = () => { + receivedFocus = true; + }; + const options = { capture: true, once: true }; + element.addEventListener("focusin", onFocus, options); + const focusableContainer = getClosestFocusable(element.parentElement); + markSafariFocusAncestor(focusableContainer, true); + queueBeforeEvent(element, "mouseup", () => { + element.removeEventListener("focusin", onFocus, true); + markSafariFocusAncestor(focusableContainer, false); + if (receivedFocus) return; + focusIfNeeded(element); + }); + }); + const handleFocusVisible = (event, currentTarget) => { + if (currentTarget) { + event.currentTarget = currentTarget; + } + if (!focusable) return; + const element = event.currentTarget; + if (!element) return; + if (!hasFocus(element)) return; + onFocusVisible == null ? void 0 : onFocusVisible(event); + if (event.defaultPrevented) return; + element.dataset.focusVisible = "true"; + setFocusVisible(true); + }; + const onKeyDownCaptureProp = props.onKeyDownCapture; + const onKeyDownCapture = useEvent((event) => { + onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (focusVisible) return; + if (event.metaKey) return; + if (event.altKey) return; + if (event.ctrlKey) return; + if (!isSelfTarget(event)) return; + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + queueBeforeEvent(element, "focusout", applyFocusVisible); + }); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (!isSelfTarget(event)) { + setFocusVisible(false); + return; + } + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + if (isKeyboardModality || isAlwaysFocusVisible(event.target)) { + queueBeforeEvent(event.target, "focusout", applyFocusVisible); + } else { + setFocusVisible(false); + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + onBlurProp == null ? void 0 : onBlurProp(event); + if (!focusable) return; + if (!isFocusEventOutside(event)) return; + event.currentTarget.removeAttribute("data-focus-visible"); + setFocusVisible(false); + }); + const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext); + const autoFocusRef = useEvent((element) => { + if (!focusable) return; + if (!autoFocus) return; + if (!element) return; + if (!autoFocusOnShow) return; + queueMicrotask(() => { + if (hasFocus(element)) return; + if (!isFocusable(element)) return; + element.focus(); + }); + }); + const tagName = useTagName(ref); + const nativeTabbable = focusable && isNativeTabbable(tagName); + const supportsDisabled = focusable && supportsDisabledAttribute(tagName); + const styleProp = props.style; + const style = (0, import_react9.useMemo)(() => { + if (trulyDisabled) { + return { pointerEvents: "none", ...styleProp }; + } + return styleProp; + }, [trulyDisabled, styleProp]); + props = { + "data-focus-visible": focusable && focusVisible || void 0, + "data-autofocus": autoFocus || void 0, + "aria-disabled": disabled || void 0, + ...props, + ref: useMergeRefs(ref, autoFocusRef, props.ref), + style, + tabIndex: getTabIndex( + focusable, + trulyDisabled, + nativeTabbable, + supportsDisabled, + props.tabIndex + ), + disabled: supportsDisabled && trulyDisabled ? true : void 0, + // TODO: Test Focusable contentEditable. + contentEditable: disabled ? void 0 : props.contentEditable, + onKeyPressCapture, + onClickCapture, + onMouseDownCapture, + onMouseDown, + onKeyDownCapture, + onFocusCapture, + onBlur + }; + return removeUndefinedValues(props); + } +); +var Focusable = forwardRef22(function Focusable2(props) { + const htmlProps = useFocusable(props); + return createElement3(TagName2, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/PZ3OL7I2.js +var import_react10 = __toESM(require_react(), 1); +var TagName3 = "button"; +function isNativeClick(event) { + if (!event.isTrusted) return false; + const element = event.currentTarget; + if (event.key === "Enter") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A"; + } + if (event.key === " ") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT"; + } + return false; +} +var symbol = /* @__PURE__ */ Symbol("command"); +var useCommand = createHook( + function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { + const ref = (0, import_react10.useRef)(null); + const [isNativeButton, setIsNativeButton] = (0, import_react10.useState)(false); + (0, import_react10.useEffect)(() => { + if (!ref.current) return; + setIsNativeButton(isButton(ref.current)); + }, []); + const [active, setActive] = (0, import_react10.useState)(false); + const activeRef = (0, import_react10.useRef)(false); + const disabled = disabledFromProps(props); + const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + const element = event.currentTarget; + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (!isSelfTarget(event)) return; + if (isTextField(element)) return; + if (element.isContentEditable) return; + const isEnter = clickOnEnter && event.key === "Enter"; + const isSpace = clickOnSpace && event.key === " "; + const shouldPreventEnter = event.key === "Enter" && !clickOnEnter; + const shouldPreventSpace = event.key === " " && !clickOnSpace; + if (shouldPreventEnter || shouldPreventSpace) { + event.preventDefault(); + return; + } + if (isEnter || isSpace) { + const nativeClick = isNativeClick(event); + if (isEnter) { + if (!nativeClick) { + event.preventDefault(); + const { view, ...eventInit } = event; + const click = () => fireClickEvent(element, eventInit); + if (isFirefox()) { + queueBeforeEvent(element, "keyup", click); + } else { + queueMicrotask(click); + } + } + } else if (isSpace) { + activeRef.current = true; + if (!nativeClick) { + event.preventDefault(); + setActive(true); + } + } + } + }); + const onKeyUpProp = props.onKeyUp; + const onKeyUp = useEvent((event) => { + onKeyUpProp == null ? void 0 : onKeyUpProp(event); + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (event.metaKey) return; + const isSpace = clickOnSpace && event.key === " "; + if (activeRef.current && isSpace) { + activeRef.current = false; + if (!isNativeClick(event)) { + event.preventDefault(); + setActive(false); + const element = event.currentTarget; + const { view, ...eventInit } = event; + queueMicrotask(() => fireClickEvent(element, eventInit)); + } + } + }); + props = { + "data-active": active || void 0, + type: isNativeButton ? "button" : void 0, + ...metadataProps, + ...props, + ref: useMergeRefs(ref, props.ref), + onKeyDown, + onKeyUp + }; + props = useFocusable(props); + return props; + } +); +var Command = forwardRef22(function Command2(props) { + const htmlProps = useCommand(props); + return createElement3(TagName3, htmlProps); +}); + +// node_modules/@ariakit/core/esm/__chunks/SXKM4CGU.js +function getInternal(store, key) { + const internals = store.__unstableInternals; + invariant(internals, "Invalid store"); + return internals[key]; +} +function createStore(initialState, ...stores) { + let state = initialState; + let prevStateBatch = state; + let lastUpdate = /* @__PURE__ */ Symbol(); + let destroy = noop; + const instances = /* @__PURE__ */ new Set(); + const updatedKeys = /* @__PURE__ */ new Set(); + const setups = /* @__PURE__ */ new Set(); + const listeners = /* @__PURE__ */ new Set(); + const batchListeners = /* @__PURE__ */ new Set(); + const disposables = /* @__PURE__ */ new WeakMap(); + const listenerKeys = /* @__PURE__ */ new WeakMap(); + const storeSetup = (callback) => { + setups.add(callback); + return () => setups.delete(callback); + }; + const storeInit = () => { + const initialized = instances.size; + const instance = /* @__PURE__ */ Symbol(); + instances.add(instance); + const maybeDestroy = () => { + instances.delete(instance); + if (instances.size) return; + destroy(); + }; + if (initialized) return maybeDestroy; + const desyncs = getKeys(state).map( + (key) => chain( + ...stores.map((store) => { + var _a; + const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store); + if (!storeState) return; + if (!hasOwnProperty(storeState, key)) return; + return sync(store, [key], (state2) => { + setState( + key, + state2[key], + // @ts-expect-error - Not public API. This is just to prevent + // infinite loops. + true + ); + }); + }) + ) + ); + const teardowns = []; + for (const setup2 of setups) { + teardowns.push(setup2()); + } + const cleanups = stores.map(init); + destroy = chain(...desyncs, ...teardowns, ...cleanups); + return maybeDestroy; + }; + const sub = (keys, listener, set = listeners) => { + set.add(listener); + listenerKeys.set(listener, keys); + return () => { + var _a; + (_a = disposables.get(listener)) == null ? void 0 : _a(); + disposables.delete(listener); + listenerKeys.delete(listener); + set.delete(listener); + }; + }; + const storeSubscribe = (keys, listener) => sub(keys, listener); + const storeSync = (keys, listener) => { + disposables.set(listener, listener(state, state)); + return sub(keys, listener); + }; + const storeBatch = (keys, listener) => { + disposables.set(listener, listener(state, prevStateBatch)); + return sub(keys, listener, batchListeners); + }; + const storePick = (keys) => createStore(pick(state, keys), finalStore); + const storeOmit = (keys) => createStore(omit2(state, keys), finalStore); + const getState = () => state; + const setState = (key, value, fromStores = false) => { + var _a; + if (!hasOwnProperty(state, key)) return; + const nextValue = applyState(value, state[key]); + if (nextValue === state[key]) return; + if (!fromStores) { + for (const store of stores) { + (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue); + } + } + const prevState = state; + state = { ...state, [key]: nextValue }; + const thisUpdate = /* @__PURE__ */ Symbol(); + lastUpdate = thisUpdate; + updatedKeys.add(key); + const run = (listener, prev, uKeys) => { + var _a2; + const keys = listenerKeys.get(listener); + const updated = (k) => uKeys ? uKeys.has(k) : k === key; + if (!keys || keys.some(updated)) { + (_a2 = disposables.get(listener)) == null ? void 0 : _a2(); + disposables.set(listener, listener(state, prev)); + } + }; + for (const listener of listeners) { + run(listener, prevState); + } + queueMicrotask(() => { + if (lastUpdate !== thisUpdate) return; + const snapshot = state; + for (const listener of batchListeners) { + run(listener, prevStateBatch, updatedKeys); + } + prevStateBatch = snapshot; + updatedKeys.clear(); + }); + }; + const finalStore = { + getState, + setState, + __unstableInternals: { + setup: storeSetup, + init: storeInit, + subscribe: storeSubscribe, + sync: storeSync, + batch: storeBatch, + pick: storePick, + omit: storeOmit + } + }; + return finalStore; +} +function setup(store, ...args) { + if (!store) return; + return getInternal(store, "setup")(...args); +} +function init(store, ...args) { + if (!store) return; + return getInternal(store, "init")(...args); +} +function subscribe(store, ...args) { + if (!store) return; + return getInternal(store, "subscribe")(...args); +} +function sync(store, ...args) { + if (!store) return; + return getInternal(store, "sync")(...args); +} +function batch(store, ...args) { + if (!store) return; + return getInternal(store, "batch")(...args); +} +function omit22(store, ...args) { + if (!store) return; + return getInternal(store, "omit")(...args); +} +function pick2(store, ...args) { + if (!store) return; + return getInternal(store, "pick")(...args); +} +function mergeStore(...stores) { + var _a; + const initialState = {}; + for (const store2 of stores) { + const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2); + if (nextState) { + Object.assign(initialState, nextState); + } + } + const store = createStore(initialState, ...stores); + return Object.assign({}, ...stores, store); +} +function throwOnConflictingProps(props, store) { + if (false) return; + if (!store) return; + const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => { + var _a; + const stateKey = key.replace("default", ""); + return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}${stateKey.slice(1)}`; + }); + if (!defaultKeys.length) return; + const storeState = store.getState(); + const conflictingProps = defaultKeys.filter( + (key) => hasOwnProperty(storeState, key) + ); + if (!conflictingProps.length) return; + throw new Error( + `Passing a store prop in conjunction with a default state is not supported. + +const store = useSelectStore(); + + ^ ^ + +Instead, pass the default state to the topmost store: + +const store = useSelectStore({ defaultValue: "Apple" }); + + +See https://github.com/ariakit/ariakit/pull/2745 for more details. + +If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit +` + ); +} + +// node_modules/@ariakit/react-core/esm/__chunks/Q5W46E73.js +var React8 = __toESM(require_react(), 1); +var import_shim = __toESM(require_shim(), 1); +var { useSyncExternalStore } = import_shim.default; +var noopSubscribe = () => () => { +}; +function useStoreState(store, keyOrSelector = identity) { + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const key = typeof keyOrSelector === "string" ? keyOrSelector : null; + const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null; + const state = store == null ? void 0 : store.getState(); + if (selector2) return selector2(state); + if (!state) return; + if (!key) return; + if (!hasOwnProperty(state, key)) return; + return state[key]; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreStateObject(store, object) { + const objRef = React8.useRef( + {} + ); + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const state = store == null ? void 0 : store.getState(); + let updated = false; + const obj = objRef.current; + for (const prop in object) { + const keyOrSelector = object[prop]; + if (typeof keyOrSelector === "function") { + const value = keyOrSelector(state); + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + if (typeof keyOrSelector === "string") { + if (!state) continue; + if (!hasOwnProperty(state, keyOrSelector)) continue; + const value = state[keyOrSelector]; + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + } + if (updated) { + objRef.current = { ...obj }; + } + return objRef.current; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreProps(store, props, key, setKey) { + const value = hasOwnProperty(props, key) ? props[key] : void 0; + const setValue = setKey ? props[setKey] : void 0; + const propsRef = useLiveRef({ value, setValue }); + useSafeLayoutEffect(() => { + return sync(store, [key], (state, prev) => { + const { value: value2, setValue: setValue2 } = propsRef.current; + if (!setValue2) return; + if (state[key] === prev[key]) return; + if (state[key] === value2) return; + setValue2(state[key]); + }); + }, [store, key]); + useSafeLayoutEffect(() => { + if (value === void 0) return; + store.setState(key, value); + return batch(store, [key], () => { + if (value === void 0) return; + store.setState(key, value); + }); + }); +} +function useStore(createStore2, props) { + const [store, setStore] = React8.useState(() => createStore2(props)); + useSafeLayoutEffect(() => init(store), [store]); + const useState25 = React8.useCallback( + (keyOrSelector) => useStoreState(store, keyOrSelector), + [store] + ); + const memoizedStore = React8.useMemo( + () => ({ ...store, useState: useState25 }), + [store, useState25] + ); + const updateStore = useEvent(() => { + setStore((store2) => createStore2({ ...props, ...store2.getState() })); + }); + return [memoizedStore, updateStore]; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WZWDIE3S.js +var import_react11 = __toESM(require_react(), 1); +var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); +var TagName4 = "button"; +function isEditableElement(element) { + if (isTextbox(element)) return true; + return element.tagName === "INPUT" && !isButton(element); +} +function getNextPageOffset(scrollingElement, pageUp = false) { + const height = scrollingElement.clientHeight; + const { top } = scrollingElement.getBoundingClientRect(); + const pageSize = Math.max(height * 0.875, height - 40) * 1.5; + const pageOffset = pageUp ? height - pageSize + top : pageSize + top; + if (scrollingElement.tagName === "HTML") { + return pageOffset + scrollingElement.scrollTop; + } + return pageOffset; +} +function getItemOffset(itemElement, pageUp = false) { + const { top } = itemElement.getBoundingClientRect(); + if (pageUp) { + return top + itemElement.clientHeight; + } + return top; +} +function findNextPageItemId(element, store, next, pageUp = false) { + var _a; + if (!store) return; + if (!next) return; + const { renderedItems } = store.getState(); + const scrollingElement = getScrollingElement(element); + if (!scrollingElement) return; + const nextPageOffset = getNextPageOffset(scrollingElement, pageUp); + let id; + let prevDifference; + for (let i2 = 0; i2 < renderedItems.length; i2 += 1) { + const previousId = id; + id = next(i2); + if (!id) break; + if (id === previousId) continue; + const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element; + if (!itemElement) continue; + const itemOffset = getItemOffset(itemElement, pageUp); + const difference = itemOffset - nextPageOffset; + const absDifference = Math.abs(difference); + if (pageUp && difference <= 0 || !pageUp && difference >= 0) { + if (prevDifference !== void 0 && prevDifference < absDifference) { + id = previousId; + } + break; + } + prevDifference = absDifference; + } + return id; +} +function targetIsAnotherItem(event, store) { + if (isSelfTarget(event)) return false; + return isItem(store, event.target); +} +var useCompositeItem = createHook( + function useCompositeItem2({ + store, + rowId: rowIdProp, + preventScrollOnKeyDown = false, + moveOnKeyPress = true, + tabbable = false, + getItem: getItemProp, + "aria-setsize": ariaSetSizeProp, + "aria-posinset": ariaPosInSetProp, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react11.useRef)(null); + const row = (0, import_react11.useContext)(CompositeRowContext); + const disabled = disabledFromProps(props); + const trulyDisabled = disabled && !props.accessibleWhenDisabled; + const { + rowId, + baseElement, + isActiveItem, + ariaSetSize, + ariaPosInSet, + isTabbable + } = useStoreStateObject(store, { + rowId(state) { + if (rowIdProp) return rowIdProp; + if (!state) return; + if (!(row == null ? void 0 : row.baseElement)) return; + if (row.baseElement !== state.baseElement) return; + return row.id; + }, + baseElement(state) { + return (state == null ? void 0 : state.baseElement) || void 0; + }, + isActiveItem(state) { + return !!state && state.activeId === id; + }, + ariaSetSize(state) { + if (ariaSetSizeProp != null) return ariaSetSizeProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaSetSize)) return; + if (row.baseElement !== state.baseElement) return; + return row.ariaSetSize; + }, + ariaPosInSet(state) { + if (ariaPosInSetProp != null) return ariaPosInSetProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaPosInSet)) return; + if (row.baseElement !== state.baseElement) return; + const itemsInRow = state.renderedItems.filter( + (item) => item.rowId === rowId + ); + return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id); + }, + isTabbable(state) { + if (!(state == null ? void 0 : state.renderedItems.length)) return true; + if (state.virtualFocus) return false; + if (tabbable) return true; + if (state.activeId === null) return false; + const item = store == null ? void 0 : store.item(state.activeId); + if (item == null ? void 0 : item.disabled) return true; + if (!(item == null ? void 0 : item.element)) return true; + return state.activeId === id; + } + }); + const getItem = (0, import_react11.useCallback)( + (item) => { + var _a; + const nextItem = { + ...item, + id: id || item.id, + rowId, + disabled: !!trulyDisabled, + children: (_a = item.element) == null ? void 0 : _a.textContent + }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [id, rowId, trulyDisabled, getItemProp] + ); + const onFocusProp = props.onFocus; + const hasFocusedComposite = (0, import_react11.useRef)(false); + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (isPortalEvent(event)) return; + if (!id) return; + if (!store) return; + if (targetIsAnotherItem(event, store)) return; + const { virtualFocus, baseElement: baseElement2 } = store.getState(); + store.setActiveId(id); + if (isTextbox(event.currentTarget)) { + selectTextField(event.currentTarget); + } + if (!virtualFocus) return; + if (!isSelfTarget(event)) return; + if (isEditableElement(event.currentTarget)) return; + if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return; + if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) { + event.currentTarget.scrollIntoView({ + block: "nearest", + inline: "nearest" + }); + } + hasFocusedComposite.current = true; + const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget); + if (fromComposite) { + focusSilently(baseElement2); + } else { + baseElement2.focus(); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + const state = store == null ? void 0 : store.getState(); + if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) { + hasFocusedComposite.current = false; + event.preventDefault(); + event.stopPropagation(); + } + }); + const onKeyDownProp = props.onKeyDown; + const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown); + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + if (!isSelfTarget(event)) return; + if (!store) return; + const { currentTarget } = event; + const state = store.getState(); + const item = store.item(id); + const isGrid2 = !!(item == null ? void 0 : item.rowId); + const isVertical = state.orientation !== "horizontal"; + const isHorizontal = state.orientation !== "vertical"; + const canHomeEnd = () => { + if (isGrid2) return true; + if (isHorizontal) return true; + if (!state.baseElement) return true; + if (!isTextField(state.baseElement)) return true; + return false; + }; + const keyMap = { + ArrowUp: (isGrid2 || isVertical) && store.up, + ArrowRight: (isGrid2 || isHorizontal) && store.next, + ArrowDown: (isGrid2 || isVertical) && store.down, + ArrowLeft: (isGrid2 || isHorizontal) && store.previous, + Home: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.first(); + } + return store == null ? void 0 : store.previous(-1); + }, + End: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.last(); + } + return store == null ? void 0 : store.next(-1); + }, + PageUp: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true); + }, + PageDown: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down); + } + }; + const action = keyMap[event.key]; + if (action) { + if (isTextbox(currentTarget)) { + const selection = getTextboxSelection(currentTarget); + const isLeft = isHorizontal && event.key === "ArrowLeft"; + const isRight = isHorizontal && event.key === "ArrowRight"; + const isUp = isVertical && event.key === "ArrowUp"; + const isDown = isVertical && event.key === "ArrowDown"; + if (isRight || isDown) { + const { length: valueLength } = getTextboxValue(currentTarget); + if (selection.end !== valueLength) return; + } else if ((isLeft || isUp) && selection.start !== 0) return; + } + const nextId = action(); + if (preventScrollOnKeyDownProp(event) || nextId !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(nextId); + } + } + }); + const providerValue = (0, import_react11.useMemo)( + () => ({ id, baseElement }), + [id, baseElement] + ); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }), + [providerValue] + ); + props = { + id, + "data-active-item": isActiveItem || void 0, + ...props, + ref: useMergeRefs(ref, props.ref), + tabIndex: isTabbable ? props.tabIndex : -1, + onFocus, + onBlurCapture, + onKeyDown + }; + props = useCommand(props); + props = useCollectionItem({ + store, + ...props, + getItem, + shouldRegisterItem: id ? props.shouldRegisterItem : false + }); + return removeUndefinedValues({ + ...props, + "aria-setsize": ariaSetSize, + "aria-posinset": ariaPosInSet + }); + } +); +var CompositeItem = memo22( + forwardRef22(function CompositeItem2(props) { + const htmlProps = useCompositeItem(props); + return createElement3(TagName4, htmlProps); + }) +); + +// node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js +function toArray(arg) { + if (Array.isArray(arg)) { + return arg; + } + return typeof arg !== "undefined" ? [arg] : []; +} +function flatten2DArray(array) { + const flattened = []; + for (const row of array) { + flattened.push(...row); + } + return flattened; +} +function reverseArray(array) { + return array.slice().reverse(); +} + +// node_modules/@ariakit/react-core/esm/__chunks/ZMWF7ASR.js +var import_react12 = __toESM(require_react(), 1); +var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); +var TagName5 = "div"; +function isGrid(items) { + return items.some((item) => !!item.rowId); +} +function isPrintableKey(event) { + const target = event.target; + if (target && !isTextField(target)) return false; + return event.key.length === 1 && !event.ctrlKey && !event.metaKey; +} +function isModifierKey(event) { + return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta"; +} +function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) { + return useEvent((event) => { + var _a; + onKeyboardEvent == null ? void 0 : onKeyboardEvent(event); + if (event.defaultPrevented) return; + if (event.isPropagationStopped()) return; + if (!isSelfTarget(event)) return; + if (isModifierKey(event)) return; + if (isPrintableKey(event)) return; + const state = store.getState(); + const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element; + if (!activeElement) return; + const { view, ...eventInit } = event; + const previousElement = previousElementRef == null ? void 0 : previousElementRef.current; + if (activeElement !== previousElement) { + activeElement.focus(); + } + if (!fireKeyboardEvent(activeElement, event.type, eventInit)) { + event.preventDefault(); + } + if (event.currentTarget.contains(activeElement)) { + event.stopPropagation(); + } + }); +} +function findFirstEnabledItemInTheLastRow(items) { + return findFirstEnabledItem( + flatten2DArray(reverseArray(groupItemsByRows(items))) + ); +} +function useScheduleFocus(store) { + const [scheduled, setScheduled] = (0, import_react12.useState)(false); + const schedule = (0, import_react12.useCallback)(() => setScheduled(true), []); + const activeItem = store.useState( + (state) => getEnabledItem(store, state.activeId) + ); + (0, import_react12.useEffect)(() => { + const activeElement = activeItem == null ? void 0 : activeItem.element; + if (!scheduled) return; + if (!activeElement) return; + setScheduled(false); + activeElement.focus({ preventScroll: true }); + }, [activeItem, scheduled]); + return schedule; +} +var useComposite = createHook( + function useComposite2({ + store, + composite = true, + focusOnMove = composite, + moveOnKeyPress = true, + ...props + }) { + const context = useCompositeProviderContext(); + store = store || context; + invariant( + store, + "Composite must receive a `store` prop or be wrapped in a CompositeProvider component." + ); + const ref = (0, import_react12.useRef)(null); + const previousElementRef = (0, import_react12.useRef)(null); + const scheduleFocus = useScheduleFocus(store); + const moves = store.useState("moves"); + const [, setBaseElement] = useTransactionState( + composite ? store.setBaseElement : null + ); + (0, import_react12.useEffect)(() => { + var _a; + if (!store) return; + if (!moves) return; + if (!composite) return; + if (!focusOnMove) return; + const { activeId: activeId2 } = store.getState(); + const itemElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + if (!itemElement) return; + focusIntoView(itemElement); + }, [store, moves, composite, focusOnMove]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!moves) return; + if (!composite) return; + const { baseElement, activeId: activeId2 } = store.getState(); + const isSelfAcive = activeId2 === null; + if (!isSelfAcive) return; + if (!baseElement) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (previousElement) { + fireBlurEvent(previousElement, { relatedTarget: baseElement }); + } + if (!hasFocus(baseElement)) { + baseElement.focus(); + } + }, [store, moves, composite]); + const activeId = store.useState("activeId"); + const virtualFocus = store.useState("virtualFocus"); + useSafeLayoutEffect(() => { + var _a; + if (!store) return; + if (!composite) return; + if (!virtualFocus) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (!previousElement) return; + const activeElement = (_a = getEnabledItem(store, activeId)) == null ? void 0 : _a.element; + const relatedTarget = activeElement || getActiveElement(previousElement); + if (relatedTarget === previousElement) return; + fireBlurEvent(previousElement, { relatedTarget }); + }, [store, activeId, virtualFocus, composite]); + const onKeyDownCapture = useKeyboardEventProxy( + store, + props.onKeyDownCapture, + previousElementRef + ); + const onKeyUpCapture = useKeyboardEventProxy( + store, + props.onKeyUpCapture, + previousElementRef + ); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (!virtualFocus2) return; + const previousActiveElement = event.relatedTarget; + const isSilentlyFocused = silentlyFocused(event.currentTarget); + if (isSelfTarget(event) && isSilentlyFocused) { + event.stopPropagation(); + previousElementRef.current = previousActiveElement; + } + }); + const onFocusProp = props.onFocus; + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (!composite) return; + if (!store) return; + const { relatedTarget } = event; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (virtualFocus2) { + if (isSelfTarget(event) && !isItem(store, relatedTarget)) { + queueMicrotask(scheduleFocus); + } + } else if (isSelfTarget(event)) { + store.setActiveId(null); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + var _a; + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState(); + if (!virtualFocus2) return; + const activeElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + const nextActiveElement = event.relatedTarget; + const nextActiveElementIsItem = isItem(store, nextActiveElement); + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (isSelfTarget(event) && nextActiveElementIsItem) { + if (nextActiveElement === activeElement) { + if (previousElement && previousElement !== nextActiveElement) { + fireBlurEvent(previousElement, event); + } + } else if (activeElement) { + fireBlurEvent(activeElement, event); + } else if (previousElement) { + fireBlurEvent(previousElement, event); + } + event.stopPropagation(); + } else { + const targetIsItem = isItem(store, event.target); + if (!targetIsItem && activeElement) { + fireBlurEvent(activeElement, event); + } + } + }); + const onKeyDownProp = props.onKeyDown; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + var _a; + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.nativeEvent.isComposing) return; + if (event.defaultPrevented) return; + if (!store) return; + if (!isSelfTarget(event)) return; + const { orientation, renderedItems, activeId: activeId2 } = store.getState(); + const activeItem = getEnabledItem(store, activeId2); + if ((_a = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a.isConnected) return; + const isVertical = orientation !== "horizontal"; + const isHorizontal = orientation !== "vertical"; + const grid = isGrid(renderedItems); + const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End"; + if (isHorizontalKey && isTextField(event.currentTarget)) return; + const up = () => { + if (grid) { + const item = findFirstEnabledItemInTheLastRow(renderedItems); + return item == null ? void 0 : item.id; + } + return store == null ? void 0 : store.last(); + }; + const keyMap = { + ArrowUp: (grid || isVertical) && up, + ArrowRight: (grid || isHorizontal) && store.first, + ArrowDown: (grid || isVertical) && store.first, + ArrowLeft: (grid || isHorizontal) && store.last, + Home: store.first, + End: store.last, + PageUp: store.first, + PageDown: store.last + }; + const action = keyMap[event.key]; + if (action) { + const id = action(); + if (id !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(id); + } + } + }); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CompositeContextProvider, { value: store, children: element }), + [store] + ); + const activeDescendant = store.useState((state) => { + var _a; + if (!store) return; + if (!composite) return; + if (!state.virtualFocus) return; + return (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.id; + }); + props = { + "aria-activedescendant": activeDescendant, + ...props, + ref: useMergeRefs(ref, setBaseElement, props.ref), + onKeyDownCapture, + onKeyUpCapture, + onFocusCapture, + onFocus, + onBlurCapture, + onKeyDown + }; + const focusable = store.useState( + (state) => composite && (state.virtualFocus || state.activeId === null) + ); + props = useFocusable({ focusable, ...props }); + return props; + } +); +var Composite5 = forwardRef22(function Composite22(props) { + const htmlProps = useComposite(props); + return createElement3(TagName5, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/LVDQFHCH.js +var ctx3 = createStoreContext(); +var useDisclosureContext = ctx3.useContext; +var useDisclosureScopedContext = ctx3.useScopedContext; +var useDisclosureProviderContext = ctx3.useProviderContext; +var DisclosureContextProvider = ctx3.ContextProvider; +var DisclosureScopedContextProvider = ctx3.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/A62MDFCW.js +var import_react13 = __toESM(require_react(), 1); +var ctx4 = createStoreContext( + [DisclosureContextProvider], + [DisclosureScopedContextProvider] +); +var useDialogContext = ctx4.useContext; +var useDialogScopedContext = ctx4.useScopedContext; +var useDialogProviderContext = ctx4.useProviderContext; +var DialogContextProvider = ctx4.ContextProvider; +var DialogScopedContextProvider = ctx4.ScopedContextProvider; +var DialogHeadingContext = (0, import_react13.createContext)(void 0); +var DialogDescriptionContext = (0, import_react13.createContext)(void 0); + +// node_modules/@ariakit/react-core/esm/__chunks/6B3RXHKP.js +var import_react14 = __toESM(require_react(), 1); +var import_react_dom = __toESM(require_react_dom(), 1); +var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); +var TagName6 = "div"; +function afterTimeout(timeoutMs, cb) { + const timeoutId = setTimeout(cb, timeoutMs); + return () => clearTimeout(timeoutId); +} +function afterPaint2(cb) { + let raf = requestAnimationFrame(() => { + raf = requestAnimationFrame(cb); + }); + return () => cancelAnimationFrame(raf); +} +function parseCSSTime(...times) { + return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => { + const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3; + const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier; + if (currentTime > longestTime) return currentTime; + return longestTime; + }, 0); +} +function isHidden(mounted, hidden, alwaysVisible) { + return !alwaysVisible && hidden !== false && (!mounted || !!hidden); +} +var useDisclosureContent = createHook(function useDisclosureContent2({ store, alwaysVisible, ...props }) { + const context = useDisclosureProviderContext(); + store = store || context; + invariant( + store, + "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component." + ); + const ref = (0, import_react14.useRef)(null); + const id = useId3(props.id); + const [transition, setTransition] = (0, import_react14.useState)(null); + const open = store.useState("open"); + const mounted = store.useState("mounted"); + const animated = store.useState("animated"); + const contentElement = store.useState("contentElement"); + const otherElement = useStoreState(store.disclosure, "contentElement"); + useSafeLayoutEffect(() => { + if (!ref.current) return; + store == null ? void 0 : store.setContentElement(ref.current); + }, [store]); + useSafeLayoutEffect(() => { + let previousAnimated; + store == null ? void 0 : store.setState("animated", (animated2) => { + previousAnimated = animated2; + return true; + }); + return () => { + if (previousAnimated === void 0) return; + store == null ? void 0 : store.setState("animated", previousAnimated); + }; + }, [store]); + useSafeLayoutEffect(() => { + if (!animated) return; + if (!(contentElement == null ? void 0 : contentElement.isConnected)) { + setTransition(null); + return; + } + return afterPaint2(() => { + setTransition(open ? "enter" : mounted ? "leave" : null); + }); + }, [animated, contentElement, open, mounted]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!animated) return; + if (!transition) return; + if (!contentElement) return; + const stopAnimation = () => store == null ? void 0 : store.setState("animating", false); + const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation); + if (transition === "leave" && open) return; + if (transition === "enter" && !open) return; + if (typeof animated === "number") { + const timeout2 = animated; + return afterTimeout(timeout2, stopAnimationSync); + } + const { + transitionDuration, + animationDuration, + transitionDelay, + animationDelay + } = getComputedStyle(contentElement); + const { + transitionDuration: transitionDuration2 = "0", + animationDuration: animationDuration2 = "0", + transitionDelay: transitionDelay2 = "0", + animationDelay: animationDelay2 = "0" + } = otherElement ? getComputedStyle(otherElement) : {}; + const delay = parseCSSTime( + transitionDelay, + animationDelay, + transitionDelay2, + animationDelay2 + ); + const duration = parseCSSTime( + transitionDuration, + animationDuration, + transitionDuration2, + animationDuration2 + ); + const timeout = delay + duration; + if (!timeout) { + if (transition === "enter") { + store.setState("animated", false); + } + stopAnimation(); + return; + } + const frameRate = 1e3 / 60; + const maxTimeout = Math.max(timeout - frameRate, 0); + return afterTimeout(maxTimeout, stopAnimationSync); + }, [store, animated, contentElement, otherElement, open, transition]); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogScopedContextProvider, { value: store, children: element }), + [store] + ); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const styleProp = props.style; + const style = (0, import_react14.useMemo)(() => { + if (hidden) { + return { ...styleProp, display: "none" }; + } + return styleProp; + }, [hidden, styleProp]); + props = { + id, + "data-open": open || void 0, + "data-enter": transition === "enter" || void 0, + "data-leave": transition === "leave" || void 0, + hidden, + ...props, + ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref), + style + }; + return removeUndefinedValues(props); +}); +var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) { + const htmlProps = useDisclosureContent(props); + return createElement3(TagName6, htmlProps); +}); +var DisclosureContent = forwardRef22(function DisclosureContent2({ + unmountOnHide, + ...props +}) { + const context = useDisclosureProviderContext(); + const store = props.store || context; + const mounted = useStoreState( + store, + (state) => !unmountOnHide || (state == null ? void 0 : state.mounted) + ); + if (mounted === false) return null; + return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DisclosureContentImpl, { ...props }); +}); + +// node_modules/@ariakit/core/esm/__chunks/75BJEVSH.js +function createDisclosureStore(props = {}) { + const store = mergeStore( + props.store, + omit22(props.disclosure, ["contentElement", "disclosureElement"]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const open = defaultValue( + props.open, + syncState == null ? void 0 : syncState.open, + props.defaultOpen, + false + ); + const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false); + const initialState = { + open, + animated, + animating: !!animated && open, + mounted: open, + contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null), + disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null) + }; + const disclosure = createStore(initialState, store); + setup( + disclosure, + () => sync(disclosure, ["animated", "animating"], (state) => { + if (state.animated) return; + disclosure.setState("animating", false); + }) + ); + setup( + disclosure, + () => subscribe(disclosure, ["open"], () => { + if (!disclosure.getState().animated) return; + disclosure.setState("animating", true); + }) + ); + setup( + disclosure, + () => sync(disclosure, ["open", "animating"], (state) => { + disclosure.setState("mounted", state.open || state.animating); + }) + ); + return { + ...disclosure, + disclosure: props.disclosure, + setOpen: (value) => disclosure.setState("open", value), + show: () => disclosure.setState("open", true), + hide: () => disclosure.setState("open", false), + toggle: () => disclosure.setState("open", (open2) => !open2), + stopAnimation: () => disclosure.setState("animating", false), + setContentElement: (value) => disclosure.setState("contentElement", value), + setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WLZ6H5FH.js +function useDisclosureStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store, props.disclosure]); + useStoreProps(store, props, "open", "setOpen"); + useStoreProps(store, props, "mounted", "setMounted"); + useStoreProps(store, props, "animated"); + return Object.assign(store, { disclosure: props.disclosure }); +} + +// node_modules/@ariakit/react-core/esm/__chunks/JMU4N4M5.js +var ctx5 = createStoreContext( + [DialogContextProvider], + [DialogScopedContextProvider] +); +var usePopoverContext = ctx5.useContext; +var usePopoverScopedContext = ctx5.useScopedContext; +var usePopoverProviderContext = ctx5.useProviderContext; +var PopoverContextProvider = ctx5.ContextProvider; +var PopoverScopedContextProvider = ctx5.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/__chunks/N5XGANPW.js +function getCommonParent(items) { + var _a; + const firstItem = items.find((item) => !!item.element); + const lastItem = [...items].reverse().find((item) => !!item.element); + let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement; + while (parentElement && (lastItem == null ? void 0 : lastItem.element)) { + const parent = parentElement; + if (lastItem && parent.contains(lastItem.element)) { + return parentElement; + } + parentElement = parentElement.parentElement; + } + return getDocument(parentElement).body; +} +function getPrivateStore(store) { + return store == null ? void 0 : store.__unstablePrivateStore; +} +function createCollectionStore(props = {}) { + var _a; + throwOnConflictingProps(props, props.store); + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const items = defaultValue( + props.items, + syncState == null ? void 0 : syncState.items, + props.defaultItems, + [] + ); + const itemsMap = new Map(items.map((item) => [item.id, item])); + const initialState = { + items, + renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, []) + }; + const syncPrivateStore = getPrivateStore(props.store); + const privateStore = createStore( + { items, renderedItems: initialState.renderedItems }, + syncPrivateStore + ); + const collection = createStore(initialState, props.store); + const sortItems = (renderedItems) => { + const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element); + privateStore.setState("renderedItems", sortedItems); + collection.setState("renderedItems", sortedItems); + }; + setup(collection, () => init(privateStore)); + setup(privateStore, () => { + return batch(privateStore, ["items"], (state) => { + collection.setState("items", state.items); + }); + }); + setup(privateStore, () => { + return batch(privateStore, ["renderedItems"], (state) => { + let firstRun = true; + let raf = requestAnimationFrame(() => { + const { renderedItems } = collection.getState(); + if (state.renderedItems === renderedItems) return; + sortItems(state.renderedItems); + }); + if (typeof IntersectionObserver !== "function") { + return () => cancelAnimationFrame(raf); + } + const ioCallback = () => { + if (firstRun) { + firstRun = false; + return; + } + cancelAnimationFrame(raf); + raf = requestAnimationFrame(() => sortItems(state.renderedItems)); + }; + const root = getCommonParent(state.renderedItems); + const observer = new IntersectionObserver(ioCallback, { root }); + for (const item of state.renderedItems) { + if (!item.element) continue; + observer.observe(item.element); + } + return () => { + cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + }); + const mergeItem = (item, setItems, canDeleteFromMap = false) => { + let prevItem; + setItems((items2) => { + const index = items2.findIndex(({ id }) => id === item.id); + const nextItems = items2.slice(); + if (index !== -1) { + prevItem = items2[index]; + const nextItem = { ...prevItem, ...item }; + nextItems[index] = nextItem; + itemsMap.set(item.id, nextItem); + } else { + nextItems.push(item); + itemsMap.set(item.id, item); + } + return nextItems; + }); + const unmergeItem = () => { + setItems((items2) => { + if (!prevItem) { + if (canDeleteFromMap) { + itemsMap.delete(item.id); + } + return items2.filter(({ id }) => id !== item.id); + } + const index = items2.findIndex(({ id }) => id === item.id); + if (index === -1) return items2; + const nextItems = items2.slice(); + nextItems[index] = prevItem; + itemsMap.set(item.id, prevItem); + return nextItems; + }); + }; + return unmergeItem; + }; + const registerItem = (item) => mergeItem( + item, + (getItems) => privateStore.setState("items", getItems), + true + ); + return { + ...collection, + registerItem, + renderItem: (item) => chain( + registerItem(item), + mergeItem( + item, + (getItems) => privateStore.setState("renderedItems", getItems) + ) + ), + item: (id) => { + if (!id) return null; + let item = itemsMap.get(id); + if (!item) { + const { items: items2 } = privateStore.getState(); + item = items2.find((item2) => item2.id === id); + if (item) { + itemsMap.set(id, item); + } + } + return item || null; + }, + // @ts-expect-error Internal + __unstablePrivateStore: privateStore + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GVAFFF2B.js +function useCollectionStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store]); + useStoreProps(store, props, "items", "setItems"); + return store; +} + +// node_modules/@ariakit/core/esm/__chunks/RVTIKFRL.js +var NULL_ITEM = { id: null }; +function findFirstEnabledItem2(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItems(items, excludeId) { + return items.filter((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getItemsInRow(items, rowId) { + return items.filter((item) => item.rowId === rowId); +} +function flipItems(items, activeId, shouldInsertNullItem = false) { + const index = items.findIndex((item) => item.id === activeId); + return [ + ...items.slice(index + 1), + ...shouldInsertNullItem ? [NULL_ITEM] : [], + ...items.slice(0, index) + ]; +} +function groupItemsByRows2(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function getMaxRowLength(array) { + let maxLength = 0; + for (const { length } of array) { + if (length > maxLength) { + maxLength = length; + } + } + return maxLength; +} +function createEmptyItem(rowId) { + return { + id: "__EMPTY_ITEM__", + disabled: true, + rowId + }; +} +function normalizeRows(rows, activeId, focusShift) { + const maxLength = getMaxRowLength(rows); + for (const row of rows) { + for (let i2 = 0; i2 < maxLength; i2 += 1) { + const item = row[i2]; + if (!item || focusShift && item.disabled) { + const isFirst = i2 === 0; + const previousItem = isFirst && focusShift ? findFirstEnabledItem2(row) : row[i2 - 1]; + row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId); + } + } + } + return rows; +} +function verticalizeItems(items) { + const rows = groupItemsByRows2(items); + const maxLength = getMaxRowLength(rows); + const verticalized = []; + for (let i2 = 0; i2 < maxLength; i2 += 1) { + for (const row of rows) { + const item = row[i2]; + if (item) { + verticalized.push({ + ...item, + // If there's no rowId, it means that it's not a grid composite, but + // a single row instead. So, instead of verticalizing it, that is, + // assigning a different rowId based on the column index, we keep it + // undefined so they will be part of the same row. This is useful + // when using up/down on one-dimensional composites. + rowId: item.rowId ? `${i2}` : void 0 + }); + } + } + } + return verticalized; +} +function createCompositeStore(props = {}) { + var _a; + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const collection = createCollectionStore(props); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId + ); + const initialState = { + ...collection.getState(), + id: defaultValue( + props.id, + syncState == null ? void 0 : syncState.id, + `id-${Math.random().toString(36).slice(2, 8)}` + ), + activeId, + baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null), + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + activeId === null + ), + moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "both" + ), + rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + false + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false), + focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false) + }; + const composite = createStore(initialState, collection, props.store); + setup( + composite, + () => sync(composite, ["renderedItems", "activeId"], (state) => { + composite.setState("activeId", (activeId2) => { + var _a2; + if (activeId2 !== void 0) return activeId2; + return (_a2 = findFirstEnabledItem2(state.renderedItems)) == null ? void 0 : _a2.id; + }); + }) + ); + const getNextId = (direction = "next", options = {}) => { + var _a2, _b; + const defaultState = composite.getState(); + const { + skip = 0, + activeId: activeId2 = defaultState.activeId, + focusShift = defaultState.focusShift, + focusLoop = defaultState.focusLoop, + focusWrap = defaultState.focusWrap, + includesBaseElement = defaultState.includesBaseElement, + renderedItems = defaultState.renderedItems, + rtl = defaultState.rtl + } = options; + const isVerticalDirection = direction === "up" || direction === "down"; + const isNextDirection = direction === "next" || direction === "down"; + const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection; + const canShift = focusShift && !skip; + let items = !isVerticalDirection ? renderedItems : flatten2DArray( + normalizeRows(groupItemsByRows2(renderedItems), activeId2, canShift) + ); + items = canReverse ? reverseArray(items) : items; + items = isVerticalDirection ? verticalizeItems(items) : items; + if (activeId2 == null) { + return (_a2 = findFirstEnabledItem2(items)) == null ? void 0 : _a2.id; + } + const activeItem = items.find((item) => item.id === activeId2); + if (!activeItem) { + return (_b = findFirstEnabledItem2(items)) == null ? void 0 : _b.id; + } + const isGrid2 = items.some((item) => item.rowId); + const activeIndex = items.indexOf(activeItem); + const nextItems = items.slice(activeIndex + 1); + const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId); + if (skip) { + const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2); + const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one. + nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1]; + return nextItem2 == null ? void 0 : nextItem2.id; + } + const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"); + const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical"); + const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false; + if (canLoop) { + const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId); + const sortedItems = flipItems(loopItems, activeId2, hasNullItem); + const nextItem2 = findFirstEnabledItem2(sortedItems, activeId2); + return nextItem2 == null ? void 0 : nextItem2.id; + } + if (canWrap) { + const nextItem2 = findFirstEnabledItem2( + // We can use nextItems, which contains all the next items, including + // items from other rows, to wrap between rows. However, if there is a + // null item (the composite container), we'll only use the next items in + // the row. So moving next from the last item will focus on the + // composite container. On grid composites, horizontal navigation never + // focuses on the composite container, only vertical. + hasNullItem ? nextItemsInRow : nextItems, + activeId2 + ); + const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id; + return nextId; + } + const nextItem = findFirstEnabledItem2(nextItemsInRow, activeId2); + if (!nextItem && hasNullItem) { + return null; + } + return nextItem == null ? void 0 : nextItem.id; + }; + return { + ...collection, + ...composite, + setBaseElement: (element) => composite.setState("baseElement", element), + setActiveId: (id) => composite.setState("activeId", id), + move: (id) => { + if (id === void 0) return; + composite.setState("activeId", id); + composite.setState("moves", (moves) => moves + 1); + }, + first: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(composite.getState().renderedItems)) == null ? void 0 : _a2.id; + }, + last: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id; + }, + next: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("next", options); + }, + previous: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("previous", options); + }, + down: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("down", options); + }, + up: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("up", options); + } + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/IQYAUKXT.js +function useCompositeStoreOptions(props) { + const id = useId3(props.id); + return { id, ...props }; +} +function useCompositeStoreProps(store, update2, props) { + store = useCollectionStoreProps(store, update2, props); + useStoreProps(store, props, "activeId", "setActiveId"); + useStoreProps(store, props, "includesBaseElement"); + useStoreProps(store, props, "virtualFocus"); + useStoreProps(store, props, "orientation"); + useStoreProps(store, props, "rtl"); + useStoreProps(store, props, "focusLoop"); + useStoreProps(store, props, "focusWrap"); + useStoreProps(store, props, "focusShift"); + return store; +} + +// node_modules/@ariakit/react-core/esm/__chunks/CVCFNOHX.js +var import_react15 = __toESM(require_react(), 1); +var ComboboxListRoleContext = (0, import_react15.createContext)( + void 0 +); +var ctx6 = createStoreContext( + [PopoverContextProvider, CompositeContextProvider], + [PopoverScopedContextProvider, CompositeScopedContextProvider] +); +var useComboboxContext = ctx6.useContext; +var useComboboxScopedContext = ctx6.useScopedContext; +var useComboboxProviderContext = ctx6.useProviderContext; +var ComboboxContextProvider = ctx6.ContextProvider; +var ComboboxScopedContextProvider = ctx6.ScopedContextProvider; +var ComboboxItemValueContext = (0, import_react15.createContext)( + void 0 +); +var ComboboxItemCheckedContext = (0, import_react15.createContext)(false); + +// node_modules/@ariakit/core/esm/__chunks/KMAUV3TY.js +function createDialogStore(props = {}) { + return createDisclosureStore(props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4NYSH4UO.js +function useDialogStoreProps(store, update2, props) { + return useDisclosureStoreProps(store, update2, props); +} + +// node_modules/@ariakit/core/esm/__chunks/BFGNM53A.js +function createPopoverStore({ + popover: otherPopover, + ...props +} = {}) { + const store = mergeStore( + props.store, + omit22(otherPopover, [ + "arrowElement", + "anchorElement", + "contentElement", + "popoverElement", + "disclosureElement" + ]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const dialog = createDialogStore({ ...props, store }); + const placement = defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom" + ); + const initialState = { + ...dialog.getState(), + placement, + currentPlacement: placement, + anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null), + popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null), + arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null), + rendered: /* @__PURE__ */ Symbol("rendered") + }; + const popover = createStore(initialState, dialog, store); + return { + ...dialog, + ...popover, + setAnchorElement: (element) => popover.setState("anchorElement", element), + setPopoverElement: (element) => popover.setState("popoverElement", element), + setArrowElement: (element) => popover.setState("arrowElement", element), + render: () => popover.setState("rendered", /* @__PURE__ */ Symbol("rendered")) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/B6FLPFJM.js +function usePopoverStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.popover]); + useStoreProps(store, props, "placement"); + return useDialogStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4POTBZ2J.js +var TagName7 = "div"; +var usePopoverAnchor = createHook( + function usePopoverAnchor2({ store, ...props }) { + const context = usePopoverProviderContext(); + store = store || context; + props = { + ...props, + ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref) + }; + return props; + } +); +var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) { + const htmlProps = usePopoverAnchor(props); + return createElement3(TagName7, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/X6LNAU2F.js +var import_react16 = __toESM(require_react(), 1); +var TagName8 = "div"; +function getMouseDestination(event) { + const relatedTarget = event.relatedTarget; + if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) { + return relatedTarget; + } + return null; +} +function hoveringInside(event) { + const nextElement = getMouseDestination(event); + if (!nextElement) return false; + return contains(event.currentTarget, nextElement); +} +var symbol2 = /* @__PURE__ */ Symbol("composite-hover"); +function movingToAnotherItem(event) { + let dest = getMouseDestination(event); + if (!dest) return false; + do { + if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true; + dest = dest.parentElement; + } while (dest); + return false; +} +var useCompositeHover = createHook( + function useCompositeHover2({ + store, + focusOnHover = true, + blurOnHoverEnd = !!focusOnHover, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + invariant( + store, + "CompositeHover must be wrapped in a Composite component." + ); + const isMouseMoving = useIsMouseMoving(); + const onMouseMoveProp = props.onMouseMove; + const focusOnHoverProp = useBooleanEvent(focusOnHover); + const onMouseMove = useEvent((event) => { + onMouseMoveProp == null ? void 0 : onMouseMoveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (!focusOnHoverProp(event)) return; + if (!hasFocusWithin(event.currentTarget)) { + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (baseElement && !hasFocus(baseElement)) { + baseElement.focus(); + } + } + store == null ? void 0 : store.setActiveId(event.currentTarget.id); + }); + const onMouseLeaveProp = props.onMouseLeave; + const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd); + const onMouseLeave = useEvent((event) => { + var _a; + onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (hoveringInside(event)) return; + if (movingToAnotherItem(event)) return; + if (!focusOnHoverProp(event)) return; + if (!blurOnHoverEndProp(event)) return; + store == null ? void 0 : store.setActiveId(null); + (_a = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a.focus(); + }); + const ref = (0, import_react16.useCallback)((element) => { + if (!element) return; + element[symbol2] = true; + }, []); + props = { + ...props, + ref: useMergeRefs(ref, props.ref), + onMouseMove, + onMouseLeave + }; + return removeUndefinedValues(props); + } +); +var CompositeHover = memo22( + forwardRef22(function CompositeHover2(props) { + const htmlProps = useCompositeHover(props); + return createElement3(TagName8, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox.js +var import_react17 = __toESM(require_react(), 1); +var TagName9 = "input"; +function isFirstItemAutoSelected(items, activeValue, autoSelect) { + if (!autoSelect) return false; + const firstItem = items.find((item) => !item.disabled && item.value); + return (firstItem == null ? void 0 : firstItem.value) === activeValue; +} +function hasCompletionString(value, activeValue) { + if (!activeValue) return false; + if (value == null) return false; + value = normalizeString(value); + return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0; +} +function isInputEvent(event) { + return event.type === "input"; +} +function isAriaAutoCompleteValue(value) { + return value === "inline" || value === "list" || value === "both" || value === "none"; +} +function getDefaultAutoSelectId(items) { + const item = items.find((item2) => { + var _a; + if (item2.disabled) return false; + return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab"; + }); + return item == null ? void 0 : item.id; +} +var useCombobox = createHook( + function useCombobox2({ + store, + focusable = true, + autoSelect: autoSelectProp = false, + getAutoSelectId, + setValueOnChange, + showMinLength = 0, + showOnChange, + showOnMouseDown, + showOnClick = showOnMouseDown, + showOnKeyDown, + showOnKeyPress = showOnKeyDown, + blurActiveItemOnClick, + setValueOnClick = true, + moveOnKeyPress = true, + autoComplete = "list", + ...props + }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react17.useRef)(null); + const [valueUpdated, forceValueUpdate] = useForceUpdate(); + const canAutoSelectRef = (0, import_react17.useRef)(false); + const composingRef = (0, import_react17.useRef)(false); + const autoSelect = store.useState( + (state) => state.virtualFocus && autoSelectProp + ); + const inline = autoComplete === "inline" || autoComplete === "both"; + const [canInline, setCanInline] = (0, import_react17.useState)(inline); + useUpdateLayoutEffect(() => { + if (!inline) return; + setCanInline(true); + }, [inline]); + const storeValue = store.useState("value"); + const prevSelectedValueRef = (0, import_react17.useRef)(void 0); + (0, import_react17.useEffect)(() => { + return sync(store, ["selectedValue", "activeId"], (_, prev) => { + prevSelectedValueRef.current = prev.selectedValue; + }); + }, []); + const inlineActiveValue = store.useState((state) => { + var _a; + if (!inline) return; + if (!canInline) return; + if (state.activeValue && Array.isArray(state.selectedValue)) { + if (state.selectedValue.includes(state.activeValue)) return; + if ((_a = prevSelectedValueRef.current) == null ? void 0 : _a.includes(state.activeValue)) return; + } + return state.activeValue; + }); + const items = store.useState("renderedItems"); + const open = store.useState("open"); + const contentElement = store.useState("contentElement"); + const value = (0, import_react17.useMemo)(() => { + if (!inline) return storeValue; + if (!canInline) return storeValue; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (firstItemAutoSelected) { + if (hasCompletionString(storeValue, inlineActiveValue)) { + const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || ""; + return storeValue + slice; + } + return storeValue; + } + return inlineActiveValue || storeValue; + }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]); + (0, import_react17.useEffect)(() => { + const element = ref.current; + if (!element) return; + const onCompositeItemMove = () => setCanInline(true); + element.addEventListener("combobox-item-move", onCompositeItemMove); + return () => { + element.removeEventListener("combobox-item-move", onCompositeItemMove); + }; + }, []); + (0, import_react17.useEffect)(() => { + if (!inline) return; + if (!canInline) return; + if (!inlineActiveValue) return; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (!firstItemAutoSelected) return; + if (!hasCompletionString(storeValue, inlineActiveValue)) return; + let cleanup = noop; + queueMicrotask(() => { + const element = ref.current; + if (!element) return; + const { start: prevStart, end: prevEnd } = getTextboxSelection(element); + const nextStart = storeValue.length; + const nextEnd = inlineActiveValue.length; + setSelectionRange(element, nextStart, nextEnd); + cleanup = () => { + if (!hasFocus(element)) return; + const { start, end } = getTextboxSelection(element); + if (start !== nextStart) return; + if (end !== nextEnd) return; + setSelectionRange(element, prevStart, prevEnd); + }; + }); + return () => cleanup(); + }, [ + valueUpdated, + inline, + canInline, + inlineActiveValue, + items, + autoSelect, + storeValue + ]); + const scrollingElementRef = (0, import_react17.useRef)(null); + const getAutoSelectIdProp = useEvent(getAutoSelectId); + const autoSelectIdRef = (0, import_react17.useRef)(null); + (0, import_react17.useEffect)(() => { + if (!open) return; + if (!contentElement) return; + const scrollingElement = getScrollingElement(contentElement); + if (!scrollingElement) return; + scrollingElementRef.current = scrollingElement; + const onUserScroll = () => { + canAutoSelectRef.current = false; + }; + const onScroll = () => { + if (!store) return; + if (!canAutoSelectRef.current) return; + const { activeId } = store.getState(); + if (activeId === null) return; + if (activeId === autoSelectIdRef.current) return; + canAutoSelectRef.current = false; + }; + const options = { passive: true, capture: true }; + scrollingElement.addEventListener("wheel", onUserScroll, options); + scrollingElement.addEventListener("touchmove", onUserScroll, options); + scrollingElement.addEventListener("scroll", onScroll, options); + return () => { + scrollingElement.removeEventListener("wheel", onUserScroll, true); + scrollingElement.removeEventListener("touchmove", onUserScroll, true); + scrollingElement.removeEventListener("scroll", onScroll, true); + }; + }, [open, contentElement, store]); + useSafeLayoutEffect(() => { + if (!storeValue) return; + if (composingRef.current) return; + canAutoSelectRef.current = true; + }, [storeValue]); + useSafeLayoutEffect(() => { + if (autoSelect !== "always" && open) return; + canAutoSelectRef.current = open; + }, [autoSelect, open]); + const resetValueOnSelect = store.useState("resetValueOnSelect"); + useUpdateEffect(() => { + var _a, _b; + const canAutoSelect = canAutoSelectRef.current; + if (!store) return; + if (!open) return; + if (!canAutoSelect && !resetValueOnSelect) return; + const { baseElement, contentElement: contentElement2, activeId } = store.getState(); + if (baseElement && !hasFocus(baseElement)) return; + if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) { + const observer = new MutationObserver(forceValueUpdate); + observer.observe(contentElement2, { attributeFilter: ["data-placing"] }); + return () => observer.disconnect(); + } + if (autoSelect && canAutoSelect) { + const userAutoSelectId = getAutoSelectIdProp(items); + const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a = getDefaultAutoSelectId(items)) != null ? _a : store.first(); + autoSelectIdRef.current = autoSelectId; + store.move(autoSelectId != null ? autoSelectId : null); + } else { + const element = (_b = store.item(activeId || store.first())) == null ? void 0 : _b.element; + if (element && "scrollIntoView" in element) { + element.scrollIntoView({ block: "nearest", inline: "nearest" }); + } + } + return; + }, [ + store, + open, + valueUpdated, + storeValue, + autoSelect, + resetValueOnSelect, + getAutoSelectIdProp, + items + ]); + (0, import_react17.useEffect)(() => { + if (!inline) return; + const combobox = ref.current; + if (!combobox) return; + const elements = [combobox, contentElement].filter( + (value2) => !!value2 + ); + const onBlur2 = (event) => { + if (elements.every((el) => isFocusEventOutside(event, el))) { + store == null ? void 0 : store.setValue(value); + } + }; + for (const element of elements) { + element.addEventListener("focusout", onBlur2); + } + return () => { + for (const element of elements) { + element.removeEventListener("focusout", onBlur2); + } + }; + }, [inline, contentElement, store, value]); + const canShow = (event) => { + const currentTarget = event.currentTarget; + return currentTarget.value.length >= showMinLength; + }; + const onChangeProp = props.onChange; + const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow); + const setValueOnChangeProp = useBooleanEvent( + // If the combobox is combined with tags, the value will be set by the tag + // input component. + setValueOnChange != null ? setValueOnChange : !store.tag + ); + const onChange = useEvent((event) => { + onChangeProp == null ? void 0 : onChangeProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const currentTarget = event.currentTarget; + const { value: value2, selectionStart, selectionEnd } = currentTarget; + const nativeEvent = event.nativeEvent; + canAutoSelectRef.current = true; + if (isInputEvent(nativeEvent)) { + if (nativeEvent.isComposing) { + canAutoSelectRef.current = false; + composingRef.current = true; + } + if (inline) { + const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText"; + const caretAtEnd = selectionStart === value2.length; + setCanInline(textInserted && caretAtEnd); + } + } + if (setValueOnChangeProp(event)) { + const isSameValue = value2 === store.getState().value; + store.setValue(value2); + queueMicrotask(() => { + setSelectionRange(currentTarget, selectionStart, selectionEnd); + }); + if (inline && autoSelect && isSameValue) { + forceValueUpdate(); + } + } + if (showOnChangeProp(event)) { + store.show(); + } + if (!autoSelect || !canAutoSelectRef.current) { + store.setActiveId(null); + } + }); + const onCompositionEndProp = props.onCompositionEnd; + const onCompositionEnd = useEvent((event) => { + canAutoSelectRef.current = true; + composingRef.current = false; + onCompositionEndProp == null ? void 0 : onCompositionEndProp(event); + if (event.defaultPrevented) return; + if (!autoSelect) return; + forceValueUpdate(); + }); + const onMouseDownProp = props.onMouseDown; + const blurActiveItemOnClickProp = useBooleanEvent( + blurActiveItemOnClick != null ? blurActiveItemOnClick : (() => !!(store == null ? void 0 : store.getState().includesBaseElement)) + ); + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow); + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (event.button) return; + if (event.ctrlKey) return; + if (!store) return; + if (blurActiveItemOnClickProp(event)) { + store.setActiveId(null); + } + if (setValueOnClickProp(event)) { + store.setValue(value); + } + if (showOnClickProp(event)) { + queueBeforeEvent(event.currentTarget, "mouseup", store.show); + } + }); + const onKeyDownProp = props.onKeyDown; + const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (!event.repeat) { + canAutoSelectRef.current = false; + } + if (event.defaultPrevented) return; + if (event.ctrlKey) return; + if (event.altKey) return; + if (event.shiftKey) return; + if (event.metaKey) return; + if (!store) return; + const { open: open2 } = store.getState(); + if (open2) return; + if (event.key === "ArrowUp" || event.key === "ArrowDown") { + if (showOnKeyPressProp(event)) { + event.preventDefault(); + store.show(); + } + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + canAutoSelectRef.current = false; + onBlurProp == null ? void 0 : onBlurProp(event); + if (event.defaultPrevented) return; + }); + const id = useId3(props.id); + const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0; + const isActiveItem = store.useState((state) => state.activeId === null); + props = { + id, + role: "combobox", + "aria-autocomplete": ariaAutoComplete, + "aria-haspopup": getPopupRole(contentElement, "listbox"), + "aria-expanded": open, + "aria-controls": contentElement == null ? void 0 : contentElement.id, + "data-active-item": isActiveItem || void 0, + value, + ...props, + ref: useMergeRefs(ref, props.ref), + onChange, + onCompositionEnd, + onMouseDown, + onKeyDown, + onBlur + }; + props = useComposite({ + store, + focusable, + ...props, + // Enable inline autocomplete when the user moves from the combobox input + // to an item. + moveOnKeyPress: (event) => { + if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false; + if (inline) setCanInline(true); + return true; + } + }); + props = usePopoverAnchor({ store, ...props }); + return { autoComplete: "off", ...props }; + } +); +var Combobox = forwardRef22(function Combobox2(props) { + const htmlProps = useCombobox(props); + return createElement3(TagName9, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/IBXZ2LQC.js +var import_react18 = __toESM(require_react(), 1); +var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); +var TagName10 = "div"; +function isSelected(storeValue, itemValue) { + if (itemValue == null) return; + if (storeValue == null) return false; + if (Array.isArray(storeValue)) { + return storeValue.includes(itemValue); + } + return storeValue === itemValue; +} +function getItemRole(popupRole) { + var _a; + const itemRoleByPopupRole = { + menu: "menuitem", + listbox: "option", + tree: "treeitem" + }; + const key = popupRole; + return (_a = itemRoleByPopupRole[key]) != null ? _a : "option"; +} +var useComboboxItem = createHook( + function useComboboxItem2({ + store, + value, + hideOnClick, + setValueOnClick, + selectValueOnClick = true, + resetValueOnSelect, + focusOnHover = false, + moveOnKeyPress = true, + getItem: getItemProp, + ...props + }) { + var _a; + const context = useComboboxScopedContext(); + store = store || context; + invariant( + store, + "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component." + ); + const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, { + resetValueOnSelectState: "resetValueOnSelect", + multiSelectable(state) { + return Array.isArray(state.selectedValue); + }, + selected(state) { + return isSelected(state.selectedValue, value); + } + }); + const getItem = (0, import_react18.useCallback)( + (item) => { + const nextItem = { ...item, value }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [value, getItemProp] + ); + setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable; + hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable; + const onClickProp = props.onClick; + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const selectValueOnClickProp = useBooleanEvent(selectValueOnClick); + const resetValueOnSelectProp = useBooleanEvent( + (_a = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a : multiSelectable + ); + const hideOnClickProp = useBooleanEvent(hideOnClick); + const onClick = useEvent((event) => { + onClickProp == null ? void 0 : onClickProp(event); + if (event.defaultPrevented) return; + if (isDownloading(event)) return; + if (isOpeningInNewTab(event)) return; + if (value != null) { + if (selectValueOnClickProp(event)) { + if (resetValueOnSelectProp(event)) { + store == null ? void 0 : store.resetValue(); + } + store == null ? void 0 : store.setSelectedValue((prevValue) => { + if (!Array.isArray(prevValue)) return value; + if (prevValue.includes(value)) { + return prevValue.filter((v2) => v2 !== value); + } + return [...prevValue, value]; + }); + } + if (setValueOnClickProp(event)) { + store == null ? void 0 : store.setValue(value); + } + } + if (hideOnClickProp(event)) { + store == null ? void 0 : store.hide(); + } + }); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (!baseElement) return; + if (hasFocus(baseElement)) return; + const printable = event.key.length === 1; + if (printable || event.key === "Backspace" || event.key === "Delete") { + queueMicrotask(() => baseElement.focus()); + if (isTextField(baseElement)) { + store == null ? void 0 : store.setValue(baseElement.value); + } + } + }); + if (multiSelectable && selected != null) { + props = { + "aria-selected": selected, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }), + [value, selected] + ); + const popupRole = (0, import_react18.useContext)(ComboboxListRoleContext); + props = { + role: getItemRole(popupRole), + children: value, + ...props, + onClick, + onKeyDown + }; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + props = useCompositeItem({ + store, + ...props, + getItem, + // Dispatch a custom event on the combobox input when moving to an item + // with the keyboard so the Combobox component can enable inline + // autocompletion. + moveOnKeyPress: (event) => { + if (!moveOnKeyPressProp(event)) return false; + const moveEvent = new Event("combobox-item-move"); + const baseElement = store == null ? void 0 : store.getState().baseElement; + baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent); + return true; + } + }); + props = useCompositeHover({ store, focusOnHover, ...props }); + return props; + } +); +var ComboboxItem = memo22( + forwardRef22(function ComboboxItem2(props) { + const htmlProps = useComboboxItem(props); + return createElement3(TagName10, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js +var import_react19 = __toESM(require_react(), 1); +var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); +var TagName11 = "span"; +function normalizeValue(value) { + return normalizeString(value).toLowerCase(); +} +function getOffsets(string, values) { + const offsets = []; + for (const value of values) { + let pos = 0; + const length = value.length; + while (string.indexOf(value, pos) !== -1) { + const index = string.indexOf(value, pos); + if (index !== -1) { + offsets.push([index, length]); + } + pos = index + 1; + } + } + return offsets; +} +function filterOverlappingOffsets(offsets) { + return offsets.filter(([offset, length], i2, arr) => { + return !arr.some( + ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length + ); + }); +} +function sortOffsets(offsets) { + return offsets.sort(([a2], [b2]) => a2 - b2); +} +function splitValue(itemValue, userValue) { + if (!itemValue) return itemValue; + if (!userValue) return itemValue; + const userValues = toArray(userValue).filter(Boolean).map(normalizeValue); + const parts = []; + const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + "span", + { + "data-autocomplete-value": autocomplete ? "" : void 0, + "data-user-value": autocomplete ? void 0 : "", + children: value + }, + parts.length + ); + const offsets = sortOffsets( + filterOverlappingOffsets( + // Convert userValues into a set to avoid duplicates + getOffsets(normalizeValue(itemValue), new Set(userValues)) + ) + ); + if (!offsets.length) { + parts.push(span(itemValue, true)); + return parts; + } + const [firstOffset] = offsets[0]; + const values = [ + itemValue.slice(0, firstOffset), + ...offsets.flatMap(([offset, length], i2) => { + var _a; + const value = itemValue.slice(offset, offset + length); + const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0]; + const nextValue = itemValue.slice(offset + length, nextOffset); + return [value, nextValue]; + }) + ]; + values.forEach((value, i2) => { + if (!value) return; + parts.push(span(value, i2 % 2 === 0)); + }); + return parts; +} +var useComboboxItemValue = createHook(function useComboboxItemValue2({ store, value, userValue, ...props }) { + const context = useComboboxScopedContext(); + store = store || context; + const itemContext = (0, import_react19.useContext)(ComboboxItemValueContext); + const itemValue = value != null ? value : itemContext; + const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value); + const children = (0, import_react19.useMemo)(() => { + if (!itemValue) return; + if (!inputValue) return itemValue; + return splitValue(itemValue, inputValue); + }, [itemValue, inputValue]); + props = { + children, + ...props + }; + return removeUndefinedValues(props); +}); +var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) { + const htmlProps = useComboboxItemValue(props); + return createElement3(TagName11, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-label.js +var TagName12 = "label"; +var useComboboxLabel = createHook( + function useComboboxLabel2({ store, ...props }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const comboboxId = store.useState((state) => { + var _a; + return (_a = state.baseElement) == null ? void 0 : _a.id; + }); + props = { + htmlFor: comboboxId, + ...props + }; + return removeUndefinedValues(props); + } +); +var ComboboxLabel = memo22( + forwardRef22(function ComboboxLabel2(props) { + const htmlProps = useComboboxLabel(props); + return createElement3(TagName12, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/__chunks/2G6YEJT4.js +var import_react20 = __toESM(require_react(), 1); +var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); +var TagName13 = "div"; +var useComboboxList = createHook( + function useComboboxList2({ store, alwaysVisible, ...props }) { + const scopedContext = useComboboxScopedContext(true); + const context = useComboboxContext(); + store = store || context; + const scopedContextSameStore = !!store && store === scopedContext; + invariant( + store, + "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react20.useRef)(null); + const id = useId3(props.id); + const mounted = store.useState("mounted"); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const style = hidden ? { ...props.style, display: "none" } : props.style; + const multiSelectable = store.useState( + (state) => Array.isArray(state.selectedValue) + ); + const role = useAttribute(ref, "role", props.role); + const isCompositeRole = role === "listbox" || role === "tree" || role === "grid"; + const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0; + const [hasListboxInside, setHasListboxInside] = (0, import_react20.useState)(false); + const contentElement = store.useState("contentElement"); + useSafeLayoutEffect(() => { + if (!mounted) return; + const element = ref.current; + if (!element) return; + if (contentElement !== element) return; + const callback = () => { + setHasListboxInside(!!element.querySelector("[role='listbox']")); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { + subtree: true, + childList: true, + attributeFilter: ["role"] + }); + callback(); + return () => observer.disconnect(); + }, [mounted, contentElement]); + if (!hasListboxInside) { + props = { + role: "listbox", + "aria-multiselectable": ariaMultiSelectable, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }), + [store, role] + ); + const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null; + props = { + id, + hidden, + ...props, + ref: useMergeRefs(setContentElement, ref, props.ref), + style + }; + return removeUndefinedValues(props); + } +); +var ComboboxList = forwardRef22(function ComboboxList2(props) { + const htmlProps = useComboboxList(props); + return createElement3(TagName13, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/XSIEPKGA.js +var import_react21 = __toESM(require_react(), 1); +var TagValueContext = (0, import_react21.createContext)(null); +var TagRemoveIdContext = (0, import_react21.createContext)( + null +); +var ctx7 = createStoreContext( + [CompositeContextProvider], + [CompositeScopedContextProvider] +); +var useTagContext = ctx7.useContext; +var useTagScopedContext = ctx7.useScopedContext; +var useTagProviderContext = ctx7.useProviderContext; +var TagContextProvider = ctx7.ContextProvider; +var TagScopedContextProvider = ctx7.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/combobox/combobox-store.js +var isTouchSafari = isSafari() && isTouchDevice(); +function createComboboxStore({ + tag, + ...props +} = {}) { + const store = mergeStore(props.store, pick2(tag, ["value", "rtl"])); + throwOnConflictingProps(props, store); + const tagState = tag == null ? void 0 : tag.getState(); + const syncState = store == null ? void 0 : store.getState(); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId, + null + ); + const composite = createCompositeStore({ + ...props, + activeId, + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + true + ), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "vertical" + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + true + ) + }); + const popover = createPopoverStore({ + ...props, + placement: defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom-start" + ) + }); + const value = defaultValue( + props.value, + syncState == null ? void 0 : syncState.value, + props.defaultValue, + "" + ); + const selectedValue = defaultValue( + props.selectedValue, + syncState == null ? void 0 : syncState.selectedValue, + tagState == null ? void 0 : tagState.values, + props.defaultSelectedValue, + "" + ); + const multiSelectable = Array.isArray(selectedValue); + const initialState = { + ...composite.getState(), + ...popover.getState(), + value, + selectedValue, + resetValueOnSelect: defaultValue( + props.resetValueOnSelect, + syncState == null ? void 0 : syncState.resetValueOnSelect, + multiSelectable + ), + resetValueOnHide: defaultValue( + props.resetValueOnHide, + syncState == null ? void 0 : syncState.resetValueOnHide, + multiSelectable && !tag + ), + activeValue: syncState == null ? void 0 : syncState.activeValue + }; + const combobox = createStore(initialState, composite, popover, store); + if (isTouchSafari) { + setup( + combobox, + () => sync(combobox, ["virtualFocus"], () => { + combobox.setState("virtualFocus", false); + }) + ); + } + setup(combobox, () => { + if (!tag) return; + return chain( + sync(combobox, ["selectedValue"], (state) => { + if (!Array.isArray(state.selectedValue)) return; + tag.setValues(state.selectedValue); + }), + sync(tag, ["values"], (state) => { + combobox.setState("selectedValue", state.values); + }) + ); + }); + setup( + combobox, + () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => { + if (!state.resetValueOnHide) return; + if (state.mounted) return; + combobox.setState("value", value); + }) + ); + setup( + combobox, + () => sync(combobox, ["open"], (state) => { + if (state.open) return; + combobox.setState("activeId", activeId); + combobox.setState("moves", 0); + }) + ); + setup( + combobox, + () => sync(combobox, ["moves", "activeId"], (state, prevState) => { + if (state.moves === prevState.moves) { + combobox.setState("activeValue", void 0); + } + }) + ); + setup( + combobox, + () => batch(combobox, ["moves", "renderedItems"], (state, prev) => { + if (state.moves === prev.moves) return; + const { activeId: activeId2 } = combobox.getState(); + const activeItem = composite.item(activeId2); + combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value); + }) + ); + return { + ...popover, + ...composite, + ...combobox, + tag, + setValue: (value2) => combobox.setState("value", value2), + resetValue: () => combobox.setState("value", initialState.value), + setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SVN33SY6.js +function useComboboxStoreOptions(props) { + const tag = useTagContext(); + props = { + ...props, + tag: props.tag !== void 0 ? props.tag : tag + }; + return useCompositeStoreOptions(props); +} +function useComboboxStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.tag]); + useStoreProps(store, props, "value", "setValue"); + useStoreProps(store, props, "selectedValue", "setSelectedValue"); + useStoreProps(store, props, "resetValueOnHide"); + useStoreProps(store, props, "resetValueOnSelect"); + return Object.assign( + useCompositeStoreProps( + usePopoverStoreProps(store, update2, props), + update2, + props + ), + { tag: props.tag } + ); +} +function useComboboxStore(props = {}) { + props = useComboboxStoreOptions(props); + const [store, update2] = useStore(createComboboxStore, props); + return useComboboxStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js +var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); +function ComboboxProvider(props = {}) { + const store = useComboboxStore(props); + return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ComboboxContextProvider, { value: store, children: props.children }); +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_remove_accents = __toESM(require_remove_accents(), 1); +var import_compose8 = __toESM(require_compose(), 1); +var import_i18n22 = __toESM(require_i18n(), 1); +var import_element25 = __toESM(require_element(), 1); +var import_components19 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/utils.mjs +var EMPTY_ARRAY3 = []; +var getCurrentValue = (filterDefinition, currentFilter) => { + if (filterDefinition.singleSelection) { + return currentFilter?.value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value; + } + if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) { + return [currentFilter.value]; + } + return EMPTY_ARRAY3; +}; + +// packages/dataviews/build-module/hooks/use-elements.mjs +var import_element24 = __toESM(require_element(), 1); +var EMPTY_ARRAY4 = []; +function useElements({ + elements, + getElements +}) { + const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY4; + const [records, setRecords] = (0, import_element24.useState)(staticElements); + const [isLoading, setIsLoading] = (0, import_element24.useState)(false); + (0, import_element24.useEffect)(() => { + if (!getElements) { + setRecords(staticElements); + return; + } + let cancelled = false; + setIsLoading(true); + getElements().then((fetchedElements) => { + if (!cancelled) { + const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements; + setRecords(dynamicElements); + } + }).catch(() => { + if (!cancelled) { + setRecords(staticElements); + } + }).finally(() => { + if (!cancelled) { + setIsLoading(false); + } + }); + return () => { + cancelled = true; + }; + }, [getElements, staticElements]); + return { + elements: records, + isLoading + }; +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); +function normalizeSearchInput(input = "") { + return (0, import_remove_accents.default)(input.trim().toLowerCase()); +} +var getNewValue = (filterDefinition, currentFilter, value) => { + if (filterDefinition.singleSelection) { + return value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value]; + } + return [value]; +}; +function generateFilterElementCompositeItemId(prefix, filterElementValue) { + return `${prefix}-${filterElementValue}`; +} +var MultiSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-multi-selection", + { "is-selected": selected } + ), + children: selected && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Icon, { icon: check_default }) + } + ); +}; +var SingleSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-single-selection", + { "is-selected": selected } + ) + } + ); +}; +function ListBox({ view, filter, onChangeView }) { + const baseId = (0, import_compose8.useInstanceId)(ListBox, "dataviews-filter-list-box"); + const [activeCompositeId, setActiveCompositeId] = (0, import_element25.useState)( + // When there are one or less operators, the first item is set as active + // (by setting the initial `activeId` to `undefined`). + // With 2 or more operators, the focus is moved on the operators control + // (by setting the initial `activeId` to `null`), meaning that there won't + // be an active item initially. Focus is then managed via the + // `onFocusVisible` callback. + filter.operators?.length === 1 ? void 0 : null + ); + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + import_components19.Composite, + { + virtualFocus: true, + focusLoop: true, + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + role: "listbox", + className: "dataviews-filters__search-widget-listbox", + "aria-label": (0, import_i18n22.sprintf)( + /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */ + (0, import_i18n22.__)("List of: %1$s"), + filter.name + ), + onFocusVisible: () => { + if (!activeCompositeId && filter.elements.length) { + setActiveCompositeId( + generateFilterElementCompositeItemId( + baseId, + filter.elements[0].value + ) + ); + } + }, + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Composite.Typeahead, {}), + children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + import_components19.Composite.Hover, + { + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + import_components19.Composite.Item, + { + id: generateFilterElementCompositeItemId( + baseId, + element.value + ), + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "div", + { + "aria-label": element.label, + role: "option", + className: "dataviews-filters__search-widget-listitem" + } + ), + onClick: () => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + } + } + ), + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes(element.value) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: element.label + } + ) + ] + }, + element.value + )) + } + ); +} +function ComboboxList22({ view, filter, onChangeView }) { + const [searchValue, setSearchValue] = (0, import_element25.useState)(""); + const deferredSearchValue = (0, import_element25.useDeferredValue)(searchValue); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const matches = (0, import_element25.useMemo)(() => { + const normalizedSearch = normalizeSearchInput(deferredSearchValue); + return filter.elements.filter( + (item) => normalizeSearchInput(item.label).includes(normalizedSearch) + ); + }, [filter.elements, deferredSearchValue]); + return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + ComboboxProvider, + { + selectedValue: currentValue, + setSelectedValue: (value) => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map((_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value + }; + } + return _filter; + }) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + setValue: setSearchValue, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + ComboboxLabel, + { + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.VisuallyHidden, { children: (0, import_i18n22.__)("Search items") }), + children: (0, import_i18n22.__)("Search items") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + Combobox, + { + autoSelect: "always", + placeholder: (0, import_i18n22.__)("Search"), + className: "dataviews-filters__search-widget-filter-combobox__input" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Icon, { icon: search_default }) }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + ComboboxList, + { + className: "dataviews-filters__search-widget-filter-combobox-list", + alwaysVisible: true, + children: [ + matches.map((element) => { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + ComboboxItem, + { + resetValueOnSelect: false, + value: element.value, + className: "dataviews-filters__search-widget-listitem", + hideOnClick: false, + setValueOnClick: false, + focusOnHover: true, + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes( + element.value + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + ComboboxItemValue, + { + className: "dataviews-filters__search-widget-filter-combobox-item-value", + value: element.label + } + ), + !!element.description && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description }) + ] + } + ) + ] + }, + element.value + ); + }), + !matches.length && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { children: (0, import_i18n22.__)("No results found") }) + ] + } + ) + ] + } + ); +} +function SearchWidget(props) { + const { elements, isLoading } = useElements({ + elements: props.filter.elements, + getElements: props.filter.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Spinner, {}) }); + } + if (elements.length === 0) { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n22.__)("No elements found") }); + } + const Widget = elements.length > 10 ? ComboboxList22 : ListBox; + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Widget, { ...props, filter: { ...props.filter, elements } }); +} + +// packages/dataviews/build-module/components/dataviews-filters/input-widget.mjs +var import_es6 = __toESM(require_es6(), 1); +var import_compose9 = __toESM(require_compose(), 1); +var import_element26 = __toESM(require_element(), 1); +var import_components20 = __toESM(require_components(), 1); +var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); +function InputWidget({ + filter, + view, + onChangeView, + fields +}) { + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const field = (0, import_element26.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Deactivate validation for filters. + isValid: {}, + // Configure getValue/setValue as if Item was a plain object. + getValue: ({ item }) => item[currentField.id], + setValue: ({ value }) => ({ + [currentField.id]: value + }) + }; + } + return currentField; + }, [fields, filter.field]); + const data = (0, import_element26.useMemo)(() => { + return (view.filters ?? []).reduce( + (acc, activeFilter) => { + acc[activeFilter.field] = activeFilter.value; + return acc; + }, + {} + ); + }, [view.filters]); + const handleChange = (0, import_compose9.useEvent)((updatedData) => { + if (!field || !currentFilter) { + return; + } + const nextValue = field.getValue({ item: updatedData }); + if ((0, import_es6.default)(nextValue, currentValue)) { + return; + } + onChangeView({ + ...view, + filters: (view.filters ?? []).map( + (_filter) => _filter.field === filter.field ? { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + // Consider empty strings as undefined: + // + // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records + // - empty string as value means "search empty string": returns only the records that have an empty string as value + // + // In practice, this means the filter will not be able to find an empty string as the value. + value: nextValue === "" ? void 0 : nextValue + } : _filter + ) + }); + }); + if (!field || !field.Edit || !currentFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + import_components20.Flex, + { + className: "dataviews-filters__user-input-widget", + gap: 2.5, + direction: "column", + children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + field.Edit, + { + hideLabelFromVision: true, + data, + field, + operator: currentFilter.operator, + onChange: handleChange + } + ) + } + ); +} + +// packages/dataviews/node_modules/date-fns/constants.js +var daysInYear = 365.2425; +var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3; +var minTime = -maxTime; +var millisecondsInWeek = 6048e5; +var millisecondsInDay = 864e5; +var secondsInHour = 3600; +var secondsInDay = secondsInHour * 24; +var secondsInWeek = secondsInDay * 7; +var secondsInYear = secondsInDay * daysInYear; +var secondsInMonth = secondsInYear / 12; +var secondsInQuarter = secondsInMonth * 3; +var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom"); + +// packages/dataviews/node_modules/date-fns/constructFrom.js +function constructFrom(date, value) { + if (typeof date === "function") return date(value); + if (date && typeof date === "object" && constructFromSymbol in date) + return date[constructFromSymbol](value); + if (date instanceof Date) return new date.constructor(value); + return new Date(value); +} + +// packages/dataviews/node_modules/date-fns/toDate.js +function toDate(argument, context) { + return constructFrom(context || argument, argument); +} + +// packages/dataviews/node_modules/date-fns/addDays.js +function addDays(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) return _date; + _date.setDate(_date.getDate() + amount); + return _date; +} + +// packages/dataviews/node_modules/date-fns/addMonths.js +function addMonths(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) { + return _date; + } + const dayOfMonth = _date.getDate(); + const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime()); + endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); + const daysInMonth = endOfDesiredMonth.getDate(); + if (dayOfMonth >= daysInMonth) { + return endOfDesiredMonth; + } else { + _date.setFullYear( + endOfDesiredMonth.getFullYear(), + endOfDesiredMonth.getMonth(), + dayOfMonth + ); + return _date; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js +var defaultOptions = {}; +function getDefaultOptions() { + return defaultOptions; +} + +// packages/dataviews/node_modules/date-fns/startOfWeek.js +function startOfWeek(date, options) { + const defaultOptions2 = getDefaultOptions(); + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const _date = toDate(date, options?.in); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + _date.setDate(_date.getDate() - diff); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeek.js +function startOfISOWeek(date, options) { + return startOfWeek(date, { ...options, weekStartsOn: 1 }); +} + +// packages/dataviews/node_modules/date-fns/getISOWeekYear.js +function getISOWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const fourthOfJanuaryOfNextYear = constructFrom(_date, 0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); + const fourthOfJanuaryOfThisYear = constructFrom(_date, 0); + fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); + if (_date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (_date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +function getTimezoneOffsetInMilliseconds(date) { + const _date = toDate(date); + const utcDate = new Date( + Date.UTC( + _date.getFullYear(), + _date.getMonth(), + _date.getDate(), + _date.getHours(), + _date.getMinutes(), + _date.getSeconds(), + _date.getMilliseconds() + ) + ); + utcDate.setUTCFullYear(_date.getFullYear()); + return +date - +utcDate; +} + +// packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js +function normalizeDates(context, ...dates) { + const normalize = constructFrom.bind( + null, + context || dates.find((date) => typeof date === "object") + ); + return dates.map(normalize); +} + +// packages/dataviews/node_modules/date-fns/startOfDay.js +function startOfDay(date, options) { + const _date = toDate(date, options?.in); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js +function differenceInCalendarDays(laterDate, earlierDate, options) { + const [laterDate_, earlierDate_] = normalizeDates( + options?.in, + laterDate, + earlierDate + ); + const laterStartOfDay = startOfDay(laterDate_); + const earlierStartOfDay = startOfDay(earlierDate_); + const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay); + const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); + return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay); +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js +function startOfISOWeekYear(date, options) { + const year = getISOWeekYear(date, options); + const fourthOfJanuary = constructFrom(options?.in || date, 0); + fourthOfJanuary.setFullYear(year, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + return startOfISOWeek(fourthOfJanuary); +} + +// packages/dataviews/node_modules/date-fns/addWeeks.js +function addWeeks(date, amount, options) { + return addDays(date, amount * 7, options); +} + +// packages/dataviews/node_modules/date-fns/addYears.js +function addYears(date, amount, options) { + return addMonths(date, amount * 12, options); +} + +// packages/dataviews/node_modules/date-fns/isDate.js +function isDate(value) { + return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"; +} + +// packages/dataviews/node_modules/date-fns/isValid.js +function isValid(date) { + return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date))); +} + +// packages/dataviews/node_modules/date-fns/startOfMonth.js +function startOfMonth(date, options) { + const _date = toDate(date, options?.in); + _date.setDate(1); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfYear.js +function startOfYear(date, options) { + const date_ = toDate(date, options?.in); + date_.setFullYear(date_.getFullYear(), 0, 1); + date_.setHours(0, 0, 0, 0); + return date_; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +var formatDistanceLocale = { + lessThanXSeconds: { + one: "less than a second", + other: "less than {{count}} seconds" + }, + xSeconds: { + one: "1 second", + other: "{{count}} seconds" + }, + halfAMinute: "half a minute", + lessThanXMinutes: { + one: "less than a minute", + other: "less than {{count}} minutes" + }, + xMinutes: { + one: "1 minute", + other: "{{count}} minutes" + }, + aboutXHours: { + one: "about 1 hour", + other: "about {{count}} hours" + }, + xHours: { + one: "1 hour", + other: "{{count}} hours" + }, + xDays: { + one: "1 day", + other: "{{count}} days" + }, + aboutXWeeks: { + one: "about 1 week", + other: "about {{count}} weeks" + }, + xWeeks: { + one: "1 week", + other: "{{count}} weeks" + }, + aboutXMonths: { + one: "about 1 month", + other: "about {{count}} months" + }, + xMonths: { + one: "1 month", + other: "{{count}} months" + }, + aboutXYears: { + one: "about 1 year", + other: "about {{count}} years" + }, + xYears: { + one: "1 year", + other: "{{count}} years" + }, + overXYears: { + one: "over 1 year", + other: "over {{count}} years" + }, + almostXYears: { + one: "almost 1 year", + other: "almost {{count}} years" + } +}; +var formatDistance = (token, count, options) => { + let result; + const tokenValue = formatDistanceLocale[token]; + if (typeof tokenValue === "string") { + result = tokenValue; + } else if (count === 1) { + result = tokenValue.one; + } else { + result = tokenValue.other.replace("{{count}}", count.toString()); + } + if (options?.addSuffix) { + if (options.comparison && options.comparison > 0) { + return "in " + result; + } else { + return result + " ago"; + } + } + return result; +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +function buildFormatLongFn(args) { + return (options = {}) => { + const width = options.width ? String(options.width) : args.defaultWidth; + const format6 = args.formats[width] || args.formats[args.defaultWidth]; + return format6; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js +var dateFormats = { + full: "EEEE, MMMM do, y", + long: "MMMM do, y", + medium: "MMM d, y", + short: "MM/dd/yyyy" +}; +var timeFormats = { + full: "h:mm:ss a zzzz", + long: "h:mm:ss a z", + medium: "h:mm:ss a", + short: "h:mm a" +}; +var dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: "{{date}}, {{time}}", + short: "{{date}}, {{time}}" +}; +var formatLong = { + date: buildFormatLongFn({ + formats: dateFormats, + defaultWidth: "full" + }), + time: buildFormatLongFn({ + formats: timeFormats, + defaultWidth: "full" + }), + dateTime: buildFormatLongFn({ + formats: dateTimeFormats, + defaultWidth: "full" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +var formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: "P" +}; +var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +function buildLocalizeFn(args) { + return (value, options) => { + const context = options?.context ? String(options.context) : "standalone"; + let valuesArray; + if (context === "formatting" && args.formattingValues) { + const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + const width = options?.width ? String(options.width) : defaultWidth; + valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + const defaultWidth = args.defaultWidth; + const width = options?.width ? String(options.width) : args.defaultWidth; + valuesArray = args.values[width] || args.values[defaultWidth]; + } + const index = args.argumentCallback ? args.argumentCallback(value) : value; + return valuesArray[index]; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js +var eraValues = { + narrow: ["B", "A"], + abbreviated: ["BC", "AD"], + wide: ["Before Christ", "Anno Domini"] +}; +var quarterValues = { + narrow: ["1", "2", "3", "4"], + abbreviated: ["Q1", "Q2", "Q3", "Q4"], + wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] +}; +var monthValues = { + narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], + abbreviated: [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + wide: [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] +}; +var dayValues = { + narrow: ["S", "M", "T", "W", "T", "F", "S"], + short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + wide: [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] +}; +var dayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + } +}; +var formattingDayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + } +}; +var ordinalNumber = (dirtyNumber, _options) => { + const number = Number(dirtyNumber); + const rem100 = number % 100; + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + "st"; + case 2: + return number + "nd"; + case 3: + return number + "rd"; + } + } + return number + "th"; +}; +var localize = { + ordinalNumber, + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: "wide" + }), + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: "wide", + argumentCallback: (quarter) => quarter - 1 + }), + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: "wide" + }), + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: "wide" + }), + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: "wide", + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: "wide" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js +function buildMatchFn(args) { + return (string, options = {}) => { + const width = options.width; + const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; + const matchResult = string.match(matchPattern); + if (!matchResult) { + return null; + } + const matchedString = matchResult[0]; + const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; + const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : ( + // [TODO] -- I challenge you to fix the type + findKey(parsePatterns, (pattern) => pattern.test(matchedString)) + ); + let value; + value = args.valueCallback ? args.valueCallback(key) : key; + value = options.valueCallback ? ( + // [TODO] -- I challenge you to fix the type + options.valueCallback(value) + ) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} +function findKey(object, predicate) { + for (const key in object) { + if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) { + return key; + } + } + return void 0; +} +function findIndex(array, predicate) { + for (let key = 0; key < array.length; key++) { + if (predicate(array[key])) { + return key; + } + } + return void 0; +} + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +function buildMatchPatternFn(args) { + return (string, options = {}) => { + const matchResult = string.match(args.matchPattern); + if (!matchResult) return null; + const matchedString = matchResult[0]; + const parseResult = string.match(args.parsePattern); + if (!parseResult) return null; + let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; + value = options.valueCallback ? options.valueCallback(value) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js +var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +var parseOrdinalNumberPattern = /\d+/i; +var matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i +}; +var parseEraPatterns = { + any: [/^b/i, /^(a|c)/i] +}; +var matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i +}; +var parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i] +}; +var matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i +}; +var parseMonthPatterns = { + narrow: [ + /^j/i, + /^f/i, + /^m/i, + /^a/i, + /^m/i, + /^j/i, + /^j/i, + /^a/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ], + any: [ + /^ja/i, + /^f/i, + /^mar/i, + /^ap/i, + /^may/i, + /^jun/i, + /^jul/i, + /^au/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ] +}; +var matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i +}; +var parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] +}; +var matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i +}; +var parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i + } +}; +var match = { + ordinalNumber: buildMatchPatternFn({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: (value) => parseInt(value, 10) + }), + era: buildMatchFn({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseEraPatterns, + defaultParseWidth: "any" + }), + quarter: buildMatchFn({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseQuarterPatterns, + defaultParseWidth: "any", + valueCallback: (index) => index + 1 + }), + month: buildMatchFn({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseMonthPatterns, + defaultParseWidth: "any" + }), + day: buildMatchFn({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseDayPatterns, + defaultParseWidth: "any" + }), + dayPeriod: buildMatchFn({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: "any", + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: "any" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US.js +var enUS = { + code: "en-US", + formatDistance, + formatLong, + formatRelative, + localize, + match, + options: { + weekStartsOn: 0, + firstWeekContainsDate: 1 + } +}; + +// packages/dataviews/node_modules/date-fns/getDayOfYear.js +function getDayOfYear(date, options) { + const _date = toDate(date, options?.in); + const diff = differenceInCalendarDays(_date, startOfYear(_date)); + const dayOfYear = diff + 1; + return dayOfYear; +} + +// packages/dataviews/node_modules/date-fns/getISOWeek.js +function getISOWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/getWeekYear.js +function getWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const firstWeekOfNextYear = constructFrom(options?.in || date, 0); + firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfWeek(firstWeekOfNextYear, options); + const firstWeekOfThisYear = constructFrom(options?.in || date, 0); + firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfWeek(firstWeekOfThisYear, options); + if (+_date >= +startOfNextYear) { + return year + 1; + } else if (+_date >= +startOfThisYear) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/startOfWeekYear.js +function startOfWeekYear(date, options) { + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const year = getWeekYear(date, options); + const firstWeek = constructFrom(options?.in || date, 0); + firstWeek.setFullYear(year, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + const _date = startOfWeek(firstWeek, options); + return _date; +} + +// packages/dataviews/node_modules/date-fns/getWeek.js +function getWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js +function addLeadingZeros(number, targetLength) { + const sign = number < 0 ? "-" : ""; + const output = Math.abs(number).toString().padStart(targetLength, "0"); + return sign + output; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js +var lightFormatters = { + // Year + y(date, token) { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); + }, + // Month + M(date, token) { + const month = date.getMonth(); + return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); + }, + // Day of the month + d(date, token) { + return addLeadingZeros(date.getDate(), token.length); + }, + // AM or PM + a(date, token) { + const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return dayPeriodEnumValue.toUpperCase(); + case "aaa": + return dayPeriodEnumValue; + case "aaaaa": + return dayPeriodEnumValue[0]; + case "aaaa": + default: + return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; + } + }, + // Hour [1-12] + h(date, token) { + return addLeadingZeros(date.getHours() % 12 || 12, token.length); + }, + // Hour [0-23] + H(date, token) { + return addLeadingZeros(date.getHours(), token.length); + }, + // Minute + m(date, token) { + return addLeadingZeros(date.getMinutes(), token.length); + }, + // Second + s(date, token) { + return addLeadingZeros(date.getSeconds(), token.length); + }, + // Fraction of second + S(date, token) { + const numberOfDigits = token.length; + const milliseconds = date.getMilliseconds(); + const fractionalSeconds = Math.trunc( + milliseconds * Math.pow(10, numberOfDigits - 3) + ); + return addLeadingZeros(fractionalSeconds, token.length); + } +}; + +// packages/dataviews/node_modules/date-fns/_lib/format/formatters.js +var dayPeriodEnum = { + am: "am", + pm: "pm", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" +}; +var formatters = { + // Era + G: function(date, token, localize2) { + const era = date.getFullYear() > 0 ? 1 : 0; + switch (token) { + // AD, BC + case "G": + case "GG": + case "GGG": + return localize2.era(era, { width: "abbreviated" }); + // A, B + case "GGGGG": + return localize2.era(era, { width: "narrow" }); + // Anno Domini, Before Christ + case "GGGG": + default: + return localize2.era(era, { width: "wide" }); + } + }, + // Year + y: function(date, token, localize2) { + if (token === "yo") { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize2.ordinalNumber(year, { unit: "year" }); + } + return lightFormatters.y(date, token); + }, + // Local week-numbering year + Y: function(date, token, localize2, options) { + const signedWeekYear = getWeekYear(date, options); + const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; + if (token === "YY") { + const twoDigitYear = weekYear % 100; + return addLeadingZeros(twoDigitYear, 2); + } + if (token === "Yo") { + return localize2.ordinalNumber(weekYear, { unit: "year" }); + } + return addLeadingZeros(weekYear, token.length); + }, + // ISO week-numbering year + R: function(date, token) { + const isoWeekYear = getISOWeekYear(date); + return addLeadingZeros(isoWeekYear, token.length); + }, + // Extended year. This is a single number designating the year of this calendar system. + // The main difference between `y` and `u` localizers are B.C. years: + // | Year | `y` | `u` | + // |------|-----|-----| + // | AC 1 | 1 | 1 | + // | BC 1 | 1 | 0 | + // | BC 2 | 2 | -1 | + // Also `yy` always returns the last two digits of a year, + // while `uu` pads single digit years to 2 characters and returns other years unchanged. + u: function(date, token) { + const year = date.getFullYear(); + return addLeadingZeros(year, token.length); + }, + // Quarter + Q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "Q": + return String(quarter); + // 01, 02, 03, 04 + case "QQ": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "Qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "QQQ": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "formatting" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "QQQQQ": + return localize2.quarter(quarter, { + width: "narrow", + context: "formatting" + }); + // 1st quarter, 2nd quarter, ... + case "QQQQ": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone quarter + q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "q": + return String(quarter); + // 01, 02, 03, 04 + case "qq": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "qqq": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "standalone" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "qqqqq": + return localize2.quarter(quarter, { + width: "narrow", + context: "standalone" + }); + // 1st quarter, 2nd quarter, ... + case "qqqq": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "standalone" + }); + } + }, + // Month + M: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + case "M": + case "MM": + return lightFormatters.M(date, token); + // 1st, 2nd, ..., 12th + case "Mo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "MMM": + return localize2.month(month, { + width: "abbreviated", + context: "formatting" + }); + // J, F, ..., D + case "MMMMM": + return localize2.month(month, { + width: "narrow", + context: "formatting" + }); + // January, February, ..., December + case "MMMM": + default: + return localize2.month(month, { width: "wide", context: "formatting" }); + } + }, + // Stand-alone month + L: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + // 1, 2, ..., 12 + case "L": + return String(month + 1); + // 01, 02, ..., 12 + case "LL": + return addLeadingZeros(month + 1, 2); + // 1st, 2nd, ..., 12th + case "Lo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "LLL": + return localize2.month(month, { + width: "abbreviated", + context: "standalone" + }); + // J, F, ..., D + case "LLLLL": + return localize2.month(month, { + width: "narrow", + context: "standalone" + }); + // January, February, ..., December + case "LLLL": + default: + return localize2.month(month, { width: "wide", context: "standalone" }); + } + }, + // Local week of year + w: function(date, token, localize2, options) { + const week = getWeek(date, options); + if (token === "wo") { + return localize2.ordinalNumber(week, { unit: "week" }); + } + return addLeadingZeros(week, token.length); + }, + // ISO week of year + I: function(date, token, localize2) { + const isoWeek = getISOWeek(date); + if (token === "Io") { + return localize2.ordinalNumber(isoWeek, { unit: "week" }); + } + return addLeadingZeros(isoWeek, token.length); + }, + // Day of the month + d: function(date, token, localize2) { + if (token === "do") { + return localize2.ordinalNumber(date.getDate(), { unit: "date" }); + } + return lightFormatters.d(date, token); + }, + // Day of year + D: function(date, token, localize2) { + const dayOfYear = getDayOfYear(date); + if (token === "Do") { + return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); + } + return addLeadingZeros(dayOfYear, token.length); + }, + // Day of week + E: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + switch (token) { + // Tue + case "E": + case "EE": + case "EEE": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "EEEEE": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "EEEEEE": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "EEEE": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Local day of week + e: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (Nth day of week with current locale or weekStartsOn) + case "e": + return String(localDayOfWeek); + // Padded numerical value + case "ee": + return addLeadingZeros(localDayOfWeek, 2); + // 1st, 2nd, ..., 7th + case "eo": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "eee": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "eeeee": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "eeeeee": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "eeee": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone local day of week + c: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (same as in `e`) + case "c": + return String(localDayOfWeek); + // Padded numerical value + case "cc": + return addLeadingZeros(localDayOfWeek, token.length); + // 1st, 2nd, ..., 7th + case "co": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "ccc": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "standalone" + }); + // T + case "ccccc": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "standalone" + }); + // Tu + case "cccccc": + return localize2.day(dayOfWeek, { + width: "short", + context: "standalone" + }); + // Tuesday + case "cccc": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "standalone" + }); + } + }, + // ISO day of week + i: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + switch (token) { + // 2 + case "i": + return String(isoDayOfWeek); + // 02 + case "ii": + return addLeadingZeros(isoDayOfWeek, token.length); + // 2nd + case "io": + return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); + // Tue + case "iii": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "iiiii": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "iiiiii": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "iiii": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // AM or PM + a: function(date, token, localize2) { + const hours = date.getHours(); + const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "aaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "aaaaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "aaaa": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // AM, PM, midnight, noon + b: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours === 12) { + dayPeriodEnumValue = dayPeriodEnum.noon; + } else if (hours === 0) { + dayPeriodEnumValue = dayPeriodEnum.midnight; + } else { + dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + } + switch (token) { + case "b": + case "bb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "bbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "bbbbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "bbbb": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // in the morning, in the afternoon, in the evening, at night + B: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours >= 17) { + dayPeriodEnumValue = dayPeriodEnum.evening; + } else if (hours >= 12) { + dayPeriodEnumValue = dayPeriodEnum.afternoon; + } else if (hours >= 4) { + dayPeriodEnumValue = dayPeriodEnum.morning; + } else { + dayPeriodEnumValue = dayPeriodEnum.night; + } + switch (token) { + case "B": + case "BB": + case "BBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "BBBBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "BBBB": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // Hour [1-12] + h: function(date, token, localize2) { + if (token === "ho") { + let hours = date.getHours() % 12; + if (hours === 0) hours = 12; + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return lightFormatters.h(date, token); + }, + // Hour [0-23] + H: function(date, token, localize2) { + if (token === "Ho") { + return localize2.ordinalNumber(date.getHours(), { unit: "hour" }); + } + return lightFormatters.H(date, token); + }, + // Hour [0-11] + K: function(date, token, localize2) { + const hours = date.getHours() % 12; + if (token === "Ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Hour [1-24] + k: function(date, token, localize2) { + let hours = date.getHours(); + if (hours === 0) hours = 24; + if (token === "ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Minute + m: function(date, token, localize2) { + if (token === "mo") { + return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" }); + } + return lightFormatters.m(date, token); + }, + // Second + s: function(date, token, localize2) { + if (token === "so") { + return localize2.ordinalNumber(date.getSeconds(), { unit: "second" }); + } + return lightFormatters.s(date, token); + }, + // Fraction of second + S: function(date, token) { + return lightFormatters.S(date, token); + }, + // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) + X: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + if (timezoneOffset === 0) { + return "Z"; + } + switch (token) { + // Hours and optional minutes + case "X": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XX` + case "XXXX": + case "XX": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XXX` + case "XXXXX": + case "XXX": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) + x: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Hours and optional minutes + case "x": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xx` + case "xxxx": + case "xx": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xxx` + case "xxxxx": + case "xxx": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (GMT) + O: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "O": + case "OO": + case "OOO": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "OOOO": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (specific non-location) + z: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "z": + case "zz": + case "zzz": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "zzzz": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Seconds timestamp + t: function(date, token, _localize) { + const timestamp = Math.trunc(+date / 1e3); + return addLeadingZeros(timestamp, token.length); + }, + // Milliseconds timestamp + T: function(date, token, _localize) { + return addLeadingZeros(+date, token.length); + } +}; +function formatTimezoneShort(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = Math.trunc(absOffset / 60); + const minutes = absOffset % 60; + if (minutes === 0) { + return sign + String(hours); + } + return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); +} +function formatTimezoneWithOptionalMinutes(offset, delimiter) { + if (offset % 60 === 0) { + const sign = offset > 0 ? "-" : "+"; + return sign + addLeadingZeros(Math.abs(offset) / 60, 2); + } + return formatTimezone(offset, delimiter); +} +function formatTimezone(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); + const minutes = addLeadingZeros(absOffset % 60, 2); + return sign + hours + delimiter + minutes; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js +var dateLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "P": + return formatLong2.date({ width: "short" }); + case "PP": + return formatLong2.date({ width: "medium" }); + case "PPP": + return formatLong2.date({ width: "long" }); + case "PPPP": + default: + return formatLong2.date({ width: "full" }); + } +}; +var timeLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "p": + return formatLong2.time({ width: "short" }); + case "pp": + return formatLong2.time({ width: "medium" }); + case "ppp": + return formatLong2.time({ width: "long" }); + case "pppp": + default: + return formatLong2.time({ width: "full" }); + } +}; +var dateTimeLongFormatter = (pattern, formatLong2) => { + const matchResult = pattern.match(/(P+)(p+)?/) || []; + const datePattern = matchResult[1]; + const timePattern = matchResult[2]; + if (!timePattern) { + return dateLongFormatter(pattern, formatLong2); + } + let dateTimeFormat; + switch (datePattern) { + case "P": + dateTimeFormat = formatLong2.dateTime({ width: "short" }); + break; + case "PP": + dateTimeFormat = formatLong2.dateTime({ width: "medium" }); + break; + case "PPP": + dateTimeFormat = formatLong2.dateTime({ width: "long" }); + break; + case "PPPP": + default: + dateTimeFormat = formatLong2.dateTime({ width: "full" }); + break; + } + return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); +}; +var longFormatters = { + p: timeLongFormatter, + P: dateTimeLongFormatter +}; + +// packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js +var dayOfYearTokenRE = /^D+$/; +var weekYearTokenRE = /^Y+$/; +var throwTokens = ["D", "DD", "YY", "YYYY"]; +function isProtectedDayOfYearToken(token) { + return dayOfYearTokenRE.test(token); +} +function isProtectedWeekYearToken(token) { + return weekYearTokenRE.test(token); +} +function warnOrThrowProtectedError(token, format6, input) { + const _message = message(token, format6, input); + console.warn(_message); + if (throwTokens.includes(token)) throw new RangeError(_message); +} +function message(token, format6, input) { + const subject = token[0] === "Y" ? "years" : "days of the month"; + return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format6}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; +} + +// packages/dataviews/node_modules/date-fns/format.js +var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; +var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp = /^'([^]*?)'?$/; +var doubleQuoteRegExp = /''/g; +var unescapedLatinCharacterRegExp = /[a-zA-Z]/; +function format(date, formatStr, options) { + const defaultOptions2 = getDefaultOptions(); + const locale = options?.locale ?? defaultOptions2.locale ?? enUS; + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const originalDate = toDate(date, options?.in); + if (!isValid(originalDate)) { + throw new RangeError("Invalid time value"); + } + let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => { + const firstCharacter = substring[0]; + if (firstCharacter === "p" || firstCharacter === "P") { + const longFormatter = longFormatters[firstCharacter]; + return longFormatter(substring, locale.formatLong); + } + return substring; + }).join("").match(formattingTokensRegExp).map((substring) => { + if (substring === "''") { + return { isToken: false, value: "'" }; + } + const firstCharacter = substring[0]; + if (firstCharacter === "'") { + return { isToken: false, value: cleanEscapedString(substring) }; + } + if (formatters[firstCharacter]) { + return { isToken: true, value: substring }; + } + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" + ); + } + return { isToken: false, value: substring }; + }); + if (locale.localize.preprocessor) { + parts = locale.localize.preprocessor(originalDate, parts); + } + const formatterOptions = { + firstWeekContainsDate, + weekStartsOn, + locale + }; + return parts.map((part) => { + if (!part.isToken) return part.value; + const token = part.value; + if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { + warnOrThrowProtectedError(token, formatStr, String(date)); + } + const formatter = formatters[token[0]]; + return formatter(originalDate, token, locale.localize, formatterOptions); + }).join(""); +} +function cleanEscapedString(input) { + const matched = input.match(escapedStringRegExp); + if (!matched) { + return input; + } + return matched[1].replace(doubleQuoteRegExp, "'"); +} + +// packages/dataviews/node_modules/date-fns/subDays.js +function subDays(date, amount, options) { + return addDays(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subMonths.js +function subMonths(date, amount, options) { + return addMonths(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subWeeks.js +function subWeeks(date, amount, options) { + return addWeeks(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subYears.js +function subYears(date, amount, options) { + return addYears(date, -amount, options); +} + +// packages/dataviews/build-module/utils/operators.mjs +var import_i18n23 = __toESM(require_i18n(), 1); +var import_element27 = __toESM(require_element(), 1); +var import_date = __toESM(require_date(), 1); +var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); +var filterTextWrappers = { + Name: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }), + Value: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" }) +}; +function getRelativeDate(value, unit) { + switch (unit) { + case "days": + return subDays(/* @__PURE__ */ new Date(), value); + case "weeks": + return subWeeks(/* @__PURE__ */ new Date(), value); + case "months": + return subMonths(/* @__PURE__ */ new Date(), value); + case "years": + return subYears(/* @__PURE__ */ new Date(), value); + default: + return /* @__PURE__ */ new Date(); + } +} +var isNoneOperatorDefinition = { + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is none of"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */ + (0, import_i18n23.__)("%1$s is none of: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter: ((item, field, filterValue) => { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return !filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return !filterValue.includes(fieldValue); + } + return false; + }), + selection: "multi" +}; +var OPERATORS = [ + { + name: OPERATOR_IS_ANY, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return filterValue.includes(fieldValue); + } + return false; + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NONE, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_IS_ALL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes all"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes all: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + return filterValue.every((value) => { + return field.getValue({ item })?.includes(value); + }); + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NOT_ALL, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_BETWEEN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Between (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Item count"). 2: Filter value min. 3: Filter value max. e.g.: "Item count between (inc): 10 and 180". */ + (0, import_i18n23.__)( + "%1$s between (inc): %2$s and %3$s" + ), + filter.name, + activeElements[0].label[0], + activeElements[0].label[1] + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!Array.isArray(filterValue) || filterValue.length !== 2 || filterValue[0] === void 0 || filterValue[1] === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") { + return fieldValue >= filterValue[0] && fieldValue <= filterValue[1]; + } + return false; + }, + selection: "custom" + }, + { + name: OPERATOR_IN_THE_PAST, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("In the past"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */ + (0, import_i18n23.__)( + "%1$s is in the past: %2$s" + ), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date(); + }, + selection: "custom" + }, + { + name: OPERATOR_OVER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Over"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */ + (0, import_i18n23.__)("%1$s is over: %2$s"), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue < targetDate; + }, + selection: "custom" + }, + { + name: OPERATOR_IS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue === field.getValue({ item }) || filterValue === void 0; + }, + selection: "single" + }, + { + name: OPERATOR_IS_NOT, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is not"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue !== field.getValue({ item }); + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */ + (0, import_i18n23.__)("%1$s is less than: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue < filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue > filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is less than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue <= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue >= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is before: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate < filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is after: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate > filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or before: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate <= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or after: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate >= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Contains"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */ + (0, import_i18n23.__)("%1$s contains: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Doesn't contain"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */ + (0, import_i18n23.__)( + "%1$s doesn't contain: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_STARTS_WITH, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Starts with"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */ + (0, import_i18n23.__)("%1$s starts with: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("On"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() === fieldDate.getTime(); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Not on"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() !== fieldDate.getTime(); + }, + selection: "single" + } +]; +var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name); +var getAllOperatorNames = () => OPERATORS.map((op) => op.name); +var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some( + (op) => op.name === name +); +var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); +var ENTER = "Enter"; +var SPACE = " "; +var FilterText = ({ + activeElements, + filterInView, + filter +}) => { + if (activeElements === void 0 || activeElements.length === 0) { + return filter.name; + } + const operator = getOperatorByName(filterInView?.operator); + if (operator !== void 0) { + return operator.filterText(filter, activeElements); + } + return (0, import_i18n24.sprintf)( + /* translators: 1: Filter name e.g.: "Unknown status for Author". */ + (0, import_i18n24.__)("Unknown status for %1$s"), + filter.name + ); +}; +function OperatorSelector({ + filter, + view, + onChangeView +}) { + const operatorOptions = filter.operators?.map((operator) => ({ + value: operator, + label: getOperatorByName(operator)?.label || operator + })); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const value = currentFilter?.operator || filter.operators[0]; + return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "flex-start", + className: "dataviews-filters__summary-operators-container", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_components21.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }), + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.SelectControl, + { + className: "dataviews-filters__summary-operators-filter-select", + label: (0, import_i18n24.__)("Conditions"), + value, + options: operatorOptions, + onChange: (newValue) => { + const newOperator = newValue; + const currentOperator = currentFilter?.operator; + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + const currentOpSelectionModel = getOperatorByName( + currentOperator + )?.selection; + const newOpSelectionModel = getOperatorByName( + newOperator + )?.selection; + const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [ + currentOpSelectionModel, + newOpSelectionModel + ].includes("custom"); + return { + ..._filter, + value: shouldResetValue ? void 0 : _filter.value, + operator: newOperator + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: newOperator, + value: void 0 + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + size: "small", + variant: "minimal", + hideLabelFromVision: true + } + ) + ] + } + ); +} +function Filter({ + addFilterRef, + openedFilter, + fields, + ...commonProps +}) { + const toggleRef = (0, import_element28.useRef)(null); + const { filter, view, onChangeView } = commonProps; + const filterInView = view.filters?.find( + (f2) => f2.field === filter.field + ); + let activeElements = []; + const field = (0, import_element28.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Configure getValue as if Item was a plain object. + // See related input-widget.tsx + getValue: ({ item }) => item[currentField.id] + }; + } + return currentField; + }, [fields, filter.field]); + const { elements } = useElements({ + elements: filter.elements, + getElements: filter.getElements + }); + if (elements.length > 0) { + activeElements = elements.filter((element) => { + if (filter.singleSelection) { + return element.value === filterInView?.value; + } + return filterInView?.value?.includes(element.value); + }); + } else if (Array.isArray(filterInView?.value)) { + const label = filterInView.value.map((v2) => { + const formattedValue = field?.getValueFormatted({ + item: { [field.id]: v2 }, + field + }); + return formattedValue || String(v2); + }); + activeElements = [ + { + value: filterInView.value, + // @ts-ignore + label + } + ]; + } else if (typeof filterInView?.value === "object") { + activeElements = [ + { value: filterInView.value, label: filterInView.value } + ]; + } else if (filterInView?.value !== void 0) { + const label = field !== void 0 ? field.getValueFormatted({ + item: { [field.id]: filterInView.value }, + field + }) : String(filterInView.value); + activeElements = [ + { + value: filterInView.value, + label + } + ]; + } + const isPrimary = filter.isPrimary; + const isLocked = filterInView?.isLocked; + const hasValues = !isLocked && filterInView?.value !== void 0; + const canResetOrRemove = !isLocked && (!isPrimary || hasValues); + return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.Dropdown, + { + defaultOpen: openedFilter === filter.field, + contentClassName: "dataviews-filters__summary-popover", + popoverProps: { placement: "bottom-start", role: "dialog" }, + onClose: () => { + toggleRef.current?.focus(); + }, + renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [ + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.Tooltip, + { + text: (0, import_i18n24.sprintf)( + /* translators: 1: Filter name. */ + (0, import_i18n24.__)("Filter by: %1$s"), + filter.name.toLowerCase() + ), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + "div", + { + className: clsx_default( + "dataviews-filters__summary-chip", + { + "has-reset": canResetOrRemove, + "has-values": hasValues, + "is-not-clickable": isLocked + } + ), + role: "button", + tabIndex: isLocked ? -1 : 0, + onClick: () => { + if (!isLocked) { + onToggle(); + } + }, + onKeyDown: (event) => { + if (!isLocked && [ENTER, SPACE].includes(event.key)) { + onToggle(); + event.preventDefault(); + } + }, + "aria-disabled": isLocked, + "aria-pressed": isOpen, + "aria-expanded": isOpen, + ref: toggleRef, + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + FilterText, + { + activeElements, + filterInView, + filter + } + ) + } + ) + } + ), + canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.Tooltip, + { + text: isPrimary ? (0, import_i18n24.__)("Reset") : (0, import_i18n24.__)("Remove"), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + "button", + { + className: clsx_default( + "dataviews-filters__summary-chip-remove", + { "has-values": hasValues } + ), + onClick: () => { + onChangeView({ + ...view, + page: 1, + filters: view.filters?.filter( + (_filter) => _filter.field !== filter.field + ) + }); + if (!isPrimary) { + addFilterRef.current?.focus(); + } else { + toggleRef.current?.focus(); + } + }, + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_components21.Icon, { icon: close_small_default }) + } + ) + } + ) + ] }), + renderContent: () => { + return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Stack, { direction: "column", justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(OperatorSelector, { ...commonProps }), + commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + SearchWidget, + { + ...commonProps, + filter: { + ...commonProps.filter, + elements + } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(InputWidget, { ...commonProps, fields }) + ] }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/add-filter.mjs +var import_components22 = __toESM(require_components(), 1); +var import_i18n25 = __toESM(require_i18n(), 1); +var import_element29 = __toESM(require_element(), 1); +var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu4 } = unlock(import_components22.privateApis); +function AddFilterMenu({ + filters, + view, + onChangeView, + setOpenedFilter, + triggerProps +}) { + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Menu4, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.TriggerButton, { ...triggerProps }), + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Menu4.Item, + { + onClick: () => { + setOpenedFilter(filter.field); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: filter.field, + value: void 0, + operator: filter.operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.ItemLabel, { children: filter.name }) + }, + filter.field + ); + }) }) + ] }); +} +function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) { + if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) { + return null; + } + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + AddFilterMenu, + { + triggerProps: { + render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components22.Button, + { + accessibleWhenDisabled: true, + size: "compact", + className: "dataviews-filters-button", + variant: "tertiary", + disabled: !inactiveFilters.length, + ref + } + ), + children: (0, import_i18n25.__)("Add filter") + }, + ...{ filters, view, onChangeView, setOpenedFilter } + } + ); +} +var add_filter_default = (0, import_element29.forwardRef)(AddFilter); + +// packages/dataviews/build-module/components/dataviews-filters/reset-filters.mjs +var import_components23 = __toESM(require_components(), 1); +var import_i18n26 = __toESM(require_i18n(), 1); +var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); +function ResetFilter({ + filters, + view, + onChangeView +}) { + const isPrimary = (field) => filters.some( + (_filter) => _filter.field === field && _filter.isPrimary + ); + const isDisabled = !view.search && !view.filters?.some( + (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field)) + ); + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + import_components23.Button, + { + disabled: isDisabled, + accessibleWhenDisabled: true, + size: "compact", + variant: "tertiary", + className: "dataviews-filters__reset-button", + onClick: () => { + onChangeView({ + ...view, + page: 1, + search: "", + filters: view.filters?.filter((f2) => !!f2.isLocked) || [] + }); + }, + children: (0, import_i18n26.__)("Reset") + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/use-filters.mjs +var import_element30 = __toESM(require_element(), 1); +function useFilters(fields, view) { + return (0, import_element30.useMemo)(() => { + const filters = []; + fields.forEach((field) => { + if (field.filterBy === false || !field.hasElements && !field.Edit) { + return; + } + const operators = field.filterBy.operators; + const isPrimary = !!field.filterBy?.isPrimary; + const isLocked = view.filters?.some( + (f2) => f2.field === field.id && !!f2.isLocked + ) ?? false; + filters.push({ + field: field.id, + name: field.label, + elements: field.elements, + getElements: field.getElements, + hasElements: field.hasElements, + singleSelection: operators.some( + (op) => isSingleSelectionOperator(op) + ), + operators, + isVisible: isLocked || isPrimary || !!view.filters?.some( + (f2) => f2.field === field.id && isRegisteredOperator(f2.operator) + ), + isPrimary, + isLocked + }); + }); + filters.sort((a2, b2) => { + if (a2.isLocked && !b2.isLocked) { + return -1; + } + if (!a2.isLocked && b2.isLocked) { + return 1; + } + if (a2.isPrimary && !b2.isPrimary) { + return -1; + } + if (!a2.isPrimary && b2.isPrimary) { + return 1; + } + return a2.name.localeCompare(b2.name); + }); + return filters; + }, [fields, view]); +} +var use_filters_default = useFilters; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); +function Filters({ className }) { + const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element31.useContext)(dataviews_context_default); + const addFilterRef = (0, import_element31.useRef)(null); + const filters = use_filters_default(fields, view); + const addFilter = /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + add_filter_default, + { + filters, + view, + onChangeView, + ref: addFilterRef, + setOpenedFilter + }, + "add-filter" + ); + const visibleFilters = filters.filter((filter) => filter.isVisible); + if (visibleFilters.length === 0) { + return null; + } + const filterComponents = [ + ...visibleFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + Filter, + { + filter, + view, + fields, + onChangeView, + addFilterRef, + openedFilter + }, + filter.field + ); + }), + addFilter + ]; + filterComponents.push( + /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + ResetFilter, + { + filters, + view, + onChangeView + }, + "reset-filters" + ) + ); + return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + gap: "sm", + style: { width: "fit-content" }, + wrap: "wrap", + className, + children: filterComponents + } + ); +} +var filters_default = (0, import_element31.memo)(Filters); + +// packages/dataviews/build-module/components/dataviews-filters/toggle.mjs +var import_element32 = __toESM(require_element(), 1); +var import_components24 = __toESM(require_components(), 1); +var import_i18n27 = __toESM(require_i18n(), 1); +var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); +function FiltersToggle() { + const { + filters, + view, + onChangeView, + setOpenedFilter, + isShowingFilter, + setIsShowingFilter + } = (0, import_element32.useContext)(dataviews_context_default); + const buttonRef = (0, import_element32.useRef)(null); + const onChangeViewWithFilterVisibility = (0, import_element32.useCallback)( + (_view) => { + onChangeView(_view); + setIsShowingFilter(true); + }, + [onChangeView, setIsShowingFilter] + ); + if (filters.length === 0) { + return null; + } + const hasVisibleFilters = filters.some((filter) => filter.isVisible); + const addFilterButtonProps = { + label: (0, import_i18n27.__)("Add filter"), + "aria-expanded": false, + isPressed: false + }; + const toggleFiltersButtonProps = { + label: (0, import_i18n27._x)("Filter", "verb"), + "aria-expanded": isShowingFilter, + isPressed: isShowingFilter, + onClick: () => { + if (!isShowingFilter) { + setOpenedFilter(null); + } + setIsShowingFilter(!isShowingFilter); + } + }; + const hasPrimaryOrLockedFilters = filters.some( + (filter) => filter.isPrimary || filter.isLocked + ); + const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components24.Button, + { + ref: buttonRef, + className: "dataviews-filters__visibility-toggle", + size: "compact", + icon: funnel_default, + disabled: hasPrimaryOrLockedFilters, + accessibleWhenDisabled: true, + ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + AddFilterMenu, + { + filters, + view, + onChangeView: onChangeViewWithFilterVisibility, + setOpenedFilter, + triggerProps: { render: buttonComponent } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + FilterVisibilityToggle, + { + buttonRef, + filtersCount: view.filters?.length, + children: buttonComponent + } + ) }); +} +function FilterVisibilityToggle({ + buttonRef, + filtersCount, + children +}) { + (0, import_element32.useEffect)( + () => () => { + buttonRef.current?.focus(); + }, + [buttonRef] + ); + return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [ + children, + !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount }) + ] }); +} +var toggle_default = FiltersToggle; + +// packages/dataviews/build-module/components/dataviews-filters/filters-toggled.mjs +var import_element33 = __toESM(require_element(), 1); +var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); +function FiltersToggled(props) { + const { isShowingFilter } = (0, import_element33.useContext)(dataviews_context_default); + if (!isShowingFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(filters_default, { ...props }); +} +var filters_toggled_default = FiltersToggled; + +// packages/dataviews/build-module/components/dataviews-layout/index.mjs +var import_element34 = __toESM(require_element(), 1); +var import_i18n28 = __toESM(require_i18n(), 1); +var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); +function DataViewsLayout({ className }) { + const { + actions = [], + data, + fields, + getItemId, + getItemLevel, + hasInitiallyLoaded, + isLoading, + view, + onChangeView, + selection, + onChangeSelection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + defaultLayouts, + empty = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { children: (0, import_i18n28.__)("No results") }) + } = (0, import_element34.useContext)(dataviews_context_default); + if (!hasInitiallyLoaded) { + return null; + } + const ViewComponent = VIEW_LAYOUTS.find( + (v2) => v2.type === view.type && defaultLayouts[v2.type] + )?.component; + return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + ViewComponent, + { + className, + actions, + data, + fields, + getItemId, + getItemLevel, + isLoading, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + renderItemLink, + isItemClickable, + view, + empty + } + ); +} + +// packages/dataviews/build-module/components/dataviews-footer/index.mjs +var import_element35 = __toESM(require_element(), 1); +var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); +var EMPTY_ARRAY5 = []; +function DataViewsFooter() { + const { + view, + paginationInfo: { totalItems = 0, totalPages }, + data, + actions = EMPTY_ARRAY5, + isLoading, + hasInitiallyLoaded, + hasInfiniteScrollHandler + } = (0, import_element35.useContext)(dataviews_context_default); + const isRefreshing = !!isLoading && hasInitiallyLoaded && !hasInfiniteScrollHandler && !!data?.length; + const isDelayedRefreshing = useDelayedLoading(!!isRefreshing); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type); + if (!isRefreshing && (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions)) { + return null; + } + return (!!totalItems || isRefreshing) && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( + "div", + { + className: "dataviews-footer", + inert: isRefreshing ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)( + Stack, + { + direction: "row", + justify: "end", + align: "center", + className: clsx_default("dataviews-footer__content", { + "is-refreshing": isDelayedRefreshing + }), + gap: "sm", + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(BulkActionsFooter, {}), + /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(dataviews_pagination_default, {}) + ] + } + ) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-search/index.mjs +var import_i18n29 = __toESM(require_i18n(), 1); +var import_element36 = __toESM(require_element(), 1); +var import_components25 = __toESM(require_components(), 1); +var import_compose10 = __toESM(require_compose(), 1); +var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); +var DataViewsSearch = (0, import_element36.memo)(function Search({ label }) { + const { view, onChangeView } = (0, import_element36.useContext)(dataviews_context_default); + const [search, setSearch, debouncedSearch] = (0, import_compose10.useDebouncedInput)( + view.search + ); + (0, import_element36.useEffect)(() => { + setSearch(view.search ?? ""); + }, [view.search, setSearch]); + const onChangeViewRef = (0, import_element36.useRef)(onChangeView); + const viewRef = (0, import_element36.useRef)(view); + (0, import_element36.useEffect)(() => { + onChangeViewRef.current = onChangeView; + viewRef.current = view; + }, [onChangeView, view]); + (0, import_element36.useEffect)(() => { + if (debouncedSearch !== viewRef.current?.search) { + onChangeViewRef.current({ + ...viewRef.current, + page: 1, + search: debouncedSearch + }); + } + }, [debouncedSearch]); + const searchLabel = label || (0, import_i18n29.__)("Search"); + return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + import_components25.SearchControl, + { + className: "dataviews-search", + onChange: setSearch, + value: search, + label: searchLabel, + placeholder: searchLabel, + size: "compact" + } + ); +}); +var dataviews_search_default = DataViewsSearch; + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_components27 = __toESM(require_components(), 1); +var import_i18n31 = __toESM(require_i18n(), 1); +var import_element38 = __toESM(require_element(), 1); +var import_warning = __toESM(require_warning(), 1); +var import_compose11 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +var import_components26 = __toESM(require_components(), 1); +var import_i18n30 = __toESM(require_i18n(), 1); +var import_element37 = __toESM(require_element(), 1); +var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); +function InfiniteScrollToggle() { + const context = (0, import_element37.useContext)(dataviews_context_default); + const { view, onChangeView } = context; + const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false; + if (!context.hasInfiniteScrollHandler) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)( + import_components26.ToggleControl, + { + label: (0, import_i18n30.__)("Enable infinite scroll"), + help: (0, import_i18n30.__)( + "Automatically load more content as you scroll, instead of showing pagination links." + ), + checked: infiniteScrollEnabled, + onChange: (newValue) => { + onChangeView({ + ...view, + infiniteScrollEnabled: newValue + }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu5 } = unlock(import_components27.privateApis); +var DATAVIEWS_CONFIG_POPOVER_PROPS = { + className: "dataviews-config__popover", + placement: "bottom-end", + offset: 9 +}; +function ViewTypeMenu() { + const { view, onChangeView, defaultLayouts } = (0, import_element38.useContext)(dataviews_context_default); + const availableLayouts = Object.keys(defaultLayouts); + if (availableLayouts.length <= 1) { + return null; + } + const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type); + return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Menu5, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + Menu5.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Button, + { + size: "compact", + icon: activeView?.icon, + label: (0, import_i18n31.__)("Layout") + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => { + const config = VIEW_LAYOUTS.find( + (v2) => v2.type === layout + ); + if (!config) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + Menu5.RadioItem, + { + value: layout, + name: "view-actions-available-view", + checked: layout === view.type, + hideOnClick: true, + onChange: (e2) => { + switch (e2.target.value) { + case "list": + case "grid": + case "table": + case "pickerGrid": + case "pickerTable": + case "activity": + const viewWithoutLayout = { ...view }; + if ("layout" in viewWithoutLayout) { + delete viewWithoutLayout.layout; + } + return onChangeView({ + ...viewWithoutLayout, + type: e2.target.value, + ...defaultLayouts[e2.target.value] + }); + } + (0, import_warning.default)("Invalid dataview"); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Menu5.ItemLabel, { children: config.label }) + }, + layout + ); + }) }) + ] }); +} +function SortFieldControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const orderOptions = (0, import_element38.useMemo)(() => { + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + return sortableFields.map((field) => { + return { + label: field.label, + value: field.id + }; + }); + }, [fields]); + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.SelectControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n31.__)("Sort by"), + value: view.sort?.field, + options: orderOptions, + onChange: (value) => { + onChangeView({ + ...view, + sort: { + direction: view?.sort?.direction || "desc", + field: value + }, + showLevels: false + }); + } + } + ); +} +function SortDirectionControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + if (sortableFields.length === 0) { + return null; + } + let value = view.sort?.direction; + if (!value && view.sort?.field) { + value = "desc"; + } + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControl, + { + className: "dataviews-view-config__sort-direction", + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Order"), + value, + onChange: (newDirection) => { + if (newDirection === "asc" || newDirection === "desc") { + onChangeView({ + ...view, + sort: { + direction: newDirection, + field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field. + fields.find( + (field) => field.enableSorting !== false + )?.id || "" + }, + showLevels: false + }); + return; + } + (0, import_warning.default)("Invalid direction"); + }, + children: SORTING_DIRECTIONS.map((direction) => { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControlOptionIcon, + { + value: direction, + icon: sortIcons[direction], + label: sortLabels[direction] + }, + direction + ); + }) + } + ); +} +function ItemsPerPageControl() { + const { view, config, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const { infiniteScrollEnabled } = view; + if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControl, + { + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Items per page"), + value: view.perPage || 10, + disabled: !view?.sort?.field, + onChange: (newItemsPerPage) => { + const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10); + onChangeView({ + ...view, + perPage: newItemsPerPageNumber, + page: 1 + }); + }, + children: config.perPageSizes.map((value) => { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControlOption, + { + value, + label: value.toString() + }, + value + ); + }) + } + ); +} +function ResetViewButton() { + const { onReset } = (0, import_element38.useContext)(dataviews_context_default); + if (onReset === void 0) { + return null; + } + const isDisabled = onReset === false; + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Button, + { + variant: "tertiary", + size: "compact", + disabled: isDisabled, + accessibleWhenDisabled: true, + className: "dataviews-view-config__reset-button", + onClick: () => { + if (typeof onReset === "function") { + onReset(); + } + }, + children: (0, import_i18n31.__)("Reset view") + } + ); +} +function DataviewsViewConfigDropdown() { + const { view, onReset } = (0, import_element38.useContext)(dataviews_context_default); + const popoverId = (0, import_compose11.useInstanceId)( + _DataViewsViewConfig, + "dataviews-view-config-dropdown" + ); + const activeLayout = VIEW_LAYOUTS.find( + (layout) => layout.type === view.type + ); + const isModified = typeof onReset === "function"; + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Dropdown, + { + expandOnMobile: true, + popoverProps: { + ...DATAVIEWS_CONFIG_POPOVER_PROPS, + id: popoverId + }, + renderToggle: ({ onToggle, isOpen }) => { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "dataviews-view-config__toggle-wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Button, + { + size: "compact", + icon: cog_default, + label: (0, import_i18n31._x)( + "View options", + "View is used as a noun" + ), + onClick: onToggle, + "aria-expanded": isOpen ? "true" : "false", + "aria-controls": popoverId + } + ), + isModified && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "dataviews-view-config__modified-indicator" }) + ] }); + }, + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalDropdownContentWrapper, + { + paddingSize: "medium", + className: "dataviews-config__popover-content-wrapper", + children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-config", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)( + Stack, + { + direction: "row", + justify: "space-between", + align: "center", + className: "dataviews-view-config__header", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalHeading, + { + level: 2, + className: "dataviews-settings-section__title", + children: (0, import_i18n31.__)("Appearance") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ResetViewButton, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + className: "dataviews-view-config__sort-controls", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(SortFieldControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(SortDirectionControl, {}) + ] + } + ), + !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(activeLayout.viewConfigOptions, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(InfiniteScrollToggle, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ItemsPerPageControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PropertiesSection, {}) + ] }) + ] + } + ) + } + ) + } + ); +} +function _DataViewsViewConfig() { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ViewTypeMenu, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(DataviewsViewConfigDropdown, {}) + ] }); +} +var DataViewsViewConfig = (0, import_element38.memo)(_DataViewsViewConfig); +var dataviews_view_config_default = DataViewsViewConfig; + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_components28 = __toESM(require_components(), 1); +var import_element39 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs +function getCustomValidity(isValid2, validity) { + let customValidity; + if (isValid2?.required && validity?.required) { + customValidity = validity?.required?.message ? validity.required : void 0; + } else if (isValid2?.pattern && validity?.pattern) { + customValidity = validity.pattern; + } else if (isValid2?.min && validity?.min) { + customValidity = validity.min; + } else if (isValid2?.max && validity?.max) { + customValidity = validity.max; + } else if (isValid2?.minLength && validity?.minLength) { + customValidity = validity.minLength; + } else if (isValid2?.maxLength && validity?.maxLength) { + customValidity = validity.maxLength; + } else if (isValid2?.elements && validity?.elements) { + customValidity = validity.elements; + } else if (validity?.custom) { + customValidity = validity.custom; + } + return customValidity; +} + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); +var { ValidatedCheckboxControl } = unlock(import_components28.privateApis); +function Checkbox({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, label, description, isValid: isValid2 } = field; + const onChangeControl = (0, import_element39.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [data, getValue, onChange, setValue]); + return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)( + ValidatedCheckboxControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/combobox.mjs +var import_components29 = __toESM(require_components(), 1); +var import_element40 = __toESM(require_element(), 1); +var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); +var { ValidatedComboboxControl } = unlock(import_components29.privateApis); +function Combobox3({ + data, + field, + onChange, + hideLabelFromVision, + validity +}) { + const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element40.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_components29.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)( + ValidatedComboboxControl, + { + required: !!field.isValid?.required, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + placeholder, + options: elements, + onChange: onChangeControl, + hideLabelFromVision, + allowReset: true, + expandOnFocus: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_components31 = __toESM(require_components(), 1); +var import_element42 = __toESM(require_element(), 1); +var import_i18n33 = __toESM(require_i18n(), 1); +var import_date3 = __toESM(require_date(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs +var import_components30 = __toESM(require_components(), 1); +var import_element41 = __toESM(require_element(), 1); +var import_i18n32 = __toESM(require_i18n(), 1); +var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); +var TIME_UNITS_OPTIONS = { + [OPERATOR_IN_THE_PAST]: [ + { value: "days", label: (0, import_i18n32.__)("Days") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks") }, + { value: "months", label: (0, import_i18n32.__)("Months") }, + { value: "years", label: (0, import_i18n32.__)("Years") } + ], + [OPERATOR_OVER]: [ + { value: "days", label: (0, import_i18n32.__)("Days ago") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks ago") }, + { value: "months", label: (0, import_i18n32.__)("Months ago") }, + { value: "years", label: (0, import_i18n32.__)("Years ago") } + ] +}; +function RelativeDateControl({ + className, + data, + field, + onChange, + hideLabelFromVision, + operator +}) { + const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"]; + const { id, label, getValue, setValue } = field; + const fieldValue = getValue({ item: data }); + const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {}; + const onChangeValue = (0, import_element41.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: { value: Number(newValue), unit } + }) + ), + [onChange, setValue, data, unit] + ); + const onChangeUnit = (0, import_element41.useCallback)( + (newUnit) => onChange( + setValue({ + item: data, + value: { value: relValue, unit: newUnit } + }) + ), + [onChange, setValue, data, relValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components30.BaseControl, + { + id, + className: clsx_default(className, "dataviews-controls__relative-date"), + label, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Stack, { direction: "row", gap: "sm", children: [ + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components30.__experimentalNumberControl, + { + __next40pxDefaultSize: true, + className: "dataviews-controls__relative-date-number", + spinControls: "none", + min: 1, + step: 1, + value: relValue, + onChange: onChangeValue + } + ), + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components30.SelectControl, + { + className: "dataviews-controls__relative-date-unit", + __next40pxDefaultSize: true, + label: (0, import_i18n32.__)("Unit"), + value: unit, + options, + onChange: onChangeUnit, + hideLabelFromVision: true + } + ) + ] }) + } + ); +} + +// packages/dataviews/build-module/field-types/utils/parse-date-time.mjs +var import_date2 = __toESM(require_date(), 1); +function parseDateTime(dateTimeString) { + if (!dateTimeString) { + return null; + } + const parsed = (0, import_date2.getDate)(dateTimeString); + return parsed && isValid(parsed) ? parsed : null; +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar, ValidatedInputControl } = unlock(import_components31.privateApis); +var formatDateTime = (value) => { + if (!value) { + return ""; + } + return (0, import_date3.dateI18n)("Y-m-d\\TH:i", (0, import_date3.getDate)(value)); +}; +function CalendarDateTimeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, description, setValue, getValue, isValid: isValid2 } = field; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element42.useState)(() => { + const parsedDate = parseDateTime(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const inputControlRef = (0, import_element42.useRef)(null); + const validationTimeoutRef = (0, import_element42.useRef)(void 0); + const previousFocusRef = (0, import_element42.useRef)(null); + const onChangeCallback = (0, import_element42.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + (0, import_element42.useEffect)(() => { + return () => { + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + }; + }, []); + const onSelectDate = (0, import_element42.useCallback)( + (newDate) => { + let dateTimeValue; + if (newDate) { + const wpDate = (0, import_date3.dateI18n)("Y-m-d", newDate); + let wpTime; + if (value) { + wpTime = (0, import_date3.dateI18n)("H:i", (0, import_date3.getDate)(value)); + } else { + wpTime = (0, import_date3.dateI18n)("H:i", newDate); + } + const finalDateTime = (0, import_date3.getDate)(`${wpDate}T${wpTime}`); + dateTimeValue = finalDateTime.toISOString(); + onChangeCallback(dateTimeValue); + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + } else { + onChangeCallback(void 0); + } + previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement; + validationTimeoutRef.current = setTimeout(() => { + if (inputControlRef.current) { + inputControlRef.current.focus(); + inputControlRef.current.blur(); + onChangeCallback(dateTimeValue); + if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) { + previousFocusRef.current.focus(); + } + } + }, 0); + }, + [onChangeCallback, value] + ); + const handleManualDateTimeChange = (0, import_element42.useCallback)( + (newValue) => { + if (newValue) { + const dateTime = (0, import_date3.getDate)(newValue); + onChangeCallback(dateTime.toISOString()); + const parsedDate = parseDateTime(dateTime.toISOString()); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } else { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const { format: fieldFormat } = field; + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek; + const { + timezone: { string: timezoneString } + } = (0, import_date3.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components31.BaseControl, + { + id, + label: displayLabel, + help: description, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + DateCalendar, + { + style: { width: "100%" }, + selected: value ? parseDateTime(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + ValidatedInputControl, + { + ref: inputControlRef, + __next40pxDefaultSize: true, + required: !!isValid2?.required, + customValidity: getCustomValidity(isValid2, validity), + type: "datetime-local", + label: (0, import_i18n33.__)("Date time"), + hideLabelFromVision: true, + value: formatDateTime(value), + onChange: handleManualDateTimeChange + } + ) + ] }) + } + ); +} +function DateTime({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__datetime", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + CalendarDateTimeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/date.mjs +var import_components32 = __toESM(require_components(), 1); +var import_element43 = __toESM(require_element(), 1); +var import_i18n34 = __toESM(require_i18n(), 1); +var import_date4 = __toESM(require_date(), 1); +var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components32.privateApis); +var DATE_PRESETS = [ + { + id: "today", + label: (0, import_i18n34.__)("Today"), + getValue: () => (0, import_date4.getDate)(null) + }, + { + id: "yesterday", + label: (0, import_i18n34.__)("Yesterday"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 1); + } + }, + { + id: "past-week", + label: (0, import_i18n34.__)("Past week"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 7); + } + }, + { + id: "past-month", + label: (0, import_i18n34.__)("Past month"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subMonths(today, 1); + } + } +]; +var DATE_RANGE_PRESETS = [ + { + id: "last-7-days", + label: (0, import_i18n34.__)("Last 7 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 7), today]; + } + }, + { + id: "last-30-days", + label: (0, import_i18n34.__)("Last 30 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 30), today]; + } + }, + { + id: "month-to-date", + label: (0, import_i18n34.__)("Month to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfMonth(today), today]; + } + }, + { + id: "last-year", + label: (0, import_i18n34.__)("Last year"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subYears(today, 1), today]; + } + }, + { + id: "year-to-date", + label: (0, import_i18n34.__)("Year to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfYear(today), today]; + } + } +]; +var parseDate = (dateString) => { + if (!dateString) { + return null; + } + const parsed = (0, import_date4.getDate)(dateString); + return parsed && isValid(parsed) ? parsed : null; +}; +var formatDate = (date) => { + if (!date) { + return ""; + } + return typeof date === "string" ? date : format(date, "yyyy-MM-dd"); +}; +function ValidatedDateControl({ + field, + validity, + inputRefs, + isTouched, + setIsTouched, + children +}) { + const { isValid: isValid2 } = field; + const [customValidity, setCustomValidity] = (0, import_element43.useState)(void 0); + const validateRefs = (0, import_element43.useCallback)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + for (const ref of refs) { + const input = ref.current; + if (input && !input.validity.valid) { + setCustomValidity({ + type: "invalid", + message: input.validationMessage + }); + return; + } + } + setCustomValidity(void 0); + }, [inputRefs]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + for (const ref of refs) { + const input = ref.current; + if (input) { + input.setCustomValidity( + result?.type === "invalid" && result.message ? result.message : "" + ); + } + } + }, [inputRefs, isValid2, validity]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const handleInvalid = (event) => { + event.preventDefault(); + setIsTouched(true); + }; + for (const ref of refs) { + ref.current?.addEventListener("invalid", handleInvalid); + } + return () => { + for (const ref of refs) { + ref.current?.removeEventListener("invalid", handleInvalid); + } + }; + }, [inputRefs, setIsTouched]); + (0, import_element43.useEffect)(() => { + if (!isTouched) { + return; + } + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + if (result) { + setCustomValidity(result); + } else { + validateRefs(); + } + }, [isTouched, isValid2, validity, validateRefs]); + const onBlur = (event) => { + if (isTouched) { + return; + } + if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) { + setIsTouched(true); + } + }; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { onBlur, children: [ + children, + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + "p", + { + className: clsx_default( + "components-validated-control__indicator", + customValidity.type === "invalid" ? "is-invalid" : void 0 + ), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Icon, + { + className: "components-validated-control__indicator-icon", + icon: error_default, + size: 16, + fill: "currentColor" + } + ), + customValidity.message + ] + } + ) }) + ] }); +} +function CalendarDateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { + id, + label, + setValue, + getValue, + isValid: isValid2, + format: fieldFormat + } = field; + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + const parsedDate = parseDate(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const validityTargetRef = (0, import_element43.useRef)(null); + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const onSelectDate = (0, import_element43.useCallback)( + (newDate) => { + const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0; + onChangeCallback(dateValue); + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const presetDate = preset.getValue(); + const dateValue = formatDate(presetDate); + setCalendarMonth(presetDate); + onChangeCallback(dateValue); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (newValue) => { + onChangeCallback(newValue); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const { + timezone: { string: timezoneString } + } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: validityTargetRef, + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + disabled: !!selectedPresetId, + accessibleWhenDisabled: false, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: validityTargetRef, + type: "date", + label: (0, import_i18n34.__)("Date"), + hideLabelFromVision: true, + value, + onChange: handleManualDateChange, + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + DateCalendar2, + { + style: { width: "100%" }, + selected: value ? parseDate(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function CalendarDateRangeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, getValue, setValue, format: fieldFormat } = field; + let value; + const fieldValue = getValue({ item: data }); + if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) { + value = fieldValue; + } + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const selectedRange = (0, import_element43.useMemo)(() => { + if (!value) { + return { from: void 0, to: void 0 }; + } + const [from, to] = value; + return { + from: parseDate(from) || void 0, + to: parseDate(to) || void 0 + }; + }, [value]); + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + return selectedRange.from || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const fromInputRef = (0, import_element43.useRef)(null); + const toInputRef = (0, import_element43.useRef)(null); + const updateDateRange = (0, import_element43.useCallback)( + (fromDate, toDate2) => { + if (fromDate && toDate2) { + onChangeCallback([ + formatDate(fromDate), + formatDate(toDate2) + ]); + } else if (!fromDate && !toDate2) { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const onSelectCalendarRange = (0, import_element43.useCallback)( + (newRange) => { + updateDateRange(newRange?.from, newRange?.to); + setSelectedPresetId(null); + setIsTouched(true); + }, + [updateDateRange] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const [startDate, endDate] = preset.getValue(); + setCalendarMonth(startDate); + updateDateRange(startDate, endDate); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [updateDateRange] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (fromOrTo, newValue) => { + const [currentFrom, currentTo] = value || [ + void 0, + void 0 + ]; + const updatedFrom = fromOrTo === "from" ? newValue : currentFrom; + const updatedTo = fromOrTo === "to" ? newValue : currentTo; + updateDateRange(updatedFrom, updatedTo); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [value, updateDateRange] + ); + const { timezone } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (field.isValid?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!field.isValid?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: [fromInputRef, toInputRef], + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_RANGE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + accessibleWhenDisabled: false, + disabled: !!selectedPresetId, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "space-between", + className: "dataviews-controls__date-range-inputs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: fromInputRef, + type: "date", + label: (0, import_i18n34.__)("From"), + hideLabelFromVision: true, + value: value?.[0], + onChange: (newValue) => handleManualDateChange("from", newValue), + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: toInputRef, + type: "date", + label: (0, import_i18n34.__)("To"), + hideLabelFromVision: true, + value: value?.[1], + onChange: (newValue) => handleManualDateChange("to", newValue), + required: !!field.isValid?.required + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + DateRangeCalendar, + { + style: { width: "100%" }, + selected: selectedRange, + onSelect: onSelectCalendarRange, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezone.string || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function DateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__date", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + if (operator === OPERATOR_BETWEEN) { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + CalendarDateRangeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + CalendarDateControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/select.mjs +var import_components33 = __toESM(require_components(), 1); +var import_element44 = __toESM(require_element(), 1); +var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); +var { ValidatedSelectControl } = unlock(import_components33.privateApis); +function Select({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { type, label, description, getValue, setValue, isValid: isValid2 } = field; + const isMultiple = type === "array"; + const value = getValue({ item: data }) ?? (isMultiple ? [] : ""); + const onChangeControl = (0, import_element44.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components33.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + ValidatedSelectControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + options: elements, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + multiple: isMultiple + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs +var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); +var ELEMENTS_THRESHOLD = 10; +function AdaptiveSelect(props) { + const { field } = props; + const { elements } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (elements.length >= ELEMENTS_THRESHOLD) { + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Combobox3, { ...props }); + } + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Select, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_components35 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs +var import_components34 = __toESM(require_components(), 1); +var import_element45 = __toESM(require_element(), 1); +var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components34.privateApis); +function ValidatedText({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + type, + prefix, + suffix, + validity +}) { + const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element45.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: newValue + }) + ), + [data, setValue, onChange] + ); + return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + ValidatedInputControl2, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + hideLabelFromVision, + type, + prefix, + suffix, + pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); +function Email({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "email", + prefix: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_components35.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_components35.Icon, { icon: envelope_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/telephone.mjs +var import_components36 = __toESM(require_components(), 1); +var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); +function Telephone({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "tel", + prefix: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_components36.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_components36.Icon, { icon: mobile_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/url.mjs +var import_components37 = __toESM(require_components(), 1); +var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); +function Url({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "url", + prefix: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_components37.Icon, { icon: link_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs +var import_components38 = __toESM(require_components(), 1); +var import_element46 = __toESM(require_element(), 1); +var import_i18n35 = __toESM(require_i18n(), 1); +var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); +var { ValidatedNumberControl } = unlock(import_components38.privateApis); +function toNumberOrEmpty(value) { + if (value === "" || value === void 0) { + return ""; + } + const number = Number(value); + return Number.isFinite(number) ? number : ""; +} +function BetweenControls({ + value, + onChange, + hideLabelFromVision, + step +}) { + const [min = "", max = ""] = value; + const onChangeMin = (0, import_element46.useCallback)( + (newValue) => onChange([toNumberOrEmpty(newValue), max]), + [onChange, max] + ); + const onChangeMax = (0, import_element46.useCallback)( + (newValue) => onChange([min, toNumberOrEmpty(newValue)]), + [onChange, min] + ); + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + import_components38.BaseControl, + { + help: (0, import_i18n35.__)("The max. value must be greater than the min. value."), + children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_components38.Flex, { direction: "row", gap: 4, children: [ + /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Min."), + value: min, + max: max ? Number(max) - step : void 0, + onChange: onChangeMin, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ), + /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Max."), + value: max, + min: min ? Number(min) + step : void 0, + onChange: onChangeMax, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ) + ] }) + } + ); +} +function ValidatedNumber({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + const decimals = field.format?.decimals ?? 0; + const step = Math.pow(10, Math.abs(decimals) * -1); + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + // Do not convert an empty string or undefined to a number, + // otherwise there's a mismatch between the UI control (empty) + // and the data relied by onChange (0). + value: ["", void 0].includes(newValue) ? void 0 : Number(newValue) + }) + ); + }, + [data, onChange, setValue] + ); + const onChangeBetweenControls = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + if (operator === OPERATOR_BETWEEN) { + let valueBetween = ["", ""]; + if (Array.isArray(value) && value.length === 2 && value.every( + (element) => typeof element === "number" || element === "" + )) { + valueBetween = value; + } + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + BetweenControls, + { + value: valueBetween, + onChange: onChangeBetweenControls, + hideLabelFromVision, + step + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + ValidatedNumberControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + value, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + step, + min: isValid2.min ? isValid2.min.constraint : void 0, + max: isValid2.max ? isValid2.max.constraint : void 0 + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/integer.mjs +var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1); +function Integer(props) { + return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/number.mjs +var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1); +function Number2(props) { + return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/radio.mjs +var import_components39 = __toESM(require_components(), 1); +var import_element47 = __toESM(require_element(), 1); +var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1); +var { ValidatedRadioControl } = unlock(import_components39.privateApis); +function Radio({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = getValue({ item: data }); + const onChangeControl = (0, import_element47.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_components39.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( + ValidatedRadioControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + onChange: onChangeControl, + options: elements, + selected: value, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/text.mjs +var import_element48 = __toESM(require_element(), 1); +var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1); +function Text({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { prefix, suffix } = config || {}; + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + prefix: prefix ? (0, import_element48.createElement)(prefix) : void 0, + suffix: suffix ? (0, import_element48.createElement)(suffix) : void 0 + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle.mjs +var import_components40 = __toESM(require_components(), 1); +var import_element49 = __toESM(require_element(), 1); +var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleControl } = unlock(import_components40.privateApis); +function Toggle({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const onChangeControl = (0, import_element49.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [onChange, setValue, data, getValue]); + return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + ValidatedToggleControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/textarea.mjs +var import_components41 = __toESM(require_components(), 1); +var import_element50 = __toESM(require_element(), 1); +var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1); +var { ValidatedTextareaControl } = unlock(import_components41.privateApis); +function Textarea({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { rows = 4 } = config || {}; + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }); + const onChangeControl = (0, import_element50.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)( + ValidatedTextareaControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + rows, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs +var import_components42 = __toESM(require_components(), 1); +var import_element51 = __toESM(require_element(), 1); +var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleGroupControl } = unlock(import_components42.privateApis); +function ToggleGroup({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element51.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_components42.Spinner, {}); + } + if (elements.length === 0) { + return null; + } + const selectedOption = elements.find((el) => el.value === value); + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + ValidatedToggleGroupControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + __next40pxDefaultSize: true, + isBlock: true, + label: field.label, + help: selectedOption?.description || field.description, + onChange: onChangeControl, + value, + hideLabelFromVision, + children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + import_components42.__experimentalToggleGroupControlOption, + { + label: el.label, + value: el.value + }, + el.value + )) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/array.mjs +var import_components43 = __toESM(require_components(), 1); +var import_element52 = __toESM(require_element(), 1); +var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1); +var { ValidatedFormTokenField } = unlock(import_components43.privateApis); +function ArrayControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const arrayValueAsElements = (0, import_element52.useMemo)( + () => Array.isArray(value) ? value.map((token) => { + const element = elements?.find( + (suggestion) => suggestion.value === token + ); + return element || { value: token, label: token }; + }) : [], + [value, elements] + ); + const onChangeControl = (0, import_element52.useCallback)( + (tokens) => { + const valueTokens = tokens.map((token) => { + if (typeof token === "object" && "value" in token) { + return token.value; + } + return token; + }); + onChange(setValue({ item: data, value: valueTokens })); + }, + [onChange, setValue, data] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(import_components43.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + ValidatedFormTokenField, + { + required: !!isValid2?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label: hideLabelFromVision ? void 0 : label, + value: arrayValueAsElements, + onChange: onChangeControl, + placeholder, + suggestions: elements?.map((element) => element.value), + __experimentalValidateInput: (token) => { + if (field.isValid?.elements && elements) { + return elements.some( + (element) => element.value === token || element.label === token + ); + } + return true; + }, + __experimentalExpandOnFocus: elements && elements.length > 0, + __experimentalShowHowTo: !field.isValid?.elements, + displayTransform: (token) => { + if (typeof token === "object" && "label" in token) { + return token.label; + } + if (typeof token === "string" && elements) { + const element = elements.find( + (el) => el.value === token + ); + return element?.label || token; + } + return token; + }, + __experimentalRenderItem: ({ item }) => { + if (typeof item === "string" && elements) { + const element = elements.find( + (el) => el.value === item + ); + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: element?.label || item }); + } + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: item }); + } + } + ); +} + +// node_modules/colord/index.mjs +var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; +var t = function(r3) { + return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; +}; +var n = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0; +}; +var e = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2; +}; +var u = function(r3) { + return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; +}; +var a = function(r3) { + return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; +}; +var o = function(r3) { + return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; +}; +var i = /^#([0-9a-f]{3,8})$/i; +var s = function(r3) { + var t2 = r3.toString(16); + return t2.length < 2 ? "0" + t2 : t2; +}; +var h = function(r3) { + var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0; + return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; +}; +var b = function(r3) { + var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; + t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100; + var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6; + return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 }; +}; +var g = function(r3) { + return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; +}; +var d = function(r3) { + return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; +}; +var f = function(r3) { + return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a })); + var t2, n2, e2; +}; +var c = function(r3) { + return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a }; + var t2, n2, e2, u2; +}; +var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var y = { string: [[function(r3) { + var t2 = i.exec(r3); + return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; +}, "hex"], [function(r3) { + var t2 = v.exec(r3) || m.exec(r3); + return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null; +}, "rgb"], [function(t2) { + var n2 = l.exec(t2) || p.exec(t2); + if (!n2) return null; + var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); + return f(a2); +}, "hsl"]], object: [[function(r3) { + var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2; + return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; +}, "rgb"], [function(r3) { + var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2; + if (!t(n2) || !t(e2) || !t(u2)) return null; + var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) }); + return f(i2); +}, "hsl"], [function(r3) { + var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; + if (!t(n2) || !t(a2) || !t(o2)) return null; + var h2 = (function(r4) { + return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; + })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) }); + return b(h2); +}, "hsv"]] }; +var N = function(r3, t2) { + for (var n2 = 0; n2 < t2.length; n2++) { + var e2 = t2[n2][0](r3); + if (e2) return [e2, t2[n2][1]]; + } + return [null, void 0]; +}; +var x = function(r3) { + return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; +}; +var M = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a }; +}; +var H = function(r3) { + return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; +}; +var $ = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a }; +}; +var j = (function() { + function r3(r4) { + this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; + } + return r3.prototype.isValid = function() { + return null !== this.parsed; + }, r3.prototype.brightness = function() { + return n(H(this.rgba), 2); + }, r3.prototype.isDark = function() { + return H(this.rgba) < 0.5; + }, r3.prototype.isLight = function() { + return H(this.rgba) >= 0.5; + }, r3.prototype.toHex = function() { + return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2; + var r4, t2, e2, u2, a2, i2; + }, r3.prototype.toRgb = function() { + return o(this.rgba); + }, r3.prototype.toRgbString = function() { + return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsl = function() { + return d(c(this.rgba)); + }, r3.prototype.toHslString = function() { + return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsv = function() { + return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; + var r4; + }, r3.prototype.invert = function() { + return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); + var r4; + }, r3.prototype.saturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); + }, r3.prototype.desaturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); + }, r3.prototype.grayscale = function() { + return w(M(this.rgba, -1)); + }, r3.prototype.lighten = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); + }, r3.prototype.darken = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); + }, r3.prototype.rotate = function(r4) { + return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); + }, r3.prototype.alpha = function(r4) { + return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3); + var t2; + }, r3.prototype.hue = function(r4) { + var t2 = c(this.rgba); + return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h); + }, r3.prototype.isEqual = function(r4) { + return this.toHex() === w(r4).toHex(); + }, r3; +})(); +var w = function(r3) { + return r3 instanceof j ? r3 : new j(r3); +}; + +// packages/dataviews/build-module/components/dataform-controls/color.mjs +var import_components44 = __toESM(require_components(), 1); +var import_element53 = __toESM(require_element(), 1); +var import_i18n36 = __toESM(require_i18n(), 1); +var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl3 } = unlock(import_components44.privateApis); +var ColorPickerDropdown = ({ + color, + onColorChange +}) => { + const validColor = color && w(color).isValid() ? color : "#ffffff"; + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components44.Dropdown, + { + className: "dataviews-controls__color-picker-dropdown", + popoverProps: { resize: false }, + renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components44.Button, + { + onClick: onToggle, + "aria-label": (0, import_i18n36.__)("Open color picker"), + size: "small", + icon: () => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components44.ColorIndicator, { colorValue: validColor }) + } + ), + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components44.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components44.ColorPicker, + { + color: validColor, + onChange: onColorChange, + enableAlpha: true + } + ) }) + } + ); +}; +function Color({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }) || ""; + const handleColorChange = (0, import_element53.useCallback)( + (newColor) => { + onChange(setValue({ item: data, value: newColor })); + }, + [data, onChange, setValue] + ); + const handleInputChange = (0, import_element53.useCallback)( + (newValue) => { + onChange(setValue({ item: data, value: newValue || "" })); + }, + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ValidatedInputControl3, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value, + help: description, + onChange: handleInputChange, + hideLabelFromVision, + type: "text", + prefix: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components44.__experimentalInputControlPrefixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ColorPickerDropdown, + { + color: value, + onColorChange: handleColorChange + } + ) }) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/password.mjs +var import_components45 = __toESM(require_components(), 1); +var import_element54 = __toESM(require_element(), 1); +var import_i18n37 = __toESM(require_i18n(), 1); +var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1); +function Password({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const [isVisible2, setIsVisible] = (0, import_element54.useState)(false); + const toggleVisibility = (0, import_element54.useCallback)(() => { + setIsVisible((prev) => !prev); + }, []); + return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: isVisible2 ? "text" : "password", + suffix: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_components45.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( + import_components45.Button, + { + icon: isVisible2 ? unseen_default : seen_default, + onClick: toggleVisibility, + size: "small", + label: isVisible2 ? (0, import_i18n37.__)("Hide password") : (0, import_i18n37.__)("Show password") + } + ) }) + } + } + ); +} + +// packages/dataviews/build-module/field-types/utils/has-elements.mjs +function hasElements(field) { + return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function"; +} + +// packages/dataviews/build-module/components/dataform-controls/index.mjs +var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1); +var FORM_CONTROLS = { + adaptiveSelect: AdaptiveSelect, + array: ArrayControl, + checkbox: Checkbox, + color: Color, + combobox: Combobox3, + datetime: DateTime, + date: DateControl, + email: Email, + telephone: Telephone, + url: Url, + integer: Integer, + number: Number2, + password: Password, + radio: Radio, + select: Select, + text: Text, + toggle: Toggle, + textarea: Textarea, + toggleGroup: ToggleGroup +}; +function isEditConfig(value) { + return value && typeof value === "object" && typeof value.control === "string"; +} +function createConfiguredControl(config) { + const { control, ...controlConfig } = config; + const BaseControlType = getControlByType(control); + if (BaseControlType === null) { + return null; + } + return function ConfiguredControl(props) { + return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(BaseControlType, { ...props, config: controlConfig }); + }; +} +function getControl(field, fallback) { + if (typeof field.Edit === "function") { + return field.Edit; + } + if (typeof field.Edit === "string") { + return getControlByType(field.Edit); + } + if (isEditConfig(field.Edit)) { + return createConfiguredControl(field.Edit); + } + if (hasElements(field) && field.type !== "array") { + return getControlByType("adaptiveSelect"); + } + if (fallback === null) { + return null; + } + return getControlByType(fallback); +} +function getControlByType(type) { + if (Object.keys(FORM_CONTROLS).includes(type)) { + return FORM_CONTROLS[type]; + } + return null; +} + +// packages/dataviews/build-module/field-types/utils/get-filter-by.mjs +function getFilterBy(field, defaultOperators, validOperators) { + if (field.filterBy === false) { + return false; + } + const operators = field.filterBy?.operators?.filter( + (op) => validOperators.includes(op) + ) ?? defaultOperators; + if (operators.length === 0) { + return false; + } + return { + isPrimary: !!field.filterBy?.isPrimary, + operators + }; +} +var get_filter_by_default = getFilterBy; + +// packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs +var getValueFromId = (id) => ({ item }) => { + const path = id.split("."); + let value = item; + for (const segment of path) { + if (value.hasOwnProperty(segment)) { + value = value[segment]; + } else { + value = void 0; + } + } + return value; +}; +var get_value_from_id_default = getValueFromId; + +// packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs +var setValueFromId = (id) => ({ value }) => { + const path = id.split("."); + const result = {}; + let current = result; + for (const segment of path.slice(0, -1)) { + current[segment] = {}; + current = current[segment]; + } + current[path.at(-1)] = value; + return result; +}; +var set_value_from_id_default = setValueFromId; + +// packages/dataviews/build-module/field-types/email.mjs +var import_i18n38 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/render-from-elements.mjs +function RenderFromElements({ + item, + field +}) { + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = field.getValue({ item }); + if (isLoading) { + return value; + } + if (elements.length === 0) { + return value; + } + return elements?.find((element) => element.value === value)?.label || field.getValue({ item }); +} + +// packages/dataviews/build-module/field-types/utils/render-default.mjs +var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1); +function render({ + item, + field +}) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RenderFromElements, { item, field }); + } + return field.getValueFormatted({ item, field }); +} + +// packages/dataviews/build-module/field-types/utils/sort-text.mjs +var sort_text_default = (a2, b2, direction) => { + return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2); +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-required.mjs +function isValidRequired(item, field) { + const value = field.getValue({ item }); + return ![void 0, "", null].includes(value); +} + +// packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs +function isValidMinLength(item, field) { + if (typeof field.isValid.minLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length >= field.isValid.minLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs +function isValidMaxLength(item, field) { + if (typeof field.isValid.maxLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length <= field.isValid.maxLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs +function isValidPattern(item, field) { + if (field.isValid.pattern?.constraint === void 0) { + return true; + } + try { + const regexp = new RegExp(field.isValid.pattern.constraint); + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return regexp.test(String(value)); + } catch { + return false; + } +} + +// packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs +function isValidElements(item, field) { + const elements = field.elements ?? []; + const validValues = elements.map((el) => el.value); + if (validValues.length === 0) { + return true; + } + const value = field.getValue({ item }); + return [].concat(value).every((v2) => validValues.includes(v2)); +} + +// packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs +function getValueFormatted({ + item, + field +}) { + return field.getValue({ item }); +} +var get_value_formatted_default_default = getValueFormatted; + +// packages/dataviews/build-module/field-types/email.mjs +var emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; +function isValidCustom(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !emailRegex.test(value)) { + return (0, import_i18n38.__)("Value must be a valid email address."); + } + return null; +} +var email_default = { + type: "email", + render, + Edit: "email", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements, + custom: isValidCustom + } +}; + +// packages/dataviews/build-module/field-types/integer.mjs +var import_i18n39 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/sort-number.mjs +var sort_number_default = (a2, b2, direction) => { + return direction === "asc" ? a2 - b2 : b2 - a2; +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-min.mjs +function isValidMin(item, field) { + if (typeof field.isValid.min?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) >= field.isValid.min.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max.mjs +function isValidMax(item, field) { + if (typeof field.isValid.max?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) <= field.isValid.max.constraint; +} + +// packages/dataviews/build-module/field-types/integer.mjs +var format2 = { + separatorThousand: "," +}; +function getValueFormatted2({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatInteger; + if (field.type !== "integer") { + formatInteger = format2; + } else { + formatInteger = field.format; + } + const { separatorThousand } = formatInteger; + const integerValue = Math.trunc(value); + if (!separatorThousand) { + return String(integerValue); + } + return String(integerValue).replace( + /\B(?=(\d{3})+(?!\d))/g, + separatorThousand + ); +} +function isValidCustom2(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Number.isInteger(value)) { + return (0, import_i18n39.__)("Value must be an integer."); + } + return null; +} +var integer_default = { + type: "integer", + render, + Edit: "integer", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format2, + getValueFormatted: getValueFormatted2, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom2 + } +}; + +// packages/dataviews/build-module/field-types/number.mjs +var import_i18n40 = __toESM(require_i18n(), 1); +var format3 = { + separatorThousand: ",", + separatorDecimal: ".", + decimals: 2 +}; +function getValueFormatted3({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatNumber; + if (field.type !== "number") { + formatNumber = format3; + } else { + formatNumber = field.format; + } + const { separatorThousand, separatorDecimal, decimals } = formatNumber; + const fixedValue = value.toFixed(decimals); + const [integerPart, decimalPart] = fixedValue.split("."); + const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart; + return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart; +} +function isEmpty2(value) { + return value === "" || value === void 0 || value === null; +} +function isValidCustom3(item, field) { + const value = field.getValue({ item }); + if (!isEmpty2(value) && !Number.isFinite(value)) { + return (0, import_i18n40.__)("Value must be a number."); + } + return null; +} +var number_default = { + type: "number", + render, + Edit: "number", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format3, + getValueFormatted: getValueFormatted3, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom3 + } +}; + +// packages/dataviews/build-module/field-types/text.mjs +var text_default = { + type: "text", + render, + Edit: "text", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + // Single selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/datetime.mjs +var import_date6 = __toESM(require_date(), 1); +var format4 = { + datetime: (0, import_date6.getSettings)().formats.datetime, + weekStartsOn: (0, import_date6.getSettings)().l10n.startOfWeek +}; +function getValueFormatted4({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDatetime; + if (field.type !== "datetime") { + formatDatetime = format4; + } else { + formatDatetime = field.format; + } + return (0, import_date6.dateI18n)(formatDatetime.datetime, (0, import_date6.getDate)(value)); +} +var sort = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var datetime_default = { + type: "datetime", + render, + Edit: "datetime", + sort, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + format: format4, + getValueFormatted: getValueFormatted4, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/date.mjs +var import_date7 = __toESM(require_date(), 1); +var format5 = { + date: (0, import_date7.getSettings)().formats.date, + weekStartsOn: (0, import_date7.getSettings)().l10n.startOfWeek +}; +function getValueFormatted5({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDate2; + if (field.type !== "date") { + formatDate2 = format5; + } else { + formatDate2 = field.format; + } + return (0, import_date7.dateI18n)(formatDate2.date, (0, import_date7.getDate)(value)); +} +var sort2 = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var date_default = { + type: "date", + render, + Edit: "date", + sort: sort2, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + format: format5, + getValueFormatted: getValueFormatted5, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/boolean.mjs +var import_i18n41 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs +function isValidRequiredForBool(item, field) { + const value = field.getValue({ item }); + return value === true; +} + +// packages/dataviews/build-module/field-types/boolean.mjs +function getValueFormatted6({ + item, + field +}) { + const value = field.getValue({ item }); + if (value === true) { + return (0, import_i18n41.__)("True"); + } + if (value === false) { + return (0, import_i18n41.__)("False"); + } + return ""; +} +function isValidCustom4(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && ![true, false].includes(value)) { + return (0, import_i18n41.__)("Value must be true, false, or undefined"); + } + return null; +} +var sort3 = (a2, b2, direction) => { + const boolA = Boolean(a2); + const boolB = Boolean(b2); + if (boolA === boolB) { + return 0; + } + if (direction === "asc") { + return boolA ? 1 : -1; + } + return boolA ? -1 : 1; +}; +var boolean_default = { + type: "boolean", + render, + Edit: "checkbox", + sort: sort3, + validate: { + required: isValidRequiredForBool, + elements: isValidElements, + custom: isValidCustom4 + }, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + format: {}, + getValueFormatted: getValueFormatted6 +}; + +// packages/dataviews/build-module/field-types/media.mjs +var media_default = { + type: "media", + render: () => null, + Edit: null, + sort: () => 0, + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: get_value_formatted_default_default, + // cannot validate any constraint, so + // the only available validation for the field author + // would be providing a custom validator. + validate: {} +}; + +// packages/dataviews/build-module/field-types/array.mjs +var import_i18n42 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs +function isValidRequiredForArray(item, field) { + const value = field.getValue({ item }); + return Array.isArray(value) && value.length > 0 && value.every( + (element) => ![void 0, "", null].includes(element) + ); +} + +// packages/dataviews/build-module/field-types/array.mjs +function getValueFormatted7({ + item, + field +}) { + const value = field.getValue({ item }); + const arr = Array.isArray(value) ? value : []; + return arr.join(", "); +} +function render2({ item, field }) { + return getValueFormatted7({ item, field }); +} +function isValidCustom5(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Array.isArray(value)) { + return (0, import_i18n42.__)("Value must be an array."); + } + if (!value.every((v2) => typeof v2 === "string")) { + return (0, import_i18n42.__)("Every value must be a string."); + } + return null; +} +var sort4 = (a2, b2, direction) => { + const arrA = Array.isArray(a2) ? a2 : []; + const arrB = Array.isArray(b2) ? b2 : []; + if (arrA.length !== arrB.length) { + return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length; + } + const joinedA = arrA.join(","); + const joinedB = arrB.join(","); + return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA); +}; +var array_default = { + type: "array", + render: render2, + Edit: "array", + sort: sort4, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: getValueFormatted7, + validate: { + required: isValidRequiredForArray, + elements: isValidElements, + custom: isValidCustom5 + } +}; + +// packages/dataviews/build-module/field-types/password.mjs +function getValueFormatted8({ + item, + field +}) { + return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : ""; +} +var password_default = { + type: "password", + render, + Edit: "password", + sort: () => 0, + // Passwords should not be sortable for security reasons + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: getValueFormatted8, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/telephone.mjs +var telephone_default = { + type: "telephone", + render, + Edit: "telephone", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/color.mjs +var import_i18n43 = __toESM(require_i18n(), 1); +var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1); +function render3({ item, field }) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(RenderFromElements, { item, field }); + } + const value = get_value_formatted_default_default({ item, field }); + if (!value || !w(value).isValid()) { + return value; + } + return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + "div", + { + style: { + width: "16px", + height: "16px", + borderRadius: "50%", + backgroundColor: value, + border: "1px solid #ddd", + flexShrink: 0 + } + } + ), + /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { children: value }) + ] }); +} +function isValidCustom6(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !w(value).isValid()) { + return (0, import_i18n43.__)("Value must be a valid color."); + } + return null; +} +var sort5 = (a2, b2, direction) => { + const colorA = w(a2); + const colorB = w(b2); + if (!colorA.isValid() && !colorB.isValid()) { + return 0; + } + if (!colorA.isValid()) { + return direction === "asc" ? 1 : -1; + } + if (!colorB.isValid()) { + return direction === "asc" ? -1 : 1; + } + const hslA = colorA.toHsl(); + const hslB = colorB.toHsl(); + if (hslA.h !== hslB.h) { + return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h; + } + if (hslA.s !== hslB.s) { + return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s; + } + return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l; +}; +var color_default = { + type: "color", + render: render3, + Edit: "color", + sort: sort5, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_IS_ANY, + OPERATOR_IS_NONE + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements, + custom: isValidCustom6 + } +}; + +// packages/dataviews/build-module/field-types/url.mjs +var url_default = { + type: "url", + render, + Edit: "url", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/no-type.mjs +var sort6 = (a2, b2, direction) => { + if (typeof a2 === "number" && typeof b2 === "number") { + return sort_number_default(a2, b2, direction); + } + return sort_text_default(a2, b2, direction); +}; +var no_type_default = { + // type: no type for this one + render, + Edit: null, + sort: sort6, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: getAllOperatorNames(), + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/utils/get-is-valid.mjs +function getIsValid(field, fieldType) { + let required; + if (field.isValid?.required === true && fieldType.validate.required !== void 0) { + required = { + constraint: true, + validate: fieldType.validate.required + }; + } + let elements; + if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out + field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) { + elements = { + constraint: true, + validate: fieldType.validate.elements + }; + } + let min; + if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) { + min = { + constraint: field.isValid.min, + validate: fieldType.validate.min + }; + } + let max; + if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) { + max = { + constraint: field.isValid.max, + validate: fieldType.validate.max + }; + } + let minLength; + if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) { + minLength = { + constraint: field.isValid.minLength, + validate: fieldType.validate.minLength + }; + } + let maxLength; + if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) { + maxLength = { + constraint: field.isValid.maxLength, + validate: fieldType.validate.maxLength + }; + } + let pattern; + if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) { + pattern = { + constraint: field.isValid?.pattern, + validate: fieldType.validate.pattern + }; + } + const custom = field.isValid?.custom ?? fieldType.validate.custom; + return { + required, + elements, + min, + max, + minLength, + maxLength, + pattern, + custom + }; +} + +// packages/dataviews/build-module/field-types/utils/get-filter.mjs +function getFilter(fieldType) { + return fieldType.validOperators.reduce((accumulator, operator) => { + const operatorObj = getOperatorByName(operator); + if (operatorObj?.filter) { + accumulator[operator] = operatorObj.filter; + } + return accumulator; + }, {}); +} + +// packages/dataviews/build-module/field-types/utils/get-format.mjs +function getFormat(field, fieldType) { + return { + ...fieldType.format, + ...field.format + }; +} +var get_format_default = getFormat; + +// packages/dataviews/build-module/field-types/index.mjs +function getFieldTypeByName(type) { + const found = [ + email_default, + integer_default, + number_default, + text_default, + datetime_default, + date_default, + boolean_default, + media_default, + array_default, + password_default, + telephone_default, + color_default, + url_default + ].find((fieldType) => fieldType?.type === type); + if (!!found) { + return found; + } + return no_type_default; +} +function normalizeFields(fields) { + return fields.map((field) => { + const fieldType = getFieldTypeByName(field.type); + const getValue = field.getValue || get_value_from_id_default(field.id); + const sort7 = function(a2, b2, direction) { + const aValue = getValue({ item: a2 }); + const bValue = getValue({ item: b2 }); + return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction); + }; + return { + id: field.id, + label: field.label || field.id, + header: field.header || field.label || field.id, + description: field.description, + placeholder: field.placeholder, + getValue, + setValue: field.setValue || set_value_from_id_default(field.id), + elements: field.elements, + getElements: field.getElements, + hasElements: hasElements(field), + isVisible: field.isVisible, + enableHiding: field.enableHiding ?? true, + readOnly: field.readOnly ?? false, + // The type provides defaults for the following props + type: fieldType.type, + render: field.render ?? fieldType.render, + Edit: getControl(field, fieldType.Edit), + sort: sort7, + enableSorting: field.enableSorting ?? fieldType.enableSorting, + enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch, + isValid: getIsValid(field, fieldType), + filterBy: get_filter_by_default( + field, + fieldType.defaultOperators, + fieldType.validOperators + ), + filter: getFilter(fieldType), + format: get_format_default(field, fieldType), + getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted + }; + }); +} + +// packages/dataviews/build-module/hooks/use-data.mjs +var import_element55 = __toESM(require_element(), 1); +function useData(data, isLoading, paginationInfo) { + const previousDataRef = (0, import_element55.useRef)(data); + const previousPaginationInfoRef = (0, import_element55.useRef)(paginationInfo); + const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element55.useState)( + !isLoading + ); + (0, import_element55.useEffect)(() => { + if (!isLoading) { + previousDataRef.current = data; + previousPaginationInfoRef.current = paginationInfo; + setHasInitiallyLoaded(true); + } + }, [data, isLoading, paginationInfo]); + return { + data: isLoading && previousDataRef.current?.length ? previousDataRef.current : data, + paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo, + hasInitiallyLoaded + }; +} + +// packages/dataviews/build-module/dataviews/index.mjs +var import_jsx_runtime93 = __toESM(require_jsx_runtime(), 1); +var defaultGetItemId = (item) => item.id; +var defaultIsItemClickable = () => true; +var EMPTY_ARRAY6 = []; +var dataViewsLayouts = VIEW_LAYOUTS.filter( + (viewLayout) => !viewLayout.isPicker +); +function DefaultUI({ + header, + search = true, + searchLabel = void 0 +}) { + return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)( + Stack, + { + direction: "row", + align: "top", + justify: "space-between", + className: "dataviews__view-actions", + gap: "xs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)( + Stack, + { + direction: "row", + justify: "start", + gap: "sm", + className: "dataviews__search", + children: [ + search && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(dataviews_search_default, { label: searchLabel }), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(toggle_default, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(dataviews_view_config_default, {}), + header + ] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(DataViewsLayout, {}), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(DataViewsFooter, {}) + ] }); +} +function DataViews({ + view, + onChangeView, + fields, + search = true, + searchLabel = void 0, + actions = EMPTY_ARRAY6, + data, + getItemId = defaultGetItemId, + getItemLevel, + isLoading = false, + paginationInfo, + defaultLayouts: defaultLayoutsProperty, + selection: selectionProperty, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable = defaultIsItemClickable, + header, + children, + config = { perPageSizes: [10, 20, 50, 100] }, + empty, + onReset +}) { + const { infiniteScrollHandler } = paginationInfo; + const containerRef = (0, import_element56.useRef)(null); + const [containerWidth, setContainerWidth] = (0, import_element56.useState)(0); + const resizeObserverRef = (0, import_compose12.useResizeObserver)( + (resizeObserverEntries) => { + setContainerWidth( + resizeObserverEntries[0].borderBoxSize[0].inlineSize + ); + }, + { box: "border-box" } + ); + const [selectionState, setSelectionState] = (0, import_element56.useState)([]); + const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0; + const selection = isUncontrolled ? selectionState : selectionProperty; + const [openedFilter, setOpenedFilter] = (0, import_element56.useState)(null); + function setSelectionWithChange(value) { + const newValue = typeof value === "function" ? value(selection) : value; + if (isUncontrolled) { + setSelectionState(newValue); + } + if (onChangeSelection) { + onChangeSelection(newValue); + } + } + const _fields = (0, import_element56.useMemo)(() => normalizeFields(fields), [fields]); + const _selection = (0, import_element56.useMemo)(() => { + return selection.filter( + (id) => data.some((item) => getItemId(item) === id) + ); + }, [selection, data, getItemId]); + const filters = use_filters_default(_fields, view); + const hasPrimaryOrLockedFilters = (0, import_element56.useMemo)( + () => (filters || []).some( + (filter) => filter.isPrimary || filter.isLocked + ), + [filters] + ); + const [isShowingFilter, setIsShowingFilter] = (0, import_element56.useState)( + hasPrimaryOrLockedFilters + ); + (0, import_element56.useEffect)(() => { + if (hasPrimaryOrLockedFilters && !isShowingFilter) { + setIsShowingFilter(true); + } + }, [hasPrimaryOrLockedFilters, isShowingFilter]); + (0, import_element56.useEffect)(() => { + if (!view.infiniteScrollEnabled || !containerRef.current) { + return; + } + const handleScroll = (0, import_compose12.throttle)((event) => { + const target = event.target; + const scrollTop = target.scrollTop; + const scrollHeight = target.scrollHeight; + const clientHeight = target.clientHeight; + if (scrollTop + clientHeight >= scrollHeight - 100) { + infiniteScrollHandler?.(); + } + }, 100); + const container = containerRef.current; + container.addEventListener("scroll", handleScroll); + return () => { + container.removeEventListener("scroll", handleScroll); + handleScroll.cancel(); + }; + }, [infiniteScrollHandler, view.infiniteScrollEnabled]); + const defaultLayouts = (0, import_element56.useMemo)( + () => Object.fromEntries( + Object.entries(defaultLayoutsProperty).filter( + ([layoutType]) => { + return dataViewsLayouts.some( + (viewLayout) => viewLayout.type === layoutType + ); + } + ) + ), + [defaultLayoutsProperty] + ); + const { + data: displayData, + paginationInfo: displayPaginationInfo, + hasInitiallyLoaded + } = useData(data, isLoading, paginationInfo); + if (!defaultLayouts[view.type]) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + dataviews_context_default.Provider, + { + value: { + view, + onChangeView, + fields: _fields, + actions, + data: displayData, + isLoading, + paginationInfo: displayPaginationInfo, + selection: _selection, + onChangeSelection: setSelectionWithChange, + openedFilter, + setOpenedFilter, + getItemId, + getItemLevel, + isItemClickable, + onClickItem, + renderItemLink, + containerWidth, + containerRef, + resizeObserverRef, + defaultLayouts, + filters, + isShowingFilter, + setIsShowingFilter, + config, + empty, + hasInitiallyLoaded, + hasInfiniteScrollHandler: !!infiniteScrollHandler, + onReset + }, + children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "dataviews-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + DefaultUI, + { + header, + search, + searchLabel + } + ) }) + } + ); +} +var DataViewsSubComponents = DataViews; +DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter; +DataViewsSubComponents.Filters = filters_default; +DataViewsSubComponents.FiltersToggled = filters_toggled_default; +DataViewsSubComponents.FiltersToggle = toggle_default; +DataViewsSubComponents.Layout = DataViewsLayout; +DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu; +DataViewsSubComponents.Pagination = DataViewsPagination; +DataViewsSubComponents.Search = dataviews_search_default; +DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown; +DataViewsSubComponents.Footer = DataViewsFooter; +var dataviews_default = DataViewsSubComponents; + +// packages/dataviews/build-module/utils/filter-sort-and-paginate.mjs +var import_remove_accents2 = __toESM(require_remove_accents(), 1); +var import_deprecated = __toESM(require_deprecated(), 1); +function normalizeSearchInput2(input = "") { + return (0, import_remove_accents2.default)(input.trim().toLowerCase()); +} +var EMPTY_ARRAY7 = []; +function filterSortAndPaginate(data, view, fields) { + if (!data) { + return { + data: EMPTY_ARRAY7, + paginationInfo: { totalItems: 0, totalPages: 0 } + }; + } + const _fields = normalizeFields(fields); + let filteredData = [...data]; + if (view.search) { + const normalizedSearch = normalizeSearchInput2(view.search); + filteredData = filteredData.filter((item) => { + return _fields.filter((field) => field.enableGlobalSearch).some((field) => { + const fieldValue = field.getValue({ item }); + const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue]; + return values.some( + (value) => normalizeSearchInput2(String(value)).includes( + normalizedSearch + ) + ); + }); + }); + } + if (view.filters && view.filters?.length > 0) { + view.filters.forEach((filter) => { + const field = _fields.find( + (_field) => _field.id === filter.field + ); + if (field) { + if (filter.operator === OPERATOR_IS_NOT_ALL) { + (0, import_deprecated.default)("The 'isNotAll' filter operator", { + since: "7.0", + alternative: "'isNone'" + }); + } + const handler = field.filter[filter.operator]; + if (handler) { + filteredData = filteredData.filter( + (item) => handler(item, field, filter.value) + ); + } + } + }); + } + const sortByField = view.sort?.field ? _fields.find((field) => { + return field.enableSorting !== false && field.id === view.sort?.field; + }) : null; + const groupByField = view.groupBy?.field ? _fields.find((field) => { + return field.enableSorting !== false && field.id === view.groupBy?.field; + }) : null; + if (sortByField || groupByField) { + filteredData.sort((a2, b2) => { + if (groupByField) { + const groupCompare = groupByField.sort( + a2, + b2, + view.groupBy?.direction ?? "asc" + ); + if (groupCompare !== 0) { + return groupCompare; + } + } + if (sortByField) { + return sortByField.sort(a2, b2, view.sort?.direction ?? "desc"); + } + return 0; + }); + } + let totalItems = filteredData.length; + let totalPages = 1; + if (view.page !== void 0 && view.perPage !== void 0) { + const start = (view.page - 1) * view.perPage; + totalItems = filteredData?.length || 0; + totalPages = Math.ceil(totalItems / view.perPage); + filteredData = filteredData?.slice(start, start + view.perPage); + } + return { + data: filteredData, + paginationInfo: { + totalItems, + totalPages + } + }; +} + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element57 = __toESM(require_element(), 1); +var import_jsx_runtime94 = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element57.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components47 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components46 = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components46.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_components47.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_components47.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_components47.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_components47.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + import_components47.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/pattern-list/stage.tsx +var import_core_data3 = __toESM(require_core_data()); +var import_components48 = __toESM(require_components()); +var import_data10 = __toESM(require_data()); +var import_element60 = __toESM(require_element()); +var import_editor = __toESM(require_editor()); +var import_patterns3 = __toESM(require_patterns()); +var import_i18n48 = __toESM(require_i18n()); + +// routes/lock-unlock.ts +var import_private_apis2 = __toESM(require_private_apis()); +var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// routes/pattern-list/view-utils.ts +var import_i18n44 = __toESM(require_i18n()); +var LAYOUT_GRID2 = "grid"; +var LAYOUT_TABLE2 = "table"; +var DEFAULT_VIEW = { + type: LAYOUT_GRID2, + perPage: 20, + sort: { + field: "title", + direction: "asc" + }, + filters: [], + fields: ["sync-status"], + layout: { + badgeFields: ["sync-status"] + }, + titleField: "title", + mediaField: "preview" +}; +var DEFAULT_VIEWS = [ + { + slug: "all", + label: (0, import_i18n44.__)("All patterns") + }, + { + slug: "my-patterns", + label: (0, import_i18n44.__)("My patterns") + }, + { + slug: "registered", + label: (0, import_i18n44.__)("Registered") + } +]; +var DEFAULT_LAYOUTS = { + [LAYOUT_TABLE2]: {}, + [LAYOUT_GRID2]: { + layout: { + badgeFields: ["sync-status"] + } + } +}; + +// routes/pattern-list/fields/preview.tsx +var import_i18n45 = __toESM(require_i18n()); +import { Preview } from "@wordpress/lazy-editor"; +function PreviewField({ item }) { + return /* @__PURE__ */ React.createElement( + Preview, + { + blocks: item.blocks, + content: item.content, + description: item.description + } + ); +} +var previewField = { + label: (0, import_i18n45.__)("Preview"), + id: "preview", + render: PreviewField, + enableSorting: false +}; + +// routes/pattern-list/fields/sync-status.tsx +var import_i18n46 = __toESM(require_i18n()); +var import_patterns = __toESM(require_patterns()); +var { PATTERN_SYNC_TYPES } = unlock2(import_patterns.privateApis); +var OPERATOR_IS2 = "is"; +var SYNC_FILTERS = [ + { + value: PATTERN_SYNC_TYPES.full, + label: (0, import_i18n46._x)("Synced", "pattern (singular)"), + description: (0, import_i18n46.__)("Patterns that are kept in sync across the site.") + }, + { + value: PATTERN_SYNC_TYPES.unsynced, + label: (0, import_i18n46._x)("Not synced", "pattern (singular)"), + description: (0, import_i18n46.__)( + "Patterns that can be changed freely without affecting the site." + ) + } +]; +var patternStatusField = { + label: (0, import_i18n46.__)("Sync status"), + id: "sync-status", + render: ({ item }) => { + const syncStatus = item.syncStatus; + return /* @__PURE__ */ React.createElement( + "span", + { + className: `routes-pattern-list__field-sync-status-${syncStatus}` + }, + SYNC_FILTERS.find(({ value }) => value === syncStatus)?.label + ); + }, + elements: SYNC_FILTERS, + filterBy: { + operators: [OPERATOR_IS2], + isPrimary: true + }, + enableSorting: false +}; + +// routes/pattern-list/fields/category.tsx +var import_i18n47 = __toESM(require_i18n()); +var import_data8 = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var import_element58 = __toESM(require_element()); +var OPERATOR_IS3 = "is"; +function CategoryField({ item }) { + const blockPatternCategories = (0, import_data8.useSelect)( + (select2) => select2(import_core_data.store).getBlockPatternCategories(), + [] + ); + const categoryLabels = (0, import_element58.useMemo)(() => { + if (!item.categories || !Array.isArray(item.categories)) { + return []; + } + return item.categories.map((catSlug) => { + const category = blockPatternCategories?.find( + (cat) => cat.name === catSlug + ); + return category ? category.label || category.name : null; + }).filter(Boolean); + }, [item.categories, blockPatternCategories]); + if (categoryLabels.length === 0) { + return /* @__PURE__ */ React.createElement("span", { className: "pattern-category-field__empty" }, "\u2014"); + } + return /* @__PURE__ */ React.createElement("span", { className: "pattern-category-field" }, categoryLabels.join(", ")); +} +function usePatternCategories() { + const userPatternCategories = (0, import_data8.useSelect)( + (select2) => select2(import_core_data.store).getUserPatternCategories(), + [] + ); + const blockPatternCategories = (0, import_data8.useSelect)( + (select2) => select2(import_core_data.store).getBlockPatternCategories(), + [] + ); + return (0, import_element58.useMemo)(() => { + const categoryMap = /* @__PURE__ */ new Map(); + userPatternCategories?.forEach((cat) => { + if (!categoryMap.has(cat.name)) { + categoryMap.set(cat.name, { + value: cat.name, + label: cat.label || cat.name + }); + } + }); + blockPatternCategories?.forEach((cat) => { + if (!categoryMap.has(cat.name)) { + categoryMap.set(cat.name, { + value: cat.name, + label: cat.label || cat.name + }); + } + }); + return Array.from(categoryMap.values()).sort( + (a2, b2) => a2.label.localeCompare(b2.label) + ); + }, [userPatternCategories, blockPatternCategories]); +} +function usePatternCategoryField() { + const categories = usePatternCategories(); + return { + label: (0, import_i18n47.__)("Category"), + id: "category", + render: CategoryField, + elements: categories, + getValue: ({ item }) => { + return item.categories; + }, + filterBy: { + operators: [OPERATOR_IS3], + isPrimary: true + }, + enableSorting: false + }; +} + +// routes/pattern-list/use-patterns.ts +var import_data9 = __toESM(require_data()); +var import_core_data2 = __toESM(require_core_data()); +var import_element59 = __toESM(require_element()); +var import_patterns2 = __toESM(require_patterns()); +var import_block_editor = __toESM(require_block_editor()); + +// routes/pattern-list/utils.ts +var filterOutDuplicatesByName = (currentItem, index, items) => index === items.findIndex((item) => currentItem.name === item.name); + +// routes/pattern-list/use-patterns.ts +var { + PATTERN_TYPES, + PATTERN_SYNC_TYPES: PATTERN_SYNC_TYPES2, + EXCLUDED_PATTERN_SOURCES, + PATTERN_DEFAULT_CATEGORY +} = unlock2(import_patterns2.privateApis); +var { extractWords, getNormalizedSearchTerms, normalizeString: normalizeString2 } = unlock2( + import_block_editor.privateApis +); +function normalizeThemePattern(pattern) { + return { + id: pattern.name, + title: pattern.title, + content: pattern.content, + keywords: pattern.keywords || [], + type: PATTERN_TYPES.theme, + // Normalize categories to always be an array of slugs + categories: pattern.categories || [], + // Theme patterns are always unsynced + syncStatus: PATTERN_SYNC_TYPES2.unsynced, + description: pattern.description || "" + }; +} +function normalizeUserPattern(pattern, userPatternCategories) { + const categories = []; + if (pattern.wp_pattern_category && Array.isArray(pattern.wp_pattern_category)) { + pattern.wp_pattern_category.forEach((catId) => { + const category = userPatternCategories?.find( + (cat) => cat.id === catId + ); + if (category) { + categories.push(category.name); + } + }); + } + const numericId = pattern.id; + return { + id: pattern.name || pattern.id.toString(), + _recordId: numericId, + // Keep numeric ID for permissions lookup + keywords: [], + type: PATTERN_TYPES.user, + // Normalize categories to always be an array of slugs + categories, + // Normalize sync status + syncStatus: pattern.wp_pattern_sync_status || PATTERN_SYNC_TYPES2.full, + title: typeof pattern.title === "string" ? pattern.title : pattern.title.raw, + content: typeof pattern.content === "string" ? pattern.content : pattern.content.raw, + description: pattern.excerpt?.raw || "", + blocks: pattern.blocks + }; +} +var removeMatchingTerms = (unmatchedTerms, unprocessedTerms) => { + return unmatchedTerms.filter( + (term) => !getNormalizedSearchTerms(unprocessedTerms).some( + (unprocessedTerm) => unprocessedTerm.includes(term) + ) + ); +}; +function getItemSearchRank(item, searchTerm, config) { + const { categoryId, hasCategory, onlyFilterByCategory } = config; + let rank = categoryId === PATTERN_DEFAULT_CATEGORY || categoryId === "my-patterns" && item.type === PATTERN_TYPES.user || hasCategory && hasCategory(item, categoryId || "") ? 1 : 0; + if (!rank || onlyFilterByCategory) { + return rank; + } + const normalizedSearchInput = normalizeString2(searchTerm); + const normalizedTitle = normalizeString2(item.title); + if (normalizedSearchInput === normalizedTitle) { + rank += 30; + } else if (normalizedTitle.startsWith(normalizedSearchInput)) { + rank += 20; + } else { + const terms = [ + item.id, + item.title, + item.description, + ...item.keywords + ].join(" "); + const normalizedSearchTerms = extractWords(normalizedSearchInput); + const unmatchedTerms = removeMatchingTerms( + normalizedSearchTerms, + terms + ); + if (unmatchedTerms.length === 0) { + rank += 10; + } + } + return rank; +} +function searchItems(items = [], searchInput = "", config = {}) { + const normalizedSearchTerms = getNormalizedSearchTerms(searchInput); + const onlyFilterByCategory = config.categoryId !== PATTERN_DEFAULT_CATEGORY && !normalizedSearchTerms.length; + const searchRankConfig = { ...config, onlyFilterByCategory }; + const threshold = onlyFilterByCategory ? 0 : 1; + const rankedItems = items.map((item) => { + return [ + item, + getItemSearchRank(item, searchInput, searchRankConfig) + ]; + }).filter(([, rank]) => rank > threshold); + if (normalizedSearchTerms.length === 0) { + return rankedItems.map(([item]) => item); + } + rankedItems.sort(([, rank1], [, rank2]) => rank2 - rank1); + return rankedItems.map(([item]) => item); +} +var selectThemePatterns = (0, import_data9.createSelector)( + (select2) => { + const { getBlockPatterns } = select2(import_core_data2.store); + const { isResolving: isResolvingSelector } = select2(import_core_data2.store); + const restBlockPatterns = getBlockPatterns(); + const patterns = (restBlockPatterns || []).filter( + (pattern) => !EXCLUDED_PATTERN_SOURCES.includes(pattern.source) + ).filter(filterOutDuplicatesByName).filter((pattern) => pattern.inserter !== false).map(normalizeThemePattern); + return { + patterns, + isResolving: isResolvingSelector("getBlockPatterns") + }; + }, + (select2) => [ + select2(import_core_data2.store).getBlockPatterns(), + select2(import_core_data2.store).isResolving("getBlockPatterns") + ] +); +var selectUserPatterns = (0, import_data9.createSelector)( + (select2, syncStatus = void 0, search = "") => { + const { + getEntityRecords, + isResolving: isResolvingSelector, + getUserPatternCategories + } = select2(import_core_data2.store); + const query = { per_page: -1 }; + const patternPosts = getEntityRecords( + "postType", + PATTERN_TYPES.user, + query + ); + const userPatternCategories = getUserPatternCategories(); + let patterns = (patternPosts ?? []).map( + (pattern) => normalizeUserPattern(pattern, userPatternCategories) + ); + const isResolving = isResolvingSelector("getEntityRecords", [ + "postType", + PATTERN_TYPES.user, + query + ]); + if (syncStatus) { + patterns = patterns.filter( + (pattern) => pattern.syncStatus === syncStatus + ); + } + patterns = searchItems(patterns, search, { + // We exit user pattern retrieval early if we aren't in the + // catch-all category for user created patterns, so it has + // to be in the category. + categoryId: PATTERN_DEFAULT_CATEGORY, + hasCategory: () => true + }); + return { + patterns, + isResolving, + categories: userPatternCategories + }; + }, + (select2) => [ + select2(import_core_data2.store).getEntityRecords("postType", PATTERN_TYPES.user, { + per_page: -1 + }), + select2(import_core_data2.store).isResolving("getEntityRecords", [ + "postType", + PATTERN_TYPES.user, + { per_page: -1 } + ]), + select2(import_core_data2.store).getUserPatternCategories() + ] +); +var selectPatterns = (0, import_data9.createSelector)( + (select2, categoryId, syncStatus, search = "") => { + const { + patterns: themePatterns, + isResolving: isResolvingThemePatterns + } = selectThemePatterns(select2); + const { patterns: userPatterns, isResolving: isResolvingUserPatterns } = selectUserPatterns(select2); + let patterns = [ + ...themePatterns || [], + ...userPatterns || [] + ]; + if (syncStatus) { + patterns = patterns.filter( + (pattern) => pattern.syncStatus === syncStatus + ); + } + if (categoryId && categoryId !== PATTERN_DEFAULT_CATEGORY) { + patterns = searchItems(patterns, search, { + categoryId, + hasCategory: (item, currentCategory) => { + return item.categories?.includes(currentCategory); + } + }); + } else { + patterns = searchItems(patterns, search, { + categoryId: PATTERN_DEFAULT_CATEGORY, + hasCategory: () => true + }); + } + return { + patterns, + isResolving: isResolvingThemePatterns || isResolvingUserPatterns + }; + }, + (select2) => [ + selectThemePatterns(select2), + selectUserPatterns(select2) + ] +); +function useAugmentPatternsWithPermissions(patterns) { + const idsAndTypes = (0, import_element59.useMemo)( + () => patterns?.filter((record) => record.type !== PATTERN_TYPES.theme).map((record) => [ + record.type, + record._recordId, + record.id + ]) ?? [], + [patterns] + ); + const permissions = (0, import_data9.useSelect)( + (select2) => { + const { getEntityRecordPermissions } = unlock2( + select2(import_core_data2.store) + ); + return idsAndTypes.reduce( + (acc, [type, numericId, stringId]) => { + acc[stringId] = getEntityRecordPermissions( + "postType", + type, + numericId + ); + return acc; + }, + {} + ); + }, + [idsAndTypes] + ); + return (0, import_element59.useMemo)( + () => patterns?.map((record) => ({ + ...record, + permissions: permissions?.[record.id] ?? {} + })) ?? [], + [patterns, permissions] + ); +} +var usePatterns = (postType, categoryId, { search = "", syncStatus } = {}) => { + return (0, import_data9.useSelect)( + (select2) => { + if (postType === PATTERN_TYPES.user) { + const result = selectUserPatterns(select2, syncStatus, search); + let { patterns } = result; + if (categoryId && categoryId !== PATTERN_DEFAULT_CATEGORY) { + patterns = patterns.filter( + (pattern) => pattern.categories.includes(categoryId) + ); + } + return { + patterns, + isResolving: result.isResolving + }; + } else if (postType === PATTERN_TYPES.theme) { + const result = selectThemePatterns(select2); + let { patterns } = result; + if (categoryId && categoryId !== PATTERN_DEFAULT_CATEGORY) { + patterns = patterns.filter( + (pattern) => pattern.categories.includes(categoryId) + ); + } + patterns = searchItems(patterns, search, { + categoryId: categoryId || PATTERN_DEFAULT_CATEGORY, + hasCategory: () => true + }); + return { + patterns, + isResolving: result.isResolving + }; + } + return selectPatterns(select2, categoryId, syncStatus, search); + }, + [categoryId, postType, search, syncStatus] + ); +}; +var use_patterns_default = usePatterns; + +// routes/pattern-list/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='2d52a92b3c']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "2d52a92b3c"); + style.appendChild(document.createTextNode(":root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.patterns-menu-items__convert-modal{z-index:1000001}.patterns-menu-items__convert-modal [role=dialog]>[role=document]{width:350px}.patterns-menu-items__convert-modal .patterns-menu-items__convert-modal-categories{position:relative}.patterns-menu-items__convert-modal .components-form-token-field__suggestions-list:not(:empty){background-color:#fff;border:1px solid var(--wp-admin-theme-color);border-bottom-left-radius:2px;border-bottom-right-radius:2px;box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);box-sizing:border-box;left:-1px;max-height:96px;min-width:auto;position:absolute;width:calc(100% + 2px);z-index:1}.patterns-create-modal__name-input input[type=text]{margin:0}.patterns-rename-pattern-category-modal__validation-message{color:#cc1818}@media (min-width:782px){.patterns-rename-pattern-category-modal__validation-message{width:320px}}.pattern-overrides-control__allow-overrides-button{justify-content:center;width:100%}.routes-pattern-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}.dataviews-view-grid__badge-fields .dataviews-view-grid__field-value:has(.routes-pattern-list__field-sync-status-fully){background:rgba(var(--wp-block-synced-color--rgb),.04);color:var(--wp-block-synced-color)}")); + document.head.appendChild(style); +} + +// routes/pattern-list/stage.tsx +var { usePostActions, patternTitleField } = unlock2(import_editor.privateApis); +var { Tabs } = unlock2(import_components48.privateApis); +var { PATTERN_TYPES: PATTERN_TYPES2, CreatePatternModal } = unlock2(import_patterns3.privateApis); +function PatternList() { + const invalidate = useInvalidate(); + const { type = "all" } = useParams({ + from: "/patterns/list/$type" + }); + const navigate = useNavigate(); + const searchParams = useSearch({ from: "/patterns/list/$type" }); + const postTypeObject = (0, import_data10.useSelect)( + (select2) => select2(import_core_data3.store).getPostType("wp_block"), + [] + ); + const labels = postTypeObject?.labels; + const canCreateRecord = (0, import_data10.useSelect)( + (select2) => select2(import_core_data3.store).canUser("create", { + kind: "postType", + name: "wp_block" + }), + [] + ); + const [showPatternModal, setShowPatternModal] = (0, import_element60.useState)(false); + const handleQueryParamsChange = (0, import_element60.useCallback)( + (params) => { + navigate({ + search: { + ...searchParams, + ...params + } + }); + }, + [searchParams, navigate] + ); + const { view, isModified, updateView, resetToDefault } = useView({ + kind: "postType", + name: "wp_block", + slug: "default-new", + defaultView: DEFAULT_VIEW, + queryParams: searchParams, + onChangeQueryParams: handleQueryParamsChange + }); + const onReset = () => { + resetToDefault(); + invalidate(); + }; + const onChangeView = (newView) => { + updateView(newView); + if (newView.type !== view.type) { + invalidate(); + } + }; + const categoryFilter = (0, import_element60.useMemo)(() => { + const filter = view.filters?.find((f2) => f2.field === "category"); + return filter?.value || "all-patterns"; + }, [view.filters]); + const syncStatusFilter = (0, import_element60.useMemo)(() => { + const filter = view.filters?.find((f2) => f2.field === "sync-status"); + return filter?.value; + }, [view.filters]); + const patternType = (0, import_element60.useMemo)(() => { + if (type === "my-patterns") { + return PATTERN_TYPES2.user; + } else if (type === "registered") { + return PATTERN_TYPES2.theme; + } + return null; + }, [type]); + const { patterns, isResolving } = use_patterns_default( + patternType, + categoryFilter, + { + search: view.search, + syncStatus: syncStatusFilter + } + ); + const patternsWithPermissions = useAugmentPatternsWithPermissions(patterns); + const patternCategoryField = usePatternCategoryField(); + const fields = (0, import_element60.useMemo)(() => { + const patternFields = [ + previewField, + patternTitleField, + patternCategoryField + ]; + if (type === "my-patterns" || type === "all") { + patternFields.push(patternStatusField); + } + return patternFields; + }, [type, patternCategoryField]); + const { data: posts, paginationInfo } = (0, import_element60.useMemo)(() => { + const viewWithoutFilters = { ...view }; + delete viewWithoutFilters.search; + viewWithoutFilters.filters = []; + return filterSortAndPaginate( + patternsWithPermissions, + viewWithoutFilters, + fields + ); + }, [patternsWithPermissions, view, fields]); + const { totalItems, totalPages } = paginationInfo; + const cleanupDeletedPostIdsFromUrl = (0, import_element60.useCallback)( + (deletedItems) => { + const deletedIds = deletedItems.map((item) => item.id); + const currentPostIds = searchParams.postIds || []; + const remainingPostIds = currentPostIds.filter( + (id) => !deletedIds.includes(id) + ); + if (remainingPostIds.length !== currentPostIds.length) { + navigate({ + search: { + ...searchParams, + postIds: remainingPostIds.length > 0 ? remainingPostIds : void 0 + } + }); + } else { + invalidate(); + } + }, + [invalidate, searchParams, navigate] + ); + const postTypeActions = usePostActions({ + postType: "wp_block", + context: "list", + onActionPerformed: (actionId, items) => { + if (actionId === "move-to-trash" || actionId === "permanently-delete") { + cleanupDeletedPostIdsFromUrl(items); + } + } + }); + const actions = (0, import_element60.useMemo)(() => { + return [ + ...postTypeActions?.flatMap((action) => { + if (action.id === "view-post-revisions") { + return []; + } + return [action]; + }) + ]; + }, [postTypeActions]); + const handleTabChange = (0, import_element60.useCallback)( + (typeSlug) => { + navigate({ + to: `/patterns/list/${typeSlug}` + }); + }, + [navigate] + ); + if (!postTypeObject) { + return null; + } + const selection = searchParams.postIds ?? []; + if (view.type === "list" && selection.length === 0 && posts?.length > 0) { + selection.push(posts[0].id); + } + if (view.type === "list") { + selection.splice(1); + } + return /* @__PURE__ */ React.createElement( + page_default, + { + title: (0, import_i18n48.__)("Patterns"), + subTitle: (0, import_i18n48.__)( + "Reusable design elements for your site. Create once, use everywhere." + ), + className: "pattern-page", + actions: labels?.add_new_item && canCreateRecord && /* @__PURE__ */ React.createElement( + import_components48.Button, + { + variant: "primary", + onClick: () => setShowPatternModal(true), + size: "compact" + }, + labels.add_new_item + ), + hasPadding: false + }, + DEFAULT_VIEWS.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "routes-pattern-list__tabs-wrapper" }, /* @__PURE__ */ React.createElement( + Tabs, + { + onSelect: handleTabChange, + selectedTabId: type ?? "all" + }, + /* @__PURE__ */ React.createElement(Tabs.TabList, null, DEFAULT_VIEWS.map( + (filter) => /* @__PURE__ */ React.createElement( + Tabs.Tab, + { + tabId: filter.slug, + key: filter.slug + }, + filter.label + ) + )) + )), + /* @__PURE__ */ React.createElement( + dataviews_default, + { + data: posts, + fields, + view, + onChangeView, + actions, + isLoading: isResolving, + paginationInfo: { + totalItems, + totalPages + }, + defaultLayouts: DEFAULT_LAYOUTS, + selection, + onReset: isModified ? onReset : false, + onChangeSelection: (items) => { + navigate({ + search: { + ...searchParams, + postIds: items.length > 0 ? items : void 0, + edit: items.length === 0 ? void 0 : searchParams.edit + } + }); + }, + isItemClickable: (item) => item.type !== PATTERN_TYPES2.theme, + renderItemLink: ({ + item, + ...props + }) => /* @__PURE__ */ React.createElement( + Link, + { + to: `/types/wp_block/edit/${encodeURIComponent( + item.id + )}`, + ...props, + onClick: (event) => { + event.stopPropagation(); + } + } + ) + } + ), + showPatternModal && /* @__PURE__ */ React.createElement( + CreatePatternModal, + { + onClose: () => setShowPatternModal(false), + onSuccess: ({ + pattern + }) => { + setShowPatternModal(false); + navigate({ + to: `/types/wp_block/edit/${encodeURIComponent( + pattern.id + )}` + }); + }, + content: [] + } + ) + ); +} +var stage = PatternList; +export { + stage +}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.development.js: + (** + * @license React + * use-sync-external-store-shim.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/pattern-list/content.min.asset.php b/src/wp-includes/build/routes/pattern-list/content.min.asset.php new file mode 100644 index 0000000000000..e057a3ac910b3 --- /dev/null +++ b/src/wp-includes/build/routes/pattern-list/content.min.asset.php @@ -0,0 +1 @@ + array('react', 'react-dom', 'react-jsx-runtime', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-patterns', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-warning'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/lazy-editor', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'f187a8ed84eb97f615a9'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/pattern-list/content.min.js b/src/wp-includes/build/routes/pattern-list/content.min.js new file mode 100644 index 0000000000000..c4afaecf9c36a --- /dev/null +++ b/src/wp-includes/build/routes/pattern-list/content.min.js @@ -0,0 +1,14 @@ +var Zh=Object.create;var Ic=Object.defineProperty;var Qh=Object.getOwnPropertyDescriptor;var Jh=Object.getOwnPropertyNames;var eb=Object.getPrototypeOf,tb=Object.prototype.hasOwnProperty;var Ee=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var rb=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Jh(t))!tb.call(e,n)&&n!==r&&Ic(e,n,{get:()=>t[n],enumerable:!(o=Qh(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?Zh(eb(e)):{},rb(t||!e||!e.__esModule?Ic(r,"default",{value:e,enumerable:!0}):r,e));var z=Ee((R1,Vc)=>{Vc.exports=window.wp.element});var jt=Ee((V1,kc)=>{kc.exports=window.wp.data});var Ls=Ee((k1,Nc)=>{Nc.exports=window.wp.preferences});var Et=Ee((q1,Mc)=>{Mc.exports=window.wp.compose});var le=Ee(($1,Fc)=>{Fc.exports=window.React});var R=Ee((X1,Hc)=>{Hc.exports=window.ReactJSXRuntime});var ef=Ee((SS,Jc)=>{Jc.exports=window.ReactDOM});var rf=Ee(tf=>{"use strict";var Wo=le();function bb(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var xb=typeof Object.is=="function"?Object.is:bb,yb=Wo.useState,wb=Wo.useEffect,Sb=Wo.useLayoutEffect,_b=Wo.useDebugValue;function Cb(e,t){var r=t(),o=yb({inst:{value:r,getSnapshot:t}}),n=o[0].inst,i=o[1];return Sb(function(){n.value=r,n.getSnapshot=t,Xs(n)&&i({inst:n})},[e,r,t]),wb(function(){return Xs(n)&&i({inst:n}),e(function(){Xs(n)&&i({inst:n})})},[e]),_b(r),r}function Xs(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!xb(e,r)}catch{return!0}}function Eb(e,t){return t()}var Pb=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Eb:Cb;tf.useSyncExternalStore=Wo.useSyncExternalStore!==void 0?Wo.useSyncExternalStore:Pb});var nf=Ee((CS,of)=>{"use strict";of.exports=rf()});var G=Ee((TS,lf)=>{lf.exports=window.wp.i18n});var Se=Ee((IS,uf)=>{uf.exports=window.wp.primitives});var Nl=Ee((__,cf)=>{cf.exports=window.wp.privateApis});var U=Ee((V_,xf)=>{xf.exports=window.wp.components});var Ml=Ee((k_,yf)=>{yf.exports=window.wp.keycodes});var Fu=Ee((tO,Ma)=>{var Jm={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u1EA4:"A",\u1EAE:"A",\u1EB2:"A",\u1EB4:"A",\u1EB6:"A",\u00C6:"AE",\u1EA6:"A",\u1EB0:"A",\u0202:"A",\u1EA2:"A",\u1EA0:"A",\u1EA8:"A",\u1EAA:"A",\u1EAC:"A",\u00C7:"C",\u1E08:"C",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u1EBE:"E",\u1E16:"E",\u1EC0:"E",\u1E14:"E",\u1E1C:"E",\u0206:"E",\u1EBA:"E",\u1EBC:"E",\u1EB8:"E",\u1EC2:"E",\u1EC4:"E",\u1EC6:"E",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u1E2E:"I",\u020A:"I",\u1EC8:"I",\u1ECA:"I",\u00D0:"D",\u00D1:"N",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u1ED0:"O",\u1E4C:"O",\u1E52:"O",\u020E:"O",\u1ECE:"O",\u1ECC:"O",\u1ED4:"O",\u1ED6:"O",\u1ED8:"O",\u1EDC:"O",\u1EDE:"O",\u1EE0:"O",\u1EDA:"O",\u1EE2:"O",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u1EE6:"U",\u1EE4:"U",\u1EEC:"U",\u1EEE:"U",\u1EF0:"U",\u00DD:"Y",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u1EA5:"a",\u1EAF:"a",\u1EB3:"a",\u1EB5:"a",\u1EB7:"a",\u00E6:"ae",\u1EA7:"a",\u1EB1:"a",\u0203:"a",\u1EA3:"a",\u1EA1:"a",\u1EA9:"a",\u1EAB:"a",\u1EAD:"a",\u00E7:"c",\u1E09:"c",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u1EBF:"e",\u1E17:"e",\u1EC1:"e",\u1E15:"e",\u1E1D:"e",\u0207:"e",\u1EBB:"e",\u1EBD:"e",\u1EB9:"e",\u1EC3:"e",\u1EC5:"e",\u1EC7:"e",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u1E2F:"i",\u020B:"i",\u1EC9:"i",\u1ECB:"i",\u00F0:"d",\u00F1:"n",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u1ED1:"o",\u1E4D:"o",\u1E53:"o",\u020F:"o",\u1ECF:"o",\u1ECD:"o",\u1ED5:"o",\u1ED7:"o",\u1ED9:"o",\u1EDD:"o",\u1EDF:"o",\u1EE1:"o",\u1EDB:"o",\u1EE3:"o",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u1EE7:"u",\u1EE5:"u",\u1EED:"u",\u1EEF:"u",\u1EF1:"u",\u00FD:"y",\u00FF:"y",\u0100:"A",\u0101:"a",\u0102:"A",\u0103:"a",\u0104:"A",\u0105:"a",\u0106:"C",\u0107:"c",\u0108:"C",\u0109:"c",\u010A:"C",\u010B:"c",\u010C:"C",\u010D:"c",C\u0306:"C",c\u0306:"c",\u010E:"D",\u010F:"d",\u0110:"D",\u0111:"d",\u0112:"E",\u0113:"e",\u0114:"E",\u0115:"e",\u0116:"E",\u0117:"e",\u0118:"E",\u0119:"e",\u011A:"E",\u011B:"e",\u011C:"G",\u01F4:"G",\u011D:"g",\u01F5:"g",\u011E:"G",\u011F:"g",\u0120:"G",\u0121:"g",\u0122:"G",\u0123:"g",\u0124:"H",\u0125:"h",\u0126:"H",\u0127:"h",\u1E2A:"H",\u1E2B:"h",\u0128:"I",\u0129:"i",\u012A:"I",\u012B:"i",\u012C:"I",\u012D:"i",\u012E:"I",\u012F:"i",\u0130:"I",\u0131:"i",\u0132:"IJ",\u0133:"ij",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u1E30:"K",\u1E31:"k",K\u0306:"K",k\u0306:"k",\u0139:"L",\u013A:"l",\u013B:"L",\u013C:"l",\u013D:"L",\u013E:"l",\u013F:"L",\u0140:"l",\u0141:"l",\u0142:"l",\u1E3E:"M",\u1E3F:"m",M\u0306:"M",m\u0306:"m",\u0143:"N",\u0144:"n",\u0145:"N",\u0146:"n",\u0147:"N",\u0148:"n",\u0149:"n",N\u0306:"N",n\u0306:"n",\u014C:"O",\u014D:"o",\u014E:"O",\u014F:"o",\u0150:"O",\u0151:"o",\u0152:"OE",\u0153:"oe",P\u0306:"P",p\u0306:"p",\u0154:"R",\u0155:"r",\u0156:"R",\u0157:"r",\u0158:"R",\u0159:"r",R\u0306:"R",r\u0306:"r",\u0212:"R",\u0213:"r",\u015A:"S",\u015B:"s",\u015C:"S",\u015D:"s",\u015E:"S",\u0218:"S",\u0219:"s",\u015F:"s",\u0160:"S",\u0161:"s",\u0162:"T",\u0163:"t",\u021B:"t",\u021A:"T",\u0164:"T",\u0165:"t",\u0166:"T",\u0167:"t",T\u0306:"T",t\u0306:"t",\u0168:"U",\u0169:"u",\u016A:"U",\u016B:"u",\u016C:"U",\u016D:"u",\u016E:"U",\u016F:"u",\u0170:"U",\u0171:"u",\u0172:"U",\u0173:"u",\u0216:"U",\u0217:"u",V\u0306:"V",v\u0306:"v",\u0174:"W",\u0175:"w",\u1E82:"W",\u1E83:"w",X\u0306:"X",x\u0306:"x",\u0176:"Y",\u0177:"y",\u0178:"Y",Y\u0306:"Y",y\u0306:"y",\u0179:"Z",\u017A:"z",\u017B:"Z",\u017C:"z",\u017D:"Z",\u017E:"z",\u017F:"s",\u0192:"f",\u01A0:"O",\u01A1:"o",\u01AF:"U",\u01B0:"u",\u01CD:"A",\u01CE:"a",\u01CF:"I",\u01D0:"i",\u01D1:"O",\u01D2:"o",\u01D3:"U",\u01D4:"u",\u01D5:"U",\u01D6:"u",\u01D7:"U",\u01D8:"u",\u01D9:"U",\u01DA:"u",\u01DB:"U",\u01DC:"u",\u1EE8:"U",\u1EE9:"u",\u1E78:"U",\u1E79:"u",\u01FA:"A",\u01FB:"a",\u01FC:"AE",\u01FD:"ae",\u01FE:"O",\u01FF:"o",\u00DE:"TH",\u00FE:"th",\u1E54:"P",\u1E55:"p",\u1E64:"S",\u1E65:"s",X\u0301:"X",x\u0301:"x",\u0403:"\u0413",\u0453:"\u0433",\u040C:"\u041A",\u045C:"\u043A",A\u030B:"A",a\u030B:"a",E\u030B:"E",e\u030B:"e",I\u030B:"I",i\u030B:"i",\u01F8:"N",\u01F9:"n",\u1ED2:"O",\u1ED3:"o",\u1E50:"O",\u1E51:"o",\u1EEA:"U",\u1EEB:"u",\u1E80:"W",\u1E81:"w",\u1EF2:"Y",\u1EF3:"y",\u0200:"A",\u0201:"a",\u0204:"E",\u0205:"e",\u0208:"I",\u0209:"i",\u020C:"O",\u020D:"o",\u0210:"R",\u0211:"r",\u0214:"U",\u0215:"u",B\u030C:"B",b\u030C:"b",\u010C\u0323:"C",\u010D\u0323:"c",\u00CA\u030C:"E",\u00EA\u030C:"e",F\u030C:"F",f\u030C:"f",\u01E6:"G",\u01E7:"g",\u021E:"H",\u021F:"h",J\u030C:"J",\u01F0:"j",\u01E8:"K",\u01E9:"k",M\u030C:"M",m\u030C:"m",P\u030C:"P",p\u030C:"p",Q\u030C:"Q",q\u030C:"q",\u0158\u0329:"R",\u0159\u0329:"r",\u1E66:"S",\u1E67:"s",V\u030C:"V",v\u030C:"v",W\u030C:"W",w\u030C:"w",X\u030C:"X",x\u030C:"x",Y\u030C:"Y",y\u030C:"y",A\u0327:"A",a\u0327:"a",B\u0327:"B",b\u0327:"b",\u1E10:"D",\u1E11:"d",\u0228:"E",\u0229:"e",\u0190\u0327:"E",\u025B\u0327:"e",\u1E28:"H",\u1E29:"h",I\u0327:"I",i\u0327:"i",\u0197\u0327:"I",\u0268\u0327:"i",M\u0327:"M",m\u0327:"m",O\u0327:"O",o\u0327:"o",Q\u0327:"Q",q\u0327:"q",U\u0327:"U",u\u0327:"u",X\u0327:"X",x\u0327:"x",Z\u0327:"Z",z\u0327:"z",\u0439:"\u0438",\u0419:"\u0418",\u0451:"\u0435",\u0401:"\u0415"},ep=Object.keys(Jm).join("|"),O0=new RegExp(ep,"g"),R0=new RegExp(ep,"");function V0(e){return Jm[e]}var tp=function(e){return e.replace(O0,V0)},k0=function(e){return!!e.match(R0)};Ma.exports=tp;Ma.exports.has=k0;Ma.exports.remove=tp});var dp=Ee((uO,fp)=>{"use strict";fp.exports=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var o,n,i;if(Array.isArray(t)){if(o=t.length,o!=r.length)return!1;for(n=o;n--!==0;)if(!e(t[n],r[n]))return!1;return!0}if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(n of t.entries())if(!r.has(n[0]))return!1;for(n of t.entries())if(!e(n[1],r.get(n[0])))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(n of t.entries())if(!r.has(n[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(r)){if(o=t.length,o!=r.length)return!1;for(n=o;n--!==0;)if(t[n]!==r[n])return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(i=Object.keys(t),o=i.length,o!==Object.keys(r).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=o;n--!==0;){var a=i[n];if(!e(t[a],r[a]))return!1}return!0}return t!==t&&r!==r}});var Do=Ee((IV,Gp)=>{Gp.exports=window.wp.date});var hg=Ee((Ck,vg)=>{vg.exports=window.wp.warning});var ih=Ee((NL,nh)=>{nh.exports=window.wp.deprecated});var Os=Ee((JL,bh)=>{bh.exports=window.wp.coreData});var yh=Ee((e3,xh)=>{xh.exports=window.wp.editor});var Rs=Ee((t3,wh)=>{wh.exports=window.wp.patterns});var Dh=Ee((c3,Nh)=>{Nh.exports=window.wp.blockEditor});import{useParams as x1,useNavigate as y1,useSearch as w1,Link as S1,useInvalidate as _1}from"@wordpress/route";var Oc=Object.prototype.hasOwnProperty;function Rc(e,t,r){for(r of e.keys())if(Lr(r,t))return r}function Lr(e,t){var r,o,n;if(e===t)return!0;if(e&&t&&(r=e.constructor)===t.constructor){if(r===Date)return e.getTime()===t.getTime();if(r===RegExp)return e.toString()===t.toString();if(r===Array){if((o=e.length)===t.length)for(;o--&&Lr(e[o],t[o]););return o===-1}if(r===Set){if(e.size!==t.size)return!1;for(o of e)if(n=o,n&&typeof n=="object"&&(n=Rc(t,n),!n)||!t.has(n))return!1;return!0}if(r===Map){if(e.size!==t.size)return!1;for(o of e)if(n=o[0],n&&typeof n=="object"&&(n=Rc(t,n),!n)||!Lr(o[1],t.get(n)))return!1;return!0}if(r===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(r===DataView){if((o=e.byteLength)===t.byteLength)for(;o--&&e.getInt8(o)===t.getInt8(o););return o===-1}if(ArrayBuffer.isView(e)){if((o=e.byteLength)===t.byteLength)for(;o--&&e[o]===t[o];);return o===-1}if(!r||typeof e=="object"){o=0;for(r in e)if(Oc.call(e,r)&&++o&&!Oc.call(t,r)||!(r in t)||!Lr(e[r],t[r]))return!1;return Object.keys(t).length===o}}return e!==e&&t!==t}var An=c(z(),1),bi=c(jt(),1),zs=c(Ls(),1);function Bs(e,t,r){return`dataviews-${e}-${t}-${r}`}var Dc=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function Hs(e,t,r){if(!t)return e;let o=e;for(let n of Dc)n in t&&(o={...o,[n]:t[n]});if(t.filters&&t.filters.length>0){let n=new Set(t.filters.map(a=>a.field)),i=(e.filters??[]).filter(a=>!n.has(a.field));o={...o,filters:[...i,...t.filters]}}return t.sort&&r&&e.sort?.field===r.sort?.field&&e.sort?.direction===r.sort?.direction&&(o={...o,sort:t.sort}),t.layout&&(o={...o,layout:{...o.layout,...t.layout}}),t.groupBy&&(o={...o,groupBy:t.groupBy}),o}function hi(e,t,r){if(!t)return e;let o=e;for(let n of Dc)if(n in t){let{[n]:i,...a}=o;o=a}if(t.filters&&t.filters.length>0){let n=new Set(t.filters.map(i=>i.field));o={...o,filters:(e.filters??[]).filter(i=>!n.has(i.field))}}if(t.sort&&e.sort?.field===t.sort.field&&e.sort?.direction===t.sort.direction&&(o={...o,sort:r?.sort}),t.layout&&"layout"in o&&o.layout){let n={...o.layout};for(let i of Object.keys(t.layout))delete n[i];o={...o,layout:Object.keys(n).length>0?n:void 0}}if(t.groupBy&&"groupBy"in o){let{groupBy:n,...i}=o;o=i}return o}function ob(e,t){let r={...e};for(let o of t)delete r[o];return r}function js(e){let{kind:t,name:r,slug:o,defaultView:n,activeViewOverrides:i,queryParams:a,onChangeQueryParams:l}=e,s=Bs(t,r,o),u=(0,bi.useSelect)(_=>_(zs.store).get("core/views",s),[s]),{set:f}=(0,bi.useDispatch)(zs.store),d=u??n,m=Number(a?.page??d.page??1),p=a?.search??d.search??"",g=(0,An.useMemo)(()=>Hs({...d,page:m,search:p},i,n),[d,m,p,i,n]),S=!!u,b=(0,An.useCallback)(_=>{let A={page:_?.page,search:_?.search},V=hi(ob(_,["page","search"]),i,n);l&&!Lr(A,{page:m,search:p})&&l(A);let I=hi(d,i,n),M=hi(n,i,n);Lr(I,V)||(Lr(V,M)?f("core/views",s,void 0):f("core/views",s,V))},[l,m,p,d,n,i,f,s]),y=(0,An.useCallback)(()=>{f("core/views",s,void 0)},[s,f]);return{view:g,isModified:S,updateView:b,resetToDefault:y}}var nb=c(jt(),1),ib=c(Ls(),1);var bt=c(z(),1),Is=c(Et(),1);var Bc=c(le(),1),Lc={};function Ws(e,t){let r=Bc.useRef(Lc);return r.current===Lc&&(r.current=e(t)),r}function Ys(e,...t){let r=new URL(`https://base-ui.com/production-error/${e}`);return t.forEach(o=>r.searchParams.append("args[]",o)),`Base UI error #${e}; visit ${r} for the full message.`}var yi=c(le(),1);function Gs(e,t,r,o){let n=Ws(jc).current;return ab(n,e,t,r,o)&&Wc(n,[e,t,r,o]),n.callback}function zc(e){let t=Ws(jc).current;return sb(t,e)&&Wc(t,e),t.callback}function jc(){return{callback:null,cleanup:null,refs:[]}}function ab(e,t,r,o,n){return e.refs[0]!==t||e.refs[1]!==r||e.refs[2]!==o||e.refs[3]!==n}function sb(e,t){return e.refs.length!==t.length||e.refs.some((r,o)=>r!==t[o])}function Wc(e,t){if(e.refs=t,t.every(r=>r==null)){e.callback=null;return}e.callback=r=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),r!=null){let o=Array(t.length).fill(null);for(let n=0;n{for(let n=0;n=e}function Us(e){if(!Uc.isValidElement(e))return null;let t=e,r=t.props;return(Gc(19)?r?.ref:t.ref)??null}function Tn(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}function qc(e,t){let r={};for(let o in e){let n=e[o];if(t?.hasOwnProperty(o)){let i=t[o](n);i!=null&&Object.assign(r,i);continue}n===!0?r[`data-${o.toLowerCase()}`]="":n&&(r[`data-${o.toLowerCase()}`]=n.toString())}return r}function $c(e,t){return typeof e=="function"?e(t):e}function Kc(e,t){return typeof e=="function"?e(t):e}var On={};function xi(e,t,r,o,n){let i={...qs(e,On)};return t&&(i=In(i,t)),r&&(i=In(i,r)),o&&(i=In(i,o)),n&&(i=In(i,n)),i}function Xc(e){if(e.length===0)return On;if(e.length===1)return qs(e[0],On);let t={...qs(e[0],On)};for(let r=1;r=65&&n<=90&&(typeof t=="function"||typeof t>"u")}function Zc(e){return typeof e=="function"}function qs(e,t){return Zc(e)?e(t):e??On}function fb(e,t){return t?e?r=>{if(mb(r)){let n=r;db(n);let i=t(n);return n.baseUIHandlerPrevented||e?.(n),i}let o=t(r);return e?.(r),o}:t:e}function db(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function $s(e,t){return t?e?t+" "+e:t:e}function mb(e){return e!=null&&typeof e=="object"&&"nativeEvent"in e}var pb=Object.freeze([]),Br=Object.freeze({});var Ks=c(le(),1);function Qc(e,t,r={}){let o=t.render,n=gb(t,r);if(r.enabled===!1)return null;let i=r.state??Br;return vb(e,o,n,i)}function gb(e,t={}){let{className:r,style:o,render:n}=e,{state:i=Br,ref:a,props:l,stateAttributesMapping:s,enabled:u=!0}=t,f=u?$c(r,i):void 0,d=u?Kc(o,i):void 0,m=u?qc(i,s):Br,p=u?Tn(m,Array.isArray(l)?Xc(l):l)??Br:Br;return typeof document<"u"&&(u?Array.isArray(a)?p.ref=zc([p.ref,Us(n),...a]):p.ref=Gs(p.ref,Us(n),a):Gs(null,null)),u?(f!==void 0&&(p.className=$s(p.className,f)),d!==void 0&&(p.style=Tn(p.style,d)),p):Br}function vb(e,t,r,o){if(t){if(typeof t=="function")return t(r,o);let n=xi(r,t.props);return n.ref=r.ref,yi.cloneElement(t,n)}if(e&&typeof e=="string")return hb(e,r);throw new Error(Ys(8))}function hb(e,t){return e==="button"?(0,Ks.createElement)("button",{type:"button",...t,key:t.key}):e==="img"?(0,Ks.createElement)("img",{alt:"",...t,key:t.key}):yi.createElement(e,t)}function af(e){return Qc(e.defaultTagName??"div",e,e)}function sf(e){var t,r,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var n=e.length;for(t=0;t{},fields:[],data:[],paginationInfo:{totalItems:0,totalPages:0},selection:[],onChangeSelection:()=>{},setOpenedFilter:()=>{},openedFilter:null,getItemId:e=>e.id,isItemClickable:()=>!0,renderItemLink:void 0,containerWidth:0,containerRef:(0,Qi.createRef)(),resizeObserverRef:()=>{},defaultLayouts:{list:{},grid:{},table:{}},filters:[],isShowingFilter:!1,setIsShowingFilter:()=>{},hasInitiallyLoaded:!1,hasInfiniteScrollHandler:!1,config:{perPageSizes:[]}});bf.displayName="DataViewsContext";var Y=bf;var _r=c(G(),1);var yo=c(G(),1),aa=c(U(),1),yt=c(z(),1),jl=c(Ml(),1);var wf=c(U(),1),Sf=c(G(),1),_f=c(R(),1);function Xr({selection:e,onChangeSelection:t,item:r,getItemId:o,titleField:n,disabled:i,...a}){let l=o(r),s=!i&&e.includes(l),u=n?.getValue?.({item:r})||(0,Sf.__)("(no title)");return(0,_f.jsx)(wf.CheckboxControl,{className:"dataviews-selection-checkbox","aria-label":u,"aria-disabled":i,checked:s,onChange:()=>{i||t(e.includes(l)?e.filter(f=>l!==f):[...e,l])},...a})}var bo=c(U(),1),Pf=c(G(),1),Uo=c(z(),1);var Af=c(jt(),1),Fl=c(Et(),1);var Cf=c(Nl(),1),{lock:D_,unlock:K}=(0,Cf.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/dataviews");var be=c(R(),1),{Menu:Go,kebabCase:Ob}=K(bo.privateApis);function Rb({action:e,onClick:t,items:r,variant:o}){let n=typeof e.label=="string"?e.label:e.label(r);return(0,be.jsx)(bo.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,size:"compact",variant:o,onClick:t,children:n})}function Vb({action:e,onClick:t,items:r}){let o=typeof e.label=="string"?e.label:e.label(r);return(0,be.jsx)(Go.Item,{disabled:e.disabled,onClick:t,children:(0,be.jsx)(Go.ItemLabel,{children:o})})}function xo({action:e,items:t,closeModal:r}){let o=typeof e.label=="string"?e.label:e.label(t),n=typeof e.modalHeader=="function"?e.modalHeader(t):e.modalHeader;return(0,be.jsx)(bo.Modal,{title:n||o,__experimentalHideHeader:!!e.hideModalHeader,onRequestClose:r,focusOnMount:e.modalFocusOnMount??!0,size:e.modalSize||"medium",overlayClassName:`dataviews-action-modal dataviews-action-modal__${Ob(e.id)}`,children:(0,be.jsx)(e.RenderModal,{items:t,closeModal:r})})}function Ll({actions:e,item:t,registry:r,setActiveModalAction:o}){let{primaryActions:n,regularActions:i}=(0,Uo.useMemo)(()=>e.reduce((l,s)=>((s.isPrimary?l.primaryActions:l.regularActions).push(s),l),{primaryActions:[],regularActions:[]}),[e]),a=l=>l.map(s=>(0,be.jsx)(Vb,{action:s,onClick:()=>{if("RenderModal"in s){o(s);return}s.callback([t],{registry:r})},items:[t]},s.id));return(0,be.jsxs)(Go.Group,{children:[a(n),a(i)]})}function qo({item:e,actions:t,isCompact:r}){let o=(0,Af.useRegistry)(),{primaryActions:n,eligibleActions:i}=(0,Uo.useMemo)(()=>{let l=t.filter(u=>!u.isEligible||u.isEligible(e));return{primaryActions:l.filter(u=>u.isPrimary),eligibleActions:l}},[t,e]),a=(0,Fl.useViewportMatch)("medium","<");return r?(0,be.jsx)(Ef,{item:e,actions:i,isSmall:!0,registry:o}):(0,be.jsxs)(F,{direction:"row",justify:"flex-end",className:"dataviews-item-actions",style:{flexShrink:0,width:"auto"},children:[(0,be.jsx)(Bl,{item:e,actions:n,registry:o}),(n.lengthi(null)})]})}function Bl({item:e,actions:t,registry:r,buttonVariant:o}){let[n,i]=(0,Uo.useState)(null);return(0,Fl.useViewportMatch)("medium","<")||!Array.isArray(t)||t.length===0?null:(0,be.jsxs)(be.Fragment,{children:[t.map(l=>(0,be.jsx)(Rb,{action:l,onClick:()=>{if("RenderModal"in l){i(l);return}l.callback([e],{registry:r})},items:[e],variant:o},l.id)),!!n&&(0,be.jsx)(xo,{action:n,items:[e],closeModal:()=>i(null)})]})}var $o=c(U(),1),Ji=c(G(),1),at=c(z(),1),Rf=c(jt(),1);var Hl=c(Et(),1);var Zr=c(G(),1);function Tf(e,t,r){return e>0?(0,Zr.sprintf)((0,Zr._n)("%d Item selected","%d Items selected",e),e):r>t?(0,Zr.sprintf)((0,Zr._n)("%1$d of %2$d Item","%1$d of %2$d Items",r),t,r):(0,Zr.sprintf)((0,Zr._n)("%d Item","%d Items",t),t)}var We=c(R(),1);function kb({action:e,items:t,ActionTriggerComponent:r}){let[o,n]=(0,at.useState)(!1);return(0,We.jsxs)(We.Fragment,{children:[(0,We.jsx)(r,{...{action:e,onClick:()=>{n(!0)},items:t}}),o&&(0,We.jsx)(xo,{action:e,items:t,closeModal:()=>n(!1)})]})}function ea(e,t){return(0,at.useMemo)(()=>e.some(r=>r.supportsBulk&&(!r.isEligible||r.isEligible(t))),[e,t])}function Ko(e,t){return(0,at.useMemo)(()=>t.some(r=>e.some(o=>o.supportsBulk&&(!o.isEligible||o.isEligible(r)))),[e,t])}function Mn({selection:e,onChangeSelection:t,data:r,actions:o,getItemId:n}){let i=(0,at.useMemo)(()=>r.filter(s=>o.some(u=>u.supportsBulk&&(!u.isEligible||u.isEligible(s)))),[r,o]),a=r.filter(s=>e.includes(n(s))&&i.includes(s)),l=a.length===i.length;return(0,We.jsx)($o.CheckboxControl,{className:"dataviews-view-table-selection-checkbox",checked:l,indeterminate:!l&&!!a.length,onChange:()=>{t(l?[]:i.map(s=>n(s)))},"aria-label":l?(0,Ji.__)("Deselect all"):(0,Ji.__)("Select all")})}function If({action:e,onClick:t,isBusy:r,items:o}){let n=typeof e.label=="string"?e.label:e.label(o);return(0,Hl.useViewportMatch)("medium","<")?(0,We.jsx)($o.Button,{disabled:r,accessibleWhenDisabled:!0,label:n,icon:e.icon,size:"compact",onClick:t,isBusy:r}):(0,We.jsx)($o.Button,{disabled:r,accessibleWhenDisabled:!0,size:"compact",onClick:t,isBusy:r,children:n})}var Vf=[];function Nb({action:e,selectedItems:t,actionInProgress:r,setActionInProgress:o}){let n=(0,Rf.useRegistry)(),i=(0,at.useMemo)(()=>t.filter(a=>!e.isEligible||e.isEligible(a)),[e,t]);return"RenderModal"in e?(0,We.jsx)(kb,{action:e,items:i,ActionTriggerComponent:If},e.id):(0,We.jsx)(If,{action:e,onClick:async()=>{o(e.id),await e.callback(t,{registry:n}),o(null)},items:i,isBusy:r===e.id},e.id)}function Of(e,t,r,o,n,i,a,l,s,u){let f=Tf(o.length,e.length,u.totalItems);return(0,We.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__container",gap:"md",align:"center",children:[(0,We.jsx)(Mn,{selection:o,onChangeSelection:s,data:e,actions:t,getItemId:r}),(0,We.jsx)("span",{className:"dataviews-bulk-actions-footer__item-count",children:f}),(0,We.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__action-buttons",gap:"xs",children:[n.map(d=>(0,We.jsx)(Nb,{action:d,selectedItems:i,actionInProgress:a,setActionInProgress:l},d.id)),i.length>0&&(0,We.jsx)($o.Button,{icon:Vn,showTooltip:!0,tooltipPosition:"top",size:"compact",label:(0,Ji.__)("Cancel"),disabled:!!a,accessibleWhenDisabled:!1,onClick:()=>{s(Vf)}})]})]})}function Db({selection:e,actions:t,onChangeSelection:r,data:o,getItemId:n,paginationInfo:i}){let[a,l]=(0,at.useState)(null),s=(0,at.useRef)(void 0),u=(0,Hl.useViewportMatch)("medium","<"),f=(0,at.useMemo)(()=>t.filter(g=>g.supportsBulk),[t]),d=(0,at.useMemo)(()=>o.filter(g=>f.some(S=>!S.isEligible||S.isEligible(g))),[o,f]),m=(0,at.useMemo)(()=>o.filter(g=>e.includes(n(g))&&d.includes(g)),[e,o,n,d]),p=(0,at.useMemo)(()=>t.filter(g=>g.supportsBulk&&(!u||g.icon)&&m.some(S=>!g.isEligible||g.isEligible(S))),[t,m,u]);if(a)s.current||(s.current=Of(o,t,n,e,p,m,a,l,r,i));else return s.current&&(s.current=void 0),Of(o,t,n,e,p,m,a,l,r,i);return s.current}function ta(){let{data:e,selection:t,actions:r=Vf,onChangeSelection:o,getItemId:n,paginationInfo:i}=(0,at.useContext)(Y);return(0,We.jsx)(Db,{selection:t,onChangeSelection:o,data:e,actions:r,getItemId:n,paginationInfo:i})}var yr=c(G(),1);var wr=c(U(),1),Qr=c(z(),1);function ra(e,t){let r=[e?.titleField,e?.mediaField,e?.descriptionField].filter(Boolean);return t.filter(o=>!r.includes(o.id)&&o.type!=="media"&&o.enableHiding!==!1)}var Z=c(R(),1),{Menu:ue}=K(wr.privateApis);function Mb({children:e}){return Qr.Children.toArray(e).filter(Boolean).map((t,r)=>(0,Z.jsxs)(Qr.Fragment,{children:[r>0&&(0,Z.jsx)(ue.Separator,{}),t]},r))}var Fb=(0,Qr.forwardRef)(function({fieldId:t,view:r,fields:o,onChangeView:n,onHide:i,setOpenedFilter:a,canMove:l=!0,canInsertLeft:s=!0,canInsertRight:u=!0},f){let d=r.fields??[],m=d?.indexOf(t),p=r.sort?.field===t,g=!1,S=!1,b=!1,y=[],_=o.find(C=>C.id===t),{setIsShowingFilter:A}=(0,Qr.useContext)(Y);if(!_)return null;g=_.enableHiding!==!1,S=_.enableSorting!==!1;let V=_.header;if(y=!!_.filterBy&&_.filterBy?.operators||[],b=!r.filters?.some(C=>t===C.field)&&!!(_.hasElements||_.Edit)&&_.filterBy!==!1&&!_.filterBy?.isPrimary,!S&&!l&&!g&&!b)return V;let I=ra(r,o).filter(C=>!d.includes(C.id)),M=(s||u)&&!!I.length,N=(0,yr.isRTL)();return(0,Z.jsxs)(ue,{children:[(0,Z.jsxs)(ue.TriggerButton,{render:(0,Z.jsx)(wr.Button,{size:"compact",className:"dataviews-view-table-header-button",ref:f,variant:"tertiary"}),children:[V,r.sort&&p&&(0,Z.jsx)("span",{"aria-hidden":"true",children:df[r.sort.direction]})]}),(0,Z.jsx)(ue.Popover,{style:{minWidth:"240px"},children:(0,Z.jsxs)(Mb,{children:[S&&(0,Z.jsx)(ue.Group,{children:$i.map(C=>{let T=r.sort&&p&&r.sort.direction===C,k=`${t}-${C}`;return(0,Z.jsx)(ue.RadioItem,{name:"view-table-sorting",value:k,checked:T,onChange:()=>{n({...r,sort:{field:t,direction:C},showLevels:!1})},children:(0,Z.jsx)(ue.ItemLabel,{children:Xi[C]})},k)})}),b&&(0,Z.jsx)(ue.Group,{children:(0,Z.jsx)(ue.Item,{prefix:(0,Z.jsx)(wr.Icon,{icon:kn}),onClick:()=>{a(t),A(!0),n({...r,page:1,filters:[...r.filters||[],{field:t,value:void 0,operator:y[0]}]})},children:(0,Z.jsx)(ue.ItemLabel,{children:(0,yr.__)("Add filter")})})}),(l||g||M)&&_&&(0,Z.jsxs)(ue.Group,{children:[l&&(0,Z.jsx)(ue.Item,{prefix:(0,Z.jsx)(wr.Icon,{icon:el}),disabled:N?m>=d.length-1:m<1,onClick:()=>{let C=N?m+1:m-1,T=[...d];T.splice(m,1),T.splice(C,0,t),n({...r,fields:T})},children:(0,Z.jsx)(ue.ItemLabel,{children:(0,yr.__)("Move left")})}),l&&(0,Z.jsx)(ue.Item,{prefix:(0,Z.jsx)(wr.Icon,{icon:rl}),disabled:N?m<1:m>=d.length-1,onClick:()=>{let C=N?m-1:m+1,T=[...d];T.splice(m,1),T.splice(C,0,t),n({...r,fields:T})},children:(0,Z.jsx)(ue.ItemLabel,{children:(0,yr.__)("Move right")})}),s&&!!I.length&&(0,Z.jsxs)(ue,{children:[(0,Z.jsx)(ue.SubmenuTriggerItem,{children:(0,Z.jsx)(ue.ItemLabel,{children:(0,yr.__)("Insert left")})}),(0,Z.jsx)(ue.Popover,{children:I.map(C=>{let T=N?m+1:m;return(0,Z.jsx)(ue.Item,{onClick:()=>{n({...r,fields:[...d.slice(0,T),C.id,...d.slice(T)]})},children:(0,Z.jsx)(ue.ItemLabel,{children:C.label})},C.id)})})]}),u&&!!I.length&&(0,Z.jsxs)(ue,{children:[(0,Z.jsx)(ue.SubmenuTriggerItem,{children:(0,Z.jsx)(ue.ItemLabel,{children:(0,yr.__)("Insert right")})}),(0,Z.jsx)(ue.Popover,{children:I.map(C=>{let T=N?m:m+1;return(0,Z.jsx)(ue.Item,{onClick:()=>{n({...r,fields:[...d.slice(0,T),C.id,...d.slice(T)]})},children:(0,Z.jsx)(ue.ItemLabel,{children:C.label})},C.id)})})]}),g&&_&&(0,Z.jsx)(ue.Item,{prefix:(0,Z.jsx)(wr.Icon,{icon:Dn}),onClick:()=>{i(_),n({...r,fields:d.filter(C=>C!==t)})},children:(0,Z.jsx)(ue.ItemLabel,{children:(0,yr.__)("Hide column")})})]})]})})]})}),Lb=Fb,Xo=Lb;var kf=c(z(),1),zl=c(R(),1);function Bb({item:e,isItemClickable:t,onClickItem:r,className:o}){return!t(e)||!r?{className:o}:{className:o?`${o} ${o}--clickable`:void 0,role:"button",tabIndex:0,onClick:n=>{n.stopPropagation(),r(e)},onKeyDown:n=>{(n.key==="Enter"||n.key===""||n.key===" ")&&(n.stopPropagation(),r(e))}}}function Jr({item:e,isItemClickable:t,onClickItem:r,renderItemLink:o,className:n,children:i,...a}){if(!t(e))return(0,zl.jsx)("div",{className:n,...a,children:i});if(o){let s=o({item:e,className:`${n} ${n}--clickable`,...a,children:i});return(0,kf.cloneElement)(s,{onClick:u=>{u.stopPropagation(),s.props.onClick&&s.props.onClick(u)},onKeyDown:u=>{(u.key==="Enter"||u.key===""||u.key===" ")&&(u.stopPropagation(),s.props.onKeyDown&&s.props.onKeyDown(u))}})}let l=Bb({item:e,isItemClickable:t,onClickItem:r,className:n});return(0,zl.jsx)("div",{...l,...a,children:i})}var Zt=c(R(),1);function Hb({item:e,level:t,titleField:r,mediaField:o,descriptionField:n,onClickItem:i,renderItemLink:a,isItemClickable:l}){return(0,Zt.jsxs)(F,{direction:"row",gap:"md",align:"flex-start",justify:"flex-start",children:[o&&(0,Zt.jsx)(Jr,{item:e,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-column-primary__media","aria-label":l(e)&&(i||a)&&r?r.getValue?.({item:e}):void 0,children:(0,Zt.jsx)(o.render,{item:e,field:o,config:{sizes:"32px"}})}),(0,Zt.jsxs)(F,{direction:"column",align:"flex-start",className:"dataviews-view-table__primary-column-content",children:[r&&(0,Zt.jsxs)(Jr,{item:e,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-title-field",children:[t!==void 0&&t>0&&(0,Zt.jsxs)("span",{className:"dataviews-view-table__level",children:[Array(t).fill("\u2014").join(" "),"\xA0"]}),(0,Zt.jsx)(r.render,{item:e,field:r})]}),n&&(0,Zt.jsx)(n.render,{item:e,field:n})]})]})}var oa=Hb;var Nf=c(Et(),1),Zo=c(z(),1),Df=c(G(),1),zb=e=>(0,Df.isRTL)()?Math.abs(e.scrollLeft)<=1:e.scrollLeft+e.clientWidth>=e.scrollWidth-1;function Mf({scrollContainerRef:e,enabled:t=!1}){let[r,o]=(0,Zo.useState)(!1),n=(0,Nf.useDebounce)((0,Zo.useCallback)(()=>{let i=e.current;i&&o(zb(i))},[e,o]),200);return(0,Zo.useEffect)(()=>typeof window>"u"||!t||!e.current?()=>{}:(n(),e.current.addEventListener("scroll",n),window.addEventListener("resize",n),()=>{e.current?.removeEventListener("scroll",n),window.removeEventListener("resize",n)}),[e,t]),r}function Dt(e,t){return e.reduce((r,o)=>{let n=t.getValue({item:o});return r.has(n)||r.set(n,[]),r.get(n)?.push(o),r},new Map)}var eo=c(U(),1),Lf=c(G(),1),Bf=c(z(),1);var Pt=c(R(),1);function Ff({field:e,isVisible:t,onToggleVisibility:r}){return(0,Pt.jsx)(eo.__experimentalItem,{onClick:e.enableHiding?r:void 0,children:(0,Pt.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",align:"center",children:[(0,Pt.jsx)("div",{style:{height:24,width:24},children:t&&(0,Pt.jsx)(eo.Icon,{icon:Rn})}),(0,Pt.jsx)("span",{className:"dataviews-view-config__label",children:e.label})]})})}function jb(e){return!!e}function na({showLabel:e=!0}){let{view:t,fields:r,onChangeView:o}=(0,Bf.useContext)(Y),n=ra(t,r);if(!n?.length)return null;let i=r.find(g=>g.id===t.titleField),a=r.find(g=>g.id===t.mediaField),l=r.find(g=>g.id===t.descriptionField),s=[{field:i,isVisibleFlag:"showTitle"},{field:a,isVisibleFlag:"showMedia"},{field:l,isVisibleFlag:"showDescription"}].filter(({field:g})=>jb(g)),u=t.fields??[],f=n.filter(g=>u.includes(g.id)).length,d=s.filter(({isVisibleFlag:g})=>t[g]??!0),m=d.length+f,p=m===1&&d.length===1;return(0,Pt.jsxs)(F,{direction:"column",className:"dataviews-field-control",children:[e&&(0,Pt.jsx)(eo.BaseControl.VisualLabel,{children:(0,Lf.__)("Properties")}),(0,Pt.jsx)(F,{direction:"column",className:"dataviews-view-config__properties",children:(0,Pt.jsxs)(eo.__experimentalItemGroup,{isBordered:!0,isSeparated:!0,size:"medium",children:[s.map(({field:g,isVisibleFlag:S})=>{let b=t[S]??!0,y=p&&b?{...g,enableHiding:!1}:g;return(0,Pt.jsx)(Ff,{field:y,isVisible:b,onToggleVisibility:()=>{o({...t,[S]:!b})}},g.id)}),n.map(g=>{let S=u.includes(g.id),b=m===1&&S?{...g,enableHiding:!1}:g;return(0,Pt.jsx)(Ff,{field:b,isVisible:S,onToggleVisibility:()=>{o({...t,fields:S?u.filter(y=>y!==g.id):[...u,g.id]})}},g.id)})]})})]})}var ia=c(z(),1);function Qt(e,t={delay:400}){let[r,o]=(0,ia.useState)(!1);return(0,ia.useEffect)(()=>{if(!e)return;let n=setTimeout(()=>{o(!0)},t.delay);return()=>{clearTimeout(n),o(!1)}},[e,t.delay]),r}var $=c(R(),1);function zf(e,t){if(e)return e;if(t==="integer"||t==="number")return"end"}function Wb({item:e,fields:t,column:r,align:o}){let n=t.find(a=>a.id===r);if(!n)return null;let i=j("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,$.jsx)("div",{className:i,children:(0,$.jsx)(n.render,{item:e,field:n})})}function Hf({hasBulkActions:e,item:t,level:r,actions:o,fields:n,id:i,view:a,titleField:l,mediaField:s,descriptionField:u,selection:f,getItemId:d,isItemClickable:m,onClickItem:p,renderItemLink:g,onChangeSelection:S,isActionsColumnSticky:b,posinset:y}){let{paginationInfo:_}=(0,yt.useContext)(Y),A=ea(o,t),V=A&&f.includes(i),{showTitle:I=!0,showMedia:M=!0,showDescription:N=!0,infiniteScrollEnabled:C}=a,T=(0,yt.useRef)(!1),k=a.fields??[],h=l&&I||s&&M||u&&N;return(0,$.jsxs)("tr",{className:j("dataviews-view-table__row",{"is-selected":A&&V,"has-bulk-actions":A}),onTouchStart:()=>{T.current=!0},"aria-setsize":C?_.totalItems:void 0,"aria-posinset":y,role:C?"article":void 0,onMouseDown:E=>{let P=(0,jl.isAppleOS)()?E.metaKey:E.ctrlKey;E.button===0&&P&&window.navigator.userAgent.toLowerCase().includes("firefox")&&E?.preventDefault()},onClick:E=>{if(!A)return;((0,jl.isAppleOS)()?E.metaKey:E.ctrlKey)&&!T.current&&document.getSelection()?.type!=="Range"&&S(f.includes(i)?f.filter(w=>i!==w):[...f,i])},children:[e&&(0,$.jsx)("td",{className:"dataviews-view-table__checkbox-column",children:(0,$.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,$.jsx)(Xr,{item:t,selection:f,onChangeSelection:S,getItemId:d,titleField:l,disabled:!A})})}),h&&(0,$.jsx)("td",{children:(0,$.jsx)(oa,{item:t,level:r,titleField:I?l:void 0,mediaField:M?s:void 0,descriptionField:N?u:void 0,isItemClickable:m,onClickItem:p,renderItemLink:g})}),k.map(E=>{let{width:P,maxWidth:w,minWidth:O,align:x}=a.layout?.styles?.[E]??{},v=n.find(B=>B.id===E),D=zf(x,v?.type);return(0,$.jsx)("td",{style:{width:P,maxWidth:w,minWidth:O},children:(0,$.jsx)(Wb,{fields:n,item:t,column:E,align:D})},E)}),!!o?.length&&(0,$.jsx)("td",{className:j("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":b}),onClick:E=>E.stopPropagation(),children:(0,$.jsx)(qo,{item:t,actions:o})})]})}function Yb({actions:e,data:t,fields:r,getItemId:o,getItemLevel:n,isLoading:i=!1,onChangeView:a,onChangeSelection:l,selection:s,setOpenedFilter:u,onClickItem:f,isItemClickable:d,renderItemLink:m,view:p,className:g,empty:S}){let{containerRef:b}=(0,yt.useContext)(Y),y=Qt(i),_=(0,yt.useRef)(new Map),A=(0,yt.useRef)(void 0),[V,I]=(0,yt.useState)(),[M,N]=(0,yt.useState)(null);(0,yt.useEffect)(()=>{A.current&&(A.current.focus(),A.current=void 0)});let C=(0,yt.useId)(),T=Mf({scrollContainerRef:b,enabled:!!e?.length}),k=Ko(e,t);if(V){A.current=V,I(void 0);return}let h=q=>{let Q=_.current.get(q.id),he=Q?_.current.get(Q.fallback):void 0;I(he?.node)},E=q=>{q.preventDefault(),q.stopPropagation();let Q={getBoundingClientRect:()=>({x:q.clientX,y:q.clientY,top:q.clientY,left:q.clientX,right:q.clientX,bottom:q.clientY,width:0,height:0,toJSON:()=>({})})};window.requestAnimationFrame(()=>{N(Q)})},P=!!t?.length,w=r.find(q=>q.id===p.titleField),O=r.find(q=>q.id===p.mediaField),x=r.find(q=>q.id===p.descriptionField),v=p.groupBy?.field?r.find(q=>q.id===p.groupBy?.field):null,D=v?Dt(t,v):null,{showTitle:B=!0,showMedia:oe=!0,showDescription:fe=!0}=p,Ne=w&&B||O&&oe||x&&fe,He=p.fields??[],ot=(q,Q)=>he=>{he?_.current.set(q,{node:he,fallback:He[Q>0?Q-1:1]}):_.current.delete(q)},qt=p.infiniteScrollEnabled&&!D,vr=(0,yo.isRTL)();return P?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("table",{className:j("dataviews-view-table",g,{[`has-${p.layout?.density}-density`]:p.layout?.density&&["compact","comfortable"].includes(p.layout.density),"has-bulk-actions":k,"is-refreshing":!qt&&y}),"aria-busy":i,"aria-describedby":C,role:qt?"feed":void 0,inert:!qt&&i?"true":void 0,children:[(0,$.jsxs)("colgroup",{children:[k&&(0,$.jsx)("col",{className:"dataviews-view-table__col-checkbox"}),Ne&&(0,$.jsx)("col",{className:"dataviews-view-table__col-first-data"}),He.map((q,Q)=>(0,$.jsx)("col",{className:j(`dataviews-view-table__col-${q}`,{"dataviews-view-table__col-first-data":!Ne&&Q===0})},`col-${q}`)),!!e?.length&&(0,$.jsx)("col",{className:"dataviews-view-table__col-actions"})]}),M&&(0,$.jsx)(aa.Popover,{anchor:M,onClose:()=>N(null),placement:"bottom-start",children:(0,$.jsx)(na,{showLabel:!1})}),(0,$.jsx)("thead",{onContextMenu:E,children:(0,$.jsxs)("tr",{className:"dataviews-view-table__row",children:[k&&(0,$.jsx)("th",{className:"dataviews-view-table__checkbox-column",scope:"col",onContextMenu:E,children:(0,$.jsx)(Mn,{selection:s,onChangeSelection:l,data:t,actions:e,getItemId:o})}),Ne&&(0,$.jsx)("th",{scope:"col",children:w&&(0,$.jsx)(Xo,{ref:ot(w.id,0),fieldId:w.id,view:p,fields:r,onChangeView:a,onHide:h,setOpenedFilter:u,canMove:!1,canInsertLeft:vr?p.layout?.enableMoving??!0:!1,canInsertRight:vr?!1:p.layout?.enableMoving??!0})}),He.map((q,Q)=>{let{width:he,maxWidth:hr,minWidth:br,align:go}=p.layout?.styles?.[q]??{},vo=r.find(Fs=>Fs.id===q),jo=zf(go,vo?.type),Pn=p.layout?.enableMoving??!0;return(0,$.jsx)("th",{style:{width:he,maxWidth:hr,minWidth:br,textAlign:jo},"aria-sort":p.sort?.direction&&p.sort?.field===q?Ki[p.sort.direction]:void 0,scope:"col",children:(0,$.jsx)(Xo,{ref:ot(q,Q),fieldId:q,view:p,fields:r,onChangeView:a,onHide:h,setOpenedFilter:u,canMove:Pn,canInsertLeft:Pn,canInsertRight:Pn})},q)}),!!e?.length&&(0,$.jsx)("th",{className:j("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":!T}),children:(0,$.jsx)("span",{className:"dataviews-view-table-header",children:(0,yo.__)("Actions")})})]})}),P&&v&&D?Array.from(D.entries()).map(([q,Q])=>(0,$.jsxs)("tbody",{children:[(0,$.jsx)("tr",{className:"dataviews-view-table__group-header-row",children:(0,$.jsx)("td",{colSpan:He.length+(Ne?1:0)+(k?1:0)+(e?.length?1:0),className:"dataviews-view-table__group-header-cell",children:p.groupBy?.showLabel===!1?q:(0,yo.sprintf)((0,yo.__)("%1$s: %2$s"),v.label,q)})}),Q.map((he,hr)=>(0,$.jsx)(Hf,{item:he,level:p.showLevels&&typeof n=="function"?n(he):void 0,hasBulkActions:k,actions:e,fields:r,id:o(he)||hr.toString(),view:p,titleField:w,mediaField:O,descriptionField:x,selection:s,getItemId:o,onChangeSelection:l,onClickItem:f,renderItemLink:m,isItemClickable:d,isActionsColumnSticky:!T},o(he)))]},`group-${q}`)):(0,$.jsx)("tbody",{children:P&&t.map((q,Q)=>(0,$.jsx)(Hf,{item:q,level:p.showLevels&&typeof n=="function"?n(q):void 0,hasBulkActions:k,actions:e,fields:r,id:o(q)||Q.toString(),view:p,titleField:w,mediaField:O,descriptionField:x,selection:s,getItemId:o,onChangeSelection:l,onClickItem:f,renderItemLink:m,isItemClickable:d,isActionsColumnSticky:!T,posinset:qt?Q+1:void 0},o(q)))})]}),qt&&i&&(0,$.jsx)("div",{className:"dataviews-loading",id:C,children:(0,$.jsx)("p",{className:"dataviews-loading-more",children:(0,$.jsx)(aa.Spinner,{})})})]}):(0,$.jsx)("div",{className:j("dataviews-no-results",{"is-refreshing":y}),id:C,children:S})}var jf=Yb;var Uf=c(U(),1),ua=c(G(),1);var At=c(U(),1);var Fn=c(G(),1),Yf=c(Et(),1),Gf=c(Ml(),1),la=c(z(),1);var Gb=c(U(),1),Ub=c(G(),1),sa=c(z(),1);var qb=c(R(),1),$b=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}],Kb=$b[2].value;function Wf(){let e=(0,sa.useContext)(Y),t=e.view;return(0,sa.useMemo)(()=>{let r=e.containerWidth,o=32,n=t.layout?.previewSize??Kb,i=Math.floor((r+o)/(n+o));return Math.max(1,i)},[e.containerWidth,t.layout?.previewSize])}var ie=c(R(),1),{Badge:Xb}=K(At.privateApis);function Zb(e,t){let r=[];for(let o=0,n=e.length;o{if(y.onClickCapture?.(x),(0,Gf.isAppleOS)()?x.metaKey:x.ctrlKey){if(x.stopPropagation(),x.preventDefault(),!M)return;o(r.includes(N)?r.filter(v=>N!==v):[...r,N])}},children:[(0,ie.jsx)(Jr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:j("dataviews-view-grid__media",{"dataviews-view-grid__media--placeholder":!h}),...w,children:E}),S&&(0,ie.jsx)(Xr,{item:s,selection:r,onChangeSelection:o,getItemId:l,titleField:d,disabled:!M}),!!u?.length&&(0,ie.jsx)("div",{className:"dataviews-view-grid__media-actions",children:(0,ie.jsx)(qo,{item:s,actions:u,isCompact:!0})}),A&&(0,ie.jsx)("div",{className:"dataviews-view-grid__title",children:(0,ie.jsx)(Jr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:"dataviews-view-grid__title-field dataviews-title-field",...O,title:d?.getValueFormatted({item:s,field:d})||void 0,children:P})}),(0,ie.jsxs)(F,{direction:"column",gap:"xs",children:[I&&m?.render&&(0,ie.jsx)(m.render,{item:s,field:m}),!!g?.length&&(0,ie.jsx)(F,{direction:"row",className:"dataviews-view-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:g.map(x=>(0,ie.jsx)(Xb,{className:"dataviews-view-grid__field-value",children:(0,ie.jsx)(x.render,{item:s,field:x})},x.id))}),!!p?.length&&(0,ie.jsx)(F,{direction:"column",className:"dataviews-view-grid__fields",gap:"xs",children:p.map(x=>(0,ie.jsx)(At.Flex,{className:"dataviews-view-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)(At.Tooltip,{text:x.label,children:(0,ie.jsx)(At.FlexItem,{className:"dataviews-view-grid__field-name",children:x.header})}),(0,ie.jsx)(At.FlexItem,{className:"dataviews-view-grid__field-value",style:{maxHeight:"none"},children:(0,ie.jsx)(x.render,{item:s,field:x})})]})},x.id))})]})]})});function Wl({data:e,isInfiniteScroll:t,className:r,inert:o,isLoading:n,view:i,fields:a,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:f,renderItemLink:d,getItemId:m,actions:p}){let{paginationInfo:g,resizeObserverRef:S}=(0,la.useContext)(Y),b=Wf(),y=Ko(p,e),_=a.find(k=>k.id===i?.titleField),A=a.find(k=>k.id===i?.mediaField),V=a.find(k=>k.id===i?.descriptionField),I=i.fields??[],{regularFields:M,badgeFields:N}=I.reduce((k,h)=>{let E=a.find(w=>w.id===h);if(!E)return k;let P=i.layout?.badgeFields?.includes(h)?"badgeFields":"regularFields";return k[P].push(E),k},{regularFields:[],badgeFields:[]}),C="900px",T=Math.ceil(e.length/b);return(0,ie.jsx)(At.Composite,{role:t?"feed":"grid",className:j("dataviews-view-grid",r),focusWrap:!0,"aria-busy":n,"aria-rowcount":t?void 0:T,ref:S,inert:o,children:Zb(e,b).map((k,h)=>(0,ie.jsx)(At.Composite.Row,{render:(0,ie.jsx)("div",{role:"row","aria-rowindex":h+1,"aria-label":(0,Fn.sprintf)((0,Fn.__)("Row %d"),h+1),className:"dataviews-view-grid__row",style:{gridTemplateColumns:`repeat( ${b}, minmax(0, 1fr) )`}}),children:k.map((E,P)=>{let w=h*b+P;return(0,ie.jsx)(At.Composite.Item,{render:O=>(0,ie.jsx)(Qb,{...O,role:t?"article":"gridcell","aria-setsize":t?g.totalItems:void 0,"aria-posinset":t?w+1:void 0,view:i,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:f,renderItemLink:d,getItemId:m,item:E,actions:p,mediaField:A,titleField:_,descriptionField:V,regularFields:M,badgeFields:N,hasBulkActions:y,config:{sizes:C}})},m(E))})},h))})}var Tt=c(R(),1);function Jb({actions:e,data:t,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,selection:u,view:f,className:d,empty:m}){let p=Qt(!!n),g=!!t?.length,S=f.groupBy?.field?r.find(A=>A.id===f.groupBy?.field):null,b=S?Dt(t,S):null,y=f.infiniteScrollEnabled&&!b;if(!g)return(0,Tt.jsx)("div",{className:j("dataviews-no-results",{"is-refreshing":p}),children:m});let _={className:j(d,{"is-refreshing":!y&&p}),inert:!y&&n?"true":void 0,isLoading:n,view:f,fields:r,selection:u,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,getItemId:o,actions:e};return(0,Tt.jsxs)(Tt.Fragment,{children:[g&&S&&b&&(0,Tt.jsx)(F,{direction:"column",gap:"lg",children:Array.from(b.entries()).map(([A,V])=>(0,Tt.jsxs)(F,{direction:"column",gap:"sm",children:[(0,Tt.jsx)("h3",{className:"dataviews-view-grid__group-header",children:f.groupBy?.showLabel===!1?A:(0,ua.sprintf)((0,ua.__)("%1$s: %2$s"),S.label,A)}),(0,Tt.jsx)(Wl,{..._,data:V,isInfiniteScroll:!1})]},A))}),!b&&(0,Tt.jsx)(Wl,{..._,data:t,isInfiniteScroll:!!y}),y&&n&&(0,Tt.jsx)("p",{className:"dataviews-loading-more",children:(0,Tt.jsx)(Uf.Spinner,{})})]})}var qf=Jb;var ca=c(Et(),1),qe=c(U(),1),Be=c(z(),1),Ln=c(G(),1);var ql=c(jt(),1);var W=c(R(),1),{Menu:Yl}=K(qe.privateApis);function Gl(e){return`${e}-item-wrapper`}function ex(e,t){return`${e}-primary-action-${t}`}function Ul(e){return`${e}-dropdown`}function tx({idPrefix:e,primaryAction:t,item:r}){let o=(0,ql.useRegistry)(),[n,i]=(0,Be.useState)(!1),a=ex(e,t.id),l=typeof t.label=="string"?t.label:t.label([r]);return"RenderModal"in t?(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(qe.Composite.Item,{id:a,render:(0,W.jsx)(qe.Button,{disabled:!!t.disabled,accessibleWhenDisabled:!0,text:l,size:"small",onClick:()=>i(!0)}),children:n&&(0,W.jsx)(xo,{action:t,items:[r],closeModal:()=>i(!1)})})},t.id):(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(qe.Composite.Item,{id:a,render:(0,W.jsx)(qe.Button,{disabled:!!t.disabled,accessibleWhenDisabled:!0,size:"small",onClick:()=>{t.callback([r],{registry:o})},children:l})})},t.id)}function $f({view:e,actions:t,idPrefix:r,isSelected:o,item:n,titleField:i,mediaField:a,descriptionField:l,onSelect:s,otherFields:u,onDropdownTriggerKeyDown:f,posinset:d}){let{showTitle:m=!0,showMedia:p=!0,showDescription:g=!0,infiniteScrollEnabled:S}=e,b=(0,Be.useRef)(null),y=`${r}-label`,_=`${r}-description`,A=(0,ql.useRegistry)(),[V,I]=(0,Be.useState)(!1),[M,N]=(0,Be.useState)(null),C=({type:x})=>{I(x==="mouseenter")},{paginationInfo:T}=(0,Be.useContext)(Y);(0,Be.useEffect)(()=>{o&&b.current?.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})},[o]);let{primaryAction:k,eligibleActions:h}=(0,Be.useMemo)(()=>{let x=t.filter(D=>!D.isEligible||D.isEligible(n));return{primaryAction:x.filter(D=>D.isPrimary)[0],eligibleActions:x}},[t,n]),E=k&&t.length===1,P=p&&a?.render?(0,W.jsx)("div",{className:"dataviews-view-list__media-wrapper",children:(0,W.jsx)(a.render,{item:n,field:a,config:{sizes:"52px"}})}):null,w=m&&i?.render?(0,W.jsx)(i.render,{item:n,field:i}):null,O=h?.length>0&&(0,W.jsxs)(F,{direction:"row",gap:"md",className:"dataviews-view-list__item-actions",children:[k&&(0,W.jsx)(tx,{idPrefix:r,primaryAction:k,item:n}),!E&&(0,W.jsxs)("div",{role:"gridcell",children:[(0,W.jsxs)(Yl,{placement:"bottom-end",children:[(0,W.jsx)(Yl.TriggerButton,{render:(0,W.jsx)(qe.Composite.Item,{id:Ul(r),render:(0,W.jsx)(qe.Button,{size:"small",icon:Nn,label:(0,Ln.__)("Actions"),accessibleWhenDisabled:!0,disabled:!t.length,onKeyDown:f})})}),(0,W.jsx)(Yl.Popover,{children:(0,W.jsx)(Ll,{actions:h,item:n,registry:A,setActiveModalAction:N})})]}),!!M&&(0,W.jsx)(xo,{action:M,items:[n],closeModal:()=>N(null)})]})]});return(0,W.jsx)(qe.Composite.Row,{ref:b,render:(0,W.jsx)("div",{"aria-posinset":d,"aria-setsize":S?T.totalItems:void 0}),role:S?"article":"row",className:j({"is-selected":o,"is-hovered":V}),onMouseEnter:C,onMouseLeave:C,children:(0,W.jsxs)(F,{direction:"row",className:"dataviews-view-list__item-wrapper",children:[(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(qe.Composite.Item,{id:Gl(r),"aria-pressed":o,"aria-labelledby":y,"aria-describedby":_,className:"dataviews-view-list__item",onClick:()=>s(n)})}),(0,W.jsxs)(F,{direction:"row",gap:"md",justify:"start",align:"flex-start",style:{flex:1,minWidth:0},children:[P,(0,W.jsxs)(F,{direction:"column",gap:"xs",className:"dataviews-view-list__field-wrapper",children:[(0,W.jsxs)(F,{direction:"row",align:"center",children:[(0,W.jsx)("div",{className:"dataviews-title-field dataviews-view-list__title-field",id:y,children:w}),O]}),g&&l?.render&&(0,W.jsx)("div",{className:"dataviews-view-list__field",children:(0,W.jsx)(l.render,{item:n,field:l})}),(0,W.jsx)("div",{className:"dataviews-view-list__fields",id:_,children:u.map(x=>(0,W.jsxs)("div",{className:"dataviews-view-list__field",children:[(0,W.jsx)(qe.VisuallyHidden,{as:"span",className:"dataviews-view-list__field-label",children:x.label}),(0,W.jsx)("span",{className:"dataviews-view-list__field-value",children:(0,W.jsx)(x.render,{item:n,field:x})})]},x.id))})]})]})]})})}function rx(e){return!!e}function $l(e){let{actions:t,data:r,fields:o,getItemId:n,isLoading:i,onChangeSelection:a,selection:l,view:s,className:u,empty:f}=e,d=(0,ca.useInstanceId)($l,"view-list"),m=Qt(!!i),p=r?.findLast(x=>l.includes(n(x))),g=o.find(x=>x.id===s.titleField),S=o.find(x=>x.id===s.mediaField),b=o.find(x=>x.id===s.descriptionField),y=(s?.fields??[]).map(x=>o.find(v=>x===v.id)).filter(rx),_=x=>a([n(x)]),A=(0,Be.useCallback)(x=>`${d}-${n(x)}`,[d,n]),V=(0,Be.useCallback)((x,v)=>v.startsWith(A(x)),[A]),[I,M]=(0,Be.useState)(void 0);(0,Be.useEffect)(()=>{p&&M(Gl(A(p)))},[p,A]);let N=r.findIndex(x=>V(x,I??"")),C=(0,ca.usePrevious)(N),T=N!==-1,k=(0,Be.useCallback)((x,v)=>{let D=Math.min(r.length-1,Math.max(0,x));if(!r[D])return;let B=A(r[D]),oe=v(B);M(oe),document.getElementById(oe)?.focus()},[r,A]);(0,Be.useEffect)(()=>{!T&&(C!==void 0&&C!==-1)&&k(C,Gl)},[T,k,C]);let h=(0,Be.useCallback)(x=>{x.key==="ArrowDown"&&(x.preventDefault(),k(N+1,Ul)),x.key==="ArrowUp"&&(x.preventDefault(),k(N-1,Ul))},[k,N]),E=!!r?.length,P=s.groupBy?.field?o.find(x=>x.id===s.groupBy?.field):null,w=E&&P?Dt(r,P):null,O=s.infiniteScrollEnabled&&!w;return E?E&&P&&w?(0,W.jsx)(qe.Composite,{id:`${d}`,render:(0,W.jsx)("div",{}),className:"dataviews-view-list__group",role:"grid",activeId:I,setActiveId:M,children:(0,W.jsx)(F,{direction:"column",gap:"lg",className:j("dataviews-view-list",u),children:Array.from(w.entries()).map(([x,v])=>(0,W.jsxs)(F,{direction:"column",gap:"sm",children:[(0,W.jsx)("h3",{className:"dataviews-view-list__group-header",children:s.groupBy?.showLabel===!1?x:(0,Ln.sprintf)((0,Ln.__)("%1$s: %2$s"),P.label,x)}),v.map(D=>{let B=A(D);return(0,W.jsx)($f,{view:s,idPrefix:B,actions:t,item:D,isSelected:D===p,onSelect:_,mediaField:S,titleField:g,descriptionField:b,otherFields:y,onDropdownTriggerKeyDown:h},B)})]},x))})}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(qe.Composite,{id:d,render:(0,W.jsx)("div",{}),className:j("dataviews-view-list",u,{[`has-${s.layout?.density}-density`]:s.layout?.density&&["compact","comfortable"].includes(s.layout.density),"is-refreshing":!O&&m}),role:s.infiniteScrollEnabled?"feed":"grid",activeId:I,setActiveId:M,inert:!O&&i?"true":void 0,children:r.map((x,v)=>{let D=A(x);return(0,W.jsx)($f,{view:s,idPrefix:D,actions:t,item:x,isSelected:x===p,onSelect:_,mediaField:S,titleField:g,descriptionField:b,otherFields:y,onDropdownTriggerKeyDown:h,posinset:s.infiniteScrollEnabled?v+1:void 0},D)})}),O&&i&&(0,W.jsx)("p",{className:"dataviews-loading-more",children:(0,W.jsx)(qe.Spinner,{})})]}):(0,W.jsx)("div",{className:j("dataviews-no-results",{"is-refreshing":m}),children:f})}var rd=c(U(),1);var fa=c(G(),1),Kf=c(z(),1);var Qo=c(R(),1);function Xf({groupName:e,groupData:t,groupField:r,showLabel:o=!0,children:n}){let i=o?(0,Kf.createInterpolateElement)((0,fa.sprintf)((0,fa.__)("%s: "),r.label).trim(),{groupName:(0,Qo.jsx)(r.render,{item:t[0],field:r})}):(0,Qo.jsx)(r.render,{item:t[0],field:r});return(0,Qo.jsxs)(F,{direction:"column",className:"dataviews-view-activity__group",children:[(0,Qo.jsx)("h3",{className:"dataviews-view-activity__group-header",children:i}),n]},e)}var Zf=c(U(),1),wo=c(z(),1),Qf=c(jt(),1),Jf=c(Et(),1);var De=c(R(),1);function ox(e){let{view:t,actions:r,item:o,titleField:n,mediaField:i,descriptionField:a,otherFields:l,posinset:s,onClickItem:u,renderItemLink:f,isItemClickable:d}=e,{showTitle:m=!0,showMedia:p=!0,showDescription:g=!0,infiniteScrollEnabled:S}=t,b=(0,wo.useRef)(null),y=(0,Qf.useRegistry)(),{paginationInfo:_}=(0,wo.useContext)(Y),{primaryActions:A,eligibleActions:V}=(0,wo.useMemo)(()=>{let h=r.filter(P=>!P.isEligible||P.isEligible(o));return{primaryActions:h.filter(P=>P.isPrimary),eligibleActions:h}},[r,o]),I=(0,Jf.useViewportMatch)("medium","<"),M=t.layout?.density??"balanced",N=p&&M!=="compact"&&i?.render?(0,De.jsx)(i.render,{item:o,field:i,config:{sizes:M==="comfortable"?"32px":"24px"}}):null,C=(0,De.jsx)("div",{className:"dataviews-view-activity__item-type-icon",children:N||(0,De.jsx)("span",{className:"dataviews-view-activity__item-bullet","aria-hidden":"true"})}),T=m&&n?.render?(0,De.jsx)(n.render,{item:o,field:n}):null,k=(0,wo.useMemo)(()=>M==="comfortable"?"md":"sm",[M]);return(0,De.jsx)("div",{ref:b,role:S?"article":void 0,"aria-posinset":s,"aria-setsize":S?_.totalItems:void 0,className:j("dataviews-view-activity__item",M==="compact"&&"is-compact",M==="balanced"&&"is-balanced",M==="comfortable"&&"is-comfortable"),children:(0,De.jsxs)(F,{direction:"row",gap:"lg",justify:"start",align:"flex-start",children:[(0,De.jsx)(F,{direction:"column",gap:"xs",align:"center",className:"dataviews-view-activity__item-type",children:C}),(0,De.jsxs)(F,{direction:"column",gap:k,align:"flex-start",className:"dataviews-view-activity__item-content",children:[T&&(0,De.jsx)(Jr,{item:o,isItemClickable:d,onClickItem:u,renderItemLink:f,className:"dataviews-view-activity__item-title",children:T}),g&&a&&(0,De.jsx)("div",{className:"dataviews-view-activity__item-description",children:(0,De.jsx)(a.render,{item:o,field:a})}),(0,De.jsx)("div",{className:"dataviews-view-activity__item-fields",children:l.map(h=>(0,De.jsxs)("div",{className:"dataviews-view-activity__item-field",children:[(0,De.jsx)(Zf.VisuallyHidden,{as:"span",className:"dataviews-view-activity__item-field-label",children:h.label}),(0,De.jsx)("span",{className:"dataviews-view-activity__item-field-value",children:(0,De.jsx)(h.render,{item:o,field:h})})]},h.id))}),!!A?.length&&(0,De.jsx)(Bl,{item:o,actions:A,registry:y,buttonVariant:"secondary"})]}),(A.length0)&&(0,De.jsx)("div",{className:"dataviews-view-activity__item-actions",children:(0,De.jsx)(qo,{item:o,actions:V,isCompact:!0})})]})})}var ed=ox;var td=c(le(),1);function nx(e){return!!e}function Kl(e){let{data:t,fields:r,getItemId:o,view:n}=e,i=r.find(u=>u.id===n.titleField),a=r.find(u=>u.id===n.mediaField),l=r.find(u=>u.id===n.descriptionField),s=(n?.fields??[]).map(u=>r.find(f=>u===f.id)).filter(nx);return t.map((u,f)=>(0,td.createElement)(ed,{...e,key:o(u),item:u,mediaField:a,titleField:i,descriptionField:l,otherFields:s,posinset:n.infiniteScrollEnabled?f+1:void 0}))}var It=c(R(),1);function od(e){let{empty:t,data:r,fields:o,isLoading:n,view:i,className:a}=e,l=Qt(!!n),s=!!r?.length,u=i.groupBy?.field?o.find(S=>S.id===i.groupBy?.field):null,f=s&&u?Dt(r,u):null,d=i.infiniteScrollEnabled&&!f;if(!s)return(0,It.jsx)("div",{className:j("dataviews-no-results",{"is-refreshing":l}),children:t});let m=!d&&!!n,p=j("dataviews-view-activity",a,{"is-refreshing":!d&&l}),g=f?Array.from(f.entries()):[];return s&&u&&f?(0,It.jsx)(F,{direction:"column",gap:"sm",className:p,inert:m?"true":void 0,children:g.map(([S,b])=>(0,It.jsx)(Xf,{groupName:S,groupData:b,groupField:u,showLabel:i.groupBy?.showLabel!==!1,children:(0,It.jsx)(Kl,{...e,data:b})},S))}):(0,It.jsxs)(It.Fragment,{children:[(0,It.jsx)("div",{className:p,role:i.infiniteScrollEnabled?"feed":void 0,inert:m?"true":void 0,children:(0,It.jsx)(Kl,{...e})}),d&&n&&(0,It.jsx)("p",{className:"dataviews-loading-more",children:(0,It.jsx)(rd.Spinner,{})})]})}var wt=c(U(),1),Hn=c(G(),1),cd=c(Et(),1),fd=c(z(),1);var id=c(U(),1),ix=c(jt(),1),da=c(z(),1);var ax=c(G(),1);var Bn=c(U(),1),Jo=c(z(),1),Ot=c(G(),1);var Sr=c(R(),1);function Xl(){let{view:e,onChangeView:t,paginationInfo:{totalItems:r=0,totalPages:o}}=(0,Jo.useContext)(Y);if(!r||!o||e.infiniteScrollEnabled)return null;let n=e.page??1,i=Array.from(Array(o)).map((a,l)=>{let s=l+1;return{value:s.toString(),label:s.toString(),"aria-label":n===s?(0,Ot.sprintf)((0,Ot.__)("Page %1$d of %2$d"),n,o):s.toString()}});return!!r&&o!==1&&(0,Sr.jsxs)(F,{direction:"row",className:"dataviews-pagination",justify:"end",align:"center",gap:"xl",children:[(0,Sr.jsx)(F,{direction:"row",justify:"flex-start",align:"center",gap:"xs",className:"dataviews-pagination__page-select",children:(0,Jo.createInterpolateElement)((0,Ot.sprintf)((0,Ot._x)("
      Page
      %1$s
      of %2$d
      ","paging"),"",o),{div:(0,Sr.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,Sr.jsx)(Bn.SelectControl,{"aria-label":(0,Ot.__)("Current page"),value:n.toString(),options:i,onChange:a=>{t({...e,page:+a})},size:"small",variant:"minimal"})})}),(0,Sr.jsxs)(F,{direction:"row",gap:"xs",align:"center",children:[(0,Sr.jsx)(Bn.Button,{onClick:()=>t({...e,page:n-1}),disabled:n===1,accessibleWhenDisabled:!0,label:(0,Ot.__)("Previous page"),icon:(0,Ot.isRTL)()?zi:Wi,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,Sr.jsx)(Bn.Button,{onClick:()=>t({...e,page:n+1}),disabled:n>=o,accessibleWhenDisabled:!0,label:(0,Ot.__)("Next page"),icon:(0,Ot.isRTL)()?Wi:zi,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})}var nd=(0,Jo.memo)(Xl);var ad=c(R(),1);function ma(e){return(0,da.useMemo)(()=>e?.every(t=>t.supportsBulk),[e])}var sd=c(z(),1);var ld=c(R(),1),Zl=(0,sd.forwardRef)(({className:e,previewSize:t,...r},o)=>(0,ld.jsx)("div",{ref:o,className:j("dataviews-view-grid-items",e),style:{gridTemplateColumns:t&&`repeat(auto-fill, minmax(${t}px, 1fr))`},...r}));var X=c(R(),1),{Badge:sx}=K(wt.privateApis);function ud({view:e,multiselect:t,selection:r,onChangeSelection:o,getItemId:n,item:i,mediaField:a,titleField:l,descriptionField:s,regularFields:u,badgeFields:f,config:d,posinset:m,setsize:p}){let{showTitle:g=!0,showMedia:S=!0,showDescription:b=!0}=e,y=n(i),_=r.includes(y),A=a?.render?(0,X.jsx)(a.render,{item:i,field:a,config:d}):null,V=g&&l?.render?(0,X.jsx)(l.render,{item:i,field:l}):null;return(0,X.jsxs)(wt.Composite.Item,{"aria-label":l?l.getValue({item:i})||(0,Hn.__)("(no title)"):void 0,render:({children:I,...M})=>(0,X.jsx)(F,{direction:"column",children:I,...M}),role:"option","aria-posinset":m,"aria-setsize":p,className:j("dataviews-view-picker-grid__card",{"is-selected":_}),"aria-selected":_,onClick:()=>{if(_)o(r.filter(I=>y!==I));else{let I=t?[...r,y]:[y];o(I)}},children:[S&&A&&(0,X.jsx)("div",{className:"dataviews-view-picker-grid__media",children:A}),S&&A&&(0,X.jsx)(Xr,{item:i,selection:r,onChangeSelection:o,getItemId:n,titleField:l,disabled:!1,"aria-hidden":!0,tabIndex:-1}),g&&(0,X.jsx)(F,{direction:"row",justify:"space-between",className:"dataviews-view-picker-grid__title-actions",children:(0,X.jsx)("div",{className:"dataviews-view-picker-grid__title-field dataviews-title-field",children:V})}),(0,X.jsxs)(F,{direction:"column",gap:"xs",children:[b&&s?.render&&(0,X.jsx)(s.render,{item:i,field:s}),!!f?.length&&(0,X.jsx)(F,{direction:"row",className:"dataviews-view-picker-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:f.map(I=>(0,X.jsx)(sx,{className:"dataviews-view-picker-grid__field-value",children:(0,X.jsx)(I.render,{item:i,field:I})},I.id))}),!!u?.length&&(0,X.jsx)(F,{direction:"column",className:"dataviews-view-picker-grid__fields",gap:"xs",children:u.map(I=>(0,X.jsx)(wt.Flex,{className:"dataviews-view-picker-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(wt.FlexItem,{className:"dataviews-view-picker-grid__field-name",children:I.header}),(0,X.jsx)(wt.FlexItem,{className:"dataviews-view-picker-grid__field-value",style:{maxHeight:"none"},children:(0,X.jsx)(I.render,{item:i,field:I})})]})},I.id))})]})]},y)}function dd({groupName:e,groupField:t,showLabel:r=!0,children:o}){let n=(0,cd.useInstanceId)(dd,"dataviews-view-picker-grid-group__header");return(0,X.jsxs)(F,{direction:"column",gap:"sm",role:"group","aria-labelledby":n,children:[(0,X.jsx)("h3",{className:"dataviews-view-picker-grid-group__header",id:n,children:r?(0,Hn.sprintf)((0,Hn.__)("%1$s: %2$s"),t.label,e):e}),o]},e)}function lx({actions:e,data:t,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,selection:a,view:l,className:s,empty:u}){let{resizeObserverRef:f,paginationInfo:d,itemListLabel:m}=(0,fd.useContext)(Y),p=r.find(P=>P.id===l?.titleField),g=r.find(P=>P.id===l?.mediaField),S=r.find(P=>P.id===l?.descriptionField),b=l.fields??[],{regularFields:y,badgeFields:_}=b.reduce((P,w)=>{let O=r.find(v=>v.id===w);if(!O)return P;let x=l.layout?.badgeFields?.includes(w)?"badgeFields":"regularFields";return P[x].push(O),P},{regularFields:[],badgeFields:[]}),A=!!t?.length,V=l.layout?.previewSize,I=ma(e),M="900px",N=l.groupBy?.field?r.find(P=>P.id===l.groupBy?.field):null,C=N?Dt(t,N):null,T=l.infiniteScrollEnabled&&!C,k=l?.page??1,h=l?.perPage??0,E=T?d?.totalItems:void 0;return(0,X.jsxs)(X.Fragment,{children:[A&&N&&C&&(0,X.jsx)(wt.Composite,{virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":I,className:j("dataviews-view-picker-grid",s),"aria-label":m,render:({children:P,...w})=>(0,X.jsx)(F,{direction:"column",gap:"lg",children:P,...w}),children:Array.from(C.entries()).map(([P,w])=>(0,X.jsx)(dd,{groupName:P,groupField:N,showLabel:l.groupBy?.showLabel!==!1,children:(0,X.jsx)(Zl,{previewSize:V,style:{gridTemplateColumns:V&&`repeat(auto-fill, minmax(${V}px, 1fr))`},"aria-busy":n,ref:f,children:w.map(O=>{let x=(k-1)*h+t.indexOf(O)+1;return(0,X.jsx)(ud,{view:l,multiselect:I,selection:a,onChangeSelection:i,getItemId:o,item:O,mediaField:g,titleField:p,descriptionField:S,regularFields:y,badgeFields:_,config:{sizes:M},posinset:x,setsize:E},o(O))})})},P))}),A&&!C&&(0,X.jsx)(wt.Composite,{render:(0,X.jsx)(Zl,{className:j("dataviews-view-picker-grid",s),previewSize:V,"aria-busy":n,ref:f}),virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":I,"aria-label":m,children:t.map((P,w)=>{let O=T?w+1:void 0;return T||(O=(k-1)*h+w+1),(0,X.jsx)(ud,{view:l,multiselect:I,selection:a,onChangeSelection:i,getItemId:o,item:P,mediaField:g,titleField:p,descriptionField:S,regularFields:y,badgeFields:_,config:{sizes:M},posinset:O,setsize:E},o(P))})}),!A&&(0,X.jsx)("div",{className:j({"dataviews-loading":n,"dataviews-no-results":!n}),children:n?(0,X.jsx)("p",{children:(0,X.jsx)(wt.Spinner,{})}):u}),A&&n&&(0,X.jsx)("p",{className:"dataviews-loading-more",children:(0,X.jsx)(wt.Spinner,{})})]})}var md=lx;var pa=c(G(),1),So=c(U(),1),Mt=c(z(),1);var J=c(R(),1);function ux({item:e,fields:t,column:r,align:o}){let n=t.find(a=>a.id===r);if(!n)return null;let i=j("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,J.jsx)("div",{className:i,children:(0,J.jsx)(n.render,{item:e,field:n})})}function pd({item:e,fields:t,id:r,view:o,titleField:n,mediaField:i,descriptionField:a,selection:l,getItemId:s,onChangeSelection:u,multiselect:f,posinset:d}){let{paginationInfo:m}=(0,Mt.useContext)(Y),p=l.includes(r),[g,S]=(0,Mt.useState)(!1),{showTitle:b=!0,showMedia:y=!0,showDescription:_=!0,infiniteScrollEnabled:A}=o,V=()=>{S(!0)},I=()=>{S(!1)},M=o.fields??[],N=n&&b||i&&y||a&&_;return(0,J.jsxs)(So.Composite.Item,{render:({children:C,...T})=>(0,J.jsx)("tr",{className:j("dataviews-view-table__row",{"is-selected":p,"is-hovered":g}),onMouseEnter:V,onMouseLeave:I,children:C,...T}),"aria-selected":p,"aria-setsize":m.totalItems||void 0,"aria-posinset":d,role:A?"article":"option",onClick:()=>{if(p)u(l.filter(C=>r!==C));else{let C=f?[...l,r]:[r];u(C)}},children:[(0,J.jsx)("td",{className:"dataviews-view-table__checkbox-column",role:"presentation",children:(0,J.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,J.jsx)(Xr,{item:e,selection:l,onChangeSelection:u,getItemId:s,titleField:n,disabled:!1,"aria-hidden":!0,tabIndex:-1})})}),N&&(0,J.jsx)("td",{role:"presentation",children:(0,J.jsx)(oa,{item:e,titleField:b?n:void 0,mediaField:y?i:void 0,descriptionField:_?a:void 0,isItemClickable:()=>!1})}),M.map(C=>{let{width:T,maxWidth:k,minWidth:h,align:E}=o.layout?.styles?.[C]??{};return(0,J.jsx)("td",{style:{width:T,maxWidth:k,minWidth:h},role:"presentation",children:(0,J.jsx)(ux,{fields:t,item:e,column:C,align:E})},C)})]},r)}function cx({actions:e,data:t,fields:r,getItemId:o,isLoading:n=!1,onChangeView:i,onChangeSelection:a,selection:l,setOpenedFilter:s,view:u,className:f,empty:d}){let m=(0,Mt.useRef)(new Map),p=(0,Mt.useRef)(void 0),[g,S]=(0,Mt.useState)(),b=ma(e)??!1;(0,Mt.useEffect)(()=>{p.current&&(p.current.focus(),p.current=void 0)});let y=(0,Mt.useId)();if(g){p.current=g,S(void 0);return}let _=x=>{let v=m.current.get(x.id),D=v?m.current.get(v.fallback):void 0;S(D?.node)},A=!!t?.length,V=r.find(x=>x.id===u.titleField),I=r.find(x=>x.id===u.mediaField),M=r.find(x=>x.id===u.descriptionField),N=u.groupBy?.field?r.find(x=>x.id===u.groupBy?.field):null,C=N?Dt(t,N):null,{showTitle:T=!0,showMedia:k=!0,showDescription:h=!0}=u,E=V&&T||I&&k||M&&h,P=u.fields??[],w=(x,v)=>D=>{D?m.current.set(x,{node:D,fallback:P[v>0?v-1:1]}):m.current.delete(x)},O=u.infiniteScrollEnabled&&!C;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)("table",{className:j("dataviews-view-table","dataviews-view-picker-table",f,{[`has-${u.layout?.density}-density`]:u.layout?.density&&["compact","comfortable"].includes(u.layout.density)}),"aria-busy":n,"aria-describedby":y,role:O?"feed":"listbox",children:[(0,J.jsx)("thead",{role:"presentation",children:(0,J.jsxs)("tr",{className:"dataviews-view-table__row",role:"presentation",children:[(0,J.jsx)("th",{className:"dataviews-view-table__checkbox-column",children:b&&(0,J.jsx)(Mn,{selection:l,onChangeSelection:a,data:t,actions:e,getItemId:o})}),E&&(0,J.jsx)("th",{children:V&&(0,J.jsx)(Xo,{ref:w(V.id,0),fieldId:V.id,view:u,fields:r,onChangeView:i,onHide:_,setOpenedFilter:s,canMove:!1})}),P.map((x,v)=>{let{width:D,maxWidth:B,minWidth:oe,align:fe}=u.layout?.styles?.[x]??{};return(0,J.jsx)("th",{style:{width:D,maxWidth:B,minWidth:oe,textAlign:fe},"aria-sort":u.sort?.direction&&u.sort?.field===x?Ki[u.sort.direction]:void 0,scope:"col",children:(0,J.jsx)(Xo,{ref:w(x,v),fieldId:x,view:u,fields:r,onChangeView:i,onHide:_,setOpenedFilter:s,canMove:u.layout?.enableMoving??!0})},x)})]})}),A&&N&&C?Array.from(C.entries()).map(([x,v])=>(0,J.jsxs)(So.Composite,{virtualFocus:!0,orientation:"vertical",render:(0,J.jsx)("tbody",{role:"group"}),children:[(0,J.jsx)("tr",{className:"dataviews-view-table__group-header-row",role:"presentation",children:(0,J.jsx)("td",{colSpan:P.length+(E?1:0)+1,className:"dataviews-view-table__group-header-cell",role:"presentation",children:u.groupBy?.showLabel===!1?x:(0,pa.sprintf)((0,pa.__)("%1$s: %2$s"),N.label,x)})}),v.map((D,B)=>(0,J.jsx)(pd,{item:D,fields:r,id:o(D)||B.toString(),view:u,titleField:V,mediaField:I,descriptionField:M,selection:l,getItemId:o,onChangeSelection:a,multiselect:b},o(D)))]},`group-${x}`)):(0,J.jsx)(So.Composite,{render:(0,J.jsx)("tbody",{role:"presentation"}),virtualFocus:!0,orientation:"vertical",children:A&&t.map((x,v)=>(0,J.jsx)(pd,{item:x,fields:r,id:o(x)||v.toString(),view:u,titleField:V,mediaField:I,descriptionField:M,selection:l,getItemId:o,onChangeSelection:a,multiselect:b,posinset:v+1},o(x)))})]}),(0,J.jsxs)("div",{className:j({"dataviews-loading":n,"dataviews-no-results":!A&&!n}),id:y,children:[!A&&(n?(0,J.jsx)("p",{children:(0,J.jsx)(So.Spinner,{})}):d),A&&n&&(0,J.jsx)("p",{className:"dataviews-loading-more",children:(0,J.jsx)(So.Spinner,{})})]})]})}var gd=cx;var vd=c(U(),1),hd=c(G(),1),bd=c(z(),1);var xd=c(R(),1),fx=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}];function Ql(){let e=(0,bd.useContext)(Y),t=e.view,r=fx.filter(a=>e.containerWidth>=a.breakpoint),o=t.layout?.previewSize??230,n=r.map((a,l)=>({...a,index:l})).filter(a=>a.value<=o).sort((a,l)=>l.value-a.value)[0]?.index??0,i=r.map((a,l)=>({value:l}));return(0,xd.jsx)(vd.RangeControl,{__next40pxDefaultSize:!0,showTooltip:!1,label:(0,hd.__)("Preview size"),value:n,min:0,max:r.length-1,withInputField:!1,onChange:(a=0)=>{e.onChangeView({...t,layout:{...t.layout,previewSize:r[a].value}})},step:1,marks:i})}var en=c(U(),1),tn=c(G(),1),yd=c(z(),1);var rn=c(R(),1);function zn(){let e=(0,yd.useContext)(Y),t=e.view;return(0,rn.jsxs)(en.__experimentalToggleGroupControl,{size:"__unstable-large",label:(0,tn.__)("Density"),value:t.layout?.density||"balanced",onChange:r=>{e.onChangeView({...t,layout:{...t.layout,density:r}})},isBlock:!0,children:[(0,rn.jsx)(en.__experimentalToggleGroupControlOption,{value:"comfortable",label:(0,tn._x)("Comfortable","Density option for DataView layout")},"comfortable"),(0,rn.jsx)(en.__experimentalToggleGroupControlOption,{value:"balanced",label:(0,tn._x)("Balanced","Density option for DataView layout")},"balanced"),(0,rn.jsx)(en.__experimentalToggleGroupControlOption,{value:"compact",label:(0,tn._x)("Compact","Density option for DataView layout")},"compact")]})}var to=[{type:Yo,label:(0,_r.__)("Table"),component:jf,icon:Pi,viewConfigOptions:zn},{type:Zi,label:(0,_r.__)("Grid"),component:qf,icon:Ti,viewConfigOptions:Ql},{type:pf,label:(0,_r.__)("List"),component:$l,icon:(0,_r.isRTL)()?vl:bl,viewConfigOptions:zn},{type:gf,label:(0,_r.__)("Activity"),component:od,icon:Tl,viewConfigOptions:zn},{type:vf,label:(0,_r.__)("Grid"),component:md,icon:Ti,viewConfigOptions:Ql,isPicker:!0},{type:hf,label:(0,_r.__)("Table"),component:gd,icon:Pi,viewConfigOptions:zn,isPicker:!0}];var bn=c(z(),1);var Wt=c(U(),1),Rr=c(G(),1),qa=c(z(),1);function jn(...e){}function Jl(e,t){if(dx(e)){let r=mx(t)?t():t;return e(r)}return e}function dx(e){return typeof e=="function"}function mx(e){return typeof e=="function"}function St(e,t){return typeof Object.hasOwn=="function"?Object.hasOwn(e,t):Object.prototype.hasOwnProperty.call(e,t)}function ro(...e){return(...t)=>{for(let r of e)typeof r=="function"&&r(...t)}}function Wn(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function eu(e,t){let r={...e};for(let o of t)St(r,o)&&delete r[o];return r}function tu(e,t){let r={};for(let o of t)St(e,o)&&(r[o]=e[o]);return r}function Yn(e){return e}function Qe(e,t){if(!e)throw typeof t!="string"?new Error("Invariant failed"):new Error(t)}function ru(e){return Object.keys(e)}function ou(e,...t){let r=typeof e=="function"?e(...t):e;return r==null?!1:!r}function _o(e){return e.disabled||e["aria-disabled"]===!0||e["aria-disabled"]==="true"}function Je(e){let t={};for(let r in e)e[r]!==void 0&&(t[r]=e[r]);return t}function ee(...e){for(let t of e)if(t!==void 0)return t}var wd=c(le(),1);function Sd(e,t){typeof e=="function"?e(t):e&&(e.current=t)}function px(e){return!e||!(0,wd.isValidElement)(e)?!1:"ref"in e.props||"ref"in e}function _d(e){return px(e)?{...e.props}.ref||e.ref:null}function Cd(e,t){let r={...e};for(let o in t){if(!St(t,o))continue;if(o==="className"){let i="className";r[i]=e[i]?`${e[i]} ${t[i]}`:t[i];continue}if(o==="style"){let i="style";r[i]=e[i]?{...e[i],...t[i]}:t[i];continue}let n=t[o];if(typeof n=="function"&&o.startsWith("on")){let i=e[o];if(typeof i=="function"){r[o]=(...a)=>{n(...a),i(...a)};continue}}r[o]=n}return r}var oo=gx();function gx(){var e;return typeof window<"u"&&!!((e=window.document)!=null&&e.createElement)}function Cr(e){return e?"self"in e?e.document:e.ownerDocument||document:document}function Co(e,t=!1){var r;let{activeElement:o}=Cr(e);if(!o?.nodeName)return null;if(nu(o)&&((r=o.contentDocument)!=null&&r.body))return Co(o.contentDocument.body,t);if(t){let n=o.getAttribute("aria-activedescendant");if(n){let i=Cr(o).getElementById(n);if(i)return i}}return o}function Jt(e,t){return e===t||e.contains(t)}function nu(e){return e.tagName==="IFRAME"}function Er(e){let t=e.tagName.toLowerCase();return t==="button"?!0:t==="input"&&e.type?vx.indexOf(e.type)!==-1:!1}var vx=["button","color","file","image","reset","submit"];function iu(e){if(typeof e.checkVisibility=="function")return e.checkVisibility();let t=e;return t.offsetWidth>0||t.offsetHeight>0||e.getClientRects().length>0}function mt(e){try{let t=e instanceof HTMLInputElement&&e.selectionStart!==null,r=e.tagName==="TEXTAREA";return t||r||!1}catch{return!1}}function Gn(e){return e.isContentEditable||mt(e)}function au(e){if(mt(e))return e.value;if(e.isContentEditable){let t=Cr(e).createRange();return t.selectNodeContents(e),t.toString()}return""}function on(e){let t=0,r=0;if(mt(e))t=e.selectionStart||0,r=e.selectionEnd||0;else if(e.isContentEditable){let o=Cr(e).getSelection();if(o?.rangeCount&&o.anchorNode&&Jt(e,o.anchorNode)&&o.focusNode&&Jt(e,o.focusNode)){let n=o.getRangeAt(0),i=n.cloneRange();i.selectNodeContents(e),i.setEnd(n.startContainer,n.startOffset),t=i.toString().length,i.setEnd(n.endContainer,n.endOffset),r=i.toString().length}}return{start:t,end:r}}function su(e,t){let r=["dialog","menu","listbox","tree","grid"],o=e?.getAttribute("role");return o&&r.indexOf(o)!==-1?o:t}function nn(e){if(!e)return null;let t=r=>r==="auto"||r==="scroll";if(e.clientHeight&&e.scrollHeight>e.clientHeight){let{overflowY:r}=getComputedStyle(e);if(t(r))return e}else if(e.clientWidth&&e.scrollWidth>e.clientWidth){let{overflowX:r}=getComputedStyle(e);if(t(r))return e}return nn(e.parentElement)||document.scrollingElement||document.body}function Un(e,...t){/text|search|password|tel|url/i.test(e.type)&&e.setSelectionRange(...t)}function lu(e,t){let r=e.map((n,i)=>[i,n]),o=!1;return r.sort(([n,i],[a,l])=>{let s=t(i),u=t(l);return s===u||!s||!u?0:hx(s,u)?(n>a&&(o=!0),-1):(ni):e}function hx(e,t){return!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)}function uu(){return oo&&!!navigator.maxTouchPoints}function ga(){return oo?/mac|iphone|ipad|ipod/i.test(navigator.platform):!1}function Eo(){return oo&&ga()&&/apple/i.test(navigator.vendor)}function cu(){return oo&&/firefox\//i.test(navigator.userAgent)}function va(e){return!!(e.currentTarget&&!Jt(e.currentTarget,e.target))}function st(e){return e.target===e.currentTarget}function Ed(e){let t=e.currentTarget;if(!t)return!1;let r=ga();if(r&&!e.metaKey||!r&&!e.ctrlKey)return!1;let o=t.tagName.toLowerCase();return o==="a"||o==="button"&&t.type==="submit"||o==="input"&&t.type==="submit"}function Pd(e){let t=e.currentTarget;if(!t)return!1;let r=t.tagName.toLowerCase();return e.altKey?r==="a"||r==="button"&&t.type==="submit"||r==="input"&&t.type==="submit":!1}function Po(e,t){let r=new FocusEvent("blur",t),o=e.dispatchEvent(r),n={...t,bubbles:!0};return e.dispatchEvent(new FocusEvent("focusout",n)),o}function Ad(e,t,r){let o=new KeyboardEvent(t,r);return e.dispatchEvent(o)}function fu(e,t){let r=new MouseEvent("click",t);return e.dispatchEvent(r)}function ha(e,t){let r=t||e.currentTarget,o=e.relatedTarget;return!o||!Jt(r,o)}function no(e,t,r,o){let i=(l=>{if(o){let u=setTimeout(l,o);return()=>clearTimeout(u)}let s=requestAnimationFrame(l);return()=>cancelAnimationFrame(s)})(()=>{e.removeEventListener(t,a,!0),r()}),a=()=>{i(),r()};return e.addEventListener(t,a,{once:!0,capture:!0}),i}function er(e,t,r,o=window){let n=[];try{o.document.addEventListener(e,t,r);for(let a of Array.from(o.frames))n.push(er(e,t,r,a))}catch{}return()=>{try{o.document.removeEventListener(e,t,r)}catch{}for(let a of n)a()}}var bx=c(le(),1),me=c(le(),1),du={...bx},Td=du.useId,O2=du.useDeferredValue,Id=du.useInsertionEffect,Te=oo?me.useLayoutEffect:me.useEffect;function xx(e){let[t]=(0,me.useState)(e);return t}function kd(e){let t=(0,me.useRef)(e);return Te(()=>{t.current=e}),t}function te(e){let t=(0,me.useRef)(()=>{throw new Error("Cannot call an event handler while rendering.")});return Id?Id(()=>{t.current=e}):t.current=e,(0,me.useCallback)((...r)=>{var o;return(o=t.current)==null?void 0:o.call(t,...r)},[])}function Nd(e){let[t,r]=(0,me.useState)(null);return Te(()=>{if(t==null||!e)return;let o=null;return e(n=>(o=n,t)),()=>{e(o)}},[t,e]),[t,r]}function Ie(...e){return(0,me.useMemo)(()=>{if(e.some(Boolean))return t=>{for(let r of e)Sd(r,t)}},e)}function Ft(e){if(Td){let o=Td();return e||o}let[t,r]=(0,me.useState)(e);return Te(()=>{if(e||t)return;let o=Math.random().toString(36).slice(2,8);r(`id-${o}`)},[e,t]),e||t}function Dd(e,t){let r=i=>{if(typeof i=="string")return i},[o,n]=(0,me.useState)(()=>r(t));return Te(()=>{let i=e&&"current"in e?e.current:e;n(i?.tagName.toLowerCase()||r(t))},[e,t]),o}function Md(e,t,r){let o=xx(r),[n,i]=(0,me.useState)(o);return(0,me.useEffect)(()=>{let a=e&&"current"in e?e.current:e;if(!a)return;let l=()=>{let u=a.getAttribute(t);i(u??o)},s=new MutationObserver(l);return s.observe(a,{attributeFilter:[t]}),l(),()=>s.disconnect()},[e,t,o]),n}function tr(e,t){let r=(0,me.useRef)(!1);(0,me.useEffect)(()=>{if(r.current)return e();r.current=!0},t),(0,me.useEffect)(()=>()=>{r.current=!1},[])}function Fd(e,t){let r=(0,me.useRef)(!1);Te(()=>{if(r.current)return e();r.current=!0},t),Te(()=>()=>{r.current=!1},[])}function Ld(){return(0,me.useReducer)(()=>[],[])}function Me(e){return te(typeof e=="function"?e:()=>e)}function rr(e,t,r=[]){let o=(0,me.useCallback)(n=>(e.wrapElement&&(n=e.wrapElement(n)),t(n)),[...r,e.wrapElement]);return{...e,wrapElement:o}}function Bd(e,t,r){let o=e.onLoadedMetadataCapture,n=(0,me.useMemo)(()=>Object.assign(()=>{},{...o,[t]:r}),[o,t,r]);return[o?.[t],{onLoadedMetadataCapture:n}]}var Od=!1;function Hd(){return(0,me.useEffect)(()=>{Od||(er("mousemove",wx,!0),er("mousedown",ba,!0),er("mouseup",ba,!0),er("keydown",ba,!0),er("scroll",ba,!0),Od=!0)},[]),te(()=>mu)}var mu=!1,Rd=0,Vd=0;function yx(e){let t=e.movementX||e.screenX-Rd,r=e.movementY||e.screenY-Vd;return Rd=e.screenX,Vd=e.screenY,t||r||!1}function wx(e){yx(e)&&(mu=!0)}function ba(){mu=!1}var pt=c(le(),1),Ao=c(R(),1);function pe(e){let t=pt.forwardRef((r,o)=>e({...r,ref:o}));return t.displayName=e.displayName||e.name,t}function io(e,t){return pt.memo(e,t)}function xe(e,t){let{wrapElement:r,render:o,...n}=t,i=Ie(t.ref,_d(o)),a;if(pt.isValidElement(o)){let l={...o.props,ref:i};a=pt.cloneElement(o,Cd(n,l))}else o?a=o(n):a=(0,Ao.jsx)(e,{...n});return r?r(a):a}function ye(e){let t=(r={})=>e(r);return t.displayName=e.name,t}function _t(e=[],t=[]){let r=pt.createContext(void 0),o=pt.createContext(void 0),n=()=>pt.useContext(r),i=(u=!1)=>{let f=pt.useContext(o),d=n();return u?f:f||d},a=()=>{let u=pt.useContext(o),f=n();if(!(u&&u===f))return f},l=u=>e.reduceRight((f,d)=>(0,Ao.jsx)(d,{...u,children:f}),(0,Ao.jsx)(r.Provider,{...u}));return{context:r,scopedContext:o,useContext:n,useScopedContext:i,useProviderContext:a,ContextProvider:l,ScopedContextProvider:u=>(0,Ao.jsx)(l,{...u,children:t.reduceRight((f,d)=>(0,Ao.jsx)(d,{...u,children:f}),(0,Ao.jsx)(o.Provider,{...u}))})}}var qn=_t(),zd=qn.useContext,M2=qn.useScopedContext,F2=qn.useProviderContext,jd=qn.ContextProvider,Wd=qn.ScopedContextProvider;var pu=c(le(),1),$n=_t([jd],[Wd]),xa=$n.useContext,z2=$n.useScopedContext,Yd=$n.useProviderContext,an=$n.ContextProvider,ya=$n.ScopedContextProvider,Gd=(0,pu.createContext)(void 0),Ud=(0,pu.createContext)(void 0);function qd(e,t){return e.find(r=>t?!r.disabled&&r.id!==t:!r.disabled)}function or(e,t){return t&&e.item(t)||null}function $d(e){let t=[];for(let r of e){let o=t.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):t.push([r])}return t}function Kd(e,t=!1){if(mt(e))e.setSelectionRange(t?e.value.length:0,e.value.length);else if(e.isContentEditable){let r=Cr(e).getSelection();r?.selectAllChildren(e),t&&r?.collapseToEnd()}}var gu=Symbol("FOCUS_SILENTLY");function Xd(e){e[gu]=!0,e.focus({preventScroll:!0})}function Zd(e){let t=e[gu];return delete e[gu],t}function To(e,t,r){if(!t||t===r)return!1;let o=e.item(t.id);return!(!o||r&&o.element===r)}var wa=c(le(),1),Sx="div",vu=ye(function({store:t,shouldRegisterItem:r=!0,getItem:o=Yn,element:n,...i}){let a=zd();t=t||a;let l=Ft(i.id),s=(0,wa.useRef)(n);return(0,wa.useEffect)(()=>{let u=s.current;if(!l||!u||!r)return;let f=o({id:l,element:u});return t?.renderItem(f)},[l,r,o,t]),i={...i,ref:Ie(s,i.ref)},Je(i)}),K2=pe(function(t){let r=vu(t);return xe(Sx,r)});var Qd=c(le(),1),Jd=(0,Qd.createContext)(!0);var em="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function Kn(e){return!(!e.matches(em)||!iu(e)||e.closest("[inert]"))}function tm(e){for(;e&&!Kn(e);)e=e.closest(em);return e||null}function Lt(e){let t=Co(e);if(!t)return!1;if(t===e)return!0;let r=t.getAttribute("aria-activedescendant");return r?r===e.id:!1}function hu(e){let t=Co(e);if(!t)return!1;if(Jt(e,t))return!0;let r=t.getAttribute("aria-activedescendant");return!r||!("id"in e)?!1:r===e.id?!0:!!e.querySelector(`#${CSS.escape(r)}`)}function rm(e){!hu(e)&&Kn(e)&&e.focus()}function om(e,t){"scrollIntoView"in e?(e.focus({preventScroll:!0}),e.scrollIntoView({block:"nearest",inline:"nearest",...t})):e.focus()}var Rt=c(le(),1),_x="div",nm=Eo(),Cx=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"],Ex=Symbol("safariFocusAncestor");function im(e,t){e&&(e[Ex]=t)}function Px(e){let{tagName:t,readOnly:r,type:o}=e;return t==="TEXTAREA"&&!r||t==="SELECT"&&!r?!0:t==="INPUT"&&!r?Cx.includes(o):!!(e.isContentEditable||e.getAttribute("role")==="combobox"&&e.dataset.name)}function Ax(e){return"labels"in e?e.labels:null}function am(e){return e.tagName.toLowerCase()==="input"&&e.type?e.type==="radio"||e.type==="checkbox":!1}function Tx(e){return e?e==="button"||e==="summary"||e==="input"||e==="select"||e==="textarea"||e==="a":!0}function Ix(e){return e?e==="button"||e==="input"||e==="select"||e==="textarea":!0}function Ox(e,t,r,o,n){return e?t?r&&!o?-1:void 0:r?n:n||0:n}function bu(e,t){return te(r=>{e?.(r),!r.defaultPrevented&&t&&(r.stopPropagation(),r.preventDefault())})}var sm=!1,xu=!0;function Rx(e){let t=e.target;t&&"hasAttribute"in t&&(t.hasAttribute("data-focus-visible")||(xu=!1))}function Vx(e){e.metaKey||e.ctrlKey||e.altKey||(xu=!0)}var Xn=ye(function({focusable:t=!0,accessibleWhenDisabled:r,autoFocus:o,onFocusVisible:n,...i}){let a=(0,Rt.useRef)(null);(0,Rt.useEffect)(()=>{t&&(sm||(er("mousedown",Rx,!0),er("keydown",Vx,!0),sm=!0))},[t]),nm&&(0,Rt.useEffect)(()=>{if(!t)return;let w=a.current;if(!w||!am(w))return;let O=Ax(w);if(!O)return;let x=()=>queueMicrotask(()=>w.focus());for(let v of O)v.addEventListener("mouseup",x);return()=>{for(let v of O)v.removeEventListener("mouseup",x)}},[t]);let l=t&&_o(i),s=!!l&&!r,[u,f]=(0,Rt.useState)(!1);(0,Rt.useEffect)(()=>{t&&s&&u&&f(!1)},[t,s,u]),(0,Rt.useEffect)(()=>{if(!t||!u)return;let w=a.current;if(!w||typeof IntersectionObserver>"u")return;let O=new IntersectionObserver(()=>{Kn(w)||f(!1)});return O.observe(w),()=>O.disconnect()},[t,u]);let d=bu(i.onKeyPressCapture,l),m=bu(i.onMouseDownCapture,l),p=bu(i.onClickCapture,l),g=i.onMouseDown,S=te(w=>{if(g?.(w),w.defaultPrevented||!t)return;let O=w.currentTarget;if(!nm||va(w)||!Er(O)&&!am(O))return;let x=!1,v=()=>{x=!0},D={capture:!0,once:!0};O.addEventListener("focusin",v,D);let B=tm(O.parentElement);im(B,!0),no(O,"mouseup",()=>{O.removeEventListener("focusin",v,!0),im(B,!1),!x&&rm(O)})}),b=(w,O)=>{if(O&&(w.currentTarget=O),!t)return;let x=w.currentTarget;x&&Lt(x)&&(n?.(w),!w.defaultPrevented&&(x.dataset.focusVisible="true",f(!0)))},y=i.onKeyDownCapture,_=te(w=>{if(y?.(w),w.defaultPrevented||!t||u||w.metaKey||w.altKey||w.ctrlKey||!st(w))return;let O=w.currentTarget;no(O,"focusout",()=>b(w,O))}),A=i.onFocusCapture,V=te(w=>{if(A?.(w),w.defaultPrevented||!t)return;if(!st(w)){f(!1);return}let O=w.currentTarget,x=()=>b(w,O);xu||Px(w.target)?no(w.target,"focusout",x):f(!1)}),I=i.onBlur,M=te(w=>{I?.(w),t&&ha(w)&&(w.currentTarget.removeAttribute("data-focus-visible"),f(!1))}),N=(0,Rt.useContext)(Jd),C=te(w=>{t&&o&&w&&N&&queueMicrotask(()=>{Lt(w)||Kn(w)&&w.focus()})}),T=Dd(a),k=t&&Tx(T),h=t&&Ix(T),E=i.style,P=(0,Rt.useMemo)(()=>s?{pointerEvents:"none",...E}:E,[s,E]);return i={"data-focus-visible":t&&u||void 0,"data-autofocus":o||void 0,"aria-disabled":l||void 0,...i,ref:Ie(a,C,i.ref),style:P,tabIndex:Ox(t,s,k,h,i.tabIndex),disabled:h&&s?!0:void 0,contentEditable:l?void 0:i.contentEditable,onKeyPressCapture:d,onClickCapture:p,onMouseDownCapture:m,onMouseDown:S,onKeyDownCapture:_,onFocusCapture:V,onBlur:M},Je(i)}),fP=pe(function(t){let r=Xn(t);return xe(_x,r)});var ao=c(le(),1),kx="button";function lm(e){if(!e.isTrusted)return!1;let t=e.currentTarget;return e.key==="Enter"?Er(t)||t.tagName==="SUMMARY"||t.tagName==="A":e.key===" "?Er(t)||t.tagName==="SUMMARY"||t.tagName==="INPUT"||t.tagName==="SELECT":!1}var Nx=Symbol("command"),yu=ye(function({clickOnEnter:t=!0,clickOnSpace:r=!0,...o}){let n=(0,ao.useRef)(null),[i,a]=(0,ao.useState)(!1);(0,ao.useEffect)(()=>{n.current&&a(Er(n.current))},[]);let[l,s]=(0,ao.useState)(!1),u=(0,ao.useRef)(!1),f=_o(o),[d,m]=Bd(o,Nx,!0),p=o.onKeyDown,g=te(y=>{p?.(y);let _=y.currentTarget;if(y.defaultPrevented||d||f||!st(y)||mt(_)||_.isContentEditable)return;let A=t&&y.key==="Enter",V=r&&y.key===" ",I=y.key==="Enter"&&!t,M=y.key===" "&&!r;if(I||M){y.preventDefault();return}if(A||V){let N=lm(y);if(A){if(!N){y.preventDefault();let{view:C,...T}=y,k=()=>fu(_,T);cu()?no(_,"keyup",k):queueMicrotask(k)}}else V&&(u.current=!0,N||(y.preventDefault(),s(!0)))}}),S=o.onKeyUp,b=te(y=>{if(S?.(y),y.defaultPrevented||d||f||y.metaKey)return;let _=r&&y.key===" ";if(u.current&&_&&(u.current=!1,!lm(y))){y.preventDefault(),s(!1);let A=y.currentTarget,{view:V,...I}=y;queueMicrotask(()=>fu(A,I))}});return o={"data-active":l||void 0,type:i?"button":void 0,...m,...o,ref:Ie(n,o.ref),onKeyDown:g,onKeyUp:b},o=Xn(o),o}),yP=pe(function(t){let r=yu(t);return xe(kx,r)});function Io(e,t){let r=e.__unstableInternals;return Qe(r,"Invalid store"),r[t]}function gt(e,...t){let r=e,o=r,n=Symbol(),i=jn,a=new Set,l=new Set,s=new Set,u=new Set,f=new Set,d=new WeakMap,m=new WeakMap,p=C=>(s.add(C),()=>s.delete(C)),g=()=>{let C=a.size,T=Symbol();a.add(T);let k=()=>{a.delete(T),!a.size&&i()};if(C)return k;let h=ru(r).map(w=>ro(...t.map(O=>{var x;let v=(x=O?.getState)==null?void 0:x.call(O);if(v&&St(v,w))return Ke(O,[w],D=>{M(w,D[w],!0)})}))),E=[];for(let w of s)E.push(w());let P=t.map(sn);return i=ro(...h,...E,...P),k},S=(C,T,k=u)=>(k.add(T),m.set(T,C),()=>{var h;(h=d.get(T))==null||h(),d.delete(T),m.delete(T),k.delete(T)}),b=(C,T)=>S(C,T),y=(C,T)=>(d.set(T,T(r,r)),S(C,T)),_=(C,T)=>(d.set(T,T(r,o)),S(C,T,f)),A=C=>gt(tu(r,C),N),V=C=>gt(eu(r,C),N),I=()=>r,M=(C,T,k=!1)=>{var h;if(!St(r,C))return;let E=Jl(T,r[C]);if(E===r[C])return;if(!k)for(let x of t)(h=x?.setState)==null||h.call(x,C,E);let P=r;r={...r,[C]:E};let w=Symbol();n=w,l.add(C);let O=(x,v,D)=>{var B;let oe=m.get(x),fe=Ne=>D?D.has(Ne):Ne===C;(!oe||oe.some(fe))&&((B=d.get(x))==null||B(),d.set(x,x(r,v)))};for(let x of u)O(x,P);queueMicrotask(()=>{if(n!==w)return;let x=r;for(let v of f)O(v,o,l);o=x,l.clear()})},N={getState:I,setState:M,__unstableInternals:{setup:p,init:g,subscribe:b,sync:y,batch:_,pick:A,omit:V}};return N}function $e(e,...t){if(e)return Io(e,"setup")(...t)}function sn(e,...t){if(e)return Io(e,"init")(...t)}function ln(e,...t){if(e)return Io(e,"subscribe")(...t)}function Ke(e,...t){if(e)return Io(e,"sync")(...t)}function so(e,...t){if(e)return Io(e,"batch")(...t)}function Zn(e,...t){if(e)return Io(e,"omit")(...t)}function wu(e,...t){if(e)return Io(e,"pick")(...t)}function Oo(...e){var t;let r={};for(let n of e){let i=(t=n?.getState)==null?void 0:t.call(n);i&&Object.assign(r,i)}let o=gt(r,...e);return Object.assign({},...e,o)}var nr=c(le(),1),um=c(nf(),1),{useSyncExternalStore:cm}=um.default,fm=()=>()=>{};function un(e,t=Yn){let r=nr.useCallback(n=>e?ln(e,null,n):fm(),[e]),o=()=>{let n=typeof t=="string"?t:null,i=typeof t=="function"?t:null,a=e?.getState();if(i)return i(a);if(a&&n&&St(a,n))return a[n]};return cm(r,o,o)}function _a(e,t){let r=nr.useRef({}),o=nr.useCallback(i=>e?ln(e,null,i):fm(),[e]),n=()=>{let i=e?.getState(),a=!1,l=r.current;for(let s in t){let u=t[s];if(typeof u=="function"){let f=u(i);f!==l[s]&&(l[s]=f,a=!0)}if(typeof u=="string"){if(!i||!St(i,u))continue;let f=i[u];f!==l[s]&&(l[s]=f,a=!0)}}return a&&(r.current={...l}),r.current};return cm(o,n,n)}function Oe(e,t,r,o){let n=St(t,r)?t[r]:void 0,i=o?t[o]:void 0,a=kd({value:n,setValue:i});Te(()=>Ke(e,[r],(l,s)=>{let{value:u,setValue:f}=a.current;f&&l[r]!==s[r]&&l[r]!==u&&f(l[r])}),[e,r]),Te(()=>{if(n!==void 0)return e.setState(r,n),so(e,[r],()=>{n!==void 0&&e.setState(r,n)})})}function cn(e,t){let[r,o]=nr.useState(()=>e(t));Te(()=>sn(r),[r]);let n=nr.useCallback(l=>un(r,l),[r]),i=nr.useMemo(()=>({...r,useState:n}),[r,n]),a=te(()=>{o(l=>e({...t,...l.getState()}))});return[i,a]}var Pr=c(le(),1),mm=c(R(),1),Dx="button";function Mx(e){return Gn(e)?!0:e.tagName==="INPUT"&&!Er(e)}function Fx(e,t=!1){let r=e.clientHeight,{top:o}=e.getBoundingClientRect(),n=Math.max(r*.875,r-40)*1.5,i=t?r-n+o:n+o;return e.tagName==="HTML"?i+e.scrollTop:i}function Lx(e,t=!1){let{top:r}=e.getBoundingClientRect();return t?r+e.clientHeight:r}function dm(e,t,r,o=!1){var n;if(!t||!r)return;let{renderedItems:i}=t.getState(),a=nn(e);if(!a)return;let l=Fx(a,o),s,u;for(let f=0;f=0){u!==void 0&&uB.rowId===b);return p.ariaPosInSet+D.findIndex(B=>B.id===d)},isTabbable(v){if(!v?.renderedItems.length)return!0;if(v.virtualFocus)return!1;if(i)return!0;if(v.activeId===null)return!1;let D=t?.item(v.activeId);return D?.disabled||!D?.element?!0:v.activeId===d}}),M=(0,Pr.useCallback)(v=>{var D;let B={...v,id:d||v.id,rowId:b,disabled:!!S,children:(D=v.element)==null?void 0:D.textContent};return a?a(B):B},[d,b,S,a]),N=u.onFocus,C=(0,Pr.useRef)(!1),T=te(v=>{if(N?.(v),v.defaultPrevented||va(v)||!d||!t||Bx(v,t))return;let{virtualFocus:D,baseElement:B}=t.getState();if(t.setActiveId(d),Gn(v.currentTarget)&&Kd(v.currentTarget),!D||!st(v)||Mx(v.currentTarget)||!B?.isConnected)return;Eo()&&v.currentTarget.hasAttribute("data-autofocus")&&v.currentTarget.scrollIntoView({block:"nearest",inline:"nearest"}),C.current=!0,v.relatedTarget===B||To(t,v.relatedTarget)?Xd(B):B.focus()}),k=u.onBlurCapture,h=te(v=>{if(k?.(v),v.defaultPrevented)return;let D=t?.getState();D?.virtualFocus&&C.current&&(C.current=!1,v.preventDefault(),v.stopPropagation())}),E=u.onKeyDown,P=Me(o),w=Me(n),O=te(v=>{if(E?.(v),v.defaultPrevented||!st(v)||!t)return;let{currentTarget:D}=v,B=t.getState(),oe=t.item(d),fe=!!oe?.rowId,Ne=B.orientation!=="horizontal",He=B.orientation!=="vertical",ot=()=>!!(fe||He||!B.baseElement||!mt(B.baseElement)),vr={ArrowUp:(fe||Ne)&&t.up,ArrowRight:(fe||He)&&t.next,ArrowDown:(fe||Ne)&&t.down,ArrowLeft:(fe||He)&&t.previous,Home:()=>{if(ot())return!fe||v.ctrlKey?t?.first():t?.previous(-1)},End:()=>{if(ot())return!fe||v.ctrlKey?t?.last():t?.next(-1)},PageUp:()=>dm(D,t,t?.up,!0),PageDown:()=>dm(D,t,t?.down)}[v.key];if(vr){if(Gn(D)){let Q=on(D),he=He&&v.key==="ArrowLeft",hr=He&&v.key==="ArrowRight",br=Ne&&v.key==="ArrowUp",go=Ne&&v.key==="ArrowDown";if(hr||go){let{length:vo}=au(D);if(Q.end!==vo)return}else if((he||br)&&Q.start!==0)return}let q=vr();if(P(v)||q!==void 0){if(!w(v))return;v.preventDefault(),t.move(q)}}}),x=(0,Pr.useMemo)(()=>({id:d,baseElement:y}),[d,y]);return u=rr(u,v=>(0,mm.jsx)(Gd.Provider,{value:x,children:v}),[x]),u={id:d,"data-active-item":_||void 0,...u,ref:Ie(m,u.ref),tabIndex:I?u.tabIndex:-1,onFocus:T,onBlurCapture:h,onKeyDown:O},u=yu(u),u=vu({store:t,...u,getItem:M,shouldRegisterItem:d?u.shouldRegisterItem:!1}),Je({...u,"aria-setsize":A,"aria-posinset":V})}),zP=io(pe(function(t){let r=Su(t);return xe(Dx,r)}));function _u(e){return Array.isArray(e)?e:typeof e<"u"?[e]:[]}function Qn(e){let t=[];for(let r of e)t.push(...r);return t}function fn(e){return e.slice().reverse()}var ir=c(le(),1),gm=c(R(),1),Hx="div";function zx(e){return e.some(t=>!!t.rowId)}function jx(e){let t=e.target;return t&&!mt(t)?!1:e.key.length===1&&!e.ctrlKey&&!e.metaKey}function Wx(e){return e.key==="Shift"||e.key==="Control"||e.key==="Alt"||e.key==="Meta"}function pm(e,t,r){return te(o=>{var n;if(t?.(o),o.defaultPrevented||o.isPropagationStopped()||!st(o)||Wx(o)||jx(o))return;let i=e.getState(),a=(n=or(e,i.activeId))==null?void 0:n.element;if(!a)return;let{view:l,...s}=o,u=r?.current;a!==u&&a.focus(),Ad(a,o.type,s)||o.preventDefault(),o.currentTarget.contains(a)&&o.stopPropagation()})}function Yx(e){return qd(Qn(fn($d(e))))}function Gx(e){let[t,r]=(0,ir.useState)(!1),o=(0,ir.useCallback)(()=>r(!0),[]),n=e.useState(i=>or(e,i.activeId));return(0,ir.useEffect)(()=>{let i=n?.element;t&&i&&(r(!1),i.focus({preventScroll:!0}))},[n,t]),o}var Cu=ye(function({store:t,composite:r=!0,focusOnMove:o=r,moveOnKeyPress:n=!0,...i}){let a=Yd();t=t||a,Qe(t,!1);let l=(0,ir.useRef)(null),s=(0,ir.useRef)(null),u=Gx(t),f=t.useState("moves"),[,d]=Nd(r?t.setBaseElement:null);(0,ir.useEffect)(()=>{var h;if(!t||!f||!r||!o)return;let{activeId:E}=t.getState(),P=(h=or(t,E))==null?void 0:h.element;P&&om(P)},[t,f,r,o]),Te(()=>{if(!t||!f||!r)return;let{baseElement:h,activeId:E}=t.getState();if(!(E===null)||!h)return;let w=s.current;s.current=null,w&&Po(w,{relatedTarget:h}),Lt(h)||h.focus()},[t,f,r]);let m=t.useState("activeId"),p=t.useState("virtualFocus");Te(()=>{var h;if(!t||!r||!p)return;let E=s.current;if(s.current=null,!E)return;let w=((h=or(t,m))==null?void 0:h.element)||Co(E);w!==E&&Po(E,{relatedTarget:w})},[t,m,p,r]);let g=pm(t,i.onKeyDownCapture,s),S=pm(t,i.onKeyUpCapture,s),b=i.onFocusCapture,y=te(h=>{if(b?.(h),h.defaultPrevented||!t)return;let{virtualFocus:E}=t.getState();if(!E)return;let P=h.relatedTarget,w=Zd(h.currentTarget);st(h)&&w&&(h.stopPropagation(),s.current=P)}),_=i.onFocus,A=te(h=>{if(_?.(h),h.defaultPrevented||!r||!t)return;let{relatedTarget:E}=h,{virtualFocus:P}=t.getState();P?st(h)&&!To(t,E)&&queueMicrotask(u):st(h)&&t.setActiveId(null)}),V=i.onBlurCapture,I=te(h=>{var E;if(V?.(h),h.defaultPrevented||!t)return;let{virtualFocus:P,activeId:w}=t.getState();if(!P)return;let O=(E=or(t,w))==null?void 0:E.element,x=h.relatedTarget,v=To(t,x),D=s.current;s.current=null,st(h)&&v?(x===O?D&&D!==x&&Po(D,h):O?Po(O,h):D&&Po(D,h),h.stopPropagation()):!To(t,h.target)&&O&&Po(O,h)}),M=i.onKeyDown,N=Me(n),C=te(h=>{var E;if(M?.(h),h.nativeEvent.isComposing||h.defaultPrevented||!t||!st(h))return;let{orientation:P,renderedItems:w,activeId:O}=t.getState(),x=or(t,O);if((E=x?.element)!=null&&E.isConnected)return;let v=P!=="horizontal",D=P!=="vertical",B=zx(w);if((h.key==="ArrowLeft"||h.key==="ArrowRight"||h.key==="Home"||h.key==="End")&&mt(h.currentTarget))return;let He={ArrowUp:(B||v)&&(()=>{if(B){let ot=Yx(w);return ot?.id}return t?.last()}),ArrowRight:(B||D)&&t.first,ArrowDown:(B||v)&&t.first,ArrowLeft:(B||D)&&t.last,Home:t.first,End:t.last,PageUp:t.first,PageDown:t.last}[h.key];if(He){let ot=He();if(ot!==void 0){if(!N(h))return;h.preventDefault(),t.move(ot)}}});i=rr(i,h=>(0,gm.jsx)(an,{value:t,children:h}),[t]),i={"aria-activedescendant":t.useState(h=>{var E;if(t&&r&&h.virtualFocus)return(E=or(t,h.activeId))==null?void 0:E.id}),...i,ref:Ie(l,d,i.ref),onKeyDownCapture:g,onKeyUpCapture:S,onFocusCapture:y,onFocus:A,onBlurCapture:I,onKeyDown:C};let k=t.useState(h=>r&&(h.virtualFocus||h.activeId===null));return i=Xn({focusable:k,...i}),i}),oA=pe(function(t){let r=Cu(t);return xe(Hx,r)});var Jn=_t(),aA=Jn.useContext,sA=Jn.useScopedContext,Eu=Jn.useProviderContext,vm=Jn.ContextProvider,hm=Jn.ScopedContextProvider;var Pu=c(le(),1),ei=_t([vm],[hm]),fA=ei.useContext,dA=ei.useScopedContext,mA=ei.useProviderContext,bm=ei.ContextProvider,Ca=ei.ScopedContextProvider,pA=(0,Pu.createContext)(void 0),gA=(0,Pu.createContext)(void 0);var dn=c(le(),1),wm=c(ef(),1),Au=c(R(),1),Ux="div";function xm(e,t){let r=setTimeout(t,e);return()=>clearTimeout(r)}function qx(e){let t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>cancelAnimationFrame(t)}function ym(...e){return e.join(", ").split(", ").reduce((t,r)=>{let o=r.endsWith("ms")?1:1e3,n=Number.parseFloat(r||"0s")*o;return n>t?n:t},0)}function Tu(e,t,r){return!r&&t!==!1&&(!e||!!t)}var $x=ye(function({store:t,alwaysVisible:r,...o}){let n=Eu();t=t||n,Qe(t,!1);let i=(0,dn.useRef)(null),a=Ft(o.id),[l,s]=(0,dn.useState)(null),u=t.useState("open"),f=t.useState("mounted"),d=t.useState("animated"),m=t.useState("contentElement"),p=un(t.disclosure,"contentElement");Te(()=>{i.current&&t?.setContentElement(i.current)},[t]),Te(()=>{let y;return t?.setState("animated",_=>(y=_,!0)),()=>{y!==void 0&&t?.setState("animated",y)}},[t]),Te(()=>{if(d){if(!m?.isConnected){s(null);return}return qx(()=>{s(u?"enter":f?"leave":null)})}},[d,m,u,f]),Te(()=>{if(!t||!d||!l||!m)return;let y=()=>t?.setState("animating",!1),_=()=>(0,wm.flushSync)(y);if(l==="leave"&&u||l==="enter"&&!u)return;if(typeof d=="number")return xm(d,_);let{transitionDuration:A,animationDuration:V,transitionDelay:I,animationDelay:M}=getComputedStyle(m),{transitionDuration:N="0",animationDuration:C="0",transitionDelay:T="0",animationDelay:k="0"}=p?getComputedStyle(p):{},h=ym(I,M,T,k),E=ym(A,V,N,C),P=h+E;if(!P){l==="enter"&&t.setState("animated",!1),y();return}let w=1e3/60,O=Math.max(P-w,0);return xm(O,_)},[t,d,m,p,u,l]),o=rr(o,y=>(0,Au.jsx)(Ca,{value:t,children:y}),[t]);let g=Tu(f,o.hidden,r),S=o.style,b=(0,dn.useMemo)(()=>g?{...S,display:"none"}:S,[g,S]);return o={id:a,"data-open":u||void 0,"data-enter":l==="enter"||void 0,"data-leave":l==="leave"||void 0,hidden:g,...o,ref:Ie(a?t.setContentElement:null,i,o.ref),style:b},Je(o)}),Kx=pe(function(t){let r=$x(t);return xe(Ux,r)}),_A=pe(function({unmountOnHide:t,...r}){let o=Eu(),n=r.store||o;return un(n,a=>!t||a?.mounted)===!1?null:(0,Au.jsx)(Kx,{...r})});function Sm(e={}){let t=Oo(e.store,Zn(e.disclosure,["contentElement","disclosureElement"]));let r=t?.getState(),o=ee(e.open,r?.open,e.defaultOpen,!1),n=ee(e.animated,r?.animated,!1),i={open:o,animated:n,animating:!!n&&o,mounted:o,contentElement:ee(r?.contentElement,null),disclosureElement:ee(r?.disclosureElement,null)},a=gt(i,t);return $e(a,()=>Ke(a,["animated","animating"],l=>{l.animated||a.setState("animating",!1)})),$e(a,()=>ln(a,["open"],()=>{a.getState().animated&&a.setState("animating",!0)})),$e(a,()=>Ke(a,["open","animating"],l=>{a.setState("mounted",l.open||l.animating)})),{...a,disclosure:e.disclosure,setOpen:l=>a.setState("open",l),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",l=>!l),stopAnimation:()=>a.setState("animating",!1),setContentElement:l=>a.setState("contentElement",l),setDisclosureElement:l=>a.setState("disclosureElement",l)}}function _m(e,t,r){return tr(t,[r.store,r.disclosure]),Oe(e,r,"open","setOpen"),Oe(e,r,"mounted","setMounted"),Oe(e,r,"animated"),Object.assign(e,{disclosure:r.disclosure})}var ti=_t([bm],[Ca]),kA=ti.useContext,NA=ti.useScopedContext,Cm=ti.useProviderContext,Em=ti.ContextProvider,Pm=ti.ScopedContextProvider;function Xx(e){var t;let r=e.find(i=>!!i.element),o=[...e].reverse().find(i=>!!i.element),n=(t=r?.element)==null?void 0:t.parentElement;for(;n&&o?.element;){if(o&&n.contains(o.element))return n;n=n.parentElement}return Cr(n).body}function Zx(e){return e?.__unstablePrivateStore}function Am(e={}){var t;e.store;let r=(t=e.store)==null?void 0:t.getState(),o=ee(e.items,r?.items,e.defaultItems,[]),n=new Map(o.map(m=>[m.id,m])),i={items:o,renderedItems:ee(r?.renderedItems,[])},a=Zx(e.store),l=gt({items:o,renderedItems:i.renderedItems},a),s=gt(i,e.store),u=m=>{let p=lu(m,g=>g.element);l.setState("renderedItems",p),s.setState("renderedItems",p)};$e(s,()=>sn(l)),$e(l,()=>so(l,["items"],m=>{s.setState("items",m.items)})),$e(l,()=>so(l,["renderedItems"],m=>{let p=!0,g=requestAnimationFrame(()=>{let{renderedItems:_}=s.getState();m.renderedItems!==_&&u(m.renderedItems)});if(typeof IntersectionObserver!="function")return()=>cancelAnimationFrame(g);let S=()=>{if(p){p=!1;return}cancelAnimationFrame(g),g=requestAnimationFrame(()=>u(m.renderedItems))},b=Xx(m.renderedItems),y=new IntersectionObserver(S,{root:b});for(let _ of m.renderedItems)_.element&&y.observe(_.element);return()=>{cancelAnimationFrame(g),y.disconnect()}}));let f=(m,p,g=!1)=>{let S;return p(y=>{let _=y.findIndex(({id:V})=>V===m.id),A=y.slice();if(_!==-1){S=y[_];let V={...S,...m};A[_]=V,n.set(m.id,V)}else A.push(m),n.set(m.id,m);return A}),()=>{p(y=>{if(!S)return g&&n.delete(m.id),y.filter(({id:V})=>V!==m.id);let _=y.findIndex(({id:V})=>V===m.id);if(_===-1)return y;let A=y.slice();return A[_]=S,n.set(m.id,S),A})}},d=m=>f(m,p=>l.setState("items",p),!0);return{...s,registerItem:d,renderItem:m=>ro(d(m),f(m,p=>l.setState("renderedItems",p))),item:m=>{if(!m)return null;let p=n.get(m);if(!p){let{items:g}=l.getState();p=g.find(S=>S.id===m),p&&n.set(m,p)}return p||null},__unstablePrivateStore:l}}function Tm(e,t,r){return tr(t,[r.store]),Oe(e,r,"items","setItems"),e}var Qx={id:null};function Ar(e,t){return e.find(r=>t?!r.disabled&&r.id!==t:!r.disabled)}function Jx(e,t){return e.filter(r=>t?!r.disabled&&r.id!==t:!r.disabled)}function Im(e,t){return e.filter(r=>r.rowId===t)}function e0(e,t,r=!1){let o=e.findIndex(n=>n.id===t);return[...e.slice(o+1),...r?[Qx]:[],...e.slice(0,o)]}function Om(e){let t=[];for(let r of e){let o=t.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):t.push([r])}return t}function Rm(e){let t=0;for(let{length:r}of e)r>t&&(t=r);return t}function t0(e){return{id:"__EMPTY_ITEM__",disabled:!0,rowId:e}}function r0(e,t,r){let o=Rm(e);for(let n of e)for(let i=0;iKe(a,["renderedItems","activeId"],s=>{a.setState("activeId",u=>{var f;return u!==void 0?u:(f=Ar(s.renderedItems))==null?void 0:f.id})}));let l=(s="next",u={})=>{var f,d;let m=a.getState(),{skip:p=0,activeId:g=m.activeId,focusShift:S=m.focusShift,focusLoop:b=m.focusLoop,focusWrap:y=m.focusWrap,includesBaseElement:_=m.includesBaseElement,renderedItems:A=m.renderedItems,rtl:V=m.rtl}=u,I=s==="up"||s==="down",M=s==="next"||s==="down",N=M?V&&!I:!V||I,C=S&&!p,T=I?Qn(r0(Om(A),g,C)):A;if(T=N?fn(T):T,T=I?o0(T):T,g==null)return(f=Ar(T))==null?void 0:f.id;let k=T.find(B=>B.id===g);if(!k)return(d=Ar(T))==null?void 0:d.id;let h=T.some(B=>B.rowId),E=T.indexOf(k),P=T.slice(E+1),w=Im(P,k.rowId);if(p){let B=Jx(w,g),oe=B.slice(p)[0]||B[B.length-1];return oe?.id}let O=b&&(I?b!=="horizontal":b!=="vertical"),x=h&&y&&(I?y!=="horizontal":y!=="vertical"),v=M?(!h||I)&&O&&_:I?_:!1;if(O){let B=x&&!v?T:Im(T,k.rowId),oe=e0(B,g,v),fe=Ar(oe,g);return fe?.id}if(x){let B=Ar(v?w:P,g);return v?B?.id||null:B?.id}let D=Ar(w,g);return!D&&v?null:D?.id};return{...o,...a,setBaseElement:s=>a.setState("baseElement",s),setActiveId:s=>a.setState("activeId",s),move:s=>{s!==void 0&&(a.setState("activeId",s),a.setState("moves",u=>u+1))},first:()=>{var s;return(s=Ar(a.getState().renderedItems))==null?void 0:s.id},last:()=>{var s;return(s=Ar(fn(a.getState().renderedItems)))==null?void 0:s.id},next:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("next",s)),previous:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("previous",s)),down:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("down",s)),up:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("up",s))}}function km(e){return{id:Ft(e.id),...e}}function Nm(e,t,r){return e=Tm(e,t,r),Oe(e,r,"activeId","setActiveId"),Oe(e,r,"includesBaseElement"),Oe(e,r,"virtualFocus"),Oe(e,r,"orientation"),Oe(e,r,"rtl"),Oe(e,r,"focusLoop"),Oe(e,r,"focusWrap"),Oe(e,r,"focusShift"),e}var Ea=c(le(),1),Pa=(0,Ea.createContext)(void 0),ri=_t([Em,an],[Pm,ya]),Iu=ri.useContext,mn=ri.useScopedContext,Aa=ri.useProviderContext,Dm=ri.ContextProvider,Mm=ri.ScopedContextProvider,Ta=(0,Ea.createContext)(void 0),Fm=(0,Ea.createContext)(!1);function Lm(e={}){return Sm(e)}function Bm(e,t,r){return _m(e,t,r)}function Hm({popover:e,...t}={}){let r=Oo(t.store,Zn(e,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"]));let o=r?.getState(),n=Lm({...t,store:r}),i=ee(t.placement,o?.placement,"bottom"),a={...n.getState(),placement:i,currentPlacement:i,anchorElement:ee(o?.anchorElement,null),popoverElement:ee(o?.popoverElement,null),arrowElement:ee(o?.arrowElement,null),rendered:Symbol("rendered")},l=gt(a,n,r);return{...n,...l,setAnchorElement:s=>l.setState("anchorElement",s),setPopoverElement:s=>l.setState("popoverElement",s),setArrowElement:s=>l.setState("arrowElement",s),render:()=>l.setState("rendered",Symbol("rendered"))}}function zm(e,t,r){return tr(t,[r.popover]),Oe(e,r,"placement"),Bm(e,t,r)}var n0="div",Ou=ye(function({store:t,...r}){let o=Cm();return t=t||o,r={...r,ref:Ie(t?.setAnchorElement,r.ref)},r}),hT=pe(function(t){let r=Ou(t);return xe(n0,r)});var jm=c(le(),1),i0="div";function Wm(e){let t=e.relatedTarget;return t?.nodeType===Node.ELEMENT_NODE?t:null}function a0(e){let t=Wm(e);return t?Jt(e.currentTarget,t):!1}var Ru=Symbol("composite-hover");function s0(e){let t=Wm(e);if(!t)return!1;do{if(St(t,Ru)&&t[Ru])return!0;t=t.parentElement}while(t);return!1}var Vu=ye(function({store:t,focusOnHover:r=!0,blurOnHoverEnd:o=!!r,...n}){let i=xa();t=t||i,Qe(t,!1);let a=Hd(),l=n.onMouseMove,s=Me(r),u=te(g=>{if(l?.(g),!g.defaultPrevented&&a()&&s(g)){if(!hu(g.currentTarget)){let S=t?.getState().baseElement;S&&!Lt(S)&&S.focus()}t?.setActiveId(g.currentTarget.id)}}),f=n.onMouseLeave,d=Me(o),m=te(g=>{var S;f?.(g),!g.defaultPrevented&&a()&&(a0(g)||s0(g)||s(g)&&d(g)&&(t?.setActiveId(null),(S=t?.getState().baseElement)==null||S.focus()))}),p=(0,jm.useCallback)(g=>{g&&(g[Ru]=!0)},[]);return n={...n,ref:Ie(p,n.ref),onMouseMove:u,onMouseLeave:m},Je(n)}),ET=io(pe(function(t){let r=Vu(t);return xe(i0,r)}));var et=c(le(),1),l0="input";function Ym(e,t,r){if(!r)return!1;let o=e.find(n=>!n.disabled&&n.value);return o?.value===t}function Gm(e,t){return!t||e==null?!1:(e=Wn(e),t.length>e.length&&t.toLowerCase().indexOf(e.toLowerCase())===0)}function u0(e){return e.type==="input"}function c0(e){return e==="inline"||e==="list"||e==="both"||e==="none"}function f0(e){let t=e.find(r=>{var o;return r.disabled?!1:((o=r.element)==null?void 0:o.getAttribute("role"))!=="tab"});return t?.id}var d0=ye(function({store:t,focusable:r=!0,autoSelect:o=!1,getAutoSelectId:n,setValueOnChange:i,showMinLength:a=0,showOnChange:l,showOnMouseDown:s,showOnClick:u=s,showOnKeyDown:f,showOnKeyPress:d=f,blurActiveItemOnClick:m,setValueOnClick:p=!0,moveOnKeyPress:g=!0,autoComplete:S="list",...b}){let y=Aa();t=t||y,Qe(t,!1);let _=(0,et.useRef)(null),[A,V]=Ld(),I=(0,et.useRef)(!1),M=(0,et.useRef)(!1),N=t.useState(L=>L.virtualFocus&&o),C=S==="inline"||S==="both",[T,k]=(0,et.useState)(C);Fd(()=>{C&&k(!0)},[C]);let h=t.useState("value"),E=(0,et.useRef)(void 0);(0,et.useEffect)(()=>Ke(t,["selectedValue","activeId"],(L,se)=>{E.current=se.selectedValue}),[]);let P=t.useState(L=>{var se;if(C&&T&&!(L.activeValue&&Array.isArray(L.selectedValue)&&(L.selectedValue.includes(L.activeValue)||(se=E.current)!=null&&se.includes(L.activeValue))))return L.activeValue}),w=t.useState("renderedItems"),O=t.useState("open"),x=t.useState("contentElement"),v=(0,et.useMemo)(()=>{if(!C||!T)return h;if(Ym(w,P,N)){if(Gm(h,P)){let se=P?.slice(h.length)||"";return h+se}return h}return P||h},[C,T,w,P,N,h]);(0,et.useEffect)(()=>{let L=_.current;if(!L)return;let se=()=>k(!0);return L.addEventListener("combobox-item-move",se),()=>{L.removeEventListener("combobox-item-move",se)}},[]),(0,et.useEffect)(()=>{if(!C||!T||!P||!Ym(w,P,N)||!Gm(h,P))return;let se=jn;return queueMicrotask(()=>{let ze=_.current;if(!ze)return;let{start:je,end:Nt}=on(ze),xr=h.length,nt=P.length;Un(ze,xr,nt),se=()=>{if(!Lt(ze))return;let{start:ho,end:Xh}=on(ze);ho===xr&&Xh===nt&&Un(ze,je,Nt)}}),()=>se()},[A,C,T,P,w,N,h]);let D=(0,et.useRef)(null),B=te(n),oe=(0,et.useRef)(null);(0,et.useEffect)(()=>{if(!O||!x)return;let L=nn(x);if(!L)return;D.current=L;let se=()=>{I.current=!1},ze=()=>{if(!t||!I.current)return;let{activeId:Nt}=t.getState();Nt!==null&&Nt!==oe.current&&(I.current=!1)},je={passive:!0,capture:!0};return L.addEventListener("wheel",se,je),L.addEventListener("touchmove",se,je),L.addEventListener("scroll",ze,je),()=>{L.removeEventListener("wheel",se,!0),L.removeEventListener("touchmove",se,!0),L.removeEventListener("scroll",ze,!0)}},[O,x,t]),Te(()=>{h&&(M.current||(I.current=!0))},[h]),Te(()=>{N!=="always"&&O||(I.current=O)},[N,O]);let fe=t.useState("resetValueOnSelect");tr(()=>{var L,se;let ze=I.current;if(!t||!O||!ze&&!fe)return;let{baseElement:je,contentElement:Nt,activeId:xr}=t.getState();if(!(je&&!Lt(je))){if(Nt?.hasAttribute("data-placing")){let nt=new MutationObserver(V);return nt.observe(Nt,{attributeFilter:["data-placing"]}),()=>nt.disconnect()}if(N&&ze){let nt=B(w),ho=nt!==void 0?nt:(L=f0(w))!=null?L:t.first();oe.current=ho,t.move(ho??null)}else{let nt=(se=t.item(xr||t.first()))==null?void 0:se.element;nt&&"scrollIntoView"in nt&&nt.scrollIntoView({block:"nearest",inline:"nearest"})}}},[t,O,A,h,N,fe,B,w]),(0,et.useEffect)(()=>{if(!C)return;let L=_.current;if(!L)return;let se=[L,x].filter(je=>!!je),ze=je=>{se.every(Nt=>ha(je,Nt))&&t?.setValue(v)};for(let je of se)je.addEventListener("focusout",ze);return()=>{for(let je of se)je.removeEventListener("focusout",ze)}},[C,x,t,v]);let Ne=L=>L.currentTarget.value.length>=a,He=b.onChange,ot=Me(l??Ne),qt=Me(i??!t.tag),vr=te(L=>{if(He?.(L),L.defaultPrevented||!t)return;let se=L.currentTarget,{value:ze,selectionStart:je,selectionEnd:Nt}=se,xr=L.nativeEvent;if(I.current=!0,u0(xr)&&(xr.isComposing&&(I.current=!1,M.current=!0),C)){let nt=xr.inputType==="insertText"||xr.inputType==="insertCompositionText",ho=je===ze.length;k(nt&&ho)}if(qt(L)){let nt=ze===t.getState().value;t.setValue(ze),queueMicrotask(()=>{Un(se,je,Nt)}),C&&N&&nt&&V()}ot(L)&&t.show(),(!N||!I.current)&&t.setActiveId(null)}),q=b.onCompositionEnd,Q=te(L=>{I.current=!0,M.current=!1,q?.(L),!L.defaultPrevented&&N&&V()}),he=b.onMouseDown,hr=Me(m??(()=>!!t?.getState().includesBaseElement)),br=Me(p),go=Me(u??Ne),vo=te(L=>{he?.(L),!L.defaultPrevented&&(L.button||L.ctrlKey||t&&(hr(L)&&t.setActiveId(null),br(L)&&t.setValue(v),go(L)&&no(L.currentTarget,"mouseup",t.show)))}),jo=b.onKeyDown,Pn=Me(d??Ne),Fs=te(L=>{if(jo?.(L),L.repeat||(I.current=!1),L.defaultPrevented||L.ctrlKey||L.altKey||L.shiftKey||L.metaKey||!t)return;let{open:se}=t.getState();se||(L.key==="ArrowUp"||L.key==="ArrowDown")&&Pn(L)&&(L.preventDefault(),t.show())}),Tc=b.onBlur,Uh=te(L=>{I.current=!1,Tc?.(L),L.defaultPrevented}),qh=Ft(b.id),$h=c0(S)?S:void 0,Kh=t.useState(L=>L.activeId===null);return b={id:qh,role:"combobox","aria-autocomplete":$h,"aria-haspopup":su(x,"listbox"),"aria-expanded":O,"aria-controls":x?.id,"data-active-item":Kh||void 0,value:v,...b,ref:Ie(_,b.ref),onChange:vr,onCompositionEnd:Q,onMouseDown:vo,onKeyDown:Fs,onBlur:Uh},b=Cu({store:t,focusable:r,...b,moveOnKeyPress:L=>ou(g,L)?!1:(C&&k(!0),!0)}),b=Ou({store:t,...b}),{autoComplete:"off",...b}}),Ia=pe(function(t){let r=d0(t);return xe(l0,r)});var Oa=c(le(),1),ku=c(R(),1),m0="div";function p0(e,t){if(t!=null)return e==null?!1:Array.isArray(e)?e.includes(t):e===t}function g0(e){var t;return(t={menu:"menuitem",listbox:"option",tree:"treeitem"}[e])!=null?t:"option"}var Um=ye(function({store:t,value:r,hideOnClick:o,setValueOnClick:n,selectValueOnClick:i=!0,resetValueOnSelect:a,focusOnHover:l=!1,moveOnKeyPress:s=!0,getItem:u,...f}){var d;let m=mn();t=t||m,Qe(t,!1);let{resetValueOnSelectState:p,multiSelectable:g,selected:S}=_a(t,{resetValueOnSelectState:"resetValueOnSelect",multiSelectable(h){return Array.isArray(h.selectedValue)},selected(h){return p0(h.selectedValue,r)}}),b=(0,Oa.useCallback)(h=>{let E={...h,value:r};return u?u(E):E},[r,u]);n=n??!g,o=o??(r!=null&&!g);let y=f.onClick,_=Me(n),A=Me(i),V=Me((d=a??p)!=null?d:g),I=Me(o),M=te(h=>{y?.(h),!h.defaultPrevented&&(Pd(h)||Ed(h)||(r!=null&&(A(h)&&(V(h)&&t?.resetValue(),t?.setSelectedValue(E=>Array.isArray(E)?E.includes(r)?E.filter(P=>P!==r):[...E,r]:r)),_(h)&&t?.setValue(r)),I(h)&&t?.hide()))}),N=f.onKeyDown,C=te(h=>{if(N?.(h),h.defaultPrevented)return;let E=t?.getState().baseElement;if(!E||Lt(E))return;(h.key.length===1||h.key==="Backspace"||h.key==="Delete")&&(queueMicrotask(()=>E.focus()),mt(E)&&t?.setValue(E.value))});g&&S!=null&&(f={"aria-selected":S,...f}),f=rr(f,h=>(0,ku.jsx)(Ta.Provider,{value:r,children:(0,ku.jsx)(Fm.Provider,{value:S??!1,children:h})}),[r,S]);let T=(0,Oa.useContext)(Pa);f={role:g0(T),children:r,...f,onClick:M,onKeyDown:C};let k=Me(s);return f=Su({store:t,...f,getItem:b,moveOnKeyPress:h=>{if(!k(h))return!1;let E=new Event("combobox-item-move"),P=t?.getState().baseElement;return P?.dispatchEvent(E),!0}}),f=Vu({store:t,focusOnHover:l,...f}),f}),oi=io(pe(function(t){let r=Um(t);return xe(m0,r)}));var Ra=c(le(),1),$m=c(R(),1),v0="span";function qm(e){return Wn(e).toLowerCase()}function h0(e,t){let r=[];for(let o of t){let n=0,i=o.length;for(;e.indexOf(o,n)!==-1;){let a=e.indexOf(o,n);a!==-1&&r.push([a,i]),n=a+1}}return r}function b0(e){return e.filter(([t,r],o,n)=>!n.some(([i,a],l)=>l!==o&&i<=t&&i+a>=t+r))}function x0(e){return e.sort(([t],[r])=>t-r)}function y0(e,t){if(!e||!t)return e;let r=_u(t).filter(Boolean).map(qm),o=[],n=(s,u=!1)=>(0,$m.jsx)("span",{"data-autocomplete-value":u?"":void 0,"data-user-value":u?void 0:"",children:s},o.length),i=x0(b0(h0(qm(e),new Set(r))));if(!i.length)return o.push(n(e,!0)),o;let[a]=i[0];return[e.slice(0,a),...i.flatMap(([s,u],f)=>{var d;let m=e.slice(s,s+u),p=(d=i[f+1])==null?void 0:d[0],g=e.slice(s+u,p);return[m,g]})].forEach((s,u)=>{s&&o.push(n(s,u%2===0))}),o}var w0=ye(function({store:t,value:r,userValue:o,...n}){let i=mn();t=t||i;let a=(0,Ra.useContext)(Ta),l=r??a,s=un(t,f=>o??f?.value);return n={children:(0,Ra.useMemo)(()=>{if(l)return s?y0(l,s):l},[l,s]),...n},Je(n)}),Va=pe(function(t){let r=w0(t);return xe(v0,r)});var S0="label",_0=ye(function({store:t,...r}){let o=Aa();return t=t||o,Qe(t,!1),r={htmlFor:t.useState(i=>{var a;return(a=i.baseElement)==null?void 0:a.id}),...r},Je(r)}),ka=io(pe(function(t){let r=_0(t);return xe(S0,r)}));var Na=c(le(),1),Nu=c(R(),1),C0="div",Km=ye(function({store:t,alwaysVisible:r,...o}){let n=mn(!0),i=Iu();t=t||i;let a=!!t&&t===n;Qe(t,!1);let l=(0,Na.useRef)(null),s=Ft(o.id),u=t.useState("mounted"),f=Tu(u,o.hidden,r),d=f?{...o.style,display:"none"}:o.style,m=t.useState(V=>Array.isArray(V.selectedValue)),p=Md(l,"role",o.role),S=(p==="listbox"||p==="tree"||p==="grid")&&m||void 0,[b,y]=(0,Na.useState)(!1),_=t.useState("contentElement");Te(()=>{if(!u)return;let V=l.current;if(!V||_!==V)return;let I=()=>{y(!!V.querySelector("[role='listbox']"))},M=new MutationObserver(I);return M.observe(V,{subtree:!0,childList:!0,attributeFilter:["role"]}),I(),()=>M.disconnect()},[u,_]),b||(o={role:"listbox","aria-multiselectable":S,...o}),o=rr(o,V=>(0,Nu.jsx)(Mm,{value:t,children:(0,Nu.jsx)(Pa.Provider,{value:p,children:V})}),[t,p]);let A=s&&(!n||!a)?t.setContentElement:null;return o={id:s,hidden:f,...o,ref:Ie(A,l,o.ref),style:d},Je(o)}),ni=pe(function(t){let r=Km(t);return xe(C0,r)});var Du=c(le(),1),hI=(0,Du.createContext)(null),bI=(0,Du.createContext)(null),ii=_t([an],[ya]),Xm=ii.useContext,xI=ii.useScopedContext,yI=ii.useProviderContext,wI=ii.ContextProvider,SI=ii.ScopedContextProvider;var E0=Eo()&&uu();function Zm({tag:e,...t}={}){let r=Oo(t.store,wu(e,["value","rtl"]));let o=e?.getState(),n=r?.getState(),i=ee(t.activeId,n?.activeId,t.defaultActiveId,null),a=Vm({...t,activeId:i,includesBaseElement:ee(t.includesBaseElement,n?.includesBaseElement,!0),orientation:ee(t.orientation,n?.orientation,"vertical"),focusLoop:ee(t.focusLoop,n?.focusLoop,!0),focusWrap:ee(t.focusWrap,n?.focusWrap,!0),virtualFocus:ee(t.virtualFocus,n?.virtualFocus,!0)}),l=Hm({...t,placement:ee(t.placement,n?.placement,"bottom-start")}),s=ee(t.value,n?.value,t.defaultValue,""),u=ee(t.selectedValue,n?.selectedValue,o?.values,t.defaultSelectedValue,""),f=Array.isArray(u),d={...a.getState(),...l.getState(),value:s,selectedValue:u,resetValueOnSelect:ee(t.resetValueOnSelect,n?.resetValueOnSelect,f),resetValueOnHide:ee(t.resetValueOnHide,n?.resetValueOnHide,f&&!e),activeValue:n?.activeValue},m=gt(d,a,l,r);return E0&&$e(m,()=>Ke(m,["virtualFocus"],()=>{m.setState("virtualFocus",!1)})),$e(m,()=>{if(e)return ro(Ke(m,["selectedValue"],p=>{Array.isArray(p.selectedValue)&&e.setValues(p.selectedValue)}),Ke(e,["values"],p=>{m.setState("selectedValue",p.values)}))}),$e(m,()=>Ke(m,["resetValueOnHide","mounted"],p=>{p.resetValueOnHide&&(p.mounted||m.setState("value",s))})),$e(m,()=>Ke(m,["open"],p=>{p.open||(m.setState("activeId",i),m.setState("moves",0))})),$e(m,()=>Ke(m,["moves","activeId"],(p,g)=>{p.moves===g.moves&&m.setState("activeValue",void 0)})),$e(m,()=>so(m,["moves","renderedItems"],(p,g)=>{if(p.moves===g.moves)return;let{activeId:S}=m.getState(),b=a.item(S);m.setState("activeValue",b?.value)})),{...l,...a,...m,tag:e,setValue:p=>m.setState("value",p),resetValue:()=>m.setState("value",d.value),setSelectedValue:p=>m.setState("selectedValue",p)}}function A0(e){let t=Xm();return e={...e,tag:e.tag!==void 0?e.tag:t},km(e)}function T0(e,t,r){return tr(t,[r.tag]),Oe(e,r,"value","setValue"),Oe(e,r,"selectedValue","setSelectedValue"),Oe(e,r,"resetValueOnHide"),Oe(e,r,"resetValueOnSelect"),Object.assign(Nm(zm(e,t,r),t,r),{tag:r.tag})}function Mu(e={}){e=A0(e);let[t,r]=cn(Zm,e);return T0(t,r,e)}var Qm=c(R(),1);function Da(e={}){let t=Mu(e);return(0,Qm.jsx)(Dm,{value:t,children:e.children})}var ip=c(Fu(),1);var ap=c(Et(),1),Tr=c(G(),1),Ro=c(z(),1),Bt=c(U(),1);var N0=[],ai=(e,t)=>e.singleSelection?t?.value:Array.isArray(t?.value)?t.value:!Array.isArray(t?.value)&&t?.value?[t.value]:N0;var si=c(z(),1),D0=[];function Xe({elements:e,getElements:t}){let r=Array.isArray(e)&&e.length>0?e:D0,[o,n]=(0,si.useState)(r),[i,a]=(0,si.useState)(!1);return(0,si.useEffect)(()=>{if(!t){n(r);return}let l=!1;return a(!0),t().then(s=>{if(!l){let u=Array.isArray(s)&&s.length>0?s:r;n(u)}}).catch(()=>{l||n(r)}).finally(()=>{l||a(!1)}),()=>{l=!0}},[t,r]),{elements:o,isLoading:i}}var ne=c(R(),1);function rp(e=""){return(0,ip.default)(e.trim().toLowerCase())}var op=(e,t,r)=>e.singleSelection?r:Array.isArray(t?.value)?t.value.includes(r)?t.value.filter(o=>o!==r):[...t.value,r]:[r];function np(e,t){return`${e}-${t}`}var sp=({selected:e})=>(0,ne.jsx)("span",{className:j("dataviews-filters__search-widget-listitem-multi-selection",{"is-selected":e}),children:e&&(0,ne.jsx)(Bt.Icon,{icon:Rn})}),lp=({selected:e})=>(0,ne.jsx)("span",{className:j("dataviews-filters__search-widget-listitem-single-selection",{"is-selected":e})});function up({view:e,filter:t,onChangeView:r}){let o=(0,ap.useInstanceId)(up,"dataviews-filter-list-box"),[n,i]=(0,Ro.useState)(t.operators?.length===1?void 0:null),a=e.filters?.find(s=>s.field===t.field),l=ai(t,a);return(0,ne.jsx)(Bt.Composite,{virtualFocus:!0,focusLoop:!0,activeId:n,setActiveId:i,role:"listbox",className:"dataviews-filters__search-widget-listbox","aria-label":(0,Tr.sprintf)((0,Tr.__)("List of: %1$s"),t.name),onFocusVisible:()=>{!n&&t.elements.length&&i(np(o,t.elements[0].value))},render:(0,ne.jsx)(Bt.Composite.Typeahead,{}),children:t.elements.map(s=>(0,ne.jsxs)(Bt.Composite.Hover,{render:(0,ne.jsx)(Bt.Composite.Item,{id:np(o,s.value),render:(0,ne.jsx)("div",{"aria-label":s.label,role:"option",className:"dataviews-filters__search-widget-listitem"}),onClick:()=>{let u=a?[...(e.filters??[]).map(f=>f.field===t.field?{...f,operator:a.operator||t.operators[0],value:op(t,a,s.value)}:f)]:[...e.filters??[],{field:t.field,operator:t.operators[0],value:op(t,a,s.value)}];r({...e,page:1,filters:u})}}),children:[t.singleSelection&&(0,ne.jsx)(lp,{selected:l===s.value}),!t.singleSelection&&(0,ne.jsx)(sp,{selected:l.includes(s.value)}),(0,ne.jsx)("span",{className:"dataviews-filters__search-widget-listitem-value",title:s.label,children:s.label})]},s.value))})}function M0({view:e,filter:t,onChangeView:r}){let[o,n]=(0,Ro.useState)(""),i=(0,Ro.useDeferredValue)(o),a=e.filters?.find(u=>u.field===t.field),l=ai(t,a),s=(0,Ro.useMemo)(()=>{let u=rp(i);return t.elements.filter(f=>rp(f.label).includes(u))},[t.elements,i]);return(0,ne.jsxs)(Da,{selectedValue:l,setSelectedValue:u=>{let f=a?[...(e.filters??[]).map(d=>d.field===t.field?{...d,operator:a.operator||t.operators[0],value:u}:d)]:[...e.filters??[],{field:t.field,operator:t.operators[0],value:u}];r({...e,page:1,filters:f})},setValue:n,children:[(0,ne.jsxs)("div",{className:"dataviews-filters__search-widget-filter-combobox__wrapper",children:[(0,ne.jsx)(ka,{render:(0,ne.jsx)(Bt.VisuallyHidden,{children:(0,Tr.__)("Search items")}),children:(0,Tr.__)("Search items")}),(0,ne.jsx)(Ia,{autoSelect:"always",placeholder:(0,Tr.__)("Search"),className:"dataviews-filters__search-widget-filter-combobox__input"}),(0,ne.jsx)("div",{className:"dataviews-filters__search-widget-filter-combobox__icon",children:(0,ne.jsx)(Bt.Icon,{icon:Ol})})]}),(0,ne.jsxs)(ni,{className:"dataviews-filters__search-widget-filter-combobox-list",alwaysVisible:!0,children:[s.map(u=>(0,ne.jsxs)(oi,{resetValueOnSelect:!1,value:u.value,className:"dataviews-filters__search-widget-listitem",hideOnClick:!1,setValueOnClick:!1,focusOnHover:!0,children:[t.singleSelection&&(0,ne.jsx)(lp,{selected:l===u.value}),!t.singleSelection&&(0,ne.jsx)(sp,{selected:l.includes(u.value)}),(0,ne.jsxs)("span",{className:"dataviews-filters__search-widget-listitem-value",title:u.label,children:[(0,ne.jsx)(Va,{className:"dataviews-filters__search-widget-filter-combobox-item-value",value:u.label}),!!u.description&&(0,ne.jsx)("span",{className:"dataviews-filters__search-widget-listitem-description",children:u.description})]})]},u.value)),!s.length&&(0,ne.jsx)("p",{children:(0,Tr.__)("No results found")})]})]})}function cp(e){let{elements:t,isLoading:r}=Xe({elements:e.filter.elements,getElements:e.filter.getElements});if(r)return(0,ne.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,ne.jsx)(Bt.Spinner,{})});if(t.length===0)return(0,ne.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,Tr.__)("No elements found")});let o=t.length>10?M0:up;return(0,ne.jsx)(o,{...e,filter:{...e.filter,elements:t}})}var mp=c(dp(),1),pp=c(Et(),1),Lu=c(z(),1),gp=c(U(),1);var Bu=c(R(),1);function vp({filter:e,view:t,onChangeView:r,fields:o}){let n=t.filters?.find(u=>u.field===e.field),i=ai(e,n),a=(0,Lu.useMemo)(()=>{let u=o.find(f=>f.id===e.field);return u&&{...u,isValid:{},getValue:({item:f})=>f[u.id],setValue:({value:f})=>({[u.id]:f})}},[o,e.field]),l=(0,Lu.useMemo)(()=>(t.filters??[]).reduce((u,f)=>(u[f.field]=f.value,u),{}),[t.filters]),s=(0,pp.useEvent)(u=>{if(!a||!n)return;let f=a.getValue({item:u});(0,mp.default)(f,i)||r({...t,filters:(t.filters??[]).map(d=>d.field===e.field?{...d,operator:n.operator||e.operators[0],value:f===""?void 0:f}:d)})});return!a||!a.Edit||!n?null:(0,Bu.jsx)(gp.Flex,{className:"dataviews-filters__user-input-widget",gap:2.5,direction:"column",children:(0,Bu.jsx)(a.Edit,{hideLabelFromVision:!0,data:l,field:a,operator:n.operator,onChange:s})})}var F0=Math.pow(10,8)*24*60*60*1e3,dO=-F0,Fa=6048e5,hp=864e5;var L0=3600;var bp=L0*24,mO=bp*7,B0=bp*365.2425,H0=B0/12,pO=H0*3,Hu=Symbol.for("constructDateFrom");function Ye(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&Hu in e?e[Hu](t):e instanceof Date?new e.constructor(t):new Date(t)}function de(e,t){return Ye(t||e,e)}function La(e,t,r){let o=de(e,r?.in);return isNaN(t)?Ye(r?.in||e,NaN):(t&&o.setDate(o.getDate()+t),o)}function Ba(e,t,r){let o=de(e,r?.in);if(isNaN(t))return Ye(r?.in||e,NaN);if(!t)return o;let n=o.getDate(),i=Ye(r?.in||e,o.getTime());i.setMonth(o.getMonth()+t+1,0);let a=i.getDate();return n>=a?i:(o.setFullYear(i.getFullYear(),i.getMonth(),n),o)}var z0={};function lo(){return z0}function Ir(e,t){let r=lo(),o=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,n=de(e,t?.in),i=n.getDay(),a=(i=i.getTime()?o+1:r.getTime()>=l.getTime()?o:o-1}function zu(e){let t=de(e),r=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return r.setUTCFullYear(t.getFullYear()),+e-+r}function xp(e,...t){let r=Ye.bind(null,e||t.find(o=>typeof o=="object"));return t.map(r)}function ju(e,t){let r=de(e,t?.in);return r.setHours(0,0,0,0),r}function yp(e,t,r){let[o,n]=xp(r?.in,e,t),i=ju(o),a=ju(n),l=+i-zu(i),s=+a-zu(a);return Math.round((l-s)/hp)}function wp(e,t){let r=Ha(e,t),o=Ye(t?.in||e,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),Vo(o)}function Sp(e,t,r){return La(e,t*7,r)}function _p(e,t,r){return Ba(e,t*12,r)}function Cp(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function pn(e){return!(!Cp(e)&&typeof e!="number"||isNaN(+de(e)))}function Ep(e,t){let r=de(e,t?.in);return r.setDate(1),r.setHours(0,0,0,0),r}function za(e,t){let r=de(e,t?.in);return r.setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r}var j0={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Pp=(e,t,r)=>{let o,n=j0[e];return typeof n=="string"?o=n:t===1?o=n.one:o=n.other.replace("{{count}}",t.toString()),r?.addSuffix?r.comparison&&r.comparison>0?"in "+o:o+" ago":o};function ja(e){return(t={})=>{let r=t.width?String(t.width):e.defaultWidth;return e.formats[r]||e.formats[e.defaultWidth]}}var W0={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Y0={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},G0={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ap={date:ja({formats:W0,defaultWidth:"full"}),time:ja({formats:Y0,defaultWidth:"full"}),dateTime:ja({formats:G0,defaultWidth:"full"})};var U0={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Tp=(e,t,r,o)=>U0[e];function gn(e){return(t,r)=>{let o=r?.context?String(r.context):"standalone",n;if(o==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,l=r?.width?String(r.width):a;n=e.formattingValues[l]||e.formattingValues[a]}else{let a=e.defaultWidth,l=r?.width?String(r.width):e.defaultWidth;n=e.values[l]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return n[i]}}var q0={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},$0={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},K0={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},X0={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Z0={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Q0={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},J0=(e,t)=>{let r=Number(e),o=r%100;if(o>20||o<10)switch(o%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},Ip={ordinalNumber:J0,era:gn({values:q0,defaultWidth:"wide"}),quarter:gn({values:$0,defaultWidth:"wide",argumentCallback:e=>e-1}),month:gn({values:K0,defaultWidth:"wide"}),day:gn({values:X0,defaultWidth:"wide"}),dayPeriod:gn({values:Z0,defaultWidth:"wide",formattingValues:Q0,defaultFormattingWidth:"wide"})};function vn(e){return(t,r={})=>{let o=r.width,n=o&&e.matchPatterns[o]||e.matchPatterns[e.defaultMatchWidth],i=t.match(n);if(!i)return null;let a=i[0],l=o&&e.parsePatterns[o]||e.parsePatterns[e.defaultParseWidth],s=Array.isArray(l)?ty(l,d=>d.test(a)):ey(l,d=>d.test(a)),u;u=e.valueCallback?e.valueCallback(s):s,u=r.valueCallback?r.valueCallback(u):u;let f=t.slice(a.length);return{value:u,rest:f}}}function ey(e,t){for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&t(e[r]))return r}function ty(e,t){for(let r=0;r{let o=t.match(e.matchPattern);if(!o)return null;let n=o[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=r.valueCallback?r.valueCallback(a):a;let l=t.slice(n.length);return{value:a,rest:l}}}var ry=/^(\d+)(th|st|nd|rd)?/i,oy=/\d+/i,ny={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},iy={any:[/^b/i,/^(a|c)/i]},ay={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},sy={any:[/1/i,/2/i,/3/i,/4/i]},ly={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},uy={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},cy={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},fy={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},dy={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},my={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Rp={ordinalNumber:Op({matchPattern:ry,parsePattern:oy,valueCallback:e=>parseInt(e,10)}),era:vn({matchPatterns:ny,defaultMatchWidth:"wide",parsePatterns:iy,defaultParseWidth:"any"}),quarter:vn({matchPatterns:ay,defaultMatchWidth:"wide",parsePatterns:sy,defaultParseWidth:"any",valueCallback:e=>e+1}),month:vn({matchPatterns:ly,defaultMatchWidth:"wide",parsePatterns:uy,defaultParseWidth:"any"}),day:vn({matchPatterns:cy,defaultMatchWidth:"wide",parsePatterns:fy,defaultParseWidth:"any"}),dayPeriod:vn({matchPatterns:dy,defaultMatchWidth:"any",parsePatterns:my,defaultParseWidth:"any"})};var Wu={code:"en-US",formatDistance:Pp,formatLong:Ap,formatRelative:Tp,localize:Ip,match:Rp,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Vp(e,t){let r=de(e,t?.in);return yp(r,za(r))+1}function kp(e,t){let r=de(e,t?.in),o=+Vo(r)-+wp(r);return Math.round(o/Fa)+1}function Wa(e,t){let r=de(e,t?.in),o=r.getFullYear(),n=lo(),i=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,a=Ye(t?.in||e,0);a.setFullYear(o+1,0,i),a.setHours(0,0,0,0);let l=Ir(a,t),s=Ye(t?.in||e,0);s.setFullYear(o,0,i),s.setHours(0,0,0,0);let u=Ir(s,t);return+r>=+l?o+1:+r>=+u?o:o-1}function Np(e,t){let r=lo(),o=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,n=Wa(e,t),i=Ye(t?.in||e,0);return i.setFullYear(n,0,o),i.setHours(0,0,0,0),Ir(i,t)}function Dp(e,t){let r=de(e,t?.in),o=+Ir(r,t)-+Np(r,t);return Math.round(o/Fa)+1}function ae(e,t){let r=e<0?"-":"",o=Math.abs(e).toString().padStart(t,"0");return r+o}var Or={y(e,t){let r=e.getFullYear(),o=r>0?r:1-r;return ae(t==="yy"?o%100:o,t.length)},M(e,t){let r=e.getMonth();return t==="M"?String(r+1):ae(r+1,2)},d(e,t){return ae(e.getDate(),t.length)},a(e,t){let r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return r==="am"?"a.m.":"p.m."}},h(e,t){return ae(e.getHours()%12||12,t.length)},H(e,t){return ae(e.getHours(),t.length)},m(e,t){return ae(e.getMinutes(),t.length)},s(e,t){return ae(e.getSeconds(),t.length)},S(e,t){let r=t.length,o=e.getMilliseconds(),n=Math.trunc(o*Math.pow(10,r-3));return ae(n,t.length)}};var hn={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Yu={G:function(e,t,r){let o=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return r.era(o,{width:"abbreviated"});case"GGGGG":return r.era(o,{width:"narrow"});default:return r.era(o,{width:"wide"})}},y:function(e,t,r){if(t==="yo"){let o=e.getFullYear(),n=o>0?o:1-o;return r.ordinalNumber(n,{unit:"year"})}return Or.y(e,t)},Y:function(e,t,r,o){let n=Wa(e,o),i=n>0?n:1-n;if(t==="YY"){let a=i%100;return ae(a,2)}return t==="Yo"?r.ordinalNumber(i,{unit:"year"}):ae(i,t.length)},R:function(e,t){let r=Ha(e);return ae(r,t.length)},u:function(e,t){let r=e.getFullYear();return ae(r,t.length)},Q:function(e,t,r){let o=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(o);case"QQ":return ae(o,2);case"Qo":return r.ordinalNumber(o,{unit:"quarter"});case"QQQ":return r.quarter(o,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(o,{width:"narrow",context:"formatting"});default:return r.quarter(o,{width:"wide",context:"formatting"})}},q:function(e,t,r){let o=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(o);case"qq":return ae(o,2);case"qo":return r.ordinalNumber(o,{unit:"quarter"});case"qqq":return r.quarter(o,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(o,{width:"narrow",context:"standalone"});default:return r.quarter(o,{width:"wide",context:"standalone"})}},M:function(e,t,r){let o=e.getMonth();switch(t){case"M":case"MM":return Or.M(e,t);case"Mo":return r.ordinalNumber(o+1,{unit:"month"});case"MMM":return r.month(o,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(o,{width:"narrow",context:"formatting"});default:return r.month(o,{width:"wide",context:"formatting"})}},L:function(e,t,r){let o=e.getMonth();switch(t){case"L":return String(o+1);case"LL":return ae(o+1,2);case"Lo":return r.ordinalNumber(o+1,{unit:"month"});case"LLL":return r.month(o,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(o,{width:"narrow",context:"standalone"});default:return r.month(o,{width:"wide",context:"standalone"})}},w:function(e,t,r,o){let n=Dp(e,o);return t==="wo"?r.ordinalNumber(n,{unit:"week"}):ae(n,t.length)},I:function(e,t,r){let o=kp(e);return t==="Io"?r.ordinalNumber(o,{unit:"week"}):ae(o,t.length)},d:function(e,t,r){return t==="do"?r.ordinalNumber(e.getDate(),{unit:"date"}):Or.d(e,t)},D:function(e,t,r){let o=Vp(e);return t==="Do"?r.ordinalNumber(o,{unit:"dayOfYear"}):ae(o,t.length)},E:function(e,t,r){let o=e.getDay();switch(t){case"E":case"EE":case"EEE":return r.day(o,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(o,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},e:function(e,t,r,o){let n=e.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return ae(i,2);case"eo":return r.ordinalNumber(i,{unit:"day"});case"eee":return r.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},c:function(e,t,r,o){let n=e.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return ae(i,t.length);case"co":return r.ordinalNumber(i,{unit:"day"});case"ccc":return r.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(n,{width:"narrow",context:"standalone"});case"cccccc":return r.day(n,{width:"short",context:"standalone"});default:return r.day(n,{width:"wide",context:"standalone"})}},i:function(e,t,r){let o=e.getDay(),n=o===0?7:o;switch(t){case"i":return String(n);case"ii":return ae(n,t.length);case"io":return r.ordinalNumber(n,{unit:"day"});case"iii":return r.day(o,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(o,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},a:function(e,t,r){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(e,t,r){let o=e.getHours(),n;switch(o===12?n=hn.noon:o===0?n=hn.midnight:n=o/12>=1?"pm":"am",t){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(e,t,r){let o=e.getHours(),n;switch(o>=17?n=hn.evening:o>=12?n=hn.afternoon:o>=4?n=hn.morning:n=hn.night,t){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(e,t,r){if(t==="ho"){let o=e.getHours()%12;return o===0&&(o=12),r.ordinalNumber(o,{unit:"hour"})}return Or.h(e,t)},H:function(e,t,r){return t==="Ho"?r.ordinalNumber(e.getHours(),{unit:"hour"}):Or.H(e,t)},K:function(e,t,r){let o=e.getHours()%12;return t==="Ko"?r.ordinalNumber(o,{unit:"hour"}):ae(o,t.length)},k:function(e,t,r){let o=e.getHours();return o===0&&(o=24),t==="ko"?r.ordinalNumber(o,{unit:"hour"}):ae(o,t.length)},m:function(e,t,r){return t==="mo"?r.ordinalNumber(e.getMinutes(),{unit:"minute"}):Or.m(e,t)},s:function(e,t,r){return t==="so"?r.ordinalNumber(e.getSeconds(),{unit:"second"}):Or.s(e,t)},S:function(e,t){return Or.S(e,t)},X:function(e,t,r){let o=e.getTimezoneOffset();if(o===0)return"Z";switch(t){case"X":return Fp(o);case"XXXX":case"XX":return ko(o);default:return ko(o,":")}},x:function(e,t,r){let o=e.getTimezoneOffset();switch(t){case"x":return Fp(o);case"xxxx":case"xx":return ko(o);default:return ko(o,":")}},O:function(e,t,r){let o=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+Mp(o,":");default:return"GMT"+ko(o,":")}},z:function(e,t,r){let o=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+Mp(o,":");default:return"GMT"+ko(o,":")}},t:function(e,t,r){let o=Math.trunc(+e/1e3);return ae(o,t.length)},T:function(e,t,r){return ae(+e,t.length)}};function Mp(e,t=""){let r=e>0?"-":"+",o=Math.abs(e),n=Math.trunc(o/60),i=o%60;return i===0?r+String(n):r+String(n)+t+ae(i,2)}function Fp(e,t){return e%60===0?(e>0?"-":"+")+ae(Math.abs(e)/60,2):ko(e,t)}function ko(e,t=""){let r=e>0?"-":"+",o=Math.abs(e),n=ae(Math.trunc(o/60),2),i=ae(o%60,2);return r+n+t+i}var Lp=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},Bp=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},py=(e,t)=>{let r=e.match(/(P+)(p+)?/)||[],o=r[1],n=r[2];if(!n)return Lp(e,t);let i;switch(o){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",Lp(o,t)).replace("{{time}}",Bp(n,t))},Hp={p:Bp,P:py};var gy=/^D+$/,vy=/^Y+$/,hy=["D","DD","YY","YYYY"];function zp(e){return gy.test(e)}function jp(e){return vy.test(e)}function Wp(e,t,r){let o=by(e,t,r);if(console.warn(o),hy.includes(e))throw new RangeError(o)}function by(e,t,r){let o=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${o} to the input \`${r}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var xy=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,yy=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,wy=/^'([^]*?)'?$/,Sy=/''/g,_y=/[a-zA-Z]/;function Gu(e,t,r){let o=lo(),n=r?.locale??o.locale??Wu,i=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??o.firstWeekContainsDate??o.locale?.options?.firstWeekContainsDate??1,a=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??o.weekStartsOn??o.locale?.options?.weekStartsOn??0,l=de(e,r?.in);if(!pn(l))throw new RangeError("Invalid time value");let s=t.match(yy).map(f=>{let d=f[0];if(d==="p"||d==="P"){let m=Hp[d];return m(f,n.formatLong)}return f}).join("").match(xy).map(f=>{if(f==="''")return{isToken:!1,value:"'"};let d=f[0];if(d==="'")return{isToken:!1,value:Cy(f)};if(Yu[d])return{isToken:!0,value:f};if(d.match(_y))throw new RangeError("Format string contains an unescaped latin alphabet character `"+d+"`");return{isToken:!1,value:f}});n.localize.preprocessor&&(s=n.localize.preprocessor(l,s));let u={firstWeekContainsDate:i,weekStartsOn:a,locale:n};return s.map(f=>{if(!f.isToken)return f.value;let d=f.value;(!r?.useAdditionalWeekYearTokens&&jp(d)||!r?.useAdditionalDayOfYearTokens&&zp(d))&&Wp(d,t,String(e));let m=Yu[d[0]];return m(l,d,n.localize,u)}).join("")}function Cy(e){let t=e.match(wy);return t?t[1].replace(Sy,"'"):e}function No(e,t,r){return La(e,-t,r)}function Ya(e,t,r){return Ba(e,-t,r)}function Yp(e,t,r){return Sp(e,-t,r)}function Ga(e,t,r){return _p(e,-t,r)}var H=c(G(),1),Re=c(z(),1),vt=c(Do(),1);var Uu=c(R(),1),Fe={Name:(0,Uu.jsx)("span",{className:"dataviews-filters__summary-filter-text-name"}),Value:(0,Uu.jsx)("span",{className:"dataviews-filters__summary-filter-text-value"})};function Up(e,t){switch(t){case"days":return No(new Date,e);case"weeks":return Yp(new Date,e);case"months":return Ya(new Date,e);case"years":return Ga(new Date,e);default:return new Date}}var qp={label:(0,H.__)("Is none of"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is none of: %2$s"),e.name,t.map(r=>r.label).join(", ")),Fe),filter:((e,t,r)=>{if(!r?.length)return!0;let o=t.getValue({item:e});return Array.isArray(o)?!r.some(n=>o.includes(n)):typeof o=="string"?!r.includes(o):!1}),selection:"multi"},Ua=[{name:_e,label:(0,H.__)("Includes"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s includes: %2$s"),e.name,t.map(r=>r.label).join(", ")),Fe),filter(e,t,r){if(!r?.length)return!0;let o=t.getValue({item:e});return Array.isArray(o)?r.some(n=>o.includes(n)):typeof o=="string"?r.includes(o):!1},selection:"multi"},{name:Ce,...qp},{name:it,label:(0,H.__)("Includes all"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s includes all: %2$s"),e.name,t.map(r=>r.label).join(", ")),Fe),filter(e,t,r){return r?.length?r.every(o=>t.getValue({item:e})?.includes(o)):!0},selection:"multi"},{name:Ue,...qp},{name:ft,label:(0,H.__)("Between (inc)"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s between (inc): %2$s and %3$s"),e.name,t[0].label[0],t[0].label[1]),Fe),filter(e,t,r){if(!Array.isArray(r)||r.length!==2||r[0]===void 0||r[1]===void 0)return!0;let o=t.getValue({item:e});return typeof o=="number"||o instanceof Date||typeof o=="string"?o>=r[0]&&o<=r[1]:!1},selection:"custom"},{name:dt,label:(0,H.__)("In the past"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is in the past: %2$s"),e.name,`${t[0].value.value} ${t[0].value.unit}`),Fe),filter(e,t,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Up(r.value,r.unit),n=(0,vt.getDate)(t.getValue({item:e}));return n>=o&&n<=new Date},selection:"custom"},{name:xt,label:(0,H.__)("Over"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is over: %2$s"),e.name,`${t[0].value.value} ${t[0].value.unit}`),Fe),filter(e,t,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Up(r.value,r.unit);return(0,vt.getDate)(t.getValue({item:e}))(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){return r===t.getValue({item:e})||r===void 0},selection:"single"},{name:Ae,label:(0,H.__)("Is not"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is not: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){return r!==t.getValue({item:e})},selection:"single"},{name:Hr,label:(0,H.__)("Less than"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is less than: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){return r===void 0?!0:t.getValue({item:e})(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is greater than: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){return r===void 0?!0:t.getValue({item:e})>r},selection:"single"},{name:jr,label:(0,H.__)("Less than or equal"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is less than or equal to: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){return r===void 0?!0:t.getValue({item:e})<=r},selection:"single"},{name:Wr,label:(0,H.__)("Greater than or equal"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is greater than or equal to: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){return r===void 0?!0:t.getValue({item:e})>=r},selection:"single"},{name:Yr,label:(0,H.__)("Before"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is before: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=(0,vt.getDate)(r);return(0,vt.getDate)(t.getValue({item:e}))(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is after: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=(0,vt.getDate)(r);return(0,vt.getDate)(t.getValue({item:e}))>o},selection:"single"},{name:Ur,label:(0,H.__)("Before (inc)"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is on or before: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=(0,vt.getDate)(r);return(0,vt.getDate)(t.getValue({item:e}))<=o},selection:"single"},{name:qr,label:(0,H.__)("After (inc)"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is on or after: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=(0,vt.getDate)(r);return(0,vt.getDate)(t.getValue({item:e}))>=o},selection:"single"},{name:$t,label:(0,H.__)("Contains"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s contains: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=t.getValue({item:e});return typeof o=="string"&&r&&o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:Kt,label:(0,H.__)("Doesn't contain"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s doesn't contain: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=t.getValue({item:e});return typeof o=="string"&&r&&!o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:Xt,label:(0,H.__)("Starts with"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s starts with: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=t.getValue({item:e});return typeof o=="string"&&r&&o.toLowerCase().startsWith(String(r).toLowerCase())},selection:"single"},{name:$r,label:(0,H.__)("On"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=(0,vt.getDate)(r),n=(0,vt.getDate)(t.getValue({item:e}));return o.getTime()===n.getTime()},selection:"single"},{name:Kr,label:(0,H.__)("Not on"),filterText:(e,t)=>(0,Re.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is not: %2$s"),e.name,t[0].label),Fe),filter(e,t,r){if(r===void 0)return!0;let o=(0,vt.getDate)(r),n=(0,vt.getDate)(t.getValue({item:e}));return o.getTime()!==n.getTime()},selection:"single"}],Mo=e=>Ua.find(t=>t.name===e),$p=()=>Ua.map(e=>e.name),Kp=e=>Ua.filter(t=>t.selection==="single").some(t=>t.name===e),Xp=e=>Ua.some(t=>t.name===e);var tt=c(R(),1),Ey="Enter",Py=" ",Ay=({activeElements:e,filterInView:t,filter:r})=>{if(e===void 0||e.length===0)return r.name;let o=Mo(t?.operator);return o!==void 0?o.filterText(r,e):(0,Rr.sprintf)((0,Rr.__)("Unknown status for %1$s"),r.name)};function Ty({filter:e,view:t,onChangeView:r}){let o=e.operators?.map(a=>({value:a,label:Mo(a)?.label||a})),n=t.filters?.find(a=>a.field===e.field),i=n?.operator||e.operators[0];return o.length>1&&(0,tt.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",className:"dataviews-filters__summary-operators-container",align:"center",children:[(0,tt.jsx)(Wt.FlexItem,{className:"dataviews-filters__summary-operators-filter-name",children:e.name}),(0,tt.jsx)(Wt.SelectControl,{className:"dataviews-filters__summary-operators-filter-select",label:(0,Rr.__)("Conditions"),value:i,options:o,onChange:a=>{let l=a,s=n?.operator,u=n?[...(t.filters??[]).map(f=>{if(f.field===e.field){let d=Mo(s)?.selection,m=Mo(l)?.selection,p=d!==m||[d,m].includes("custom");return{...f,value:p?void 0:f.value,operator:l}}return f})]:[...t.filters??[],{field:e.field,operator:l,value:void 0}];r({...t,page:1,filters:u})},size:"small",variant:"minimal",hideLabelFromVision:!0})]})}function Zp({addFilterRef:e,openedFilter:t,fields:r,...o}){let n=(0,qa.useRef)(null),{filter:i,view:a,onChangeView:l}=o,s=a.filters?.find(b=>b.field===i.field),u=[],f=(0,qa.useMemo)(()=>{let b=r.find(y=>y.id===i.field);return b&&{...b,getValue:({item:y})=>y[b.id]}},[r,i.field]),{elements:d}=Xe({elements:i.elements,getElements:i.getElements});if(d.length>0)u=d.filter(b=>i.singleSelection?b.value===s?.value:s?.value?.includes(b.value));else if(Array.isArray(s?.value)){let b=s.value.map(y=>f?.getValueFormatted({item:{[f.id]:y},field:f})||String(y));u=[{value:s.value,label:b}]}else if(typeof s?.value=="object")u=[{value:s.value,label:s.value}];else if(s?.value!==void 0){let b=f!==void 0?f.getValueFormatted({item:{[f.id]:s.value},field:f}):String(s.value);u=[{value:s.value,label:b}]}let m=i.isPrimary,p=s?.isLocked,g=!p&&s?.value!==void 0,S=!p&&(!m||g);return(0,tt.jsx)(Wt.Dropdown,{defaultOpen:t===i.field,contentClassName:"dataviews-filters__summary-popover",popoverProps:{placement:"bottom-start",role:"dialog"},onClose:()=>{n.current?.focus()},renderToggle:({isOpen:b,onToggle:y})=>(0,tt.jsxs)("div",{className:"dataviews-filters__summary-chip-container",children:[(0,tt.jsx)(Wt.Tooltip,{text:(0,Rr.sprintf)((0,Rr.__)("Filter by: %1$s"),i.name.toLowerCase()),placement:"top",children:(0,tt.jsx)("div",{className:j("dataviews-filters__summary-chip",{"has-reset":S,"has-values":g,"is-not-clickable":p}),role:"button",tabIndex:p?-1:0,onClick:()=>{p||y()},onKeyDown:_=>{!p&&[Ey,Py].includes(_.key)&&(y(),_.preventDefault())},"aria-disabled":p,"aria-pressed":b,"aria-expanded":b,ref:n,children:(0,tt.jsx)(Ay,{activeElements:u,filterInView:s,filter:i})})}),S&&(0,tt.jsx)(Wt.Tooltip,{text:m?(0,Rr.__)("Reset"):(0,Rr.__)("Remove"),placement:"top",children:(0,tt.jsx)("button",{className:j("dataviews-filters__summary-chip-remove",{"has-values":g}),onClick:()=>{l({...a,page:1,filters:a.filters?.filter(_=>_.field!==i.field)}),m?n.current?.focus():e.current?.focus()},children:(0,tt.jsx)(Wt.Icon,{icon:Vn})})})]}),renderContent:()=>(0,tt.jsxs)(F,{direction:"column",justify:"flex-start",children:[(0,tt.jsx)(Ty,{...o}),o.filter.hasElements?(0,tt.jsx)(cp,{...o,filter:{...o.filter,elements:d}}):(0,tt.jsx)(vp,{...o,fields:r})]})})}var $a=c(U(),1),Qp=c(G(),1),Jp=c(z(),1);var Vr=c(R(),1),{Menu:li}=K($a.privateApis);function qu({filters:e,view:t,onChangeView:r,setOpenedFilter:o,triggerProps:n}){let i=e.filter(a=>!a.isVisible);return(0,Vr.jsxs)(li,{children:[(0,Vr.jsx)(li.TriggerButton,{...n}),(0,Vr.jsx)(li.Popover,{children:i.map(a=>(0,Vr.jsx)(li.Item,{onClick:()=>{o(a.field),r({...t,page:1,filters:[...t.filters||[],{field:a.field,value:void 0,operator:a.operators[0]}]})},children:(0,Vr.jsx)(li.ItemLabel,{children:a.name})},a.field))})]})}function Iy({filters:e,view:t,onChangeView:r,setOpenedFilter:o},n){if(!e.length||e.every(({isPrimary:a})=>a))return null;let i=e.filter(a=>!a.isVisible);return(0,Vr.jsx)(qu,{triggerProps:{render:(0,Vr.jsx)($a.Button,{accessibleWhenDisabled:!0,size:"compact",className:"dataviews-filters-button",variant:"tertiary",disabled:!i.length,ref:n}),children:(0,Qp.__)("Add filter")},filters:e,view:t,onChangeView:r,setOpenedFilter:o})}var eg=(0,Jp.forwardRef)(Iy);var tg=c(U(),1),rg=c(G(),1),og=c(R(),1);function ng({filters:e,view:t,onChangeView:r}){let o=i=>e.some(a=>a.field===i&&a.isPrimary),n=!t.search&&!t.filters?.some(i=>!i.isLocked&&(i.value!==void 0||!o(i.field)));return(0,og.jsx)(tg.Button,{disabled:n,accessibleWhenDisabled:!0,size:"compact",variant:"tertiary",className:"dataviews-filters__reset-button",onClick:()=>{r({...t,page:1,search:"",filters:t.filters?.filter(i=>!!i.isLocked)||[]})},children:(0,rg.__)("Reset")})}var ig=c(z(),1);function Oy(e,t){return(0,ig.useMemo)(()=>{let r=[];return e.forEach(o=>{if(o.filterBy===!1||!o.hasElements&&!o.Edit)return;let n=o.filterBy.operators,i=!!o.filterBy?.isPrimary,a=t.filters?.some(l=>l.field===o.id&&!!l.isLocked)??!1;r.push({field:o.id,name:o.label,elements:o.elements,getElements:o.getElements,hasElements:o.hasElements,singleSelection:n.some(l=>Kp(l)),operators:n,isVisible:a||i||!!t.filters?.some(l=>l.field===o.id&&Xp(l.operator)),isPrimary:i,isLocked:a})}),r.sort((o,n)=>o.isLocked&&!n.isLocked?-1:!o.isLocked&&n.isLocked?1:o.isPrimary&&!n.isPrimary?-1:!o.isPrimary&&n.isPrimary?1:o.name.localeCompare(n.name)),r},[e,t])}var ui=Oy;var ci=c(R(),1);function Ry({className:e}){let{fields:t,view:r,onChangeView:o,openedFilter:n,setOpenedFilter:i}=(0,bn.useContext)(Y),a=(0,bn.useRef)(null),l=ui(t,r),s=(0,ci.jsx)(eg,{filters:l,view:r,onChangeView:o,ref:a,setOpenedFilter:i},"add-filter"),u=l.filter(d=>d.isVisible);if(u.length===0)return null;let f=[...u.map(d=>(0,ci.jsx)(Zp,{filter:d,view:r,fields:t,onChangeView:o,addFilterRef:a,openedFilter:n},d.field)),s];return f.push((0,ci.jsx)(ng,{filters:l,view:r,onChangeView:o},"reset-filters")),(0,ci.jsx)(F,{direction:"row",justify:"flex-start",gap:"sm",style:{width:"fit-content"},wrap:"wrap",className:e,children:f})}var fi=(0,bn.memo)(Ry);var uo=c(z(),1),ag=c(U(),1);var Ka=c(G(),1);var ar=c(R(),1);function Vy(){let{filters:e,view:t,onChangeView:r,setOpenedFilter:o,isShowingFilter:n,setIsShowingFilter:i}=(0,uo.useContext)(Y),a=(0,uo.useRef)(null),l=(0,uo.useCallback)(p=>{r(p),i(!0)},[r,i]);if(e.length===0)return null;let s=e.some(p=>p.isVisible),u={label:(0,Ka.__)("Add filter"),"aria-expanded":!1,isPressed:!1},f={label:(0,Ka._x)("Filter","verb"),"aria-expanded":n,isPressed:n,onClick:()=>{n||o(null),i(!n)}},d=e.some(p=>p.isPrimary||p.isLocked),m=(0,ar.jsx)(ag.Button,{ref:a,className:"dataviews-filters__visibility-toggle",size:"compact",icon:kn,disabled:d,accessibleWhenDisabled:!0,...s?f:u});return(0,ar.jsx)("div",{className:"dataviews-filters__container-visibility-toggle",children:s?(0,ar.jsx)(ky,{buttonRef:a,filtersCount:t.filters?.length,children:m}):(0,ar.jsx)(qu,{filters:e,view:t,onChangeView:l,setOpenedFilter:o,triggerProps:{render:m}})})}function ky({buttonRef:e,filtersCount:t,children:r}){return(0,uo.useEffect)(()=>()=>{e.current?.focus()},[e]),(0,ar.jsxs)(ar.Fragment,{children:[r,!!t&&(0,ar.jsx)("span",{className:"dataviews-filters-toggle__count",children:t})]})}var Xa=Vy;var sg=c(z(),1);var lg=c(R(),1);function Ny(e){let{isShowingFilter:t}=(0,sg.useContext)(Y);return t?(0,lg.jsx)(fi,{...e}):null}var Za=Ny;var ug=c(z(),1),cg=c(G(),1);var $u=c(R(),1);function Ku({className:e}){let{actions:t=[],data:r,fields:o,getItemId:n,getItemLevel:i,hasInitiallyLoaded:a,isLoading:l,view:s,onChangeView:u,selection:f,onChangeSelection:d,setOpenedFilter:m,onClickItem:p,isItemClickable:g,renderItemLink:S,defaultLayouts:b,empty:y=(0,$u.jsx)("p",{children:(0,cg.__)("No results")})}=(0,ug.useContext)(Y);if(!a)return null;let _=to.find(A=>A.type===s.type&&b[A.type])?.component;return(0,$u.jsx)(_,{className:e,actions:t,data:r,fields:o,getItemId:n,getItemLevel:i,isLoading:l,onChangeView:u,onChangeSelection:d,selection:f,setOpenedFilter:m,onClickItem:p,renderItemLink:S,isItemClickable:g,view:s,empty:y})}var fg=c(z(),1);var xn=c(R(),1),Dy=[];function Xu(){let{view:e,paginationInfo:{totalItems:t=0,totalPages:r},data:o,actions:n=Dy,isLoading:i,hasInitiallyLoaded:a,hasInfiniteScrollHandler:l}=(0,fg.useContext)(Y),s=!!i&&a&&!l&&!!o?.length,u=Qt(!!s),f=Ko(n,o)&&[Yo,Zi].includes(e.type);return!s&&(!t||!r||r<=1&&!f)?null:(!!t||s)&&(0,xn.jsx)("div",{className:"dataviews-footer",inert:s?"true":void 0,children:(0,xn.jsxs)(F,{direction:"row",justify:"end",align:"center",className:j("dataviews-footer__content",{"is-refreshing":u}),gap:"sm",children:[f&&(0,xn.jsx)(ta,{}),(0,xn.jsx)(nd,{})]})})}var dg=c(G(),1),Yt=c(z(),1),mg=c(U(),1),pg=c(Et(),1);var gg=c(R(),1),My=(0,Yt.memo)(function({label:t}){let{view:r,onChangeView:o}=(0,Yt.useContext)(Y),[n,i,a]=(0,pg.useDebouncedInput)(r.search);(0,Yt.useEffect)(()=>{i(r.search??"")},[r.search,i]);let l=(0,Yt.useRef)(o),s=(0,Yt.useRef)(r);(0,Yt.useEffect)(()=>{l.current=o,s.current=r},[o,r]),(0,Yt.useEffect)(()=>{a!==s.current?.search&&l.current({...s.current,page:1,search:a})},[a]);let u=t||(0,dg.__)("Search");return(0,gg.jsx)(mg.SearchControl,{className:"dataviews-search",onChange:i,value:n,label:u,placeholder:u,size:"compact"})}),Zu=My;var Le=c(U(),1),kr=c(G(),1),Gt=c(z(),1);var Ju=c(hg(),1),Sg=c(Et(),1);var bg=c(U(),1),Qu=c(G(),1),xg=c(z(),1);var yg=c(R(),1);function wg(){let e=(0,xg.useContext)(Y),{view:t,onChangeView:r}=e,o=t.infiniteScrollEnabled??!1;return e.hasInfiniteScrollHandler?(0,yg.jsx)(bg.ToggleControl,{label:(0,Qu.__)("Enable infinite scroll"),help:(0,Qu.__)("Automatically load more content as you scroll, instead of showing pagination links."),checked:o,onChange:n=>{r({...t,infiniteScrollEnabled:n})}}):null}var re=c(R(),1),{Menu:di}=K(Le.privateApis),Fy={className:"dataviews-config__popover",placement:"bottom-end",offset:9};function ec(){let{view:e,onChangeView:t,defaultLayouts:r}=(0,Gt.useContext)(Y),o=Object.keys(r);if(o.length<=1)return null;let n=to.find(i=>e.type===i.type);return(0,re.jsxs)(di,{children:[(0,re.jsx)(di.TriggerButton,{render:(0,re.jsx)(Le.Button,{size:"compact",icon:n?.icon,label:(0,kr.__)("Layout")})}),(0,re.jsx)(di.Popover,{children:o.map(i=>{let a=to.find(l=>l.type===i);return a?(0,re.jsx)(di.RadioItem,{value:i,name:"view-actions-available-view",checked:i===e.type,hideOnClick:!0,onChange:l=>{switch(l.target.value){case"list":case"grid":case"table":case"pickerGrid":case"pickerTable":case"activity":let s={...e};return"layout"in s&&delete s.layout,t({...s,type:l.target.value,...r[l.target.value]})}(0,Ju.default)("Invalid dataview")},children:(0,re.jsx)(di.ItemLabel,{children:a.label})},i):null})})]})}function Ly(){let{view:e,fields:t,onChangeView:r}=(0,Gt.useContext)(Y),o=(0,Gt.useMemo)(()=>t.filter(i=>i.enableSorting!==!1).map(i=>({label:i.label,value:i.id})),[t]);return(0,re.jsx)(Le.SelectControl,{__next40pxDefaultSize:!0,label:(0,kr.__)("Sort by"),value:e.sort?.field,options:o,onChange:n=>{r({...e,sort:{direction:e?.sort?.direction||"desc",field:n},showLevels:!1})}})}function By(){let{view:e,fields:t,onChangeView:r}=(0,Gt.useContext)(Y);if(t.filter(i=>i.enableSorting!==!1).length===0)return null;let n=e.sort?.direction;return!n&&e.sort?.field&&(n="desc"),(0,re.jsx)(Le.__experimentalToggleGroupControl,{className:"dataviews-view-config__sort-direction",__next40pxDefaultSize:!0,isBlock:!0,label:(0,kr.__)("Order"),value:n,onChange:i=>{if(i==="asc"||i==="desc"){r({...e,sort:{direction:i,field:e.sort?.field||t.find(a=>a.enableSorting!==!1)?.id||""},showLevels:!1});return}(0,Ju.default)("Invalid direction")},children:$i.map(i=>(0,re.jsx)(Le.__experimentalToggleGroupControlOptionIcon,{value:i,icon:mf[i],label:Xi[i]},i))})}function Hy(){let{view:e,config:t,onChangeView:r}=(0,Gt.useContext)(Y),{infiniteScrollEnabled:o}=e;return!t||!t.perPageSizes||t.perPageSizes.length<2||t.perPageSizes.length>6||o?null:(0,re.jsx)(Le.__experimentalToggleGroupControl,{__next40pxDefaultSize:!0,isBlock:!0,label:(0,kr.__)("Items per page"),value:e.perPage||10,disabled:!e?.sort?.field,onChange:n=>{let i=typeof n=="number"||n===void 0?n:parseInt(n,10);r({...e,perPage:i,page:1})},children:t.perPageSizes.map(n=>(0,re.jsx)(Le.__experimentalToggleGroupControlOption,{value:n,label:n.toString()},n))})}function zy(){let{onReset:e}=(0,Gt.useContext)(Y);return e===void 0?null:(0,re.jsx)(Le.Button,{variant:"tertiary",size:"compact",disabled:e===!1,accessibleWhenDisabled:!0,className:"dataviews-view-config__reset-button",onClick:()=>{typeof e=="function"&&e()},children:(0,kr.__)("Reset view")})}function tc(){let{view:e,onReset:t}=(0,Gt.useContext)(Y),r=(0,Sg.useInstanceId)(_g,"dataviews-view-config-dropdown"),o=to.find(i=>i.type===e.type),n=typeof t=="function";return(0,re.jsx)(Le.Dropdown,{expandOnMobile:!0,popoverProps:{...Fy,id:r},renderToggle:({onToggle:i,isOpen:a})=>(0,re.jsxs)("div",{className:"dataviews-view-config__toggle-wrapper",children:[(0,re.jsx)(Le.Button,{size:"compact",icon:cl,label:(0,kr._x)("View options","View is used as a noun"),onClick:i,"aria-expanded":a?"true":"false","aria-controls":r}),n&&(0,re.jsx)("span",{className:"dataviews-view-config__modified-indicator"})]}),renderContent:()=>(0,re.jsx)(Le.__experimentalDropdownContentWrapper,{paddingSize:"medium",className:"dataviews-config__popover-content-wrapper",children:(0,re.jsxs)(F,{direction:"column",className:"dataviews-view-config",gap:"xl",children:[(0,re.jsxs)(F,{direction:"row",justify:"space-between",align:"center",className:"dataviews-view-config__header",children:[(0,re.jsx)(Le.__experimentalHeading,{level:2,className:"dataviews-settings-section__title",children:(0,kr.__)("Appearance")}),(0,re.jsx)(zy,{})]}),(0,re.jsxs)(F,{direction:"column",gap:"lg",children:[(0,re.jsxs)(F,{direction:"row",gap:"sm",className:"dataviews-view-config__sort-controls",children:[(0,re.jsx)(Ly,{}),(0,re.jsx)(By,{})]}),!!o?.viewConfigOptions&&(0,re.jsx)(o.viewConfigOptions,{}),(0,re.jsx)(wg,{}),(0,re.jsx)(Hy,{}),(0,re.jsx)(na,{})]})]})})})}function _g(){return(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(ec,{}),(0,re.jsx)(tc,{})]})}var jy=(0,Gt.memo)(_g),Cg=jy;var Eg=c(U(),1),Pg=c(z(),1);function ge(e,t){let r;return e?.required&&t?.required?r=t?.required?.message?t.required:void 0:e?.pattern&&t?.pattern?r=t.pattern:e?.min&&t?.min?r=t.min:e?.max&&t?.max?r=t.max:e?.minLength&&t?.minLength?r=t.minLength:e?.maxLength&&t?.maxLength?r=t.maxLength:e?.elements&&t?.elements?r=t.elements:t?.custom&&(r=t.custom),r}var Ag=c(R(),1),{ValidatedCheckboxControl:Wy}=K(Eg.privateApis);function Tg({field:e,onChange:t,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,label:s,description:u,isValid:f}=e,d=(0,Pg.useCallback)(()=>{t(l({item:r,value:!a({item:r})}))},[r,a,t,l]);return(0,Ag.jsx)(Wy,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ge(f,i),hidden:o,label:s,help:u,checked:a({item:r}),onChange:d})}var Qa=c(U(),1),Ig=c(z(),1);var rc=c(R(),1),{ValidatedComboboxControl:Yy}=K(Qa.privateApis);function Ja({data:e,field:t,onChange:r,hideLabelFromVision:o,validity:n}){let{label:i,description:a,placeholder:l,getValue:s,setValue:u,isValid:f}=t,d=s({item:e})??"",m=(0,Ig.useCallback)(S=>r(u({item:e,value:S??""})),[e,r,u]),{elements:p,isLoading:g}=Xe({elements:t.elements,getElements:t.getElements});return g?(0,rc.jsx)(Qa.Spinner,{}):(0,rc.jsx)(Yy,{required:!!t.isValid?.required,customValidity:ge(f,n),label:i,value:d,help:a,placeholder:l,options:p,onChange:m,hideLabelFromVision:o,allowReset:!0,expandOnFocus:!0})}var os=c(U(),1),Ht=c(z(),1),rs=c(G(),1),Vt=c(Do(),1);var wn=c(U(),1),oc=c(z(),1),sr=c(G(),1);var yn=c(R(),1),Gy={[dt]:[{value:"days",label:(0,sr.__)("Days")},{value:"weeks",label:(0,sr.__)("Weeks")},{value:"months",label:(0,sr.__)("Months")},{value:"years",label:(0,sr.__)("Years")}],[xt]:[{value:"days",label:(0,sr.__)("Days ago")},{value:"weeks",label:(0,sr.__)("Weeks ago")},{value:"months",label:(0,sr.__)("Months ago")},{value:"years",label:(0,sr.__)("Years ago")}]};function es({className:e,data:t,field:r,onChange:o,hideLabelFromVision:n,operator:i}){let a=Gy[i===dt?"inThePast":"over"],{id:l,label:s,getValue:u,setValue:f}=r,d=u({item:t}),{value:m="",unit:p=a[0].value}=d&&typeof d=="object"?d:{},g=(0,oc.useCallback)(b=>o(f({item:t,value:{value:Number(b),unit:p}})),[o,f,t,p]),S=(0,oc.useCallback)(b=>o(f({item:t,value:{value:m,unit:b}})),[o,f,t,m]);return(0,yn.jsx)(wn.BaseControl,{id:l,className:j(e,"dataviews-controls__relative-date"),label:s,hideLabelFromVision:n,children:(0,yn.jsxs)(F,{direction:"row",gap:"sm",children:[(0,yn.jsx)(wn.__experimentalNumberControl,{__next40pxDefaultSize:!0,className:"dataviews-controls__relative-date-number",spinControls:"none",min:1,step:1,value:m,onChange:g}),(0,yn.jsx)(wn.SelectControl,{className:"dataviews-controls__relative-date-unit",__next40pxDefaultSize:!0,label:(0,sr.__)("Unit"),value:p,options:a,onChange:S,hideLabelFromVision:!0})]})})}var Og=c(Do(),1);function ts(e){if(!e)return null;let t=(0,Og.getDate)(e);return t&&pn(t)?t:null}var co=c(R(),1),{DateCalendar:Uy,ValidatedInputControl:qy}=K(os.privateApis),$y=e=>e?(0,Vt.dateI18n)("Y-m-d\\TH:i",(0,Vt.getDate)(e)):"";function Ky({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,description:s,setValue:u,getValue:f,isValid:d}=t,m=f({item:e}),p=typeof m=="string"?m:void 0,[g,S]=(0,Ht.useState)(()=>ts(p)||new Date),b=(0,Ht.useRef)(null),y=(0,Ht.useRef)(void 0),_=(0,Ht.useRef)(null),A=(0,Ht.useCallback)(k=>r(u({item:e,value:k})),[e,r,u]);(0,Ht.useEffect)(()=>()=>{y.current&&clearTimeout(y.current)},[]);let V=(0,Ht.useCallback)(k=>{let h;if(k){let E=(0,Vt.dateI18n)("Y-m-d",k),P;p?P=(0,Vt.dateI18n)("H:i",(0,Vt.getDate)(p)):P=(0,Vt.dateI18n)("H:i",k),h=(0,Vt.getDate)(`${E}T${P}`).toISOString(),A(h),y.current&&clearTimeout(y.current)}else A(void 0);_.current=b.current&&b.current.ownerDocument.activeElement,y.current=setTimeout(()=>{b.current&&(b.current.focus(),b.current.blur(),A(h),_.current&&_.current instanceof HTMLElement&&_.current.focus())},0)},[A,p]),I=(0,Ht.useCallback)(k=>{if(k){let h=(0,Vt.getDate)(k);A(h.toISOString());let E=ts(h.toISOString());E&&S(E)}else A(void 0)},[A]),{format:M}=t,N=M.weekStartsOn??(0,Vt.getSettings)().l10n.startOfWeek,{timezone:{string:C}}=(0,Vt.getSettings)(),T=l;return d?.required&&!n&&!o?T=`${l} (${(0,rs.__)("Required")})`:!d?.required&&n&&!o&&(T=`${l} (${(0,rs.__)("Optional")})`),(0,co.jsx)(os.BaseControl,{id:a,label:T,help:s,hideLabelFromVision:o,children:(0,co.jsxs)(F,{direction:"column",gap:"lg",children:[(0,co.jsx)(Uy,{style:{width:"100%"},selected:p&&ts(p)||void 0,onSelect:V,month:g,onMonthChange:S,timeZone:C||void 0,weekStartsOn:N}),(0,co.jsx)(qy,{ref:b,__next40pxDefaultSize:!0,required:!!d?.required,customValidity:ge(d,i),type:"datetime-local",label:(0,rs.__)("Date time"),hideLabelFromVision:!0,value:$y(p),onChange:I})]})})}function Rg({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===dt||i===xt?(0,co.jsx)(es,{className:"dataviews-controls__datetime",data:e,field:t,onChange:r,hideLabelFromVision:o,operator:i}):(0,co.jsx)(Ky,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var ut=c(U(),1),ce=c(z(),1),Ge=c(G(),1),lt=c(Do(),1);var ve=c(R(),1),{DateCalendar:Xy,DateRangeCalendar:Zy}=K(ut.privateApis),Qy=[{id:"today",label:(0,Ge.__)("Today"),getValue:()=>(0,lt.getDate)(null)},{id:"yesterday",label:(0,Ge.__)("Yesterday"),getValue:()=>{let e=(0,lt.getDate)(null);return No(e,1)}},{id:"past-week",label:(0,Ge.__)("Past week"),getValue:()=>{let e=(0,lt.getDate)(null);return No(e,7)}},{id:"past-month",label:(0,Ge.__)("Past month"),getValue:()=>{let e=(0,lt.getDate)(null);return Ya(e,1)}}],Jy=[{id:"last-7-days",label:(0,Ge.__)("Last 7 days"),getValue:()=>{let e=(0,lt.getDate)(null);return[No(e,7),e]}},{id:"last-30-days",label:(0,Ge.__)("Last 30 days"),getValue:()=>{let e=(0,lt.getDate)(null);return[No(e,30),e]}},{id:"month-to-date",label:(0,Ge.__)("Month to date"),getValue:()=>{let e=(0,lt.getDate)(null);return[Ep(e),e]}},{id:"last-year",label:(0,Ge.__)("Last year"),getValue:()=>{let e=(0,lt.getDate)(null);return[Ga(e,1),e]}},{id:"year-to-date",label:(0,Ge.__)("Year to date"),getValue:()=>{let e=(0,lt.getDate)(null);return[za(e),e]}}],Sn=e=>{if(!e)return null;let t=(0,lt.getDate)(e);return t&&pn(t)?t:null},nc=e=>e?typeof e=="string"?e:Gu(e,"yyyy-MM-dd"):"";function Vg({field:e,validity:t,inputRefs:r,isTouched:o,setIsTouched:n,children:i}){let{isValid:a}=e,[l,s]=(0,ce.useState)(void 0),u=(0,ce.useCallback)(()=>{let d=Array.isArray(r)?r:[r];for(let m of d){let p=m.current;if(p&&!p.validity.valid){s({type:"invalid",message:p.validationMessage});return}}s(void 0)},[r]);return(0,ce.useEffect)(()=>{let d=Array.isArray(r)?r:[r],m=t?ge(a,t):void 0;for(let p of d){let g=p.current;g&&g.setCustomValidity(m?.type==="invalid"&&m.message?m.message:"")}},[r,a,t]),(0,ce.useEffect)(()=>{let d=Array.isArray(r)?r:[r],m=p=>{p.preventDefault(),n(!0)};for(let p of d)p.current?.addEventListener("invalid",m);return()=>{for(let p of d)p.current?.removeEventListener("invalid",m)}},[r,n]),(0,ce.useEffect)(()=>{if(!o)return;let d=t?ge(a,t):void 0;d?s(d):u()},[o,a,t,u]),(0,ve.jsxs)("div",{onBlur:d=>{o||(!d.relatedTarget||!d.currentTarget.contains(d.relatedTarget))&&n(!0)},children:[i,(0,ve.jsx)("div",{"aria-live":"polite",children:l&&(0,ve.jsxs)("p",{className:j("components-validated-control__indicator",l.type==="invalid"?"is-invalid":void 0),children:[(0,ve.jsx)(ut.Icon,{className:"components-validated-control__indicator-icon",icon:pl,size:16,fill:"currentColor"}),l.message]})})]})}function ew({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,setValue:s,getValue:u,isValid:f,format:d}=t,[m,p]=(0,ce.useState)(null),g=d.weekStartsOn??(0,lt.getSettings)().l10n.startOfWeek,S=u({item:e}),b=typeof S=="string"?S:void 0,[y,_]=(0,ce.useState)(()=>Sn(b)||new Date),[A,V]=(0,ce.useState)(!1),I=(0,ce.useRef)(null),M=(0,ce.useCallback)(E=>r(s({item:e,value:E})),[e,r,s]),N=(0,ce.useCallback)(E=>{let P=E?Gu(E,"yyyy-MM-dd"):void 0;M(P),p(null),V(!0)},[M]),C=(0,ce.useCallback)(E=>{let P=E.getValue(),w=nc(P);_(P),M(w),p(E.id),V(!0)},[M]),T=(0,ce.useCallback)(E=>{if(M(E),E){let P=Sn(E);P&&_(P)}p(null),V(!0)},[M]),{timezone:{string:k}}=(0,lt.getSettings)(),h=l;return f?.required&&!n?h=`${l} (${(0,Ge.__)("Required")})`:!f?.required&&n&&(h=`${l} (${(0,Ge.__)("Optional")})`),(0,ve.jsx)(Vg,{field:t,validity:i,inputRefs:I,isTouched:A,setIsTouched:V,children:(0,ve.jsx)(ut.BaseControl,{id:a,className:"dataviews-controls__date",label:h,hideLabelFromVision:o,children:(0,ve.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ve.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[Qy.map(E=>{let P=m===E.id;return(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:P,size:"small",onClick:()=>C(E),children:E.label},E.id)}),(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!m,size:"small",disabled:!!m,accessibleWhenDisabled:!1,children:(0,Ge.__)("Custom")})]}),(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:I,type:"date",label:(0,Ge.__)("Date"),hideLabelFromVision:!0,value:b,onChange:T,required:!!t.isValid?.required}),(0,ve.jsx)(Xy,{style:{width:"100%"},selected:b&&Sn(b)||void 0,onSelect:N,month:y,onMonthChange:_,timeZone:k||void 0,weekStartsOn:g})]})})})}function tw({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,getValue:s,setValue:u,format:f}=t,d,m=s({item:e});Array.isArray(m)&&m.length===2&&m.every(w=>typeof w=="string")&&(d=m);let p=f.weekStartsOn??(0,lt.getSettings)().l10n.startOfWeek,g=(0,ce.useCallback)(w=>{r(u({item:e,value:w}))},[e,r,u]),[S,b]=(0,ce.useState)(null),y=(0,ce.useMemo)(()=>{if(!d)return{from:void 0,to:void 0};let[w,O]=d;return{from:Sn(w)||void 0,to:Sn(O)||void 0}},[d]),[_,A]=(0,ce.useState)(()=>y.from||new Date),[V,I]=(0,ce.useState)(!1),M=(0,ce.useRef)(null),N=(0,ce.useRef)(null),C=(0,ce.useCallback)((w,O)=>{w&&O?g([nc(w),nc(O)]):!w&&!O&&g(void 0)},[g]),T=(0,ce.useCallback)(w=>{C(w?.from,w?.to),b(null),I(!0)},[C]),k=(0,ce.useCallback)(w=>{let[O,x]=w.getValue();A(O),C(O,x),b(w.id),I(!0)},[C]),h=(0,ce.useCallback)((w,O)=>{let[x,v]=d||[void 0,void 0];if(C(w==="from"?O:x,w==="to"?O:v),O){let oe=Sn(O);oe&&A(oe)}b(null),I(!0)},[d,C]),{timezone:E}=(0,lt.getSettings)(),P=l;return t.isValid?.required&&!n?P=`${l} (${(0,Ge.__)("Required")})`:!t.isValid?.required&&n&&(P=`${l} (${(0,Ge.__)("Optional")})`),(0,ve.jsx)(Vg,{field:t,validity:i,inputRefs:[M,N],isTouched:V,setIsTouched:I,children:(0,ve.jsx)(ut.BaseControl,{id:a,className:"dataviews-controls__date",label:P,hideLabelFromVision:o,children:(0,ve.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ve.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[Jy.map(w=>{let O=S===w.id;return(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:O,size:"small",onClick:()=>k(w),children:w.label},w.id)}),(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!S,size:"small",accessibleWhenDisabled:!1,disabled:!!S,children:(0,Ge.__)("Custom")})]}),(0,ve.jsxs)(F,{direction:"row",gap:"sm",justify:"space-between",className:"dataviews-controls__date-range-inputs",children:[(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:M,type:"date",label:(0,Ge.__)("From"),hideLabelFromVision:!0,value:d?.[0],onChange:w=>h("from",w),required:!!t.isValid?.required}),(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:N,type:"date",label:(0,Ge.__)("To"),hideLabelFromVision:!0,value:d?.[1],onChange:w=>h("to",w),required:!!t.isValid?.required})]}),(0,ve.jsx)(Zy,{style:{width:"100%"},selected:y,onSelect:T,month:_,onMonthChange:A,timeZone:E.string||void 0,weekStartsOn:p})]})})})}function kg({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===dt||i===xt?(0,ve.jsx)(es,{className:"dataviews-controls__date",data:e,field:t,onChange:r,hideLabelFromVision:o,operator:i}):i===ft?(0,ve.jsx)(tw,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a}):(0,ve.jsx)(ew,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var ns=c(U(),1),Ng=c(z(),1);var ic=c(R(),1),{ValidatedSelectControl:rw}=K(ns.privateApis);function is({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{type:a,label:l,description:s,getValue:u,setValue:f,isValid:d}=t,m=a==="array",p=u({item:e})??(m?[]:""),g=(0,Ng.useCallback)(y=>r(f({item:e,value:y})),[e,r,f]),{elements:S,isLoading:b}=Xe({elements:t.elements,getElements:t.getElements});return b?(0,ic.jsx)(ns.Spinner,{}):(0,ic.jsx)(rw,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:ge(d,i),label:l,value:p,help:s,options:S,onChange:g,__next40pxDefaultSize:!0,hideLabelFromVision:o,multiple:m})}var ac=c(R(),1),ow=10;function Dg(e){let{field:t}=e,{elements:r}=Xe({elements:t.elements,getElements:t.getElements});return r.length>=ow?(0,ac.jsx)(Ja,{...e}):(0,ac.jsx)(is,{...e})}var ss=c(U(),1);var Mg=c(U(),1),Fg=c(z(),1);var Lg=c(R(),1),{ValidatedInputControl:nw}=K(Mg.privateApis);function lr({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,type:i,prefix:a,suffix:l,validity:s}){let{label:u,placeholder:f,description:d,getValue:m,setValue:p,isValid:g}=t,S=m({item:e}),b=(0,Fg.useCallback)(y=>r(p({item:e,value:y})),[e,p,r]);return(0,Lg.jsx)(nw,{required:!!g.required,markWhenOptional:n,customValidity:ge(g,s),label:u,placeholder:f,value:S??"",help:d,onChange:b,hideLabelFromVision:o,type:i,prefix:a,suffix:l,pattern:g.pattern?g.pattern.constraint:void 0,minLength:g.minLength?g.minLength.constraint:void 0,maxLength:g.maxLength?g.maxLength.constraint:void 0,__next40pxDefaultSize:!0})}var as=c(R(),1);function Bg({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,as.jsx)(lr,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"email",prefix:(0,as.jsx)(ss.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,as.jsx)(ss.Icon,{icon:dl})})})}var us=c(U(),1);var ls=c(R(),1);function Hg({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,ls.jsx)(lr,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"tel",prefix:(0,ls.jsx)(us.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,ls.jsx)(us.Icon,{icon:_l})})})}var fs=c(U(),1);var cs=c(R(),1);function zg({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,cs.jsx)(lr,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"url",prefix:(0,cs.jsx)(fs.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,cs.jsx)(fs.Icon,{icon:wl})})})}var Nr=c(U(),1),mi=c(z(),1),ds=c(G(),1);var fo=c(R(),1),{ValidatedNumberControl:iw}=K(Nr.privateApis);function jg(e){if(e===""||e===void 0)return"";let t=Number(e);return Number.isFinite(t)?t:""}function aw({value:e,onChange:t,hideLabelFromVision:r,step:o}){let[n="",i=""]=e,a=(0,mi.useCallback)(s=>t([jg(s),i]),[t,i]),l=(0,mi.useCallback)(s=>t([n,jg(s)]),[t,n]);return(0,fo.jsx)(Nr.BaseControl,{help:(0,ds.__)("The max. value must be greater than the min. value."),children:(0,fo.jsxs)(Nr.Flex,{direction:"row",gap:4,children:[(0,fo.jsx)(Nr.__experimentalNumberControl,{label:(0,ds.__)("Min."),value:n,max:i?Number(i)-o:void 0,onChange:a,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o}),(0,fo.jsx)(Nr.__experimentalNumberControl,{label:(0,ds.__)("Max."),value:i,min:n?Number(n)+o:void 0,onChange:l,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o})]})})}function ms({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){let l=t.format?.decimals??0,s=Math.pow(10,Math.abs(l)*-1),{label:u,description:f,getValue:d,setValue:m,isValid:p}=t,g=d({item:e})??"",S=(0,mi.useCallback)(y=>{r(m({item:e,value:["",void 0].includes(y)?void 0:Number(y)}))},[e,r,m]),b=(0,mi.useCallback)(y=>{r(m({item:e,value:y}))},[e,r,m]);if(i===ft){let y=["",""];return Array.isArray(g)&&g.length===2&&g.every(_=>typeof _=="number"||_==="")&&(y=g),(0,fo.jsx)(aw,{value:y,onChange:b,hideLabelFromVision:o,step:s})}return(0,fo.jsx)(iw,{required:!!p.required,markWhenOptional:n,customValidity:ge(p,a),label:u,help:f,value:g,onChange:S,__next40pxDefaultSize:!0,hideLabelFromVision:o,step:s,min:p.min?p.min.constraint:void 0,max:p.max?p.max.constraint:void 0})}var Wg=c(R(),1);function Yg(e){return(0,Wg.jsx)(ms,{...e})}var Gg=c(R(),1);function Ug(e){return(0,Gg.jsx)(ms,{...e})}var ps=c(U(),1),qg=c(z(),1);var sc=c(R(),1),{ValidatedRadioControl:sw}=K(ps.privateApis);function $g({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:f}=t,{elements:d,isLoading:m}=Xe({elements:t.elements,getElements:t.getElements}),p=s({item:e}),g=(0,qg.useCallback)(S=>r(u({item:e,value:S})),[e,r,u]);return m?(0,sc.jsx)(ps.Spinner,{}):(0,sc.jsx)(sw,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:ge(f,i),label:a,help:l,onChange:g,options:d,selected:p,hideLabelFromVision:o})}var lc=c(z(),1);var Kg=c(R(),1);function Xg({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{prefix:l,suffix:s}=i||{};return(0,Kg.jsx)(lr,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a,prefix:l?(0,lc.createElement)(l):void 0,suffix:s?(0,lc.createElement)(s):void 0})}var Zg=c(U(),1),Qg=c(z(),1);var Jg=c(R(),1),{ValidatedToggleControl:lw}=K(Zg.privateApis);function ev({field:e,onChange:t,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:f}=e,d=(0,Qg.useCallback)(()=>{t(u({item:r,value:!s({item:r})}))},[t,u,r,s]);return(0,Jg.jsx)(lw,{required:!!f.required,markWhenOptional:n,customValidity:ge(f,i),hidden:o,label:a,help:l,checked:s({item:r}),onChange:d})}var tv=c(U(),1),rv=c(z(),1);var ov=c(R(),1),{ValidatedTextareaControl:uw}=K(tv.privateApis);function nv({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{rows:l=4}=i||{},{label:s,placeholder:u,description:f,setValue:d,isValid:m}=t,p=t.getValue({item:e}),g=(0,rv.useCallback)(S=>r(d({item:e,value:S})),[e,r,d]);return(0,ov.jsx)(uw,{required:!!m.required,markWhenOptional:n,customValidity:ge(m,a),label:s,placeholder:u,value:p??"",help:f,onChange:g,rows:l,minLength:m.minLength?m.minLength.constraint:void 0,maxLength:m.maxLength?m.maxLength.constraint:void 0,__next40pxDefaultSize:!0,hideLabelFromVision:o})}var _n=c(U(),1),iv=c(z(),1);var gs=c(R(),1),{ValidatedToggleGroupControl:cw}=K(_n.privateApis);function av({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,isValid:s}=t,u=a({item:e}),f=(0,iv.useCallback)(g=>r(l({item:e,value:g})),[e,r,l]),{elements:d,isLoading:m}=Xe({elements:t.elements,getElements:t.getElements});if(m)return(0,gs.jsx)(_n.Spinner,{});if(d.length===0)return null;let p=d.find(g=>g.value===u);return(0,gs.jsx)(cw,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:ge(s,i),__next40pxDefaultSize:!0,isBlock:!0,label:t.label,help:p?.description||t.description,onChange:f,value:u,hideLabelFromVision:o,children:d.map(g=>(0,gs.jsx)(_n.__experimentalToggleGroupControlOption,{label:g.label,value:g.value},g.value))})}var vs=c(U(),1),hs=c(z(),1);var pi=c(R(),1),{ValidatedFormTokenField:fw}=K(vs.privateApis);function sv({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,getValue:s,setValue:u,isValid:f}=t,d=s({item:e}),{elements:m,isLoading:p}=Xe({elements:t.elements,getElements:t.getElements}),g=(0,hs.useMemo)(()=>Array.isArray(d)?d.map(b=>m?.find(_=>_.value===b)||{value:b,label:b}):[],[d,m]),S=(0,hs.useCallback)(b=>{let y=b.map(_=>typeof _=="object"&&"value"in _?_.value:_);r(u({item:e,value:y}))},[r,u,e]);return p?(0,pi.jsx)(vs.Spinner,{}):(0,pi.jsx)(fw,{required:!!f?.required,markWhenOptional:n,customValidity:ge(f,i),label:o?void 0:a,value:g,onChange:S,placeholder:l,suggestions:m?.map(b=>b.value),__experimentalValidateInput:b=>t.isValid?.elements&&m?m.some(y=>y.value===b||y.label===b):!0,__experimentalExpandOnFocus:m&&m.length>0,__experimentalShowHowTo:!t.isValid?.elements,displayTransform:b=>typeof b=="object"&&"label"in b?b.label:typeof b=="string"&&m&&m.find(_=>_.value===b)?.label||b,__experimentalRenderItem:({item:b})=>{if(typeof b=="string"&&m){let y=m.find(_=>_.value===b);return(0,pi.jsx)("span",{children:y?.label||b})}return(0,pi.jsx)("span",{children:b})}})}var dw={grad:.9,turn:360,rad:360/(2*Math.PI)},Dr=function(e){return typeof e=="string"?e.length>0:typeof e=="number"},Ze=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r+0},zt=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=1),e>r?r:e>t?e:t},vv=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},lv=function(e){return{r:zt(e.r,0,255),g:zt(e.g,0,255),b:zt(e.b,0,255),a:zt(e.a)}},uc=function(e){return{r:Ze(e.r),g:Ze(e.g),b:Ze(e.b),a:Ze(e.a,3)}},mw=/^#([0-9a-f]{3,8})$/i,bs=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},hv=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=Math.max(t,r,o),a=i-Math.min(t,r,o),l=a?i===t?(r-o)/a:i===r?2+(o-t)/a:4+(t-r)/a:0;return{h:60*(l<0?l+6:l),s:i?a/i*100:0,v:i/255*100,a:n}},bv=function(e){var t=e.h,r=e.s,o=e.v,n=e.a;t=t/360*6,r/=100,o/=100;var i=Math.floor(t),a=o*(1-r),l=o*(1-(t-i)*r),s=o*(1-(1-t+i)*r),u=i%6;return{r:255*[o,l,a,a,s,o][u],g:255*[s,o,o,l,a,a][u],b:255*[a,a,s,o,o,l][u],a:n}},uv=function(e){return{h:vv(e.h),s:zt(e.s,0,100),l:zt(e.l,0,100),a:zt(e.a)}},cv=function(e){return{h:Ze(e.h),s:Ze(e.s),l:Ze(e.l),a:Ze(e.a,3)}},fv=function(e){return bv((r=(t=e).s,{h:t.h,s:(r*=((o=t.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:t.a}));var t,r,o},gi=function(e){return{h:(t=hv(e)).h,s:(n=(200-(r=t.s))*(o=t.v)/100)>0&&n<200?r*o/100/(n<=100?n:200-n)*100:0,l:n/2,a:t.a};var t,r,o,n},pw=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,gw=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,vw=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,hw=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,dv={string:[[function(e){var t=mw.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?Ze(parseInt(e[3]+e[3],16)/255,2):1}:e.length===6||e.length===8?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:e.length===8?Ze(parseInt(e.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(e){var t=vw.exec(e)||hw.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:lv({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(e){var t=pw.exec(e)||gw.exec(e);if(!t)return null;var r,o,n=uv({h:(r=t[1],o=t[2],o===void 0&&(o="deg"),Number(r)*(dw[o]||1)),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)});return fv(n)},"hsl"]],object:[[function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=n===void 0?1:n;return Dr(t)&&Dr(r)&&Dr(o)?lv({r:Number(t),g:Number(r),b:Number(o),a:Number(i)}):null},"rgb"],[function(e){var t=e.h,r=e.s,o=e.l,n=e.a,i=n===void 0?1:n;if(!Dr(t)||!Dr(r)||!Dr(o))return null;var a=uv({h:Number(t),s:Number(r),l:Number(o),a:Number(i)});return fv(a)},"hsl"],[function(e){var t=e.h,r=e.s,o=e.v,n=e.a,i=n===void 0?1:n;if(!Dr(t)||!Dr(r)||!Dr(o))return null;var a=(function(l){return{h:vv(l.h),s:zt(l.s,0,100),v:zt(l.v,0,100),a:zt(l.a)}})({h:Number(t),s:Number(r),v:Number(o),a:Number(i)});return bv(a)},"hsv"]]},mv=function(e,t){for(var r=0;r=.5},e.prototype.toHex=function(){return t=uc(this.rgba),r=t.r,o=t.g,n=t.b,a=(i=t.a)<1?bs(Ze(255*i)):"","#"+bs(r)+bs(o)+bs(n)+a;var t,r,o,n,i,a},e.prototype.toRgb=function(){return uc(this.rgba)},e.prototype.toRgbString=function(){return t=uc(this.rgba),r=t.r,o=t.g,n=t.b,(i=t.a)<1?"rgba("+r+", "+o+", "+n+", "+i+")":"rgb("+r+", "+o+", "+n+")";var t,r,o,n,i},e.prototype.toHsl=function(){return cv(gi(this.rgba))},e.prototype.toHslString=function(){return t=cv(gi(this.rgba)),r=t.h,o=t.s,n=t.l,(i=t.a)<1?"hsla("+r+", "+o+"%, "+n+"%, "+i+")":"hsl("+r+", "+o+"%, "+n+"%)";var t,r,o,n,i},e.prototype.toHsv=function(){return t=hv(this.rgba),{h:Ze(t.h),s:Ze(t.s),v:Ze(t.v),a:Ze(t.a,3)};var t},e.prototype.invert=function(){return ct({r:255-(t=this.rgba).r,g:255-t.g,b:255-t.b,a:t.a});var t},e.prototype.saturate=function(t){return t===void 0&&(t=.1),ct(cc(this.rgba,t))},e.prototype.desaturate=function(t){return t===void 0&&(t=.1),ct(cc(this.rgba,-t))},e.prototype.grayscale=function(){return ct(cc(this.rgba,-1))},e.prototype.lighten=function(t){return t===void 0&&(t=.1),ct(pv(this.rgba,t))},e.prototype.darken=function(t){return t===void 0&&(t=.1),ct(pv(this.rgba,-t))},e.prototype.rotate=function(t){return t===void 0&&(t=15),this.hue(this.hue()+t)},e.prototype.alpha=function(t){return typeof t=="number"?ct({r:(r=this.rgba).r,g:r.g,b:r.b,a:t}):Ze(this.rgba.a,3);var r},e.prototype.hue=function(t){var r=gi(this.rgba);return typeof t=="number"?ct({h:t,s:r.s,l:r.l,a:r.a}):Ze(r.h)},e.prototype.isEqual=function(t){return this.toHex()===ct(t).toHex()},e})(),ct=function(e){return e instanceof gv?e:new gv(e)};var Ct=c(U(),1),dc=c(z(),1),xv=c(G(),1);var Mr=c(R(),1),{ValidatedInputControl:xw}=K(Ct.privateApis),yw=({color:e,onColorChange:t})=>{let r=e&&ct(e).isValid()?e:"#ffffff";return(0,Mr.jsx)(Ct.Dropdown,{className:"dataviews-controls__color-picker-dropdown",popoverProps:{resize:!1},renderToggle:({onToggle:o})=>(0,Mr.jsx)(Ct.Button,{onClick:o,"aria-label":(0,xv.__)("Open color picker"),size:"small",icon:()=>(0,Mr.jsx)(Ct.ColorIndicator,{colorValue:r})}),renderContent:()=>(0,Mr.jsx)(Ct.__experimentalDropdownContentWrapper,{paddingSize:"none",children:(0,Mr.jsx)(Ct.ColorPicker,{color:r,onChange:t,enableAlpha:!0})})})};function yv({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,description:s,setValue:u,isValid:f}=t,d=t.getValue({item:e})||"",m=(0,dc.useCallback)(g=>{r(u({item:e,value:g}))},[e,r,u]),p=(0,dc.useCallback)(g=>{r(u({item:e,value:g||""}))},[e,r,u]);return(0,Mr.jsx)(xw,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:ge(f,i),label:a,placeholder:l,value:d,help:s,onChange:p,hideLabelFromVision:o,type:"text",prefix:(0,Mr.jsx)(Ct.__experimentalInputControlPrefixWrapper,{variant:"control",children:(0,Mr.jsx)(yw,{color:d,onColorChange:m})})})}var ys=c(U(),1),ws=c(z(),1),mc=c(G(),1);var xs=c(R(),1);function wv({data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let[a,l]=(0,ws.useState)(!1),s=(0,ws.useCallback)(()=>{l(u=>!u)},[]);return(0,xs.jsx)(lr,{data:e,field:t,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:a?"text":"password",suffix:(0,xs.jsx)(ys.__experimentalInputControlSuffixWrapper,{variant:"control",children:(0,xs.jsx)(ys.Button,{icon:a?Dn:Vl,onClick:s,size:"small",label:a?(0,mc.__)("Hide password"):(0,mc.__)("Show password")})})})}function Ss(e){return Array.isArray(e.elements)&&e.elements.length>0||typeof e.getElements=="function"}var _v=c(R(),1),Sv={adaptiveSelect:Dg,array:sv,checkbox:Tg,color:yv,combobox:Ja,datetime:Rg,date:kg,email:Bg,telephone:Hg,url:zg,integer:Yg,number:Ug,password:wv,radio:$g,select:is,text:Xg,toggle:ev,textarea:nv,toggleGroup:av};function ww(e){return e&&typeof e=="object"&&typeof e.control=="string"}function Sw(e){let{control:t,...r}=e,o=_s(t);return o===null?null:function(i){return(0,_v.jsx)(o,{...i,config:r})}}function Cv(e,t){return typeof e.Edit=="function"?e.Edit:typeof e.Edit=="string"?_s(e.Edit):ww(e.Edit)?Sw(e.Edit):Ss(e)&&e.type!=="array"?_s("adaptiveSelect"):t===null?null:_s(t)}function _s(e){return Object.keys(Sv).includes(e)?Sv[e]:null}function _w(e,t,r){if(e.filterBy===!1)return!1;let o=e.filterBy?.operators?.filter(n=>r.includes(n))??t;return o.length===0?!1:{isPrimary:!!e.filterBy?.isPrimary,operators:o}}var Ev=_w;var Cw=e=>({item:t})=>{let r=e.split("."),o=t;for(let n of r)o.hasOwnProperty(n)?o=o[n]:o=void 0;return o},Pv=Cw;var Ew=e=>({value:t})=>{let r=e.split("."),o={},n=o;for(let i of r.slice(0,-1))n[i]={},n=n[i];return n[r.at(-1)]=t,o},Av=Ew;var Iv=c(G(),1);function Cs({item:e,field:t}){let{elements:r,isLoading:o}=Xe({elements:t.elements,getElements:t.getElements}),n=t.getValue({item:e});return o||r.length===0?n:r?.find(i=>i.value===n)?.label||t.getValue({item:e})}var Tv=c(R(),1);function Ve({item:e,field:t}){return t.hasElements?(0,Tv.jsx)(Cs,{item:e,field:t}):t.getValueFormatted({item:e,field:t})}var ur=(e,t,r)=>r==="asc"?e.localeCompare(t):t.localeCompare(e);function ke(e,t){let r=t.getValue({item:e});return![void 0,"",null].includes(r)}function cr(e,t){if(typeof t.isValid.minLength?.constraint!="number")return!1;let r=t.getValue({item:e});return[void 0,"",null].includes(r)?!0:String(r).length>=t.isValid.minLength.constraint}function fr(e,t){if(typeof t.isValid.maxLength?.constraint!="number")return!1;let r=t.getValue({item:e});return[void 0,"",null].includes(r)?!0:String(r).length<=t.isValid.maxLength.constraint}function dr(e,t){if(t.isValid.pattern?.constraint===void 0)return!0;try{let r=new RegExp(t.isValid.pattern.constraint),o=t.getValue({item:e});return[void 0,"",null].includes(o)?!0:r.test(String(o))}catch{return!1}}function we(e,t){let o=(t.elements??[]).map(i=>i.value);if(o.length===0)return!0;let n=t.getValue({item:e});return[].concat(n).every(i=>o.includes(i))}function Pw({item:e,field:t}){return t.getValue({item:e})}var ht=Pw;var Aw=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function Tw(e,t){let r=t.getValue({item:e});return![void 0,"",null].includes(r)&&!Aw.test(r)?(0,Iv.__)("Value must be a valid email address."):null}var Ov={type:"email",render:Ve,Edit:"email",sort:ur,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[_e,Ce],validOperators:[Pe,Ae,$t,Kt,Xt,_e,Ce,it,Ue],format:{},getValueFormatted:ht,validate:{required:ke,pattern:dr,minLength:cr,maxLength:fr,elements:we,custom:Tw}};var Rv=c(G(),1);var Cn=(e,t,r)=>r==="asc"?e-t:t-e;function Es(e,t){if(typeof t.isValid.min?.constraint!="number")return!1;let r=t.getValue({item:e});return[void 0,"",null].includes(r)?!0:Number(r)>=t.isValid.min.constraint}function Ps(e,t){if(typeof t.isValid.max?.constraint!="number")return!1;let r=t.getValue({item:e});return[void 0,"",null].includes(r)?!0:Number(r)<=t.isValid.max.constraint}var Vv={separatorThousand:","};function Iw({item:e,field:t}){let r=t.getValue({item:e});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;t.type!=="integer"?o=Vv:o=t.format;let{separatorThousand:n}=o,i=Math.trunc(r);return n?String(i).replace(/\B(?=(\d{3})+(?!\d))/g,n):String(i)}function Ow(e,t){let r=t.getValue({item:e});return![void 0,"",null].includes(r)&&!Number.isInteger(r)?(0,Rv.__)("Value must be an integer."):null}var kv={type:"integer",render:Ve,Edit:"integer",sort:Cn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Pe,Ae,Hr,zr,jr,Wr,ft],validOperators:[Pe,Ae,Hr,zr,jr,Wr,ft,_e,Ce,it,Ue],format:Vv,getValueFormatted:Iw,validate:{required:ke,min:Es,max:Ps,elements:we,custom:Ow}};var Nv=c(G(),1);var Dv={separatorThousand:",",separatorDecimal:".",decimals:2};function Rw({item:e,field:t}){let r=t.getValue({item:e});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;t.type!=="number"?o=Dv:o=t.format;let{separatorThousand:n,separatorDecimal:i,decimals:a}=o,l=r.toFixed(a),[s,u]=l.split("."),f=n?s.replace(/\B(?=(\d{3})+(?!\d))/g,n):s;return a===0?f:f+i+u}function Vw(e){return e===""||e===void 0||e===null}function kw(e,t){let r=t.getValue({item:e});return!Vw(r)&&!Number.isFinite(r)?(0,Nv.__)("Value must be a number."):null}var Mv={type:"number",render:Ve,Edit:"number",sort:Cn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Pe,Ae,Hr,zr,jr,Wr,ft],validOperators:[Pe,Ae,Hr,zr,jr,Wr,ft,_e,Ce,it,Ue],format:Dv,getValueFormatted:Rw,validate:{required:ke,min:Es,max:Ps,elements:we,custom:kw}};var Fv={type:"text",render:Ve,Edit:"text",sort:ur,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[_e,Ce],validOperators:[Pe,Ae,$t,Kt,Xt,_e,Ce,it,Ue],format:{},getValueFormatted:ht,validate:{required:ke,pattern:dr,minLength:cr,maxLength:fr,elements:we}};var Fo=c(Do(),1);var Lv={datetime:(0,Fo.getSettings)().formats.datetime,weekStartsOn:(0,Fo.getSettings)().l10n.startOfWeek};function Nw({item:e,field:t}){let r=t.getValue({item:e});if(["",void 0,null].includes(r))return"";let o;return t.type!=="datetime"?o=Lv:o=t.format,(0,Fo.dateI18n)(o.datetime,(0,Fo.getDate)(r))}var Dw=(e,t,r)=>{let o=new Date(e).getTime(),n=new Date(t).getTime();return r==="asc"?o-n:n-o},Bv={type:"datetime",render:Ve,Edit:"datetime",sort:Dw,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[$r,Kr,Yr,Gr,Ur,qr,dt,xt],validOperators:[$r,Kr,Yr,Gr,Ur,qr,dt,xt],format:Lv,getValueFormatted:Nw,validate:{required:ke,elements:we}};var Lo=c(Do(),1);var Hv={date:(0,Lo.getSettings)().formats.date,weekStartsOn:(0,Lo.getSettings)().l10n.startOfWeek};function Mw({item:e,field:t}){let r=t.getValue({item:e});if(["",void 0,null].includes(r))return"";let o;return t.type!=="date"?o=Hv:o=t.format,(0,Lo.dateI18n)(o.date,(0,Lo.getDate)(r))}var Fw=(e,t,r)=>{let o=new Date(e).getTime(),n=new Date(t).getTime();return r==="asc"?o-n:n-o},zv={type:"date",render:Ve,Edit:"date",sort:Fw,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[$r,Kr,Yr,Gr,Ur,qr,dt,xt,ft],validOperators:[$r,Kr,Yr,Gr,Ur,qr,dt,xt,ft],format:Hv,getValueFormatted:Mw,validate:{required:ke,elements:we}};var As=c(G(),1);function jv(e,t){return t.getValue({item:e})===!0}function Lw({item:e,field:t}){let r=t.getValue({item:e});return r===!0?(0,As.__)("True"):r===!1?(0,As.__)("False"):""}function Bw(e,t){let r=t.getValue({item:e});return![void 0,"",null].includes(r)&&![!0,!1].includes(r)?(0,As.__)("Value must be true, false, or undefined"):null}var Hw=(e,t,r)=>{let o=!!e;return o===!!t?0:r==="asc"?o?1:-1:o?-1:1},Wv={type:"boolean",render:Ve,Edit:"checkbox",sort:Hw,validate:{required:jv,elements:we,custom:Bw},enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Pe,Ae],validOperators:[Pe,Ae],format:{},getValueFormatted:Lw};var Yv={type:"media",render:()=>null,Edit:null,sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:ht,validate:{}};var pc=c(G(),1);function Gv(e,t){let r=t.getValue({item:e});return Array.isArray(r)&&r.length>0&&r.every(o=>![void 0,"",null].includes(o))}function Uv({item:e,field:t}){let r=t.getValue({item:e});return(Array.isArray(r)?r:[]).join(", ")}function zw({item:e,field:t}){return Uv({item:e,field:t})}function jw(e,t){let r=t.getValue({item:e});return![void 0,"",null].includes(r)&&!Array.isArray(r)?(0,pc.__)("Value must be an array."):r.every(o=>typeof o=="string")?null:(0,pc.__)("Every value must be a string.")}var Ww=(e,t,r)=>{let o=Array.isArray(e)?e:[],n=Array.isArray(t)?t:[];if(o.length!==n.length)return r==="asc"?o.length-n.length:n.length-o.length;let i=o.join(","),a=n.join(",");return r==="asc"?i.localeCompare(a):a.localeCompare(i)},qv={type:"array",render:zw,Edit:"array",sort:Ww,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[_e,Ce],validOperators:[_e,Ce,it,Ue],format:{},getValueFormatted:Uv,validate:{required:Gv,elements:we,custom:jw}};function Yw({item:e,field:t}){return t.getValue({item:e})?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":""}var $v={type:"password",render:Ve,Edit:"password",sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:Yw,validate:{required:ke,pattern:dr,minLength:cr,maxLength:fr,elements:we}};var Kv={type:"telephone",render:Ve,Edit:"telephone",sort:ur,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[_e,Ce],validOperators:[Pe,Ae,$t,Kt,Xt,_e,Ce,it,Ue],format:{},getValueFormatted:ht,validate:{required:ke,pattern:dr,minLength:cr,maxLength:fr,elements:we}};var Xv=c(G(),1);var En=c(R(),1);function Gw({item:e,field:t}){if(t.hasElements)return(0,En.jsx)(Cs,{item:e,field:t});let r=ht({item:e,field:t});return!r||!ct(r).isValid()?r:(0,En.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,En.jsx)("div",{style:{width:"16px",height:"16px",borderRadius:"50%",backgroundColor:r,border:"1px solid #ddd",flexShrink:0}}),(0,En.jsx)("span",{children:r})]})}function Uw(e,t){let r=t.getValue({item:e});return![void 0,"",null].includes(r)&&!ct(r).isValid()?(0,Xv.__)("Value must be a valid color."):null}var qw=(e,t,r)=>{let o=ct(e),n=ct(t);if(!o.isValid()&&!n.isValid())return 0;if(!o.isValid())return r==="asc"?1:-1;if(!n.isValid())return r==="asc"?-1:1;let i=o.toHsl(),a=n.toHsl();return i.h!==a.h?r==="asc"?i.h-a.h:a.h-i.h:i.s!==a.s?r==="asc"?i.s-a.s:a.s-i.s:r==="asc"?i.l-a.l:a.l-i.l},Zv={type:"color",render:Gw,Edit:"color",sort:qw,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[_e,Ce],validOperators:[Pe,Ae,_e,Ce],format:{},getValueFormatted:ht,validate:{required:ke,elements:we,custom:Uw}};var Qv={type:"url",render:Ve,Edit:"url",sort:ur,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[_e,Ce],validOperators:[Pe,Ae,$t,Kt,Xt,_e,Ce,it,Ue],format:{},getValueFormatted:ht,validate:{required:ke,pattern:dr,minLength:cr,maxLength:fr,elements:we}};var $w=(e,t,r)=>typeof e=="number"&&typeof t=="number"?Cn(e,t,r):ur(e,t,r),Jv={render:Ve,Edit:null,sort:$w,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Pe,Ae],validOperators:$p(),format:{},getValueFormatted:ht,validate:{required:ke,elements:we}};function eh(e,t){let r;e.isValid?.required===!0&&t.validate.required!==void 0&&(r={constraint:!0,validate:t.validate.required});let o;(e.isValid?.elements===!0||e.isValid?.elements===void 0&&(e.elements||e.getElements))&&t.validate.elements!==void 0&&(o={constraint:!0,validate:t.validate.elements});let n;typeof e.isValid?.min=="number"&&t.validate.min!==void 0&&(n={constraint:e.isValid.min,validate:t.validate.min});let i;typeof e.isValid?.max=="number"&&t.validate.max!==void 0&&(i={constraint:e.isValid.max,validate:t.validate.max});let a;typeof e.isValid?.minLength=="number"&&t.validate.minLength!==void 0&&(a={constraint:e.isValid.minLength,validate:t.validate.minLength});let l;typeof e.isValid?.maxLength=="number"&&t.validate.maxLength!==void 0&&(l={constraint:e.isValid.maxLength,validate:t.validate.maxLength});let s;e.isValid?.pattern!==void 0&&t.validate.pattern!==void 0&&(s={constraint:e.isValid?.pattern,validate:t.validate.pattern});let u=e.isValid?.custom??t.validate.custom;return{required:r,elements:o,min:n,max:i,minLength:a,maxLength:l,pattern:s,custom:u}}function th(e){return e.validOperators.reduce((t,r)=>{let o=Mo(r);return o?.filter&&(t[r]=o.filter),t},{})}function Kw(e,t){return{...t.format,...e.format}}var rh=Kw;function Xw(e){let t=[Ov,kv,Mv,Fv,Bv,zv,Wv,Yv,qv,$v,Kv,Zv,Qv].find(r=>r?.type===e);return t||Jv}function Ts(e){return e.map(t=>{let r=Xw(t.type),o=t.getValue||Pv(t.id),n=function(i,a,l){let s=o({item:i}),u=o({item:a});return t.sort?t.sort(s,u,l):r.sort(s,u,l)};return{id:t.id,label:t.label||t.id,header:t.header||t.label||t.id,description:t.description,placeholder:t.placeholder,getValue:o,setValue:t.setValue||Av(t.id),elements:t.elements,getElements:t.getElements,hasElements:Ss(t),isVisible:t.isVisible,enableHiding:t.enableHiding??!0,readOnly:t.readOnly??!1,type:r.type,render:t.render??r.render,Edit:Cv(t,r.Edit),sort:n,enableSorting:t.enableSorting??r.enableSorting,enableGlobalSearch:t.enableGlobalSearch??r.enableGlobalSearch,isValid:eh(t,r),filterBy:Ev(t,r.defaultOperators,r.validOperators),filter:th(r),format:rh(t,r),getValueFormatted:t.getValueFormatted??r.getValueFormatted}})}var Bo=c(z(),1);function oh(e,t,r){let o=(0,Bo.useRef)(e),n=(0,Bo.useRef)(r),[i,a]=(0,Bo.useState)(!t);return(0,Bo.useEffect)(()=>{t||(o.current=e,n.current=r,a(!0))},[e,t,r]),{data:t&&o.current?.length?o.current:e,paginationInfo:t&&o.current?.length?n.current:r,hasInitiallyLoaded:i}}var rt=c(R(),1),Zw=e=>e.id,Qw=()=>!0,Jw=[],e1=to.filter(e=>!e.isPicker);function t1({header:e,search:t=!0,searchLabel:r=void 0}){return(0,rt.jsxs)(rt.Fragment,{children:[(0,rt.jsxs)(F,{direction:"row",align:"top",justify:"space-between",className:"dataviews__view-actions",gap:"xs",children:[(0,rt.jsxs)(F,{direction:"row",justify:"start",gap:"sm",className:"dataviews__search",children:[t&&(0,rt.jsx)(Zu,{label:r}),(0,rt.jsx)(Xa,{})]}),(0,rt.jsxs)(F,{direction:"row",gap:"xs",style:{flexShrink:0},children:[(0,rt.jsx)(Cg,{}),e]})]}),(0,rt.jsx)(Za,{className:"dataviews-filters__container"}),(0,rt.jsx)(Ku,{}),(0,rt.jsx)(Xu,{})]})}function r1({view:e,onChangeView:t,fields:r,search:o=!0,searchLabel:n=void 0,actions:i=Jw,data:a,getItemId:l=Zw,getItemLevel:s,isLoading:u=!1,paginationInfo:f,defaultLayouts:d,selection:m,onChangeSelection:p,onClickItem:g,renderItemLink:S,isItemClickable:b=Qw,header:y,children:_,config:A={perPageSizes:[10,20,50,100]},empty:V,onReset:I}){let{infiniteScrollHandler:M}=f,N=(0,bt.useRef)(null),[C,T]=(0,bt.useState)(0),k=(0,Is.useResizeObserver)(Q=>{T(Q[0].borderBoxSize[0].inlineSize)},{box:"border-box"}),[h,E]=(0,bt.useState)([]),P=m===void 0||p===void 0,w=P?h:m,[O,x]=(0,bt.useState)(null);function v(Q){let he=typeof Q=="function"?Q(w):Q;P&&E(he),p&&p(he)}let D=(0,bt.useMemo)(()=>Ts(r),[r]),B=(0,bt.useMemo)(()=>w.filter(Q=>a.some(he=>l(he)===Q)),[w,a,l]),oe=ui(D,e),fe=(0,bt.useMemo)(()=>(oe||[]).some(Q=>Q.isPrimary||Q.isLocked),[oe]),[Ne,He]=(0,bt.useState)(fe);(0,bt.useEffect)(()=>{fe&&!Ne&&He(!0)},[fe,Ne]),(0,bt.useEffect)(()=>{if(!e.infiniteScrollEnabled||!N.current)return;let Q=(0,Is.throttle)(hr=>{let br=hr.target,go=br.scrollTop,vo=br.scrollHeight,jo=br.clientHeight;go+jo>=vo-100&&M?.()},100),he=N.current;return he.addEventListener("scroll",Q),()=>{he.removeEventListener("scroll",Q),Q.cancel()}},[M,e.infiniteScrollEnabled]);let ot=(0,bt.useMemo)(()=>Object.fromEntries(Object.entries(d).filter(([Q])=>e1.some(he=>he.type===Q))),[d]),{data:qt,paginationInfo:vr,hasInitiallyLoaded:q}=oh(a,u,f);return ot[e.type]?(0,rt.jsx)(Y.Provider,{value:{view:e,onChangeView:t,fields:D,actions:i,data:qt,isLoading:u,paginationInfo:vr,selection:B,onChangeSelection:v,openedFilter:O,setOpenedFilter:x,getItemId:l,getItemLevel:s,isItemClickable:b,onClickItem:g,renderItemLink:S,containerWidth:C,containerRef:N,resizeObserverRef:k,defaultLayouts:ot,filters:oe,isShowingFilter:Ne,setIsShowingFilter:He,config:A,empty:V,hasInitiallyLoaded:q,hasInfiniteScrollHandler:!!M,onReset:I},children:(0,rt.jsx)("div",{className:"dataviews-wrapper",ref:N,children:_??(0,rt.jsx)(t1,{header:y,search:o,searchLabel:n})})}):null}var Ut=r1;Ut.BulkActionToolbar=ta;Ut.Filters=fi;Ut.FiltersToggled=Za;Ut.FiltersToggle=Xa;Ut.Layout=Ku;Ut.LayoutSwitcher=ec;Ut.Pagination=Xl;Ut.Search=Zu;Ut.ViewConfig=tc;Ut.Footer=Xu;var gc=Ut;var sh=c(Fu(),1),lh=c(ih(),1);function ah(e=""){return(0,sh.default)(e.trim().toLowerCase())}var o1=[];function vc(e,t,r){if(!e)return{data:o1,paginationInfo:{totalItems:0,totalPages:0}};let o=Ts(r),n=[...e];if(t.search){let u=ah(t.search);n=n.filter(f=>o.filter(d=>d.enableGlobalSearch).some(d=>{let m=d.getValue({item:f});return(Array.isArray(m)?m:[m]).some(g=>ah(String(g)).includes(u))}))}t.filters&&t.filters?.length>0&&t.filters.forEach(u=>{let f=o.find(d=>d.id===u.field);if(f){u.operator===Ue&&(0,lh.default)("The 'isNotAll' filter operator",{since:"7.0",alternative:"'isNone'"});let d=f.filter[u.operator];d&&(n=n.filter(m=>d(m,f,u.value)))}});let i=t.sort?.field?o.find(u=>u.enableSorting!==!1&&u.id===t.sort?.field):null,a=t.groupBy?.field?o.find(u=>u.enableSorting!==!1&&u.id===t.groupBy?.field):null;(i||a)&&n.sort((u,f)=>{if(a){let d=a.sort(u,f,t.groupBy?.direction??"asc");if(d!==0)return d}return i?i.sort(u,f,t.sort?.direction??"desc"):0});let l=n.length,s=1;if(t.page!==void 0&&t.perPage!==void 0){let u=(t.page-1)*t.perPage;l=n?.length||0,s=Math.ceil(l/t.perPage),n=n?.slice(u,u+t.perPage)}return{data:n,paginationInfo:{totalItems:l,totalPages:s}}}var uh=c(z(),1),ch=c(R(),1),fh=(0,uh.forwardRef)(({children:e,className:t,ariaLabel:r,as:o="div",...n},i)=>(0,ch.jsx)(o,{ref:i,className:j("admin-ui-navigable-region",t),"aria-label":r,role:"region",tabIndex:"-1",...n,children:e}));fh.displayName="NavigableRegion";var dh=fh;var mo=c(U(),1);var mh=c(U(),1),{Fill:ph,Slot:gh}=(0,mh.createSlotFill)("SidebarToggle");var Fr=c(R(),1);function vh({breadcrumbs:e,badges:t,title:r,subTitle:o,actions:n,showSidebarToggle:i=!0}){return(0,Fr.jsxs)(mo.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,Fr.jsxs)(mo.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,Fr.jsxs)(mo.__experimentalHStack,{spacing:2,justify:"left",children:[i&&(0,Fr.jsx)(gh,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),r&&(0,Fr.jsx)(mo.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:r}),e,t]}),(0,Fr.jsx)(mo.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:n})]}),o&&(0,Fr.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var vi=c(R(),1);function hh({breadcrumbs:e,badges:t,title:r,subTitle:o,children:n,className:i,actions:a,hasPadding:l=!1,showSidebarToggle:s=!0}){let u=j("admin-ui-page",i);return(0,vi.jsxs)(dh,{className:u,ariaLabel:r,children:[(r||e||t)&&(0,vi.jsx)(vh,{breadcrumbs:e,badges:t,title:r,subTitle:o,actions:a,showSidebarToggle:s}),l?(0,vi.jsx)("div",{className:"admin-ui-page__content has-padding",children:n}):n]})}hh.SidebarToggleFill=ph;var hc=hh;var Ec=c(Os()),Ms=c(U()),Pc=c(jt()),kt=c(z()),Yh=c(yh()),Gh=c(Rs()),Ac=c(G());var Sh=c(Nl()),{lock:r3,unlock:mr}=(0,Sh.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var Vs=c(G()),_h="grid",n1="table",Ch={type:_h,perPage:20,sort:{field:"title",direction:"asc"},filters:[],fields:["sync-status"],layout:{badgeFields:["sync-status"]},titleField:"title",mediaField:"preview"},bc=[{slug:"all",label:(0,Vs.__)("All patterns")},{slug:"my-patterns",label:(0,Vs.__)("My patterns")},{slug:"registered",label:(0,Vs.__)("Registered")}],Eh={[n1]:{},[_h]:{layout:{badgeFields:["sync-status"]}}};var Ph=c(G());import{Preview as i1}from"@wordpress/lazy-editor";function a1({item:e}){return React.createElement(i1,{blocks:e.blocks,content:e.content,description:e.description})}var Ah={label:(0,Ph.__)("Preview"),id:"preview",render:a1,enableSorting:!1};var Ho=c(G()),Oh=c(Rs());var{PATTERN_SYNC_TYPES:Th}=mr(Oh.privateApis),s1="is",Ih=[{value:Th.full,label:(0,Ho._x)("Synced","pattern (singular)"),description:(0,Ho.__)("Patterns that are kept in sync across the site.")},{value:Th.unsynced,label:(0,Ho._x)("Not synced","pattern (singular)"),description:(0,Ho.__)("Patterns that can be changed freely without affecting the site.")}],Rh={label:(0,Ho.__)("Sync status"),id:"sync-status",render:({item:e})=>{let t=e.syncStatus;return React.createElement("span",{className:`routes-pattern-list__field-sync-status-${t}`},Ih.find(({value:r})=>r===t)?.label)},elements:Ih,filterBy:{operators:[s1],isPrimary:!0},enableSorting:!1};var Vh=c(G()),ks=c(jt()),Ns=c(Os()),xc=c(z()),l1="is";function u1({item:e}){let t=(0,ks.useSelect)(o=>o(Ns.store).getBlockPatternCategories(),[]),r=(0,xc.useMemo)(()=>!e.categories||!Array.isArray(e.categories)?[]:e.categories.map(o=>{let n=t?.find(i=>i.name===o);return n?n.label||n.name:null}).filter(Boolean),[e.categories,t]);return r.length===0?React.createElement("span",{className:"pattern-category-field__empty"},"\u2014"):React.createElement("span",{className:"pattern-category-field"},r.join(", "))}function c1(){let e=(0,ks.useSelect)(r=>r(Ns.store).getUserPatternCategories(),[]),t=(0,ks.useSelect)(r=>r(Ns.store).getBlockPatternCategories(),[]);return(0,xc.useMemo)(()=>{let r=new Map;return e?.forEach(o=>{r.has(o.name)||r.set(o.name,{value:o.name,label:o.label||o.name})}),t?.forEach(o=>{r.has(o.name)||r.set(o.name,{value:o.name,label:o.label||o.name})}),Array.from(r.values()).sort((o,n)=>o.label.localeCompare(n.label))},[e,t])}function kh(){let e=c1();return{label:(0,Vh.__)("Category"),id:"category",render:u1,elements:e,getValue:({item:t})=>t.categories,filterBy:{operators:[l1],isPrimary:!0},enableSorting:!1}}var zo=c(jt()),pr=c(Os()),yc=c(z()),Lh=c(Rs()),Bh=c(Dh());var Mh=(e,t,r)=>t===r.findIndex(o=>e.name===o.name);var{PATTERN_TYPES:gr,PATTERN_SYNC_TYPES:Hh,EXCLUDED_PATTERN_SOURCES:f1,PATTERN_DEFAULT_CATEGORY:po}=mr(Lh.privateApis),{extractWords:d1,getNormalizedSearchTerms:zh,normalizeString:Fh}=mr(Bh.privateApis);function m1(e){return{id:e.name,title:e.title,content:e.content,keywords:e.keywords||[],type:gr.theme,categories:e.categories||[],syncStatus:Hh.unsynced,description:e.description||""}}function p1(e,t){let r=[];e.wp_pattern_category&&Array.isArray(e.wp_pattern_category)&&e.wp_pattern_category.forEach(n=>{let i=t?.find(a=>a.id===n);i&&r.push(i.name)});let o=e.id;return{id:e.name||e.id.toString(),_recordId:o,keywords:[],type:gr.user,categories:r,syncStatus:e.wp_pattern_sync_status||Hh.full,title:typeof e.title=="string"?e.title:e.title.raw,content:typeof e.content=="string"?e.content:e.content.raw,description:e.excerpt?.raw||"",blocks:e.blocks}}var g1=(e,t)=>e.filter(r=>!zh(t).some(o=>o.includes(r)));function v1(e,t,r){let{categoryId:o,hasCategory:n,onlyFilterByCategory:i}=r,a=o===po||o==="my-patterns"&&e.type===gr.user||n&&n(e,o||"")?1:0;if(!a||i)return a;let l=Fh(t),s=Fh(e.title);if(l===s)a+=30;else if(s.startsWith(l))a+=20;else{let u=[e.id,e.title,e.description,...e.keywords].join(" "),f=d1(l);g1(f,u).length===0&&(a+=10)}return a}function Ds(e=[],t="",r={}){let o=zh(t),n=r.categoryId!==po&&!o.length,i={...r,onlyFilterByCategory:n},a=n?0:1,l=e.map(s=>[s,v1(s,t,i)]).filter(([,s])=>s>a);return o.length===0?l.map(([s])=>s):(l.sort(([,s],[,u])=>u-s),l.map(([s])=>s))}var wc=(0,zo.createSelector)(e=>{let{getBlockPatterns:t}=e(pr.store),{isResolving:r}=e(pr.store);return{patterns:(t()||[]).filter(i=>!f1.includes(i.source)).filter(Mh).filter(i=>i.inserter!==!1).map(m1),isResolving:r("getBlockPatterns")}},e=>[e(pr.store).getBlockPatterns(),e(pr.store).isResolving("getBlockPatterns")]),Sc=(0,zo.createSelector)((e,t=void 0,r="")=>{let{getEntityRecords:o,isResolving:n,getUserPatternCategories:i}=e(pr.store),a={per_page:-1},l=o("postType",gr.user,a),s=i(),u=(l??[]).map(d=>p1(d,s)),f=n("getEntityRecords",["postType",gr.user,a]);return t&&(u=u.filter(d=>d.syncStatus===t)),u=Ds(u,r,{categoryId:po,hasCategory:()=>!0}),{patterns:u,isResolving:f,categories:s}},e=>[e(pr.store).getEntityRecords("postType",gr.user,{per_page:-1}),e(pr.store).isResolving("getEntityRecords",["postType",gr.user,{per_page:-1}]),e(pr.store).getUserPatternCategories()]),h1=(0,zo.createSelector)((e,t,r,o="")=>{let{patterns:n,isResolving:i}=wc(e),{patterns:a,isResolving:l}=Sc(e),s=[...n||[],...a||[]];return r&&(s=s.filter(u=>u.syncStatus===r)),t&&t!==po?s=Ds(s,o,{categoryId:t,hasCategory:(u,f)=>u.categories?.includes(f)}):s=Ds(s,o,{categoryId:po,hasCategory:()=>!0}),{patterns:s,isResolving:i||l}},e=>[wc(e),Sc(e)]);function jh(e){let t=(0,yc.useMemo)(()=>e?.filter(o=>o.type!==gr.theme).map(o=>[o.type,o._recordId,o.id])??[],[e]),r=(0,zo.useSelect)(o=>{let{getEntityRecordPermissions:n}=mr(o(pr.store));return t.reduce((i,[a,l,s])=>(i[s]=n("postType",a,l),i),{})},[t]);return(0,yc.useMemo)(()=>e?.map(o=>({...o,permissions:r?.[o.id]??{}}))??[],[e,r])}var b1=(e,t,{search:r="",syncStatus:o}={})=>(0,zo.useSelect)(n=>{if(e===gr.user){let i=Sc(n,o,r),{patterns:a}=i;return t&&t!==po&&(a=a.filter(l=>l.categories.includes(t))),{patterns:a,isResolving:i.isResolving}}else if(e===gr.theme){let i=wc(n),{patterns:a}=i;return t&&t!==po&&(a=a.filter(l=>l.categories.includes(t))),a=Ds(a,r,{categoryId:t||po,hasCategory:()=>!0}),{patterns:a,isResolving:i.isResolving}}return h1(n,t,o,r)},[t,e,r,o]),Wh=b1;if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='2d52a92b3c']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","2d52a92b3c"),e.appendChild(document.createTextNode(":root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.patterns-menu-items__convert-modal{z-index:1000001}.patterns-menu-items__convert-modal [role=dialog]>[role=document]{width:350px}.patterns-menu-items__convert-modal .patterns-menu-items__convert-modal-categories{position:relative}.patterns-menu-items__convert-modal .components-form-token-field__suggestions-list:not(:empty){background-color:#fff;border:1px solid var(--wp-admin-theme-color);border-bottom-left-radius:2px;border-bottom-right-radius:2px;box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);box-sizing:border-box;left:-1px;max-height:96px;min-width:auto;position:absolute;width:calc(100% + 2px);z-index:1}.patterns-create-modal__name-input input[type=text]{margin:0}.patterns-rename-pattern-category-modal__validation-message{color:#cc1818}@media (min-width:782px){.patterns-rename-pattern-category-modal__validation-message{width:320px}}.pattern-overrides-control__allow-overrides-button{justify-content:center;width:100%}.routes-pattern-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}.dataviews-view-grid__badge-fields .dataviews-view-grid__field-value:has(.routes-pattern-list__field-sync-status-fully){background:rgba(var(--wp-block-synced-color--rgb),.04);color:var(--wp-block-synced-color)}")),document.head.appendChild(e)}var{usePostActions:C1,patternTitleField:E1}=mr(Yh.privateApis),{Tabs:_c}=mr(Ms.privateApis),{PATTERN_TYPES:Cc,CreatePatternModal:P1}=mr(Gh.privateApis);function A1(){let e=_1(),{type:t="all"}=x1({from:"/patterns/list/$type"}),r=y1(),o=w1({from:"/patterns/list/$type"}),n=(0,Pc.useSelect)(v=>v(Ec.store).getPostType("wp_block"),[]),i=n?.labels,a=(0,Pc.useSelect)(v=>v(Ec.store).canUser("create",{kind:"postType",name:"wp_block"}),[]),[l,s]=(0,kt.useState)(!1),u=(0,kt.useCallback)(v=>{r({search:{...o,...v}})},[o,r]),{view:f,isModified:d,updateView:m,resetToDefault:p}=js({kind:"postType",name:"wp_block",slug:"default-new",defaultView:Ch,queryParams:o,onChangeQueryParams:u}),g=()=>{p(),e()},S=v=>{m(v),v.type!==f.type&&e()},b=(0,kt.useMemo)(()=>f.filters?.find(D=>D.field==="category")?.value||"all-patterns",[f.filters]),y=(0,kt.useMemo)(()=>f.filters?.find(D=>D.field==="sync-status")?.value,[f.filters]),_=(0,kt.useMemo)(()=>t==="my-patterns"?Cc.user:t==="registered"?Cc.theme:null,[t]),{patterns:A,isResolving:V}=Wh(_,b,{search:f.search,syncStatus:y}),I=jh(A),M=kh(),N=(0,kt.useMemo)(()=>{let v=[Ah,E1,M];return(t==="my-patterns"||t==="all")&&v.push(Rh),v},[t,M]),{data:C,paginationInfo:T}=(0,kt.useMemo)(()=>{let v={...f};return delete v.search,v.filters=[],vc(I,v,N)},[I,f,N]),{totalItems:k,totalPages:h}=T,E=(0,kt.useCallback)(v=>{let D=v.map(fe=>fe.id),B=o.postIds||[],oe=B.filter(fe=>!D.includes(fe));oe.length!==B.length?r({search:{...o,postIds:oe.length>0?oe:void 0}}):e()},[e,o,r]),P=C1({postType:"wp_block",context:"list",onActionPerformed:(v,D)=>{(v==="move-to-trash"||v==="permanently-delete")&&E(D)}}),w=(0,kt.useMemo)(()=>[...P?.flatMap(v=>v.id==="view-post-revisions"?[]:[v])],[P]),O=(0,kt.useCallback)(v=>{r({to:`/patterns/list/${v}`})},[r]);if(!n)return null;let x=o.postIds??[];return f.type==="list"&&x.length===0&&C?.length>0&&x.push(C[0].id),f.type==="list"&&x.splice(1),React.createElement(hc,{title:(0,Ac.__)("Patterns"),subTitle:(0,Ac.__)("Reusable design elements for your site. Create once, use everywhere."),className:"pattern-page",actions:i?.add_new_item&&a&&React.createElement(Ms.Button,{variant:"primary",onClick:()=>s(!0),size:"compact"},i.add_new_item),hasPadding:!1},bc.length>1&&React.createElement("div",{className:"routes-pattern-list__tabs-wrapper"},React.createElement(_c,{onSelect:O,selectedTabId:t??"all"},React.createElement(_c.TabList,null,bc.map(v=>React.createElement(_c.Tab,{tabId:v.slug,key:v.slug},v.label))))),React.createElement(gc,{data:C,fields:N,view:f,onChangeView:S,actions:w,isLoading:V,paginationInfo:{totalItems:k,totalPages:h},defaultLayouts:Eh,selection:x,onReset:d?g:!1,onChangeSelection:v=>{r({search:{...o,postIds:v.length>0?v:void 0,edit:v.length===0?void 0:o.edit}})},isItemClickable:v=>v.type!==Cc.theme,renderItemLink:({item:v,...D})=>React.createElement(S1,{to:`/types/wp_block/edit/${encodeURIComponent(v.id)}`,...D,onClick:B=>{B.stopPropagation()}})}),l&&React.createElement(P1,{onClose:()=>s(!1),onSuccess:({pattern:v})=>{s(!1),r({to:`/types/wp_block/edit/${encodeURIComponent(v.id)}`})},content:[]}))}var T1=A1;export{T1 as stage}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.production.js: + (** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/pattern-list/route.js b/src/wp-includes/build/routes/pattern-list/route.js new file mode 100644 index 0000000000000..7dc2490cfb5ac --- /dev/null +++ b/src/wp-includes/build/routes/pattern-list/route.js @@ -0,0 +1,41 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/pattern-list/route.ts +var import_i18n = __toESM(require_i18n()); +var route = { + title: () => (0, import_i18n.__)("Patterns") +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/pattern-list/route.min.asset.php b/src/wp-includes/build/routes/pattern-list/route.min.asset.php new file mode 100644 index 0000000000000..bd581231d4872 --- /dev/null +++ b/src/wp-includes/build/routes/pattern-list/route.min.asset.php @@ -0,0 +1 @@ + array('wp-i18n'), 'version' => '949d84bd65bdaf6766db'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/pattern-list/route.min.js b/src/wp-includes/build/routes/pattern-list/route.min.js new file mode 100644 index 0000000000000..81119bc0dc217 --- /dev/null +++ b/src/wp-includes/build/routes/pattern-list/route.min.js @@ -0,0 +1 @@ +var m=Object.create;var n=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var a=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty;var d=(o,t)=>()=>(t||o((t={exports:{}}).exports,t),t.exports);var f=(o,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of _(t))!c.call(o,e)&&e!==r&&n(o,e,{get:()=>t[e],enumerable:!(i=x(t,e))||i.enumerable});return o};var l=(o,t,r)=>(r=o!=null?m(a(o)):{},f(t||!o||!o.__esModule?n(r,"default",{value:o,enumerable:!0}):r,o));var s=d((P,p)=>{p.exports=window.wp.i18n});var w=l(s()),b={title:()=>(0,w.__)("Patterns")};export{b as route}; diff --git a/src/wp-includes/build/routes/pattern/route.js b/src/wp-includes/build/routes/pattern/route.js new file mode 100644 index 0000000000000..e02a368d628a3 --- /dev/null +++ b/src/wp-includes/build/routes/pattern/route.js @@ -0,0 +1,16 @@ +// routes/pattern/route.ts +import { redirect } from "@wordpress/route"; +var route = { + beforeLoad: () => { + throw redirect({ + throw: true, + to: "/patterns/list/$type", + params: { + type: "all" + } + }); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/pattern/route.min.asset.php b/src/wp-includes/build/routes/pattern/route.min.asset.php new file mode 100644 index 0000000000000..3503a313e136b --- /dev/null +++ b/src/wp-includes/build/routes/pattern/route.min.asset.php @@ -0,0 +1 @@ + array(), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '0ad107785a0d22f8e27c'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/pattern/route.min.js b/src/wp-includes/build/routes/pattern/route.min.js new file mode 100644 index 0000000000000..8a1332ccec243 --- /dev/null +++ b/src/wp-includes/build/routes/pattern/route.min.js @@ -0,0 +1 @@ +import{redirect as t}from"@wordpress/route";var e={beforeLoad:()=>{throw t({throw:!0,to:"/patterns/list/$type",params:{type:"all"}})}};export{e as route}; diff --git a/src/wp-includes/build/routes/post-edit/route.js b/src/wp-includes/build/routes/post-edit/route.js new file mode 100644 index 0000000000000..76d77c639f129 --- /dev/null +++ b/src/wp-includes/build/routes/post-edit/route.js @@ -0,0 +1,111 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/html-entities +var require_html_entities = __commonJS({ + "package-external:@wordpress/html-entities"(exports, module) { + module.exports = window.wp.htmlEntities; + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/post-edit/route.ts +var import_data = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var import_html_entities = __toESM(require_html_entities()); +var import_i18n = __toESM(require_i18n()); +import { notFound } from "@wordpress/route"; +var route = { + beforeLoad: async ({ + params + }) => { + const postId = parseInt(params.id, 10); + if (Number.isNaN(postId)) { + throw notFound(); + } + try { + const [postType, post] = await Promise.all([ + (0, import_data.resolveSelect)(import_core_data.store).getPostType(params.type), + (0, import_data.resolveSelect)(import_core_data.store).getEntityRecord( + "postType", + params.type, + postId + ) + ]); + if (!postType || !post) { + throw notFound(); + } + } catch { + throw notFound(); + } + }, + title: async ({ + params + }) => { + const post = await (0, import_data.resolveSelect)(import_core_data.store).getEntityRecord( + "postType", + params.type, + params.id + ); + if (post?.title?.rendered) { + return (0, import_html_entities.decodeEntities)(post.title.rendered); + } + const postType = await (0, import_data.resolveSelect)(import_core_data.store).getPostType( + params.type + ); + return postType?.labels?.edit_item || (0, import_i18n.__)("Edit"); + }, + async canvas(context) { + const { params } = context; + return { + postType: params.type, + postId: params.id + }; + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/post-edit/route.min.asset.php b/src/wp-includes/build/routes/post-edit/route.min.asset.php new file mode 100644 index 0000000000000..dc0361fd41100 --- /dev/null +++ b/src/wp-includes/build/routes/post-edit/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data', 'wp-html-entities', 'wp-i18n'), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'd16f0eda0f8463b63fe9'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/post-edit/route.min.js b/src/wp-includes/build/routes/post-edit/route.min.js new file mode 100644 index 0000000000000..34f87712ed783 --- /dev/null +++ b/src/wp-includes/build/routes/post-edit/route.min.js @@ -0,0 +1 @@ +var E=Object.create;var y=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var n=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var _=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of I(e))!P.call(t,r)&&r!==o&&y(t,r,{get:()=>e[r],enumerable:!(s=b(e,r))||s.enumerable});return t};var d=(t,e,o)=>(o=t!=null?E(N(t)):{},_(e||!t||!t.__esModule?y(o,"default",{value:t,enumerable:!0}):o,t));var w=n((R,c)=>{c.exports=window.wp.data});var g=n((S,m)=>{m.exports=window.wp.coreData});var f=n((D,l)=>{l.exports=window.wp.htmlEntities});var u=n((F,T)=>{T.exports=window.wp.i18n});var i=d(w()),p=d(g()),h=d(f()),x=d(u());import{notFound as a}from"@wordpress/route";var j={beforeLoad:async({params:t})=>{let e=parseInt(t.id,10);if(Number.isNaN(e))throw a();try{let[o,s]=await Promise.all([(0,i.resolveSelect)(p.store).getPostType(t.type),(0,i.resolveSelect)(p.store).getEntityRecord("postType",t.type,e)]);if(!o||!s)throw a()}catch{throw a()}},title:async({params:t})=>{let e=await(0,i.resolveSelect)(p.store).getEntityRecord("postType",t.type,t.id);return e?.title?.rendered?(0,h.decodeEntities)(e.title.rendered):(await(0,i.resolveSelect)(p.store).getPostType(t.type))?.labels?.edit_item||(0,x.__)("Edit")},async canvas(t){let{params:e}=t;return{postType:e.type,postId:e.id}}};export{j as route}; diff --git a/src/wp-includes/build/routes/post-list/content.js b/src/wp-includes/build/routes/post-list/content.js new file mode 100644 index 0000000000000..9100d52a624f5 --- /dev/null +++ b/src/wp-includes/build/routes/post-list/content.js @@ -0,0 +1,17291 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// package-external:@wordpress/compose +var require_compose = __commonJS({ + "package-external:@wordpress/compose"(exports, module) { + module.exports = window.wp.compose; + } +}); + +// vendor-external:react +var require_react = __commonJS({ + "vendor-external:react"(exports, module) { + module.exports = window.React; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// vendor-external:react-dom +var require_react_dom = __commonJS({ + "vendor-external:react-dom"(exports, module) { + module.exports = window.ReactDOM; + } +}); + +// node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +var require_use_sync_external_store_shim_development = __commonJS({ + "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { + "use strict"; + (function() { + function is(x2, y2) { + return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; + } + function useSyncExternalStore$2(subscribe2, getSnapshot) { + didWarnOld18Alpha || void 0 === React9.startTransition || (didWarnOld18Alpha = true, console.error( + "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." + )); + var value = getSnapshot(); + if (!didWarnUncachedGetSnapshot) { + var cachedValue = getSnapshot(); + objectIs(value, cachedValue) || (console.error( + "The result of getSnapshot should be cached to avoid an infinite loop" + ), didWarnUncachedGetSnapshot = true); + } + cachedValue = useState24({ + inst: { value, getSnapshot } + }); + var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; + useLayoutEffect2( + function() { + inst.value = value; + inst.getSnapshot = getSnapshot; + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }, + [subscribe2, value, getSnapshot] + ); + useEffect19( + function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + return subscribe2(function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }); + }, + [subscribe2] + ); + useDebugValue(value); + return value; + } + function checkIfSnapshotChanged(inst) { + var latestGetSnapshot = inst.getSnapshot; + inst = inst.value; + try { + var nextValue = latestGetSnapshot(); + return !objectIs(inst, nextValue); + } catch (error) { + return true; + } + } + function useSyncExternalStore$1(subscribe2, getSnapshot) { + return getSnapshot(); + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var React9 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState24 = React9.useState, useEffect19 = React9.useEffect, useLayoutEffect2 = React9.useLayoutEffect, useDebugValue = React9.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; + exports.useSyncExternalStore = void 0 !== React9.useSyncExternalStore ? React9.useSyncExternalStore : shim; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); + } +}); + +// node_modules/use-sync-external-store/shim/index.js +var require_shim = __commonJS({ + "node_modules/use-sync-external-store/shim/index.js"(exports, module) { + "use strict"; + if (false) { + module.exports = null; + } else { + module.exports = require_use_sync_external_store_shim_development(); + } + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// package-external:@wordpress/keycodes +var require_keycodes = __commonJS({ + "package-external:@wordpress/keycodes"(exports, module) { + module.exports = window.wp.keycodes; + } +}); + +// node_modules/remove-accents/index.js +var require_remove_accents = __commonJS({ + "node_modules/remove-accents/index.js"(exports, module) { + var characterMap = { + "\xC0": "A", + "\xC1": "A", + "\xC2": "A", + "\xC3": "A", + "\xC4": "A", + "\xC5": "A", + "\u1EA4": "A", + "\u1EAE": "A", + "\u1EB2": "A", + "\u1EB4": "A", + "\u1EB6": "A", + "\xC6": "AE", + "\u1EA6": "A", + "\u1EB0": "A", + "\u0202": "A", + "\u1EA2": "A", + "\u1EA0": "A", + "\u1EA8": "A", + "\u1EAA": "A", + "\u1EAC": "A", + "\xC7": "C", + "\u1E08": "C", + "\xC8": "E", + "\xC9": "E", + "\xCA": "E", + "\xCB": "E", + "\u1EBE": "E", + "\u1E16": "E", + "\u1EC0": "E", + "\u1E14": "E", + "\u1E1C": "E", + "\u0206": "E", + "\u1EBA": "E", + "\u1EBC": "E", + "\u1EB8": "E", + "\u1EC2": "E", + "\u1EC4": "E", + "\u1EC6": "E", + "\xCC": "I", + "\xCD": "I", + "\xCE": "I", + "\xCF": "I", + "\u1E2E": "I", + "\u020A": "I", + "\u1EC8": "I", + "\u1ECA": "I", + "\xD0": "D", + "\xD1": "N", + "\xD2": "O", + "\xD3": "O", + "\xD4": "O", + "\xD5": "O", + "\xD6": "O", + "\xD8": "O", + "\u1ED0": "O", + "\u1E4C": "O", + "\u1E52": "O", + "\u020E": "O", + "\u1ECE": "O", + "\u1ECC": "O", + "\u1ED4": "O", + "\u1ED6": "O", + "\u1ED8": "O", + "\u1EDC": "O", + "\u1EDE": "O", + "\u1EE0": "O", + "\u1EDA": "O", + "\u1EE2": "O", + "\xD9": "U", + "\xDA": "U", + "\xDB": "U", + "\xDC": "U", + "\u1EE6": "U", + "\u1EE4": "U", + "\u1EEC": "U", + "\u1EEE": "U", + "\u1EF0": "U", + "\xDD": "Y", + "\xE0": "a", + "\xE1": "a", + "\xE2": "a", + "\xE3": "a", + "\xE4": "a", + "\xE5": "a", + "\u1EA5": "a", + "\u1EAF": "a", + "\u1EB3": "a", + "\u1EB5": "a", + "\u1EB7": "a", + "\xE6": "ae", + "\u1EA7": "a", + "\u1EB1": "a", + "\u0203": "a", + "\u1EA3": "a", + "\u1EA1": "a", + "\u1EA9": "a", + "\u1EAB": "a", + "\u1EAD": "a", + "\xE7": "c", + "\u1E09": "c", + "\xE8": "e", + "\xE9": "e", + "\xEA": "e", + "\xEB": "e", + "\u1EBF": "e", + "\u1E17": "e", + "\u1EC1": "e", + "\u1E15": "e", + "\u1E1D": "e", + "\u0207": "e", + "\u1EBB": "e", + "\u1EBD": "e", + "\u1EB9": "e", + "\u1EC3": "e", + "\u1EC5": "e", + "\u1EC7": "e", + "\xEC": "i", + "\xED": "i", + "\xEE": "i", + "\xEF": "i", + "\u1E2F": "i", + "\u020B": "i", + "\u1EC9": "i", + "\u1ECB": "i", + "\xF0": "d", + "\xF1": "n", + "\xF2": "o", + "\xF3": "o", + "\xF4": "o", + "\xF5": "o", + "\xF6": "o", + "\xF8": "o", + "\u1ED1": "o", + "\u1E4D": "o", + "\u1E53": "o", + "\u020F": "o", + "\u1ECF": "o", + "\u1ECD": "o", + "\u1ED5": "o", + "\u1ED7": "o", + "\u1ED9": "o", + "\u1EDD": "o", + "\u1EDF": "o", + "\u1EE1": "o", + "\u1EDB": "o", + "\u1EE3": "o", + "\xF9": "u", + "\xFA": "u", + "\xFB": "u", + "\xFC": "u", + "\u1EE7": "u", + "\u1EE5": "u", + "\u1EED": "u", + "\u1EEF": "u", + "\u1EF1": "u", + "\xFD": "y", + "\xFF": "y", + "\u0100": "A", + "\u0101": "a", + "\u0102": "A", + "\u0103": "a", + "\u0104": "A", + "\u0105": "a", + "\u0106": "C", + "\u0107": "c", + "\u0108": "C", + "\u0109": "c", + "\u010A": "C", + "\u010B": "c", + "\u010C": "C", + "\u010D": "c", + "C\u0306": "C", + "c\u0306": "c", + "\u010E": "D", + "\u010F": "d", + "\u0110": "D", + "\u0111": "d", + "\u0112": "E", + "\u0113": "e", + "\u0114": "E", + "\u0115": "e", + "\u0116": "E", + "\u0117": "e", + "\u0118": "E", + "\u0119": "e", + "\u011A": "E", + "\u011B": "e", + "\u011C": "G", + "\u01F4": "G", + "\u011D": "g", + "\u01F5": "g", + "\u011E": "G", + "\u011F": "g", + "\u0120": "G", + "\u0121": "g", + "\u0122": "G", + "\u0123": "g", + "\u0124": "H", + "\u0125": "h", + "\u0126": "H", + "\u0127": "h", + "\u1E2A": "H", + "\u1E2B": "h", + "\u0128": "I", + "\u0129": "i", + "\u012A": "I", + "\u012B": "i", + "\u012C": "I", + "\u012D": "i", + "\u012E": "I", + "\u012F": "i", + "\u0130": "I", + "\u0131": "i", + "\u0132": "IJ", + "\u0133": "ij", + "\u0134": "J", + "\u0135": "j", + "\u0136": "K", + "\u0137": "k", + "\u1E30": "K", + "\u1E31": "k", + "K\u0306": "K", + "k\u0306": "k", + "\u0139": "L", + "\u013A": "l", + "\u013B": "L", + "\u013C": "l", + "\u013D": "L", + "\u013E": "l", + "\u013F": "L", + "\u0140": "l", + "\u0141": "l", + "\u0142": "l", + "\u1E3E": "M", + "\u1E3F": "m", + "M\u0306": "M", + "m\u0306": "m", + "\u0143": "N", + "\u0144": "n", + "\u0145": "N", + "\u0146": "n", + "\u0147": "N", + "\u0148": "n", + "\u0149": "n", + "N\u0306": "N", + "n\u0306": "n", + "\u014C": "O", + "\u014D": "o", + "\u014E": "O", + "\u014F": "o", + "\u0150": "O", + "\u0151": "o", + "\u0152": "OE", + "\u0153": "oe", + "P\u0306": "P", + "p\u0306": "p", + "\u0154": "R", + "\u0155": "r", + "\u0156": "R", + "\u0157": "r", + "\u0158": "R", + "\u0159": "r", + "R\u0306": "R", + "r\u0306": "r", + "\u0212": "R", + "\u0213": "r", + "\u015A": "S", + "\u015B": "s", + "\u015C": "S", + "\u015D": "s", + "\u015E": "S", + "\u0218": "S", + "\u0219": "s", + "\u015F": "s", + "\u0160": "S", + "\u0161": "s", + "\u0162": "T", + "\u0163": "t", + "\u021B": "t", + "\u021A": "T", + "\u0164": "T", + "\u0165": "t", + "\u0166": "T", + "\u0167": "t", + "T\u0306": "T", + "t\u0306": "t", + "\u0168": "U", + "\u0169": "u", + "\u016A": "U", + "\u016B": "u", + "\u016C": "U", + "\u016D": "u", + "\u016E": "U", + "\u016F": "u", + "\u0170": "U", + "\u0171": "u", + "\u0172": "U", + "\u0173": "u", + "\u0216": "U", + "\u0217": "u", + "V\u0306": "V", + "v\u0306": "v", + "\u0174": "W", + "\u0175": "w", + "\u1E82": "W", + "\u1E83": "w", + "X\u0306": "X", + "x\u0306": "x", + "\u0176": "Y", + "\u0177": "y", + "\u0178": "Y", + "Y\u0306": "Y", + "y\u0306": "y", + "\u0179": "Z", + "\u017A": "z", + "\u017B": "Z", + "\u017C": "z", + "\u017D": "Z", + "\u017E": "z", + "\u017F": "s", + "\u0192": "f", + "\u01A0": "O", + "\u01A1": "o", + "\u01AF": "U", + "\u01B0": "u", + "\u01CD": "A", + "\u01CE": "a", + "\u01CF": "I", + "\u01D0": "i", + "\u01D1": "O", + "\u01D2": "o", + "\u01D3": "U", + "\u01D4": "u", + "\u01D5": "U", + "\u01D6": "u", + "\u01D7": "U", + "\u01D8": "u", + "\u01D9": "U", + "\u01DA": "u", + "\u01DB": "U", + "\u01DC": "u", + "\u1EE8": "U", + "\u1EE9": "u", + "\u1E78": "U", + "\u1E79": "u", + "\u01FA": "A", + "\u01FB": "a", + "\u01FC": "AE", + "\u01FD": "ae", + "\u01FE": "O", + "\u01FF": "o", + "\xDE": "TH", + "\xFE": "th", + "\u1E54": "P", + "\u1E55": "p", + "\u1E64": "S", + "\u1E65": "s", + "X\u0301": "X", + "x\u0301": "x", + "\u0403": "\u0413", + "\u0453": "\u0433", + "\u040C": "\u041A", + "\u045C": "\u043A", + "A\u030B": "A", + "a\u030B": "a", + "E\u030B": "E", + "e\u030B": "e", + "I\u030B": "I", + "i\u030B": "i", + "\u01F8": "N", + "\u01F9": "n", + "\u1ED2": "O", + "\u1ED3": "o", + "\u1E50": "O", + "\u1E51": "o", + "\u1EEA": "U", + "\u1EEB": "u", + "\u1E80": "W", + "\u1E81": "w", + "\u1EF2": "Y", + "\u1EF3": "y", + "\u0200": "A", + "\u0201": "a", + "\u0204": "E", + "\u0205": "e", + "\u0208": "I", + "\u0209": "i", + "\u020C": "O", + "\u020D": "o", + "\u0210": "R", + "\u0211": "r", + "\u0214": "U", + "\u0215": "u", + "B\u030C": "B", + "b\u030C": "b", + "\u010C\u0323": "C", + "\u010D\u0323": "c", + "\xCA\u030C": "E", + "\xEA\u030C": "e", + "F\u030C": "F", + "f\u030C": "f", + "\u01E6": "G", + "\u01E7": "g", + "\u021E": "H", + "\u021F": "h", + "J\u030C": "J", + "\u01F0": "j", + "\u01E8": "K", + "\u01E9": "k", + "M\u030C": "M", + "m\u030C": "m", + "P\u030C": "P", + "p\u030C": "p", + "Q\u030C": "Q", + "q\u030C": "q", + "\u0158\u0329": "R", + "\u0159\u0329": "r", + "\u1E66": "S", + "\u1E67": "s", + "V\u030C": "V", + "v\u030C": "v", + "W\u030C": "W", + "w\u030C": "w", + "X\u030C": "X", + "x\u030C": "x", + "Y\u030C": "Y", + "y\u030C": "y", + "A\u0327": "A", + "a\u0327": "a", + "B\u0327": "B", + "b\u0327": "b", + "\u1E10": "D", + "\u1E11": "d", + "\u0228": "E", + "\u0229": "e", + "\u0190\u0327": "E", + "\u025B\u0327": "e", + "\u1E28": "H", + "\u1E29": "h", + "I\u0327": "I", + "i\u0327": "i", + "\u0197\u0327": "I", + "\u0268\u0327": "i", + "M\u0327": "M", + "m\u0327": "m", + "O\u0327": "O", + "o\u0327": "o", + "Q\u0327": "Q", + "q\u0327": "q", + "U\u0327": "U", + "u\u0327": "u", + "X\u0327": "X", + "x\u0327": "x", + "Z\u0327": "Z", + "z\u0327": "z", + "\u0439": "\u0438", + "\u0419": "\u0418", + "\u0451": "\u0435", + "\u0401": "\u0415" + }; + var chars = Object.keys(characterMap).join("|"); + var allAccents = new RegExp(chars, "g"); + var firstAccent = new RegExp(chars, ""); + function matcher(match2) { + return characterMap[match2]; + } + var removeAccents2 = function(string) { + return string.replace(allAccents, matcher); + }; + var hasAccents = function(string) { + return !!string.match(firstAccent); + }; + module.exports = removeAccents2; + module.exports.has = hasAccents; + module.exports.remove = removeAccents2; + } +}); + +// node_modules/fast-deep-equal/es6/index.js +var require_es6 = __commonJS({ + "node_modules/fast-deep-equal/es6/index.js"(exports, module) { + "use strict"; + module.exports = function equal(a2, b2) { + if (a2 === b2) return true; + if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { + if (a2.constructor !== b2.constructor) return false; + var length, i2, keys; + if (Array.isArray(a2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (!equal(a2[i2], b2[i2])) return false; + return true; + } + if (a2 instanceof Map && b2 instanceof Map) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + for (i2 of a2.entries()) + if (!equal(i2[1], b2.get(i2[0]))) return false; + return true; + } + if (a2 instanceof Set && b2 instanceof Set) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + return true; + } + if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (a2[i2] !== b2[i2]) return false; + return true; + } + if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; + if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); + if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); + keys = Object.keys(a2); + length = keys.length; + if (length !== Object.keys(b2).length) return false; + for (i2 = length; i2-- !== 0; ) + if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; + for (i2 = length; i2-- !== 0; ) { + var key = keys[i2]; + if (!equal(a2[key], b2[key])) return false; + } + return true; + } + return a2 !== a2 && b2 !== b2; + }; + } +}); + +// package-external:@wordpress/date +var require_date = __commonJS({ + "package-external:@wordpress/date"(exports, module) { + module.exports = window.wp.date; + } +}); + +// package-external:@wordpress/warning +var require_warning = __commonJS({ + "package-external:@wordpress/warning"(exports, module) { + module.exports = window.wp.warning; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/editor +var require_editor = __commonJS({ + "package-external:@wordpress/editor"(exports, module) { + module.exports = window.wp.editor; + } +}); + +// routes/post-list/stage.tsx +import { + useParams, + useNavigate, + useSearch, + Link, + useInvalidate +} from "@wordpress/route"; + +// node_modules/dequal/dist/index.mjs +var has = Object.prototype.hasOwnProperty; +function find(iter, tar, key) { + for (key of iter.keys()) { + if (dequal(key, tar)) return key; + } +} +function dequal(foo, bar) { + var ctor, len, tmp; + if (foo === bar) return true; + if (foo && bar && (ctor = foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + if (ctor === Array) { + if ((len = foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])) ; + } + return len === -1; + } + if (ctor === Set) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!bar.has(tmp)) return false; + } + return true; + } + if (ctor === Map) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len[0]; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!dequal(len[1], bar.get(tmp))) { + return false; + } + } + return true; + } + if (ctor === ArrayBuffer) { + foo = new Uint8Array(foo); + bar = new Uint8Array(bar); + } else if (ctor === DataView) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo.getInt8(len) === bar.getInt8(len)) ; + } + return len === -1; + } + if (ArrayBuffer.isView(foo)) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo[len] === bar[len]) ; + } + return len === -1; + } + if (!ctor || typeof foo === "object") { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + return foo !== foo && bar !== bar; +} + +// packages/views/build-module/use-view.mjs +var import_element = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + const preserved = (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} +function stripActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + const { [key]: _, ...rest } = result; + result = rest; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + result = { + ...result, + filters: (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ) + }; + } + if (activeViewOverrides.sort && view.sort?.field === activeViewOverrides.sort.field && view.sort?.direction === activeViewOverrides.sort.direction) { + result = { + ...result, + sort: defaultView?.sort + }; + } + if (activeViewOverrides.layout && "layout" in result && result.layout) { + const layout = { ...result.layout }; + for (const key of Object.keys(activeViewOverrides.layout)) { + delete layout[key]; + } + result = { + ...result, + layout: Object.keys(layout).length > 0 ? layout : void 0 + }; + } + if (activeViewOverrides.groupBy && "groupBy" in result) { + const { groupBy: _, ...rest } = result; + result = rest; + } + return result; +} + +// packages/views/build-module/use-view.mjs +function omit(obj, keys) { + const result = { ...obj }; + for (const key of keys) { + delete result[key]; + } + return result; +} +function useView(config) { + const { + kind, + name, + slug, + defaultView, + activeViewOverrides, + queryParams, + onChangeQueryParams + } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data.useSelect)( + (select2) => { + return select2(import_preferences.store).get( + "core/views", + preferenceKey + ); + }, + [preferenceKey] + ); + const { set } = (0, import_data.useDispatch)(import_preferences.store); + const baseView = persistedView ?? defaultView; + const page = Number(queryParams?.page ?? baseView.page ?? 1); + const search = queryParams?.search ?? baseView.search ?? ""; + const view = (0, import_element.useMemo)(() => { + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); + }, [baseView, page, search, activeViewOverrides, defaultView]); + const isModified = !!persistedView; + const updateView = (0, import_element.useCallback)( + (newView) => { + const urlParams = { + page: newView?.page, + search: newView?.search + }; + const preferenceView = stripActiveViewOverrides( + omit(newView, ["page", "search"]), + activeViewOverrides, + defaultView + ); + if (onChangeQueryParams && !dequal(urlParams, { page, search })) { + onChangeQueryParams(urlParams); + } + const comparableBaseView = stripActiveViewOverrides( + baseView, + activeViewOverrides, + defaultView + ); + const comparableDefaultView = stripActiveViewOverrides( + defaultView, + activeViewOverrides, + defaultView + ); + if (!dequal(comparableBaseView, preferenceView)) { + if (dequal(preferenceView, comparableDefaultView)) { + set("core/views", preferenceKey, void 0); + } else { + set("core/views", preferenceKey, preferenceView); + } + } + }, + [ + onChangeQueryParams, + page, + search, + baseView, + defaultView, + activeViewOverrides, + set, + preferenceKey + ] + ); + const resetToDefault = (0, import_element.useCallback)(() => { + set("core/views", preferenceKey, void 0); + }, [preferenceKey, set]); + return { + view, + isModified, + updateView, + resetToDefault + }; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); + +// packages/dataviews/build-module/dataviews/index.mjs +var import_element56 = __toESM(require_element(), 1); +var import_compose12 = __toESM(require_compose(), 1); + +// node_modules/@base-ui/utils/esm/useRefWithInit.js +var React2 = __toESM(require_react(), 1); +var UNINITIALIZED = {}; +function useRefWithInit(init2, initArg) { + const ref = React2.useRef(UNINITIALIZED); + if (ref.current === UNINITIALIZED) { + ref.current = init2(initArg); + } + return ref; +} + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var React5 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/useMergedRefs.js +function useMergedRefs(a2, b2, c2, d2) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChange(forkRef, a2, b2, c2, d2)) { + update(forkRef, [a2, b2, c2, d2]); + } + return forkRef.callback; +} +function useMergedRefsN(refs) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChangeN(forkRef, refs)) { + update(forkRef, refs); + } + return forkRef.callback; +} +function createForkRef() { + return { + callback: null, + cleanup: null, + refs: [] + }; +} +function didChange(forkRef, a2, b2, c2, d2) { + return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; +} +function didChangeN(forkRef, newRefs) { + return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]); +} +function update(forkRef, refs) { + forkRef.refs = refs; + if (refs.every((ref) => ref == null)) { + forkRef.callback = null; + return; + } + forkRef.callback = (instance) => { + if (forkRef.cleanup) { + forkRef.cleanup(); + forkRef.cleanup = null; + } + if (instance != null) { + const cleanupCallbacks = Array(refs.length).fill(null); + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const refCleanup = ref(instance); + if (typeof refCleanup === "function") { + cleanupCallbacks[i2] = refCleanup; + } + break; + } + case "object": { + ref.current = instance; + break; + } + default: + } + } + forkRef.cleanup = () => { + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const cleanupCallback = cleanupCallbacks[i2]; + if (typeof cleanupCallback === "function") { + cleanupCallback(); + } else { + ref(null); + } + break; + } + case "object": { + ref.current = null; + break; + } + default: + } + } + }; + } + }; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +var React4 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/reactVersion.js +var React3 = __toESM(require_react(), 1); +var majorVersion = parseInt(React3.version, 10); +function isReactVersionAtLeast(reactVersionToCheck) { + return majorVersion >= reactVersionToCheck; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +function getReactElementRef(element) { + if (!/* @__PURE__ */ React4.isValidElement(element)) { + return null; + } + const reactElement = element; + const propsWithRef = reactElement.props; + return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; +} + +// node_modules/@base-ui/utils/esm/mergeObjects.js +function mergeObjects(a2, b2) { + if (a2 && !b2) { + return a2; + } + if (!a2 && b2) { + return b2; + } + if (a2 || b2) { + return { + ...a2, + ...b2 + }; + } + return void 0; +} + +// node_modules/@base-ui/react/esm/utils/getStateAttributesProps.js +function getStateAttributesProps(state, customMapping) { + const props = {}; + for (const key in state) { + const value = state[key]; + if (customMapping?.hasOwnProperty(key)) { + const customProps = customMapping[key](value); + if (customProps != null) { + Object.assign(props, customProps); + } + continue; + } + if (value === true) { + props[`data-${key.toLowerCase()}`] = ""; + } else if (value) { + props[`data-${key.toLowerCase()}`] = value.toString(); + } + } + return props; +} + +// node_modules/@base-ui/react/esm/utils/resolveClassName.js +function resolveClassName(className, state) { + return typeof className === "function" ? className(state) : className; +} + +// node_modules/@base-ui/react/esm/utils/resolveStyle.js +function resolveStyle(style, state) { + return typeof style === "function" ? style(state) : style; +} + +// node_modules/@base-ui/react/esm/merge-props/mergeProps.js +var EMPTY_PROPS = {}; +function mergeProps(a2, b2, c2, d2, e2) { + let merged = { + ...resolvePropsGetter(a2, EMPTY_PROPS) + }; + if (b2) { + merged = mergeOne(merged, b2); + } + if (c2) { + merged = mergeOne(merged, c2); + } + if (d2) { + merged = mergeOne(merged, d2); + } + if (e2) { + merged = mergeOne(merged, e2); + } + return merged; +} +function mergePropsN(props) { + if (props.length === 0) { + return EMPTY_PROPS; + } + if (props.length === 1) { + return resolvePropsGetter(props[0], EMPTY_PROPS); + } + let merged = { + ...resolvePropsGetter(props[0], EMPTY_PROPS) + }; + for (let i2 = 1; i2 < props.length; i2 += 1) { + merged = mergeOne(merged, props[i2]); + } + return merged; +} +function mergeOne(merged, inputProps) { + if (isPropsGetter(inputProps)) { + return inputProps(merged); + } + return mutablyMergeInto(merged, inputProps); +} +function mutablyMergeInto(mergedProps, externalProps) { + if (!externalProps) { + return mergedProps; + } + for (const propName in externalProps) { + const externalPropValue = externalProps[propName]; + switch (propName) { + case "style": { + mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); + break; + } + case "className": { + mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); + break; + } + default: { + if (isEventHandler(propName, externalPropValue)) { + mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); + } else { + mergedProps[propName] = externalPropValue; + } + } + } + } + return mergedProps; +} +function isEventHandler(key, value) { + const code0 = key.charCodeAt(0); + const code1 = key.charCodeAt(1); + const code2 = key.charCodeAt(2); + return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); +} +function isPropsGetter(inputProps) { + return typeof inputProps === "function"; +} +function resolvePropsGetter(inputProps, previousProps) { + if (isPropsGetter(inputProps)) { + return inputProps(previousProps); + } + return inputProps ?? EMPTY_PROPS; +} +function mergeEventHandlers(ourHandler, theirHandler) { + if (!theirHandler) { + return ourHandler; + } + if (!ourHandler) { + return theirHandler; + } + return (event) => { + if (isSyntheticEvent(event)) { + const baseUIEvent = event; + makeEventPreventable(baseUIEvent); + const result2 = theirHandler(baseUIEvent); + if (!baseUIEvent.baseUIHandlerPrevented) { + ourHandler?.(baseUIEvent); + } + return result2; + } + const result = theirHandler(event); + ourHandler?.(event); + return result; + }; +} +function makeEventPreventable(event) { + event.preventBaseUIHandler = () => { + event.baseUIHandlerPrevented = true; + }; + return event; +} +function mergeClassNames(ourClassName, theirClassName) { + if (theirClassName) { + if (ourClassName) { + return theirClassName + " " + ourClassName; + } + return theirClassName; + } + return ourClassName; +} +function isSyntheticEvent(event) { + return event != null && typeof event === "object" && "nativeEvent" in event; +} + +// node_modules/@base-ui/utils/esm/empty.js +var EMPTY_ARRAY = Object.freeze([]); +var EMPTY_OBJECT = Object.freeze({}); + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var import_react = __toESM(require_react(), 1); +function useRenderElement(element, componentProps, params = {}) { + const renderProp = componentProps.render; + const outProps = useRenderElementProps(componentProps, params); + if (params.enabled === false) { + return null; + } + const state = params.state ?? EMPTY_OBJECT; + return evaluateRenderProp(element, renderProp, outProps, state); +} +function useRenderElementProps(componentProps, params = {}) { + const { + className: classNameProp, + style: styleProp, + render: renderProp + } = componentProps; + const { + state = EMPTY_OBJECT, + ref, + props, + stateAttributesMapping, + enabled = true + } = params; + const className = enabled ? resolveClassName(classNameProp, state) : void 0; + const style = enabled ? resolveStyle(styleProp, state) : void 0; + const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; + const outProps = enabled ? mergeObjects(stateProps, Array.isArray(props) ? mergePropsN(props) : props) ?? EMPTY_OBJECT : EMPTY_OBJECT; + if (typeof document !== "undefined") { + if (!enabled) { + useMergedRefs(null, null); + } else if (Array.isArray(ref)) { + outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); + } else { + outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); + } + } + if (!enabled) { + return EMPTY_OBJECT; + } + if (className !== void 0) { + outProps.className = mergeClassNames(outProps.className, className); + } + if (style !== void 0) { + outProps.style = mergeObjects(outProps.style, style); + } + return outProps; +} +function evaluateRenderProp(element, render4, props, state) { + if (render4) { + if (typeof render4 === "function") { + return render4(props, state); + } + const mergedProps = mergeProps(props, render4.props); + mergedProps.ref = props.ref; + return /* @__PURE__ */ React5.cloneElement(render4, mergedProps); + } + if (element) { + if (typeof element === "string") { + return renderTag(element, props); + } + } + throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage(8)); +} +function renderTag(Tag, props) { + if (Tag === "button") { + return /* @__PURE__ */ (0, import_react.createElement)("button", { + type: "button", + ...props, + key: props.key + }); + } + if (Tag === "img") { + return /* @__PURE__ */ (0, import_react.createElement)("img", { + alt: "", + ...props, + key: props.key + }); + } + return /* @__PURE__ */ React5.createElement(Tag, props); +} + +// node_modules/@base-ui/react/esm/use-render/useRender.js +function useRender(params) { + return useRenderElement(params.defaultTagName ?? "div", params, params); +} + +// node_modules/clsx/dist/clsx.mjs +function r(e2) { + var t2, f2, n2 = ""; + if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; + else if ("object" == typeof e2) if (Array.isArray(e2)) { + var o2 = e2.length; + for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2); + } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); + return n2; +} +function clsx() { + for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); + return n2; +} +var clsx_default = clsx; + +// packages/icons/build-module/library/arrow-down.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) }); + +// packages/icons/build-module/library/arrow-left.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) }); + +// packages/icons/build-module/library/arrow-right.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) }); + +// packages/icons/build-module/library/arrow-up.mjs +var import_primitives4 = __toESM(require_primitives(), 1); +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) }); + +// packages/icons/build-module/library/block-table.mjs +var import_primitives5 = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) }); + +// packages/icons/build-module/library/category.mjs +var import_primitives6 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var category_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z" }) }); + +// packages/icons/build-module/library/check.mjs +var import_primitives7 = __toESM(require_primitives(), 1); +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +var check_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) }); + +// packages/icons/build-module/library/close-small.mjs +var import_primitives8 = __toESM(require_primitives(), 1); +var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); +var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) }); + +// packages/icons/build-module/library/cog.mjs +var import_primitives9 = __toESM(require_primitives(), 1); +var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); +var cog_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z" }) }); + +// packages/icons/build-module/library/envelope.mjs +var import_primitives10 = __toESM(require_primitives(), 1); +var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); +var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z" }) }); + +// packages/icons/build-module/library/error.mjs +var import_primitives11 = __toESM(require_primitives(), 1); +var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); +var error_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z" }) }); + +// packages/icons/build-module/library/format-list-bullets-rtl.mjs +var import_primitives12 = __toESM(require_primitives(), 1); +var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) }); + +// packages/icons/build-module/library/format-list-bullets.mjs +var import_primitives13 = __toESM(require_primitives(), 1); +var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) }); + +// packages/icons/build-module/library/funnel.mjs +var import_primitives14 = __toESM(require_primitives(), 1); +var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); +var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) }); + +// packages/icons/build-module/library/link.mjs +var import_primitives15 = __toESM(require_primitives(), 1); +var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); +var link_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) }); + +// packages/icons/build-module/library/mobile.mjs +var import_primitives16 = __toESM(require_primitives(), 1); +var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); +var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) }); + +// packages/icons/build-module/library/more-vertical.mjs +var import_primitives17 = __toESM(require_primitives(), 1); +var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); +var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); + +// packages/icons/build-module/library/next.mjs +var import_primitives18 = __toESM(require_primitives(), 1); +var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); +var next_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); + +// packages/icons/build-module/library/previous.mjs +var import_primitives19 = __toESM(require_primitives(), 1); +var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); +var previous_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); + +// packages/icons/build-module/library/scheduled.mjs +var import_primitives20 = __toESM(require_primitives(), 1); +var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); +var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z" }) }); + +// packages/icons/build-module/library/search.mjs +var import_primitives21 = __toESM(require_primitives(), 1); +var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); +var search_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) }); + +// packages/icons/build-module/library/seen.mjs +var import_primitives22 = __toESM(require_primitives(), 1); +var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); +var seen_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) }); + +// packages/icons/build-module/library/unseen.mjs +var import_primitives23 = __toESM(require_primitives(), 1); +var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); +var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) }); + +// packages/ui/build-module/stack/stack.mjs +var import_element2 = __toESM(require_element(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='71d20935c2']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "71d20935c2"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")); + document.head.appendChild(style); +} +var style_default = { "stack": "_19ce0419607e1896__stack" }; +var gapTokens = { + xs: "var(--wpds-dimension-gap-xs, 4px)", + sm: "var(--wpds-dimension-gap-sm, 8px)", + md: "var(--wpds-dimension-gap-md, 12px)", + lg: "var(--wpds-dimension-gap-lg, 16px)", + xl: "var(--wpds-dimension-gap-xl, 24px)", + "2xl": "var(--wpds-dimension-gap-2xl, 32px)", + "3xl": "var(--wpds-dimension-gap-3xl, 40px)" +}; +var Stack = (0, import_element2.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) { + const style = { + gap: gap && gapTokens[gap], + alignItems: align, + justifyContent: justify, + flexDirection: direction, + flexWrap: wrap + }; + const element = useRender({ + render: render4, + ref, + props: mergeProps(props, { style, className: style_default.stack }) + }); + return element; +}); + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var import_element3 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/constants.mjs +var import_i18n = __toESM(require_i18n(), 1); +var OPERATOR_IS_ANY = "isAny"; +var OPERATOR_IS_NONE = "isNone"; +var OPERATOR_IS_ALL = "isAll"; +var OPERATOR_IS_NOT_ALL = "isNotAll"; +var OPERATOR_BETWEEN = "between"; +var OPERATOR_IN_THE_PAST = "inThePast"; +var OPERATOR_OVER = "over"; +var OPERATOR_IS = "is"; +var OPERATOR_IS_NOT = "isNot"; +var OPERATOR_LESS_THAN = "lessThan"; +var OPERATOR_GREATER_THAN = "greaterThan"; +var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual"; +var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual"; +var OPERATOR_BEFORE = "before"; +var OPERATOR_AFTER = "after"; +var OPERATOR_BEFORE_INC = "beforeInc"; +var OPERATOR_AFTER_INC = "afterInc"; +var OPERATOR_CONTAINS = "contains"; +var OPERATOR_NOT_CONTAINS = "notContains"; +var OPERATOR_STARTS_WITH = "startsWith"; +var OPERATOR_ON = "on"; +var OPERATOR_NOT_ON = "notOn"; +var SORTING_DIRECTIONS = ["asc", "desc"]; +var sortArrows = { asc: "\u2191", desc: "\u2193" }; +var sortValues = { asc: "ascending", desc: "descending" }; +var sortLabels = { + asc: (0, import_i18n.__)("Sort ascending"), + desc: (0, import_i18n.__)("Sort descending") +}; +var sortIcons = { + asc: arrow_up_default, + desc: arrow_down_default +}; +var LAYOUT_TABLE = "table"; +var LAYOUT_GRID = "grid"; +var LAYOUT_LIST = "list"; +var LAYOUT_ACTIVITY = "activity"; +var LAYOUT_PICKER_GRID = "pickerGrid"; +var LAYOUT_PICKER_TABLE = "pickerTable"; + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var DataViewsContext = (0, import_element3.createContext)({ + view: { type: LAYOUT_TABLE }, + onChangeView: () => { + }, + fields: [], + data: [], + paginationInfo: { + totalItems: 0, + totalPages: 0 + }, + selection: [], + onChangeSelection: () => { + }, + setOpenedFilter: () => { + }, + openedFilter: null, + getItemId: (item) => item.id, + isItemClickable: () => true, + renderItemLink: void 0, + containerWidth: 0, + containerRef: (0, import_element3.createRef)(), + resizeObserverRef: () => { + }, + defaultLayouts: { list: {}, grid: {}, table: {} }, + filters: [], + isShowingFilter: false, + setIsShowingFilter: () => { + }, + hasInitiallyLoaded: false, + hasInfiniteScrollHandler: false, + config: { + perPageSizes: [] + } +}); +DataViewsContext.displayName = "DataViewsContext"; +var dataviews_context_default = DataViewsContext; + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var import_i18n21 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_i18n9 = __toESM(require_i18n(), 1); +var import_components6 = __toESM(require_components(), 1); +var import_element11 = __toESM(require_element(), 1); +var import_keycodes = __toESM(require_keycodes(), 1); + +// packages/dataviews/build-module/components/dataviews-selection-checkbox/index.mjs +var import_components = __toESM(require_components(), 1); +var import_i18n2 = __toESM(require_i18n(), 1); +var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); +function DataViewsSelectionCheckbox({ + selection, + onChangeSelection, + item, + getItemId: getItemId2, + titleField, + disabled, + ...extraProps +}) { + const id = getItemId2(item); + const checked = !disabled && selection.includes(id); + const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n2.__)("(no title)"); + return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)( + import_components.CheckboxControl, + { + className: "dataviews-selection-checkbox", + "aria-label": selectionLabel, + "aria-disabled": disabled, + checked, + onChange: () => { + if (disabled) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + }, + ...extraProps + } + ); +} + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_components2 = __toESM(require_components(), 1); +var import_i18n3 = __toESM(require_i18n(), 1); +var import_element4 = __toESM(require_element(), 1); +var import_data3 = __toESM(require_data(), 1); +var import_compose = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/lock-unlock.mjs +var import_private_apis = __toESM(require_private_apis(), 1); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/dataviews" +); + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); +var { Menu, kebabCase } = unlock(import_components2.privateApis); +function ButtonTrigger({ + action, + onClick, + items, + variant +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + import_components2.Button, + { + disabled: !!action.disabled, + accessibleWhenDisabled: true, + size: "compact", + variant, + onClick, + children: label + } + ); +} +function MenuItemTrigger({ + action, + onClick, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.ItemLabel, { children: label }) }); +} +function ActionModal({ + action, + items, + closeModal +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader; + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + import_components2.Modal, + { + title: modalHeader || label, + __experimentalHideHeader: !!action.hideModalHeader, + onRequestClose: closeModal, + focusOnMount: action.modalFocusOnMount ?? true, + size: action.modalSize || "medium", + overlayClassName: `dataviews-action-modal dataviews-action-modal__${kebabCase( + action.id + )}`, + children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(action.RenderModal, { items, closeModal }) + } + ); +} +function ActionsMenuGroup({ + actions, + item, + registry, + setActiveModalAction +}) { + const { primaryActions, regularActions } = (0, import_element4.useMemo)(() => { + return actions.reduce( + (acc, action) => { + (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action); + return acc; + }, + { + primaryActions: [], + regularActions: [] + } + ); + }, [actions]); + const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + MenuItemTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item] + }, + action.id + )); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Menu.Group, { children: [ + renderActionGroup(primaryActions), + renderActionGroup(regularActions) + ] }); +} +function ItemActions({ + item, + actions, + isCompact +}) { + const registry = (0, import_data3.useRegistry)(); + const { primaryActions, eligibleActions } = (0, import_element4.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isCompact) { + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + isSmall: true, + registry + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)( + Stack, + { + direction: "row", + justify: "flex-end", + className: "dataviews-item-actions", + style: { + flexShrink: 0, + width: "auto" + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + registry + } + ) + ] + } + ); +} +function CompactItemActions({ + item, + actions, + isSmall, + registry +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)( + null + ); + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Menu, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + Menu.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + import_components2.Button, + { + size: isSmall ? "small" : "compact", + icon: more_vertical_default, + label: (0, import_i18n3.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + className: "dataviews-all-actions-button" + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ActionsMenuGroup, + { + actions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} +function PrimaryActions({ + item, + actions, + registry, + buttonVariant +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)(null); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isMobileViewport) { + return null; + } + if (!Array.isArray(actions) || actions.length === 0) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [ + actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ButtonTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item], + variant: buttonVariant + }, + action.id + )), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_components3 = __toESM(require_components(), 1); +var import_i18n5 = __toESM(require_i18n(), 1); +var import_element5 = __toESM(require_element(), 1); +var import_data4 = __toESM(require_data(), 1); +var import_compose2 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/utils/get-footer-message.mjs +var import_i18n4 = __toESM(require_i18n(), 1); +function getFooterMessage(selectionCount, itemsCount, totalItems) { + if (selectionCount > 0) { + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item selected", "%d Items selected", selectionCount), + selectionCount + ); + } + if (totalItems > itemsCount) { + return (0, import_i18n4.sprintf)( + /* translators: %1$d: number of items. %2$d: total number of items. */ + (0, import_i18n4._n)("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems), + itemsCount, + totalItems + ); + } + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item", "%d Items", itemsCount), + itemsCount + ); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); +function ActionWithModal({ + action, + items, + ActionTriggerComponent +}) { + const [isModalOpen, setIsModalOpen] = (0, import_element5.useState)(false); + const actionTriggerProps = { + action, + onClick: () => { + setIsModalOpen(true); + }, + items + }; + return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ActionTriggerComponent, { ...actionTriggerProps }), + isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionModal, + { + action, + items, + closeModal: () => setIsModalOpen(false) + } + ) + ] }); +} +function useHasAPossibleBulkAction(actions, item) { + return (0, import_element5.useMemo)(() => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }, [actions, item]); +} +function useSomeItemHasAPossibleBulkAction(actions, data) { + return (0, import_element5.useMemo)(() => { + return data.some((item) => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }); + }, [actions, data]); +} +function BulkSelectionCheckbox({ + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 +}) { + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return actions.some( + (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) + ); + }); + }, [data, actions]); + const selectedItems = data.filter( + (item) => selection.includes(getItemId2(item)) && selectableItems.includes(item) + ); + const areAllSelected = selectedItems.length === selectableItems.length; + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.CheckboxControl, + { + className: "dataviews-view-table-selection-checkbox", + checked: areAllSelected, + indeterminate: !areAllSelected && !!selectedItems.length, + onChange: () => { + if (areAllSelected) { + onChangeSelection([]); + } else { + onChangeSelection( + selectableItems.map((item) => getItemId2(item)) + ); + } + }, + "aria-label": areAllSelected ? (0, import_i18n5.__)("Deselect all") : (0, import_i18n5.__)("Select all") + } + ); +} +function ActionTrigger({ + action, + onClick, + isBusy, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + if (isMobile) { + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + label, + icon: action.icon, + size: "compact", + onClick, + isBusy + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + size: "compact", + onClick, + isBusy, + children: label + } + ); +} +var EMPTY_ARRAY2 = []; +function ActionButton({ + action, + selectedItems, + actionInProgress, + setActionInProgress +}) { + const registry = (0, import_data4.useRegistry)(); + const selectedEligibleItems = (0, import_element5.useMemo)(() => { + return selectedItems.filter((item) => { + return !action.isEligible || action.isEligible(item); + }); + }, [action, selectedItems]); + if ("RenderModal" in action) { + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionWithModal, + { + action, + items: selectedEligibleItems, + ActionTriggerComponent: ActionTrigger + }, + action.id + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionTrigger, + { + action, + onClick: async () => { + setActionInProgress(action.id); + await action.callback(selectedItems, { + registry + }); + setActionInProgress(null); + }, + items: selectedEligibleItems, + isBusy: actionInProgress === action.id + }, + action.id + ); +} +function renderFooterContent(data, actions, getItemId2, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) { + const message2 = getFooterMessage( + selection.length, + data.length, + paginationInfo.totalItems + ); + return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__container", + gap: "md", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ), + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }), + /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__action-buttons", + gap: "xs", + children: [ + actionsToShow.map((action) => { + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + ActionButton, + { + action, + selectedItems, + actionInProgress, + setActionInProgress + }, + action.id + ); + }), + selectedItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + import_components3.Button, + { + icon: close_small_default, + showTooltip: true, + tooltipPosition: "top", + size: "compact", + label: (0, import_i18n5.__)("Cancel"), + disabled: !!actionInProgress, + accessibleWhenDisabled: false, + onClick: () => { + onChangeSelection(EMPTY_ARRAY2); + } + } + ) + ] + } + ) + ] + } + ); +} +function FooterContent({ + selection, + actions, + onChangeSelection, + data, + getItemId: getItemId2, + paginationInfo +}) { + const [actionInProgress, setActionInProgress] = (0, import_element5.useState)( + null + ); + const footerContentRef = (0, import_element5.useRef)(void 0); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + const bulkActions = (0, import_element5.useMemo)( + () => actions.filter((action) => action.supportsBulk), + [actions] + ); + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return bulkActions.some( + (action) => !action.isEligible || action.isEligible(item) + ); + }); + }, [data, bulkActions]); + const selectedItems = (0, import_element5.useMemo)(() => { + return data.filter( + (item) => selection.includes(getItemId2(item)) && selectableItems.includes(item) + ); + }, [selection, data, getItemId2, selectableItems]); + const actionsToShow = (0, import_element5.useMemo)( + () => actions.filter((action) => { + return action.supportsBulk && (!isMobile || action.icon) && selectedItems.some( + (item) => !action.isEligible || action.isEligible(item) + ); + }), + [actions, selectedItems, isMobile] + ); + if (!actionInProgress) { + if (footerContentRef.current) { + footerContentRef.current = void 0; + } + return renderFooterContent( + data, + actions, + getItemId2, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } else if (!footerContentRef.current) { + footerContentRef.current = renderFooterContent( + data, + actions, + getItemId2, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } + return footerContentRef.current; +} +function BulkActionsFooter() { + const { + data, + selection, + actions = EMPTY_ARRAY2, + onChangeSelection, + getItemId: getItemId2, + paginationInfo + } = (0, import_element5.useContext)(dataviews_context_default); + return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( + FooterContent, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2, + paginationInfo + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_i18n6 = __toESM(require_i18n(), 1); +var import_components4 = __toESM(require_components(), 1); +var import_element6 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/utils/get-hideable-fields.mjs +function getHideableFields(view, fields) { + const togglableFields = [ + view?.titleField, + view?.mediaField, + view?.descriptionField + ].filter(Boolean); + return fields.filter( + (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu2 } = unlock(import_components4.privateApis); +function WithMenuSeparators({ children }) { + return import_element6.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_element6.Fragment, { children: [ + i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Separator, {}), + child + ] }, i2)); +} +var _HeaderMenu = (0, import_element6.forwardRef)(function HeaderMenu({ + fieldId, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove = true, + canInsertLeft = true, + canInsertRight = true +}, ref) { + const visibleFieldIds = view.fields ?? []; + const index = visibleFieldIds?.indexOf(fieldId); + const isSorted = view.sort?.field === fieldId; + let isHidable = false; + let isSortable = false; + let canAddFilter = false; + let operators = []; + const field = fields.find((f2) => f2.id === fieldId); + const { setIsShowingFilter } = (0, import_element6.useContext)(dataviews_context_default); + if (!field) { + return null; + } + isHidable = field.enableHiding !== false; + isSortable = field.enableSorting !== false; + const header = field.header; + operators = !!field.filterBy && field.filterBy?.operators || []; + canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary; + if (!isSortable && !canMove && !isHidable && !canAddFilter) { + return header; + } + const hiddenFields = getHideableFields(view, fields).filter( + (f2) => !visibleFieldIds.includes(f2.id) + ); + const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length; + const isRtl = (0, import_i18n6.isRTL)(); + return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)( + Menu2.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + import_components4.Button, + { + size: "compact", + className: "dataviews-view-table-header-button", + ref, + variant: "tertiary" + } + ), + children: [ + header, + view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(WithMenuSeparators, { children: [ + isSortable && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map( + (direction) => { + const isChecked = view.sort && isSorted && view.sort.direction === direction; + const value = `${fieldId}-${direction}`; + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.RadioItem, + { + name: "view-table-sorting", + value, + checked: isChecked, + onChange: () => { + onChangeView({ + ...view, + sort: { + field: fieldId, + direction + }, + showLevels: false + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] }) + }, + value + ); + } + ) }), + canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: funnel_default }), + onClick: () => { + setOpenedFilter(fieldId); + setIsShowingFilter(true); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: fieldId, + value: void 0, + operator: operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Add filter") }) + } + ) }), + (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2.Group, { children: [ + canMove && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: arrow_left_default }), + disabled: isRtl ? index >= visibleFieldIds.length - 1 : index < 1, + onClick: () => { + const targetIndex = isRtl ? index + 1 : index - 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move left") }) + } + ), + canMove && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: arrow_right_default }), + disabled: isRtl ? index < 1 : index >= visibleFieldIds.length - 1, + onClick: () => { + const targetIndex = isRtl ? index - 1 : index + 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move right") }) + } + ), + canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert left") }) }), + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index + 1 : index; + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert right") }) }), + /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index : index + 1; + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: unseen_default }), + onClick: () => { + onHide(field); + onChangeView({ + ...view, + fields: visibleFieldIds.filter( + (id) => id !== fieldId + ) + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Hide column") }) + } + ) + ] }) + ] }) }) + ] }); +}); +var ColumnHeaderMenu = _HeaderMenu; +var column_header_menu_default = ColumnHeaderMenu; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs +var import_element7 = __toESM(require_element(), 1); +var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); +function getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className +}) { + if (!isItemClickable(item) || !onClickItem) { + return { className }; + } + return { + className: className ? `${className} ${className}--clickable` : void 0, + role: "button", + tabIndex: 0, + onClick: (event) => { + event.stopPropagation(); + onClickItem(item); + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + onClickItem(item); + } + } + }; +} +function ItemClickWrapper({ + item, + isItemClickable, + onClickItem, + renderItemLink, + className, + children, + ...extraProps +}) { + if (!isItemClickable(item)) { + return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className, ...extraProps, children }); + } + if (renderItemLink) { + const renderedElement = renderItemLink({ + item, + className: `${className} ${className}--clickable`, + ...extraProps, + children + }); + return (0, import_element7.cloneElement)(renderedElement, { + onClick: (event) => { + event.stopPropagation(); + if (renderedElement.props.onClick) { + renderedElement.props.onClick(event); + } + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + if (renderedElement.props.onKeyDown) { + renderedElement.props.onKeyDown(event); + } + } + } + }); + } + const clickProps = getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className + }); + return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ...clickProps, ...extraProps, children }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-primary.mjs +var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); +function ColumnPrimary({ + item, + level, + titleField, + mediaField, + descriptionField, + onClickItem, + renderItemLink, + isItemClickable +}) { + return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Stack, { direction: "row", gap: "md", align: "flex-start", justify: "flex-start", children: [ + mediaField && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media", + "aria-label": isItemClickable(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "32px" } + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)( + Stack, + { + direction: "column", + align: "flex-start", + className: "dataviews-view-table__primary-column-content", + children: [ + titleField && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-title-field", + children: [ + level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "dataviews-view-table__level", children: [ + Array(level).fill("\u2014").join(" "), + "\xA0" + ] }), + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(titleField.render, { item, field: titleField }) + ] + } + ), + descriptionField && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) + ] + } + ) + ] }); +} +var column_primary_default = ColumnPrimary; + +// packages/dataviews/build-module/components/dataviews-layouts/table/use-is-horizontal-scroll-end.mjs +var import_compose3 = __toESM(require_compose(), 1); +var import_element8 = __toESM(require_element(), 1); +var import_i18n7 = __toESM(require_i18n(), 1); +var isScrolledToEnd = (element) => { + if ((0, import_i18n7.isRTL)()) { + const scrollLeft = Math.abs(element.scrollLeft); + return scrollLeft <= 1; + } + return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1; +}; +function useIsHorizontalScrollEnd({ + scrollContainerRef, + enabled = false +}) { + const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element8.useState)(false); + const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)( + (0, import_element8.useCallback)(() => { + const scrollContainer = scrollContainerRef.current; + if (scrollContainer) { + setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer)); + } + }, [scrollContainerRef, setIsHorizontalScrollEnd]), + 200 + ); + (0, import_element8.useEffect)(() => { + if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) { + return () => { + }; + } + handleIsHorizontalScrollEnd(); + scrollContainerRef.current.addEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.addEventListener("resize", handleIsHorizontalScrollEnd); + return () => { + scrollContainerRef.current?.removeEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.removeEventListener("resize", handleIsHorizontalScrollEnd); + }; + }, [scrollContainerRef, enabled]); + return isHorizontalScrollEnd; +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/get-data-by-group.mjs +function getDataByGroup(data, groupByField) { + return data.reduce((groups, item) => { + const groupName = groupByField.getValue({ item }); + if (!groups.has(groupName)) { + groups.set(groupName, []); + } + groups.get(groupName)?.push(item); + return groups; + }, /* @__PURE__ */ new Map()); +} + +// packages/dataviews/build-module/components/dataviews-view-config/properties-section.mjs +var import_components5 = __toESM(require_components(), 1); +var import_i18n8 = __toESM(require_i18n(), 1); +var import_element9 = __toESM(require_element(), 1); +var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); +function FieldItem({ + field, + isVisible: isVisible2, + onToggleVisibility +}) { + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components5.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Stack, { direction: "row", gap: "sm", justify: "flex-start", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components5.Icon, { icon: check_default }) }), + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "dataviews-view-config__label", children: field.label }) + ] }) }); +} +function isDefined(item) { + return !!item; +} +function PropertiesSection({ + showLabel = true +}) { + const { view, fields, onChangeView } = (0, import_element9.useContext)(dataviews_context_default); + const regularFields = getHideableFields(view, fields); + if (!regularFields?.length) { + return null; + } + const titleField = fields.find((f2) => f2.id === view.titleField); + const previewField = fields.find((f2) => f2.id === view.mediaField); + const descriptionField = fields.find( + (f2) => f2.id === view.descriptionField + ); + const lockedFields = [ + { + field: titleField, + isVisibleFlag: "showTitle" + }, + { + field: previewField, + isVisibleFlag: "showMedia" + }, + { + field: descriptionField, + isVisibleFlag: "showDescription" + } + ].filter(({ field }) => isDefined(field)); + const visibleFieldIds = view.fields ?? []; + const visibleRegularFieldsCount = regularFields.filter( + (f2) => visibleFieldIds.includes(f2.id) + ).length; + const visibleLockedFields = lockedFields.filter( + ({ isVisibleFlag }) => ( + // @ts-expect-error + view[isVisibleFlag] ?? true + ) + ); + const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount; + const isSingleVisibleLockedField = totalVisibleFields === 1 && visibleLockedFields.length === 1; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Stack, { direction: "column", className: "dataviews-field-control", children: [ + showLabel && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components5.BaseControl.VisualLabel, { children: (0, import_i18n8.__)("Properties") }), + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-config__properties", + children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_components5.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [ + lockedFields.map(({ field, isVisibleFlag }) => { + const isVisible2 = view[isVisibleFlag] ?? true; + const fieldToRender = isSingleVisibleLockedField && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + [isVisibleFlag]: !isVisible2 + }); + } + }, + field.id + ); + }), + regularFields.map((field) => { + const isVisible2 = visibleFieldIds.includes(field.id); + const fieldToRender = totalVisibleFields === 1 && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + fields: isVisible2 ? visibleFieldIds.filter( + (fieldId) => fieldId !== field.id + ) : [...visibleFieldIds, field.id] + }); + } + }, + field.id + ); + }) + ] }) + } + ) + ] }); +} + +// packages/dataviews/build-module/hooks/use-delayed-loading.mjs +var import_element10 = __toESM(require_element(), 1); +function useDelayedLoading(isLoading, options = { delay: 400 }) { + const [showLoader, setShowLoader] = (0, import_element10.useState)(false); + (0, import_element10.useEffect)(() => { + if (!isLoading) { + return; + } + const timeout = setTimeout(() => { + setShowLoader(true); + }, options.delay); + return () => { + clearTimeout(timeout); + setShowLoader(false); + }; + }, [isLoading, options.delay]); + return showLoader; +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); +function getEffectiveAlign(explicitAlign, fieldType) { + if (explicitAlign) { + return explicitAlign; + } + if (fieldType === "integer" || fieldType === "number") { + return "end"; + } + return void 0; +} +function TableColumnField({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(field.render, { item, field }) }); +} +function TableRow({ + hasBulkActions, + item, + level, + actions, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + isItemClickable, + onClickItem, + renderItemLink, + onChangeSelection, + isActionsColumnSticky, + posinset +}) { + const { paginationInfo } = (0, import_element11.useContext)(dataviews_context_default); + const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item); + const isSelected2 = hasPossibleBulkAction && selection.includes(id); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const isTouchDeviceRef = (0, import_element11.useRef)(false); + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": hasPossibleBulkAction && isSelected2, + "has-bulk-actions": hasPossibleBulkAction + }), + onTouchStart: () => { + isTouchDeviceRef.current = true; + }, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : void 0, + onMouseDown: (event) => { + const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) { + event?.preventDefault(); + } + }, + onClick: (event) => { + if (!hasPossibleBulkAction) { + return; + } + const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") { + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: !hasPossibleBulkAction + } + ) }) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + column_primary_default, + { + item, + level, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable, + onClickItem, + renderItemLink + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find((f2) => f2.id === column); + const effectiveAlign = getEffectiveAlign(align, field?.type); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + TableColumnField, + { + fields, + item, + column, + align: effectiveAlign + } + ) + }, + column + ); + }), + !!actions?.length && // Disable reason: we are not making the element interactive, + // but preventing any click events from bubbling up to the + // table row. This allows us to add a click handler to the row + // itself (to toggle row selection) without erroneously + // intercepting click events from ItemActions. + /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "td", + { + className: clsx_default("dataviews-view-table__actions-column", { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": isActionsColumnSticky + }), + onClick: (e2) => e2.stopPropagation(), + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ItemActions, { item, actions }) + } + ) + ] + } + ); +} +function ViewTable({ + actions, + data, + fields, + getItemId: getItemId2, + getItemLevel: getItemLevel2, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + view, + className, + empty +}) { + const { containerRef } = (0, import_element11.useContext)(dataviews_context_default); + const isDelayedLoading = useDelayedLoading(isLoading); + const headerMenuRefs = (0, import_element11.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element11.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element11.useState)(); + const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element11.useState)(null); + (0, import_element11.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element11.useId)(); + const isHorizontalScrollEnd = useIsHorizontalScrollEnd({ + scrollContainerRef: containerRef, + enabled: !!actions?.length + }); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const handleHeaderContextMenu = (event) => { + event.preventDefault(); + event.stopPropagation(); + const virtualAnchor = { + getBoundingClientRect: () => ({ + x: event.clientX, + y: event.clientY, + top: event.clientY, + left: event.clientX, + right: event.clientX, + bottom: event.clientY, + width: 0, + height: 0, + toJSON: () => ({}) + }) + }; + window.requestAnimationFrame(() => { + setContextMenuAnchor(virtualAnchor); + }); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const isRtl = (0, import_i18n9.isRTL)(); + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + id: tableNoticeId, + children: empty + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)( + "table", + { + className: clsx_default("dataviews-view-table", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "has-bulk-actions": hasBulkActions, + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : void 0, + inert: !isInfiniteScroll && isLoading ? "true" : void 0, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("colgroup", { children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-checkbox" }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-first-data" }), + columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "col", + { + className: clsx_default( + `dataviews-view-table__col-${column}`, + { + "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0 + } + ) + }, + `col-${column}` + )), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-actions" }) + ] }), + contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components6.Popover, + { + anchor: contextMenuAnchor, + onClose: () => setContextMenuAnchor(null), + placement: "bottom-start", + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PropertiesSection, { showLabel: false }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("tr", { className: "dataviews-view-table__row", children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "th", + { + className: "dataviews-view-table__checkbox-column", + scope: "col", + onContextMenu: handleHeaderContextMenu, + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false, + canInsertLeft: isRtl ? view.layout?.enableMoving ?? true : false, + canInsertRight: isRtl ? false : view.layout?.enableMoving ?? true + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find( + (f2) => f2.id === column + ); + const effectiveAlign = getEffectiveAlign( + align, + field?.type + ); + const canInsertOrMove = view.layout?.enableMoving ?? true; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: effectiveAlign + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: canInsertOrMove, + canInsertLeft: canInsertOrMove, + canInsertRight: canInsertOrMove + } + ) + }, + column + ); + }), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "th", + { + className: clsx_default( + "dataviews-view-table__actions-column", + { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd + } + ), + children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n9.__)("Actions") }) + } + ) + ] }) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("tbody", { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0), + className: "dataviews-view-table__group-header-cell", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n9.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n9.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) }), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel2 === "function" ? getItemLevel2(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd + }, + getItemId2(item) + )) + ] }, `group-${groupName}`) + ) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel2 === "function" ? getItemLevel2(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd, + posinset: isInfiniteScroll ? index + 1 : void 0 + }, + getItemId2(item) + )) }) + ] + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "dataviews-loading", id: tableNoticeId, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components6.Spinner, {}) }) }) + ] }); +} +var table_default = ViewTable; + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_components9 = __toESM(require_components(), 1); +var import_i18n12 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_components8 = __toESM(require_components(), 1); +var import_i18n11 = __toESM(require_i18n(), 1); +var import_compose4 = __toESM(require_compose(), 1); +var import_keycodes2 = __toESM(require_keycodes(), 1); +var import_element13 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/preview-size-picker.mjs +var import_components7 = __toESM(require_components(), 1); +var import_i18n10 = __toESM(require_i18n(), 1); +var import_element12 = __toESM(require_element(), 1); +var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); +var imageSizes = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +var DEFAULT_PREVIEW_SIZE = imageSizes[2].value; +function useGridColumns() { + const context = (0, import_element12.useContext)(dataviews_context_default); + const view = context.view; + return (0, import_element12.useMemo)(() => { + const containerWidth = context.containerWidth; + const gap = 32; + const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE; + const columns = Math.floor( + (containerWidth + gap) / (previewSize + gap) + ); + return Math.max(1, columns); + }, [context.containerWidth, view.layout?.previewSize]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); +var { Badge } = unlock(import_components8.privateApis); +function chunk(array, size) { + const chunks = []; + for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) { + chunks.push(array.slice(i2, i2 + size)); + } + return chunks; +} +var GridItem = (0, import_element13.forwardRef)(function GridItem2({ + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config, + ...props +}, ref) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasBulkAction = useHasAPossibleBulkAction(actions, item); + const id = getItemId2(item); + const instanceId = (0, import_compose4.useInstanceId)(GridItem2); + const isSelected2 = selection.includes(id); + const mediaPlaceholder = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "dataviews-view-grid__media-placeholder" }); + const rendersMediaField = showMedia && mediaField?.render; + const renderedMediaField = rendersMediaField ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : mediaPlaceholder; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(titleField.render, { item, field: titleField }) : null; + let mediaA11yProps; + let titleA11yProps; + if (isItemClickable(item) && onClickItem) { + if (renderedTitleField) { + mediaA11yProps = { + "aria-labelledby": `dataviews-view-grid__title-field-${instanceId}` + }; + titleA11yProps = { + id: `dataviews-view-grid__title-field-${instanceId}` + }; + } else { + mediaA11yProps = { + "aria-label": (0, import_i18n11.__)("Navigate to item") + }; + } + } + return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)( + Stack, + { + direction: "column", + ...props, + ref, + className: clsx_default( + props.className, + "dataviews-view-grid__row__gridcell", + "dataviews-view-grid__card", + { + "is-selected": hasBulkAction && isSelected2 + } + ), + onClickCapture: (event) => { + props.onClickCapture?.(event); + if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) { + event.stopPropagation(); + event.preventDefault(); + if (!hasBulkAction) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: clsx_default("dataviews-view-grid__media", { + "dataviews-view-grid__media--placeholder": !rendersMediaField + }), + ...mediaA11yProps, + children: renderedMediaField + } + ), + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: !hasBulkAction + } + ), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ItemActions, { item, actions, isCompact: true }) }), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "dataviews-view-grid__title", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-grid__title-field dataviews-title-field", + ...titleA11yProps, + title: titleField?.getValueFormatted({ + item, + field: titleField + }) || void 0, + children: renderedTitleField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + Badge, + { + className: "dataviews-view-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Flex, + { + className: "dataviews-view-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components8.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components8.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }), + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.FlexItem, + { + className: "dataviews-view-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + } + ); +}); +function CompositeGrid({ + data, + isInfiniteScroll, + className, + inert, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + actions +}) { + const { paginationInfo, resizeObserverRef } = (0, import_element13.useContext)(dataviews_context_default); + const gridColumns = useGridColumns(); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const size = "900px"; + const totalRows = Math.ceil(data.length / gridColumns); + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Composite, + { + role: isInfiniteScroll ? "feed" : "grid", + className: clsx_default("dataviews-view-grid", className), + focusWrap: true, + "aria-busy": isLoading, + "aria-rowcount": isInfiniteScroll ? void 0 : totalRows, + ref: resizeObserverRef, + inert, + children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Composite.Row, + { + render: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + "div", + { + role: "row", + "aria-rowindex": i2 + 1, + "aria-label": (0, import_i18n11.sprintf)( + /* translators: %d: The row number in the grid */ + (0, import_i18n11.__)("Row %d"), + i2 + 1 + ), + className: "dataviews-view-grid__row", + style: { + gridTemplateColumns: `repeat( ${gridColumns}, minmax(0, 1fr) )` + } + } + ), + children: row.map((item, indexInRow) => { + const index = i2 * gridColumns + indexInRow; + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + import_components8.Composite.Item, + { + render: (props) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( + GridItem, + { + ...props, + role: isInfiniteScroll ? "article" : "gridcell", + "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0, + "aria-posinset": isInfiniteScroll ? index + 1 : void 0, + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config: { + sizes: size + } + } + ) + }, + getItemId2(item) + ); + }) + }, + i2 + )) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); +function ViewGrid({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + selection, + view, + className, + empty +}) { + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const gridProps = { + className: clsx_default(className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + actions + }; + return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Stack, { direction: "column", gap: "lg", children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("h3", { className: "dataviews-view-grid__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n12.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n12.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + CompositeGrid, + { + ...gridProps, + data: groupItems, + isInfiniteScroll: false + } + ) + ] + }, + groupName + ) + ) }), + // Render a single grid with all data. + !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + CompositeGrid, + { + ...gridProps, + data, + isInfiniteScroll: !!isInfiniteScroll + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components9.Spinner, {}) }) + ] + }); +} +var grid_default = ViewGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/list/index.mjs +var import_compose5 = __toESM(require_compose(), 1); +var import_components10 = __toESM(require_components(), 1); +var import_element14 = __toESM(require_element(), 1); +var import_i18n13 = __toESM(require_i18n(), 1); +var import_data5 = __toESM(require_data(), 1); +var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu3 } = unlock(import_components10.privateApis); +function generateItemWrapperCompositeId(idPrefix) { + return `${idPrefix}-item-wrapper`; +} +function generatePrimaryActionCompositeId(idPrefix, primaryActionId) { + return `${idPrefix}-primary-action-${primaryActionId}`; +} +function generateDropdownTriggerCompositeId(idPrefix) { + return `${idPrefix}-dropdown`; +} +function PrimaryActionGridCell({ + idPrefix, + primaryAction, + item +}) { + const registry = (0, import_data5.useRegistry)(); + const [isModalOpen, setIsModalOpen] = (0, import_element14.useState)(false); + const compositeItemId = generatePrimaryActionCompositeId( + idPrefix, + primaryAction.id + ); + const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]); + return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + text: label, + size: "small", + onClick: () => setIsModalOpen(true) + } + ), + children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ActionModal, + { + action: primaryAction, + items: [item], + closeModal: () => setIsModalOpen(false) + } + ) + } + ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + size: "small", + onClick: () => { + primaryAction.callback([item], { registry }); + }, + children: label + } + ) + } + ) }, primaryAction.id); +} +function ListItem({ + view, + actions, + idPrefix, + isSelected: isSelected2, + item, + titleField, + mediaField, + descriptionField, + onSelect, + otherFields, + onDropdownTriggerKeyDown, + posinset +}) { + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element14.useRef)(null); + const labelId = `${idPrefix}-label`; + const descriptionId = `${idPrefix}-description`; + const registry = (0, import_data5.useRegistry)(); + const [isHovered, setIsHovered] = (0, import_element14.useState)(false); + const [activeModalAction, setActiveModalAction] = (0, import_element14.useState)( + null + ); + const handleHover = ({ type }) => { + const isHover = type === "mouseenter"; + setIsHovered(isHover); + }; + const { paginationInfo } = (0, import_element14.useContext)(dataviews_context_default); + (0, import_element14.useEffect)(() => { + if (isSelected2) { + itemRef.current?.scrollIntoView({ + behavior: "auto", + block: "nearest", + inline: "nearest" + }); + } + }, [isSelected2]); + const { primaryAction, eligibleActions } = (0, import_element14.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryAction: _primaryActions[0], + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1; + const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "52px" } + } + ) }) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(titleField.render, { item, field: titleField }) : null; + const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "row", + gap: "md", + className: "dataviews-view-list__item-actions", + children: [ + primaryAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + PrimaryActionGridCell, + { + idPrefix, + primaryAction, + item + } + ), + !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { role: "gridcell", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Menu3, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + Menu3.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: generateDropdownTriggerCompositeId( + idPrefix + ), + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Button, + { + size: "small", + icon: more_vertical_default, + label: (0, import_i18n13.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + onKeyDown: onDropdownTriggerKeyDown + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ActionsMenuGroup, + { + actions: eligibleActions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }) + ] + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Row, + { + ref: itemRef, + render: ( + /* aria-posinset breaks Composite.Row if passed to it directly. */ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0 + } + ) + ), + role: infiniteScrollEnabled ? "article" : "row", + className: clsx_default({ + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleHover, + onMouseLeave: handleHover, + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-view-list__item-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite.Item, + { + id: generateItemWrapperCompositeId(idPrefix), + "aria-pressed": isSelected2, + "aria-labelledby": labelId, + "aria-describedby": descriptionId, + className: "dataviews-view-list__item", + onClick: () => onSelect(item) + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "row", + gap: "md", + justify: "start", + align: "flex-start", + style: { flex: 1, minWidth: 0 }, + children: [ + renderedMediaField, + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "column", + gap: "xs", + className: "dataviews-view-list__field-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Stack, { direction: "row", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + className: "dataviews-title-field dataviews-view-list__title-field", + id: labelId, + children: renderedTitleField + } + ), + usedActions + ] }), + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + className: "dataviews-view-list__fields", + id: descriptionId, + children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + "div", + { + className: "dataviews-view-list__field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.VisuallyHidden, + { + as: "span", + className: "dataviews-view-list__field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) + } + ) + ] + } + ) + ] + } + ) + ] + } + ) + } + ); +} +function isDefined2(item) { + return !!item; +} +function ViewList(props) { + const { + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + selection, + view, + className, + empty + } = props; + const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list"); + const isDelayedLoading = useDelayedLoading(!!isLoading); + const selectedItem = data?.findLast( + (item) => selection.includes(getItemId2(item)) + ); + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2); + const onSelect = (item) => onChangeSelection([getItemId2(item)]); + const generateCompositeItemIdPrefix = (0, import_element14.useCallback)( + (item) => `${baseId}-${getItemId2(item)}`, + [baseId, getItemId2] + ); + const isActiveCompositeItem = (0, import_element14.useCallback)( + (item, idToCheck) => { + return idToCheck.startsWith( + generateCompositeItemIdPrefix(item) + ); + }, + [generateCompositeItemIdPrefix] + ); + const [activeCompositeId, setActiveCompositeId] = (0, import_element14.useState)(void 0); + (0, import_element14.useEffect)(() => { + if (selectedItem) { + setActiveCompositeId( + generateItemWrapperCompositeId( + generateCompositeItemIdPrefix(selectedItem) + ) + ); + } + }, [selectedItem, generateCompositeItemIdPrefix]); + const activeItemIndex = data.findIndex( + (item) => isActiveCompositeItem(item, activeCompositeId ?? "") + ); + const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex); + const isActiveIdInList = activeItemIndex !== -1; + const selectCompositeItem = (0, import_element14.useCallback)( + (targetIndex, generateCompositeId) => { + const clampedIndex = Math.min( + data.length - 1, + Math.max(0, targetIndex) + ); + if (!data[clampedIndex]) { + return; + } + const itemIdPrefix = generateCompositeItemIdPrefix( + data[clampedIndex] + ); + const targetCompositeItemId = generateCompositeId(itemIdPrefix); + setActiveCompositeId(targetCompositeItemId); + document.getElementById(targetCompositeItemId)?.focus(); + }, + [data, generateCompositeItemIdPrefix] + ); + (0, import_element14.useEffect)(() => { + const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1; + if (!isActiveIdInList && wasActiveIdInList) { + selectCompositeItem( + previousActiveItemIndex, + generateItemWrapperCompositeId + ); + } + }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]); + const onDropdownTriggerKeyDown = (0, import_element14.useCallback)( + (event) => { + if (event.key === "ArrowDown") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex + 1, + generateDropdownTriggerCompositeId + ); + } + if (event.key === "ArrowUp") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex - 1, + generateDropdownTriggerCompositeId + ); + } + }, + [selectCompositeItem, activeItemIndex] + ); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite, + { + id: `${baseId}`, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {}), + className: "dataviews-view-list__group", + role: "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + Stack, + { + direction: "column", + gap: "lg", + className: clsx_default("dataviews-view-list", className), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("h3", { className: "dataviews-view-list__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n13.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n13.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + groupItems.map((item) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown + }, + id + ); + }) + ] + }, + groupName + ) + ) + } + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + import_components10.Composite, + { + id: baseId, + render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {}), + className: clsx_default("dataviews-view-list", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + role: view.infiniteScrollEnabled ? "feed" : "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + children: data.map((item, index) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + }, + id + ); + }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components10.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_components12 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-group.mjs +var import_i18n14 = __toESM(require_i18n(), 1); +var import_element15 = __toESM(require_element(), 1); +var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); +function ActivityGroup({ + groupName, + groupData, + groupField, + showLabel = true, + children +}) { + const groupHeader = showLabel ? (0, import_element15.createInterpolateElement)( + // translators: %s: The label of the field e.g. "Status". + (0, import_i18n14.sprintf)((0, import_i18n14.__)("%s: "), groupField.label).trim(), + { + groupName: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + groupField.render, + { + item: groupData[0], + field: groupField + } + ) + } + ) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(groupField.render, { item: groupData[0], field: groupField }); + return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-activity__group", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }), + children + ] + }, + groupName + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-item.mjs +var import_components11 = __toESM(require_components(), 1); +var import_element16 = __toESM(require_element(), 1); +var import_data6 = __toESM(require_data(), 1); +var import_compose6 = __toESM(require_compose(), 1); +var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); +function ActivityItem(props) { + const { + view, + actions, + item, + titleField, + mediaField, + descriptionField, + otherFields, + posinset, + onClickItem, + renderItemLink, + isItemClickable + } = props; + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element16.useRef)(null); + const registry = (0, import_data6.useRegistry)(); + const { paginationInfo } = (0, import_element16.useContext)(dataviews_context_default); + const { primaryActions, eligibleActions } = (0, import_element16.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose6.useViewportMatch)("medium", "<"); + const density = view.layout?.density ?? "balanced"; + const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { + sizes: density === "comfortable" ? "32px" : "24px" + } + } + ) : null; + const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + "span", + { + className: "dataviews-view-activity__item-bullet", + "aria-hidden": "true" + } + ) }); + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(titleField.render, { item, field: titleField }) : null; + const verticalGap = (0, import_element16.useMemo)(() => { + switch (density) { + case "comfortable": + return "md"; + default: + return "sm"; + } + }, [density]); + return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + "div", + { + ref: itemRef, + role: infiniteScrollEnabled ? "article" : void 0, + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + className: clsx_default( + "dataviews-view-activity__item", + density === "compact" && "is-compact", + density === "balanced" && "is-balanced", + density === "comfortable" && "is-comfortable" + ), + children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + Stack, + { + direction: "column", + gap: "xs", + align: "center", + className: "dataviews-view-activity__item-type", + children: renderedMediaField + } + ), + /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( + Stack, + { + direction: "column", + gap: verticalGap, + align: "flex-start", + className: "dataviews-view-activity__item-content", + children: [ + renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-activity__item-title", + children: renderedTitleField + } + ), + showDescription && descriptionField && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( + "div", + { + className: "dataviews-view-activity__item-field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + import_components11.VisuallyHidden, + { + as: "span", + className: "dataviews-view-activity__item-field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) }), + !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry, + buttonVariant: "secondary" + } + ) + ] + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport && // At the same time, only show the menu if there are actions to show. + eligibleActions.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( + ItemActions, + { + item, + actions: eligibleActions, + isCompact: true + } + ) }) + ] }) + } + ); +} +var activity_item_default = ActivityItem; + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-items.mjs +var import_react3 = __toESM(require_react(), 1); +function isDefined3(item) { + return !!item; +} +function ActivityItems(props) { + const { data, fields, getItemId: getItemId2, view } = props; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3); + return data.map((item, index) => { + return /* @__PURE__ */ (0, import_react3.createElement)( + activity_item_default, + { + ...props, + key: getItemId2(item), + item, + mediaField, + titleField, + descriptionField, + otherFields, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + } + ); + }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); +function ViewActivity(props) { + const { empty, data, fields, isLoading, view, className } = props; + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const isInert = !isInfiniteScroll && !!isLoading; + const wrapperClassName = clsx_default("dataviews-view-activity", className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }); + const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : []; + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + Stack, + { + direction: "column", + gap: "sm", + className: wrapperClassName, + inert: isInert ? "true" : void 0, + children: groupedEntries.map( + ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + ActivityGroup, + { + groupName, + groupData, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + ActivityItems, + { + ...props, + data: groupData + } + ) + }, + groupName + ) + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + "div", + { + className: wrapperClassName, + role: view.infiniteScrollEnabled ? "feed" : void 0, + inert: isInert ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ActivityItems, { ...props }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components12.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_components15 = __toESM(require_components(), 1); +var import_i18n17 = __toESM(require_i18n(), 1); +var import_compose7 = __toESM(require_compose(), 1); +var import_element20 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_components14 = __toESM(require_components(), 1); +var import_data7 = __toESM(require_data(), 1); +var import_element18 = __toESM(require_element(), 1); +var import_i18n16 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-pagination/index.mjs +var import_components13 = __toESM(require_components(), 1); +var import_element17 = __toESM(require_element(), 1); +var import_i18n15 = __toESM(require_i18n(), 1); +var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); +function DataViewsPagination() { + const { + view, + onChangeView, + paginationInfo: { totalItems = 0, totalPages } + } = (0, import_element17.useContext)(dataviews_context_default); + if (!totalItems || !totalPages || view.infiniteScrollEnabled) { + return null; + } + const currentPage = view.page ?? 1; + const pageSelectOptions = Array.from(Array(totalPages)).map( + (_, i2) => { + const page = i2 + 1; + return { + value: page.toString(), + label: page.toString(), + "aria-label": currentPage === page ? (0, import_i18n15.sprintf)( + // translators: 1: current page number. 2: total number of pages. + (0, import_i18n15.__)("Page %1$d of %2$d"), + currentPage, + totalPages + ) : page.toString() + }; + } + ); + return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-pagination", + justify: "end", + align: "center", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + align: "center", + gap: "xs", + className: "dataviews-pagination__page-select", + children: (0, import_element17.createInterpolateElement)( + (0, import_i18n15.sprintf)( + // translators: 1: Current page number, 2: Total number of pages. + (0, import_i18n15._x)( + "
      Page
      %1$s
      of %2$d
      ", + "paging" + ), + "", + totalPages + ), + { + div: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { "aria-hidden": true }), + CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components13.SelectControl, + { + "aria-label": (0, import_i18n15.__)("Current page"), + value: currentPage.toString(), + options: pageSelectOptions, + onChange: (newValue) => { + onChangeView({ + ...view, + page: +newValue + }); + }, + size: "small", + variant: "minimal" + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Stack, { direction: "row", gap: "xs", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ + ...view, + page: currentPage - 1 + }), + disabled: currentPage === 1, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Previous page"), + icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ ...view, page: currentPage + 1 }), + disabled: currentPage >= totalPages, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Next page"), + icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ) + ] }) + ] + } + ); +} +var dataviews_pagination_default = (0, import_element17.memo)(DataViewsPagination); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); +function useIsMultiselectPicker(actions) { + return (0, import_element18.useMemo)(() => { + return actions?.every((action) => action.supportsBulk); + }, [actions]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/grid-items.mjs +var import_element19 = __toESM(require_element(), 1); +var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); +var GridItems = (0, import_element19.forwardRef)(({ className, previewSize, ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + "div", + { + ref, + className: clsx_default("dataviews-view-grid-items", className), + style: { + gridTemplateColumns: previewSize && `repeat(auto-fill, minmax(${previewSize}px, 1fr))` + }, + ...props + } + ); +}); + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); +var { Badge: Badge2 } = unlock(import_components15.privateApis); +function GridItem3({ + view, + multiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config, + posinset, + setsize +}) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const id = getItemId2(item); + const isSelected2 = selection.includes(id); + const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(titleField.render, { item, field: titleField }) : null; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + import_components15.Composite.Item, + { + "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n17.__)("(no title)") : void 0, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Stack, { direction: "column", children, ...props }), + role: "option", + "aria-posinset": posinset, + "aria-setsize": setsize, + className: clsx_default("dataviews-view-picker-grid__card", { + "is-selected": isSelected2 + }), + "aria-selected": isSelected2, + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }), + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "row", + justify: "space-between", + className: "dataviews-view-picker-grid__title-actions", + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-picker-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Badge2, + { + className: "dataviews-view-picker-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-picker-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.Flex, + { + className: "dataviews-view-picker-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components15.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }), + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.FlexItem, + { + className: "dataviews-view-picker-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + }, + id + ); +} +function GridGroup({ + groupName, + groupField, + showLabel = true, + children +}) { + const headerId = (0, import_compose7.useInstanceId)( + GridGroup, + "dataviews-view-picker-grid-group__header" + ); + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + role: "group", + "aria-labelledby": headerId, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "h3", + { + className: "dataviews-view-picker-grid-group__header", + id: headerId, + children: showLabel ? (0, import_i18n17.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n17.__)("%1$s: %2$s"), + groupField.label, + groupName + ) : groupName + } + ), + children + ] + }, + groupName + ); +} +function ViewPickerGrid({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + selection, + view, + className, + empty +}) { + const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element20.useContext)(dataviews_context_default); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const hasData = !!data?.length; + const usedPreviewSize = view.layout?.previewSize; + const isMultiselect = useIsMultiselectPicker(actions); + const size = "900px"; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const currentPage = view?.page ?? 1; + const perPage = view?.perPage ?? 0; + const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.Composite, + { + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + "aria-label": itemListLabel, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "column", + gap: "lg", + children, + ...props + } + ), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridGroup, + { + groupName, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItems, + { + previewSize: usedPreviewSize, + style: { + gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax(${usedPreviewSize}px, 1fr))` + }, + "aria-busy": isLoading, + ref: resizeObserverRef, + children: groupItems.map((item) => { + const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset: posInSet, + setsize: setSize + }, + getItemId2(item) + ); + }) + } + ) + }, + groupName + ) + ) + } + ), + // Render a single grid with all data. + hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components15.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItems, + { + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + previewSize: usedPreviewSize, + "aria-busy": isLoading, + ref: resizeObserverRef + } + ), + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + "aria-label": itemListLabel, + children: data.map((item, index) => { + let posinset = isInfiniteScroll ? index + 1 : void 0; + if (!isInfiniteScroll) { + posinset = (currentPage - 1) * perPage + index + 1; + } + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset, + setsize: setSize + }, + getItemId2(item) + ); + }) + } + ), + // Render empty state. + !hasData && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !isLoading + }), + children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components15.Spinner, {}) }) : empty + } + ), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components15.Spinner, {}) }) + ] + }); +} +var picker_grid_default = ViewPickerGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/picker-table/index.mjs +var import_i18n18 = __toESM(require_i18n(), 1); +var import_components16 = __toESM(require_components(), 1); +var import_element21 = __toESM(require_element(), 1); +var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); +function TableColumnField2({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(field.render, { item, field }) }); +} +function TableRow2({ + item, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect, + posinset +}) { + const { paginationInfo } = (0, import_element21.useContext)(dataviews_context_default); + const isSelected2 = selection.includes(id); + const [isHovered, setIsHovered] = (0, import_element21.useState)(false); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const handleMouseEnter = () => { + setIsHovered(true); + }; + const handleMouseLeave = () => { + setIsHovered(false); + }; + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + import_components16.Composite.Item, + { + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleMouseEnter, + onMouseLeave: handleMouseLeave, + children, + ...props + } + ), + "aria-selected": isSelected2, + "aria-setsize": paginationInfo.totalItems || void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : "option", + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "td", + { + className: "dataviews-view-table__checkbox-column", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ) }) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + column_primary_default, + { + item, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable: () => false + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + TableColumnField2, + { + fields, + item, + column, + align + } + ) + }, + column + ); + }) + ] + }, + id + ); +} +function ViewPickerTable({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + view, + className, + empty +}) { + const headerMenuRefs = (0, import_element21.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element21.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element21.useState)(); + const isMultiselect = useIsMultiselectPicker(actions) ?? false; + (0, import_element21.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element21.useId)(); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + "table", + { + className: clsx_default( + "dataviews-view-table", + "dataviews-view-picker-table", + className, + { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ) + } + ), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : "listbox", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + "tr", + { + className: "dataviews-view-table__row", + role: "presentation", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: align + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: view.layout?.enableMoving ?? true + } + ) + }, + column + ); + }) + ] + } + ) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + import_components16.Composite, + { + virtualFocus: true, + orientation: "vertical", + render: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tbody", { role: "group" }), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "tr", + { + className: "dataviews-view-table__group-header-row", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1, + className: "dataviews-view-table__group-header-cell", + role: "presentation", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n18.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n18.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) + } + ), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + TableRow2, + { + item, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect: isMultiselect + }, + getItemId2(item) + )) + ] + }, + `group-${groupName}` + ) + ) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + import_components16.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tbody", { role: "presentation" }), + virtualFocus: true, + orientation: "vertical", + children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + TableRow2, + { + item, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect: isMultiselect, + posinset: index + 1 + }, + getItemId2(item) + )) + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !hasData && !isLoading + }), + id: tableNoticeId, + children: [ + !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components16.Spinner, {}) }) : empty), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components16.Spinner, {}) }) + ] + } + ) + ] }); +} +var picker_table_default = ViewPickerTable; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/preview-size-picker.mjs +var import_components17 = __toESM(require_components(), 1); +var import_i18n19 = __toESM(require_i18n(), 1); +var import_element22 = __toESM(require_element(), 1); +var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); +var imageSizes2 = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +function PreviewSizePicker() { + const context = (0, import_element22.useContext)(dataviews_context_default); + const view = context.view; + const breakValues = imageSizes2.filter((size) => { + return context.containerWidth >= size.breakpoint; + }); + const layoutPreviewSize = view.layout?.previewSize ?? 230; + const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0; + const marks = breakValues.map((size, index) => { + return { + value: index + }; + }); + return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)( + import_components17.RangeControl, + { + __next40pxDefaultSize: true, + showTooltip: false, + label: (0, import_i18n19.__)("Preview size"), + value: previewSizeToUse, + min: 0, + max: breakValues.length - 1, + withInputField: false, + onChange: (value = 0) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + previewSize: breakValues[value].value + } + }); + }, + step: 1, + marks + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/density-picker.mjs +var import_components18 = __toESM(require_components(), 1); +var import_i18n20 = __toESM(require_i18n(), 1); +var import_element23 = __toESM(require_element(), 1); +var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); +function DensityPicker() { + const context = (0, import_element23.useContext)(dataviews_context_default); + const view = context.view; + return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)( + import_components18.__experimentalToggleGroupControl, + { + size: "__unstable-large", + label: (0, import_i18n20.__)("Density"), + value: view.layout?.density || "balanced", + onChange: (value) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + density: value + } + }); + }, + isBlock: true, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "comfortable", + label: (0, import_i18n20._x)( + "Comfortable", + "Density option for DataView layout" + ) + }, + "comfortable" + ), + /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "balanced", + label: (0, import_i18n20._x)("Balanced", "Density option for DataView layout") + }, + "balanced" + ), + /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "compact", + label: (0, import_i18n20._x)("Compact", "Density option for DataView layout") + }, + "compact" + ) + ] + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var VIEW_LAYOUTS = [ + { + type: LAYOUT_TABLE, + label: (0, import_i18n21.__)("Table"), + component: table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_GRID, + label: (0, import_i18n21.__)("Grid"), + component: grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker + }, + { + type: LAYOUT_LIST, + label: (0, import_i18n21.__)("List"), + component: ViewList, + icon: (0, import_i18n21.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_ACTIVITY, + label: (0, import_i18n21.__)("Activity"), + component: ViewActivity, + icon: scheduled_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_PICKER_GRID, + label: (0, import_i18n21.__)("Grid"), + component: picker_grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker, + isPicker: true + }, + { + type: LAYOUT_PICKER_TABLE, + label: (0, import_i18n21.__)("Table"), + component: picker_table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker, + isPicker: true + } +]; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_element31 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_components21 = __toESM(require_components(), 1); +var import_i18n24 = __toESM(require_i18n(), 1); +var import_element28 = __toESM(require_element(), 1); + +// node_modules/@ariakit/core/esm/__chunks/XMCVU3LR.js +function noop(..._) { +} +function applyState(argument, currentValue) { + if (isUpdater(argument)) { + const value = isLazyValue(currentValue) ? currentValue() : currentValue; + return argument(value); + } + return argument; +} +function isUpdater(argument) { + return typeof argument === "function"; +} +function isLazyValue(value) { + return typeof value === "function"; +} +function hasOwnProperty(object, prop) { + if (typeof Object.hasOwn === "function") { + return Object.hasOwn(object, prop); + } + return Object.prototype.hasOwnProperty.call(object, prop); +} +function chain(...fns) { + return (...args) => { + for (const fn of fns) { + if (typeof fn === "function") { + fn(...args); + } + } + }; +} +function normalizeString(str) { + return str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); +} +function omit2(object, keys) { + const result = { ...object }; + for (const key of keys) { + if (hasOwnProperty(result, key)) { + delete result[key]; + } + } + return result; +} +function pick(object, paths) { + const result = {}; + for (const key of paths) { + if (hasOwnProperty(object, key)) { + result[key] = object[key]; + } + } + return result; +} +function identity(value) { + return value; +} +function invariant(condition, message2) { + if (condition) return; + if (typeof message2 !== "string") throw new Error("Invariant failed"); + throw new Error(message2); +} +function getKeys(obj) { + return Object.keys(obj); +} +function isFalsyBooleanCallback(booleanOrCallback, ...args) { + const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback; + if (result == null) return false; + return !result; +} +function disabledFromProps(props) { + return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true"; +} +function removeUndefinedValues(obj) { + const result = {}; + for (const key in obj) { + if (obj[key] !== void 0) { + result[key] = obj[key]; + } + } + return result; +} +function defaultValue(...values) { + for (const value of values) { + if (value !== void 0) return value; + } + return void 0; +} + +// node_modules/@ariakit/react-core/esm/__chunks/YXGXYGQX.js +var import_react4 = __toESM(require_react(), 1); +function setRef(ref, value) { + if (typeof ref === "function") { + ref(value); + } else if (ref) { + ref.current = value; + } +} +function isValidElementWithRef(element) { + if (!element) return false; + if (!(0, import_react4.isValidElement)(element)) return false; + if ("ref" in element.props) return true; + if ("ref" in element) return true; + return false; +} +function getRefProperty(element) { + if (!isValidElementWithRef(element)) return null; + const props = { ...element.props }; + return props.ref || element.ref; +} +function mergeProps2(base, overrides) { + const props = { ...base }; + for (const key in overrides) { + if (!hasOwnProperty(overrides, key)) continue; + if (key === "className") { + const prop = "className"; + props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop]; + continue; + } + if (key === "style") { + const prop = "style"; + props[prop] = base[prop] ? { ...base[prop], ...overrides[prop] } : overrides[prop]; + continue; + } + const overrideValue = overrides[key]; + if (typeof overrideValue === "function" && key.startsWith("on")) { + const baseValue = base[key]; + if (typeof baseValue === "function") { + props[key] = (...args) => { + overrideValue(...args); + baseValue(...args); + }; + continue; + } + } + props[key] = overrideValue; + } + return props; +} + +// node_modules/@ariakit/core/esm/__chunks/3DNM6L6E.js +var canUseDOM = checkIsBrowser(); +function checkIsBrowser() { + var _a; + return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement); +} +function getDocument(node) { + if (!node) return document; + if ("self" in node) return node.document; + return node.ownerDocument || document; +} +function getActiveElement(node, activeDescendant = false) { + var _a; + const { activeElement } = getDocument(node); + if (!(activeElement == null ? void 0 : activeElement.nodeName)) { + return null; + } + if (isFrame(activeElement) && ((_a = activeElement.contentDocument) == null ? void 0 : _a.body)) { + return getActiveElement( + activeElement.contentDocument.body, + activeDescendant + ); + } + if (activeDescendant) { + const id = activeElement.getAttribute("aria-activedescendant"); + if (id) { + const element = getDocument(activeElement).getElementById(id); + if (element) { + return element; + } + } + } + return activeElement; +} +function contains(parent, child) { + return parent === child || parent.contains(child); +} +function isFrame(element) { + return element.tagName === "IFRAME"; +} +function isButton(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "button") return true; + if (tagName === "input" && element.type) { + return buttonInputTypes.indexOf(element.type) !== -1; + } + return false; +} +var buttonInputTypes = [ + "button", + "color", + "file", + "image", + "reset", + "submit" +]; +function isVisible(element) { + if (typeof element.checkVisibility === "function") { + return element.checkVisibility(); + } + const htmlElement = element; + return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0; +} +function isTextField(element) { + try { + const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null; + const isTextArea = element.tagName === "TEXTAREA"; + return isTextInput || isTextArea || false; + } catch (_error) { + return false; + } +} +function isTextbox(element) { + return element.isContentEditable || isTextField(element); +} +function getTextboxValue(element) { + if (isTextField(element)) { + return element.value; + } + if (element.isContentEditable) { + const range = getDocument(element).createRange(); + range.selectNodeContents(element); + return range.toString(); + } + return ""; +} +function getTextboxSelection(element) { + let start = 0; + let end = 0; + if (isTextField(element)) { + start = element.selectionStart || 0; + end = element.selectionEnd || 0; + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) { + const range = selection.getRangeAt(0); + const nextRange = range.cloneRange(); + nextRange.selectNodeContents(element); + nextRange.setEnd(range.startContainer, range.startOffset); + start = nextRange.toString().length; + nextRange.setEnd(range.endContainer, range.endOffset); + end = nextRange.toString().length; + } + } + return { start, end }; +} +function getPopupRole(element, fallback) { + const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"]; + const role = element == null ? void 0 : element.getAttribute("role"); + if (role && allowedPopupRoles.indexOf(role) !== -1) { + return role; + } + return fallback; +} +function getScrollingElement(element) { + if (!element) return null; + const isScrollableOverflow = (overflow) => { + if (overflow === "auto") return true; + if (overflow === "scroll") return true; + return false; + }; + if (element.clientHeight && element.scrollHeight > element.clientHeight) { + const { overflowY } = getComputedStyle(element); + if (isScrollableOverflow(overflowY)) return element; + } else if (element.clientWidth && element.scrollWidth > element.clientWidth) { + const { overflowX } = getComputedStyle(element); + if (isScrollableOverflow(overflowX)) return element; + } + return getScrollingElement(element.parentElement) || document.scrollingElement || document.body; +} +function setSelectionRange(element, ...args) { + if (/text|search|password|tel|url/i.test(element.type)) { + element.setSelectionRange(...args); + } +} +function sortBasedOnDOMPosition(items, getElement) { + const pairs = items.map((item, index) => [index, item]); + let isOrderDifferent = false; + pairs.sort(([indexA, a2], [indexB, b2]) => { + const elementA = getElement(a2); + const elementB = getElement(b2); + if (elementA === elementB) return 0; + if (!elementA || !elementB) return 0; + if (isElementPreceding(elementA, elementB)) { + if (indexA > indexB) { + isOrderDifferent = true; + } + return -1; + } + if (indexA < indexB) { + isOrderDifferent = true; + } + return 1; + }); + if (isOrderDifferent) { + return pairs.map(([_, item]) => item); + } + return items; +} +function isElementPreceding(a2, b2) { + return Boolean( + b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING + ); +} + +// node_modules/@ariakit/core/esm/__chunks/SNHYQNEZ.js +function isTouchDevice() { + return canUseDOM && !!navigator.maxTouchPoints; +} +function isApple() { + if (!canUseDOM) return false; + return /mac|iphone|ipad|ipod/i.test(navigator.platform); +} +function isSafari() { + return canUseDOM && isApple() && /apple/i.test(navigator.vendor); +} +function isFirefox() { + return canUseDOM && /firefox\//i.test(navigator.userAgent); +} + +// node_modules/@ariakit/core/esm/utils/events.js +function isPortalEvent(event) { + return Boolean( + event.currentTarget && !contains(event.currentTarget, event.target) + ); +} +function isSelfTarget(event) { + return event.target === event.currentTarget; +} +function isOpeningInNewTab(event) { + const element = event.currentTarget; + if (!element) return false; + const isAppleDevice = isApple(); + if (isAppleDevice && !event.metaKey) return false; + if (!isAppleDevice && !event.ctrlKey) return false; + const tagName = element.tagName.toLowerCase(); + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function isDownloading(event) { + const element = event.currentTarget; + if (!element) return false; + const tagName = element.tagName.toLowerCase(); + if (!event.altKey) return false; + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function fireBlurEvent(element, eventInit) { + const event = new FocusEvent("blur", eventInit); + const defaultAllowed = element.dispatchEvent(event); + const bubbleInit = { ...eventInit, bubbles: true }; + element.dispatchEvent(new FocusEvent("focusout", bubbleInit)); + return defaultAllowed; +} +function fireKeyboardEvent(element, type, eventInit) { + const event = new KeyboardEvent(type, eventInit); + return element.dispatchEvent(event); +} +function fireClickEvent(element, eventInit) { + const event = new MouseEvent("click", eventInit); + return element.dispatchEvent(event); +} +function isFocusEventOutside(event, container) { + const containerElement = container || event.currentTarget; + const relatedTarget = event.relatedTarget; + return !relatedTarget || !contains(containerElement, relatedTarget); +} +function queueBeforeEvent(element, type, callback, timeout) { + const createTimer = (callback2) => { + if (timeout) { + const timerId2 = setTimeout(callback2, timeout); + return () => clearTimeout(timerId2); + } + const timerId = requestAnimationFrame(callback2); + return () => cancelAnimationFrame(timerId); + }; + const cancelTimer = createTimer(() => { + element.removeEventListener(type, callSync, true); + callback(); + }); + const callSync = () => { + cancelTimer(); + callback(); + }; + element.addEventListener(type, callSync, { once: true, capture: true }); + return cancelTimer; +} +function addGlobalEventListener(type, listener, options, scope = window) { + const children = []; + try { + scope.document.addEventListener(type, listener, options); + for (const frame of Array.from(scope.frames)) { + children.push(addGlobalEventListener(type, listener, options, frame)); + } + } catch (e2) { + } + const removeEventListener = () => { + try { + scope.document.removeEventListener(type, listener, options); + } catch (e2) { + } + for (const remove of children) { + remove(); + } + }; + return removeEventListener; +} + +// node_modules/@ariakit/react-core/esm/__chunks/KPHZR4MB.js +var React6 = __toESM(require_react(), 1); +var import_react5 = __toESM(require_react(), 1); +var _React = { ...React6 }; +var useReactId = _React.useId; +var useReactDeferredValue = _React.useDeferredValue; +var useReactInsertionEffect = _React.useInsertionEffect; +var useSafeLayoutEffect = canUseDOM ? import_react5.useLayoutEffect : import_react5.useEffect; +function useInitialValue(value) { + const [initialValue] = (0, import_react5.useState)(value); + return initialValue; +} +function useLiveRef(value) { + const ref = (0, import_react5.useRef)(value); + useSafeLayoutEffect(() => { + ref.current = value; + }); + return ref; +} +function useEvent(callback) { + const ref = (0, import_react5.useRef)(() => { + throw new Error("Cannot call an event handler while rendering."); + }); + if (useReactInsertionEffect) { + useReactInsertionEffect(() => { + ref.current = callback; + }); + } else { + ref.current = callback; + } + return (0, import_react5.useCallback)((...args) => { + var _a; + return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args); + }, []); +} +function useTransactionState(callback) { + const [state, setState] = (0, import_react5.useState)(null); + useSafeLayoutEffect(() => { + if (state == null) return; + if (!callback) return; + let prevState = null; + callback((prev) => { + prevState = prev; + return state; + }); + return () => { + callback(prevState); + }; + }, [state, callback]); + return [state, setState]; +} +function useMergeRefs(...refs) { + return (0, import_react5.useMemo)(() => { + if (!refs.some(Boolean)) return; + return (value) => { + for (const ref of refs) { + setRef(ref, value); + } + }; + }, refs); +} +function useId3(defaultId) { + if (useReactId) { + const reactId = useReactId(); + if (defaultId) return defaultId; + return reactId; + } + const [id, setId] = (0, import_react5.useState)(defaultId); + useSafeLayoutEffect(() => { + if (defaultId || id) return; + const random = Math.random().toString(36).slice(2, 8); + setId(`id-${random}`); + }, [defaultId, id]); + return defaultId || id; +} +function useTagName(refOrElement, type) { + const stringOrUndefined = (type2) => { + if (typeof type2 !== "string") return; + return type2; + }; + const [tagName, setTagName] = (0, import_react5.useState)(() => stringOrUndefined(type)); + useSafeLayoutEffect(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type)); + }, [refOrElement, type]); + return tagName; +} +function useAttribute(refOrElement, attributeName, defaultValue2) { + const initialValue = useInitialValue(defaultValue2); + const [attribute, setAttribute] = (0, import_react5.useState)(initialValue); + (0, import_react5.useEffect)(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + if (!element) return; + const callback = () => { + const value = element.getAttribute(attributeName); + setAttribute(value == null ? initialValue : value); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { attributeFilter: [attributeName] }); + callback(); + return () => observer.disconnect(); + }, [refOrElement, attributeName, initialValue]); + return attribute; +} +function useUpdateEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + (0, import_react5.useEffect)(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + (0, import_react5.useEffect)( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useUpdateLayoutEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + useSafeLayoutEffect(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + useSafeLayoutEffect( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useForceUpdate() { + return (0, import_react5.useReducer)(() => [], []); +} +function useBooleanEvent(booleanOrCallback) { + return useEvent( + typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback + ); +} +function useWrapElement(props, callback, deps = []) { + const wrapElement = (0, import_react5.useCallback)( + (element) => { + if (props.wrapElement) { + element = props.wrapElement(element); + } + return callback(element); + }, + [...deps, props.wrapElement] + ); + return { ...props, wrapElement }; +} +function useMetadataProps(props, key, value) { + const parent = props.onLoadedMetadataCapture; + const onLoadedMetadataCapture = (0, import_react5.useMemo)(() => { + return Object.assign(() => { + }, { ...parent, [key]: value }); + }, [parent, key, value]); + return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }]; +} +var hasInstalledGlobalEventListeners = false; +function useIsMouseMoving() { + (0, import_react5.useEffect)(() => { + if (hasInstalledGlobalEventListeners) return; + addGlobalEventListener("mousemove", setMouseMoving, true); + addGlobalEventListener("mousedown", resetMouseMoving, true); + addGlobalEventListener("mouseup", resetMouseMoving, true); + addGlobalEventListener("keydown", resetMouseMoving, true); + addGlobalEventListener("scroll", resetMouseMoving, true); + hasInstalledGlobalEventListeners = true; + }, []); + const isMouseMoving = useEvent(() => mouseMoving); + return isMouseMoving; +} +var mouseMoving = false; +var previousScreenX = 0; +var previousScreenY = 0; +function hasMouseMovement(event) { + const movementX = event.movementX || event.screenX - previousScreenX; + const movementY = event.movementY || event.screenY - previousScreenY; + previousScreenX = event.screenX; + previousScreenY = event.screenY; + return movementX || movementY || false; +} +function setMouseMoving(event) { + if (!hasMouseMovement(event)) return; + mouseMoving = true; +} +function resetMouseMoving() { + mouseMoving = false; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GWSL6KNJ.js +var React7 = __toESM(require_react(), 1); +var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); +function forwardRef22(render4) { + const Role = React7.forwardRef( + // @ts-ignore Incompatible with React 19 types. Ignore for now. + (props, ref) => render4({ ...props, ref }) + ); + Role.displayName = render4.displayName || render4.name; + return Role; +} +function memo22(Component, propsAreEqual) { + return React7.memo(Component, propsAreEqual); +} +function createElement3(Type, props) { + const { wrapElement, render: render4, ...rest } = props; + const mergedRef = useMergeRefs(props.ref, getRefProperty(render4)); + let element; + if (React7.isValidElement(render4)) { + const renderProps = { + // @ts-ignore Incompatible with React 19 types. Ignore for now. + ...render4.props, + ref: mergedRef + }; + element = React7.cloneElement(render4, mergeProps2(rest, renderProps)); + } else if (render4) { + element = render4(rest); + } else { + element = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Type, { ...rest }); + } + if (wrapElement) { + return wrapElement(element); + } + return element; +} +function createHook(useProps) { + const useRole = (props = {}) => { + return useProps(props); + }; + useRole.displayName = useProps.name; + return useRole; +} +function createStoreContext(providers = [], scopedProviders = []) { + const context = React7.createContext(void 0); + const scopedContext = React7.createContext(void 0); + const useContext28 = () => React7.useContext(context); + const useScopedContext = (onlyScoped = false) => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (onlyScoped) return scoped; + return scoped || store; + }; + const useProviderContext = () => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (scoped && scoped === store) return; + return store; + }; + const ContextProvider = (props) => { + return providers.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(context.Provider, { ...props }) + ); + }; + const ScopedContextProvider = (props) => { + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ContextProvider, { ...props, children: scopedProviders.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(scopedContext.Provider, { ...props }) + ) }); + }; + return { + context, + scopedContext, + useContext: useContext28, + useScopedContext, + useProviderContext, + ContextProvider, + ScopedContextProvider + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SMPCIMZM.js +var ctx = createStoreContext(); +var useCollectionContext = ctx.useContext; +var useCollectionScopedContext = ctx.useScopedContext; +var useCollectionProviderContext = ctx.useProviderContext; +var CollectionContextProvider = ctx.ContextProvider; +var CollectionScopedContextProvider = ctx.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/AVVXDJMZ.js +var import_react6 = __toESM(require_react(), 1); +var ctx2 = createStoreContext( + [CollectionContextProvider], + [CollectionScopedContextProvider] +); +var useCompositeContext = ctx2.useContext; +var useCompositeScopedContext = ctx2.useScopedContext; +var useCompositeProviderContext = ctx2.useProviderContext; +var CompositeContextProvider = ctx2.ContextProvider; +var CompositeScopedContextProvider = ctx2.ScopedContextProvider; +var CompositeItemContext = (0, import_react6.createContext)( + void 0 +); +var CompositeRowContext = (0, import_react6.createContext)( + void 0 +); + +// node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js +function findFirstEnabledItem(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItem(store, id) { + if (!id) return null; + return store.item(id) || null; +} +function groupItemsByRows(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function selectTextField(element, collapseToEnd = false) { + if (isTextField(element)) { + element.setSelectionRange( + collapseToEnd ? element.value.length : 0, + element.value.length + ); + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + selection == null ? void 0 : selection.selectAllChildren(element); + if (collapseToEnd) { + selection == null ? void 0 : selection.collapseToEnd(); + } + } +} +var FOCUS_SILENTLY = /* @__PURE__ */ Symbol("FOCUS_SILENTLY"); +function focusSilently(element) { + element[FOCUS_SILENTLY] = true; + element.focus({ preventScroll: true }); +} +function silentlyFocused(element) { + const isSilentlyFocused = element[FOCUS_SILENTLY]; + delete element[FOCUS_SILENTLY]; + return isSilentlyFocused; +} +function isItem(store, element, exclude) { + if (!element) return false; + if (element === exclude) return false; + const item = store.item(element.id); + if (!item) return false; + if (exclude && item.element === exclude) return false; + return true; +} + +// node_modules/@ariakit/react-core/esm/__chunks/Z2O3VLAQ.js +var import_react7 = __toESM(require_react(), 1); +var TagName = "div"; +var useCollectionItem = createHook( + function useCollectionItem2({ + store, + shouldRegisterItem = true, + getItem = identity, + // @ts-expect-error This prop may come from a collection renderer. + element, + ...props + }) { + const context = useCollectionContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react7.useRef)(element); + (0, import_react7.useEffect)(() => { + const element2 = ref.current; + if (!id) return; + if (!element2) return; + if (!shouldRegisterItem) return; + const item = getItem({ id, element: element2 }); + return store == null ? void 0 : store.renderItem(item); + }, [id, shouldRegisterItem, getItem, store]); + props = { + ...props, + ref: useMergeRefs(ref, props.ref) + }; + return removeUndefinedValues(props); + } +); +var CollectionItem = forwardRef22(function CollectionItem2(props) { + const htmlProps = useCollectionItem(props); + return createElement3(TagName, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js +var import_react8 = __toESM(require_react(), 1); +var FocusableContext = (0, import_react8.createContext)(true); + +// node_modules/@ariakit/core/esm/utils/focus.js +var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])"; +function isFocusable(element) { + if (!element.matches(selector)) return false; + if (!isVisible(element)) return false; + if (element.closest("[inert]")) return false; + return true; +} +function getClosestFocusable(element) { + while (element && !isFocusable(element)) { + element = element.closest(selector); + } + return element || null; +} +function hasFocus(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (activeElement === element) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + return activeDescendant === element.id; +} +function hasFocusWithin(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (contains(element, activeElement)) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + if (!("id" in element)) return false; + if (activeDescendant === element.id) return true; + return !!element.querySelector(`#${CSS.escape(activeDescendant)}`); +} +function focusIfNeeded(element) { + if (!hasFocusWithin(element) && isFocusable(element)) { + element.focus(); + } +} +function focusIntoView(element, options) { + if (!("scrollIntoView" in element)) { + element.focus(); + } else { + element.focus({ preventScroll: true }); + element.scrollIntoView({ block: "nearest", inline: "nearest", ...options }); + } +} + +// node_modules/@ariakit/react-core/esm/__chunks/U6HHPQDW.js +var import_react9 = __toESM(require_react(), 1); +var TagName2 = "div"; +var isSafariBrowser = isSafari(); +var alwaysFocusVisibleInputTypes = [ + "text", + "search", + "url", + "tel", + "email", + "password", + "number", + "date", + "month", + "week", + "time", + "datetime", + "datetime-local" +]; +var safariFocusAncestorSymbol = /* @__PURE__ */ Symbol("safariFocusAncestor"); +function markSafariFocusAncestor(element, value) { + if (!element) return; + element[safariFocusAncestorSymbol] = value; +} +function isAlwaysFocusVisible(element) { + const { tagName, readOnly, type } = element; + if (tagName === "TEXTAREA" && !readOnly) return true; + if (tagName === "SELECT" && !readOnly) return true; + if (tagName === "INPUT" && !readOnly) { + return alwaysFocusVisibleInputTypes.includes(type); + } + if (element.isContentEditable) return true; + const role = element.getAttribute("role"); + if (role === "combobox" && element.dataset.name) { + return true; + } + return false; +} +function getLabels(element) { + if ("labels" in element) { + return element.labels; + } + return null; +} +function isNativeCheckboxOrRadio(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "input" && element.type) { + return element.type === "radio" || element.type === "checkbox"; + } + return false; +} +function isNativeTabbable(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a"; +} +function supportsDisabledAttribute(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea"; +} +function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) { + if (!focusable) { + return tabIndexProp; + } + if (trulyDisabled) { + if (nativeTabbable && !supportsDisabled) { + return -1; + } + return; + } + if (nativeTabbable) { + return tabIndexProp; + } + return tabIndexProp || 0; +} +function useDisableEvent(onEvent, disabled) { + return useEvent((event) => { + onEvent == null ? void 0 : onEvent(event); + if (event.defaultPrevented) return; + if (disabled) { + event.stopPropagation(); + event.preventDefault(); + } + }); +} +var hasInstalledGlobalEventListeners2 = false; +var isKeyboardModality = true; +function onGlobalMouseDown(event) { + const target = event.target; + if (target && "hasAttribute" in target) { + if (!target.hasAttribute("data-focus-visible")) { + isKeyboardModality = false; + } + } +} +function onGlobalKeyDown(event) { + if (event.metaKey) return; + if (event.ctrlKey) return; + if (event.altKey) return; + isKeyboardModality = true; +} +var useFocusable = createHook( + function useFocusable2({ + focusable = true, + accessibleWhenDisabled, + autoFocus, + onFocusVisible, + ...props + }) { + const ref = (0, import_react9.useRef)(null); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (hasInstalledGlobalEventListeners2) return; + addGlobalEventListener("mousedown", onGlobalMouseDown, true); + addGlobalEventListener("keydown", onGlobalKeyDown, true); + hasInstalledGlobalEventListeners2 = true; + }, [focusable]); + if (isSafariBrowser) { + (0, import_react9.useEffect)(() => { + if (!focusable) return; + const element = ref.current; + if (!element) return; + if (!isNativeCheckboxOrRadio(element)) return; + const labels = getLabels(element); + if (!labels) return; + const onMouseUp = () => queueMicrotask(() => element.focus()); + for (const label of labels) { + label.addEventListener("mouseup", onMouseUp); + } + return () => { + for (const label of labels) { + label.removeEventListener("mouseup", onMouseUp); + } + }; + }, [focusable]); + } + const disabled = focusable && disabledFromProps(props); + const trulyDisabled = !!disabled && !accessibleWhenDisabled; + const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (trulyDisabled && focusVisible) { + setFocusVisible(false); + } + }, [focusable, trulyDisabled, focusVisible]); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (!focusVisible) return; + const element = ref.current; + if (!element) return; + if (typeof IntersectionObserver === "undefined") return; + const observer = new IntersectionObserver(() => { + if (!isFocusable(element)) { + setFocusVisible(false); + } + }); + observer.observe(element); + return () => observer.disconnect(); + }, [focusable, focusVisible]); + const onKeyPressCapture = useDisableEvent( + props.onKeyPressCapture, + disabled + ); + const onMouseDownCapture = useDisableEvent( + props.onMouseDownCapture, + disabled + ); + const onClickCapture = useDisableEvent(props.onClickCapture, disabled); + const onMouseDownProp = props.onMouseDown; + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + const element = event.currentTarget; + if (!isSafariBrowser) return; + if (isPortalEvent(event)) return; + if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return; + let receivedFocus = false; + const onFocus = () => { + receivedFocus = true; + }; + const options = { capture: true, once: true }; + element.addEventListener("focusin", onFocus, options); + const focusableContainer = getClosestFocusable(element.parentElement); + markSafariFocusAncestor(focusableContainer, true); + queueBeforeEvent(element, "mouseup", () => { + element.removeEventListener("focusin", onFocus, true); + markSafariFocusAncestor(focusableContainer, false); + if (receivedFocus) return; + focusIfNeeded(element); + }); + }); + const handleFocusVisible = (event, currentTarget) => { + if (currentTarget) { + event.currentTarget = currentTarget; + } + if (!focusable) return; + const element = event.currentTarget; + if (!element) return; + if (!hasFocus(element)) return; + onFocusVisible == null ? void 0 : onFocusVisible(event); + if (event.defaultPrevented) return; + element.dataset.focusVisible = "true"; + setFocusVisible(true); + }; + const onKeyDownCaptureProp = props.onKeyDownCapture; + const onKeyDownCapture = useEvent((event) => { + onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (focusVisible) return; + if (event.metaKey) return; + if (event.altKey) return; + if (event.ctrlKey) return; + if (!isSelfTarget(event)) return; + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + queueBeforeEvent(element, "focusout", applyFocusVisible); + }); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (!isSelfTarget(event)) { + setFocusVisible(false); + return; + } + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + if (isKeyboardModality || isAlwaysFocusVisible(event.target)) { + queueBeforeEvent(event.target, "focusout", applyFocusVisible); + } else { + setFocusVisible(false); + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + onBlurProp == null ? void 0 : onBlurProp(event); + if (!focusable) return; + if (!isFocusEventOutside(event)) return; + event.currentTarget.removeAttribute("data-focus-visible"); + setFocusVisible(false); + }); + const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext); + const autoFocusRef = useEvent((element) => { + if (!focusable) return; + if (!autoFocus) return; + if (!element) return; + if (!autoFocusOnShow) return; + queueMicrotask(() => { + if (hasFocus(element)) return; + if (!isFocusable(element)) return; + element.focus(); + }); + }); + const tagName = useTagName(ref); + const nativeTabbable = focusable && isNativeTabbable(tagName); + const supportsDisabled = focusable && supportsDisabledAttribute(tagName); + const styleProp = props.style; + const style = (0, import_react9.useMemo)(() => { + if (trulyDisabled) { + return { pointerEvents: "none", ...styleProp }; + } + return styleProp; + }, [trulyDisabled, styleProp]); + props = { + "data-focus-visible": focusable && focusVisible || void 0, + "data-autofocus": autoFocus || void 0, + "aria-disabled": disabled || void 0, + ...props, + ref: useMergeRefs(ref, autoFocusRef, props.ref), + style, + tabIndex: getTabIndex( + focusable, + trulyDisabled, + nativeTabbable, + supportsDisabled, + props.tabIndex + ), + disabled: supportsDisabled && trulyDisabled ? true : void 0, + // TODO: Test Focusable contentEditable. + contentEditable: disabled ? void 0 : props.contentEditable, + onKeyPressCapture, + onClickCapture, + onMouseDownCapture, + onMouseDown, + onKeyDownCapture, + onFocusCapture, + onBlur + }; + return removeUndefinedValues(props); + } +); +var Focusable = forwardRef22(function Focusable2(props) { + const htmlProps = useFocusable(props); + return createElement3(TagName2, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/PZ3OL7I2.js +var import_react10 = __toESM(require_react(), 1); +var TagName3 = "button"; +function isNativeClick(event) { + if (!event.isTrusted) return false; + const element = event.currentTarget; + if (event.key === "Enter") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A"; + } + if (event.key === " ") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT"; + } + return false; +} +var symbol = /* @__PURE__ */ Symbol("command"); +var useCommand = createHook( + function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { + const ref = (0, import_react10.useRef)(null); + const [isNativeButton, setIsNativeButton] = (0, import_react10.useState)(false); + (0, import_react10.useEffect)(() => { + if (!ref.current) return; + setIsNativeButton(isButton(ref.current)); + }, []); + const [active, setActive] = (0, import_react10.useState)(false); + const activeRef = (0, import_react10.useRef)(false); + const disabled = disabledFromProps(props); + const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + const element = event.currentTarget; + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (!isSelfTarget(event)) return; + if (isTextField(element)) return; + if (element.isContentEditable) return; + const isEnter = clickOnEnter && event.key === "Enter"; + const isSpace = clickOnSpace && event.key === " "; + const shouldPreventEnter = event.key === "Enter" && !clickOnEnter; + const shouldPreventSpace = event.key === " " && !clickOnSpace; + if (shouldPreventEnter || shouldPreventSpace) { + event.preventDefault(); + return; + } + if (isEnter || isSpace) { + const nativeClick = isNativeClick(event); + if (isEnter) { + if (!nativeClick) { + event.preventDefault(); + const { view, ...eventInit } = event; + const click = () => fireClickEvent(element, eventInit); + if (isFirefox()) { + queueBeforeEvent(element, "keyup", click); + } else { + queueMicrotask(click); + } + } + } else if (isSpace) { + activeRef.current = true; + if (!nativeClick) { + event.preventDefault(); + setActive(true); + } + } + } + }); + const onKeyUpProp = props.onKeyUp; + const onKeyUp = useEvent((event) => { + onKeyUpProp == null ? void 0 : onKeyUpProp(event); + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (event.metaKey) return; + const isSpace = clickOnSpace && event.key === " "; + if (activeRef.current && isSpace) { + activeRef.current = false; + if (!isNativeClick(event)) { + event.preventDefault(); + setActive(false); + const element = event.currentTarget; + const { view, ...eventInit } = event; + queueMicrotask(() => fireClickEvent(element, eventInit)); + } + } + }); + props = { + "data-active": active || void 0, + type: isNativeButton ? "button" : void 0, + ...metadataProps, + ...props, + ref: useMergeRefs(ref, props.ref), + onKeyDown, + onKeyUp + }; + props = useFocusable(props); + return props; + } +); +var Command = forwardRef22(function Command2(props) { + const htmlProps = useCommand(props); + return createElement3(TagName3, htmlProps); +}); + +// node_modules/@ariakit/core/esm/__chunks/SXKM4CGU.js +function getInternal(store, key) { + const internals = store.__unstableInternals; + invariant(internals, "Invalid store"); + return internals[key]; +} +function createStore(initialState, ...stores) { + let state = initialState; + let prevStateBatch = state; + let lastUpdate = /* @__PURE__ */ Symbol(); + let destroy = noop; + const instances = /* @__PURE__ */ new Set(); + const updatedKeys = /* @__PURE__ */ new Set(); + const setups = /* @__PURE__ */ new Set(); + const listeners = /* @__PURE__ */ new Set(); + const batchListeners = /* @__PURE__ */ new Set(); + const disposables = /* @__PURE__ */ new WeakMap(); + const listenerKeys = /* @__PURE__ */ new WeakMap(); + const storeSetup = (callback) => { + setups.add(callback); + return () => setups.delete(callback); + }; + const storeInit = () => { + const initialized = instances.size; + const instance = /* @__PURE__ */ Symbol(); + instances.add(instance); + const maybeDestroy = () => { + instances.delete(instance); + if (instances.size) return; + destroy(); + }; + if (initialized) return maybeDestroy; + const desyncs = getKeys(state).map( + (key) => chain( + ...stores.map((store) => { + var _a; + const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store); + if (!storeState) return; + if (!hasOwnProperty(storeState, key)) return; + return sync(store, [key], (state2) => { + setState( + key, + state2[key], + // @ts-expect-error - Not public API. This is just to prevent + // infinite loops. + true + ); + }); + }) + ) + ); + const teardowns = []; + for (const setup2 of setups) { + teardowns.push(setup2()); + } + const cleanups = stores.map(init); + destroy = chain(...desyncs, ...teardowns, ...cleanups); + return maybeDestroy; + }; + const sub = (keys, listener, set = listeners) => { + set.add(listener); + listenerKeys.set(listener, keys); + return () => { + var _a; + (_a = disposables.get(listener)) == null ? void 0 : _a(); + disposables.delete(listener); + listenerKeys.delete(listener); + set.delete(listener); + }; + }; + const storeSubscribe = (keys, listener) => sub(keys, listener); + const storeSync = (keys, listener) => { + disposables.set(listener, listener(state, state)); + return sub(keys, listener); + }; + const storeBatch = (keys, listener) => { + disposables.set(listener, listener(state, prevStateBatch)); + return sub(keys, listener, batchListeners); + }; + const storePick = (keys) => createStore(pick(state, keys), finalStore); + const storeOmit = (keys) => createStore(omit2(state, keys), finalStore); + const getState = () => state; + const setState = (key, value, fromStores = false) => { + var _a; + if (!hasOwnProperty(state, key)) return; + const nextValue = applyState(value, state[key]); + if (nextValue === state[key]) return; + if (!fromStores) { + for (const store of stores) { + (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue); + } + } + const prevState = state; + state = { ...state, [key]: nextValue }; + const thisUpdate = /* @__PURE__ */ Symbol(); + lastUpdate = thisUpdate; + updatedKeys.add(key); + const run = (listener, prev, uKeys) => { + var _a2; + const keys = listenerKeys.get(listener); + const updated = (k) => uKeys ? uKeys.has(k) : k === key; + if (!keys || keys.some(updated)) { + (_a2 = disposables.get(listener)) == null ? void 0 : _a2(); + disposables.set(listener, listener(state, prev)); + } + }; + for (const listener of listeners) { + run(listener, prevState); + } + queueMicrotask(() => { + if (lastUpdate !== thisUpdate) return; + const snapshot = state; + for (const listener of batchListeners) { + run(listener, prevStateBatch, updatedKeys); + } + prevStateBatch = snapshot; + updatedKeys.clear(); + }); + }; + const finalStore = { + getState, + setState, + __unstableInternals: { + setup: storeSetup, + init: storeInit, + subscribe: storeSubscribe, + sync: storeSync, + batch: storeBatch, + pick: storePick, + omit: storeOmit + } + }; + return finalStore; +} +function setup(store, ...args) { + if (!store) return; + return getInternal(store, "setup")(...args); +} +function init(store, ...args) { + if (!store) return; + return getInternal(store, "init")(...args); +} +function subscribe(store, ...args) { + if (!store) return; + return getInternal(store, "subscribe")(...args); +} +function sync(store, ...args) { + if (!store) return; + return getInternal(store, "sync")(...args); +} +function batch(store, ...args) { + if (!store) return; + return getInternal(store, "batch")(...args); +} +function omit22(store, ...args) { + if (!store) return; + return getInternal(store, "omit")(...args); +} +function pick2(store, ...args) { + if (!store) return; + return getInternal(store, "pick")(...args); +} +function mergeStore(...stores) { + var _a; + const initialState = {}; + for (const store2 of stores) { + const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2); + if (nextState) { + Object.assign(initialState, nextState); + } + } + const store = createStore(initialState, ...stores); + return Object.assign({}, ...stores, store); +} +function throwOnConflictingProps(props, store) { + if (false) return; + if (!store) return; + const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => { + var _a; + const stateKey = key.replace("default", ""); + return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}${stateKey.slice(1)}`; + }); + if (!defaultKeys.length) return; + const storeState = store.getState(); + const conflictingProps = defaultKeys.filter( + (key) => hasOwnProperty(storeState, key) + ); + if (!conflictingProps.length) return; + throw new Error( + `Passing a store prop in conjunction with a default state is not supported. + +const store = useSelectStore(); + + ^ ^ + +Instead, pass the default state to the topmost store: + +const store = useSelectStore({ defaultValue: "Apple" }); + + +See https://github.com/ariakit/ariakit/pull/2745 for more details. + +If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit +` + ); +} + +// node_modules/@ariakit/react-core/esm/__chunks/Q5W46E73.js +var React8 = __toESM(require_react(), 1); +var import_shim = __toESM(require_shim(), 1); +var { useSyncExternalStore } = import_shim.default; +var noopSubscribe = () => () => { +}; +function useStoreState(store, keyOrSelector = identity) { + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const key = typeof keyOrSelector === "string" ? keyOrSelector : null; + const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null; + const state = store == null ? void 0 : store.getState(); + if (selector2) return selector2(state); + if (!state) return; + if (!key) return; + if (!hasOwnProperty(state, key)) return; + return state[key]; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreStateObject(store, object) { + const objRef = React8.useRef( + {} + ); + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const state = store == null ? void 0 : store.getState(); + let updated = false; + const obj = objRef.current; + for (const prop in object) { + const keyOrSelector = object[prop]; + if (typeof keyOrSelector === "function") { + const value = keyOrSelector(state); + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + if (typeof keyOrSelector === "string") { + if (!state) continue; + if (!hasOwnProperty(state, keyOrSelector)) continue; + const value = state[keyOrSelector]; + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + } + if (updated) { + objRef.current = { ...obj }; + } + return objRef.current; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreProps(store, props, key, setKey) { + const value = hasOwnProperty(props, key) ? props[key] : void 0; + const setValue = setKey ? props[setKey] : void 0; + const propsRef = useLiveRef({ value, setValue }); + useSafeLayoutEffect(() => { + return sync(store, [key], (state, prev) => { + const { value: value2, setValue: setValue2 } = propsRef.current; + if (!setValue2) return; + if (state[key] === prev[key]) return; + if (state[key] === value2) return; + setValue2(state[key]); + }); + }, [store, key]); + useSafeLayoutEffect(() => { + if (value === void 0) return; + store.setState(key, value); + return batch(store, [key], () => { + if (value === void 0) return; + store.setState(key, value); + }); + }); +} +function useStore(createStore2, props) { + const [store, setStore] = React8.useState(() => createStore2(props)); + useSafeLayoutEffect(() => init(store), [store]); + const useState24 = React8.useCallback( + (keyOrSelector) => useStoreState(store, keyOrSelector), + [store] + ); + const memoizedStore = React8.useMemo( + () => ({ ...store, useState: useState24 }), + [store, useState24] + ); + const updateStore = useEvent(() => { + setStore((store2) => createStore2({ ...props, ...store2.getState() })); + }); + return [memoizedStore, updateStore]; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WZWDIE3S.js +var import_react11 = __toESM(require_react(), 1); +var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); +var TagName4 = "button"; +function isEditableElement(element) { + if (isTextbox(element)) return true; + return element.tagName === "INPUT" && !isButton(element); +} +function getNextPageOffset(scrollingElement, pageUp = false) { + const height = scrollingElement.clientHeight; + const { top } = scrollingElement.getBoundingClientRect(); + const pageSize = Math.max(height * 0.875, height - 40) * 1.5; + const pageOffset = pageUp ? height - pageSize + top : pageSize + top; + if (scrollingElement.tagName === "HTML") { + return pageOffset + scrollingElement.scrollTop; + } + return pageOffset; +} +function getItemOffset(itemElement, pageUp = false) { + const { top } = itemElement.getBoundingClientRect(); + if (pageUp) { + return top + itemElement.clientHeight; + } + return top; +} +function findNextPageItemId(element, store, next, pageUp = false) { + var _a; + if (!store) return; + if (!next) return; + const { renderedItems } = store.getState(); + const scrollingElement = getScrollingElement(element); + if (!scrollingElement) return; + const nextPageOffset = getNextPageOffset(scrollingElement, pageUp); + let id; + let prevDifference; + for (let i2 = 0; i2 < renderedItems.length; i2 += 1) { + const previousId = id; + id = next(i2); + if (!id) break; + if (id === previousId) continue; + const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element; + if (!itemElement) continue; + const itemOffset = getItemOffset(itemElement, pageUp); + const difference = itemOffset - nextPageOffset; + const absDifference = Math.abs(difference); + if (pageUp && difference <= 0 || !pageUp && difference >= 0) { + if (prevDifference !== void 0 && prevDifference < absDifference) { + id = previousId; + } + break; + } + prevDifference = absDifference; + } + return id; +} +function targetIsAnotherItem(event, store) { + if (isSelfTarget(event)) return false; + return isItem(store, event.target); +} +var useCompositeItem = createHook( + function useCompositeItem2({ + store, + rowId: rowIdProp, + preventScrollOnKeyDown = false, + moveOnKeyPress = true, + tabbable = false, + getItem: getItemProp, + "aria-setsize": ariaSetSizeProp, + "aria-posinset": ariaPosInSetProp, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react11.useRef)(null); + const row = (0, import_react11.useContext)(CompositeRowContext); + const disabled = disabledFromProps(props); + const trulyDisabled = disabled && !props.accessibleWhenDisabled; + const { + rowId, + baseElement, + isActiveItem, + ariaSetSize, + ariaPosInSet, + isTabbable + } = useStoreStateObject(store, { + rowId(state) { + if (rowIdProp) return rowIdProp; + if (!state) return; + if (!(row == null ? void 0 : row.baseElement)) return; + if (row.baseElement !== state.baseElement) return; + return row.id; + }, + baseElement(state) { + return (state == null ? void 0 : state.baseElement) || void 0; + }, + isActiveItem(state) { + return !!state && state.activeId === id; + }, + ariaSetSize(state) { + if (ariaSetSizeProp != null) return ariaSetSizeProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaSetSize)) return; + if (row.baseElement !== state.baseElement) return; + return row.ariaSetSize; + }, + ariaPosInSet(state) { + if (ariaPosInSetProp != null) return ariaPosInSetProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaPosInSet)) return; + if (row.baseElement !== state.baseElement) return; + const itemsInRow = state.renderedItems.filter( + (item) => item.rowId === rowId + ); + return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id); + }, + isTabbable(state) { + if (!(state == null ? void 0 : state.renderedItems.length)) return true; + if (state.virtualFocus) return false; + if (tabbable) return true; + if (state.activeId === null) return false; + const item = store == null ? void 0 : store.item(state.activeId); + if (item == null ? void 0 : item.disabled) return true; + if (!(item == null ? void 0 : item.element)) return true; + return state.activeId === id; + } + }); + const getItem = (0, import_react11.useCallback)( + (item) => { + var _a; + const nextItem = { + ...item, + id: id || item.id, + rowId, + disabled: !!trulyDisabled, + children: (_a = item.element) == null ? void 0 : _a.textContent + }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [id, rowId, trulyDisabled, getItemProp] + ); + const onFocusProp = props.onFocus; + const hasFocusedComposite = (0, import_react11.useRef)(false); + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (isPortalEvent(event)) return; + if (!id) return; + if (!store) return; + if (targetIsAnotherItem(event, store)) return; + const { virtualFocus, baseElement: baseElement2 } = store.getState(); + store.setActiveId(id); + if (isTextbox(event.currentTarget)) { + selectTextField(event.currentTarget); + } + if (!virtualFocus) return; + if (!isSelfTarget(event)) return; + if (isEditableElement(event.currentTarget)) return; + if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return; + if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) { + event.currentTarget.scrollIntoView({ + block: "nearest", + inline: "nearest" + }); + } + hasFocusedComposite.current = true; + const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget); + if (fromComposite) { + focusSilently(baseElement2); + } else { + baseElement2.focus(); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + const state = store == null ? void 0 : store.getState(); + if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) { + hasFocusedComposite.current = false; + event.preventDefault(); + event.stopPropagation(); + } + }); + const onKeyDownProp = props.onKeyDown; + const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown); + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + if (!isSelfTarget(event)) return; + if (!store) return; + const { currentTarget } = event; + const state = store.getState(); + const item = store.item(id); + const isGrid2 = !!(item == null ? void 0 : item.rowId); + const isVertical = state.orientation !== "horizontal"; + const isHorizontal = state.orientation !== "vertical"; + const canHomeEnd = () => { + if (isGrid2) return true; + if (isHorizontal) return true; + if (!state.baseElement) return true; + if (!isTextField(state.baseElement)) return true; + return false; + }; + const keyMap = { + ArrowUp: (isGrid2 || isVertical) && store.up, + ArrowRight: (isGrid2 || isHorizontal) && store.next, + ArrowDown: (isGrid2 || isVertical) && store.down, + ArrowLeft: (isGrid2 || isHorizontal) && store.previous, + Home: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.first(); + } + return store == null ? void 0 : store.previous(-1); + }, + End: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.last(); + } + return store == null ? void 0 : store.next(-1); + }, + PageUp: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true); + }, + PageDown: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down); + } + }; + const action = keyMap[event.key]; + if (action) { + if (isTextbox(currentTarget)) { + const selection = getTextboxSelection(currentTarget); + const isLeft = isHorizontal && event.key === "ArrowLeft"; + const isRight = isHorizontal && event.key === "ArrowRight"; + const isUp = isVertical && event.key === "ArrowUp"; + const isDown = isVertical && event.key === "ArrowDown"; + if (isRight || isDown) { + const { length: valueLength } = getTextboxValue(currentTarget); + if (selection.end !== valueLength) return; + } else if ((isLeft || isUp) && selection.start !== 0) return; + } + const nextId = action(); + if (preventScrollOnKeyDownProp(event) || nextId !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(nextId); + } + } + }); + const providerValue = (0, import_react11.useMemo)( + () => ({ id, baseElement }), + [id, baseElement] + ); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }), + [providerValue] + ); + props = { + id, + "data-active-item": isActiveItem || void 0, + ...props, + ref: useMergeRefs(ref, props.ref), + tabIndex: isTabbable ? props.tabIndex : -1, + onFocus, + onBlurCapture, + onKeyDown + }; + props = useCommand(props); + props = useCollectionItem({ + store, + ...props, + getItem, + shouldRegisterItem: id ? props.shouldRegisterItem : false + }); + return removeUndefinedValues({ + ...props, + "aria-setsize": ariaSetSize, + "aria-posinset": ariaPosInSet + }); + } +); +var CompositeItem = memo22( + forwardRef22(function CompositeItem2(props) { + const htmlProps = useCompositeItem(props); + return createElement3(TagName4, htmlProps); + }) +); + +// node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js +function toArray(arg) { + if (Array.isArray(arg)) { + return arg; + } + return typeof arg !== "undefined" ? [arg] : []; +} +function flatten2DArray(array) { + const flattened = []; + for (const row of array) { + flattened.push(...row); + } + return flattened; +} +function reverseArray(array) { + return array.slice().reverse(); +} + +// node_modules/@ariakit/react-core/esm/__chunks/ZMWF7ASR.js +var import_react12 = __toESM(require_react(), 1); +var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); +var TagName5 = "div"; +function isGrid(items) { + return items.some((item) => !!item.rowId); +} +function isPrintableKey(event) { + const target = event.target; + if (target && !isTextField(target)) return false; + return event.key.length === 1 && !event.ctrlKey && !event.metaKey; +} +function isModifierKey(event) { + return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta"; +} +function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) { + return useEvent((event) => { + var _a; + onKeyboardEvent == null ? void 0 : onKeyboardEvent(event); + if (event.defaultPrevented) return; + if (event.isPropagationStopped()) return; + if (!isSelfTarget(event)) return; + if (isModifierKey(event)) return; + if (isPrintableKey(event)) return; + const state = store.getState(); + const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element; + if (!activeElement) return; + const { view, ...eventInit } = event; + const previousElement = previousElementRef == null ? void 0 : previousElementRef.current; + if (activeElement !== previousElement) { + activeElement.focus(); + } + if (!fireKeyboardEvent(activeElement, event.type, eventInit)) { + event.preventDefault(); + } + if (event.currentTarget.contains(activeElement)) { + event.stopPropagation(); + } + }); +} +function findFirstEnabledItemInTheLastRow(items) { + return findFirstEnabledItem( + flatten2DArray(reverseArray(groupItemsByRows(items))) + ); +} +function useScheduleFocus(store) { + const [scheduled, setScheduled] = (0, import_react12.useState)(false); + const schedule = (0, import_react12.useCallback)(() => setScheduled(true), []); + const activeItem = store.useState( + (state) => getEnabledItem(store, state.activeId) + ); + (0, import_react12.useEffect)(() => { + const activeElement = activeItem == null ? void 0 : activeItem.element; + if (!scheduled) return; + if (!activeElement) return; + setScheduled(false); + activeElement.focus({ preventScroll: true }); + }, [activeItem, scheduled]); + return schedule; +} +var useComposite = createHook( + function useComposite2({ + store, + composite = true, + focusOnMove = composite, + moveOnKeyPress = true, + ...props + }) { + const context = useCompositeProviderContext(); + store = store || context; + invariant( + store, + "Composite must receive a `store` prop or be wrapped in a CompositeProvider component." + ); + const ref = (0, import_react12.useRef)(null); + const previousElementRef = (0, import_react12.useRef)(null); + const scheduleFocus = useScheduleFocus(store); + const moves = store.useState("moves"); + const [, setBaseElement] = useTransactionState( + composite ? store.setBaseElement : null + ); + (0, import_react12.useEffect)(() => { + var _a; + if (!store) return; + if (!moves) return; + if (!composite) return; + if (!focusOnMove) return; + const { activeId: activeId2 } = store.getState(); + const itemElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + if (!itemElement) return; + focusIntoView(itemElement); + }, [store, moves, composite, focusOnMove]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!moves) return; + if (!composite) return; + const { baseElement, activeId: activeId2 } = store.getState(); + const isSelfAcive = activeId2 === null; + if (!isSelfAcive) return; + if (!baseElement) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (previousElement) { + fireBlurEvent(previousElement, { relatedTarget: baseElement }); + } + if (!hasFocus(baseElement)) { + baseElement.focus(); + } + }, [store, moves, composite]); + const activeId = store.useState("activeId"); + const virtualFocus = store.useState("virtualFocus"); + useSafeLayoutEffect(() => { + var _a; + if (!store) return; + if (!composite) return; + if (!virtualFocus) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (!previousElement) return; + const activeElement = (_a = getEnabledItem(store, activeId)) == null ? void 0 : _a.element; + const relatedTarget = activeElement || getActiveElement(previousElement); + if (relatedTarget === previousElement) return; + fireBlurEvent(previousElement, { relatedTarget }); + }, [store, activeId, virtualFocus, composite]); + const onKeyDownCapture = useKeyboardEventProxy( + store, + props.onKeyDownCapture, + previousElementRef + ); + const onKeyUpCapture = useKeyboardEventProxy( + store, + props.onKeyUpCapture, + previousElementRef + ); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (!virtualFocus2) return; + const previousActiveElement = event.relatedTarget; + const isSilentlyFocused = silentlyFocused(event.currentTarget); + if (isSelfTarget(event) && isSilentlyFocused) { + event.stopPropagation(); + previousElementRef.current = previousActiveElement; + } + }); + const onFocusProp = props.onFocus; + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (!composite) return; + if (!store) return; + const { relatedTarget } = event; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (virtualFocus2) { + if (isSelfTarget(event) && !isItem(store, relatedTarget)) { + queueMicrotask(scheduleFocus); + } + } else if (isSelfTarget(event)) { + store.setActiveId(null); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + var _a; + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState(); + if (!virtualFocus2) return; + const activeElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + const nextActiveElement = event.relatedTarget; + const nextActiveElementIsItem = isItem(store, nextActiveElement); + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (isSelfTarget(event) && nextActiveElementIsItem) { + if (nextActiveElement === activeElement) { + if (previousElement && previousElement !== nextActiveElement) { + fireBlurEvent(previousElement, event); + } + } else if (activeElement) { + fireBlurEvent(activeElement, event); + } else if (previousElement) { + fireBlurEvent(previousElement, event); + } + event.stopPropagation(); + } else { + const targetIsItem = isItem(store, event.target); + if (!targetIsItem && activeElement) { + fireBlurEvent(activeElement, event); + } + } + }); + const onKeyDownProp = props.onKeyDown; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + var _a; + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.nativeEvent.isComposing) return; + if (event.defaultPrevented) return; + if (!store) return; + if (!isSelfTarget(event)) return; + const { orientation, renderedItems, activeId: activeId2 } = store.getState(); + const activeItem = getEnabledItem(store, activeId2); + if ((_a = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a.isConnected) return; + const isVertical = orientation !== "horizontal"; + const isHorizontal = orientation !== "vertical"; + const grid = isGrid(renderedItems); + const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End"; + if (isHorizontalKey && isTextField(event.currentTarget)) return; + const up = () => { + if (grid) { + const item = findFirstEnabledItemInTheLastRow(renderedItems); + return item == null ? void 0 : item.id; + } + return store == null ? void 0 : store.last(); + }; + const keyMap = { + ArrowUp: (grid || isVertical) && up, + ArrowRight: (grid || isHorizontal) && store.first, + ArrowDown: (grid || isVertical) && store.first, + ArrowLeft: (grid || isHorizontal) && store.last, + Home: store.first, + End: store.last, + PageUp: store.first, + PageDown: store.last + }; + const action = keyMap[event.key]; + if (action) { + const id = action(); + if (id !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(id); + } + } + }); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CompositeContextProvider, { value: store, children: element }), + [store] + ); + const activeDescendant = store.useState((state) => { + var _a; + if (!store) return; + if (!composite) return; + if (!state.virtualFocus) return; + return (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.id; + }); + props = { + "aria-activedescendant": activeDescendant, + ...props, + ref: useMergeRefs(ref, setBaseElement, props.ref), + onKeyDownCapture, + onKeyUpCapture, + onFocusCapture, + onFocus, + onBlurCapture, + onKeyDown + }; + const focusable = store.useState( + (state) => composite && (state.virtualFocus || state.activeId === null) + ); + props = useFocusable({ focusable, ...props }); + return props; + } +); +var Composite5 = forwardRef22(function Composite22(props) { + const htmlProps = useComposite(props); + return createElement3(TagName5, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/LVDQFHCH.js +var ctx3 = createStoreContext(); +var useDisclosureContext = ctx3.useContext; +var useDisclosureScopedContext = ctx3.useScopedContext; +var useDisclosureProviderContext = ctx3.useProviderContext; +var DisclosureContextProvider = ctx3.ContextProvider; +var DisclosureScopedContextProvider = ctx3.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/A62MDFCW.js +var import_react13 = __toESM(require_react(), 1); +var ctx4 = createStoreContext( + [DisclosureContextProvider], + [DisclosureScopedContextProvider] +); +var useDialogContext = ctx4.useContext; +var useDialogScopedContext = ctx4.useScopedContext; +var useDialogProviderContext = ctx4.useProviderContext; +var DialogContextProvider = ctx4.ContextProvider; +var DialogScopedContextProvider = ctx4.ScopedContextProvider; +var DialogHeadingContext = (0, import_react13.createContext)(void 0); +var DialogDescriptionContext = (0, import_react13.createContext)(void 0); + +// node_modules/@ariakit/react-core/esm/__chunks/6B3RXHKP.js +var import_react14 = __toESM(require_react(), 1); +var import_react_dom = __toESM(require_react_dom(), 1); +var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); +var TagName6 = "div"; +function afterTimeout(timeoutMs, cb) { + const timeoutId = setTimeout(cb, timeoutMs); + return () => clearTimeout(timeoutId); +} +function afterPaint2(cb) { + let raf = requestAnimationFrame(() => { + raf = requestAnimationFrame(cb); + }); + return () => cancelAnimationFrame(raf); +} +function parseCSSTime(...times) { + return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => { + const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3; + const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier; + if (currentTime > longestTime) return currentTime; + return longestTime; + }, 0); +} +function isHidden(mounted, hidden, alwaysVisible) { + return !alwaysVisible && hidden !== false && (!mounted || !!hidden); +} +var useDisclosureContent = createHook(function useDisclosureContent2({ store, alwaysVisible, ...props }) { + const context = useDisclosureProviderContext(); + store = store || context; + invariant( + store, + "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component." + ); + const ref = (0, import_react14.useRef)(null); + const id = useId3(props.id); + const [transition, setTransition] = (0, import_react14.useState)(null); + const open = store.useState("open"); + const mounted = store.useState("mounted"); + const animated = store.useState("animated"); + const contentElement = store.useState("contentElement"); + const otherElement = useStoreState(store.disclosure, "contentElement"); + useSafeLayoutEffect(() => { + if (!ref.current) return; + store == null ? void 0 : store.setContentElement(ref.current); + }, [store]); + useSafeLayoutEffect(() => { + let previousAnimated; + store == null ? void 0 : store.setState("animated", (animated2) => { + previousAnimated = animated2; + return true; + }); + return () => { + if (previousAnimated === void 0) return; + store == null ? void 0 : store.setState("animated", previousAnimated); + }; + }, [store]); + useSafeLayoutEffect(() => { + if (!animated) return; + if (!(contentElement == null ? void 0 : contentElement.isConnected)) { + setTransition(null); + return; + } + return afterPaint2(() => { + setTransition(open ? "enter" : mounted ? "leave" : null); + }); + }, [animated, contentElement, open, mounted]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!animated) return; + if (!transition) return; + if (!contentElement) return; + const stopAnimation = () => store == null ? void 0 : store.setState("animating", false); + const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation); + if (transition === "leave" && open) return; + if (transition === "enter" && !open) return; + if (typeof animated === "number") { + const timeout2 = animated; + return afterTimeout(timeout2, stopAnimationSync); + } + const { + transitionDuration, + animationDuration, + transitionDelay, + animationDelay + } = getComputedStyle(contentElement); + const { + transitionDuration: transitionDuration2 = "0", + animationDuration: animationDuration2 = "0", + transitionDelay: transitionDelay2 = "0", + animationDelay: animationDelay2 = "0" + } = otherElement ? getComputedStyle(otherElement) : {}; + const delay = parseCSSTime( + transitionDelay, + animationDelay, + transitionDelay2, + animationDelay2 + ); + const duration = parseCSSTime( + transitionDuration, + animationDuration, + transitionDuration2, + animationDuration2 + ); + const timeout = delay + duration; + if (!timeout) { + if (transition === "enter") { + store.setState("animated", false); + } + stopAnimation(); + return; + } + const frameRate = 1e3 / 60; + const maxTimeout = Math.max(timeout - frameRate, 0); + return afterTimeout(maxTimeout, stopAnimationSync); + }, [store, animated, contentElement, otherElement, open, transition]); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogScopedContextProvider, { value: store, children: element }), + [store] + ); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const styleProp = props.style; + const style = (0, import_react14.useMemo)(() => { + if (hidden) { + return { ...styleProp, display: "none" }; + } + return styleProp; + }, [hidden, styleProp]); + props = { + id, + "data-open": open || void 0, + "data-enter": transition === "enter" || void 0, + "data-leave": transition === "leave" || void 0, + hidden, + ...props, + ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref), + style + }; + return removeUndefinedValues(props); +}); +var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) { + const htmlProps = useDisclosureContent(props); + return createElement3(TagName6, htmlProps); +}); +var DisclosureContent = forwardRef22(function DisclosureContent2({ + unmountOnHide, + ...props +}) { + const context = useDisclosureProviderContext(); + const store = props.store || context; + const mounted = useStoreState( + store, + (state) => !unmountOnHide || (state == null ? void 0 : state.mounted) + ); + if (mounted === false) return null; + return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DisclosureContentImpl, { ...props }); +}); + +// node_modules/@ariakit/core/esm/__chunks/75BJEVSH.js +function createDisclosureStore(props = {}) { + const store = mergeStore( + props.store, + omit22(props.disclosure, ["contentElement", "disclosureElement"]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const open = defaultValue( + props.open, + syncState == null ? void 0 : syncState.open, + props.defaultOpen, + false + ); + const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false); + const initialState = { + open, + animated, + animating: !!animated && open, + mounted: open, + contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null), + disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null) + }; + const disclosure = createStore(initialState, store); + setup( + disclosure, + () => sync(disclosure, ["animated", "animating"], (state) => { + if (state.animated) return; + disclosure.setState("animating", false); + }) + ); + setup( + disclosure, + () => subscribe(disclosure, ["open"], () => { + if (!disclosure.getState().animated) return; + disclosure.setState("animating", true); + }) + ); + setup( + disclosure, + () => sync(disclosure, ["open", "animating"], (state) => { + disclosure.setState("mounted", state.open || state.animating); + }) + ); + return { + ...disclosure, + disclosure: props.disclosure, + setOpen: (value) => disclosure.setState("open", value), + show: () => disclosure.setState("open", true), + hide: () => disclosure.setState("open", false), + toggle: () => disclosure.setState("open", (open2) => !open2), + stopAnimation: () => disclosure.setState("animating", false), + setContentElement: (value) => disclosure.setState("contentElement", value), + setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WLZ6H5FH.js +function useDisclosureStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store, props.disclosure]); + useStoreProps(store, props, "open", "setOpen"); + useStoreProps(store, props, "mounted", "setMounted"); + useStoreProps(store, props, "animated"); + return Object.assign(store, { disclosure: props.disclosure }); +} + +// node_modules/@ariakit/react-core/esm/__chunks/JMU4N4M5.js +var ctx5 = createStoreContext( + [DialogContextProvider], + [DialogScopedContextProvider] +); +var usePopoverContext = ctx5.useContext; +var usePopoverScopedContext = ctx5.useScopedContext; +var usePopoverProviderContext = ctx5.useProviderContext; +var PopoverContextProvider = ctx5.ContextProvider; +var PopoverScopedContextProvider = ctx5.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/__chunks/N5XGANPW.js +function getCommonParent(items) { + var _a; + const firstItem = items.find((item) => !!item.element); + const lastItem = [...items].reverse().find((item) => !!item.element); + let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement; + while (parentElement && (lastItem == null ? void 0 : lastItem.element)) { + const parent = parentElement; + if (lastItem && parent.contains(lastItem.element)) { + return parentElement; + } + parentElement = parentElement.parentElement; + } + return getDocument(parentElement).body; +} +function getPrivateStore(store) { + return store == null ? void 0 : store.__unstablePrivateStore; +} +function createCollectionStore(props = {}) { + var _a; + throwOnConflictingProps(props, props.store); + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const items = defaultValue( + props.items, + syncState == null ? void 0 : syncState.items, + props.defaultItems, + [] + ); + const itemsMap = new Map(items.map((item) => [item.id, item])); + const initialState = { + items, + renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, []) + }; + const syncPrivateStore = getPrivateStore(props.store); + const privateStore = createStore( + { items, renderedItems: initialState.renderedItems }, + syncPrivateStore + ); + const collection = createStore(initialState, props.store); + const sortItems = (renderedItems) => { + const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element); + privateStore.setState("renderedItems", sortedItems); + collection.setState("renderedItems", sortedItems); + }; + setup(collection, () => init(privateStore)); + setup(privateStore, () => { + return batch(privateStore, ["items"], (state) => { + collection.setState("items", state.items); + }); + }); + setup(privateStore, () => { + return batch(privateStore, ["renderedItems"], (state) => { + let firstRun = true; + let raf = requestAnimationFrame(() => { + const { renderedItems } = collection.getState(); + if (state.renderedItems === renderedItems) return; + sortItems(state.renderedItems); + }); + if (typeof IntersectionObserver !== "function") { + return () => cancelAnimationFrame(raf); + } + const ioCallback = () => { + if (firstRun) { + firstRun = false; + return; + } + cancelAnimationFrame(raf); + raf = requestAnimationFrame(() => sortItems(state.renderedItems)); + }; + const root = getCommonParent(state.renderedItems); + const observer = new IntersectionObserver(ioCallback, { root }); + for (const item of state.renderedItems) { + if (!item.element) continue; + observer.observe(item.element); + } + return () => { + cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + }); + const mergeItem = (item, setItems, canDeleteFromMap = false) => { + let prevItem; + setItems((items2) => { + const index = items2.findIndex(({ id }) => id === item.id); + const nextItems = items2.slice(); + if (index !== -1) { + prevItem = items2[index]; + const nextItem = { ...prevItem, ...item }; + nextItems[index] = nextItem; + itemsMap.set(item.id, nextItem); + } else { + nextItems.push(item); + itemsMap.set(item.id, item); + } + return nextItems; + }); + const unmergeItem = () => { + setItems((items2) => { + if (!prevItem) { + if (canDeleteFromMap) { + itemsMap.delete(item.id); + } + return items2.filter(({ id }) => id !== item.id); + } + const index = items2.findIndex(({ id }) => id === item.id); + if (index === -1) return items2; + const nextItems = items2.slice(); + nextItems[index] = prevItem; + itemsMap.set(item.id, prevItem); + return nextItems; + }); + }; + return unmergeItem; + }; + const registerItem = (item) => mergeItem( + item, + (getItems) => privateStore.setState("items", getItems), + true + ); + return { + ...collection, + registerItem, + renderItem: (item) => chain( + registerItem(item), + mergeItem( + item, + (getItems) => privateStore.setState("renderedItems", getItems) + ) + ), + item: (id) => { + if (!id) return null; + let item = itemsMap.get(id); + if (!item) { + const { items: items2 } = privateStore.getState(); + item = items2.find((item2) => item2.id === id); + if (item) { + itemsMap.set(id, item); + } + } + return item || null; + }, + // @ts-expect-error Internal + __unstablePrivateStore: privateStore + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GVAFFF2B.js +function useCollectionStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store]); + useStoreProps(store, props, "items", "setItems"); + return store; +} + +// node_modules/@ariakit/core/esm/__chunks/RVTIKFRL.js +var NULL_ITEM = { id: null }; +function findFirstEnabledItem2(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItems(items, excludeId) { + return items.filter((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getItemsInRow(items, rowId) { + return items.filter((item) => item.rowId === rowId); +} +function flipItems(items, activeId, shouldInsertNullItem = false) { + const index = items.findIndex((item) => item.id === activeId); + return [ + ...items.slice(index + 1), + ...shouldInsertNullItem ? [NULL_ITEM] : [], + ...items.slice(0, index) + ]; +} +function groupItemsByRows2(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function getMaxRowLength(array) { + let maxLength = 0; + for (const { length } of array) { + if (length > maxLength) { + maxLength = length; + } + } + return maxLength; +} +function createEmptyItem(rowId) { + return { + id: "__EMPTY_ITEM__", + disabled: true, + rowId + }; +} +function normalizeRows(rows, activeId, focusShift) { + const maxLength = getMaxRowLength(rows); + for (const row of rows) { + for (let i2 = 0; i2 < maxLength; i2 += 1) { + const item = row[i2]; + if (!item || focusShift && item.disabled) { + const isFirst = i2 === 0; + const previousItem = isFirst && focusShift ? findFirstEnabledItem2(row) : row[i2 - 1]; + row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId); + } + } + } + return rows; +} +function verticalizeItems(items) { + const rows = groupItemsByRows2(items); + const maxLength = getMaxRowLength(rows); + const verticalized = []; + for (let i2 = 0; i2 < maxLength; i2 += 1) { + for (const row of rows) { + const item = row[i2]; + if (item) { + verticalized.push({ + ...item, + // If there's no rowId, it means that it's not a grid composite, but + // a single row instead. So, instead of verticalizing it, that is, + // assigning a different rowId based on the column index, we keep it + // undefined so they will be part of the same row. This is useful + // when using up/down on one-dimensional composites. + rowId: item.rowId ? `${i2}` : void 0 + }); + } + } + } + return verticalized; +} +function createCompositeStore(props = {}) { + var _a; + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const collection = createCollectionStore(props); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId + ); + const initialState = { + ...collection.getState(), + id: defaultValue( + props.id, + syncState == null ? void 0 : syncState.id, + `id-${Math.random().toString(36).slice(2, 8)}` + ), + activeId, + baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null), + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + activeId === null + ), + moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "both" + ), + rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + false + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false), + focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false) + }; + const composite = createStore(initialState, collection, props.store); + setup( + composite, + () => sync(composite, ["renderedItems", "activeId"], (state) => { + composite.setState("activeId", (activeId2) => { + var _a2; + if (activeId2 !== void 0) return activeId2; + return (_a2 = findFirstEnabledItem2(state.renderedItems)) == null ? void 0 : _a2.id; + }); + }) + ); + const getNextId = (direction = "next", options = {}) => { + var _a2, _b; + const defaultState = composite.getState(); + const { + skip = 0, + activeId: activeId2 = defaultState.activeId, + focusShift = defaultState.focusShift, + focusLoop = defaultState.focusLoop, + focusWrap = defaultState.focusWrap, + includesBaseElement = defaultState.includesBaseElement, + renderedItems = defaultState.renderedItems, + rtl = defaultState.rtl + } = options; + const isVerticalDirection = direction === "up" || direction === "down"; + const isNextDirection = direction === "next" || direction === "down"; + const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection; + const canShift = focusShift && !skip; + let items = !isVerticalDirection ? renderedItems : flatten2DArray( + normalizeRows(groupItemsByRows2(renderedItems), activeId2, canShift) + ); + items = canReverse ? reverseArray(items) : items; + items = isVerticalDirection ? verticalizeItems(items) : items; + if (activeId2 == null) { + return (_a2 = findFirstEnabledItem2(items)) == null ? void 0 : _a2.id; + } + const activeItem = items.find((item) => item.id === activeId2); + if (!activeItem) { + return (_b = findFirstEnabledItem2(items)) == null ? void 0 : _b.id; + } + const isGrid2 = items.some((item) => item.rowId); + const activeIndex = items.indexOf(activeItem); + const nextItems = items.slice(activeIndex + 1); + const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId); + if (skip) { + const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2); + const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one. + nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1]; + return nextItem2 == null ? void 0 : nextItem2.id; + } + const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"); + const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical"); + const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false; + if (canLoop) { + const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId); + const sortedItems = flipItems(loopItems, activeId2, hasNullItem); + const nextItem2 = findFirstEnabledItem2(sortedItems, activeId2); + return nextItem2 == null ? void 0 : nextItem2.id; + } + if (canWrap) { + const nextItem2 = findFirstEnabledItem2( + // We can use nextItems, which contains all the next items, including + // items from other rows, to wrap between rows. However, if there is a + // null item (the composite container), we'll only use the next items in + // the row. So moving next from the last item will focus on the + // composite container. On grid composites, horizontal navigation never + // focuses on the composite container, only vertical. + hasNullItem ? nextItemsInRow : nextItems, + activeId2 + ); + const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id; + return nextId; + } + const nextItem = findFirstEnabledItem2(nextItemsInRow, activeId2); + if (!nextItem && hasNullItem) { + return null; + } + return nextItem == null ? void 0 : nextItem.id; + }; + return { + ...collection, + ...composite, + setBaseElement: (element) => composite.setState("baseElement", element), + setActiveId: (id) => composite.setState("activeId", id), + move: (id) => { + if (id === void 0) return; + composite.setState("activeId", id); + composite.setState("moves", (moves) => moves + 1); + }, + first: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(composite.getState().renderedItems)) == null ? void 0 : _a2.id; + }, + last: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id; + }, + next: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("next", options); + }, + previous: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("previous", options); + }, + down: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("down", options); + }, + up: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("up", options); + } + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/IQYAUKXT.js +function useCompositeStoreOptions(props) { + const id = useId3(props.id); + return { id, ...props }; +} +function useCompositeStoreProps(store, update2, props) { + store = useCollectionStoreProps(store, update2, props); + useStoreProps(store, props, "activeId", "setActiveId"); + useStoreProps(store, props, "includesBaseElement"); + useStoreProps(store, props, "virtualFocus"); + useStoreProps(store, props, "orientation"); + useStoreProps(store, props, "rtl"); + useStoreProps(store, props, "focusLoop"); + useStoreProps(store, props, "focusWrap"); + useStoreProps(store, props, "focusShift"); + return store; +} + +// node_modules/@ariakit/react-core/esm/__chunks/CVCFNOHX.js +var import_react15 = __toESM(require_react(), 1); +var ComboboxListRoleContext = (0, import_react15.createContext)( + void 0 +); +var ctx6 = createStoreContext( + [PopoverContextProvider, CompositeContextProvider], + [PopoverScopedContextProvider, CompositeScopedContextProvider] +); +var useComboboxContext = ctx6.useContext; +var useComboboxScopedContext = ctx6.useScopedContext; +var useComboboxProviderContext = ctx6.useProviderContext; +var ComboboxContextProvider = ctx6.ContextProvider; +var ComboboxScopedContextProvider = ctx6.ScopedContextProvider; +var ComboboxItemValueContext = (0, import_react15.createContext)( + void 0 +); +var ComboboxItemCheckedContext = (0, import_react15.createContext)(false); + +// node_modules/@ariakit/core/esm/__chunks/KMAUV3TY.js +function createDialogStore(props = {}) { + return createDisclosureStore(props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4NYSH4UO.js +function useDialogStoreProps(store, update2, props) { + return useDisclosureStoreProps(store, update2, props); +} + +// node_modules/@ariakit/core/esm/__chunks/BFGNM53A.js +function createPopoverStore({ + popover: otherPopover, + ...props +} = {}) { + const store = mergeStore( + props.store, + omit22(otherPopover, [ + "arrowElement", + "anchorElement", + "contentElement", + "popoverElement", + "disclosureElement" + ]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const dialog = createDialogStore({ ...props, store }); + const placement = defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom" + ); + const initialState = { + ...dialog.getState(), + placement, + currentPlacement: placement, + anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null), + popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null), + arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null), + rendered: /* @__PURE__ */ Symbol("rendered") + }; + const popover = createStore(initialState, dialog, store); + return { + ...dialog, + ...popover, + setAnchorElement: (element) => popover.setState("anchorElement", element), + setPopoverElement: (element) => popover.setState("popoverElement", element), + setArrowElement: (element) => popover.setState("arrowElement", element), + render: () => popover.setState("rendered", /* @__PURE__ */ Symbol("rendered")) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/B6FLPFJM.js +function usePopoverStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.popover]); + useStoreProps(store, props, "placement"); + return useDialogStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4POTBZ2J.js +var TagName7 = "div"; +var usePopoverAnchor = createHook( + function usePopoverAnchor2({ store, ...props }) { + const context = usePopoverProviderContext(); + store = store || context; + props = { + ...props, + ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref) + }; + return props; + } +); +var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) { + const htmlProps = usePopoverAnchor(props); + return createElement3(TagName7, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/X6LNAU2F.js +var import_react16 = __toESM(require_react(), 1); +var TagName8 = "div"; +function getMouseDestination(event) { + const relatedTarget = event.relatedTarget; + if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) { + return relatedTarget; + } + return null; +} +function hoveringInside(event) { + const nextElement = getMouseDestination(event); + if (!nextElement) return false; + return contains(event.currentTarget, nextElement); +} +var symbol2 = /* @__PURE__ */ Symbol("composite-hover"); +function movingToAnotherItem(event) { + let dest = getMouseDestination(event); + if (!dest) return false; + do { + if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true; + dest = dest.parentElement; + } while (dest); + return false; +} +var useCompositeHover = createHook( + function useCompositeHover2({ + store, + focusOnHover = true, + blurOnHoverEnd = !!focusOnHover, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + invariant( + store, + "CompositeHover must be wrapped in a Composite component." + ); + const isMouseMoving = useIsMouseMoving(); + const onMouseMoveProp = props.onMouseMove; + const focusOnHoverProp = useBooleanEvent(focusOnHover); + const onMouseMove = useEvent((event) => { + onMouseMoveProp == null ? void 0 : onMouseMoveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (!focusOnHoverProp(event)) return; + if (!hasFocusWithin(event.currentTarget)) { + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (baseElement && !hasFocus(baseElement)) { + baseElement.focus(); + } + } + store == null ? void 0 : store.setActiveId(event.currentTarget.id); + }); + const onMouseLeaveProp = props.onMouseLeave; + const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd); + const onMouseLeave = useEvent((event) => { + var _a; + onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (hoveringInside(event)) return; + if (movingToAnotherItem(event)) return; + if (!focusOnHoverProp(event)) return; + if (!blurOnHoverEndProp(event)) return; + store == null ? void 0 : store.setActiveId(null); + (_a = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a.focus(); + }); + const ref = (0, import_react16.useCallback)((element) => { + if (!element) return; + element[symbol2] = true; + }, []); + props = { + ...props, + ref: useMergeRefs(ref, props.ref), + onMouseMove, + onMouseLeave + }; + return removeUndefinedValues(props); + } +); +var CompositeHover = memo22( + forwardRef22(function CompositeHover2(props) { + const htmlProps = useCompositeHover(props); + return createElement3(TagName8, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox.js +var import_react17 = __toESM(require_react(), 1); +var TagName9 = "input"; +function isFirstItemAutoSelected(items, activeValue, autoSelect) { + if (!autoSelect) return false; + const firstItem = items.find((item) => !item.disabled && item.value); + return (firstItem == null ? void 0 : firstItem.value) === activeValue; +} +function hasCompletionString(value, activeValue) { + if (!activeValue) return false; + if (value == null) return false; + value = normalizeString(value); + return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0; +} +function isInputEvent(event) { + return event.type === "input"; +} +function isAriaAutoCompleteValue(value) { + return value === "inline" || value === "list" || value === "both" || value === "none"; +} +function getDefaultAutoSelectId(items) { + const item = items.find((item2) => { + var _a; + if (item2.disabled) return false; + return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab"; + }); + return item == null ? void 0 : item.id; +} +var useCombobox = createHook( + function useCombobox2({ + store, + focusable = true, + autoSelect: autoSelectProp = false, + getAutoSelectId, + setValueOnChange, + showMinLength = 0, + showOnChange, + showOnMouseDown, + showOnClick = showOnMouseDown, + showOnKeyDown, + showOnKeyPress = showOnKeyDown, + blurActiveItemOnClick, + setValueOnClick = true, + moveOnKeyPress = true, + autoComplete = "list", + ...props + }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react17.useRef)(null); + const [valueUpdated, forceValueUpdate] = useForceUpdate(); + const canAutoSelectRef = (0, import_react17.useRef)(false); + const composingRef = (0, import_react17.useRef)(false); + const autoSelect = store.useState( + (state) => state.virtualFocus && autoSelectProp + ); + const inline = autoComplete === "inline" || autoComplete === "both"; + const [canInline, setCanInline] = (0, import_react17.useState)(inline); + useUpdateLayoutEffect(() => { + if (!inline) return; + setCanInline(true); + }, [inline]); + const storeValue = store.useState("value"); + const prevSelectedValueRef = (0, import_react17.useRef)(void 0); + (0, import_react17.useEffect)(() => { + return sync(store, ["selectedValue", "activeId"], (_, prev) => { + prevSelectedValueRef.current = prev.selectedValue; + }); + }, []); + const inlineActiveValue = store.useState((state) => { + var _a; + if (!inline) return; + if (!canInline) return; + if (state.activeValue && Array.isArray(state.selectedValue)) { + if (state.selectedValue.includes(state.activeValue)) return; + if ((_a = prevSelectedValueRef.current) == null ? void 0 : _a.includes(state.activeValue)) return; + } + return state.activeValue; + }); + const items = store.useState("renderedItems"); + const open = store.useState("open"); + const contentElement = store.useState("contentElement"); + const value = (0, import_react17.useMemo)(() => { + if (!inline) return storeValue; + if (!canInline) return storeValue; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (firstItemAutoSelected) { + if (hasCompletionString(storeValue, inlineActiveValue)) { + const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || ""; + return storeValue + slice; + } + return storeValue; + } + return inlineActiveValue || storeValue; + }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]); + (0, import_react17.useEffect)(() => { + const element = ref.current; + if (!element) return; + const onCompositeItemMove = () => setCanInline(true); + element.addEventListener("combobox-item-move", onCompositeItemMove); + return () => { + element.removeEventListener("combobox-item-move", onCompositeItemMove); + }; + }, []); + (0, import_react17.useEffect)(() => { + if (!inline) return; + if (!canInline) return; + if (!inlineActiveValue) return; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (!firstItemAutoSelected) return; + if (!hasCompletionString(storeValue, inlineActiveValue)) return; + let cleanup = noop; + queueMicrotask(() => { + const element = ref.current; + if (!element) return; + const { start: prevStart, end: prevEnd } = getTextboxSelection(element); + const nextStart = storeValue.length; + const nextEnd = inlineActiveValue.length; + setSelectionRange(element, nextStart, nextEnd); + cleanup = () => { + if (!hasFocus(element)) return; + const { start, end } = getTextboxSelection(element); + if (start !== nextStart) return; + if (end !== nextEnd) return; + setSelectionRange(element, prevStart, prevEnd); + }; + }); + return () => cleanup(); + }, [ + valueUpdated, + inline, + canInline, + inlineActiveValue, + items, + autoSelect, + storeValue + ]); + const scrollingElementRef = (0, import_react17.useRef)(null); + const getAutoSelectIdProp = useEvent(getAutoSelectId); + const autoSelectIdRef = (0, import_react17.useRef)(null); + (0, import_react17.useEffect)(() => { + if (!open) return; + if (!contentElement) return; + const scrollingElement = getScrollingElement(contentElement); + if (!scrollingElement) return; + scrollingElementRef.current = scrollingElement; + const onUserScroll = () => { + canAutoSelectRef.current = false; + }; + const onScroll = () => { + if (!store) return; + if (!canAutoSelectRef.current) return; + const { activeId } = store.getState(); + if (activeId === null) return; + if (activeId === autoSelectIdRef.current) return; + canAutoSelectRef.current = false; + }; + const options = { passive: true, capture: true }; + scrollingElement.addEventListener("wheel", onUserScroll, options); + scrollingElement.addEventListener("touchmove", onUserScroll, options); + scrollingElement.addEventListener("scroll", onScroll, options); + return () => { + scrollingElement.removeEventListener("wheel", onUserScroll, true); + scrollingElement.removeEventListener("touchmove", onUserScroll, true); + scrollingElement.removeEventListener("scroll", onScroll, true); + }; + }, [open, contentElement, store]); + useSafeLayoutEffect(() => { + if (!storeValue) return; + if (composingRef.current) return; + canAutoSelectRef.current = true; + }, [storeValue]); + useSafeLayoutEffect(() => { + if (autoSelect !== "always" && open) return; + canAutoSelectRef.current = open; + }, [autoSelect, open]); + const resetValueOnSelect = store.useState("resetValueOnSelect"); + useUpdateEffect(() => { + var _a, _b; + const canAutoSelect = canAutoSelectRef.current; + if (!store) return; + if (!open) return; + if (!canAutoSelect && !resetValueOnSelect) return; + const { baseElement, contentElement: contentElement2, activeId } = store.getState(); + if (baseElement && !hasFocus(baseElement)) return; + if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) { + const observer = new MutationObserver(forceValueUpdate); + observer.observe(contentElement2, { attributeFilter: ["data-placing"] }); + return () => observer.disconnect(); + } + if (autoSelect && canAutoSelect) { + const userAutoSelectId = getAutoSelectIdProp(items); + const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a = getDefaultAutoSelectId(items)) != null ? _a : store.first(); + autoSelectIdRef.current = autoSelectId; + store.move(autoSelectId != null ? autoSelectId : null); + } else { + const element = (_b = store.item(activeId || store.first())) == null ? void 0 : _b.element; + if (element && "scrollIntoView" in element) { + element.scrollIntoView({ block: "nearest", inline: "nearest" }); + } + } + return; + }, [ + store, + open, + valueUpdated, + storeValue, + autoSelect, + resetValueOnSelect, + getAutoSelectIdProp, + items + ]); + (0, import_react17.useEffect)(() => { + if (!inline) return; + const combobox = ref.current; + if (!combobox) return; + const elements = [combobox, contentElement].filter( + (value2) => !!value2 + ); + const onBlur2 = (event) => { + if (elements.every((el) => isFocusEventOutside(event, el))) { + store == null ? void 0 : store.setValue(value); + } + }; + for (const element of elements) { + element.addEventListener("focusout", onBlur2); + } + return () => { + for (const element of elements) { + element.removeEventListener("focusout", onBlur2); + } + }; + }, [inline, contentElement, store, value]); + const canShow = (event) => { + const currentTarget = event.currentTarget; + return currentTarget.value.length >= showMinLength; + }; + const onChangeProp = props.onChange; + const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow); + const setValueOnChangeProp = useBooleanEvent( + // If the combobox is combined with tags, the value will be set by the tag + // input component. + setValueOnChange != null ? setValueOnChange : !store.tag + ); + const onChange = useEvent((event) => { + onChangeProp == null ? void 0 : onChangeProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const currentTarget = event.currentTarget; + const { value: value2, selectionStart, selectionEnd } = currentTarget; + const nativeEvent = event.nativeEvent; + canAutoSelectRef.current = true; + if (isInputEvent(nativeEvent)) { + if (nativeEvent.isComposing) { + canAutoSelectRef.current = false; + composingRef.current = true; + } + if (inline) { + const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText"; + const caretAtEnd = selectionStart === value2.length; + setCanInline(textInserted && caretAtEnd); + } + } + if (setValueOnChangeProp(event)) { + const isSameValue = value2 === store.getState().value; + store.setValue(value2); + queueMicrotask(() => { + setSelectionRange(currentTarget, selectionStart, selectionEnd); + }); + if (inline && autoSelect && isSameValue) { + forceValueUpdate(); + } + } + if (showOnChangeProp(event)) { + store.show(); + } + if (!autoSelect || !canAutoSelectRef.current) { + store.setActiveId(null); + } + }); + const onCompositionEndProp = props.onCompositionEnd; + const onCompositionEnd = useEvent((event) => { + canAutoSelectRef.current = true; + composingRef.current = false; + onCompositionEndProp == null ? void 0 : onCompositionEndProp(event); + if (event.defaultPrevented) return; + if (!autoSelect) return; + forceValueUpdate(); + }); + const onMouseDownProp = props.onMouseDown; + const blurActiveItemOnClickProp = useBooleanEvent( + blurActiveItemOnClick != null ? blurActiveItemOnClick : (() => !!(store == null ? void 0 : store.getState().includesBaseElement)) + ); + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow); + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (event.button) return; + if (event.ctrlKey) return; + if (!store) return; + if (blurActiveItemOnClickProp(event)) { + store.setActiveId(null); + } + if (setValueOnClickProp(event)) { + store.setValue(value); + } + if (showOnClickProp(event)) { + queueBeforeEvent(event.currentTarget, "mouseup", store.show); + } + }); + const onKeyDownProp = props.onKeyDown; + const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (!event.repeat) { + canAutoSelectRef.current = false; + } + if (event.defaultPrevented) return; + if (event.ctrlKey) return; + if (event.altKey) return; + if (event.shiftKey) return; + if (event.metaKey) return; + if (!store) return; + const { open: open2 } = store.getState(); + if (open2) return; + if (event.key === "ArrowUp" || event.key === "ArrowDown") { + if (showOnKeyPressProp(event)) { + event.preventDefault(); + store.show(); + } + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + canAutoSelectRef.current = false; + onBlurProp == null ? void 0 : onBlurProp(event); + if (event.defaultPrevented) return; + }); + const id = useId3(props.id); + const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0; + const isActiveItem = store.useState((state) => state.activeId === null); + props = { + id, + role: "combobox", + "aria-autocomplete": ariaAutoComplete, + "aria-haspopup": getPopupRole(contentElement, "listbox"), + "aria-expanded": open, + "aria-controls": contentElement == null ? void 0 : contentElement.id, + "data-active-item": isActiveItem || void 0, + value, + ...props, + ref: useMergeRefs(ref, props.ref), + onChange, + onCompositionEnd, + onMouseDown, + onKeyDown, + onBlur + }; + props = useComposite({ + store, + focusable, + ...props, + // Enable inline autocomplete when the user moves from the combobox input + // to an item. + moveOnKeyPress: (event) => { + if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false; + if (inline) setCanInline(true); + return true; + } + }); + props = usePopoverAnchor({ store, ...props }); + return { autoComplete: "off", ...props }; + } +); +var Combobox = forwardRef22(function Combobox2(props) { + const htmlProps = useCombobox(props); + return createElement3(TagName9, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/IBXZ2LQC.js +var import_react18 = __toESM(require_react(), 1); +var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); +var TagName10 = "div"; +function isSelected(storeValue, itemValue) { + if (itemValue == null) return; + if (storeValue == null) return false; + if (Array.isArray(storeValue)) { + return storeValue.includes(itemValue); + } + return storeValue === itemValue; +} +function getItemRole(popupRole) { + var _a; + const itemRoleByPopupRole = { + menu: "menuitem", + listbox: "option", + tree: "treeitem" + }; + const key = popupRole; + return (_a = itemRoleByPopupRole[key]) != null ? _a : "option"; +} +var useComboboxItem = createHook( + function useComboboxItem2({ + store, + value, + hideOnClick, + setValueOnClick, + selectValueOnClick = true, + resetValueOnSelect, + focusOnHover = false, + moveOnKeyPress = true, + getItem: getItemProp, + ...props + }) { + var _a; + const context = useComboboxScopedContext(); + store = store || context; + invariant( + store, + "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component." + ); + const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, { + resetValueOnSelectState: "resetValueOnSelect", + multiSelectable(state) { + return Array.isArray(state.selectedValue); + }, + selected(state) { + return isSelected(state.selectedValue, value); + } + }); + const getItem = (0, import_react18.useCallback)( + (item) => { + const nextItem = { ...item, value }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [value, getItemProp] + ); + setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable; + hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable; + const onClickProp = props.onClick; + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const selectValueOnClickProp = useBooleanEvent(selectValueOnClick); + const resetValueOnSelectProp = useBooleanEvent( + (_a = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a : multiSelectable + ); + const hideOnClickProp = useBooleanEvent(hideOnClick); + const onClick = useEvent((event) => { + onClickProp == null ? void 0 : onClickProp(event); + if (event.defaultPrevented) return; + if (isDownloading(event)) return; + if (isOpeningInNewTab(event)) return; + if (value != null) { + if (selectValueOnClickProp(event)) { + if (resetValueOnSelectProp(event)) { + store == null ? void 0 : store.resetValue(); + } + store == null ? void 0 : store.setSelectedValue((prevValue) => { + if (!Array.isArray(prevValue)) return value; + if (prevValue.includes(value)) { + return prevValue.filter((v2) => v2 !== value); + } + return [...prevValue, value]; + }); + } + if (setValueOnClickProp(event)) { + store == null ? void 0 : store.setValue(value); + } + } + if (hideOnClickProp(event)) { + store == null ? void 0 : store.hide(); + } + }); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (!baseElement) return; + if (hasFocus(baseElement)) return; + const printable = event.key.length === 1; + if (printable || event.key === "Backspace" || event.key === "Delete") { + queueMicrotask(() => baseElement.focus()); + if (isTextField(baseElement)) { + store == null ? void 0 : store.setValue(baseElement.value); + } + } + }); + if (multiSelectable && selected != null) { + props = { + "aria-selected": selected, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }), + [value, selected] + ); + const popupRole = (0, import_react18.useContext)(ComboboxListRoleContext); + props = { + role: getItemRole(popupRole), + children: value, + ...props, + onClick, + onKeyDown + }; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + props = useCompositeItem({ + store, + ...props, + getItem, + // Dispatch a custom event on the combobox input when moving to an item + // with the keyboard so the Combobox component can enable inline + // autocompletion. + moveOnKeyPress: (event) => { + if (!moveOnKeyPressProp(event)) return false; + const moveEvent = new Event("combobox-item-move"); + const baseElement = store == null ? void 0 : store.getState().baseElement; + baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent); + return true; + } + }); + props = useCompositeHover({ store, focusOnHover, ...props }); + return props; + } +); +var ComboboxItem = memo22( + forwardRef22(function ComboboxItem2(props) { + const htmlProps = useComboboxItem(props); + return createElement3(TagName10, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js +var import_react19 = __toESM(require_react(), 1); +var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); +var TagName11 = "span"; +function normalizeValue(value) { + return normalizeString(value).toLowerCase(); +} +function getOffsets(string, values) { + const offsets = []; + for (const value of values) { + let pos = 0; + const length = value.length; + while (string.indexOf(value, pos) !== -1) { + const index = string.indexOf(value, pos); + if (index !== -1) { + offsets.push([index, length]); + } + pos = index + 1; + } + } + return offsets; +} +function filterOverlappingOffsets(offsets) { + return offsets.filter(([offset, length], i2, arr) => { + return !arr.some( + ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length + ); + }); +} +function sortOffsets(offsets) { + return offsets.sort(([a2], [b2]) => a2 - b2); +} +function splitValue(itemValue, userValue) { + if (!itemValue) return itemValue; + if (!userValue) return itemValue; + const userValues = toArray(userValue).filter(Boolean).map(normalizeValue); + const parts = []; + const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + "span", + { + "data-autocomplete-value": autocomplete ? "" : void 0, + "data-user-value": autocomplete ? void 0 : "", + children: value + }, + parts.length + ); + const offsets = sortOffsets( + filterOverlappingOffsets( + // Convert userValues into a set to avoid duplicates + getOffsets(normalizeValue(itemValue), new Set(userValues)) + ) + ); + if (!offsets.length) { + parts.push(span(itemValue, true)); + return parts; + } + const [firstOffset] = offsets[0]; + const values = [ + itemValue.slice(0, firstOffset), + ...offsets.flatMap(([offset, length], i2) => { + var _a; + const value = itemValue.slice(offset, offset + length); + const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0]; + const nextValue = itemValue.slice(offset + length, nextOffset); + return [value, nextValue]; + }) + ]; + values.forEach((value, i2) => { + if (!value) return; + parts.push(span(value, i2 % 2 === 0)); + }); + return parts; +} +var useComboboxItemValue = createHook(function useComboboxItemValue2({ store, value, userValue, ...props }) { + const context = useComboboxScopedContext(); + store = store || context; + const itemContext = (0, import_react19.useContext)(ComboboxItemValueContext); + const itemValue = value != null ? value : itemContext; + const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value); + const children = (0, import_react19.useMemo)(() => { + if (!itemValue) return; + if (!inputValue) return itemValue; + return splitValue(itemValue, inputValue); + }, [itemValue, inputValue]); + props = { + children, + ...props + }; + return removeUndefinedValues(props); +}); +var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) { + const htmlProps = useComboboxItemValue(props); + return createElement3(TagName11, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-label.js +var TagName12 = "label"; +var useComboboxLabel = createHook( + function useComboboxLabel2({ store, ...props }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const comboboxId = store.useState((state) => { + var _a; + return (_a = state.baseElement) == null ? void 0 : _a.id; + }); + props = { + htmlFor: comboboxId, + ...props + }; + return removeUndefinedValues(props); + } +); +var ComboboxLabel = memo22( + forwardRef22(function ComboboxLabel2(props) { + const htmlProps = useComboboxLabel(props); + return createElement3(TagName12, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/__chunks/2G6YEJT4.js +var import_react20 = __toESM(require_react(), 1); +var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); +var TagName13 = "div"; +var useComboboxList = createHook( + function useComboboxList2({ store, alwaysVisible, ...props }) { + const scopedContext = useComboboxScopedContext(true); + const context = useComboboxContext(); + store = store || context; + const scopedContextSameStore = !!store && store === scopedContext; + invariant( + store, + "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react20.useRef)(null); + const id = useId3(props.id); + const mounted = store.useState("mounted"); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const style = hidden ? { ...props.style, display: "none" } : props.style; + const multiSelectable = store.useState( + (state) => Array.isArray(state.selectedValue) + ); + const role = useAttribute(ref, "role", props.role); + const isCompositeRole = role === "listbox" || role === "tree" || role === "grid"; + const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0; + const [hasListboxInside, setHasListboxInside] = (0, import_react20.useState)(false); + const contentElement = store.useState("contentElement"); + useSafeLayoutEffect(() => { + if (!mounted) return; + const element = ref.current; + if (!element) return; + if (contentElement !== element) return; + const callback = () => { + setHasListboxInside(!!element.querySelector("[role='listbox']")); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { + subtree: true, + childList: true, + attributeFilter: ["role"] + }); + callback(); + return () => observer.disconnect(); + }, [mounted, contentElement]); + if (!hasListboxInside) { + props = { + role: "listbox", + "aria-multiselectable": ariaMultiSelectable, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }), + [store, role] + ); + const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null; + props = { + id, + hidden, + ...props, + ref: useMergeRefs(setContentElement, ref, props.ref), + style + }; + return removeUndefinedValues(props); + } +); +var ComboboxList = forwardRef22(function ComboboxList2(props) { + const htmlProps = useComboboxList(props); + return createElement3(TagName13, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/XSIEPKGA.js +var import_react21 = __toESM(require_react(), 1); +var TagValueContext = (0, import_react21.createContext)(null); +var TagRemoveIdContext = (0, import_react21.createContext)( + null +); +var ctx7 = createStoreContext( + [CompositeContextProvider], + [CompositeScopedContextProvider] +); +var useTagContext = ctx7.useContext; +var useTagScopedContext = ctx7.useScopedContext; +var useTagProviderContext = ctx7.useProviderContext; +var TagContextProvider = ctx7.ContextProvider; +var TagScopedContextProvider = ctx7.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/combobox/combobox-store.js +var isTouchSafari = isSafari() && isTouchDevice(); +function createComboboxStore({ + tag, + ...props +} = {}) { + const store = mergeStore(props.store, pick2(tag, ["value", "rtl"])); + throwOnConflictingProps(props, store); + const tagState = tag == null ? void 0 : tag.getState(); + const syncState = store == null ? void 0 : store.getState(); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId, + null + ); + const composite = createCompositeStore({ + ...props, + activeId, + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + true + ), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "vertical" + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + true + ) + }); + const popover = createPopoverStore({ + ...props, + placement: defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom-start" + ) + }); + const value = defaultValue( + props.value, + syncState == null ? void 0 : syncState.value, + props.defaultValue, + "" + ); + const selectedValue = defaultValue( + props.selectedValue, + syncState == null ? void 0 : syncState.selectedValue, + tagState == null ? void 0 : tagState.values, + props.defaultSelectedValue, + "" + ); + const multiSelectable = Array.isArray(selectedValue); + const initialState = { + ...composite.getState(), + ...popover.getState(), + value, + selectedValue, + resetValueOnSelect: defaultValue( + props.resetValueOnSelect, + syncState == null ? void 0 : syncState.resetValueOnSelect, + multiSelectable + ), + resetValueOnHide: defaultValue( + props.resetValueOnHide, + syncState == null ? void 0 : syncState.resetValueOnHide, + multiSelectable && !tag + ), + activeValue: syncState == null ? void 0 : syncState.activeValue + }; + const combobox = createStore(initialState, composite, popover, store); + if (isTouchSafari) { + setup( + combobox, + () => sync(combobox, ["virtualFocus"], () => { + combobox.setState("virtualFocus", false); + }) + ); + } + setup(combobox, () => { + if (!tag) return; + return chain( + sync(combobox, ["selectedValue"], (state) => { + if (!Array.isArray(state.selectedValue)) return; + tag.setValues(state.selectedValue); + }), + sync(tag, ["values"], (state) => { + combobox.setState("selectedValue", state.values); + }) + ); + }); + setup( + combobox, + () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => { + if (!state.resetValueOnHide) return; + if (state.mounted) return; + combobox.setState("value", value); + }) + ); + setup( + combobox, + () => sync(combobox, ["open"], (state) => { + if (state.open) return; + combobox.setState("activeId", activeId); + combobox.setState("moves", 0); + }) + ); + setup( + combobox, + () => sync(combobox, ["moves", "activeId"], (state, prevState) => { + if (state.moves === prevState.moves) { + combobox.setState("activeValue", void 0); + } + }) + ); + setup( + combobox, + () => batch(combobox, ["moves", "renderedItems"], (state, prev) => { + if (state.moves === prev.moves) return; + const { activeId: activeId2 } = combobox.getState(); + const activeItem = composite.item(activeId2); + combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value); + }) + ); + return { + ...popover, + ...composite, + ...combobox, + tag, + setValue: (value2) => combobox.setState("value", value2), + resetValue: () => combobox.setState("value", initialState.value), + setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SVN33SY6.js +function useComboboxStoreOptions(props) { + const tag = useTagContext(); + props = { + ...props, + tag: props.tag !== void 0 ? props.tag : tag + }; + return useCompositeStoreOptions(props); +} +function useComboboxStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.tag]); + useStoreProps(store, props, "value", "setValue"); + useStoreProps(store, props, "selectedValue", "setSelectedValue"); + useStoreProps(store, props, "resetValueOnHide"); + useStoreProps(store, props, "resetValueOnSelect"); + return Object.assign( + useCompositeStoreProps( + usePopoverStoreProps(store, update2, props), + update2, + props + ), + { tag: props.tag } + ); +} +function useComboboxStore(props = {}) { + props = useComboboxStoreOptions(props); + const [store, update2] = useStore(createComboboxStore, props); + return useComboboxStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js +var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); +function ComboboxProvider(props = {}) { + const store = useComboboxStore(props); + return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ComboboxContextProvider, { value: store, children: props.children }); +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_remove_accents = __toESM(require_remove_accents(), 1); +var import_compose8 = __toESM(require_compose(), 1); +var import_i18n22 = __toESM(require_i18n(), 1); +var import_element25 = __toESM(require_element(), 1); +var import_components19 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/utils.mjs +var EMPTY_ARRAY3 = []; +var getCurrentValue = (filterDefinition, currentFilter) => { + if (filterDefinition.singleSelection) { + return currentFilter?.value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value; + } + if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) { + return [currentFilter.value]; + } + return EMPTY_ARRAY3; +}; + +// packages/dataviews/build-module/hooks/use-elements.mjs +var import_element24 = __toESM(require_element(), 1); +var EMPTY_ARRAY4 = []; +function useElements({ + elements, + getElements +}) { + const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY4; + const [records, setRecords] = (0, import_element24.useState)(staticElements); + const [isLoading, setIsLoading] = (0, import_element24.useState)(false); + (0, import_element24.useEffect)(() => { + if (!getElements) { + setRecords(staticElements); + return; + } + let cancelled = false; + setIsLoading(true); + getElements().then((fetchedElements) => { + if (!cancelled) { + const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements; + setRecords(dynamicElements); + } + }).catch(() => { + if (!cancelled) { + setRecords(staticElements); + } + }).finally(() => { + if (!cancelled) { + setIsLoading(false); + } + }); + return () => { + cancelled = true; + }; + }, [getElements, staticElements]); + return { + elements: records, + isLoading + }; +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); +function normalizeSearchInput(input = "") { + return (0, import_remove_accents.default)(input.trim().toLowerCase()); +} +var getNewValue = (filterDefinition, currentFilter, value) => { + if (filterDefinition.singleSelection) { + return value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value]; + } + return [value]; +}; +function generateFilterElementCompositeItemId(prefix, filterElementValue) { + return `${prefix}-${filterElementValue}`; +} +var MultiSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-multi-selection", + { "is-selected": selected } + ), + children: selected && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Icon, { icon: check_default }) + } + ); +}; +var SingleSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-single-selection", + { "is-selected": selected } + ) + } + ); +}; +function ListBox({ view, filter, onChangeView }) { + const baseId = (0, import_compose8.useInstanceId)(ListBox, "dataviews-filter-list-box"); + const [activeCompositeId, setActiveCompositeId] = (0, import_element25.useState)( + // When there are one or less operators, the first item is set as active + // (by setting the initial `activeId` to `undefined`). + // With 2 or more operators, the focus is moved on the operators control + // (by setting the initial `activeId` to `null`), meaning that there won't + // be an active item initially. Focus is then managed via the + // `onFocusVisible` callback. + filter.operators?.length === 1 ? void 0 : null + ); + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + import_components19.Composite, + { + virtualFocus: true, + focusLoop: true, + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + role: "listbox", + className: "dataviews-filters__search-widget-listbox", + "aria-label": (0, import_i18n22.sprintf)( + /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */ + (0, import_i18n22.__)("List of: %1$s"), + filter.name + ), + onFocusVisible: () => { + if (!activeCompositeId && filter.elements.length) { + setActiveCompositeId( + generateFilterElementCompositeItemId( + baseId, + filter.elements[0].value + ) + ); + } + }, + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Composite.Typeahead, {}), + children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + import_components19.Composite.Hover, + { + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + import_components19.Composite.Item, + { + id: generateFilterElementCompositeItemId( + baseId, + element.value + ), + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "div", + { + "aria-label": element.label, + role: "option", + className: "dataviews-filters__search-widget-listitem" + } + ), + onClick: () => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + } + } + ), + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes(element.value) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: element.label + } + ) + ] + }, + element.value + )) + } + ); +} +function ComboboxList22({ view, filter, onChangeView }) { + const [searchValue, setSearchValue] = (0, import_element25.useState)(""); + const deferredSearchValue = (0, import_element25.useDeferredValue)(searchValue); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const matches = (0, import_element25.useMemo)(() => { + const normalizedSearch = normalizeSearchInput(deferredSearchValue); + return filter.elements.filter( + (item) => normalizeSearchInput(item.label).includes(normalizedSearch) + ); + }, [filter.elements, deferredSearchValue]); + return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + ComboboxProvider, + { + selectedValue: currentValue, + setSelectedValue: (value) => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map((_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value + }; + } + return _filter; + }) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + setValue: setSearchValue, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + ComboboxLabel, + { + render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.VisuallyHidden, { children: (0, import_i18n22.__)("Search items") }), + children: (0, import_i18n22.__)("Search items") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + Combobox, + { + autoSelect: "always", + placeholder: (0, import_i18n22.__)("Search"), + className: "dataviews-filters__search-widget-filter-combobox__input" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Icon, { icon: search_default }) }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + ComboboxList, + { + className: "dataviews-filters__search-widget-filter-combobox-list", + alwaysVisible: true, + children: [ + matches.map((element) => { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + ComboboxItem, + { + resetValueOnSelect: false, + value: element.value, + className: "dataviews-filters__search-widget-listitem", + hideOnClick: false, + setValueOnClick: false, + focusOnHover: true, + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes( + element.value + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + ComboboxItemValue, + { + className: "dataviews-filters__search-widget-filter-combobox-item-value", + value: element.label + } + ), + !!element.description && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description }) + ] + } + ) + ] + }, + element.value + ); + }), + !matches.length && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { children: (0, import_i18n22.__)("No results found") }) + ] + } + ) + ] + } + ); +} +function SearchWidget(props) { + const { elements, isLoading } = useElements({ + elements: props.filter.elements, + getElements: props.filter.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components19.Spinner, {}) }); + } + if (elements.length === 0) { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n22.__)("No elements found") }); + } + const Widget = elements.length > 10 ? ComboboxList22 : ListBox; + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Widget, { ...props, filter: { ...props.filter, elements } }); +} + +// packages/dataviews/build-module/components/dataviews-filters/input-widget.mjs +var import_es6 = __toESM(require_es6(), 1); +var import_compose9 = __toESM(require_compose(), 1); +var import_element26 = __toESM(require_element(), 1); +var import_components20 = __toESM(require_components(), 1); +var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); +function InputWidget({ + filter, + view, + onChangeView, + fields +}) { + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const field = (0, import_element26.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Deactivate validation for filters. + isValid: {}, + // Configure getValue/setValue as if Item was a plain object. + getValue: ({ item }) => item[currentField.id], + setValue: ({ value }) => ({ + [currentField.id]: value + }) + }; + } + return currentField; + }, [fields, filter.field]); + const data = (0, import_element26.useMemo)(() => { + return (view.filters ?? []).reduce( + (acc, activeFilter) => { + acc[activeFilter.field] = activeFilter.value; + return acc; + }, + {} + ); + }, [view.filters]); + const handleChange = (0, import_compose9.useEvent)((updatedData) => { + if (!field || !currentFilter) { + return; + } + const nextValue = field.getValue({ item: updatedData }); + if ((0, import_es6.default)(nextValue, currentValue)) { + return; + } + onChangeView({ + ...view, + filters: (view.filters ?? []).map( + (_filter) => _filter.field === filter.field ? { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + // Consider empty strings as undefined: + // + // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records + // - empty string as value means "search empty string": returns only the records that have an empty string as value + // + // In practice, this means the filter will not be able to find an empty string as the value. + value: nextValue === "" ? void 0 : nextValue + } : _filter + ) + }); + }); + if (!field || !field.Edit || !currentFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + import_components20.Flex, + { + className: "dataviews-filters__user-input-widget", + gap: 2.5, + direction: "column", + children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + field.Edit, + { + hideLabelFromVision: true, + data, + field, + operator: currentFilter.operator, + onChange: handleChange + } + ) + } + ); +} + +// packages/dataviews/node_modules/date-fns/constants.js +var daysInYear = 365.2425; +var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3; +var minTime = -maxTime; +var millisecondsInWeek = 6048e5; +var millisecondsInDay = 864e5; +var secondsInHour = 3600; +var secondsInDay = secondsInHour * 24; +var secondsInWeek = secondsInDay * 7; +var secondsInYear = secondsInDay * daysInYear; +var secondsInMonth = secondsInYear / 12; +var secondsInQuarter = secondsInMonth * 3; +var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom"); + +// packages/dataviews/node_modules/date-fns/constructFrom.js +function constructFrom(date, value) { + if (typeof date === "function") return date(value); + if (date && typeof date === "object" && constructFromSymbol in date) + return date[constructFromSymbol](value); + if (date instanceof Date) return new date.constructor(value); + return new Date(value); +} + +// packages/dataviews/node_modules/date-fns/toDate.js +function toDate(argument, context) { + return constructFrom(context || argument, argument); +} + +// packages/dataviews/node_modules/date-fns/addDays.js +function addDays(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) return _date; + _date.setDate(_date.getDate() + amount); + return _date; +} + +// packages/dataviews/node_modules/date-fns/addMonths.js +function addMonths(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) { + return _date; + } + const dayOfMonth = _date.getDate(); + const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime()); + endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); + const daysInMonth = endOfDesiredMonth.getDate(); + if (dayOfMonth >= daysInMonth) { + return endOfDesiredMonth; + } else { + _date.setFullYear( + endOfDesiredMonth.getFullYear(), + endOfDesiredMonth.getMonth(), + dayOfMonth + ); + return _date; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js +var defaultOptions = {}; +function getDefaultOptions() { + return defaultOptions; +} + +// packages/dataviews/node_modules/date-fns/startOfWeek.js +function startOfWeek(date, options) { + const defaultOptions2 = getDefaultOptions(); + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const _date = toDate(date, options?.in); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + _date.setDate(_date.getDate() - diff); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeek.js +function startOfISOWeek(date, options) { + return startOfWeek(date, { ...options, weekStartsOn: 1 }); +} + +// packages/dataviews/node_modules/date-fns/getISOWeekYear.js +function getISOWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const fourthOfJanuaryOfNextYear = constructFrom(_date, 0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); + const fourthOfJanuaryOfThisYear = constructFrom(_date, 0); + fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); + if (_date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (_date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +function getTimezoneOffsetInMilliseconds(date) { + const _date = toDate(date); + const utcDate = new Date( + Date.UTC( + _date.getFullYear(), + _date.getMonth(), + _date.getDate(), + _date.getHours(), + _date.getMinutes(), + _date.getSeconds(), + _date.getMilliseconds() + ) + ); + utcDate.setUTCFullYear(_date.getFullYear()); + return +date - +utcDate; +} + +// packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js +function normalizeDates(context, ...dates) { + const normalize = constructFrom.bind( + null, + context || dates.find((date) => typeof date === "object") + ); + return dates.map(normalize); +} + +// packages/dataviews/node_modules/date-fns/startOfDay.js +function startOfDay(date, options) { + const _date = toDate(date, options?.in); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js +function differenceInCalendarDays(laterDate, earlierDate, options) { + const [laterDate_, earlierDate_] = normalizeDates( + options?.in, + laterDate, + earlierDate + ); + const laterStartOfDay = startOfDay(laterDate_); + const earlierStartOfDay = startOfDay(earlierDate_); + const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay); + const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); + return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay); +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js +function startOfISOWeekYear(date, options) { + const year = getISOWeekYear(date, options); + const fourthOfJanuary = constructFrom(options?.in || date, 0); + fourthOfJanuary.setFullYear(year, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + return startOfISOWeek(fourthOfJanuary); +} + +// packages/dataviews/node_modules/date-fns/addWeeks.js +function addWeeks(date, amount, options) { + return addDays(date, amount * 7, options); +} + +// packages/dataviews/node_modules/date-fns/addYears.js +function addYears(date, amount, options) { + return addMonths(date, amount * 12, options); +} + +// packages/dataviews/node_modules/date-fns/isDate.js +function isDate(value) { + return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"; +} + +// packages/dataviews/node_modules/date-fns/isValid.js +function isValid(date) { + return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date))); +} + +// packages/dataviews/node_modules/date-fns/startOfMonth.js +function startOfMonth(date, options) { + const _date = toDate(date, options?.in); + _date.setDate(1); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfYear.js +function startOfYear(date, options) { + const date_ = toDate(date, options?.in); + date_.setFullYear(date_.getFullYear(), 0, 1); + date_.setHours(0, 0, 0, 0); + return date_; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +var formatDistanceLocale = { + lessThanXSeconds: { + one: "less than a second", + other: "less than {{count}} seconds" + }, + xSeconds: { + one: "1 second", + other: "{{count}} seconds" + }, + halfAMinute: "half a minute", + lessThanXMinutes: { + one: "less than a minute", + other: "less than {{count}} minutes" + }, + xMinutes: { + one: "1 minute", + other: "{{count}} minutes" + }, + aboutXHours: { + one: "about 1 hour", + other: "about {{count}} hours" + }, + xHours: { + one: "1 hour", + other: "{{count}} hours" + }, + xDays: { + one: "1 day", + other: "{{count}} days" + }, + aboutXWeeks: { + one: "about 1 week", + other: "about {{count}} weeks" + }, + xWeeks: { + one: "1 week", + other: "{{count}} weeks" + }, + aboutXMonths: { + one: "about 1 month", + other: "about {{count}} months" + }, + xMonths: { + one: "1 month", + other: "{{count}} months" + }, + aboutXYears: { + one: "about 1 year", + other: "about {{count}} years" + }, + xYears: { + one: "1 year", + other: "{{count}} years" + }, + overXYears: { + one: "over 1 year", + other: "over {{count}} years" + }, + almostXYears: { + one: "almost 1 year", + other: "almost {{count}} years" + } +}; +var formatDistance = (token, count, options) => { + let result; + const tokenValue = formatDistanceLocale[token]; + if (typeof tokenValue === "string") { + result = tokenValue; + } else if (count === 1) { + result = tokenValue.one; + } else { + result = tokenValue.other.replace("{{count}}", count.toString()); + } + if (options?.addSuffix) { + if (options.comparison && options.comparison > 0) { + return "in " + result; + } else { + return result + " ago"; + } + } + return result; +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +function buildFormatLongFn(args) { + return (options = {}) => { + const width = options.width ? String(options.width) : args.defaultWidth; + const format6 = args.formats[width] || args.formats[args.defaultWidth]; + return format6; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js +var dateFormats = { + full: "EEEE, MMMM do, y", + long: "MMMM do, y", + medium: "MMM d, y", + short: "MM/dd/yyyy" +}; +var timeFormats = { + full: "h:mm:ss a zzzz", + long: "h:mm:ss a z", + medium: "h:mm:ss a", + short: "h:mm a" +}; +var dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: "{{date}}, {{time}}", + short: "{{date}}, {{time}}" +}; +var formatLong = { + date: buildFormatLongFn({ + formats: dateFormats, + defaultWidth: "full" + }), + time: buildFormatLongFn({ + formats: timeFormats, + defaultWidth: "full" + }), + dateTime: buildFormatLongFn({ + formats: dateTimeFormats, + defaultWidth: "full" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +var formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: "P" +}; +var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +function buildLocalizeFn(args) { + return (value, options) => { + const context = options?.context ? String(options.context) : "standalone"; + let valuesArray; + if (context === "formatting" && args.formattingValues) { + const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + const width = options?.width ? String(options.width) : defaultWidth; + valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + const defaultWidth = args.defaultWidth; + const width = options?.width ? String(options.width) : args.defaultWidth; + valuesArray = args.values[width] || args.values[defaultWidth]; + } + const index = args.argumentCallback ? args.argumentCallback(value) : value; + return valuesArray[index]; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js +var eraValues = { + narrow: ["B", "A"], + abbreviated: ["BC", "AD"], + wide: ["Before Christ", "Anno Domini"] +}; +var quarterValues = { + narrow: ["1", "2", "3", "4"], + abbreviated: ["Q1", "Q2", "Q3", "Q4"], + wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] +}; +var monthValues = { + narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], + abbreviated: [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + wide: [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] +}; +var dayValues = { + narrow: ["S", "M", "T", "W", "T", "F", "S"], + short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + wide: [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] +}; +var dayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + } +}; +var formattingDayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + } +}; +var ordinalNumber = (dirtyNumber, _options) => { + const number = Number(dirtyNumber); + const rem100 = number % 100; + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + "st"; + case 2: + return number + "nd"; + case 3: + return number + "rd"; + } + } + return number + "th"; +}; +var localize = { + ordinalNumber, + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: "wide" + }), + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: "wide", + argumentCallback: (quarter) => quarter - 1 + }), + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: "wide" + }), + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: "wide" + }), + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: "wide", + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: "wide" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js +function buildMatchFn(args) { + return (string, options = {}) => { + const width = options.width; + const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; + const matchResult = string.match(matchPattern); + if (!matchResult) { + return null; + } + const matchedString = matchResult[0]; + const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; + const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : ( + // [TODO] -- I challenge you to fix the type + findKey(parsePatterns, (pattern) => pattern.test(matchedString)) + ); + let value; + value = args.valueCallback ? args.valueCallback(key) : key; + value = options.valueCallback ? ( + // [TODO] -- I challenge you to fix the type + options.valueCallback(value) + ) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} +function findKey(object, predicate) { + for (const key in object) { + if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) { + return key; + } + } + return void 0; +} +function findIndex(array, predicate) { + for (let key = 0; key < array.length; key++) { + if (predicate(array[key])) { + return key; + } + } + return void 0; +} + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +function buildMatchPatternFn(args) { + return (string, options = {}) => { + const matchResult = string.match(args.matchPattern); + if (!matchResult) return null; + const matchedString = matchResult[0]; + const parseResult = string.match(args.parsePattern); + if (!parseResult) return null; + let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; + value = options.valueCallback ? options.valueCallback(value) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js +var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +var parseOrdinalNumberPattern = /\d+/i; +var matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i +}; +var parseEraPatterns = { + any: [/^b/i, /^(a|c)/i] +}; +var matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i +}; +var parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i] +}; +var matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i +}; +var parseMonthPatterns = { + narrow: [ + /^j/i, + /^f/i, + /^m/i, + /^a/i, + /^m/i, + /^j/i, + /^j/i, + /^a/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ], + any: [ + /^ja/i, + /^f/i, + /^mar/i, + /^ap/i, + /^may/i, + /^jun/i, + /^jul/i, + /^au/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ] +}; +var matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i +}; +var parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] +}; +var matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i +}; +var parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i + } +}; +var match = { + ordinalNumber: buildMatchPatternFn({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: (value) => parseInt(value, 10) + }), + era: buildMatchFn({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseEraPatterns, + defaultParseWidth: "any" + }), + quarter: buildMatchFn({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseQuarterPatterns, + defaultParseWidth: "any", + valueCallback: (index) => index + 1 + }), + month: buildMatchFn({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseMonthPatterns, + defaultParseWidth: "any" + }), + day: buildMatchFn({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseDayPatterns, + defaultParseWidth: "any" + }), + dayPeriod: buildMatchFn({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: "any", + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: "any" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US.js +var enUS = { + code: "en-US", + formatDistance, + formatLong, + formatRelative, + localize, + match, + options: { + weekStartsOn: 0, + firstWeekContainsDate: 1 + } +}; + +// packages/dataviews/node_modules/date-fns/getDayOfYear.js +function getDayOfYear(date, options) { + const _date = toDate(date, options?.in); + const diff = differenceInCalendarDays(_date, startOfYear(_date)); + const dayOfYear = diff + 1; + return dayOfYear; +} + +// packages/dataviews/node_modules/date-fns/getISOWeek.js +function getISOWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/getWeekYear.js +function getWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const firstWeekOfNextYear = constructFrom(options?.in || date, 0); + firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfWeek(firstWeekOfNextYear, options); + const firstWeekOfThisYear = constructFrom(options?.in || date, 0); + firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfWeek(firstWeekOfThisYear, options); + if (+_date >= +startOfNextYear) { + return year + 1; + } else if (+_date >= +startOfThisYear) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/startOfWeekYear.js +function startOfWeekYear(date, options) { + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const year = getWeekYear(date, options); + const firstWeek = constructFrom(options?.in || date, 0); + firstWeek.setFullYear(year, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + const _date = startOfWeek(firstWeek, options); + return _date; +} + +// packages/dataviews/node_modules/date-fns/getWeek.js +function getWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js +function addLeadingZeros(number, targetLength) { + const sign = number < 0 ? "-" : ""; + const output = Math.abs(number).toString().padStart(targetLength, "0"); + return sign + output; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js +var lightFormatters = { + // Year + y(date, token) { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); + }, + // Month + M(date, token) { + const month = date.getMonth(); + return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); + }, + // Day of the month + d(date, token) { + return addLeadingZeros(date.getDate(), token.length); + }, + // AM or PM + a(date, token) { + const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return dayPeriodEnumValue.toUpperCase(); + case "aaa": + return dayPeriodEnumValue; + case "aaaaa": + return dayPeriodEnumValue[0]; + case "aaaa": + default: + return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; + } + }, + // Hour [1-12] + h(date, token) { + return addLeadingZeros(date.getHours() % 12 || 12, token.length); + }, + // Hour [0-23] + H(date, token) { + return addLeadingZeros(date.getHours(), token.length); + }, + // Minute + m(date, token) { + return addLeadingZeros(date.getMinutes(), token.length); + }, + // Second + s(date, token) { + return addLeadingZeros(date.getSeconds(), token.length); + }, + // Fraction of second + S(date, token) { + const numberOfDigits = token.length; + const milliseconds = date.getMilliseconds(); + const fractionalSeconds = Math.trunc( + milliseconds * Math.pow(10, numberOfDigits - 3) + ); + return addLeadingZeros(fractionalSeconds, token.length); + } +}; + +// packages/dataviews/node_modules/date-fns/_lib/format/formatters.js +var dayPeriodEnum = { + am: "am", + pm: "pm", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" +}; +var formatters = { + // Era + G: function(date, token, localize2) { + const era = date.getFullYear() > 0 ? 1 : 0; + switch (token) { + // AD, BC + case "G": + case "GG": + case "GGG": + return localize2.era(era, { width: "abbreviated" }); + // A, B + case "GGGGG": + return localize2.era(era, { width: "narrow" }); + // Anno Domini, Before Christ + case "GGGG": + default: + return localize2.era(era, { width: "wide" }); + } + }, + // Year + y: function(date, token, localize2) { + if (token === "yo") { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize2.ordinalNumber(year, { unit: "year" }); + } + return lightFormatters.y(date, token); + }, + // Local week-numbering year + Y: function(date, token, localize2, options) { + const signedWeekYear = getWeekYear(date, options); + const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; + if (token === "YY") { + const twoDigitYear = weekYear % 100; + return addLeadingZeros(twoDigitYear, 2); + } + if (token === "Yo") { + return localize2.ordinalNumber(weekYear, { unit: "year" }); + } + return addLeadingZeros(weekYear, token.length); + }, + // ISO week-numbering year + R: function(date, token) { + const isoWeekYear = getISOWeekYear(date); + return addLeadingZeros(isoWeekYear, token.length); + }, + // Extended year. This is a single number designating the year of this calendar system. + // The main difference between `y` and `u` localizers are B.C. years: + // | Year | `y` | `u` | + // |------|-----|-----| + // | AC 1 | 1 | 1 | + // | BC 1 | 1 | 0 | + // | BC 2 | 2 | -1 | + // Also `yy` always returns the last two digits of a year, + // while `uu` pads single digit years to 2 characters and returns other years unchanged. + u: function(date, token) { + const year = date.getFullYear(); + return addLeadingZeros(year, token.length); + }, + // Quarter + Q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "Q": + return String(quarter); + // 01, 02, 03, 04 + case "QQ": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "Qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "QQQ": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "formatting" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "QQQQQ": + return localize2.quarter(quarter, { + width: "narrow", + context: "formatting" + }); + // 1st quarter, 2nd quarter, ... + case "QQQQ": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone quarter + q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "q": + return String(quarter); + // 01, 02, 03, 04 + case "qq": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "qqq": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "standalone" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "qqqqq": + return localize2.quarter(quarter, { + width: "narrow", + context: "standalone" + }); + // 1st quarter, 2nd quarter, ... + case "qqqq": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "standalone" + }); + } + }, + // Month + M: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + case "M": + case "MM": + return lightFormatters.M(date, token); + // 1st, 2nd, ..., 12th + case "Mo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "MMM": + return localize2.month(month, { + width: "abbreviated", + context: "formatting" + }); + // J, F, ..., D + case "MMMMM": + return localize2.month(month, { + width: "narrow", + context: "formatting" + }); + // January, February, ..., December + case "MMMM": + default: + return localize2.month(month, { width: "wide", context: "formatting" }); + } + }, + // Stand-alone month + L: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + // 1, 2, ..., 12 + case "L": + return String(month + 1); + // 01, 02, ..., 12 + case "LL": + return addLeadingZeros(month + 1, 2); + // 1st, 2nd, ..., 12th + case "Lo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "LLL": + return localize2.month(month, { + width: "abbreviated", + context: "standalone" + }); + // J, F, ..., D + case "LLLLL": + return localize2.month(month, { + width: "narrow", + context: "standalone" + }); + // January, February, ..., December + case "LLLL": + default: + return localize2.month(month, { width: "wide", context: "standalone" }); + } + }, + // Local week of year + w: function(date, token, localize2, options) { + const week = getWeek(date, options); + if (token === "wo") { + return localize2.ordinalNumber(week, { unit: "week" }); + } + return addLeadingZeros(week, token.length); + }, + // ISO week of year + I: function(date, token, localize2) { + const isoWeek = getISOWeek(date); + if (token === "Io") { + return localize2.ordinalNumber(isoWeek, { unit: "week" }); + } + return addLeadingZeros(isoWeek, token.length); + }, + // Day of the month + d: function(date, token, localize2) { + if (token === "do") { + return localize2.ordinalNumber(date.getDate(), { unit: "date" }); + } + return lightFormatters.d(date, token); + }, + // Day of year + D: function(date, token, localize2) { + const dayOfYear = getDayOfYear(date); + if (token === "Do") { + return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); + } + return addLeadingZeros(dayOfYear, token.length); + }, + // Day of week + E: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + switch (token) { + // Tue + case "E": + case "EE": + case "EEE": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "EEEEE": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "EEEEEE": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "EEEE": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Local day of week + e: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (Nth day of week with current locale or weekStartsOn) + case "e": + return String(localDayOfWeek); + // Padded numerical value + case "ee": + return addLeadingZeros(localDayOfWeek, 2); + // 1st, 2nd, ..., 7th + case "eo": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "eee": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "eeeee": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "eeeeee": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "eeee": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone local day of week + c: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (same as in `e`) + case "c": + return String(localDayOfWeek); + // Padded numerical value + case "cc": + return addLeadingZeros(localDayOfWeek, token.length); + // 1st, 2nd, ..., 7th + case "co": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "ccc": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "standalone" + }); + // T + case "ccccc": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "standalone" + }); + // Tu + case "cccccc": + return localize2.day(dayOfWeek, { + width: "short", + context: "standalone" + }); + // Tuesday + case "cccc": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "standalone" + }); + } + }, + // ISO day of week + i: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + switch (token) { + // 2 + case "i": + return String(isoDayOfWeek); + // 02 + case "ii": + return addLeadingZeros(isoDayOfWeek, token.length); + // 2nd + case "io": + return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); + // Tue + case "iii": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "iiiii": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "iiiiii": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "iiii": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // AM or PM + a: function(date, token, localize2) { + const hours = date.getHours(); + const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "aaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "aaaaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "aaaa": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // AM, PM, midnight, noon + b: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours === 12) { + dayPeriodEnumValue = dayPeriodEnum.noon; + } else if (hours === 0) { + dayPeriodEnumValue = dayPeriodEnum.midnight; + } else { + dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + } + switch (token) { + case "b": + case "bb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "bbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "bbbbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "bbbb": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // in the morning, in the afternoon, in the evening, at night + B: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours >= 17) { + dayPeriodEnumValue = dayPeriodEnum.evening; + } else if (hours >= 12) { + dayPeriodEnumValue = dayPeriodEnum.afternoon; + } else if (hours >= 4) { + dayPeriodEnumValue = dayPeriodEnum.morning; + } else { + dayPeriodEnumValue = dayPeriodEnum.night; + } + switch (token) { + case "B": + case "BB": + case "BBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "BBBBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "BBBB": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // Hour [1-12] + h: function(date, token, localize2) { + if (token === "ho") { + let hours = date.getHours() % 12; + if (hours === 0) hours = 12; + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return lightFormatters.h(date, token); + }, + // Hour [0-23] + H: function(date, token, localize2) { + if (token === "Ho") { + return localize2.ordinalNumber(date.getHours(), { unit: "hour" }); + } + return lightFormatters.H(date, token); + }, + // Hour [0-11] + K: function(date, token, localize2) { + const hours = date.getHours() % 12; + if (token === "Ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Hour [1-24] + k: function(date, token, localize2) { + let hours = date.getHours(); + if (hours === 0) hours = 24; + if (token === "ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Minute + m: function(date, token, localize2) { + if (token === "mo") { + return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" }); + } + return lightFormatters.m(date, token); + }, + // Second + s: function(date, token, localize2) { + if (token === "so") { + return localize2.ordinalNumber(date.getSeconds(), { unit: "second" }); + } + return lightFormatters.s(date, token); + }, + // Fraction of second + S: function(date, token) { + return lightFormatters.S(date, token); + }, + // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) + X: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + if (timezoneOffset === 0) { + return "Z"; + } + switch (token) { + // Hours and optional minutes + case "X": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XX` + case "XXXX": + case "XX": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XXX` + case "XXXXX": + case "XXX": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) + x: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Hours and optional minutes + case "x": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xx` + case "xxxx": + case "xx": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xxx` + case "xxxxx": + case "xxx": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (GMT) + O: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "O": + case "OO": + case "OOO": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "OOOO": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (specific non-location) + z: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "z": + case "zz": + case "zzz": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "zzzz": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Seconds timestamp + t: function(date, token, _localize) { + const timestamp = Math.trunc(+date / 1e3); + return addLeadingZeros(timestamp, token.length); + }, + // Milliseconds timestamp + T: function(date, token, _localize) { + return addLeadingZeros(+date, token.length); + } +}; +function formatTimezoneShort(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = Math.trunc(absOffset / 60); + const minutes = absOffset % 60; + if (minutes === 0) { + return sign + String(hours); + } + return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); +} +function formatTimezoneWithOptionalMinutes(offset, delimiter) { + if (offset % 60 === 0) { + const sign = offset > 0 ? "-" : "+"; + return sign + addLeadingZeros(Math.abs(offset) / 60, 2); + } + return formatTimezone(offset, delimiter); +} +function formatTimezone(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); + const minutes = addLeadingZeros(absOffset % 60, 2); + return sign + hours + delimiter + minutes; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js +var dateLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "P": + return formatLong2.date({ width: "short" }); + case "PP": + return formatLong2.date({ width: "medium" }); + case "PPP": + return formatLong2.date({ width: "long" }); + case "PPPP": + default: + return formatLong2.date({ width: "full" }); + } +}; +var timeLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "p": + return formatLong2.time({ width: "short" }); + case "pp": + return formatLong2.time({ width: "medium" }); + case "ppp": + return formatLong2.time({ width: "long" }); + case "pppp": + default: + return formatLong2.time({ width: "full" }); + } +}; +var dateTimeLongFormatter = (pattern, formatLong2) => { + const matchResult = pattern.match(/(P+)(p+)?/) || []; + const datePattern = matchResult[1]; + const timePattern = matchResult[2]; + if (!timePattern) { + return dateLongFormatter(pattern, formatLong2); + } + let dateTimeFormat; + switch (datePattern) { + case "P": + dateTimeFormat = formatLong2.dateTime({ width: "short" }); + break; + case "PP": + dateTimeFormat = formatLong2.dateTime({ width: "medium" }); + break; + case "PPP": + dateTimeFormat = formatLong2.dateTime({ width: "long" }); + break; + case "PPPP": + default: + dateTimeFormat = formatLong2.dateTime({ width: "full" }); + break; + } + return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); +}; +var longFormatters = { + p: timeLongFormatter, + P: dateTimeLongFormatter +}; + +// packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js +var dayOfYearTokenRE = /^D+$/; +var weekYearTokenRE = /^Y+$/; +var throwTokens = ["D", "DD", "YY", "YYYY"]; +function isProtectedDayOfYearToken(token) { + return dayOfYearTokenRE.test(token); +} +function isProtectedWeekYearToken(token) { + return weekYearTokenRE.test(token); +} +function warnOrThrowProtectedError(token, format6, input) { + const _message = message(token, format6, input); + console.warn(_message); + if (throwTokens.includes(token)) throw new RangeError(_message); +} +function message(token, format6, input) { + const subject = token[0] === "Y" ? "years" : "days of the month"; + return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format6}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; +} + +// packages/dataviews/node_modules/date-fns/format.js +var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; +var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp = /^'([^]*?)'?$/; +var doubleQuoteRegExp = /''/g; +var unescapedLatinCharacterRegExp = /[a-zA-Z]/; +function format(date, formatStr, options) { + const defaultOptions2 = getDefaultOptions(); + const locale = options?.locale ?? defaultOptions2.locale ?? enUS; + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const originalDate = toDate(date, options?.in); + if (!isValid(originalDate)) { + throw new RangeError("Invalid time value"); + } + let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => { + const firstCharacter = substring[0]; + if (firstCharacter === "p" || firstCharacter === "P") { + const longFormatter = longFormatters[firstCharacter]; + return longFormatter(substring, locale.formatLong); + } + return substring; + }).join("").match(formattingTokensRegExp).map((substring) => { + if (substring === "''") { + return { isToken: false, value: "'" }; + } + const firstCharacter = substring[0]; + if (firstCharacter === "'") { + return { isToken: false, value: cleanEscapedString(substring) }; + } + if (formatters[firstCharacter]) { + return { isToken: true, value: substring }; + } + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" + ); + } + return { isToken: false, value: substring }; + }); + if (locale.localize.preprocessor) { + parts = locale.localize.preprocessor(originalDate, parts); + } + const formatterOptions = { + firstWeekContainsDate, + weekStartsOn, + locale + }; + return parts.map((part) => { + if (!part.isToken) return part.value; + const token = part.value; + if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { + warnOrThrowProtectedError(token, formatStr, String(date)); + } + const formatter = formatters[token[0]]; + return formatter(originalDate, token, locale.localize, formatterOptions); + }).join(""); +} +function cleanEscapedString(input) { + const matched = input.match(escapedStringRegExp); + if (!matched) { + return input; + } + return matched[1].replace(doubleQuoteRegExp, "'"); +} + +// packages/dataviews/node_modules/date-fns/subDays.js +function subDays(date, amount, options) { + return addDays(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subMonths.js +function subMonths(date, amount, options) { + return addMonths(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subWeeks.js +function subWeeks(date, amount, options) { + return addWeeks(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subYears.js +function subYears(date, amount, options) { + return addYears(date, -amount, options); +} + +// packages/dataviews/build-module/utils/operators.mjs +var import_i18n23 = __toESM(require_i18n(), 1); +var import_element27 = __toESM(require_element(), 1); +var import_date = __toESM(require_date(), 1); +var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); +var filterTextWrappers = { + Name: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }), + Value: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" }) +}; +function getRelativeDate(value, unit) { + switch (unit) { + case "days": + return subDays(/* @__PURE__ */ new Date(), value); + case "weeks": + return subWeeks(/* @__PURE__ */ new Date(), value); + case "months": + return subMonths(/* @__PURE__ */ new Date(), value); + case "years": + return subYears(/* @__PURE__ */ new Date(), value); + default: + return /* @__PURE__ */ new Date(); + } +} +var isNoneOperatorDefinition = { + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is none of"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */ + (0, import_i18n23.__)("%1$s is none of: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter: ((item, field, filterValue) => { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return !filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return !filterValue.includes(fieldValue); + } + return false; + }), + selection: "multi" +}; +var OPERATORS = [ + { + name: OPERATOR_IS_ANY, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return filterValue.includes(fieldValue); + } + return false; + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NONE, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_IS_ALL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes all"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes all: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + return filterValue.every((value) => { + return field.getValue({ item })?.includes(value); + }); + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NOT_ALL, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_BETWEEN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Between (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Item count"). 2: Filter value min. 3: Filter value max. e.g.: "Item count between (inc): 10 and 180". */ + (0, import_i18n23.__)( + "%1$s between (inc): %2$s and %3$s" + ), + filter.name, + activeElements[0].label[0], + activeElements[0].label[1] + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!Array.isArray(filterValue) || filterValue.length !== 2 || filterValue[0] === void 0 || filterValue[1] === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") { + return fieldValue >= filterValue[0] && fieldValue <= filterValue[1]; + } + return false; + }, + selection: "custom" + }, + { + name: OPERATOR_IN_THE_PAST, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("In the past"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */ + (0, import_i18n23.__)( + "%1$s is in the past: %2$s" + ), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date(); + }, + selection: "custom" + }, + { + name: OPERATOR_OVER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Over"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */ + (0, import_i18n23.__)("%1$s is over: %2$s"), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue < targetDate; + }, + selection: "custom" + }, + { + name: OPERATOR_IS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue === field.getValue({ item }) || filterValue === void 0; + }, + selection: "single" + }, + { + name: OPERATOR_IS_NOT, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is not"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue !== field.getValue({ item }); + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */ + (0, import_i18n23.__)("%1$s is less than: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue < filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue > filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is less than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue <= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue >= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is before: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate < filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is after: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate > filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or before: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate <= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or after: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate >= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Contains"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */ + (0, import_i18n23.__)("%1$s contains: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Doesn't contain"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */ + (0, import_i18n23.__)( + "%1$s doesn't contain: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_STARTS_WITH, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Starts with"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */ + (0, import_i18n23.__)("%1$s starts with: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("On"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() === fieldDate.getTime(); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Not on"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() !== fieldDate.getTime(); + }, + selection: "single" + } +]; +var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name); +var getAllOperatorNames = () => OPERATORS.map((op) => op.name); +var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some( + (op) => op.name === name +); +var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); +var ENTER = "Enter"; +var SPACE = " "; +var FilterText = ({ + activeElements, + filterInView, + filter +}) => { + if (activeElements === void 0 || activeElements.length === 0) { + return filter.name; + } + const operator = getOperatorByName(filterInView?.operator); + if (operator !== void 0) { + return operator.filterText(filter, activeElements); + } + return (0, import_i18n24.sprintf)( + /* translators: 1: Filter name e.g.: "Unknown status for Author". */ + (0, import_i18n24.__)("Unknown status for %1$s"), + filter.name + ); +}; +function OperatorSelector({ + filter, + view, + onChangeView +}) { + const operatorOptions = filter.operators?.map((operator) => ({ + value: operator, + label: getOperatorByName(operator)?.label || operator + })); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const value = currentFilter?.operator || filter.operators[0]; + return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "flex-start", + className: "dataviews-filters__summary-operators-container", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_components21.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }), + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.SelectControl, + { + className: "dataviews-filters__summary-operators-filter-select", + label: (0, import_i18n24.__)("Conditions"), + value, + options: operatorOptions, + onChange: (newValue) => { + const newOperator = newValue; + const currentOperator = currentFilter?.operator; + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + const currentOpSelectionModel = getOperatorByName( + currentOperator + )?.selection; + const newOpSelectionModel = getOperatorByName( + newOperator + )?.selection; + const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [ + currentOpSelectionModel, + newOpSelectionModel + ].includes("custom"); + return { + ..._filter, + value: shouldResetValue ? void 0 : _filter.value, + operator: newOperator + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: newOperator, + value: void 0 + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + size: "small", + variant: "minimal", + hideLabelFromVision: true + } + ) + ] + } + ); +} +function Filter({ + addFilterRef, + openedFilter, + fields, + ...commonProps +}) { + const toggleRef = (0, import_element28.useRef)(null); + const { filter, view, onChangeView } = commonProps; + const filterInView = view.filters?.find( + (f2) => f2.field === filter.field + ); + let activeElements = []; + const field = (0, import_element28.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Configure getValue as if Item was a plain object. + // See related input-widget.tsx + getValue: ({ item }) => item[currentField.id] + }; + } + return currentField; + }, [fields, filter.field]); + const { elements } = useElements({ + elements: filter.elements, + getElements: filter.getElements + }); + if (elements.length > 0) { + activeElements = elements.filter((element) => { + if (filter.singleSelection) { + return element.value === filterInView?.value; + } + return filterInView?.value?.includes(element.value); + }); + } else if (Array.isArray(filterInView?.value)) { + const label = filterInView.value.map((v2) => { + const formattedValue = field?.getValueFormatted({ + item: { [field.id]: v2 }, + field + }); + return formattedValue || String(v2); + }); + activeElements = [ + { + value: filterInView.value, + // @ts-ignore + label + } + ]; + } else if (typeof filterInView?.value === "object") { + activeElements = [ + { value: filterInView.value, label: filterInView.value } + ]; + } else if (filterInView?.value !== void 0) { + const label = field !== void 0 ? field.getValueFormatted({ + item: { [field.id]: filterInView.value }, + field + }) : String(filterInView.value); + activeElements = [ + { + value: filterInView.value, + label + } + ]; + } + const isPrimary = filter.isPrimary; + const isLocked = filterInView?.isLocked; + const hasValues = !isLocked && filterInView?.value !== void 0; + const canResetOrRemove = !isLocked && (!isPrimary || hasValues); + return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.Dropdown, + { + defaultOpen: openedFilter === filter.field, + contentClassName: "dataviews-filters__summary-popover", + popoverProps: { placement: "bottom-start", role: "dialog" }, + onClose: () => { + toggleRef.current?.focus(); + }, + renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [ + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.Tooltip, + { + text: (0, import_i18n24.sprintf)( + /* translators: 1: Filter name. */ + (0, import_i18n24.__)("Filter by: %1$s"), + filter.name.toLowerCase() + ), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + "div", + { + className: clsx_default( + "dataviews-filters__summary-chip", + { + "has-reset": canResetOrRemove, + "has-values": hasValues, + "is-not-clickable": isLocked + } + ), + role: "button", + tabIndex: isLocked ? -1 : 0, + onClick: () => { + if (!isLocked) { + onToggle(); + } + }, + onKeyDown: (event) => { + if (!isLocked && [ENTER, SPACE].includes(event.key)) { + onToggle(); + event.preventDefault(); + } + }, + "aria-disabled": isLocked, + "aria-pressed": isOpen, + "aria-expanded": isOpen, + ref: toggleRef, + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + FilterText, + { + activeElements, + filterInView, + filter + } + ) + } + ) + } + ), + canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + import_components21.Tooltip, + { + text: isPrimary ? (0, import_i18n24.__)("Reset") : (0, import_i18n24.__)("Remove"), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + "button", + { + className: clsx_default( + "dataviews-filters__summary-chip-remove", + { "has-values": hasValues } + ), + onClick: () => { + onChangeView({ + ...view, + page: 1, + filters: view.filters?.filter( + (_filter) => _filter.field !== filter.field + ) + }); + if (!isPrimary) { + addFilterRef.current?.focus(); + } else { + toggleRef.current?.focus(); + } + }, + children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_components21.Icon, { icon: close_small_default }) + } + ) + } + ) + ] }), + renderContent: () => { + return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Stack, { direction: "column", justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(OperatorSelector, { ...commonProps }), + commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + SearchWidget, + { + ...commonProps, + filter: { + ...commonProps.filter, + elements + } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(InputWidget, { ...commonProps, fields }) + ] }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/add-filter.mjs +var import_components22 = __toESM(require_components(), 1); +var import_i18n25 = __toESM(require_i18n(), 1); +var import_element29 = __toESM(require_element(), 1); +var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu4 } = unlock(import_components22.privateApis); +function AddFilterMenu({ + filters, + view, + onChangeView, + setOpenedFilter, + triggerProps +}) { + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Menu4, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.TriggerButton, { ...triggerProps }), + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Menu4.Item, + { + onClick: () => { + setOpenedFilter(filter.field); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: filter.field, + value: void 0, + operator: filter.operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.ItemLabel, { children: filter.name }) + }, + filter.field + ); + }) }) + ] }); +} +function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) { + if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) { + return null; + } + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + AddFilterMenu, + { + triggerProps: { + render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components22.Button, + { + accessibleWhenDisabled: true, + size: "compact", + className: "dataviews-filters-button", + variant: "tertiary", + disabled: !inactiveFilters.length, + ref + } + ), + children: (0, import_i18n25.__)("Add filter") + }, + ...{ filters, view, onChangeView, setOpenedFilter } + } + ); +} +var add_filter_default = (0, import_element29.forwardRef)(AddFilter); + +// packages/dataviews/build-module/components/dataviews-filters/reset-filters.mjs +var import_components23 = __toESM(require_components(), 1); +var import_i18n26 = __toESM(require_i18n(), 1); +var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); +function ResetFilter({ + filters, + view, + onChangeView +}) { + const isPrimary = (field) => filters.some( + (_filter) => _filter.field === field && _filter.isPrimary + ); + const isDisabled = !view.search && !view.filters?.some( + (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field)) + ); + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + import_components23.Button, + { + disabled: isDisabled, + accessibleWhenDisabled: true, + size: "compact", + variant: "tertiary", + className: "dataviews-filters__reset-button", + onClick: () => { + onChangeView({ + ...view, + page: 1, + search: "", + filters: view.filters?.filter((f2) => !!f2.isLocked) || [] + }); + }, + children: (0, import_i18n26.__)("Reset") + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/use-filters.mjs +var import_element30 = __toESM(require_element(), 1); +function useFilters(fields, view) { + return (0, import_element30.useMemo)(() => { + const filters = []; + fields.forEach((field) => { + if (field.filterBy === false || !field.hasElements && !field.Edit) { + return; + } + const operators = field.filterBy.operators; + const isPrimary = !!field.filterBy?.isPrimary; + const isLocked = view.filters?.some( + (f2) => f2.field === field.id && !!f2.isLocked + ) ?? false; + filters.push({ + field: field.id, + name: field.label, + elements: field.elements, + getElements: field.getElements, + hasElements: field.hasElements, + singleSelection: operators.some( + (op) => isSingleSelectionOperator(op) + ), + operators, + isVisible: isLocked || isPrimary || !!view.filters?.some( + (f2) => f2.field === field.id && isRegisteredOperator(f2.operator) + ), + isPrimary, + isLocked + }); + }); + filters.sort((a2, b2) => { + if (a2.isLocked && !b2.isLocked) { + return -1; + } + if (!a2.isLocked && b2.isLocked) { + return 1; + } + if (a2.isPrimary && !b2.isPrimary) { + return -1; + } + if (!a2.isPrimary && b2.isPrimary) { + return 1; + } + return a2.name.localeCompare(b2.name); + }); + return filters; + }, [fields, view]); +} +var use_filters_default = useFilters; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); +function Filters({ className }) { + const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element31.useContext)(dataviews_context_default); + const addFilterRef = (0, import_element31.useRef)(null); + const filters = use_filters_default(fields, view); + const addFilter = /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + add_filter_default, + { + filters, + view, + onChangeView, + ref: addFilterRef, + setOpenedFilter + }, + "add-filter" + ); + const visibleFilters = filters.filter((filter) => filter.isVisible); + if (visibleFilters.length === 0) { + return null; + } + const filterComponents = [ + ...visibleFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + Filter, + { + filter, + view, + fields, + onChangeView, + addFilterRef, + openedFilter + }, + filter.field + ); + }), + addFilter + ]; + filterComponents.push( + /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + ResetFilter, + { + filters, + view, + onChangeView + }, + "reset-filters" + ) + ); + return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + gap: "sm", + style: { width: "fit-content" }, + wrap: "wrap", + className, + children: filterComponents + } + ); +} +var filters_default = (0, import_element31.memo)(Filters); + +// packages/dataviews/build-module/components/dataviews-filters/toggle.mjs +var import_element32 = __toESM(require_element(), 1); +var import_components24 = __toESM(require_components(), 1); +var import_i18n27 = __toESM(require_i18n(), 1); +var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); +function FiltersToggle() { + const { + filters, + view, + onChangeView, + setOpenedFilter, + isShowingFilter, + setIsShowingFilter + } = (0, import_element32.useContext)(dataviews_context_default); + const buttonRef = (0, import_element32.useRef)(null); + const onChangeViewWithFilterVisibility = (0, import_element32.useCallback)( + (_view) => { + onChangeView(_view); + setIsShowingFilter(true); + }, + [onChangeView, setIsShowingFilter] + ); + if (filters.length === 0) { + return null; + } + const hasVisibleFilters = filters.some((filter) => filter.isVisible); + const addFilterButtonProps = { + label: (0, import_i18n27.__)("Add filter"), + "aria-expanded": false, + isPressed: false + }; + const toggleFiltersButtonProps = { + label: (0, import_i18n27._x)("Filter", "verb"), + "aria-expanded": isShowingFilter, + isPressed: isShowingFilter, + onClick: () => { + if (!isShowingFilter) { + setOpenedFilter(null); + } + setIsShowingFilter(!isShowingFilter); + } + }; + const hasPrimaryOrLockedFilters = filters.some( + (filter) => filter.isPrimary || filter.isLocked + ); + const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components24.Button, + { + ref: buttonRef, + className: "dataviews-filters__visibility-toggle", + size: "compact", + icon: funnel_default, + disabled: hasPrimaryOrLockedFilters, + accessibleWhenDisabled: true, + ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + AddFilterMenu, + { + filters, + view, + onChangeView: onChangeViewWithFilterVisibility, + setOpenedFilter, + triggerProps: { render: buttonComponent } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + FilterVisibilityToggle, + { + buttonRef, + filtersCount: view.filters?.length, + children: buttonComponent + } + ) }); +} +function FilterVisibilityToggle({ + buttonRef, + filtersCount, + children +}) { + (0, import_element32.useEffect)( + () => () => { + buttonRef.current?.focus(); + }, + [buttonRef] + ); + return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [ + children, + !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount }) + ] }); +} +var toggle_default = FiltersToggle; + +// packages/dataviews/build-module/components/dataviews-filters/filters-toggled.mjs +var import_element33 = __toESM(require_element(), 1); +var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); +function FiltersToggled(props) { + const { isShowingFilter } = (0, import_element33.useContext)(dataviews_context_default); + if (!isShowingFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(filters_default, { ...props }); +} +var filters_toggled_default = FiltersToggled; + +// packages/dataviews/build-module/components/dataviews-layout/index.mjs +var import_element34 = __toESM(require_element(), 1); +var import_i18n28 = __toESM(require_i18n(), 1); +var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); +function DataViewsLayout({ className }) { + const { + actions = [], + data, + fields, + getItemId: getItemId2, + getItemLevel: getItemLevel2, + hasInitiallyLoaded, + isLoading, + view, + onChangeView, + selection, + onChangeSelection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + defaultLayouts, + empty = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { children: (0, import_i18n28.__)("No results") }) + } = (0, import_element34.useContext)(dataviews_context_default); + if (!hasInitiallyLoaded) { + return null; + } + const ViewComponent = VIEW_LAYOUTS.find( + (v2) => v2.type === view.type && defaultLayouts[v2.type] + )?.component; + return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + ViewComponent, + { + className, + actions, + data, + fields, + getItemId: getItemId2, + getItemLevel: getItemLevel2, + isLoading, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + renderItemLink, + isItemClickable, + view, + empty + } + ); +} + +// packages/dataviews/build-module/components/dataviews-footer/index.mjs +var import_element35 = __toESM(require_element(), 1); +var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); +var EMPTY_ARRAY5 = []; +function DataViewsFooter() { + const { + view, + paginationInfo: { totalItems = 0, totalPages }, + data, + actions = EMPTY_ARRAY5, + isLoading, + hasInitiallyLoaded, + hasInfiniteScrollHandler + } = (0, import_element35.useContext)(dataviews_context_default); + const isRefreshing = !!isLoading && hasInitiallyLoaded && !hasInfiniteScrollHandler && !!data?.length; + const isDelayedRefreshing = useDelayedLoading(!!isRefreshing); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type); + if (!isRefreshing && (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions)) { + return null; + } + return (!!totalItems || isRefreshing) && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( + "div", + { + className: "dataviews-footer", + inert: isRefreshing ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)( + Stack, + { + direction: "row", + justify: "end", + align: "center", + className: clsx_default("dataviews-footer__content", { + "is-refreshing": isDelayedRefreshing + }), + gap: "sm", + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(BulkActionsFooter, {}), + /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(dataviews_pagination_default, {}) + ] + } + ) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-search/index.mjs +var import_i18n29 = __toESM(require_i18n(), 1); +var import_element36 = __toESM(require_element(), 1); +var import_components25 = __toESM(require_components(), 1); +var import_compose10 = __toESM(require_compose(), 1); +var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); +var DataViewsSearch = (0, import_element36.memo)(function Search({ label }) { + const { view, onChangeView } = (0, import_element36.useContext)(dataviews_context_default); + const [search, setSearch, debouncedSearch] = (0, import_compose10.useDebouncedInput)( + view.search + ); + (0, import_element36.useEffect)(() => { + setSearch(view.search ?? ""); + }, [view.search, setSearch]); + const onChangeViewRef = (0, import_element36.useRef)(onChangeView); + const viewRef = (0, import_element36.useRef)(view); + (0, import_element36.useEffect)(() => { + onChangeViewRef.current = onChangeView; + viewRef.current = view; + }, [onChangeView, view]); + (0, import_element36.useEffect)(() => { + if (debouncedSearch !== viewRef.current?.search) { + onChangeViewRef.current({ + ...viewRef.current, + page: 1, + search: debouncedSearch + }); + } + }, [debouncedSearch]); + const searchLabel = label || (0, import_i18n29.__)("Search"); + return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + import_components25.SearchControl, + { + className: "dataviews-search", + onChange: setSearch, + value: search, + label: searchLabel, + placeholder: searchLabel, + size: "compact" + } + ); +}); +var dataviews_search_default = DataViewsSearch; + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_components27 = __toESM(require_components(), 1); +var import_i18n31 = __toESM(require_i18n(), 1); +var import_element38 = __toESM(require_element(), 1); +var import_warning = __toESM(require_warning(), 1); +var import_compose11 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +var import_components26 = __toESM(require_components(), 1); +var import_i18n30 = __toESM(require_i18n(), 1); +var import_element37 = __toESM(require_element(), 1); +var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); +function InfiniteScrollToggle() { + const context = (0, import_element37.useContext)(dataviews_context_default); + const { view, onChangeView } = context; + const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false; + if (!context.hasInfiniteScrollHandler) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)( + import_components26.ToggleControl, + { + label: (0, import_i18n30.__)("Enable infinite scroll"), + help: (0, import_i18n30.__)( + "Automatically load more content as you scroll, instead of showing pagination links." + ), + checked: infiniteScrollEnabled, + onChange: (newValue) => { + onChangeView({ + ...view, + infiniteScrollEnabled: newValue + }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu5 } = unlock(import_components27.privateApis); +var DATAVIEWS_CONFIG_POPOVER_PROPS = { + className: "dataviews-config__popover", + placement: "bottom-end", + offset: 9 +}; +function ViewTypeMenu() { + const { view, onChangeView, defaultLayouts } = (0, import_element38.useContext)(dataviews_context_default); + const availableLayouts = Object.keys(defaultLayouts); + if (availableLayouts.length <= 1) { + return null; + } + const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type); + return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Menu5, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + Menu5.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Button, + { + size: "compact", + icon: activeView?.icon, + label: (0, import_i18n31.__)("Layout") + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => { + const config = VIEW_LAYOUTS.find( + (v2) => v2.type === layout + ); + if (!config) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + Menu5.RadioItem, + { + value: layout, + name: "view-actions-available-view", + checked: layout === view.type, + hideOnClick: true, + onChange: (e2) => { + switch (e2.target.value) { + case "list": + case "grid": + case "table": + case "pickerGrid": + case "pickerTable": + case "activity": + const viewWithoutLayout = { ...view }; + if ("layout" in viewWithoutLayout) { + delete viewWithoutLayout.layout; + } + return onChangeView({ + ...viewWithoutLayout, + type: e2.target.value, + ...defaultLayouts[e2.target.value] + }); + } + (0, import_warning.default)("Invalid dataview"); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Menu5.ItemLabel, { children: config.label }) + }, + layout + ); + }) }) + ] }); +} +function SortFieldControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const orderOptions = (0, import_element38.useMemo)(() => { + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + return sortableFields.map((field) => { + return { + label: field.label, + value: field.id + }; + }); + }, [fields]); + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.SelectControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n31.__)("Sort by"), + value: view.sort?.field, + options: orderOptions, + onChange: (value) => { + onChangeView({ + ...view, + sort: { + direction: view?.sort?.direction || "desc", + field: value + }, + showLevels: false + }); + } + } + ); +} +function SortDirectionControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + if (sortableFields.length === 0) { + return null; + } + let value = view.sort?.direction; + if (!value && view.sort?.field) { + value = "desc"; + } + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControl, + { + className: "dataviews-view-config__sort-direction", + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Order"), + value, + onChange: (newDirection) => { + if (newDirection === "asc" || newDirection === "desc") { + onChangeView({ + ...view, + sort: { + direction: newDirection, + field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field. + fields.find( + (field) => field.enableSorting !== false + )?.id || "" + }, + showLevels: false + }); + return; + } + (0, import_warning.default)("Invalid direction"); + }, + children: SORTING_DIRECTIONS.map((direction) => { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControlOptionIcon, + { + value: direction, + icon: sortIcons[direction], + label: sortLabels[direction] + }, + direction + ); + }) + } + ); +} +function ItemsPerPageControl() { + const { view, config, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const { infiniteScrollEnabled } = view; + if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControl, + { + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Items per page"), + value: view.perPage || 10, + disabled: !view?.sort?.field, + onChange: (newItemsPerPage) => { + const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10); + onChangeView({ + ...view, + perPage: newItemsPerPageNumber, + page: 1 + }); + }, + children: config.perPageSizes.map((value) => { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalToggleGroupControlOption, + { + value, + label: value.toString() + }, + value + ); + }) + } + ); +} +function ResetViewButton() { + const { onReset } = (0, import_element38.useContext)(dataviews_context_default); + if (onReset === void 0) { + return null; + } + const isDisabled = onReset === false; + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Button, + { + variant: "tertiary", + size: "compact", + disabled: isDisabled, + accessibleWhenDisabled: true, + className: "dataviews-view-config__reset-button", + onClick: () => { + if (typeof onReset === "function") { + onReset(); + } + }, + children: (0, import_i18n31.__)("Reset view") + } + ); +} +function DataviewsViewConfigDropdown() { + const { view, onReset } = (0, import_element38.useContext)(dataviews_context_default); + const popoverId = (0, import_compose11.useInstanceId)( + _DataViewsViewConfig, + "dataviews-view-config-dropdown" + ); + const activeLayout = VIEW_LAYOUTS.find( + (layout) => layout.type === view.type + ); + const isModified = typeof onReset === "function"; + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Dropdown, + { + expandOnMobile: true, + popoverProps: { + ...DATAVIEWS_CONFIG_POPOVER_PROPS, + id: popoverId + }, + renderToggle: ({ onToggle, isOpen }) => { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "dataviews-view-config__toggle-wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.Button, + { + size: "compact", + icon: cog_default, + label: (0, import_i18n31._x)( + "View options", + "View is used as a noun" + ), + onClick: onToggle, + "aria-expanded": isOpen ? "true" : "false", + "aria-controls": popoverId + } + ), + isModified && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "dataviews-view-config__modified-indicator" }) + ] }); + }, + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalDropdownContentWrapper, + { + paddingSize: "medium", + className: "dataviews-config__popover-content-wrapper", + children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-config", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)( + Stack, + { + direction: "row", + justify: "space-between", + align: "center", + className: "dataviews-view-config__header", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + import_components27.__experimentalHeading, + { + level: 2, + className: "dataviews-settings-section__title", + children: (0, import_i18n31.__)("Appearance") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ResetViewButton, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + className: "dataviews-view-config__sort-controls", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(SortFieldControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(SortDirectionControl, {}) + ] + } + ), + !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(activeLayout.viewConfigOptions, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(InfiniteScrollToggle, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ItemsPerPageControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PropertiesSection, {}) + ] }) + ] + } + ) + } + ) + } + ); +} +function _DataViewsViewConfig() { + return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ViewTypeMenu, {}), + /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(DataviewsViewConfigDropdown, {}) + ] }); +} +var DataViewsViewConfig = (0, import_element38.memo)(_DataViewsViewConfig); +var dataviews_view_config_default = DataViewsViewConfig; + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_components28 = __toESM(require_components(), 1); +var import_element39 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs +function getCustomValidity(isValid2, validity) { + let customValidity; + if (isValid2?.required && validity?.required) { + customValidity = validity?.required?.message ? validity.required : void 0; + } else if (isValid2?.pattern && validity?.pattern) { + customValidity = validity.pattern; + } else if (isValid2?.min && validity?.min) { + customValidity = validity.min; + } else if (isValid2?.max && validity?.max) { + customValidity = validity.max; + } else if (isValid2?.minLength && validity?.minLength) { + customValidity = validity.minLength; + } else if (isValid2?.maxLength && validity?.maxLength) { + customValidity = validity.maxLength; + } else if (isValid2?.elements && validity?.elements) { + customValidity = validity.elements; + } else if (validity?.custom) { + customValidity = validity.custom; + } + return customValidity; +} + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); +var { ValidatedCheckboxControl } = unlock(import_components28.privateApis); +function Checkbox({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, label, description, isValid: isValid2 } = field; + const onChangeControl = (0, import_element39.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [data, getValue, onChange, setValue]); + return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)( + ValidatedCheckboxControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/combobox.mjs +var import_components29 = __toESM(require_components(), 1); +var import_element40 = __toESM(require_element(), 1); +var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); +var { ValidatedComboboxControl } = unlock(import_components29.privateApis); +function Combobox3({ + data, + field, + onChange, + hideLabelFromVision, + validity +}) { + const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element40.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_components29.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)( + ValidatedComboboxControl, + { + required: !!field.isValid?.required, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + placeholder, + options: elements, + onChange: onChangeControl, + hideLabelFromVision, + allowReset: true, + expandOnFocus: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_components31 = __toESM(require_components(), 1); +var import_element42 = __toESM(require_element(), 1); +var import_i18n33 = __toESM(require_i18n(), 1); +var import_date3 = __toESM(require_date(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs +var import_components30 = __toESM(require_components(), 1); +var import_element41 = __toESM(require_element(), 1); +var import_i18n32 = __toESM(require_i18n(), 1); +var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); +var TIME_UNITS_OPTIONS = { + [OPERATOR_IN_THE_PAST]: [ + { value: "days", label: (0, import_i18n32.__)("Days") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks") }, + { value: "months", label: (0, import_i18n32.__)("Months") }, + { value: "years", label: (0, import_i18n32.__)("Years") } + ], + [OPERATOR_OVER]: [ + { value: "days", label: (0, import_i18n32.__)("Days ago") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks ago") }, + { value: "months", label: (0, import_i18n32.__)("Months ago") }, + { value: "years", label: (0, import_i18n32.__)("Years ago") } + ] +}; +function RelativeDateControl({ + className, + data, + field, + onChange, + hideLabelFromVision, + operator +}) { + const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"]; + const { id, label, getValue, setValue } = field; + const fieldValue = getValue({ item: data }); + const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {}; + const onChangeValue = (0, import_element41.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: { value: Number(newValue), unit } + }) + ), + [onChange, setValue, data, unit] + ); + const onChangeUnit = (0, import_element41.useCallback)( + (newUnit) => onChange( + setValue({ + item: data, + value: { value: relValue, unit: newUnit } + }) + ), + [onChange, setValue, data, relValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components30.BaseControl, + { + id, + className: clsx_default(className, "dataviews-controls__relative-date"), + label, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Stack, { direction: "row", gap: "sm", children: [ + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components30.__experimentalNumberControl, + { + __next40pxDefaultSize: true, + className: "dataviews-controls__relative-date-number", + spinControls: "none", + min: 1, + step: 1, + value: relValue, + onChange: onChangeValue + } + ), + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components30.SelectControl, + { + className: "dataviews-controls__relative-date-unit", + __next40pxDefaultSize: true, + label: (0, import_i18n32.__)("Unit"), + value: unit, + options, + onChange: onChangeUnit, + hideLabelFromVision: true + } + ) + ] }) + } + ); +} + +// packages/dataviews/build-module/field-types/utils/parse-date-time.mjs +var import_date2 = __toESM(require_date(), 1); +function parseDateTime(dateTimeString) { + if (!dateTimeString) { + return null; + } + const parsed = (0, import_date2.getDate)(dateTimeString); + return parsed && isValid(parsed) ? parsed : null; +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar, ValidatedInputControl } = unlock(import_components31.privateApis); +var formatDateTime = (value) => { + if (!value) { + return ""; + } + return (0, import_date3.dateI18n)("Y-m-d\\TH:i", (0, import_date3.getDate)(value)); +}; +function CalendarDateTimeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, description, setValue, getValue, isValid: isValid2 } = field; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element42.useState)(() => { + const parsedDate = parseDateTime(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const inputControlRef = (0, import_element42.useRef)(null); + const validationTimeoutRef = (0, import_element42.useRef)(void 0); + const previousFocusRef = (0, import_element42.useRef)(null); + const onChangeCallback = (0, import_element42.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + (0, import_element42.useEffect)(() => { + return () => { + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + }; + }, []); + const onSelectDate = (0, import_element42.useCallback)( + (newDate) => { + let dateTimeValue; + if (newDate) { + const wpDate = (0, import_date3.dateI18n)("Y-m-d", newDate); + let wpTime; + if (value) { + wpTime = (0, import_date3.dateI18n)("H:i", (0, import_date3.getDate)(value)); + } else { + wpTime = (0, import_date3.dateI18n)("H:i", newDate); + } + const finalDateTime = (0, import_date3.getDate)(`${wpDate}T${wpTime}`); + dateTimeValue = finalDateTime.toISOString(); + onChangeCallback(dateTimeValue); + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + } else { + onChangeCallback(void 0); + } + previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement; + validationTimeoutRef.current = setTimeout(() => { + if (inputControlRef.current) { + inputControlRef.current.focus(); + inputControlRef.current.blur(); + onChangeCallback(dateTimeValue); + if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) { + previousFocusRef.current.focus(); + } + } + }, 0); + }, + [onChangeCallback, value] + ); + const handleManualDateTimeChange = (0, import_element42.useCallback)( + (newValue) => { + if (newValue) { + const dateTime = (0, import_date3.getDate)(newValue); + onChangeCallback(dateTime.toISOString()); + const parsedDate = parseDateTime(dateTime.toISOString()); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } else { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const { format: fieldFormat } = field; + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek; + const { + timezone: { string: timezoneString } + } = (0, import_date3.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components31.BaseControl, + { + id, + label: displayLabel, + help: description, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + DateCalendar, + { + style: { width: "100%" }, + selected: value ? parseDateTime(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ), + /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + ValidatedInputControl, + { + ref: inputControlRef, + __next40pxDefaultSize: true, + required: !!isValid2?.required, + customValidity: getCustomValidity(isValid2, validity), + type: "datetime-local", + label: (0, import_i18n33.__)("Date time"), + hideLabelFromVision: true, + value: formatDateTime(value), + onChange: handleManualDateTimeChange + } + ) + ] }) + } + ); +} +function DateTime({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__datetime", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + CalendarDateTimeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/date.mjs +var import_components32 = __toESM(require_components(), 1); +var import_element43 = __toESM(require_element(), 1); +var import_i18n34 = __toESM(require_i18n(), 1); +var import_date4 = __toESM(require_date(), 1); +var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components32.privateApis); +var DATE_PRESETS = [ + { + id: "today", + label: (0, import_i18n34.__)("Today"), + getValue: () => (0, import_date4.getDate)(null) + }, + { + id: "yesterday", + label: (0, import_i18n34.__)("Yesterday"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 1); + } + }, + { + id: "past-week", + label: (0, import_i18n34.__)("Past week"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 7); + } + }, + { + id: "past-month", + label: (0, import_i18n34.__)("Past month"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subMonths(today, 1); + } + } +]; +var DATE_RANGE_PRESETS = [ + { + id: "last-7-days", + label: (0, import_i18n34.__)("Last 7 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 7), today]; + } + }, + { + id: "last-30-days", + label: (0, import_i18n34.__)("Last 30 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 30), today]; + } + }, + { + id: "month-to-date", + label: (0, import_i18n34.__)("Month to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfMonth(today), today]; + } + }, + { + id: "last-year", + label: (0, import_i18n34.__)("Last year"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subYears(today, 1), today]; + } + }, + { + id: "year-to-date", + label: (0, import_i18n34.__)("Year to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfYear(today), today]; + } + } +]; +var parseDate = (dateString) => { + if (!dateString) { + return null; + } + const parsed = (0, import_date4.getDate)(dateString); + return parsed && isValid(parsed) ? parsed : null; +}; +var formatDate = (date) => { + if (!date) { + return ""; + } + return typeof date === "string" ? date : format(date, "yyyy-MM-dd"); +}; +function ValidatedDateControl({ + field, + validity, + inputRefs, + isTouched, + setIsTouched, + children +}) { + const { isValid: isValid2 } = field; + const [customValidity, setCustomValidity] = (0, import_element43.useState)(void 0); + const validateRefs = (0, import_element43.useCallback)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + for (const ref of refs) { + const input = ref.current; + if (input && !input.validity.valid) { + setCustomValidity({ + type: "invalid", + message: input.validationMessage + }); + return; + } + } + setCustomValidity(void 0); + }, [inputRefs]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + for (const ref of refs) { + const input = ref.current; + if (input) { + input.setCustomValidity( + result?.type === "invalid" && result.message ? result.message : "" + ); + } + } + }, [inputRefs, isValid2, validity]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const handleInvalid = (event) => { + event.preventDefault(); + setIsTouched(true); + }; + for (const ref of refs) { + ref.current?.addEventListener("invalid", handleInvalid); + } + return () => { + for (const ref of refs) { + ref.current?.removeEventListener("invalid", handleInvalid); + } + }; + }, [inputRefs, setIsTouched]); + (0, import_element43.useEffect)(() => { + if (!isTouched) { + return; + } + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + if (result) { + setCustomValidity(result); + } else { + validateRefs(); + } + }, [isTouched, isValid2, validity, validateRefs]); + const onBlur = (event) => { + if (isTouched) { + return; + } + if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) { + setIsTouched(true); + } + }; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { onBlur, children: [ + children, + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + "p", + { + className: clsx_default( + "components-validated-control__indicator", + customValidity.type === "invalid" ? "is-invalid" : void 0 + ), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Icon, + { + className: "components-validated-control__indicator-icon", + icon: error_default, + size: 16, + fill: "currentColor" + } + ), + customValidity.message + ] + } + ) }) + ] }); +} +function CalendarDateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { + id, + label, + setValue, + getValue, + isValid: isValid2, + format: fieldFormat + } = field; + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + const parsedDate = parseDate(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const validityTargetRef = (0, import_element43.useRef)(null); + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const onSelectDate = (0, import_element43.useCallback)( + (newDate) => { + const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0; + onChangeCallback(dateValue); + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const presetDate = preset.getValue(); + const dateValue = formatDate(presetDate); + setCalendarMonth(presetDate); + onChangeCallback(dateValue); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (newValue) => { + onChangeCallback(newValue); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const { + timezone: { string: timezoneString } + } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: validityTargetRef, + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + disabled: !!selectedPresetId, + accessibleWhenDisabled: false, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: validityTargetRef, + type: "date", + label: (0, import_i18n34.__)("Date"), + hideLabelFromVision: true, + value, + onChange: handleManualDateChange, + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + DateCalendar2, + { + style: { width: "100%" }, + selected: value ? parseDate(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function CalendarDateRangeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, getValue, setValue, format: fieldFormat } = field; + let value; + const fieldValue = getValue({ item: data }); + if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) { + value = fieldValue; + } + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const selectedRange = (0, import_element43.useMemo)(() => { + if (!value) { + return { from: void 0, to: void 0 }; + } + const [from, to] = value; + return { + from: parseDate(from) || void 0, + to: parseDate(to) || void 0 + }; + }, [value]); + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + return selectedRange.from || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const fromInputRef = (0, import_element43.useRef)(null); + const toInputRef = (0, import_element43.useRef)(null); + const updateDateRange = (0, import_element43.useCallback)( + (fromDate, toDate2) => { + if (fromDate && toDate2) { + onChangeCallback([ + formatDate(fromDate), + formatDate(toDate2) + ]); + } else if (!fromDate && !toDate2) { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const onSelectCalendarRange = (0, import_element43.useCallback)( + (newRange) => { + updateDateRange(newRange?.from, newRange?.to); + setSelectedPresetId(null); + setIsTouched(true); + }, + [updateDateRange] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const [startDate, endDate] = preset.getValue(); + setCalendarMonth(startDate); + updateDateRange(startDate, endDate); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [updateDateRange] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (fromOrTo, newValue) => { + const [currentFrom, currentTo] = value || [ + void 0, + void 0 + ]; + const updatedFrom = fromOrTo === "from" ? newValue : currentFrom; + const updatedTo = fromOrTo === "to" ? newValue : currentTo; + updateDateRange(updatedFrom, updatedTo); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [value, updateDateRange] + ); + const { timezone } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (field.isValid?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!field.isValid?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: [fromInputRef, toInputRef], + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_RANGE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + accessibleWhenDisabled: false, + disabled: !!selectedPresetId, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "space-between", + className: "dataviews-controls__date-range-inputs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: fromInputRef, + type: "date", + label: (0, import_i18n34.__)("From"), + hideLabelFromVision: true, + value: value?.[0], + onChange: (newValue) => handleManualDateChange("from", newValue), + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: toInputRef, + type: "date", + label: (0, import_i18n34.__)("To"), + hideLabelFromVision: true, + value: value?.[1], + onChange: (newValue) => handleManualDateChange("to", newValue), + required: !!field.isValid?.required + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + DateRangeCalendar, + { + style: { width: "100%" }, + selected: selectedRange, + onSelect: onSelectCalendarRange, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezone.string || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function DateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__date", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + if (operator === OPERATOR_BETWEEN) { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + CalendarDateRangeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + CalendarDateControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/select.mjs +var import_components33 = __toESM(require_components(), 1); +var import_element44 = __toESM(require_element(), 1); +var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); +var { ValidatedSelectControl } = unlock(import_components33.privateApis); +function Select({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { type, label, description, getValue, setValue, isValid: isValid2 } = field; + const isMultiple = type === "array"; + const value = getValue({ item: data }) ?? (isMultiple ? [] : ""); + const onChangeControl = (0, import_element44.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components33.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + ValidatedSelectControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + options: elements, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + multiple: isMultiple + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs +var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); +var ELEMENTS_THRESHOLD = 10; +function AdaptiveSelect(props) { + const { field } = props; + const { elements } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (elements.length >= ELEMENTS_THRESHOLD) { + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Combobox3, { ...props }); + } + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Select, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_components35 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs +var import_components34 = __toESM(require_components(), 1); +var import_element45 = __toESM(require_element(), 1); +var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components34.privateApis); +function ValidatedText({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + type, + prefix, + suffix, + validity +}) { + const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element45.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: newValue + }) + ), + [data, setValue, onChange] + ); + return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + ValidatedInputControl2, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + hideLabelFromVision, + type, + prefix, + suffix, + pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); +function Email({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "email", + prefix: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_components35.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_components35.Icon, { icon: envelope_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/telephone.mjs +var import_components36 = __toESM(require_components(), 1); +var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); +function Telephone({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "tel", + prefix: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_components36.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_components36.Icon, { icon: mobile_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/url.mjs +var import_components37 = __toESM(require_components(), 1); +var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); +function Url({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "url", + prefix: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_components37.Icon, { icon: link_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs +var import_components38 = __toESM(require_components(), 1); +var import_element46 = __toESM(require_element(), 1); +var import_i18n35 = __toESM(require_i18n(), 1); +var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); +var { ValidatedNumberControl } = unlock(import_components38.privateApis); +function toNumberOrEmpty(value) { + if (value === "" || value === void 0) { + return ""; + } + const number = Number(value); + return Number.isFinite(number) ? number : ""; +} +function BetweenControls({ + value, + onChange, + hideLabelFromVision, + step +}) { + const [min = "", max = ""] = value; + const onChangeMin = (0, import_element46.useCallback)( + (newValue) => onChange([toNumberOrEmpty(newValue), max]), + [onChange, max] + ); + const onChangeMax = (0, import_element46.useCallback)( + (newValue) => onChange([min, toNumberOrEmpty(newValue)]), + [onChange, min] + ); + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + import_components38.BaseControl, + { + help: (0, import_i18n35.__)("The max. value must be greater than the min. value."), + children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_components38.Flex, { direction: "row", gap: 4, children: [ + /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Min."), + value: min, + max: max ? Number(max) - step : void 0, + onChange: onChangeMin, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ), + /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Max."), + value: max, + min: min ? Number(min) + step : void 0, + onChange: onChangeMax, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ) + ] }) + } + ); +} +function ValidatedNumber({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + const decimals = field.format?.decimals ?? 0; + const step = Math.pow(10, Math.abs(decimals) * -1); + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + // Do not convert an empty string or undefined to a number, + // otherwise there's a mismatch between the UI control (empty) + // and the data relied by onChange (0). + value: ["", void 0].includes(newValue) ? void 0 : Number(newValue) + }) + ); + }, + [data, onChange, setValue] + ); + const onChangeBetweenControls = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + if (operator === OPERATOR_BETWEEN) { + let valueBetween = ["", ""]; + if (Array.isArray(value) && value.length === 2 && value.every( + (element) => typeof element === "number" || element === "" + )) { + valueBetween = value; + } + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + BetweenControls, + { + value: valueBetween, + onChange: onChangeBetweenControls, + hideLabelFromVision, + step + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + ValidatedNumberControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + value, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + step, + min: isValid2.min ? isValid2.min.constraint : void 0, + max: isValid2.max ? isValid2.max.constraint : void 0 + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/integer.mjs +var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1); +function Integer(props) { + return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/number.mjs +var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1); +function Number2(props) { + return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/radio.mjs +var import_components39 = __toESM(require_components(), 1); +var import_element47 = __toESM(require_element(), 1); +var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1); +var { ValidatedRadioControl } = unlock(import_components39.privateApis); +function Radio({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = getValue({ item: data }); + const onChangeControl = (0, import_element47.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_components39.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( + ValidatedRadioControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + onChange: onChangeControl, + options: elements, + selected: value, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/text.mjs +var import_element48 = __toESM(require_element(), 1); +var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1); +function Text({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { prefix, suffix } = config || {}; + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + prefix: prefix ? (0, import_element48.createElement)(prefix) : void 0, + suffix: suffix ? (0, import_element48.createElement)(suffix) : void 0 + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle.mjs +var import_components40 = __toESM(require_components(), 1); +var import_element49 = __toESM(require_element(), 1); +var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleControl } = unlock(import_components40.privateApis); +function Toggle({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const onChangeControl = (0, import_element49.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [onChange, setValue, data, getValue]); + return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + ValidatedToggleControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/textarea.mjs +var import_components41 = __toESM(require_components(), 1); +var import_element50 = __toESM(require_element(), 1); +var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1); +var { ValidatedTextareaControl } = unlock(import_components41.privateApis); +function Textarea({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { rows = 4 } = config || {}; + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }); + const onChangeControl = (0, import_element50.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)( + ValidatedTextareaControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + rows, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs +var import_components42 = __toESM(require_components(), 1); +var import_element51 = __toESM(require_element(), 1); +var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleGroupControl } = unlock(import_components42.privateApis); +function ToggleGroup({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element51.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_components42.Spinner, {}); + } + if (elements.length === 0) { + return null; + } + const selectedOption = elements.find((el) => el.value === value); + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + ValidatedToggleGroupControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + __next40pxDefaultSize: true, + isBlock: true, + label: field.label, + help: selectedOption?.description || field.description, + onChange: onChangeControl, + value, + hideLabelFromVision, + children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + import_components42.__experimentalToggleGroupControlOption, + { + label: el.label, + value: el.value + }, + el.value + )) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/array.mjs +var import_components43 = __toESM(require_components(), 1); +var import_element52 = __toESM(require_element(), 1); +var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1); +var { ValidatedFormTokenField } = unlock(import_components43.privateApis); +function ArrayControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const arrayValueAsElements = (0, import_element52.useMemo)( + () => Array.isArray(value) ? value.map((token) => { + const element = elements?.find( + (suggestion) => suggestion.value === token + ); + return element || { value: token, label: token }; + }) : [], + [value, elements] + ); + const onChangeControl = (0, import_element52.useCallback)( + (tokens) => { + const valueTokens = tokens.map((token) => { + if (typeof token === "object" && "value" in token) { + return token.value; + } + return token; + }); + onChange(setValue({ item: data, value: valueTokens })); + }, + [onChange, setValue, data] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(import_components43.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + ValidatedFormTokenField, + { + required: !!isValid2?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label: hideLabelFromVision ? void 0 : label, + value: arrayValueAsElements, + onChange: onChangeControl, + placeholder, + suggestions: elements?.map((element) => element.value), + __experimentalValidateInput: (token) => { + if (field.isValid?.elements && elements) { + return elements.some( + (element) => element.value === token || element.label === token + ); + } + return true; + }, + __experimentalExpandOnFocus: elements && elements.length > 0, + __experimentalShowHowTo: !field.isValid?.elements, + displayTransform: (token) => { + if (typeof token === "object" && "label" in token) { + return token.label; + } + if (typeof token === "string" && elements) { + const element = elements.find( + (el) => el.value === token + ); + return element?.label || token; + } + return token; + }, + __experimentalRenderItem: ({ item }) => { + if (typeof item === "string" && elements) { + const element = elements.find( + (el) => el.value === item + ); + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: element?.label || item }); + } + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: item }); + } + } + ); +} + +// node_modules/colord/index.mjs +var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; +var t = function(r3) { + return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; +}; +var n = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0; +}; +var e = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2; +}; +var u = function(r3) { + return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; +}; +var a = function(r3) { + return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; +}; +var o = function(r3) { + return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; +}; +var i = /^#([0-9a-f]{3,8})$/i; +var s = function(r3) { + var t2 = r3.toString(16); + return t2.length < 2 ? "0" + t2 : t2; +}; +var h = function(r3) { + var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0; + return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; +}; +var b = function(r3) { + var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; + t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100; + var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6; + return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 }; +}; +var g = function(r3) { + return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; +}; +var d = function(r3) { + return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; +}; +var f = function(r3) { + return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a })); + var t2, n2, e2; +}; +var c = function(r3) { + return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a }; + var t2, n2, e2, u2; +}; +var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var y = { string: [[function(r3) { + var t2 = i.exec(r3); + return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; +}, "hex"], [function(r3) { + var t2 = v.exec(r3) || m.exec(r3); + return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null; +}, "rgb"], [function(t2) { + var n2 = l.exec(t2) || p.exec(t2); + if (!n2) return null; + var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); + return f(a2); +}, "hsl"]], object: [[function(r3) { + var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2; + return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; +}, "rgb"], [function(r3) { + var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2; + if (!t(n2) || !t(e2) || !t(u2)) return null; + var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) }); + return f(i2); +}, "hsl"], [function(r3) { + var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; + if (!t(n2) || !t(a2) || !t(o2)) return null; + var h2 = (function(r4) { + return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; + })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) }); + return b(h2); +}, "hsv"]] }; +var N = function(r3, t2) { + for (var n2 = 0; n2 < t2.length; n2++) { + var e2 = t2[n2][0](r3); + if (e2) return [e2, t2[n2][1]]; + } + return [null, void 0]; +}; +var x = function(r3) { + return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; +}; +var M = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a }; +}; +var H = function(r3) { + return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; +}; +var $ = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a }; +}; +var j = (function() { + function r3(r4) { + this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; + } + return r3.prototype.isValid = function() { + return null !== this.parsed; + }, r3.prototype.brightness = function() { + return n(H(this.rgba), 2); + }, r3.prototype.isDark = function() { + return H(this.rgba) < 0.5; + }, r3.prototype.isLight = function() { + return H(this.rgba) >= 0.5; + }, r3.prototype.toHex = function() { + return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2; + var r4, t2, e2, u2, a2, i2; + }, r3.prototype.toRgb = function() { + return o(this.rgba); + }, r3.prototype.toRgbString = function() { + return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsl = function() { + return d(c(this.rgba)); + }, r3.prototype.toHslString = function() { + return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsv = function() { + return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; + var r4; + }, r3.prototype.invert = function() { + return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); + var r4; + }, r3.prototype.saturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); + }, r3.prototype.desaturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); + }, r3.prototype.grayscale = function() { + return w(M(this.rgba, -1)); + }, r3.prototype.lighten = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); + }, r3.prototype.darken = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); + }, r3.prototype.rotate = function(r4) { + return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); + }, r3.prototype.alpha = function(r4) { + return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3); + var t2; + }, r3.prototype.hue = function(r4) { + var t2 = c(this.rgba); + return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h); + }, r3.prototype.isEqual = function(r4) { + return this.toHex() === w(r4).toHex(); + }, r3; +})(); +var w = function(r3) { + return r3 instanceof j ? r3 : new j(r3); +}; + +// packages/dataviews/build-module/components/dataform-controls/color.mjs +var import_components44 = __toESM(require_components(), 1); +var import_element53 = __toESM(require_element(), 1); +var import_i18n36 = __toESM(require_i18n(), 1); +var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl3 } = unlock(import_components44.privateApis); +var ColorPickerDropdown = ({ + color, + onColorChange +}) => { + const validColor = color && w(color).isValid() ? color : "#ffffff"; + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components44.Dropdown, + { + className: "dataviews-controls__color-picker-dropdown", + popoverProps: { resize: false }, + renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components44.Button, + { + onClick: onToggle, + "aria-label": (0, import_i18n36.__)("Open color picker"), + size: "small", + icon: () => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components44.ColorIndicator, { colorValue: validColor }) + } + ), + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components44.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components44.ColorPicker, + { + color: validColor, + onChange: onColorChange, + enableAlpha: true + } + ) }) + } + ); +}; +function Color({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }) || ""; + const handleColorChange = (0, import_element53.useCallback)( + (newColor) => { + onChange(setValue({ item: data, value: newColor })); + }, + [data, onChange, setValue] + ); + const handleInputChange = (0, import_element53.useCallback)( + (newValue) => { + onChange(setValue({ item: data, value: newValue || "" })); + }, + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ValidatedInputControl3, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value, + help: description, + onChange: handleInputChange, + hideLabelFromVision, + type: "text", + prefix: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components44.__experimentalInputControlPrefixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ColorPickerDropdown, + { + color: value, + onColorChange: handleColorChange + } + ) }) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/password.mjs +var import_components45 = __toESM(require_components(), 1); +var import_element54 = __toESM(require_element(), 1); +var import_i18n37 = __toESM(require_i18n(), 1); +var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1); +function Password({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const [isVisible2, setIsVisible] = (0, import_element54.useState)(false); + const toggleVisibility = (0, import_element54.useCallback)(() => { + setIsVisible((prev) => !prev); + }, []); + return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: isVisible2 ? "text" : "password", + suffix: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_components45.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( + import_components45.Button, + { + icon: isVisible2 ? unseen_default : seen_default, + onClick: toggleVisibility, + size: "small", + label: isVisible2 ? (0, import_i18n37.__)("Hide password") : (0, import_i18n37.__)("Show password") + } + ) }) + } + } + ); +} + +// packages/dataviews/build-module/field-types/utils/has-elements.mjs +function hasElements(field) { + return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function"; +} + +// packages/dataviews/build-module/components/dataform-controls/index.mjs +var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1); +var FORM_CONTROLS = { + adaptiveSelect: AdaptiveSelect, + array: ArrayControl, + checkbox: Checkbox, + color: Color, + combobox: Combobox3, + datetime: DateTime, + date: DateControl, + email: Email, + telephone: Telephone, + url: Url, + integer: Integer, + number: Number2, + password: Password, + radio: Radio, + select: Select, + text: Text, + toggle: Toggle, + textarea: Textarea, + toggleGroup: ToggleGroup +}; +function isEditConfig(value) { + return value && typeof value === "object" && typeof value.control === "string"; +} +function createConfiguredControl(config) { + const { control, ...controlConfig } = config; + const BaseControlType = getControlByType(control); + if (BaseControlType === null) { + return null; + } + return function ConfiguredControl(props) { + return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(BaseControlType, { ...props, config: controlConfig }); + }; +} +function getControl(field, fallback) { + if (typeof field.Edit === "function") { + return field.Edit; + } + if (typeof field.Edit === "string") { + return getControlByType(field.Edit); + } + if (isEditConfig(field.Edit)) { + return createConfiguredControl(field.Edit); + } + if (hasElements(field) && field.type !== "array") { + return getControlByType("adaptiveSelect"); + } + if (fallback === null) { + return null; + } + return getControlByType(fallback); +} +function getControlByType(type) { + if (Object.keys(FORM_CONTROLS).includes(type)) { + return FORM_CONTROLS[type]; + } + return null; +} + +// packages/dataviews/build-module/field-types/utils/get-filter-by.mjs +function getFilterBy(field, defaultOperators, validOperators) { + if (field.filterBy === false) { + return false; + } + const operators = field.filterBy?.operators?.filter( + (op) => validOperators.includes(op) + ) ?? defaultOperators; + if (operators.length === 0) { + return false; + } + return { + isPrimary: !!field.filterBy?.isPrimary, + operators + }; +} +var get_filter_by_default = getFilterBy; + +// packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs +var getValueFromId = (id) => ({ item }) => { + const path = id.split("."); + let value = item; + for (const segment of path) { + if (value.hasOwnProperty(segment)) { + value = value[segment]; + } else { + value = void 0; + } + } + return value; +}; +var get_value_from_id_default = getValueFromId; + +// packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs +var setValueFromId = (id) => ({ value }) => { + const path = id.split("."); + const result = {}; + let current = result; + for (const segment of path.slice(0, -1)) { + current[segment] = {}; + current = current[segment]; + } + current[path.at(-1)] = value; + return result; +}; +var set_value_from_id_default = setValueFromId; + +// packages/dataviews/build-module/field-types/email.mjs +var import_i18n38 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/render-from-elements.mjs +function RenderFromElements({ + item, + field +}) { + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = field.getValue({ item }); + if (isLoading) { + return value; + } + if (elements.length === 0) { + return value; + } + return elements?.find((element) => element.value === value)?.label || field.getValue({ item }); +} + +// packages/dataviews/build-module/field-types/utils/render-default.mjs +var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1); +function render({ + item, + field +}) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RenderFromElements, { item, field }); + } + return field.getValueFormatted({ item, field }); +} + +// packages/dataviews/build-module/field-types/utils/sort-text.mjs +var sort_text_default = (a2, b2, direction) => { + return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2); +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-required.mjs +function isValidRequired(item, field) { + const value = field.getValue({ item }); + return ![void 0, "", null].includes(value); +} + +// packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs +function isValidMinLength(item, field) { + if (typeof field.isValid.minLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length >= field.isValid.minLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs +function isValidMaxLength(item, field) { + if (typeof field.isValid.maxLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length <= field.isValid.maxLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs +function isValidPattern(item, field) { + if (field.isValid.pattern?.constraint === void 0) { + return true; + } + try { + const regexp = new RegExp(field.isValid.pattern.constraint); + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return regexp.test(String(value)); + } catch { + return false; + } +} + +// packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs +function isValidElements(item, field) { + const elements = field.elements ?? []; + const validValues = elements.map((el) => el.value); + if (validValues.length === 0) { + return true; + } + const value = field.getValue({ item }); + return [].concat(value).every((v2) => validValues.includes(v2)); +} + +// packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs +function getValueFormatted({ + item, + field +}) { + return field.getValue({ item }); +} +var get_value_formatted_default_default = getValueFormatted; + +// packages/dataviews/build-module/field-types/email.mjs +var emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; +function isValidCustom(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !emailRegex.test(value)) { + return (0, import_i18n38.__)("Value must be a valid email address."); + } + return null; +} +var email_default = { + type: "email", + render, + Edit: "email", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements, + custom: isValidCustom + } +}; + +// packages/dataviews/build-module/field-types/integer.mjs +var import_i18n39 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/sort-number.mjs +var sort_number_default = (a2, b2, direction) => { + return direction === "asc" ? a2 - b2 : b2 - a2; +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-min.mjs +function isValidMin(item, field) { + if (typeof field.isValid.min?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) >= field.isValid.min.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max.mjs +function isValidMax(item, field) { + if (typeof field.isValid.max?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) <= field.isValid.max.constraint; +} + +// packages/dataviews/build-module/field-types/integer.mjs +var format2 = { + separatorThousand: "," +}; +function getValueFormatted2({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatInteger; + if (field.type !== "integer") { + formatInteger = format2; + } else { + formatInteger = field.format; + } + const { separatorThousand } = formatInteger; + const integerValue = Math.trunc(value); + if (!separatorThousand) { + return String(integerValue); + } + return String(integerValue).replace( + /\B(?=(\d{3})+(?!\d))/g, + separatorThousand + ); +} +function isValidCustom2(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Number.isInteger(value)) { + return (0, import_i18n39.__)("Value must be an integer."); + } + return null; +} +var integer_default = { + type: "integer", + render, + Edit: "integer", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format2, + getValueFormatted: getValueFormatted2, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom2 + } +}; + +// packages/dataviews/build-module/field-types/number.mjs +var import_i18n40 = __toESM(require_i18n(), 1); +var format3 = { + separatorThousand: ",", + separatorDecimal: ".", + decimals: 2 +}; +function getValueFormatted3({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatNumber; + if (field.type !== "number") { + formatNumber = format3; + } else { + formatNumber = field.format; + } + const { separatorThousand, separatorDecimal, decimals } = formatNumber; + const fixedValue = value.toFixed(decimals); + const [integerPart, decimalPart] = fixedValue.split("."); + const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart; + return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart; +} +function isEmpty2(value) { + return value === "" || value === void 0 || value === null; +} +function isValidCustom3(item, field) { + const value = field.getValue({ item }); + if (!isEmpty2(value) && !Number.isFinite(value)) { + return (0, import_i18n40.__)("Value must be a number."); + } + return null; +} +var number_default = { + type: "number", + render, + Edit: "number", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format3, + getValueFormatted: getValueFormatted3, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom3 + } +}; + +// packages/dataviews/build-module/field-types/text.mjs +var text_default = { + type: "text", + render, + Edit: "text", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + // Single selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/datetime.mjs +var import_date6 = __toESM(require_date(), 1); +var format4 = { + datetime: (0, import_date6.getSettings)().formats.datetime, + weekStartsOn: (0, import_date6.getSettings)().l10n.startOfWeek +}; +function getValueFormatted4({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDatetime; + if (field.type !== "datetime") { + formatDatetime = format4; + } else { + formatDatetime = field.format; + } + return (0, import_date6.dateI18n)(formatDatetime.datetime, (0, import_date6.getDate)(value)); +} +var sort = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var datetime_default = { + type: "datetime", + render, + Edit: "datetime", + sort, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + format: format4, + getValueFormatted: getValueFormatted4, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/date.mjs +var import_date7 = __toESM(require_date(), 1); +var format5 = { + date: (0, import_date7.getSettings)().formats.date, + weekStartsOn: (0, import_date7.getSettings)().l10n.startOfWeek +}; +function getValueFormatted5({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDate2; + if (field.type !== "date") { + formatDate2 = format5; + } else { + formatDate2 = field.format; + } + return (0, import_date7.dateI18n)(formatDate2.date, (0, import_date7.getDate)(value)); +} +var sort2 = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var date_default = { + type: "date", + render, + Edit: "date", + sort: sort2, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + format: format5, + getValueFormatted: getValueFormatted5, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/boolean.mjs +var import_i18n41 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs +function isValidRequiredForBool(item, field) { + const value = field.getValue({ item }); + return value === true; +} + +// packages/dataviews/build-module/field-types/boolean.mjs +function getValueFormatted6({ + item, + field +}) { + const value = field.getValue({ item }); + if (value === true) { + return (0, import_i18n41.__)("True"); + } + if (value === false) { + return (0, import_i18n41.__)("False"); + } + return ""; +} +function isValidCustom4(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && ![true, false].includes(value)) { + return (0, import_i18n41.__)("Value must be true, false, or undefined"); + } + return null; +} +var sort3 = (a2, b2, direction) => { + const boolA = Boolean(a2); + const boolB = Boolean(b2); + if (boolA === boolB) { + return 0; + } + if (direction === "asc") { + return boolA ? 1 : -1; + } + return boolA ? -1 : 1; +}; +var boolean_default = { + type: "boolean", + render, + Edit: "checkbox", + sort: sort3, + validate: { + required: isValidRequiredForBool, + elements: isValidElements, + custom: isValidCustom4 + }, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + format: {}, + getValueFormatted: getValueFormatted6 +}; + +// packages/dataviews/build-module/field-types/media.mjs +var media_default = { + type: "media", + render: () => null, + Edit: null, + sort: () => 0, + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: get_value_formatted_default_default, + // cannot validate any constraint, so + // the only available validation for the field author + // would be providing a custom validator. + validate: {} +}; + +// packages/dataviews/build-module/field-types/array.mjs +var import_i18n42 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs +function isValidRequiredForArray(item, field) { + const value = field.getValue({ item }); + return Array.isArray(value) && value.length > 0 && value.every( + (element) => ![void 0, "", null].includes(element) + ); +} + +// packages/dataviews/build-module/field-types/array.mjs +function getValueFormatted7({ + item, + field +}) { + const value = field.getValue({ item }); + const arr = Array.isArray(value) ? value : []; + return arr.join(", "); +} +function render2({ item, field }) { + return getValueFormatted7({ item, field }); +} +function isValidCustom5(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Array.isArray(value)) { + return (0, import_i18n42.__)("Value must be an array."); + } + if (!value.every((v2) => typeof v2 === "string")) { + return (0, import_i18n42.__)("Every value must be a string."); + } + return null; +} +var sort4 = (a2, b2, direction) => { + const arrA = Array.isArray(a2) ? a2 : []; + const arrB = Array.isArray(b2) ? b2 : []; + if (arrA.length !== arrB.length) { + return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length; + } + const joinedA = arrA.join(","); + const joinedB = arrB.join(","); + return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA); +}; +var array_default = { + type: "array", + render: render2, + Edit: "array", + sort: sort4, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: getValueFormatted7, + validate: { + required: isValidRequiredForArray, + elements: isValidElements, + custom: isValidCustom5 + } +}; + +// packages/dataviews/build-module/field-types/password.mjs +function getValueFormatted8({ + item, + field +}) { + return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : ""; +} +var password_default = { + type: "password", + render, + Edit: "password", + sort: () => 0, + // Passwords should not be sortable for security reasons + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: getValueFormatted8, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/telephone.mjs +var telephone_default = { + type: "telephone", + render, + Edit: "telephone", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/color.mjs +var import_i18n43 = __toESM(require_i18n(), 1); +var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1); +function render3({ item, field }) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(RenderFromElements, { item, field }); + } + const value = get_value_formatted_default_default({ item, field }); + if (!value || !w(value).isValid()) { + return value; + } + return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + "div", + { + style: { + width: "16px", + height: "16px", + borderRadius: "50%", + backgroundColor: value, + border: "1px solid #ddd", + flexShrink: 0 + } + } + ), + /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { children: value }) + ] }); +} +function isValidCustom6(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !w(value).isValid()) { + return (0, import_i18n43.__)("Value must be a valid color."); + } + return null; +} +var sort5 = (a2, b2, direction) => { + const colorA = w(a2); + const colorB = w(b2); + if (!colorA.isValid() && !colorB.isValid()) { + return 0; + } + if (!colorA.isValid()) { + return direction === "asc" ? 1 : -1; + } + if (!colorB.isValid()) { + return direction === "asc" ? -1 : 1; + } + const hslA = colorA.toHsl(); + const hslB = colorB.toHsl(); + if (hslA.h !== hslB.h) { + return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h; + } + if (hslA.s !== hslB.s) { + return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s; + } + return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l; +}; +var color_default = { + type: "color", + render: render3, + Edit: "color", + sort: sort5, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_IS_ANY, + OPERATOR_IS_NONE + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements, + custom: isValidCustom6 + } +}; + +// packages/dataviews/build-module/field-types/url.mjs +var url_default = { + type: "url", + render, + Edit: "url", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/no-type.mjs +var sort6 = (a2, b2, direction) => { + if (typeof a2 === "number" && typeof b2 === "number") { + return sort_number_default(a2, b2, direction); + } + return sort_text_default(a2, b2, direction); +}; +var no_type_default = { + // type: no type for this one + render, + Edit: null, + sort: sort6, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: getAllOperatorNames(), + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/utils/get-is-valid.mjs +function getIsValid(field, fieldType) { + let required; + if (field.isValid?.required === true && fieldType.validate.required !== void 0) { + required = { + constraint: true, + validate: fieldType.validate.required + }; + } + let elements; + if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out + field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) { + elements = { + constraint: true, + validate: fieldType.validate.elements + }; + } + let min; + if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) { + min = { + constraint: field.isValid.min, + validate: fieldType.validate.min + }; + } + let max; + if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) { + max = { + constraint: field.isValid.max, + validate: fieldType.validate.max + }; + } + let minLength; + if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) { + minLength = { + constraint: field.isValid.minLength, + validate: fieldType.validate.minLength + }; + } + let maxLength; + if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) { + maxLength = { + constraint: field.isValid.maxLength, + validate: fieldType.validate.maxLength + }; + } + let pattern; + if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) { + pattern = { + constraint: field.isValid?.pattern, + validate: fieldType.validate.pattern + }; + } + const custom = field.isValid?.custom ?? fieldType.validate.custom; + return { + required, + elements, + min, + max, + minLength, + maxLength, + pattern, + custom + }; +} + +// packages/dataviews/build-module/field-types/utils/get-filter.mjs +function getFilter(fieldType) { + return fieldType.validOperators.reduce((accumulator, operator) => { + const operatorObj = getOperatorByName(operator); + if (operatorObj?.filter) { + accumulator[operator] = operatorObj.filter; + } + return accumulator; + }, {}); +} + +// packages/dataviews/build-module/field-types/utils/get-format.mjs +function getFormat(field, fieldType) { + return { + ...fieldType.format, + ...field.format + }; +} +var get_format_default = getFormat; + +// packages/dataviews/build-module/field-types/index.mjs +function getFieldTypeByName(type) { + const found = [ + email_default, + integer_default, + number_default, + text_default, + datetime_default, + date_default, + boolean_default, + media_default, + array_default, + password_default, + telephone_default, + color_default, + url_default + ].find((fieldType) => fieldType?.type === type); + if (!!found) { + return found; + } + return no_type_default; +} +function normalizeFields(fields) { + return fields.map((field) => { + const fieldType = getFieldTypeByName(field.type); + const getValue = field.getValue || get_value_from_id_default(field.id); + const sort7 = function(a2, b2, direction) { + const aValue = getValue({ item: a2 }); + const bValue = getValue({ item: b2 }); + return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction); + }; + return { + id: field.id, + label: field.label || field.id, + header: field.header || field.label || field.id, + description: field.description, + placeholder: field.placeholder, + getValue, + setValue: field.setValue || set_value_from_id_default(field.id), + elements: field.elements, + getElements: field.getElements, + hasElements: hasElements(field), + isVisible: field.isVisible, + enableHiding: field.enableHiding ?? true, + readOnly: field.readOnly ?? false, + // The type provides defaults for the following props + type: fieldType.type, + render: field.render ?? fieldType.render, + Edit: getControl(field, fieldType.Edit), + sort: sort7, + enableSorting: field.enableSorting ?? fieldType.enableSorting, + enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch, + isValid: getIsValid(field, fieldType), + filterBy: get_filter_by_default( + field, + fieldType.defaultOperators, + fieldType.validOperators + ), + filter: getFilter(fieldType), + format: get_format_default(field, fieldType), + getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted + }; + }); +} + +// packages/dataviews/build-module/hooks/use-data.mjs +var import_element55 = __toESM(require_element(), 1); +function useData(data, isLoading, paginationInfo) { + const previousDataRef = (0, import_element55.useRef)(data); + const previousPaginationInfoRef = (0, import_element55.useRef)(paginationInfo); + const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element55.useState)( + !isLoading + ); + (0, import_element55.useEffect)(() => { + if (!isLoading) { + previousDataRef.current = data; + previousPaginationInfoRef.current = paginationInfo; + setHasInitiallyLoaded(true); + } + }, [data, isLoading, paginationInfo]); + return { + data: isLoading && previousDataRef.current?.length ? previousDataRef.current : data, + paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo, + hasInitiallyLoaded + }; +} + +// packages/dataviews/build-module/dataviews/index.mjs +var import_jsx_runtime93 = __toESM(require_jsx_runtime(), 1); +var defaultGetItemId = (item) => item.id; +var defaultIsItemClickable = () => true; +var EMPTY_ARRAY6 = []; +var dataViewsLayouts = VIEW_LAYOUTS.filter( + (viewLayout) => !viewLayout.isPicker +); +function DefaultUI({ + header, + search = true, + searchLabel = void 0 +}) { + return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)( + Stack, + { + direction: "row", + align: "top", + justify: "space-between", + className: "dataviews__view-actions", + gap: "xs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)( + Stack, + { + direction: "row", + justify: "start", + gap: "sm", + className: "dataviews__search", + children: [ + search && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(dataviews_search_default, { label: searchLabel }), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(toggle_default, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(dataviews_view_config_default, {}), + header + ] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(DataViewsLayout, {}), + /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(DataViewsFooter, {}) + ] }); +} +function DataViews({ + view, + onChangeView, + fields, + search = true, + searchLabel = void 0, + actions = EMPTY_ARRAY6, + data, + getItemId: getItemId2 = defaultGetItemId, + getItemLevel: getItemLevel2, + isLoading = false, + paginationInfo, + defaultLayouts: defaultLayoutsProperty, + selection: selectionProperty, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable = defaultIsItemClickable, + header, + children, + config = { perPageSizes: [10, 20, 50, 100] }, + empty, + onReset +}) { + const { infiniteScrollHandler } = paginationInfo; + const containerRef = (0, import_element56.useRef)(null); + const [containerWidth, setContainerWidth] = (0, import_element56.useState)(0); + const resizeObserverRef = (0, import_compose12.useResizeObserver)( + (resizeObserverEntries) => { + setContainerWidth( + resizeObserverEntries[0].borderBoxSize[0].inlineSize + ); + }, + { box: "border-box" } + ); + const [selectionState, setSelectionState] = (0, import_element56.useState)([]); + const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0; + const selection = isUncontrolled ? selectionState : selectionProperty; + const [openedFilter, setOpenedFilter] = (0, import_element56.useState)(null); + function setSelectionWithChange(value) { + const newValue = typeof value === "function" ? value(selection) : value; + if (isUncontrolled) { + setSelectionState(newValue); + } + if (onChangeSelection) { + onChangeSelection(newValue); + } + } + const _fields = (0, import_element56.useMemo)(() => normalizeFields(fields), [fields]); + const _selection = (0, import_element56.useMemo)(() => { + return selection.filter( + (id) => data.some((item) => getItemId2(item) === id) + ); + }, [selection, data, getItemId2]); + const filters = use_filters_default(_fields, view); + const hasPrimaryOrLockedFilters = (0, import_element56.useMemo)( + () => (filters || []).some( + (filter) => filter.isPrimary || filter.isLocked + ), + [filters] + ); + const [isShowingFilter, setIsShowingFilter] = (0, import_element56.useState)( + hasPrimaryOrLockedFilters + ); + (0, import_element56.useEffect)(() => { + if (hasPrimaryOrLockedFilters && !isShowingFilter) { + setIsShowingFilter(true); + } + }, [hasPrimaryOrLockedFilters, isShowingFilter]); + (0, import_element56.useEffect)(() => { + if (!view.infiniteScrollEnabled || !containerRef.current) { + return; + } + const handleScroll = (0, import_compose12.throttle)((event) => { + const target = event.target; + const scrollTop = target.scrollTop; + const scrollHeight = target.scrollHeight; + const clientHeight = target.clientHeight; + if (scrollTop + clientHeight >= scrollHeight - 100) { + infiniteScrollHandler?.(); + } + }, 100); + const container = containerRef.current; + container.addEventListener("scroll", handleScroll); + return () => { + container.removeEventListener("scroll", handleScroll); + handleScroll.cancel(); + }; + }, [infiniteScrollHandler, view.infiniteScrollEnabled]); + const defaultLayouts = (0, import_element56.useMemo)( + () => Object.fromEntries( + Object.entries(defaultLayoutsProperty).filter( + ([layoutType]) => { + return dataViewsLayouts.some( + (viewLayout) => viewLayout.type === layoutType + ); + } + ) + ), + [defaultLayoutsProperty] + ); + const { + data: displayData, + paginationInfo: displayPaginationInfo, + hasInitiallyLoaded + } = useData(data, isLoading, paginationInfo); + if (!defaultLayouts[view.type]) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + dataviews_context_default.Provider, + { + value: { + view, + onChangeView, + fields: _fields, + actions, + data: displayData, + isLoading, + paginationInfo: displayPaginationInfo, + selection: _selection, + onChangeSelection: setSelectionWithChange, + openedFilter, + setOpenedFilter, + getItemId: getItemId2, + getItemLevel: getItemLevel2, + isItemClickable, + onClickItem, + renderItemLink, + containerWidth, + containerRef, + resizeObserverRef, + defaultLayouts, + filters, + isShowingFilter, + setIsShowingFilter, + config, + empty, + hasInitiallyLoaded, + hasInfiniteScrollHandler: !!infiniteScrollHandler, + onReset + }, + children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "dataviews-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + DefaultUI, + { + header, + search, + searchLabel + } + ) }) + } + ); +} +var DataViewsSubComponents = DataViews; +DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter; +DataViewsSubComponents.Filters = filters_default; +DataViewsSubComponents.FiltersToggled = filters_toggled_default; +DataViewsSubComponents.FiltersToggle = toggle_default; +DataViewsSubComponents.Layout = DataViewsLayout; +DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu; +DataViewsSubComponents.Pagination = DataViewsPagination; +DataViewsSubComponents.Search = dataviews_search_default; +DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown; +DataViewsSubComponents.Footer = DataViewsFooter; +var dataviews_default = DataViewsSubComponents; + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element57 = __toESM(require_element(), 1); +var import_jsx_runtime94 = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element57.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components47 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components46 = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components46.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_components47.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_components47.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_components47.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_components47.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + import_components47.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/post-list/stage.tsx +var import_core_data2 = __toESM(require_core_data()); +var import_components48 = __toESM(require_components()); +var import_data9 = __toESM(require_data()); +var import_element58 = __toESM(require_element()); +var import_editor = __toESM(require_editor()); + +// routes/lock-unlock.ts +var import_private_apis2 = __toESM(require_private_apis()); +var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// routes/post-list/view-utils.ts +var import_data8 = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var DEFAULT_VIEW = { + type: "table", + sort: { + field: "date", + direction: "desc" + }, + fields: ["author", "status", "date"], + titleField: "title", + mediaField: "featured_media", + descriptionField: "excerpt" +}; +var DEFAULT_LAYOUTS = { + table: {}, + grid: {}, + list: {} +}; +var DEFAULT_VIEWS = [ + { + slug: "all", + label: "All" + }, + { + slug: "publish", + label: "Published" + }, + { + slug: "draft", + label: "Draft" + }, + { + slug: "pending", + label: "Pending" + }, + { + slug: "private", + label: "Private" + }, + { + slug: "trash", + label: "Trash" + } +]; +function getActiveViewOverridesForTab(slug) { + if (slug === "all") { + return {}; + } + return { + filters: [ + { + field: "status", + operator: "is", + value: slug + } + ] + }; +} +function getDefaultView(postType) { + return { + ...DEFAULT_VIEW, + showLevels: postType?.hierarchical + }; +} +function viewToQuery(view, postType) { + const result = {}; + if (void 0 !== view.perPage) { + result.per_page = view.perPage; + } + if (void 0 !== view.page) { + result.page = view.page; + } + if (![void 0, ""].includes(view.search)) { + result.search = view.search; + } + if (void 0 !== view.sort?.field) { + let sortField = view.sort.field; + if (sortField === "attached_to") { + sortField = "parent"; + } + result.orderby = sortField; + } + if (void 0 !== view.sort?.direction) { + result.order = view.sort.direction; + } + if (view.showLevels) { + result.orderby_hierarchy = true; + } + const status = view.filters?.find( + (filter) => filter.field === "status" + ); + if (status) { + result.status = status.value; + } else if (postType === "attachment") { + result.status = "inherit"; + } else { + result.status = "draft,future,pending,private,publish"; + } + const author = view.filters?.find( + (filter) => filter.field === "author" + ); + if (author && author.operator === "is") { + result.author = author.value; + } else if (author && author.operator === "isNot") { + result.author_exclude = author.value; + } + const commentStatus = view.filters?.find( + (filter) => filter.field === "comment_status" + ); + if (commentStatus && commentStatus.operator === "is") { + result.comment_status = commentStatus.value; + } else if (commentStatus && commentStatus.operator === "isNot") { + result.comment_status_exclude = commentStatus.value; + } + const mediaType = view.filters?.find( + (filter) => filter.field === "media_type" + ); + if (mediaType) { + result.media_type = mediaType.value; + } + const date = view.filters?.find((filter) => filter.field === "date"); + if (date && date.value) { + if (date.operator === "before") { + result.before = date.value; + } else if (date.operator === "after") { + result.after = date.value; + } + } + if (postType === "attachment") { + result._embed = "wp:attached-to"; + } + return result; +} + +// routes/post-list/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='b2d25721ea']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "b2d25721ea"); + style.appendChild(document.createTextNode(':root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-fieldset{border:0;margin:0;padding:0}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{grid-gap:4px 8px;align-items:center;color:#1e1e1e;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{text-wrap:pretty;color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}fieldset.fields__media-edit{border:0;margin:0;padding:0;width:100%}fieldset.fields__media-edit .components-base-control__label{color:#1e1e1e}fieldset.fields__media-edit{container-type:inline-size}fieldset.fields__media-edit .fields__media-edit-compact-group{border:1px dashed #949494;border-radius:4px;overflow:hidden}fieldset.fields__media-edit .fields__media-edit-compact-group.is-single{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button{border:0;border-radius:0}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-compact:not(:last-child){border-bottom:1px solid #f0f0f0}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-compact{min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-compact:focus-within .fields__media-edit-compact-movers,fieldset.fields__media-edit .fields__media-edit-compact:hover .fields__media-edit-compact-movers{opacity:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers{background:#fff;border-radius:2px;opacity:0;pointer-events:none;position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-picker-button{align-items:center;border:1px dashed #949494;border-radius:2px;cursor:pointer;display:flex;gap:8px;min-height:40px;min-width:0;padding:4px 8px;position:relative}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment){border-color:var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment):hover{background-color:color-mix(in srgb,var(--wp-admin-theme-color,#3858e9) 4%,#0000);border-color:var(--wp-admin-theme-color-darker-20);color:var(--wp-admin-theme-color-darker-20)}fieldset.fields__media-edit .fields__media-edit-picker-button:hover{color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}fieldset.fields__media-edit .fields__media-edit-picker-button[aria-disabled=true]{cursor:default;opacity:.6}fieldset.fields__media-edit .fields__media-edit-picker-button .fields__media-edit-picker-button-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-filename,fieldset.fields__media-edit .fields__media-edit-placeholder{flex:1;min-width:0;width:100%}fieldset.fields__media-edit .fields__media-edit-placeholder{text-align:center}fieldset.fields__media-edit .fields__media-edit-thumbnail{aspect-ratio:1/1;border-radius:2px;flex-shrink:0;width:24px}fieldset.fields__media-edit .fields__media-edit-expanded{display:grid;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview{align-items:center;aspect-ratio:3/2;border-radius:2px;display:flex;justify-content:center;overflow:hidden;padding:4px;position:relative;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview .fields__media-edit-expanded-preview-stack{height:100%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-actions{background:#fff;border-radius:2px;position:absolute;right:4px;top:4px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item{border-radius:4px;min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:focus-within .fields__media-edit-expanded-overlay,fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:hover .fields__media-edit-expanded-overlay{opacity:1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:not(.has-preview-image) .fields__media-edit-expanded-preview-stack{padding:8px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-thumbnail{height:100%;object-fit:cover;object-position:50% 50%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-filename{flex:none;text-align:center}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button-spinner svg{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded.is-single{grid-template-columns:1fr}fieldset.fields__media-edit .fields__media-edit-expanded.is-single .fields__media-edit-expanded-preview{aspect-ratio:2/1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button{border-radius:4px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .fields__media-edit-picker-button{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(3,1fr)}@container (max-width: 768px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(2,1fr)}}@container (max-width: 280px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:1fr}}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-picker-button{padding:0}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-placeholder{align-items:center;aspect-ratio:3/2;display:flex;justify-content:center}.fields-controls__slug{border:0;margin:0;padding:0}.fields-controls__slug .fields-controls__slug-external-icon{margin-left:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-image,.fields-controls__featured-image-placeholder{border-radius:4px;display:block;height:100%;width:100%}.fields-controls__featured-image-placeholder{background:#f0f0f0;box-shadow:none}.fields-controls__parent,.fields-controls__password{border:0;margin:0;padding:0}.fields-field__title>span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.routes-post-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}')); + document.head.appendChild(style); +} + +// routes/post-list/stage.tsx +var { useEntityRecordsWithPermissions } = unlock2(import_core_data2.privateApis); +var { usePostActions, usePostFields } = unlock2(import_editor.privateApis); +var { Tabs } = unlock2(import_components48.privateApis); +function getItemId(item) { + return item.id.toString(); +} +function getItemLevel(item) { + return item.level ?? 0; +} +function PostList() { + const invalidate = useInvalidate(); + const { type: postType, slug = "all" } = useParams({ + from: "/types/$type/list/$slug" + }); + const navigate = useNavigate(); + const searchParams = useSearch({ from: "/types/$type/list/$slug" }); + const postTypeObject = (0, import_data9.useSelect)( + (select2) => select2(import_core_data2.store).getPostType(postType), + [postType] + ); + const labels = postTypeObject?.labels; + const canCreateRecord = (0, import_data9.useSelect)( + (select2) => select2(import_core_data2.store).canUser("create", { + kind: "postType", + name: postType + }), + [postType] + ); + const defaultView = (0, import_element58.useMemo)(() => { + return getDefaultView(postTypeObject); + }, [postTypeObject]); + const activeViewOverrides = (0, import_element58.useMemo)( + () => getActiveViewOverridesForTab(slug), + [slug] + ); + const handleQueryParamsChange = (0, import_element58.useCallback)( + (params) => { + navigate({ + search: { + ...searchParams, + ...params + } + }); + }, + [searchParams, navigate] + ); + const { view, isModified, updateView, resetToDefault } = useView({ + kind: "postType", + name: postType, + slug: "default-new", + defaultView, + activeViewOverrides, + queryParams: searchParams, + onChangeQueryParams: handleQueryParamsChange + }); + const onReset = () => { + resetToDefault(); + invalidate(); + }; + const onChangeView = (newView) => { + updateView(newView); + if (newView.type !== view.type) { + invalidate(); + } + }; + const postTypeQuery = (0, import_element58.useMemo)( + () => viewToQuery(view, postType), + [view, postType] + ); + const { + records: posts, + totalItems, + totalPages, + isResolving + } = useEntityRecordsWithPermissions("postType", postType, postTypeQuery); + const allFields = usePostFields({ + postType + }); + const fields = (0, import_element58.useMemo)(() => { + return allFields.filter((field) => { + if (field.id === "status" && slug !== "all") { + return false; + } + return true; + }).map((field) => { + if (field.id === "status") { + return { ...field, filterBy: false }; + } + return field; + }); + }, [allFields, slug]); + const cleanupDeletedPostIdsFromUrl = (0, import_element58.useCallback)( + (deletedItems) => { + const deletedIds = deletedItems.map( + (item) => item.id.toString() + ); + const currentPostIds = searchParams.postIds || []; + const remainingPostIds = currentPostIds.filter( + (id) => !deletedIds.includes(id) + ); + if (remainingPostIds.length !== currentPostIds.length) { + navigate({ + search: { + ...searchParams, + postIds: remainingPostIds.length > 0 ? remainingPostIds : void 0 + } + }); + } else { + invalidate(); + } + }, + [invalidate, searchParams, navigate] + ); + const postTypeActions = usePostActions({ + postType, + context: "list", + onActionPerformed: (actionId, items) => { + if (actionId === "move-to-trash" || actionId === "permanently-delete") { + cleanupDeletedPostIdsFromUrl(items); + } + } + }); + const actions = (0, import_element58.useMemo)(() => { + return [ + ...postTypeActions?.flatMap((action) => { + switch (action.id) { + case "permanently-delete": + return [ + { + ...action, + isEligible(item) { + if (item.type === "attachment") { + return true; + } + return action.isEligible?.(item) ?? false; + } + } + ]; + // Media can in some circumstances need a trash option, but + // we need to extend the REST API to support it. See + // https://github.com/WordPress/wordpress-develop/pull/9210. + // Once that is merged we should fix this. + case "move-to-trash": + return [ + { + ...action, + isEligible(item) { + if (item.type === "attachment") { + return false; + } + return action.isEligible?.(item) ?? false; + } + } + ]; + // Skip revisions as the admin does not support it + case "view-post-revisions": + return []; + } + return [action]; + }) + ]; + }, [postTypeActions]); + const handleTabChange = (0, import_element58.useCallback)( + (status) => { + navigate({ + to: `/types/${postType}/list/${status}` + }); + }, + [navigate, postType] + ); + if (!postTypeObject) { + return null; + } + const selection = searchParams.postIds ?? []; + if (view.type === "list" && selection.length === 0 && posts?.length > 0) { + selection.push(posts[0].id.toString()); + } + if (view.type === "list") { + selection.splice(1); + } + return /* @__PURE__ */ React.createElement( + page_default, + { + title: postTypeObject.labels?.name, + subTitle: postTypeObject.labels?.description, + className: `${postTypeObject.name.toLowerCase()}-page`, + actions: labels?.add_new_item && canCreateRecord && postType !== "attachment" && /* @__PURE__ */ React.createElement( + import_components48.Button, + { + variant: "primary", + onClick: () => { + navigate({ + to: `/types/${postType}/new` + }); + }, + size: "compact" + }, + labels.add_new_item + ), + hasPadding: false + }, + DEFAULT_VIEWS.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "routes-post-list__tabs-wrapper" }, /* @__PURE__ */ React.createElement( + Tabs, + { + onSelect: handleTabChange, + selectedTabId: slug ?? "all" + }, + /* @__PURE__ */ React.createElement(Tabs.TabList, null, DEFAULT_VIEWS.map( + (filter) => /* @__PURE__ */ React.createElement( + Tabs.Tab, + { + tabId: filter.slug, + key: filter.slug + }, + filter.label + ) + )) + )), + /* @__PURE__ */ React.createElement( + dataviews_default, + { + data: posts, + fields, + view, + onChangeView, + actions, + isLoading: isResolving, + paginationInfo: { + totalItems, + totalPages + }, + defaultLayouts: DEFAULT_LAYOUTS, + getItemId, + getItemLevel, + selection, + onReset: isModified ? onReset : false, + onChangeSelection: (items) => { + navigate({ + search: { + ...searchParams, + postIds: items.length > 0 ? items : void 0, + edit: items.length === 0 ? void 0 : searchParams.edit + } + }); + }, + renderItemLink: ({ item, ...props }) => /* @__PURE__ */ React.createElement( + Link, + { + to: `/types/${postType}/edit/${encodeURIComponent( + item.id + )}`, + ...props, + onClick: (event) => { + event.stopPropagation(); + } + } + ) + } + ) + ); +} +var stage = PostList; +export { + stage +}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.development.js: + (** + * @license React + * use-sync-external-store-shim.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/post-list/content.min.asset.php b/src/wp-includes/build/routes/post-list/content.min.asset.php new file mode 100644 index 0000000000000..c0110a2b86ebd --- /dev/null +++ b/src/wp-includes/build/routes/post-list/content.min.asset.php @@ -0,0 +1 @@ + array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-warning'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '66d296b87fc4086736e2'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/post-list/content.min.js b/src/wp-includes/build/routes/post-list/content.min.js new file mode 100644 index 0000000000000..ec6d7a364a3bf --- /dev/null +++ b/src/wp-includes/build/routes/post-list/content.min.js @@ -0,0 +1,14 @@ +var dh=Object.create;var dd=Object.defineProperty;var ch=Object.getOwnPropertyDescriptor;var fh=Object.getOwnPropertyNames;var mh=Object.getPrototypeOf,ph=Object.prototype.hasOwnProperty;var Le=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var vh=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of fh(e))!ph.call(t,n)&&n!==r&&dd(t,n,{get:()=>e[n],enumerable:!(o=ch(e,n))||o.enumerable});return t};var d=(t,e,r)=>(r=t!=null?dh(mh(t)):{},vh(e||!t||!t.__esModule?dd(r,"default",{value:t,enumerable:!0}):r,t));var j=Le((D_,md)=>{md.exports=window.wp.element});var Yt=Le((N_,pd)=>{pd.exports=window.wp.data});var As=Le((M_,vd)=>{vd.exports=window.wp.preferences});var Et=Le((K_,hd)=>{hd.exports=window.wp.compose});var le=Le((Q_,bd)=>{bd.exports=window.React});var R=Le((Z_,_d)=>{_d.exports=window.ReactJSXRuntime});var Nd=Le((Cy,Dd)=>{Dd.exports=window.ReactDOM});var Fd=Le(Md=>{"use strict";var Fo=le();function Vh(t,e){return t===e&&(t!==0||1/t===1/e)||t!==t&&e!==e}var kh=typeof Object.is=="function"?Object.is:Vh,Dh=Fo.useState,Nh=Fo.useEffect,Mh=Fo.useLayoutEffect,Fh=Fo.useDebugValue;function Lh(t,e){var r=e(),o=Dh({inst:{value:r,getSnapshot:e}}),n=o[0].inst,i=o[1];return Mh(function(){n.value=r,n.getSnapshot=e,Bs(n)&&i({inst:n})},[t,r,e]),Nh(function(){return Bs(n)&&i({inst:n}),t(function(){Bs(n)&&i({inst:n})})},[t]),Fh(r),r}function Bs(t){var e=t.getSnapshot;t=t.value;try{var r=e();return!kh(t,r)}catch{return!0}}function Bh(t,e){return e()}var Hh=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Bh:Lh;Md.useSyncExternalStore=Fo.useSyncExternalStore!==void 0?Fo.useSyncExternalStore:Hh});var Bd=Le((Py,Ld)=>{"use strict";Ld.exports=Fd()});var $=Le((Oy,zd)=>{zd.exports=window.wp.i18n});var ye=Le((Ry,Wd)=>{Wd.exports=window.wp.primitives});var Sl=Le((E1,Gd)=>{Gd.exports=window.wp.privateApis});var q=Le((D1,Jd)=>{Jd.exports=window.wp.components});var El=Le((N1,ec)=>{ec.exports=window.wp.keycodes});var Fm=Le((oT,Ra)=>{var Dm={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u1EA4:"A",\u1EAE:"A",\u1EB2:"A",\u1EB4:"A",\u1EB6:"A",\u00C6:"AE",\u1EA6:"A",\u1EB0:"A",\u0202:"A",\u1EA2:"A",\u1EA0:"A",\u1EA8:"A",\u1EAA:"A",\u1EAC:"A",\u00C7:"C",\u1E08:"C",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u1EBE:"E",\u1E16:"E",\u1EC0:"E",\u1E14:"E",\u1E1C:"E",\u0206:"E",\u1EBA:"E",\u1EBC:"E",\u1EB8:"E",\u1EC2:"E",\u1EC4:"E",\u1EC6:"E",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u1E2E:"I",\u020A:"I",\u1EC8:"I",\u1ECA:"I",\u00D0:"D",\u00D1:"N",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u1ED0:"O",\u1E4C:"O",\u1E52:"O",\u020E:"O",\u1ECE:"O",\u1ECC:"O",\u1ED4:"O",\u1ED6:"O",\u1ED8:"O",\u1EDC:"O",\u1EDE:"O",\u1EE0:"O",\u1EDA:"O",\u1EE2:"O",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u1EE6:"U",\u1EE4:"U",\u1EEC:"U",\u1EEE:"U",\u1EF0:"U",\u00DD:"Y",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u1EA5:"a",\u1EAF:"a",\u1EB3:"a",\u1EB5:"a",\u1EB7:"a",\u00E6:"ae",\u1EA7:"a",\u1EB1:"a",\u0203:"a",\u1EA3:"a",\u1EA1:"a",\u1EA9:"a",\u1EAB:"a",\u1EAD:"a",\u00E7:"c",\u1E09:"c",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u1EBF:"e",\u1E17:"e",\u1EC1:"e",\u1E15:"e",\u1E1D:"e",\u0207:"e",\u1EBB:"e",\u1EBD:"e",\u1EB9:"e",\u1EC3:"e",\u1EC5:"e",\u1EC7:"e",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u1E2F:"i",\u020B:"i",\u1EC9:"i",\u1ECB:"i",\u00F0:"d",\u00F1:"n",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u1ED1:"o",\u1E4D:"o",\u1E53:"o",\u020F:"o",\u1ECF:"o",\u1ECD:"o",\u1ED5:"o",\u1ED7:"o",\u1ED9:"o",\u1EDD:"o",\u1EDF:"o",\u1EE1:"o",\u1EDB:"o",\u1EE3:"o",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u1EE7:"u",\u1EE5:"u",\u1EED:"u",\u1EEF:"u",\u1EF1:"u",\u00FD:"y",\u00FF:"y",\u0100:"A",\u0101:"a",\u0102:"A",\u0103:"a",\u0104:"A",\u0105:"a",\u0106:"C",\u0107:"c",\u0108:"C",\u0109:"c",\u010A:"C",\u010B:"c",\u010C:"C",\u010D:"c",C\u0306:"C",c\u0306:"c",\u010E:"D",\u010F:"d",\u0110:"D",\u0111:"d",\u0112:"E",\u0113:"e",\u0114:"E",\u0115:"e",\u0116:"E",\u0117:"e",\u0118:"E",\u0119:"e",\u011A:"E",\u011B:"e",\u011C:"G",\u01F4:"G",\u011D:"g",\u01F5:"g",\u011E:"G",\u011F:"g",\u0120:"G",\u0121:"g",\u0122:"G",\u0123:"g",\u0124:"H",\u0125:"h",\u0126:"H",\u0127:"h",\u1E2A:"H",\u1E2B:"h",\u0128:"I",\u0129:"i",\u012A:"I",\u012B:"i",\u012C:"I",\u012D:"i",\u012E:"I",\u012F:"i",\u0130:"I",\u0131:"i",\u0132:"IJ",\u0133:"ij",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u1E30:"K",\u1E31:"k",K\u0306:"K",k\u0306:"k",\u0139:"L",\u013A:"l",\u013B:"L",\u013C:"l",\u013D:"L",\u013E:"l",\u013F:"L",\u0140:"l",\u0141:"l",\u0142:"l",\u1E3E:"M",\u1E3F:"m",M\u0306:"M",m\u0306:"m",\u0143:"N",\u0144:"n",\u0145:"N",\u0146:"n",\u0147:"N",\u0148:"n",\u0149:"n",N\u0306:"N",n\u0306:"n",\u014C:"O",\u014D:"o",\u014E:"O",\u014F:"o",\u0150:"O",\u0151:"o",\u0152:"OE",\u0153:"oe",P\u0306:"P",p\u0306:"p",\u0154:"R",\u0155:"r",\u0156:"R",\u0157:"r",\u0158:"R",\u0159:"r",R\u0306:"R",r\u0306:"r",\u0212:"R",\u0213:"r",\u015A:"S",\u015B:"s",\u015C:"S",\u015D:"s",\u015E:"S",\u0218:"S",\u0219:"s",\u015F:"s",\u0160:"S",\u0161:"s",\u0162:"T",\u0163:"t",\u021B:"t",\u021A:"T",\u0164:"T",\u0165:"t",\u0166:"T",\u0167:"t",T\u0306:"T",t\u0306:"t",\u0168:"U",\u0169:"u",\u016A:"U",\u016B:"u",\u016C:"U",\u016D:"u",\u016E:"U",\u016F:"u",\u0170:"U",\u0171:"u",\u0172:"U",\u0173:"u",\u0216:"U",\u0217:"u",V\u0306:"V",v\u0306:"v",\u0174:"W",\u0175:"w",\u1E82:"W",\u1E83:"w",X\u0306:"X",x\u0306:"x",\u0176:"Y",\u0177:"y",\u0178:"Y",Y\u0306:"Y",y\u0306:"y",\u0179:"Z",\u017A:"z",\u017B:"Z",\u017C:"z",\u017D:"Z",\u017E:"z",\u017F:"s",\u0192:"f",\u01A0:"O",\u01A1:"o",\u01AF:"U",\u01B0:"u",\u01CD:"A",\u01CE:"a",\u01CF:"I",\u01D0:"i",\u01D1:"O",\u01D2:"o",\u01D3:"U",\u01D4:"u",\u01D5:"U",\u01D6:"u",\u01D7:"U",\u01D8:"u",\u01D9:"U",\u01DA:"u",\u01DB:"U",\u01DC:"u",\u1EE8:"U",\u1EE9:"u",\u1E78:"U",\u1E79:"u",\u01FA:"A",\u01FB:"a",\u01FC:"AE",\u01FD:"ae",\u01FE:"O",\u01FF:"o",\u00DE:"TH",\u00FE:"th",\u1E54:"P",\u1E55:"p",\u1E64:"S",\u1E65:"s",X\u0301:"X",x\u0301:"x",\u0403:"\u0413",\u0453:"\u0433",\u040C:"\u041A",\u045C:"\u043A",A\u030B:"A",a\u030B:"a",E\u030B:"E",e\u030B:"e",I\u030B:"I",i\u030B:"i",\u01F8:"N",\u01F9:"n",\u1ED2:"O",\u1ED3:"o",\u1E50:"O",\u1E51:"o",\u1EEA:"U",\u1EEB:"u",\u1E80:"W",\u1E81:"w",\u1EF2:"Y",\u1EF3:"y",\u0200:"A",\u0201:"a",\u0204:"E",\u0205:"e",\u0208:"I",\u0209:"i",\u020C:"O",\u020D:"o",\u0210:"R",\u0211:"r",\u0214:"U",\u0215:"u",B\u030C:"B",b\u030C:"b",\u010C\u0323:"C",\u010D\u0323:"c",\u00CA\u030C:"E",\u00EA\u030C:"e",F\u030C:"F",f\u030C:"f",\u01E6:"G",\u01E7:"g",\u021E:"H",\u021F:"h",J\u030C:"J",\u01F0:"j",\u01E8:"K",\u01E9:"k",M\u030C:"M",m\u030C:"m",P\u030C:"P",p\u030C:"p",Q\u030C:"Q",q\u030C:"q",\u0158\u0329:"R",\u0159\u0329:"r",\u1E66:"S",\u1E67:"s",V\u030C:"V",v\u030C:"v",W\u030C:"W",w\u030C:"w",X\u030C:"X",x\u030C:"x",Y\u030C:"Y",y\u030C:"y",A\u0327:"A",a\u0327:"a",B\u0327:"B",b\u0327:"b",\u1E10:"D",\u1E11:"d",\u0228:"E",\u0229:"e",\u0190\u0327:"E",\u025B\u0327:"e",\u1E28:"H",\u1E29:"h",I\u0327:"I",i\u0327:"i",\u0197\u0327:"I",\u0268\u0327:"i",M\u0327:"M",m\u0327:"m",O\u0327:"O",o\u0327:"o",Q\u0327:"Q",q\u0327:"q",U\u0327:"U",u\u0327:"u",X\u0327:"X",x\u0327:"x",Z\u0327:"Z",z\u0327:"z",\u0439:"\u0438",\u0419:"\u0418",\u0451:"\u0435",\u0401:"\u0415"},Nm=Object.keys(Dm).join("|"),Gx=new RegExp(Nm,"g"),qx=new RegExp(Nm,"");function Yx(t){return Dm[t]}var Mm=function(t){return t.replace(Gx,Yx)},Ux=function(t){return!!t.match(qx)};Ra.exports=Mm;Ra.exports.has=Ux;Ra.exports.remove=Mm});var $m=Le((cT,Um)=>{"use strict";Um.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var o,n,i;if(Array.isArray(e)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(!t(e[n],r[n]))return!1;return!0}if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;for(n of e.entries())if(!t(n[1],r.get(n[0])))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(e[n]!==r[n])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(i=Object.keys(e),o=i.length,o!==Object.keys(r).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=o;n--!==0;){var a=i[n];if(!t(e[a],r[a]))return!1}return!0}return e!==e&&r!==r}});var Ro=Le((RR,Ap)=>{Ap.exports=window.wp.date});var Jp=Le((PV,Zp)=>{Zp.exports=window.wp.warning});var id=Le((QM,Qg)=>{Qg.exports=window.wp.coreData});var Zg=Le((XM,Xg)=>{Xg.exports=window.wp.editor});import{useParams as w_,useNavigate as __,useSearch as y_,Link as S_,useInvalidate as C_}from"@wordpress/route";var cd=Object.prototype.hasOwnProperty;function fd(t,e,r){for(r of t.keys())if(Nr(r,e))return r}function Nr(t,e){var r,o,n;if(t===e)return!0;if(t&&e&&(r=t.constructor)===e.constructor){if(r===Date)return t.getTime()===e.getTime();if(r===RegExp)return t.toString()===e.toString();if(r===Array){if((o=t.length)===e.length)for(;o--&&Nr(t[o],e[o]););return o===-1}if(r===Set){if(t.size!==e.size)return!1;for(o of t)if(n=o,n&&typeof n=="object"&&(n=fd(e,n),!n)||!e.has(n))return!1;return!0}if(r===Map){if(t.size!==e.size)return!1;for(o of t)if(n=o[0],n&&typeof n=="object"&&(n=fd(e,n),!n)||!Nr(o[1],e.get(n)))return!1;return!0}if(r===ArrayBuffer)t=new Uint8Array(t),e=new Uint8Array(e);else if(r===DataView){if((o=t.byteLength)===e.byteLength)for(;o--&&t.getInt8(o)===e.getInt8(o););return o===-1}if(ArrayBuffer.isView(t)){if((o=t.byteLength)===e.byteLength)for(;o--&&t[o]===e[o];);return o===-1}if(!r||typeof t=="object"){o=0;for(r in t)if(cd.call(t,r)&&++o&&!cd.call(e,r)||!(r in e)||!Nr(t[r],e[r]))return!1;return Object.keys(e).length===o}}return t!==t&&e!==e}var _n=d(j(),1),mi=d(Yt(),1),Os=d(As(),1);function Is(t,e,r){return`dataviews-${t}-${e}-${r}`}var gd=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function Ts(t,e,r){if(!e)return t;let o=t;for(let n of gd)n in e&&(o={...o,[n]:e[n]});if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(a=>a.field)),i=(t.filters??[]).filter(a=>!n.has(a.field));o={...o,filters:[...i,...e.filters]}}return e.sort&&r&&t.sort?.field===r.sort?.field&&t.sort?.direction===r.sort?.direction&&(o={...o,sort:e.sort}),e.layout&&(o={...o,layout:{...o.layout,...e.layout}}),e.groupBy&&(o={...o,groupBy:e.groupBy}),o}function fi(t,e,r){if(!e)return t;let o=t;for(let n of gd)if(n in e){let{[n]:i,...a}=o;o=a}if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(i=>i.field));o={...o,filters:(t.filters??[]).filter(i=>!n.has(i.field))}}if(e.sort&&t.sort?.field===e.sort.field&&t.sort?.direction===e.sort.direction&&(o={...o,sort:r?.sort}),e.layout&&"layout"in o&&o.layout){let n={...o.layout};for(let i of Object.keys(e.layout))delete n[i];o={...o,layout:Object.keys(n).length>0?n:void 0}}if(e.groupBy&&"groupBy"in o){let{groupBy:n,...i}=o;o=i}return o}function gh(t,e){let r={...t};for(let o of e)delete r[o];return r}function Rs(t){let{kind:e,name:r,slug:o,defaultView:n,activeViewOverrides:i,queryParams:a,onChangeQueryParams:l}=t,s=Is(e,r,o),u=(0,mi.useSelect)(S=>S(Os.store).get("core/views",s),[s]),{set:c}=(0,mi.useDispatch)(Os.store),p=u??n,f=Number(a?.page??p.page??1),m=a?.search??p.search??"",v=(0,_n.useMemo)(()=>Ts({...p,page:f,search:m},i,n),[p,f,m,i,n]),y=!!u,b=(0,_n.useCallback)(S=>{let A={page:S?.page,search:S?.search},V=fi(gh(S,["page","search"]),i,n);l&&!Nr(A,{page:f,search:m})&&l(A);let T=fi(p,i,n),N=fi(n,i,n);Nr(T,V)||(Nr(V,N)?c("core/views",s,void 0):c("core/views",s,V))},[l,f,m,p,n,i,c,s]),x=(0,_n.useCallback)(()=>{c("core/views",s,void 0)},[s,c]);return{view:v,isModified:y,updateView:b,resetToDefault:x}}var hh=d(Yt(),1),bh=d(As(),1);var bt=d(j(),1),Ss=d(Et(),1);var wd=d(le(),1),xd={};function Vs(t,e){let r=wd.useRef(xd);return r.current===xd&&(r.current=t(e)),r}function ks(t,...e){let r=new URL(`https://base-ui.com/production-error/${t}`);return e.forEach(o=>r.searchParams.append("args[]",o)),`Base UI error #${t}; visit ${r} for the full message.`}var vi=d(le(),1);function Ds(t,e,r,o){let n=Vs(Sd).current;return wh(n,t,e,r,o)&&Cd(n,[t,e,r,o]),n.callback}function yd(t){let e=Vs(Sd).current;return _h(e,t)&&Cd(e,t),e.callback}function Sd(){return{callback:null,cleanup:null,refs:[]}}function wh(t,e,r,o,n){return t.refs[0]!==e||t.refs[1]!==r||t.refs[2]!==o||t.refs[3]!==n}function _h(t,e){return t.refs.length!==e.length||t.refs.some((r,o)=>r!==e[o])}function Cd(t,e){if(t.refs=e,e.every(r=>r==null)){t.callback=null;return}t.callback=r=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),r!=null){let o=Array(e.length).fill(null);for(let n=0;n{for(let n=0;n=t}function Ns(t){if(!Ad.isValidElement(t))return null;let e=t,r=e.props;return(Pd(19)?r?.ref:e.ref)??null}function yn(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Id(t,e){let r={};for(let o in t){let n=t[o];if(e?.hasOwnProperty(o)){let i=e[o](n);i!=null&&Object.assign(r,i);continue}n===!0?r[`data-${o.toLowerCase()}`]="":n&&(r[`data-${o.toLowerCase()}`]=n.toString())}return r}function Td(t,e){return typeof t=="function"?t(e):t}function Od(t,e){return typeof t=="function"?t(e):t}var Cn={};function pi(t,e,r,o,n){let i={...Ms(t,Cn)};return e&&(i=Sn(i,e)),r&&(i=Sn(i,r)),o&&(i=Sn(i,o)),n&&(i=Sn(i,n)),i}function Rd(t){if(t.length===0)return Cn;if(t.length===1)return Ms(t[0],Cn);let e={...Ms(t[0],Cn)};for(let r=1;r=65&&n<=90&&(typeof e=="function"||typeof e>"u")}function Vd(t){return typeof t=="function"}function Ms(t,e){return Vd(t)?t(e):t??Cn}function Eh(t,e){return e?t?r=>{if(Ah(r)){let n=r;Ph(n);let i=e(n);return n.baseUIHandlerPrevented||t?.(n),i}let o=e(r);return t?.(r),o}:e:t}function Ph(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Fs(t,e){return e?t?e+" "+t:e:t}function Ah(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}var Ih=Object.freeze([]),Mr=Object.freeze({});var Ls=d(le(),1);function kd(t,e,r={}){let o=e.render,n=Th(e,r);if(r.enabled===!1)return null;let i=r.state??Mr;return Oh(t,o,n,i)}function Th(t,e={}){let{className:r,style:o,render:n}=t,{state:i=Mr,ref:a,props:l,stateAttributesMapping:s,enabled:u=!0}=e,c=u?Td(r,i):void 0,p=u?Od(o,i):void 0,f=u?Id(i,s):Mr,m=u?yn(f,Array.isArray(l)?Rd(l):l)??Mr:Mr;return typeof document<"u"&&(u?Array.isArray(a)?m.ref=yd([m.ref,Ns(n),...a]):m.ref=Ds(m.ref,Ns(n),a):Ds(null,null)),u?(c!==void 0&&(m.className=Fs(m.className,c)),p!==void 0&&(m.style=yn(m.style,p)),m):Mr}function Oh(t,e,r,o){if(e){if(typeof e=="function")return e(r,o);let n=pi(r,e.props);return n.ref=r.ref,vi.cloneElement(e,n)}if(t&&typeof t=="string")return Rh(t,r);throw new Error(ks(8))}function Rh(t,e){return t==="button"?(0,Ls.createElement)("button",{type:"button",...e,key:e.key}):t==="img"?(0,Ls.createElement)("img",{alt:"",...e,key:e.key}):vi.createElement(t,e)}function Hd(t){return kd(t.defaultTagName??"div",t,t)}function jd(t){var e,r,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e{},fields:[],data:[],paginationInfo:{totalItems:0,totalPages:0},selection:[],onChangeSelection:()=>{},setOpenedFilter:()=>{},openedFilter:null,getItemId:t=>t.id,isItemClickable:()=>!0,renderItemLink:void 0,containerWidth:0,containerRef:(0,Ui.createRef)(),resizeObserverRef:()=>{},defaultLayouts:{list:{},grid:{},table:{}},filters:[],isShowingFilter:!1,setIsShowingFilter:()=>{},hasInitiallyLoaded:!1,hasInfiniteScrollHandler:!1,config:{perPageSizes:[]}});Zd.displayName="DataViewsContext";var G=Zd;var wr=d($(),1);var go=d($(),1),ta=d(q(),1),wt=d(j(),1),Rl=d(El(),1);var tc=d(q(),1),rc=d($(),1),oc=d(R(),1);function Ur({selection:t,onChangeSelection:e,item:r,getItemId:o,titleField:n,disabled:i,...a}){let l=o(r),s=!i&&t.includes(l),u=n?.getValue?.({item:r})||(0,rc.__)("(no title)");return(0,oc.jsx)(tc.CheckboxControl,{className:"dataviews-selection-checkbox","aria-label":u,"aria-disabled":i,checked:s,onChange:()=>{i||e(t.includes(l)?t.filter(c=>l!==c):[...t,l])},...a})}var po=d(q(),1),ac=d($(),1),Ho=d(j(),1);var sc=d(Yt(),1),Pl=d(Et(),1);var nc=d(Sl(),1),{lock:F1,unlock:K}=(0,nc.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/dataviews");var he=d(R(),1),{Menu:Bo,kebabCase:Gh}=K(po.privateApis);function qh({action:t,onClick:e,items:r,variant:o}){let n=typeof t.label=="string"?t.label:t.label(r);return(0,he.jsx)(po.Button,{disabled:!!t.disabled,accessibleWhenDisabled:!0,size:"compact",variant:o,onClick:e,children:n})}function Yh({action:t,onClick:e,items:r}){let o=typeof t.label=="string"?t.label:t.label(r);return(0,he.jsx)(Bo.Item,{disabled:t.disabled,onClick:e,children:(0,he.jsx)(Bo.ItemLabel,{children:o})})}function vo({action:t,items:e,closeModal:r}){let o=typeof t.label=="string"?t.label:t.label(e),n=typeof t.modalHeader=="function"?t.modalHeader(e):t.modalHeader;return(0,he.jsx)(po.Modal,{title:n||o,__experimentalHideHeader:!!t.hideModalHeader,onRequestClose:r,focusOnMount:t.modalFocusOnMount??!0,size:t.modalSize||"medium",overlayClassName:`dataviews-action-modal dataviews-action-modal__${Gh(t.id)}`,children:(0,he.jsx)(t.RenderModal,{items:e,closeModal:r})})}function Al({actions:t,item:e,registry:r,setActiveModalAction:o}){let{primaryActions:n,regularActions:i}=(0,Ho.useMemo)(()=>t.reduce((l,s)=>((s.isPrimary?l.primaryActions:l.regularActions).push(s),l),{primaryActions:[],regularActions:[]}),[t]),a=l=>l.map(s=>(0,he.jsx)(Yh,{action:s,onClick:()=>{if("RenderModal"in s){o(s);return}s.callback([e],{registry:r})},items:[e]},s.id));return(0,he.jsxs)(Bo.Group,{children:[a(n),a(i)]})}function jo({item:t,actions:e,isCompact:r}){let o=(0,sc.useRegistry)(),{primaryActions:n,eligibleActions:i}=(0,Ho.useMemo)(()=>{let l=e.filter(u=>!u.isEligible||u.isEligible(t));return{primaryActions:l.filter(u=>u.isPrimary),eligibleActions:l}},[e,t]),a=(0,Pl.useViewportMatch)("medium","<");return r?(0,he.jsx)(ic,{item:t,actions:i,isSmall:!0,registry:o}):(0,he.jsxs)(F,{direction:"row",justify:"flex-end",className:"dataviews-item-actions",style:{flexShrink:0,width:"auto"},children:[(0,he.jsx)(Il,{item:t,actions:n,registry:o}),(n.lengthi(null)})]})}function Il({item:t,actions:e,registry:r,buttonVariant:o}){let[n,i]=(0,Ho.useState)(null);return(0,Pl.useViewportMatch)("medium","<")||!Array.isArray(e)||e.length===0?null:(0,he.jsxs)(he.Fragment,{children:[e.map(l=>(0,he.jsx)(qh,{action:l,onClick:()=>{if("RenderModal"in l){i(l);return}l.callback([t],{registry:r})},items:[t],variant:o},l.id)),!!n&&(0,he.jsx)(vo,{action:n,items:[t],closeModal:()=>i(null)})]})}var zo=d(q(),1),$i=d($(),1),at=d(j(),1),cc=d(Yt(),1);var Tl=d(Et(),1);var $r=d($(),1);function lc(t,e,r){return t>0?(0,$r.sprintf)((0,$r._n)("%d Item selected","%d Items selected",t),t):r>e?(0,$r.sprintf)((0,$r._n)("%1$d of %2$d Item","%1$d of %2$d Items",r),e,r):(0,$r.sprintf)((0,$r._n)("%d Item","%d Items",e),e)}var We=d(R(),1);function Uh({action:t,items:e,ActionTriggerComponent:r}){let[o,n]=(0,at.useState)(!1);return(0,We.jsxs)(We.Fragment,{children:[(0,We.jsx)(r,{...{action:t,onClick:()=>{n(!0)},items:e}}),o&&(0,We.jsx)(vo,{action:t,items:e,closeModal:()=>n(!1)})]})}function Ki(t,e){return(0,at.useMemo)(()=>t.some(r=>r.supportsBulk&&(!r.isEligible||r.isEligible(e))),[t,e])}function Wo(t,e){return(0,at.useMemo)(()=>e.some(r=>t.some(o=>o.supportsBulk&&(!o.isEligible||o.isEligible(r)))),[t,e])}function On({selection:t,onChangeSelection:e,data:r,actions:o,getItemId:n}){let i=(0,at.useMemo)(()=>r.filter(s=>o.some(u=>u.supportsBulk&&(!u.isEligible||u.isEligible(s)))),[r,o]),a=r.filter(s=>t.includes(n(s))&&i.includes(s)),l=a.length===i.length;return(0,We.jsx)(zo.CheckboxControl,{className:"dataviews-view-table-selection-checkbox",checked:l,indeterminate:!l&&!!a.length,onChange:()=>{e(l?[]:i.map(s=>n(s)))},"aria-label":l?(0,$i.__)("Deselect all"):(0,$i.__)("Select all")})}function uc({action:t,onClick:e,isBusy:r,items:o}){let n=typeof t.label=="string"?t.label:t.label(o);return(0,Tl.useViewportMatch)("medium","<")?(0,We.jsx)(zo.Button,{disabled:r,accessibleWhenDisabled:!0,label:n,icon:t.icon,size:"compact",onClick:e,isBusy:r}):(0,We.jsx)(zo.Button,{disabled:r,accessibleWhenDisabled:!0,size:"compact",onClick:e,isBusy:r,children:n})}var fc=[];function $h({action:t,selectedItems:e,actionInProgress:r,setActionInProgress:o}){let n=(0,cc.useRegistry)(),i=(0,at.useMemo)(()=>e.filter(a=>!t.isEligible||t.isEligible(a)),[t,e]);return"RenderModal"in t?(0,We.jsx)(Uh,{action:t,items:i,ActionTriggerComponent:uc},t.id):(0,We.jsx)(uc,{action:t,onClick:async()=>{o(t.id),await t.callback(e,{registry:n}),o(null)},items:i,isBusy:r===t.id},t.id)}function dc(t,e,r,o,n,i,a,l,s,u){let c=lc(o.length,t.length,u.totalItems);return(0,We.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__container",gap:"md",align:"center",children:[(0,We.jsx)(On,{selection:o,onChangeSelection:s,data:t,actions:e,getItemId:r}),(0,We.jsx)("span",{className:"dataviews-bulk-actions-footer__item-count",children:c}),(0,We.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__action-buttons",gap:"xs",children:[n.map(p=>(0,We.jsx)($h,{action:p,selectedItems:i,actionInProgress:a,setActionInProgress:l},p.id)),i.length>0&&(0,We.jsx)(zo.Button,{icon:Pn,showTooltip:!0,tooltipPosition:"top",size:"compact",label:(0,$i.__)("Cancel"),disabled:!!a,accessibleWhenDisabled:!1,onClick:()=>{s(fc)}})]})]})}function Kh({selection:t,actions:e,onChangeSelection:r,data:o,getItemId:n,paginationInfo:i}){let[a,l]=(0,at.useState)(null),s=(0,at.useRef)(void 0),u=(0,Tl.useViewportMatch)("medium","<"),c=(0,at.useMemo)(()=>e.filter(v=>v.supportsBulk),[e]),p=(0,at.useMemo)(()=>o.filter(v=>c.some(y=>!y.isEligible||y.isEligible(v))),[o,c]),f=(0,at.useMemo)(()=>o.filter(v=>t.includes(n(v))&&p.includes(v)),[t,o,n,p]),m=(0,at.useMemo)(()=>e.filter(v=>v.supportsBulk&&(!u||v.icon)&&f.some(y=>!v.isEligible||v.isEligible(y))),[e,f,u]);if(a)s.current||(s.current=dc(o,e,n,t,m,f,a,l,r,i));else return s.current&&(s.current=void 0),dc(o,e,n,t,m,f,a,l,r,i);return s.current}function Qi(){let{data:t,selection:e,actions:r=fc,onChangeSelection:o,getItemId:n,paginationInfo:i}=(0,at.useContext)(G);return(0,We.jsx)(Kh,{selection:e,onChangeSelection:o,data:t,actions:r,getItemId:n,paginationInfo:i})}var hr=d($(),1);var br=d(q(),1),Kr=d(j(),1);function Xi(t,e){let r=[t?.titleField,t?.mediaField,t?.descriptionField].filter(Boolean);return e.filter(o=>!r.includes(o.id)&&o.type!=="media"&&o.enableHiding!==!1)}var X=d(R(),1),{Menu:ue}=K(br.privateApis);function Qh({children:t}){return Kr.Children.toArray(t).filter(Boolean).map((e,r)=>(0,X.jsxs)(Kr.Fragment,{children:[r>0&&(0,X.jsx)(ue.Separator,{}),e]},r))}var Xh=(0,Kr.forwardRef)(function({fieldId:e,view:r,fields:o,onChangeView:n,onHide:i,setOpenedFilter:a,canMove:l=!0,canInsertLeft:s=!0,canInsertRight:u=!0},c){let p=r.fields??[],f=p?.indexOf(e),m=r.sort?.field===e,v=!1,y=!1,b=!1,x=[],S=o.find(E=>E.id===e),{setIsShowingFilter:A}=(0,Kr.useContext)(G);if(!S)return null;v=S.enableHiding!==!1,y=S.enableSorting!==!1;let V=S.header;if(x=!!S.filterBy&&S.filterBy?.operators||[],b=!r.filters?.some(E=>e===E.field)&&!!(S.hasElements||S.Edit)&&S.filterBy!==!1&&!S.filterBy?.isPrimary,!y&&!l&&!v&&!b)return V;let T=Xi(r,o).filter(E=>!p.includes(E.id)),N=(s||u)&&!!T.length,D=(0,hr.isRTL)();return(0,X.jsxs)(ue,{children:[(0,X.jsxs)(ue.TriggerButton,{render:(0,X.jsx)(br.Button,{size:"compact",className:"dataviews-view-table-header-button",ref:c,variant:"tertiary"}),children:[V,r.sort&&m&&(0,X.jsx)("span",{"aria-hidden":"true",children:Yd[r.sort.direction]})]}),(0,X.jsx)(ue.Popover,{style:{minWidth:"240px"},children:(0,X.jsxs)(Qh,{children:[y&&(0,X.jsx)(ue.Group,{children:Wi.map(E=>{let I=r.sort&&m&&r.sort.direction===E,k=`${e}-${E}`;return(0,X.jsx)(ue.RadioItem,{name:"view-table-sorting",value:k,checked:I,onChange:()=>{n({...r,sort:{field:e,direction:E},showLevels:!1})},children:(0,X.jsx)(ue.ItemLabel,{children:qi[E]})},k)})}),b&&(0,X.jsx)(ue.Group,{children:(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(br.Icon,{icon:An}),onClick:()=>{a(e),A(!0),n({...r,page:1,filters:[...r.filters||[],{field:e,value:void 0,operator:x[0]}]})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,hr.__)("Add filter")})})}),(l||v||N)&&S&&(0,X.jsxs)(ue.Group,{children:[l&&(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(br.Icon,{icon:Ws}),disabled:D?f>=p.length-1:f<1,onClick:()=>{let E=D?f+1:f-1,I=[...p];I.splice(f,1),I.splice(E,0,e),n({...r,fields:I})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,hr.__)("Move left")})}),l&&(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(br.Icon,{icon:qs}),disabled:D?f<1:f>=p.length-1,onClick:()=>{let E=D?f-1:f+1,I=[...p];I.splice(f,1),I.splice(E,0,e),n({...r,fields:I})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,hr.__)("Move right")})}),s&&!!T.length&&(0,X.jsxs)(ue,{children:[(0,X.jsx)(ue.SubmenuTriggerItem,{children:(0,X.jsx)(ue.ItemLabel,{children:(0,hr.__)("Insert left")})}),(0,X.jsx)(ue.Popover,{children:T.map(E=>{let I=D?f+1:f;return(0,X.jsx)(ue.Item,{onClick:()=>{n({...r,fields:[...p.slice(0,I),E.id,...p.slice(I)]})},children:(0,X.jsx)(ue.ItemLabel,{children:E.label})},E.id)})})]}),u&&!!T.length&&(0,X.jsxs)(ue,{children:[(0,X.jsx)(ue.SubmenuTriggerItem,{children:(0,X.jsx)(ue.ItemLabel,{children:(0,hr.__)("Insert right")})}),(0,X.jsx)(ue.Popover,{children:T.map(E=>{let I=D?f:f+1;return(0,X.jsx)(ue.Item,{onClick:()=>{n({...r,fields:[...p.slice(0,I),E.id,...p.slice(I)]})},children:(0,X.jsx)(ue.ItemLabel,{children:E.label})},E.id)})})]}),v&&S&&(0,X.jsx)(ue.Item,{prefix:(0,X.jsx)(br.Icon,{icon:Tn}),onClick:()=>{i(S),n({...r,fields:p.filter(E=>E!==e)})},children:(0,X.jsx)(ue.ItemLabel,{children:(0,hr.__)("Hide column")})})]})]})})]})}),Zh=Xh,Go=Zh;var mc=d(j(),1),Ol=d(R(),1);function Jh({item:t,isItemClickable:e,onClickItem:r,className:o}){return!e(t)||!r?{className:o}:{className:o?`${o} ${o}--clickable`:void 0,role:"button",tabIndex:0,onClick:n=>{n.stopPropagation(),r(t)},onKeyDown:n=>{(n.key==="Enter"||n.key===""||n.key===" ")&&(n.stopPropagation(),r(t))}}}function Qr({item:t,isItemClickable:e,onClickItem:r,renderItemLink:o,className:n,children:i,...a}){if(!e(t))return(0,Ol.jsx)("div",{className:n,...a,children:i});if(o){let s=o({item:t,className:`${n} ${n}--clickable`,...a,children:i});return(0,mc.cloneElement)(s,{onClick:u=>{u.stopPropagation(),s.props.onClick&&s.props.onClick(u)},onKeyDown:u=>{(u.key==="Enter"||u.key===""||u.key===" ")&&(u.stopPropagation(),s.props.onKeyDown&&s.props.onKeyDown(u))}})}let l=Jh({item:t,isItemClickable:e,onClickItem:r,className:n});return(0,Ol.jsx)("div",{...l,...a,children:i})}var Qt=d(R(),1);function eb({item:t,level:e,titleField:r,mediaField:o,descriptionField:n,onClickItem:i,renderItemLink:a,isItemClickable:l}){return(0,Qt.jsxs)(F,{direction:"row",gap:"md",align:"flex-start",justify:"flex-start",children:[o&&(0,Qt.jsx)(Qr,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-column-primary__media","aria-label":l(t)&&(i||a)&&r?r.getValue?.({item:t}):void 0,children:(0,Qt.jsx)(o.render,{item:t,field:o,config:{sizes:"32px"}})}),(0,Qt.jsxs)(F,{direction:"column",align:"flex-start",className:"dataviews-view-table__primary-column-content",children:[r&&(0,Qt.jsxs)(Qr,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-title-field",children:[e!==void 0&&e>0&&(0,Qt.jsxs)("span",{className:"dataviews-view-table__level",children:[Array(e).fill("\u2014").join(" "),"\xA0"]}),(0,Qt.jsx)(r.render,{item:t,field:r})]}),n&&(0,Qt.jsx)(n.render,{item:t,field:n})]})]})}var Zi=eb;var pc=d(Et(),1),qo=d(j(),1),vc=d($(),1),tb=t=>(0,vc.isRTL)()?Math.abs(t.scrollLeft)<=1:t.scrollLeft+t.clientWidth>=t.scrollWidth-1;function gc({scrollContainerRef:t,enabled:e=!1}){let[r,o]=(0,qo.useState)(!1),n=(0,pc.useDebounce)((0,qo.useCallback)(()=>{let i=t.current;i&&o(tb(i))},[t,o]),200);return(0,qo.useEffect)(()=>typeof window>"u"||!e||!t.current?()=>{}:(n(),t.current.addEventListener("scroll",n),window.addEventListener("resize",n),()=>{t.current?.removeEventListener("scroll",n),window.removeEventListener("resize",n)}),[t,e]),r}function Dt(t,e){return t.reduce((r,o)=>{let n=e.getValue({item:o});return r.has(n)||r.set(n,[]),r.get(n)?.push(o),r},new Map)}var Xr=d(q(),1),bc=d($(),1),xc=d(j(),1);var Pt=d(R(),1);function hc({field:t,isVisible:e,onToggleVisibility:r}){return(0,Pt.jsx)(Xr.__experimentalItem,{onClick:t.enableHiding?r:void 0,children:(0,Pt.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",align:"center",children:[(0,Pt.jsx)("div",{style:{height:24,width:24},children:e&&(0,Pt.jsx)(Xr.Icon,{icon:En})}),(0,Pt.jsx)("span",{className:"dataviews-view-config__label",children:t.label})]})})}function rb(t){return!!t}function Ji({showLabel:t=!0}){let{view:e,fields:r,onChangeView:o}=(0,xc.useContext)(G),n=Xi(e,r);if(!n?.length)return null;let i=r.find(v=>v.id===e.titleField),a=r.find(v=>v.id===e.mediaField),l=r.find(v=>v.id===e.descriptionField),s=[{field:i,isVisibleFlag:"showTitle"},{field:a,isVisibleFlag:"showMedia"},{field:l,isVisibleFlag:"showDescription"}].filter(({field:v})=>rb(v)),u=e.fields??[],c=n.filter(v=>u.includes(v.id)).length,p=s.filter(({isVisibleFlag:v})=>e[v]??!0),f=p.length+c,m=f===1&&p.length===1;return(0,Pt.jsxs)(F,{direction:"column",className:"dataviews-field-control",children:[t&&(0,Pt.jsx)(Xr.BaseControl.VisualLabel,{children:(0,bc.__)("Properties")}),(0,Pt.jsx)(F,{direction:"column",className:"dataviews-view-config__properties",children:(0,Pt.jsxs)(Xr.__experimentalItemGroup,{isBordered:!0,isSeparated:!0,size:"medium",children:[s.map(({field:v,isVisibleFlag:y})=>{let b=e[y]??!0,x=m&&b?{...v,enableHiding:!1}:v;return(0,Pt.jsx)(hc,{field:x,isVisible:b,onToggleVisibility:()=>{o({...e,[y]:!b})}},v.id)}),n.map(v=>{let y=u.includes(v.id),b=f===1&&y?{...v,enableHiding:!1}:v;return(0,Pt.jsx)(hc,{field:b,isVisible:y,onToggleVisibility:()=>{o({...e,fields:y?u.filter(x=>x!==v.id):[...u,v.id]})}},v.id)})]})})]})}var ea=d(j(),1);function Xt(t,e={delay:400}){let[r,o]=(0,ea.useState)(!1);return(0,ea.useEffect)(()=>{if(!t)return;let n=setTimeout(()=>{o(!0)},e.delay);return()=>{clearTimeout(n),o(!1)}},[t,e.delay]),r}var U=d(R(),1);function _c(t,e){if(t)return t;if(e==="integer"||e==="number")return"end"}function ob({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=z("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,U.jsx)("div",{className:i,children:(0,U.jsx)(n.render,{item:t,field:n})})}function wc({hasBulkActions:t,item:e,level:r,actions:o,fields:n,id:i,view:a,titleField:l,mediaField:s,descriptionField:u,selection:c,getItemId:p,isItemClickable:f,onClickItem:m,renderItemLink:v,onChangeSelection:y,isActionsColumnSticky:b,posinset:x}){let{paginationInfo:S}=(0,wt.useContext)(G),A=Ki(o,e),V=A&&c.includes(i),{showTitle:T=!0,showMedia:N=!0,showDescription:D=!0,infiniteScrollEnabled:E}=a,I=(0,wt.useRef)(!1),k=a.fields??[],g=l&&T||s&&N||u&&D;return(0,U.jsxs)("tr",{className:z("dataviews-view-table__row",{"is-selected":A&&V,"has-bulk-actions":A}),onTouchStart:()=>{I.current=!0},"aria-setsize":E?S.totalItems:void 0,"aria-posinset":x,role:E?"article":void 0,onMouseDown:P=>{let _=(0,Rl.isAppleOS)()?P.metaKey:P.ctrlKey;P.button===0&&_&&window.navigator.userAgent.toLowerCase().includes("firefox")&&P?.preventDefault()},onClick:P=>{if(!A)return;((0,Rl.isAppleOS)()?P.metaKey:P.ctrlKey)&&!I.current&&document.getSelection()?.type!=="Range"&&y(c.includes(i)?c.filter(h=>i!==h):[...c,i])},children:[t&&(0,U.jsx)("td",{className:"dataviews-view-table__checkbox-column",children:(0,U.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,U.jsx)(Ur,{item:e,selection:c,onChangeSelection:y,getItemId:p,titleField:l,disabled:!A})})}),g&&(0,U.jsx)("td",{children:(0,U.jsx)(Zi,{item:e,level:r,titleField:T?l:void 0,mediaField:N?s:void 0,descriptionField:D?u:void 0,isItemClickable:f,onClickItem:m,renderItemLink:v})}),k.map(P=>{let{width:_,maxWidth:h,minWidth:O,align:w}=a.layout?.styles?.[P]??{},C=n.find(H=>H.id===P),M=_c(w,C?.type);return(0,U.jsx)("td",{style:{width:_,maxWidth:h,minWidth:O},children:(0,U.jsx)(ob,{fields:n,item:e,column:P,align:M})},P)}),!!o?.length&&(0,U.jsx)("td",{className:z("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":b}),onClick:P=>P.stopPropagation(),children:(0,U.jsx)(jo,{item:e,actions:o})})]})}function nb({actions:t,data:e,fields:r,getItemId:o,getItemLevel:n,isLoading:i=!1,onChangeView:a,onChangeSelection:l,selection:s,setOpenedFilter:u,onClickItem:c,isItemClickable:p,renderItemLink:f,view:m,className:v,empty:y}){let{containerRef:b}=(0,wt.useContext)(G),x=Xt(i),S=(0,wt.useRef)(new Map),A=(0,wt.useRef)(void 0),[V,T]=(0,wt.useState)(),[N,D]=(0,wt.useState)(null);(0,wt.useEffect)(()=>{A.current&&(A.current.focus(),A.current=void 0)});let E=(0,wt.useId)(),I=gc({scrollContainerRef:b,enabled:!!t?.length}),k=Wo(t,e);if(V){A.current=V,T(void 0);return}let g=Y=>{let Z=S.current.get(Y.id),ge=Z?S.current.get(Z.fallback):void 0;T(ge?.node)},P=Y=>{Y.preventDefault(),Y.stopPropagation();let Z={getBoundingClientRect:()=>({x:Y.clientX,y:Y.clientY,top:Y.clientY,left:Y.clientX,right:Y.clientX,bottom:Y.clientY,width:0,height:0,toJSON:()=>({})})};window.requestAnimationFrame(()=>{D(Z)})},_=!!e?.length,h=r.find(Y=>Y.id===m.titleField),O=r.find(Y=>Y.id===m.mediaField),w=r.find(Y=>Y.id===m.descriptionField),C=m.groupBy?.field?r.find(Y=>Y.id===m.groupBy?.field):null,M=C?Dt(e,C):null,{showTitle:H=!0,showMedia:ae=!0,showDescription:_e=!0}=m,ke=h&&H||O&&ae||w&&_e,He=m.fields??[],rt=(Y,Z)=>ge=>{ge?S.current.set(Y,{node:ge,fallback:He[Z>0?Z-1:1]}):S.current.delete(Y)},qt=m.infiniteScrollEnabled&&!M,mr=(0,go.isRTL)();return _?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("table",{className:z("dataviews-view-table",v,{[`has-${m.layout?.density}-density`]:m.layout?.density&&["compact","comfortable"].includes(m.layout.density),"has-bulk-actions":k,"is-refreshing":!qt&&x}),"aria-busy":i,"aria-describedby":E,role:qt?"feed":void 0,inert:!qt&&i?"true":void 0,children:[(0,U.jsxs)("colgroup",{children:[k&&(0,U.jsx)("col",{className:"dataviews-view-table__col-checkbox"}),ke&&(0,U.jsx)("col",{className:"dataviews-view-table__col-first-data"}),He.map((Y,Z)=>(0,U.jsx)("col",{className:z(`dataviews-view-table__col-${Y}`,{"dataviews-view-table__col-first-data":!ke&&Z===0})},`col-${Y}`)),!!t?.length&&(0,U.jsx)("col",{className:"dataviews-view-table__col-actions"})]}),N&&(0,U.jsx)(ta.Popover,{anchor:N,onClose:()=>D(null),placement:"bottom-start",children:(0,U.jsx)(Ji,{showLabel:!1})}),(0,U.jsx)("thead",{onContextMenu:P,children:(0,U.jsxs)("tr",{className:"dataviews-view-table__row",children:[k&&(0,U.jsx)("th",{className:"dataviews-view-table__checkbox-column",scope:"col",onContextMenu:P,children:(0,U.jsx)(On,{selection:s,onChangeSelection:l,data:e,actions:t,getItemId:o})}),ke&&(0,U.jsx)("th",{scope:"col",children:h&&(0,U.jsx)(Go,{ref:rt(h.id,0),fieldId:h.id,view:m,fields:r,onChangeView:a,onHide:g,setOpenedFilter:u,canMove:!1,canInsertLeft:mr?m.layout?.enableMoving??!0:!1,canInsertRight:mr?!1:m.layout?.enableMoving??!0})}),He.map((Y,Z)=>{let{width:ge,maxWidth:pr,minWidth:vr,align:co}=m.layout?.styles?.[Y]??{},fo=r.find(Ps=>Ps.id===Y),Mo=_c(co,fo?.type),wn=m.layout?.enableMoving??!0;return(0,U.jsx)("th",{style:{width:ge,maxWidth:pr,minWidth:vr,textAlign:Mo},"aria-sort":m.sort?.direction&&m.sort?.field===Y?Gi[m.sort.direction]:void 0,scope:"col",children:(0,U.jsx)(Go,{ref:rt(Y,Z),fieldId:Y,view:m,fields:r,onChangeView:a,onHide:g,setOpenedFilter:u,canMove:wn,canInsertLeft:wn,canInsertRight:wn})},Y)}),!!t?.length&&(0,U.jsx)("th",{className:z("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":!I}),children:(0,U.jsx)("span",{className:"dataviews-view-table-header",children:(0,go.__)("Actions")})})]})}),_&&C&&M?Array.from(M.entries()).map(([Y,Z])=>(0,U.jsxs)("tbody",{children:[(0,U.jsx)("tr",{className:"dataviews-view-table__group-header-row",children:(0,U.jsx)("td",{colSpan:He.length+(ke?1:0)+(k?1:0)+(t?.length?1:0),className:"dataviews-view-table__group-header-cell",children:m.groupBy?.showLabel===!1?Y:(0,go.sprintf)((0,go.__)("%1$s: %2$s"),C.label,Y)})}),Z.map((ge,pr)=>(0,U.jsx)(wc,{item:ge,level:m.showLevels&&typeof n=="function"?n(ge):void 0,hasBulkActions:k,actions:t,fields:r,id:o(ge)||pr.toString(),view:m,titleField:h,mediaField:O,descriptionField:w,selection:s,getItemId:o,onChangeSelection:l,onClickItem:c,renderItemLink:f,isItemClickable:p,isActionsColumnSticky:!I},o(ge)))]},`group-${Y}`)):(0,U.jsx)("tbody",{children:_&&e.map((Y,Z)=>(0,U.jsx)(wc,{item:Y,level:m.showLevels&&typeof n=="function"?n(Y):void 0,hasBulkActions:k,actions:t,fields:r,id:o(Y)||Z.toString(),view:m,titleField:h,mediaField:O,descriptionField:w,selection:s,getItemId:o,onChangeSelection:l,onClickItem:c,renderItemLink:f,isItemClickable:p,isActionsColumnSticky:!I,posinset:qt?Z+1:void 0},o(Y)))})]}),qt&&i&&(0,U.jsx)("div",{className:"dataviews-loading",id:E,children:(0,U.jsx)("p",{className:"dataviews-loading-more",children:(0,U.jsx)(ta.Spinner,{})})})]}):(0,U.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":x}),id:E,children:y})}var yc=nb;var Pc=d(q(),1),na=d($(),1);var At=d(q(),1);var Rn=d($(),1),Cc=d(Et(),1),Ec=d(El(),1),oa=d(j(),1);var ib=d(q(),1),ab=d($(),1),ra=d(j(),1);var sb=d(R(),1),lb=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}],ub=lb[2].value;function Sc(){let t=(0,ra.useContext)(G),e=t.view;return(0,ra.useMemo)(()=>{let r=t.containerWidth,o=32,n=e.layout?.previewSize??ub,i=Math.floor((r+o)/(n+o));return Math.max(1,i)},[t.containerWidth,e.layout?.previewSize])}var ne=d(R(),1),{Badge:db}=K(At.privateApis);function cb(t,e){let r=[];for(let o=0,n=t.length;o{if(x.onClickCapture?.(w),(0,Ec.isAppleOS)()?w.metaKey:w.ctrlKey){if(w.stopPropagation(),w.preventDefault(),!N)return;o(r.includes(D)?r.filter(C=>D!==C):[...r,D])}},children:[(0,ne.jsx)(Qr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:z("dataviews-view-grid__media",{"dataviews-view-grid__media--placeholder":!g}),...h,children:P}),y&&(0,ne.jsx)(Ur,{item:s,selection:r,onChangeSelection:o,getItemId:l,titleField:p,disabled:!N}),!!u?.length&&(0,ne.jsx)("div",{className:"dataviews-view-grid__media-actions",children:(0,ne.jsx)(jo,{item:s,actions:u,isCompact:!0})}),A&&(0,ne.jsx)("div",{className:"dataviews-view-grid__title",children:(0,ne.jsx)(Qr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:"dataviews-view-grid__title-field dataviews-title-field",...O,title:p?.getValueFormatted({item:s,field:p})||void 0,children:_})}),(0,ne.jsxs)(F,{direction:"column",gap:"xs",children:[T&&f?.render&&(0,ne.jsx)(f.render,{item:s,field:f}),!!v?.length&&(0,ne.jsx)(F,{direction:"row",className:"dataviews-view-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:v.map(w=>(0,ne.jsx)(db,{className:"dataviews-view-grid__field-value",children:(0,ne.jsx)(w.render,{item:s,field:w})},w.id))}),!!m?.length&&(0,ne.jsx)(F,{direction:"column",className:"dataviews-view-grid__fields",gap:"xs",children:m.map(w=>(0,ne.jsx)(At.Flex,{className:"dataviews-view-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)(At.Tooltip,{text:w.label,children:(0,ne.jsx)(At.FlexItem,{className:"dataviews-view-grid__field-name",children:w.header})}),(0,ne.jsx)(At.FlexItem,{className:"dataviews-view-grid__field-value",style:{maxHeight:"none"},children:(0,ne.jsx)(w.render,{item:s,field:w})})]})},w.id))})]})]})});function Vl({data:t,isInfiniteScroll:e,className:r,inert:o,isLoading:n,view:i,fields:a,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:c,renderItemLink:p,getItemId:f,actions:m}){let{paginationInfo:v,resizeObserverRef:y}=(0,oa.useContext)(G),b=Sc(),x=Wo(m,t),S=a.find(k=>k.id===i?.titleField),A=a.find(k=>k.id===i?.mediaField),V=a.find(k=>k.id===i?.descriptionField),T=i.fields??[],{regularFields:N,badgeFields:D}=T.reduce((k,g)=>{let P=a.find(h=>h.id===g);if(!P)return k;let _=i.layout?.badgeFields?.includes(g)?"badgeFields":"regularFields";return k[_].push(P),k},{regularFields:[],badgeFields:[]}),E="900px",I=Math.ceil(t.length/b);return(0,ne.jsx)(At.Composite,{role:e?"feed":"grid",className:z("dataviews-view-grid",r),focusWrap:!0,"aria-busy":n,"aria-rowcount":e?void 0:I,ref:y,inert:o,children:cb(t,b).map((k,g)=>(0,ne.jsx)(At.Composite.Row,{render:(0,ne.jsx)("div",{role:"row","aria-rowindex":g+1,"aria-label":(0,Rn.sprintf)((0,Rn.__)("Row %d"),g+1),className:"dataviews-view-grid__row",style:{gridTemplateColumns:`repeat( ${b}, minmax(0, 1fr) )`}}),children:k.map((P,_)=>{let h=g*b+_;return(0,ne.jsx)(At.Composite.Item,{render:O=>(0,ne.jsx)(fb,{...O,role:e?"article":"gridcell","aria-setsize":e?v.totalItems:void 0,"aria-posinset":e?h+1:void 0,view:i,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:c,renderItemLink:p,getItemId:f,item:P,actions:m,mediaField:A,titleField:S,descriptionField:V,regularFields:N,badgeFields:D,hasBulkActions:x,config:{sizes:E}})},f(P))})},g))})}var It=d(R(),1);function mb({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,selection:u,view:c,className:p,empty:f}){let m=Xt(!!n),v=!!e?.length,y=c.groupBy?.field?r.find(A=>A.id===c.groupBy?.field):null,b=y?Dt(e,y):null,x=c.infiniteScrollEnabled&&!b;if(!v)return(0,It.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":m}),children:f});let S={className:z(p,{"is-refreshing":!x&&m}),inert:!x&&n?"true":void 0,isLoading:n,view:c,fields:r,selection:u,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,getItemId:o,actions:t};return(0,It.jsxs)(It.Fragment,{children:[v&&y&&b&&(0,It.jsx)(F,{direction:"column",gap:"lg",children:Array.from(b.entries()).map(([A,V])=>(0,It.jsxs)(F,{direction:"column",gap:"sm",children:[(0,It.jsx)("h3",{className:"dataviews-view-grid__group-header",children:c.groupBy?.showLabel===!1?A:(0,na.sprintf)((0,na.__)("%1$s: %2$s"),y.label,A)}),(0,It.jsx)(Vl,{...S,data:V,isInfiniteScroll:!1})]},A))}),!b&&(0,It.jsx)(Vl,{...S,data:e,isInfiniteScroll:!!x}),x&&n&&(0,It.jsx)("p",{className:"dataviews-loading-more",children:(0,It.jsx)(Pc.Spinner,{})})]})}var Ac=mb;var ia=d(Et(),1),Ye=d(q(),1),Be=d(j(),1),Vn=d($(),1);var Ml=d(Yt(),1);var W=d(R(),1),{Menu:kl}=K(Ye.privateApis);function Dl(t){return`${t}-item-wrapper`}function pb(t,e){return`${t}-primary-action-${e}`}function Nl(t){return`${t}-dropdown`}function vb({idPrefix:t,primaryAction:e,item:r}){let o=(0,Ml.useRegistry)(),[n,i]=(0,Be.useState)(!1),a=pb(t,e.id),l=typeof e.label=="string"?e.label:e.label([r]);return"RenderModal"in e?(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(Ye.Composite.Item,{id:a,render:(0,W.jsx)(Ye.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,text:l,size:"small",onClick:()=>i(!0)}),children:n&&(0,W.jsx)(vo,{action:e,items:[r],closeModal:()=>i(!1)})})},e.id):(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(Ye.Composite.Item,{id:a,render:(0,W.jsx)(Ye.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,size:"small",onClick:()=>{e.callback([r],{registry:o})},children:l})})},e.id)}function Ic({view:t,actions:e,idPrefix:r,isSelected:o,item:n,titleField:i,mediaField:a,descriptionField:l,onSelect:s,otherFields:u,onDropdownTriggerKeyDown:c,posinset:p}){let{showTitle:f=!0,showMedia:m=!0,showDescription:v=!0,infiniteScrollEnabled:y}=t,b=(0,Be.useRef)(null),x=`${r}-label`,S=`${r}-description`,A=(0,Ml.useRegistry)(),[V,T]=(0,Be.useState)(!1),[N,D]=(0,Be.useState)(null),E=({type:w})=>{T(w==="mouseenter")},{paginationInfo:I}=(0,Be.useContext)(G);(0,Be.useEffect)(()=>{o&&b.current?.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})},[o]);let{primaryAction:k,eligibleActions:g}=(0,Be.useMemo)(()=>{let w=e.filter(M=>!M.isEligible||M.isEligible(n));return{primaryAction:w.filter(M=>M.isPrimary)[0],eligibleActions:w}},[e,n]),P=k&&e.length===1,_=m&&a?.render?(0,W.jsx)("div",{className:"dataviews-view-list__media-wrapper",children:(0,W.jsx)(a.render,{item:n,field:a,config:{sizes:"52px"}})}):null,h=f&&i?.render?(0,W.jsx)(i.render,{item:n,field:i}):null,O=g?.length>0&&(0,W.jsxs)(F,{direction:"row",gap:"md",className:"dataviews-view-list__item-actions",children:[k&&(0,W.jsx)(vb,{idPrefix:r,primaryAction:k,item:n}),!P&&(0,W.jsxs)("div",{role:"gridcell",children:[(0,W.jsxs)(kl,{placement:"bottom-end",children:[(0,W.jsx)(kl.TriggerButton,{render:(0,W.jsx)(Ye.Composite.Item,{id:Nl(r),render:(0,W.jsx)(Ye.Button,{size:"small",icon:In,label:(0,Vn.__)("Actions"),accessibleWhenDisabled:!0,disabled:!e.length,onKeyDown:c})})}),(0,W.jsx)(kl.Popover,{children:(0,W.jsx)(Al,{actions:g,item:n,registry:A,setActiveModalAction:D})})]}),!!N&&(0,W.jsx)(vo,{action:N,items:[n],closeModal:()=>D(null)})]})]});return(0,W.jsx)(Ye.Composite.Row,{ref:b,render:(0,W.jsx)("div",{"aria-posinset":p,"aria-setsize":y?I.totalItems:void 0}),role:y?"article":"row",className:z({"is-selected":o,"is-hovered":V}),onMouseEnter:E,onMouseLeave:E,children:(0,W.jsxs)(F,{direction:"row",className:"dataviews-view-list__item-wrapper",children:[(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(Ye.Composite.Item,{id:Dl(r),"aria-pressed":o,"aria-labelledby":x,"aria-describedby":S,className:"dataviews-view-list__item",onClick:()=>s(n)})}),(0,W.jsxs)(F,{direction:"row",gap:"md",justify:"start",align:"flex-start",style:{flex:1,minWidth:0},children:[_,(0,W.jsxs)(F,{direction:"column",gap:"xs",className:"dataviews-view-list__field-wrapper",children:[(0,W.jsxs)(F,{direction:"row",align:"center",children:[(0,W.jsx)("div",{className:"dataviews-title-field dataviews-view-list__title-field",id:x,children:h}),O]}),v&&l?.render&&(0,W.jsx)("div",{className:"dataviews-view-list__field",children:(0,W.jsx)(l.render,{item:n,field:l})}),(0,W.jsx)("div",{className:"dataviews-view-list__fields",id:S,children:u.map(w=>(0,W.jsxs)("div",{className:"dataviews-view-list__field",children:[(0,W.jsx)(Ye.VisuallyHidden,{as:"span",className:"dataviews-view-list__field-label",children:w.label}),(0,W.jsx)("span",{className:"dataviews-view-list__field-value",children:(0,W.jsx)(w.render,{item:n,field:w})})]},w.id))})]})]})]})})}function gb(t){return!!t}function Fl(t){let{actions:e,data:r,fields:o,getItemId:n,isLoading:i,onChangeSelection:a,selection:l,view:s,className:u,empty:c}=t,p=(0,ia.useInstanceId)(Fl,"view-list"),f=Xt(!!i),m=r?.findLast(w=>l.includes(n(w))),v=o.find(w=>w.id===s.titleField),y=o.find(w=>w.id===s.mediaField),b=o.find(w=>w.id===s.descriptionField),x=(s?.fields??[]).map(w=>o.find(C=>w===C.id)).filter(gb),S=w=>a([n(w)]),A=(0,Be.useCallback)(w=>`${p}-${n(w)}`,[p,n]),V=(0,Be.useCallback)((w,C)=>C.startsWith(A(w)),[A]),[T,N]=(0,Be.useState)(void 0);(0,Be.useEffect)(()=>{m&&N(Dl(A(m)))},[m,A]);let D=r.findIndex(w=>V(w,T??"")),E=(0,ia.usePrevious)(D),I=D!==-1,k=(0,Be.useCallback)((w,C)=>{let M=Math.min(r.length-1,Math.max(0,w));if(!r[M])return;let H=A(r[M]),ae=C(H);N(ae),document.getElementById(ae)?.focus()},[r,A]);(0,Be.useEffect)(()=>{!I&&(E!==void 0&&E!==-1)&&k(E,Dl)},[I,k,E]);let g=(0,Be.useCallback)(w=>{w.key==="ArrowDown"&&(w.preventDefault(),k(D+1,Nl)),w.key==="ArrowUp"&&(w.preventDefault(),k(D-1,Nl))},[k,D]),P=!!r?.length,_=s.groupBy?.field?o.find(w=>w.id===s.groupBy?.field):null,h=P&&_?Dt(r,_):null,O=s.infiniteScrollEnabled&&!h;return P?P&&_&&h?(0,W.jsx)(Ye.Composite,{id:`${p}`,render:(0,W.jsx)("div",{}),className:"dataviews-view-list__group",role:"grid",activeId:T,setActiveId:N,children:(0,W.jsx)(F,{direction:"column",gap:"lg",className:z("dataviews-view-list",u),children:Array.from(h.entries()).map(([w,C])=>(0,W.jsxs)(F,{direction:"column",gap:"sm",children:[(0,W.jsx)("h3",{className:"dataviews-view-list__group-header",children:s.groupBy?.showLabel===!1?w:(0,Vn.sprintf)((0,Vn.__)("%1$s: %2$s"),_.label,w)}),C.map(M=>{let H=A(M);return(0,W.jsx)(Ic,{view:s,idPrefix:H,actions:e,item:M,isSelected:M===m,onSelect:S,mediaField:y,titleField:v,descriptionField:b,otherFields:x,onDropdownTriggerKeyDown:g},H)})]},w))})}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Ye.Composite,{id:p,render:(0,W.jsx)("div",{}),className:z("dataviews-view-list",u,{[`has-${s.layout?.density}-density`]:s.layout?.density&&["compact","comfortable"].includes(s.layout.density),"is-refreshing":!O&&f}),role:s.infiniteScrollEnabled?"feed":"grid",activeId:T,setActiveId:N,inert:!O&&i?"true":void 0,children:r.map((w,C)=>{let M=A(w);return(0,W.jsx)(Ic,{view:s,idPrefix:M,actions:e,item:w,isSelected:w===m,onSelect:S,mediaField:y,titleField:v,descriptionField:b,otherFields:x,onDropdownTriggerKeyDown:g,posinset:s.infiniteScrollEnabled?C+1:void 0},M)})}),O&&i&&(0,W.jsx)("p",{className:"dataviews-loading-more",children:(0,W.jsx)(Ye.Spinner,{})})]}):(0,W.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":f}),children:c})}var Mc=d(q(),1);var aa=d($(),1),Tc=d(j(),1);var Yo=d(R(),1);function Oc({groupName:t,groupData:e,groupField:r,showLabel:o=!0,children:n}){let i=o?(0,Tc.createInterpolateElement)((0,aa.sprintf)((0,aa.__)("%s: "),r.label).trim(),{groupName:(0,Yo.jsx)(r.render,{item:e[0],field:r})}):(0,Yo.jsx)(r.render,{item:e[0],field:r});return(0,Yo.jsxs)(F,{direction:"column",className:"dataviews-view-activity__group",children:[(0,Yo.jsx)("h3",{className:"dataviews-view-activity__group-header",children:i}),n]},t)}var Rc=d(q(),1),ho=d(j(),1),Vc=d(Yt(),1),kc=d(Et(),1);var De=d(R(),1);function hb(t){let{view:e,actions:r,item:o,titleField:n,mediaField:i,descriptionField:a,otherFields:l,posinset:s,onClickItem:u,renderItemLink:c,isItemClickable:p}=t,{showTitle:f=!0,showMedia:m=!0,showDescription:v=!0,infiniteScrollEnabled:y}=e,b=(0,ho.useRef)(null),x=(0,Vc.useRegistry)(),{paginationInfo:S}=(0,ho.useContext)(G),{primaryActions:A,eligibleActions:V}=(0,ho.useMemo)(()=>{let g=r.filter(_=>!_.isEligible||_.isEligible(o));return{primaryActions:g.filter(_=>_.isPrimary),eligibleActions:g}},[r,o]),T=(0,kc.useViewportMatch)("medium","<"),N=e.layout?.density??"balanced",D=m&&N!=="compact"&&i?.render?(0,De.jsx)(i.render,{item:o,field:i,config:{sizes:N==="comfortable"?"32px":"24px"}}):null,E=(0,De.jsx)("div",{className:"dataviews-view-activity__item-type-icon",children:D||(0,De.jsx)("span",{className:"dataviews-view-activity__item-bullet","aria-hidden":"true"})}),I=f&&n?.render?(0,De.jsx)(n.render,{item:o,field:n}):null,k=(0,ho.useMemo)(()=>N==="comfortable"?"md":"sm",[N]);return(0,De.jsx)("div",{ref:b,role:y?"article":void 0,"aria-posinset":s,"aria-setsize":y?S.totalItems:void 0,className:z("dataviews-view-activity__item",N==="compact"&&"is-compact",N==="balanced"&&"is-balanced",N==="comfortable"&&"is-comfortable"),children:(0,De.jsxs)(F,{direction:"row",gap:"lg",justify:"start",align:"flex-start",children:[(0,De.jsx)(F,{direction:"column",gap:"xs",align:"center",className:"dataviews-view-activity__item-type",children:E}),(0,De.jsxs)(F,{direction:"column",gap:k,align:"flex-start",className:"dataviews-view-activity__item-content",children:[I&&(0,De.jsx)(Qr,{item:o,isItemClickable:p,onClickItem:u,renderItemLink:c,className:"dataviews-view-activity__item-title",children:I}),v&&a&&(0,De.jsx)("div",{className:"dataviews-view-activity__item-description",children:(0,De.jsx)(a.render,{item:o,field:a})}),(0,De.jsx)("div",{className:"dataviews-view-activity__item-fields",children:l.map(g=>(0,De.jsxs)("div",{className:"dataviews-view-activity__item-field",children:[(0,De.jsx)(Rc.VisuallyHidden,{as:"span",className:"dataviews-view-activity__item-field-label",children:g.label}),(0,De.jsx)("span",{className:"dataviews-view-activity__item-field-value",children:(0,De.jsx)(g.render,{item:o,field:g})})]},g.id))}),!!A?.length&&(0,De.jsx)(Il,{item:o,actions:A,registry:x,buttonVariant:"secondary"})]}),(A.length0)&&(0,De.jsx)("div",{className:"dataviews-view-activity__item-actions",children:(0,De.jsx)(jo,{item:o,actions:V,isCompact:!0})})]})})}var Dc=hb;var Nc=d(le(),1);function bb(t){return!!t}function Ll(t){let{data:e,fields:r,getItemId:o,view:n}=t,i=r.find(u=>u.id===n.titleField),a=r.find(u=>u.id===n.mediaField),l=r.find(u=>u.id===n.descriptionField),s=(n?.fields??[]).map(u=>r.find(c=>u===c.id)).filter(bb);return e.map((u,c)=>(0,Nc.createElement)(Dc,{...t,key:o(u),item:u,mediaField:a,titleField:i,descriptionField:l,otherFields:s,posinset:n.infiniteScrollEnabled?c+1:void 0}))}var Tt=d(R(),1);function Fc(t){let{empty:e,data:r,fields:o,isLoading:n,view:i,className:a}=t,l=Xt(!!n),s=!!r?.length,u=i.groupBy?.field?o.find(y=>y.id===i.groupBy?.field):null,c=s&&u?Dt(r,u):null,p=i.infiniteScrollEnabled&&!c;if(!s)return(0,Tt.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":l}),children:e});let f=!p&&!!n,m=z("dataviews-view-activity",a,{"is-refreshing":!p&&l}),v=c?Array.from(c.entries()):[];return s&&u&&c?(0,Tt.jsx)(F,{direction:"column",gap:"sm",className:m,inert:f?"true":void 0,children:v.map(([y,b])=>(0,Tt.jsx)(Oc,{groupName:y,groupData:b,groupField:u,showLabel:i.groupBy?.showLabel!==!1,children:(0,Tt.jsx)(Ll,{...t,data:b})},y))}):(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsx)("div",{className:m,role:i.infiniteScrollEnabled?"feed":void 0,inert:f?"true":void 0,children:(0,Tt.jsx)(Ll,{...t})}),p&&n&&(0,Tt.jsx)("p",{className:"dataviews-loading-more",children:(0,Tt.jsx)(Mc.Spinner,{})})]})}var _t=d(q(),1),Dn=d($(),1),Gc=d(Et(),1),qc=d(j(),1);var Bc=d(q(),1),xb=d(Yt(),1),sa=d(j(),1);var wb=d($(),1);var kn=d(q(),1),Uo=d(j(),1),Ot=d($(),1);var xr=d(R(),1);function Bl(){let{view:t,onChangeView:e,paginationInfo:{totalItems:r=0,totalPages:o}}=(0,Uo.useContext)(G);if(!r||!o||t.infiniteScrollEnabled)return null;let n=t.page??1,i=Array.from(Array(o)).map((a,l)=>{let s=l+1;return{value:s.toString(),label:s.toString(),"aria-label":n===s?(0,Ot.sprintf)((0,Ot.__)("Page %1$d of %2$d"),n,o):s.toString()}});return!!r&&o!==1&&(0,xr.jsxs)(F,{direction:"row",className:"dataviews-pagination",justify:"end",align:"center",gap:"xl",children:[(0,xr.jsx)(F,{direction:"row",justify:"flex-start",align:"center",gap:"xs",className:"dataviews-pagination__page-select",children:(0,Uo.createInterpolateElement)((0,Ot.sprintf)((0,Ot._x)("
      Page
      %1$s
      of %2$d
      ","paging"),"",o),{div:(0,xr.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,xr.jsx)(kn.SelectControl,{"aria-label":(0,Ot.__)("Current page"),value:n.toString(),options:i,onChange:a=>{e({...t,page:+a})},size:"small",variant:"minimal"})})}),(0,xr.jsxs)(F,{direction:"row",gap:"xs",align:"center",children:[(0,xr.jsx)(kn.Button,{onClick:()=>e({...t,page:n-1}),disabled:n===1,accessibleWhenDisabled:!0,label:(0,Ot.__)("Previous page"),icon:(0,Ot.isRTL)()?Mi:Li,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,xr.jsx)(kn.Button,{onClick:()=>e({...t,page:n+1}),disabled:n>=o,accessibleWhenDisabled:!0,label:(0,Ot.__)("Next page"),icon:(0,Ot.isRTL)()?Li:Mi,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})}var Lc=(0,Uo.memo)(Bl);var Hc=d(R(),1);function la(t){return(0,sa.useMemo)(()=>t?.every(e=>e.supportsBulk),[t])}var jc=d(j(),1);var zc=d(R(),1),Hl=(0,jc.forwardRef)(({className:t,previewSize:e,...r},o)=>(0,zc.jsx)("div",{ref:o,className:z("dataviews-view-grid-items",t),style:{gridTemplateColumns:e&&`repeat(auto-fill, minmax(${e}px, 1fr))`},...r}));var Q=d(R(),1),{Badge:_b}=K(_t.privateApis);function Wc({view:t,multiselect:e,selection:r,onChangeSelection:o,getItemId:n,item:i,mediaField:a,titleField:l,descriptionField:s,regularFields:u,badgeFields:c,config:p,posinset:f,setsize:m}){let{showTitle:v=!0,showMedia:y=!0,showDescription:b=!0}=t,x=n(i),S=r.includes(x),A=a?.render?(0,Q.jsx)(a.render,{item:i,field:a,config:p}):null,V=v&&l?.render?(0,Q.jsx)(l.render,{item:i,field:l}):null;return(0,Q.jsxs)(_t.Composite.Item,{"aria-label":l?l.getValue({item:i})||(0,Dn.__)("(no title)"):void 0,render:({children:T,...N})=>(0,Q.jsx)(F,{direction:"column",children:T,...N}),role:"option","aria-posinset":f,"aria-setsize":m,className:z("dataviews-view-picker-grid__card",{"is-selected":S}),"aria-selected":S,onClick:()=>{if(S)o(r.filter(T=>x!==T));else{let T=e?[...r,x]:[x];o(T)}},children:[y&&A&&(0,Q.jsx)("div",{className:"dataviews-view-picker-grid__media",children:A}),y&&A&&(0,Q.jsx)(Ur,{item:i,selection:r,onChangeSelection:o,getItemId:n,titleField:l,disabled:!1,"aria-hidden":!0,tabIndex:-1}),v&&(0,Q.jsx)(F,{direction:"row",justify:"space-between",className:"dataviews-view-picker-grid__title-actions",children:(0,Q.jsx)("div",{className:"dataviews-view-picker-grid__title-field dataviews-title-field",children:V})}),(0,Q.jsxs)(F,{direction:"column",gap:"xs",children:[b&&s?.render&&(0,Q.jsx)(s.render,{item:i,field:s}),!!c?.length&&(0,Q.jsx)(F,{direction:"row",className:"dataviews-view-picker-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:c.map(T=>(0,Q.jsx)(_b,{className:"dataviews-view-picker-grid__field-value",children:(0,Q.jsx)(T.render,{item:i,field:T})},T.id))}),!!u?.length&&(0,Q.jsx)(F,{direction:"column",className:"dataviews-view-picker-grid__fields",gap:"xs",children:u.map(T=>(0,Q.jsx)(_t.Flex,{className:"dataviews-view-picker-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(_t.FlexItem,{className:"dataviews-view-picker-grid__field-name",children:T.header}),(0,Q.jsx)(_t.FlexItem,{className:"dataviews-view-picker-grid__field-value",style:{maxHeight:"none"},children:(0,Q.jsx)(T.render,{item:i,field:T})})]})},T.id))})]})]},x)}function Yc({groupName:t,groupField:e,showLabel:r=!0,children:o}){let n=(0,Gc.useInstanceId)(Yc,"dataviews-view-picker-grid-group__header");return(0,Q.jsxs)(F,{direction:"column",gap:"sm",role:"group","aria-labelledby":n,children:[(0,Q.jsx)("h3",{className:"dataviews-view-picker-grid-group__header",id:n,children:r?(0,Dn.sprintf)((0,Dn.__)("%1$s: %2$s"),e.label,t):t}),o]},t)}function yb({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,selection:a,view:l,className:s,empty:u}){let{resizeObserverRef:c,paginationInfo:p,itemListLabel:f}=(0,qc.useContext)(G),m=r.find(_=>_.id===l?.titleField),v=r.find(_=>_.id===l?.mediaField),y=r.find(_=>_.id===l?.descriptionField),b=l.fields??[],{regularFields:x,badgeFields:S}=b.reduce((_,h)=>{let O=r.find(C=>C.id===h);if(!O)return _;let w=l.layout?.badgeFields?.includes(h)?"badgeFields":"regularFields";return _[w].push(O),_},{regularFields:[],badgeFields:[]}),A=!!e?.length,V=l.layout?.previewSize,T=la(t),N="900px",D=l.groupBy?.field?r.find(_=>_.id===l.groupBy?.field):null,E=D?Dt(e,D):null,I=l.infiniteScrollEnabled&&!E,k=l?.page??1,g=l?.perPage??0,P=I?p?.totalItems:void 0;return(0,Q.jsxs)(Q.Fragment,{children:[A&&D&&E&&(0,Q.jsx)(_t.Composite,{virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":T,className:z("dataviews-view-picker-grid",s),"aria-label":f,render:({children:_,...h})=>(0,Q.jsx)(F,{direction:"column",gap:"lg",children:_,...h}),children:Array.from(E.entries()).map(([_,h])=>(0,Q.jsx)(Yc,{groupName:_,groupField:D,showLabel:l.groupBy?.showLabel!==!1,children:(0,Q.jsx)(Hl,{previewSize:V,style:{gridTemplateColumns:V&&`repeat(auto-fill, minmax(${V}px, 1fr))`},"aria-busy":n,ref:c,children:h.map(O=>{let w=(k-1)*g+e.indexOf(O)+1;return(0,Q.jsx)(Wc,{view:l,multiselect:T,selection:a,onChangeSelection:i,getItemId:o,item:O,mediaField:v,titleField:m,descriptionField:y,regularFields:x,badgeFields:S,config:{sizes:N},posinset:w,setsize:P},o(O))})})},_))}),A&&!E&&(0,Q.jsx)(_t.Composite,{render:(0,Q.jsx)(Hl,{className:z("dataviews-view-picker-grid",s),previewSize:V,"aria-busy":n,ref:c}),virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":T,"aria-label":f,children:e.map((_,h)=>{let O=I?h+1:void 0;return I||(O=(k-1)*g+h+1),(0,Q.jsx)(Wc,{view:l,multiselect:T,selection:a,onChangeSelection:i,getItemId:o,item:_,mediaField:v,titleField:m,descriptionField:y,regularFields:x,badgeFields:S,config:{sizes:N},posinset:O,setsize:P},o(_))})}),!A&&(0,Q.jsx)("div",{className:z({"dataviews-loading":n,"dataviews-no-results":!n}),children:n?(0,Q.jsx)("p",{children:(0,Q.jsx)(_t.Spinner,{})}):u}),A&&n&&(0,Q.jsx)("p",{className:"dataviews-loading-more",children:(0,Q.jsx)(_t.Spinner,{})})]})}var Uc=yb;var ua=d($(),1),bo=d(q(),1),Nt=d(j(),1);var J=d(R(),1);function Sb({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=z("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,J.jsx)("div",{className:i,children:(0,J.jsx)(n.render,{item:t,field:n})})}function $c({item:t,fields:e,id:r,view:o,titleField:n,mediaField:i,descriptionField:a,selection:l,getItemId:s,onChangeSelection:u,multiselect:c,posinset:p}){let{paginationInfo:f}=(0,Nt.useContext)(G),m=l.includes(r),[v,y]=(0,Nt.useState)(!1),{showTitle:b=!0,showMedia:x=!0,showDescription:S=!0,infiniteScrollEnabled:A}=o,V=()=>{y(!0)},T=()=>{y(!1)},N=o.fields??[],D=n&&b||i&&x||a&&S;return(0,J.jsxs)(bo.Composite.Item,{render:({children:E,...I})=>(0,J.jsx)("tr",{className:z("dataviews-view-table__row",{"is-selected":m,"is-hovered":v}),onMouseEnter:V,onMouseLeave:T,children:E,...I}),"aria-selected":m,"aria-setsize":f.totalItems||void 0,"aria-posinset":p,role:A?"article":"option",onClick:()=>{if(m)u(l.filter(E=>r!==E));else{let E=c?[...l,r]:[r];u(E)}},children:[(0,J.jsx)("td",{className:"dataviews-view-table__checkbox-column",role:"presentation",children:(0,J.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,J.jsx)(Ur,{item:t,selection:l,onChangeSelection:u,getItemId:s,titleField:n,disabled:!1,"aria-hidden":!0,tabIndex:-1})})}),D&&(0,J.jsx)("td",{role:"presentation",children:(0,J.jsx)(Zi,{item:t,titleField:b?n:void 0,mediaField:x?i:void 0,descriptionField:S?a:void 0,isItemClickable:()=>!1})}),N.map(E=>{let{width:I,maxWidth:k,minWidth:g,align:P}=o.layout?.styles?.[E]??{};return(0,J.jsx)("td",{style:{width:I,maxWidth:k,minWidth:g},role:"presentation",children:(0,J.jsx)(Sb,{fields:e,item:t,column:E,align:P})},E)})]},r)}function Cb({actions:t,data:e,fields:r,getItemId:o,isLoading:n=!1,onChangeView:i,onChangeSelection:a,selection:l,setOpenedFilter:s,view:u,className:c,empty:p}){let f=(0,Nt.useRef)(new Map),m=(0,Nt.useRef)(void 0),[v,y]=(0,Nt.useState)(),b=la(t)??!1;(0,Nt.useEffect)(()=>{m.current&&(m.current.focus(),m.current=void 0)});let x=(0,Nt.useId)();if(v){m.current=v,y(void 0);return}let S=w=>{let C=f.current.get(w.id),M=C?f.current.get(C.fallback):void 0;y(M?.node)},A=!!e?.length,V=r.find(w=>w.id===u.titleField),T=r.find(w=>w.id===u.mediaField),N=r.find(w=>w.id===u.descriptionField),D=u.groupBy?.field?r.find(w=>w.id===u.groupBy?.field):null,E=D?Dt(e,D):null,{showTitle:I=!0,showMedia:k=!0,showDescription:g=!0}=u,P=V&&I||T&&k||N&&g,_=u.fields??[],h=(w,C)=>M=>{M?f.current.set(w,{node:M,fallback:_[C>0?C-1:1]}):f.current.delete(w)},O=u.infiniteScrollEnabled&&!E;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)("table",{className:z("dataviews-view-table","dataviews-view-picker-table",c,{[`has-${u.layout?.density}-density`]:u.layout?.density&&["compact","comfortable"].includes(u.layout.density)}),"aria-busy":n,"aria-describedby":x,role:O?"feed":"listbox",children:[(0,J.jsx)("thead",{role:"presentation",children:(0,J.jsxs)("tr",{className:"dataviews-view-table__row",role:"presentation",children:[(0,J.jsx)("th",{className:"dataviews-view-table__checkbox-column",children:b&&(0,J.jsx)(On,{selection:l,onChangeSelection:a,data:e,actions:t,getItemId:o})}),P&&(0,J.jsx)("th",{children:V&&(0,J.jsx)(Go,{ref:h(V.id,0),fieldId:V.id,view:u,fields:r,onChangeView:i,onHide:S,setOpenedFilter:s,canMove:!1})}),_.map((w,C)=>{let{width:M,maxWidth:H,minWidth:ae,align:_e}=u.layout?.styles?.[w]??{};return(0,J.jsx)("th",{style:{width:M,maxWidth:H,minWidth:ae,textAlign:_e},"aria-sort":u.sort?.direction&&u.sort?.field===w?Gi[u.sort.direction]:void 0,scope:"col",children:(0,J.jsx)(Go,{ref:h(w,C),fieldId:w,view:u,fields:r,onChangeView:i,onHide:S,setOpenedFilter:s,canMove:u.layout?.enableMoving??!0})},w)})]})}),A&&D&&E?Array.from(E.entries()).map(([w,C])=>(0,J.jsxs)(bo.Composite,{virtualFocus:!0,orientation:"vertical",render:(0,J.jsx)("tbody",{role:"group"}),children:[(0,J.jsx)("tr",{className:"dataviews-view-table__group-header-row",role:"presentation",children:(0,J.jsx)("td",{colSpan:_.length+(P?1:0)+1,className:"dataviews-view-table__group-header-cell",role:"presentation",children:u.groupBy?.showLabel===!1?w:(0,ua.sprintf)((0,ua.__)("%1$s: %2$s"),D.label,w)})}),C.map((M,H)=>(0,J.jsx)($c,{item:M,fields:r,id:o(M)||H.toString(),view:u,titleField:V,mediaField:T,descriptionField:N,selection:l,getItemId:o,onChangeSelection:a,multiselect:b},o(M)))]},`group-${w}`)):(0,J.jsx)(bo.Composite,{render:(0,J.jsx)("tbody",{role:"presentation"}),virtualFocus:!0,orientation:"vertical",children:A&&e.map((w,C)=>(0,J.jsx)($c,{item:w,fields:r,id:o(w)||C.toString(),view:u,titleField:V,mediaField:T,descriptionField:N,selection:l,getItemId:o,onChangeSelection:a,multiselect:b,posinset:C+1},o(w)))})]}),(0,J.jsxs)("div",{className:z({"dataviews-loading":n,"dataviews-no-results":!A&&!n}),id:x,children:[!A&&(n?(0,J.jsx)("p",{children:(0,J.jsx)(bo.Spinner,{})}):p),A&&n&&(0,J.jsx)("p",{className:"dataviews-loading-more",children:(0,J.jsx)(bo.Spinner,{})})]})]})}var Kc=Cb;var Qc=d(q(),1),Xc=d($(),1),Zc=d(j(),1);var Jc=d(R(),1),Eb=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}];function jl(){let t=(0,Zc.useContext)(G),e=t.view,r=Eb.filter(a=>t.containerWidth>=a.breakpoint),o=e.layout?.previewSize??230,n=r.map((a,l)=>({...a,index:l})).filter(a=>a.value<=o).sort((a,l)=>l.value-a.value)[0]?.index??0,i=r.map((a,l)=>({value:l}));return(0,Jc.jsx)(Qc.RangeControl,{__next40pxDefaultSize:!0,showTooltip:!1,label:(0,Xc.__)("Preview size"),value:n,min:0,max:r.length-1,withInputField:!1,onChange:(a=0)=>{t.onChangeView({...e,layout:{...e.layout,previewSize:r[a].value}})},step:1,marks:i})}var $o=d(q(),1),Ko=d($(),1),ef=d(j(),1);var Qo=d(R(),1);function Nn(){let t=(0,ef.useContext)(G),e=t.view;return(0,Qo.jsxs)($o.__experimentalToggleGroupControl,{size:"__unstable-large",label:(0,Ko.__)("Density"),value:e.layout?.density||"balanced",onChange:r=>{t.onChangeView({...e,layout:{...e.layout,density:r}})},isBlock:!0,children:[(0,Qo.jsx)($o.__experimentalToggleGroupControlOption,{value:"comfortable",label:(0,Ko._x)("Comfortable","Density option for DataView layout")},"comfortable"),(0,Qo.jsx)($o.__experimentalToggleGroupControlOption,{value:"balanced",label:(0,Ko._x)("Balanced","Density option for DataView layout")},"balanced"),(0,Qo.jsx)($o.__experimentalToggleGroupControlOption,{value:"compact",label:(0,Ko._x)("Compact","Density option for DataView layout")},"compact")]})}var Zr=[{type:Lo,label:(0,wr.__)("Table"),component:yc,icon:_i,viewConfigOptions:Nn},{type:Yi,label:(0,wr.__)("Grid"),component:Ac,icon:Si,viewConfigOptions:jl},{type:$d,label:(0,wr.__)("List"),component:Fl,icon:(0,wr.isRTL)()?il:sl,viewConfigOptions:Nn},{type:Kd,label:(0,wr.__)("Activity"),component:Fc,icon:hl,viewConfigOptions:Nn},{type:Qd,label:(0,wr.__)("Grid"),component:Uc,icon:Si,viewConfigOptions:jl,isPicker:!0},{type:Xd,label:(0,wr.__)("Table"),component:Kc,icon:_i,viewConfigOptions:Nn,isPicker:!0}];var fn=d(j(),1);var jt=d(q(),1),Ir=d($(),1),za=d(j(),1);function Mn(...t){}function zl(t,e){if(Pb(t)){let r=Ab(e)?e():e;return t(r)}return t}function Pb(t){return typeof t=="function"}function Ab(t){return typeof t=="function"}function yt(t,e){return typeof Object.hasOwn=="function"?Object.hasOwn(t,e):Object.prototype.hasOwnProperty.call(t,e)}function Jr(...t){return(...e)=>{for(let r of t)typeof r=="function"&&r(...e)}}function Fn(t){return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function Wl(t,e){let r={...t};for(let o of e)yt(r,o)&&delete r[o];return r}function Gl(t,e){let r={};for(let o of e)yt(t,o)&&(r[o]=t[o]);return r}function Ln(t){return t}function Xe(t,e){if(!t)throw typeof e!="string"?new Error("Invariant failed"):new Error(e)}function ql(t){return Object.keys(t)}function Yl(t,...e){let r=typeof t=="function"?t(...e):t;return r==null?!1:!r}function xo(t){return t.disabled||t["aria-disabled"]===!0||t["aria-disabled"]==="true"}function Ze(t){let e={};for(let r in t)t[r]!==void 0&&(e[r]=t[r]);return e}function ee(...t){for(let e of t)if(e!==void 0)return e}var tf=d(le(),1);function rf(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function Ib(t){return!t||!(0,tf.isValidElement)(t)?!1:"ref"in t.props||"ref"in t}function of(t){return Ib(t)?{...t.props}.ref||t.ref:null}function nf(t,e){let r={...t};for(let o in e){if(!yt(e,o))continue;if(o==="className"){let i="className";r[i]=t[i]?`${t[i]} ${e[i]}`:e[i];continue}if(o==="style"){let i="style";r[i]=t[i]?{...t[i],...e[i]}:e[i];continue}let n=e[o];if(typeof n=="function"&&o.startsWith("on")){let i=t[o];if(typeof i=="function"){r[o]=(...a)=>{n(...a),i(...a)};continue}}r[o]=n}return r}var eo=Tb();function Tb(){var t;return typeof window<"u"&&!!((t=window.document)!=null&&t.createElement)}function _r(t){return t?"self"in t?t.document:t.ownerDocument||document:document}function wo(t,e=!1){var r;let{activeElement:o}=_r(t);if(!o?.nodeName)return null;if(Ul(o)&&((r=o.contentDocument)!=null&&r.body))return wo(o.contentDocument.body,e);if(e){let n=o.getAttribute("aria-activedescendant");if(n){let i=_r(o).getElementById(n);if(i)return i}}return o}function Zt(t,e){return t===e||t.contains(e)}function Ul(t){return t.tagName==="IFRAME"}function yr(t){let e=t.tagName.toLowerCase();return e==="button"?!0:e==="input"&&t.type?Ob.indexOf(t.type)!==-1:!1}var Ob=["button","color","file","image","reset","submit"];function $l(t){if(typeof t.checkVisibility=="function")return t.checkVisibility();let e=t;return e.offsetWidth>0||e.offsetHeight>0||t.getClientRects().length>0}function mt(t){try{let e=t instanceof HTMLInputElement&&t.selectionStart!==null,r=t.tagName==="TEXTAREA";return e||r||!1}catch{return!1}}function Bn(t){return t.isContentEditable||mt(t)}function Kl(t){if(mt(t))return t.value;if(t.isContentEditable){let e=_r(t).createRange();return e.selectNodeContents(t),e.toString()}return""}function Xo(t){let e=0,r=0;if(mt(t))e=t.selectionStart||0,r=t.selectionEnd||0;else if(t.isContentEditable){let o=_r(t).getSelection();if(o?.rangeCount&&o.anchorNode&&Zt(t,o.anchorNode)&&o.focusNode&&Zt(t,o.focusNode)){let n=o.getRangeAt(0),i=n.cloneRange();i.selectNodeContents(t),i.setEnd(n.startContainer,n.startOffset),e=i.toString().length,i.setEnd(n.endContainer,n.endOffset),r=i.toString().length}}return{start:e,end:r}}function Ql(t,e){let r=["dialog","menu","listbox","tree","grid"],o=t?.getAttribute("role");return o&&r.indexOf(o)!==-1?o:e}function Zo(t){if(!t)return null;let e=r=>r==="auto"||r==="scroll";if(t.clientHeight&&t.scrollHeight>t.clientHeight){let{overflowY:r}=getComputedStyle(t);if(e(r))return t}else if(t.clientWidth&&t.scrollWidth>t.clientWidth){let{overflowX:r}=getComputedStyle(t);if(e(r))return t}return Zo(t.parentElement)||document.scrollingElement||document.body}function Hn(t,...e){/text|search|password|tel|url/i.test(t.type)&&t.setSelectionRange(...e)}function Xl(t,e){let r=t.map((n,i)=>[i,n]),o=!1;return r.sort(([n,i],[a,l])=>{let s=e(i),u=e(l);return s===u||!s||!u?0:Rb(s,u)?(n>a&&(o=!0),-1):(ni):t}function Rb(t,e){return!!(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_PRECEDING)}function Zl(){return eo&&!!navigator.maxTouchPoints}function da(){return eo?/mac|iphone|ipad|ipod/i.test(navigator.platform):!1}function _o(){return eo&&da()&&/apple/i.test(navigator.vendor)}function Jl(){return eo&&/firefox\//i.test(navigator.userAgent)}function ca(t){return!!(t.currentTarget&&!Zt(t.currentTarget,t.target))}function st(t){return t.target===t.currentTarget}function af(t){let e=t.currentTarget;if(!e)return!1;let r=da();if(r&&!t.metaKey||!r&&!t.ctrlKey)return!1;let o=e.tagName.toLowerCase();return o==="a"||o==="button"&&e.type==="submit"||o==="input"&&e.type==="submit"}function sf(t){let e=t.currentTarget;if(!e)return!1;let r=e.tagName.toLowerCase();return t.altKey?r==="a"||r==="button"&&e.type==="submit"||r==="input"&&e.type==="submit":!1}function yo(t,e){let r=new FocusEvent("blur",e),o=t.dispatchEvent(r),n={...e,bubbles:!0};return t.dispatchEvent(new FocusEvent("focusout",n)),o}function lf(t,e,r){let o=new KeyboardEvent(e,r);return t.dispatchEvent(o)}function eu(t,e){let r=new MouseEvent("click",e);return t.dispatchEvent(r)}function fa(t,e){let r=e||t.currentTarget,o=t.relatedTarget;return!o||!Zt(r,o)}function to(t,e,r,o){let i=(l=>{if(o){let u=setTimeout(l,o);return()=>clearTimeout(u)}let s=requestAnimationFrame(l);return()=>cancelAnimationFrame(s)})(()=>{t.removeEventListener(e,a,!0),r()}),a=()=>{i(),r()};return t.addEventListener(e,a,{once:!0,capture:!0}),i}function Jt(t,e,r,o=window){let n=[];try{o.document.addEventListener(t,e,r);for(let a of Array.from(o.frames))n.push(Jt(t,e,r,a))}catch{}return()=>{try{o.document.removeEventListener(t,e,r)}catch{}for(let a of n)a()}}var Vb=d(le(),1),fe=d(le(),1),tu={...Vb},uf=tu.useId,V2=tu.useDeferredValue,df=tu.useInsertionEffect,Ae=eo?fe.useLayoutEffect:fe.useEffect;function kb(t){let[e]=(0,fe.useState)(t);return e}function pf(t){let e=(0,fe.useRef)(t);return Ae(()=>{e.current=t}),e}function te(t){let e=(0,fe.useRef)(()=>{throw new Error("Cannot call an event handler while rendering.")});return df?df(()=>{e.current=t}):e.current=t,(0,fe.useCallback)((...r)=>{var o;return(o=e.current)==null?void 0:o.call(e,...r)},[])}function vf(t){let[e,r]=(0,fe.useState)(null);return Ae(()=>{if(e==null||!t)return;let o=null;return t(n=>(o=n,e)),()=>{t(o)}},[e,t]),[e,r]}function Ie(...t){return(0,fe.useMemo)(()=>{if(t.some(Boolean))return e=>{for(let r of t)rf(r,e)}},t)}function Mt(t){if(uf){let o=uf();return t||o}let[e,r]=(0,fe.useState)(t);return Ae(()=>{if(t||e)return;let o=Math.random().toString(36).slice(2,8);r(`id-${o}`)},[t,e]),t||e}function gf(t,e){let r=i=>{if(typeof i=="string")return i},[o,n]=(0,fe.useState)(()=>r(e));return Ae(()=>{let i=t&&"current"in t?t.current:t;n(i?.tagName.toLowerCase()||r(e))},[t,e]),o}function hf(t,e,r){let o=kb(r),[n,i]=(0,fe.useState)(o);return(0,fe.useEffect)(()=>{let a=t&&"current"in t?t.current:t;if(!a)return;let l=()=>{let u=a.getAttribute(e);i(u??o)},s=new MutationObserver(l);return s.observe(a,{attributeFilter:[e]}),l(),()=>s.disconnect()},[t,e,o]),n}function er(t,e){let r=(0,fe.useRef)(!1);(0,fe.useEffect)(()=>{if(r.current)return t();r.current=!0},e),(0,fe.useEffect)(()=>()=>{r.current=!1},[])}function bf(t,e){let r=(0,fe.useRef)(!1);Ae(()=>{if(r.current)return t();r.current=!0},e),Ae(()=>()=>{r.current=!1},[])}function xf(){return(0,fe.useReducer)(()=>[],[])}function Ne(t){return te(typeof t=="function"?t:()=>t)}function tr(t,e,r=[]){let o=(0,fe.useCallback)(n=>(t.wrapElement&&(n=t.wrapElement(n)),e(n)),[...r,t.wrapElement]);return{...t,wrapElement:o}}function wf(t,e,r){let o=t.onLoadedMetadataCapture,n=(0,fe.useMemo)(()=>Object.assign(()=>{},{...o,[e]:r}),[o,e,r]);return[o?.[e],{onLoadedMetadataCapture:n}]}var cf=!1;function _f(){return(0,fe.useEffect)(()=>{cf||(Jt("mousemove",Nb,!0),Jt("mousedown",ma,!0),Jt("mouseup",ma,!0),Jt("keydown",ma,!0),Jt("scroll",ma,!0),cf=!0)},[]),te(()=>ru)}var ru=!1,ff=0,mf=0;function Db(t){let e=t.movementX||t.screenX-ff,r=t.movementY||t.screenY-mf;return ff=t.screenX,mf=t.screenY,e||r||!1}function Nb(t){Db(t)&&(ru=!0)}function ma(){ru=!1}var pt=d(le(),1),So=d(R(),1);function me(t){let e=pt.forwardRef((r,o)=>t({...r,ref:o}));return e.displayName=t.displayName||t.name,e}function ro(t,e){return pt.memo(t,e)}function be(t,e){let{wrapElement:r,render:o,...n}=e,i=Ie(e.ref,of(o)),a;if(pt.isValidElement(o)){let l={...o.props,ref:i};a=pt.cloneElement(o,nf(n,l))}else o?a=o(n):a=(0,So.jsx)(t,{...n});return r?r(a):a}function xe(t){let e=(r={})=>t(r);return e.displayName=t.name,e}function St(t=[],e=[]){let r=pt.createContext(void 0),o=pt.createContext(void 0),n=()=>pt.useContext(r),i=(u=!1)=>{let c=pt.useContext(o),p=n();return u?c:c||p},a=()=>{let u=pt.useContext(o),c=n();if(!(u&&u===c))return c},l=u=>t.reduceRight((c,p)=>(0,So.jsx)(p,{...u,children:c}),(0,So.jsx)(r.Provider,{...u}));return{context:r,scopedContext:o,useContext:n,useScopedContext:i,useProviderContext:a,ContextProvider:l,ScopedContextProvider:u=>(0,So.jsx)(l,{...u,children:e.reduceRight((c,p)=>(0,So.jsx)(p,{...u,children:c}),(0,So.jsx)(o.Provider,{...u}))})}}var jn=St(),yf=jn.useContext,L2=jn.useScopedContext,B2=jn.useProviderContext,Sf=jn.ContextProvider,Cf=jn.ScopedContextProvider;var ou=d(le(),1),zn=St([Sf],[Cf]),pa=zn.useContext,W2=zn.useScopedContext,Ef=zn.useProviderContext,Jo=zn.ContextProvider,va=zn.ScopedContextProvider,Pf=(0,ou.createContext)(void 0),Af=(0,ou.createContext)(void 0);function If(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function rr(t,e){return e&&t.item(e)||null}function Tf(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function Of(t,e=!1){if(mt(t))t.setSelectionRange(e?t.value.length:0,t.value.length);else if(t.isContentEditable){let r=_r(t).getSelection();r?.selectAllChildren(t),e&&r?.collapseToEnd()}}var nu=Symbol("FOCUS_SILENTLY");function Rf(t){t[nu]=!0,t.focus({preventScroll:!0})}function Vf(t){let e=t[nu];return delete t[nu],e}function Co(t,e,r){if(!e||e===r)return!1;let o=t.item(e.id);return!(!o||r&&o.element===r)}var ga=d(le(),1),Mb="div",iu=xe(function({store:e,shouldRegisterItem:r=!0,getItem:o=Ln,element:n,...i}){let a=yf();e=e||a;let l=Mt(i.id),s=(0,ga.useRef)(n);return(0,ga.useEffect)(()=>{let u=s.current;if(!l||!u||!r)return;let c=o({id:l,element:u});return e?.renderItem(c)},[l,r,o,e]),i={...i,ref:Ie(s,i.ref)},Ze(i)}),X2=me(function(e){let r=iu(e);return be(Mb,r)});var kf=d(le(),1),Df=(0,kf.createContext)(!0);var Nf="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function Wn(t){return!(!t.matches(Nf)||!$l(t)||t.closest("[inert]"))}function Mf(t){for(;t&&!Wn(t);)t=t.closest(Nf);return t||null}function Ft(t){let e=wo(t);if(!e)return!1;if(e===t)return!0;let r=e.getAttribute("aria-activedescendant");return r?r===t.id:!1}function au(t){let e=wo(t);if(!e)return!1;if(Zt(t,e))return!0;let r=e.getAttribute("aria-activedescendant");return!r||!("id"in t)?!1:r===t.id?!0:!!t.querySelector(`#${CSS.escape(r)}`)}function Ff(t){!au(t)&&Wn(t)&&t.focus()}function Lf(t,e){"scrollIntoView"in t?(t.focus({preventScroll:!0}),t.scrollIntoView({block:"nearest",inline:"nearest",...e})):t.focus()}var Rt=d(le(),1),Fb="div",Bf=_o(),Lb=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"],Bb=Symbol("safariFocusAncestor");function Hf(t,e){t&&(t[Bb]=e)}function Hb(t){let{tagName:e,readOnly:r,type:o}=t;return e==="TEXTAREA"&&!r||e==="SELECT"&&!r?!0:e==="INPUT"&&!r?Lb.includes(o):!!(t.isContentEditable||t.getAttribute("role")==="combobox"&&t.dataset.name)}function jb(t){return"labels"in t?t.labels:null}function jf(t){return t.tagName.toLowerCase()==="input"&&t.type?t.type==="radio"||t.type==="checkbox":!1}function zb(t){return t?t==="button"||t==="summary"||t==="input"||t==="select"||t==="textarea"||t==="a":!0}function Wb(t){return t?t==="button"||t==="input"||t==="select"||t==="textarea":!0}function Gb(t,e,r,o,n){return t?e?r&&!o?-1:void 0:r?n:n||0:n}function su(t,e){return te(r=>{t?.(r),!r.defaultPrevented&&e&&(r.stopPropagation(),r.preventDefault())})}var zf=!1,lu=!0;function qb(t){let e=t.target;e&&"hasAttribute"in e&&(e.hasAttribute("data-focus-visible")||(lu=!1))}function Yb(t){t.metaKey||t.ctrlKey||t.altKey||(lu=!0)}var Gn=xe(function({focusable:e=!0,accessibleWhenDisabled:r,autoFocus:o,onFocusVisible:n,...i}){let a=(0,Rt.useRef)(null);(0,Rt.useEffect)(()=>{e&&(zf||(Jt("mousedown",qb,!0),Jt("keydown",Yb,!0),zf=!0))},[e]),Bf&&(0,Rt.useEffect)(()=>{if(!e)return;let h=a.current;if(!h||!jf(h))return;let O=jb(h);if(!O)return;let w=()=>queueMicrotask(()=>h.focus());for(let C of O)C.addEventListener("mouseup",w);return()=>{for(let C of O)C.removeEventListener("mouseup",w)}},[e]);let l=e&&xo(i),s=!!l&&!r,[u,c]=(0,Rt.useState)(!1);(0,Rt.useEffect)(()=>{e&&s&&u&&c(!1)},[e,s,u]),(0,Rt.useEffect)(()=>{if(!e||!u)return;let h=a.current;if(!h||typeof IntersectionObserver>"u")return;let O=new IntersectionObserver(()=>{Wn(h)||c(!1)});return O.observe(h),()=>O.disconnect()},[e,u]);let p=su(i.onKeyPressCapture,l),f=su(i.onMouseDownCapture,l),m=su(i.onClickCapture,l),v=i.onMouseDown,y=te(h=>{if(v?.(h),h.defaultPrevented||!e)return;let O=h.currentTarget;if(!Bf||ca(h)||!yr(O)&&!jf(O))return;let w=!1,C=()=>{w=!0},M={capture:!0,once:!0};O.addEventListener("focusin",C,M);let H=Mf(O.parentElement);Hf(H,!0),to(O,"mouseup",()=>{O.removeEventListener("focusin",C,!0),Hf(H,!1),!w&&Ff(O)})}),b=(h,O)=>{if(O&&(h.currentTarget=O),!e)return;let w=h.currentTarget;w&&Ft(w)&&(n?.(h),!h.defaultPrevented&&(w.dataset.focusVisible="true",c(!0)))},x=i.onKeyDownCapture,S=te(h=>{if(x?.(h),h.defaultPrevented||!e||u||h.metaKey||h.altKey||h.ctrlKey||!st(h))return;let O=h.currentTarget;to(O,"focusout",()=>b(h,O))}),A=i.onFocusCapture,V=te(h=>{if(A?.(h),h.defaultPrevented||!e)return;if(!st(h)){c(!1);return}let O=h.currentTarget,w=()=>b(h,O);lu||Hb(h.target)?to(h.target,"focusout",w):c(!1)}),T=i.onBlur,N=te(h=>{T?.(h),e&&fa(h)&&(h.currentTarget.removeAttribute("data-focus-visible"),c(!1))}),D=(0,Rt.useContext)(Df),E=te(h=>{e&&o&&h&&D&&queueMicrotask(()=>{Ft(h)||Wn(h)&&h.focus()})}),I=gf(a),k=e&&zb(I),g=e&&Wb(I),P=i.style,_=(0,Rt.useMemo)(()=>s?{pointerEvents:"none",...P}:P,[s,P]);return i={"data-focus-visible":e&&u||void 0,"data-autofocus":o||void 0,"aria-disabled":l||void 0,...i,ref:Ie(a,E,i.ref),style:_,tabIndex:Gb(e,s,k,g,i.tabIndex),disabled:g&&s?!0:void 0,contentEditable:l?void 0:i.contentEditable,onKeyPressCapture:p,onClickCapture:m,onMouseDownCapture:f,onMouseDown:y,onKeyDownCapture:S,onFocusCapture:V,onBlur:N},Ze(i)}),mE=me(function(e){let r=Gn(e);return be(Fb,r)});var oo=d(le(),1),Ub="button";function Wf(t){if(!t.isTrusted)return!1;let e=t.currentTarget;return t.key==="Enter"?yr(e)||e.tagName==="SUMMARY"||e.tagName==="A":t.key===" "?yr(e)||e.tagName==="SUMMARY"||e.tagName==="INPUT"||e.tagName==="SELECT":!1}var $b=Symbol("command"),uu=xe(function({clickOnEnter:e=!0,clickOnSpace:r=!0,...o}){let n=(0,oo.useRef)(null),[i,a]=(0,oo.useState)(!1);(0,oo.useEffect)(()=>{n.current&&a(yr(n.current))},[]);let[l,s]=(0,oo.useState)(!1),u=(0,oo.useRef)(!1),c=xo(o),[p,f]=wf(o,$b,!0),m=o.onKeyDown,v=te(x=>{m?.(x);let S=x.currentTarget;if(x.defaultPrevented||p||c||!st(x)||mt(S)||S.isContentEditable)return;let A=e&&x.key==="Enter",V=r&&x.key===" ",T=x.key==="Enter"&&!e,N=x.key===" "&&!r;if(T||N){x.preventDefault();return}if(A||V){let D=Wf(x);if(A){if(!D){x.preventDefault();let{view:E,...I}=x,k=()=>eu(S,I);Jl()?to(S,"keyup",k):queueMicrotask(k)}}else V&&(u.current=!0,D||(x.preventDefault(),s(!0)))}}),y=o.onKeyUp,b=te(x=>{if(y?.(x),x.defaultPrevented||p||c||x.metaKey)return;let S=r&&x.key===" ";if(u.current&&S&&(u.current=!1,!Wf(x))){x.preventDefault(),s(!1);let A=x.currentTarget,{view:V,...T}=x;queueMicrotask(()=>eu(A,T))}});return o={"data-active":l||void 0,type:i?"button":void 0,...f,...o,ref:Ie(n,o.ref),onKeyDown:v,onKeyUp:b},o=Gn(o),o}),yE=me(function(e){let r=uu(e);return be(Ub,r)});function Eo(t,e){let r=t.__unstableInternals;return Xe(r,"Invalid store"),r[e]}function vt(t,...e){let r=t,o=r,n=Symbol(),i=Mn,a=new Set,l=new Set,s=new Set,u=new Set,c=new Set,p=new WeakMap,f=new WeakMap,m=E=>(s.add(E),()=>s.delete(E)),v=()=>{let E=a.size,I=Symbol();a.add(I);let k=()=>{a.delete(I),!a.size&&i()};if(E)return k;let g=ql(r).map(h=>Jr(...e.map(O=>{var w;let C=(w=O?.getState)==null?void 0:w.call(O);if(C&&yt(C,h))return $e(O,[h],M=>{N(h,M[h],!0)})}))),P=[];for(let h of s)P.push(h());let _=e.map(en);return i=Jr(...g,...P,..._),k},y=(E,I,k=u)=>(k.add(I),f.set(I,E),()=>{var g;(g=p.get(I))==null||g(),p.delete(I),f.delete(I),k.delete(I)}),b=(E,I)=>y(E,I),x=(E,I)=>(p.set(I,I(r,r)),y(E,I)),S=(E,I)=>(p.set(I,I(r,o)),y(E,I,c)),A=E=>vt(Gl(r,E),D),V=E=>vt(Wl(r,E),D),T=()=>r,N=(E,I,k=!1)=>{var g;if(!yt(r,E))return;let P=zl(I,r[E]);if(P===r[E])return;if(!k)for(let w of e)(g=w?.setState)==null||g.call(w,E,P);let _=r;r={...r,[E]:P};let h=Symbol();n=h,l.add(E);let O=(w,C,M)=>{var H;let ae=f.get(w),_e=ke=>M?M.has(ke):ke===E;(!ae||ae.some(_e))&&((H=p.get(w))==null||H(),p.set(w,w(r,C)))};for(let w of u)O(w,_);queueMicrotask(()=>{if(n!==h)return;let w=r;for(let C of c)O(C,o,l);o=w,l.clear()})},D={getState:T,setState:N,__unstableInternals:{setup:m,init:v,subscribe:b,sync:x,batch:S,pick:A,omit:V}};return D}function Ue(t,...e){if(t)return Eo(t,"setup")(...e)}function en(t,...e){if(t)return Eo(t,"init")(...e)}function tn(t,...e){if(t)return Eo(t,"subscribe")(...e)}function $e(t,...e){if(t)return Eo(t,"sync")(...e)}function no(t,...e){if(t)return Eo(t,"batch")(...e)}function qn(t,...e){if(t)return Eo(t,"omit")(...e)}function du(t,...e){if(t)return Eo(t,"pick")(...e)}function Po(...t){var e;let r={};for(let n of t){let i=(e=n?.getState)==null?void 0:e.call(n);i&&Object.assign(r,i)}let o=vt(r,...t);return Object.assign({},...t,o)}var or=d(le(),1),Gf=d(Bd(),1),{useSyncExternalStore:qf}=Gf.default,Yf=()=>()=>{};function rn(t,e=Ln){let r=or.useCallback(n=>t?tn(t,null,n):Yf(),[t]),o=()=>{let n=typeof e=="string"?e:null,i=typeof e=="function"?e:null,a=t?.getState();if(i)return i(a);if(a&&n&&yt(a,n))return a[n]};return qf(r,o,o)}function ba(t,e){let r=or.useRef({}),o=or.useCallback(i=>t?tn(t,null,i):Yf(),[t]),n=()=>{let i=t?.getState(),a=!1,l=r.current;for(let s in e){let u=e[s];if(typeof u=="function"){let c=u(i);c!==l[s]&&(l[s]=c,a=!0)}if(typeof u=="string"){if(!i||!yt(i,u))continue;let c=i[u];c!==l[s]&&(l[s]=c,a=!0)}}return a&&(r.current={...l}),r.current};return qf(o,n,n)}function Te(t,e,r,o){let n=yt(e,r)?e[r]:void 0,i=o?e[o]:void 0,a=pf({value:n,setValue:i});Ae(()=>$e(t,[r],(l,s)=>{let{value:u,setValue:c}=a.current;c&&l[r]!==s[r]&&l[r]!==u&&c(l[r])}),[t,r]),Ae(()=>{if(n!==void 0)return t.setState(r,n),no(t,[r],()=>{n!==void 0&&t.setState(r,n)})})}function on(t,e){let[r,o]=or.useState(()=>t(e));Ae(()=>en(r),[r]);let n=or.useCallback(l=>rn(r,l),[r]),i=or.useMemo(()=>({...r,useState:n}),[r,n]),a=te(()=>{o(l=>t({...e,...l.getState()}))});return[i,a]}var Sr=d(le(),1),$f=d(R(),1),Kb="button";function Qb(t){return Bn(t)?!0:t.tagName==="INPUT"&&!yr(t)}function Xb(t,e=!1){let r=t.clientHeight,{top:o}=t.getBoundingClientRect(),n=Math.max(r*.875,r-40)*1.5,i=e?r-n+o:n+o;return t.tagName==="HTML"?i+t.scrollTop:i}function Zb(t,e=!1){let{top:r}=t.getBoundingClientRect();return e?r+t.clientHeight:r}function Uf(t,e,r,o=!1){var n;if(!e||!r)return;let{renderedItems:i}=e.getState(),a=Zo(t);if(!a)return;let l=Xb(a,o),s,u;for(let c=0;c=0){u!==void 0&&uH.rowId===b);return m.ariaPosInSet+M.findIndex(H=>H.id===p)},isTabbable(C){if(!C?.renderedItems.length)return!0;if(C.virtualFocus)return!1;if(i)return!0;if(C.activeId===null)return!1;let M=e?.item(C.activeId);return M?.disabled||!M?.element?!0:C.activeId===p}}),N=(0,Sr.useCallback)(C=>{var M;let H={...C,id:p||C.id,rowId:b,disabled:!!y,children:(M=C.element)==null?void 0:M.textContent};return a?a(H):H},[p,b,y,a]),D=u.onFocus,E=(0,Sr.useRef)(!1),I=te(C=>{if(D?.(C),C.defaultPrevented||ca(C)||!p||!e||Jb(C,e))return;let{virtualFocus:M,baseElement:H}=e.getState();if(e.setActiveId(p),Bn(C.currentTarget)&&Of(C.currentTarget),!M||!st(C)||Qb(C.currentTarget)||!H?.isConnected)return;_o()&&C.currentTarget.hasAttribute("data-autofocus")&&C.currentTarget.scrollIntoView({block:"nearest",inline:"nearest"}),E.current=!0,C.relatedTarget===H||Co(e,C.relatedTarget)?Rf(H):H.focus()}),k=u.onBlurCapture,g=te(C=>{if(k?.(C),C.defaultPrevented)return;let M=e?.getState();M?.virtualFocus&&E.current&&(E.current=!1,C.preventDefault(),C.stopPropagation())}),P=u.onKeyDown,_=Ne(o),h=Ne(n),O=te(C=>{if(P?.(C),C.defaultPrevented||!st(C)||!e)return;let{currentTarget:M}=C,H=e.getState(),ae=e.item(p),_e=!!ae?.rowId,ke=H.orientation!=="horizontal",He=H.orientation!=="vertical",rt=()=>!!(_e||He||!H.baseElement||!mt(H.baseElement)),mr={ArrowUp:(_e||ke)&&e.up,ArrowRight:(_e||He)&&e.next,ArrowDown:(_e||ke)&&e.down,ArrowLeft:(_e||He)&&e.previous,Home:()=>{if(rt())return!_e||C.ctrlKey?e?.first():e?.previous(-1)},End:()=>{if(rt())return!_e||C.ctrlKey?e?.last():e?.next(-1)},PageUp:()=>Uf(M,e,e?.up,!0),PageDown:()=>Uf(M,e,e?.down)}[C.key];if(mr){if(Bn(M)){let Z=Xo(M),ge=He&&C.key==="ArrowLeft",pr=He&&C.key==="ArrowRight",vr=ke&&C.key==="ArrowUp",co=ke&&C.key==="ArrowDown";if(pr||co){let{length:fo}=Kl(M);if(Z.end!==fo)return}else if((ge||vr)&&Z.start!==0)return}let Y=mr();if(_(C)||Y!==void 0){if(!h(C))return;C.preventDefault(),e.move(Y)}}}),w=(0,Sr.useMemo)(()=>({id:p,baseElement:x}),[p,x]);return u=tr(u,C=>(0,$f.jsx)(Pf.Provider,{value:w,children:C}),[w]),u={id:p,"data-active-item":S||void 0,...u,ref:Ie(f,u.ref),tabIndex:T?u.tabIndex:-1,onFocus:I,onBlurCapture:g,onKeyDown:O},u=uu(u),u=iu({store:e,...u,getItem:N,shouldRegisterItem:p?u.shouldRegisterItem:!1}),Ze({...u,"aria-setsize":A,"aria-posinset":V})}),WE=ro(me(function(e){let r=cu(e);return be(Kb,r)}));function fu(t){return Array.isArray(t)?t:typeof t<"u"?[t]:[]}function Yn(t){let e=[];for(let r of t)e.push(...r);return e}function nn(t){return t.slice().reverse()}var nr=d(le(),1),Qf=d(R(),1),ex="div";function tx(t){return t.some(e=>!!e.rowId)}function rx(t){let e=t.target;return e&&!mt(e)?!1:t.key.length===1&&!t.ctrlKey&&!t.metaKey}function ox(t){return t.key==="Shift"||t.key==="Control"||t.key==="Alt"||t.key==="Meta"}function Kf(t,e,r){return te(o=>{var n;if(e?.(o),o.defaultPrevented||o.isPropagationStopped()||!st(o)||ox(o)||rx(o))return;let i=t.getState(),a=(n=rr(t,i.activeId))==null?void 0:n.element;if(!a)return;let{view:l,...s}=o,u=r?.current;a!==u&&a.focus(),lf(a,o.type,s)||o.preventDefault(),o.currentTarget.contains(a)&&o.stopPropagation()})}function nx(t){return If(Yn(nn(Tf(t))))}function ix(t){let[e,r]=(0,nr.useState)(!1),o=(0,nr.useCallback)(()=>r(!0),[]),n=t.useState(i=>rr(t,i.activeId));return(0,nr.useEffect)(()=>{let i=n?.element;e&&i&&(r(!1),i.focus({preventScroll:!0}))},[n,e]),o}var mu=xe(function({store:e,composite:r=!0,focusOnMove:o=r,moveOnKeyPress:n=!0,...i}){let a=Ef();e=e||a,Xe(e,!1);let l=(0,nr.useRef)(null),s=(0,nr.useRef)(null),u=ix(e),c=e.useState("moves"),[,p]=vf(r?e.setBaseElement:null);(0,nr.useEffect)(()=>{var g;if(!e||!c||!r||!o)return;let{activeId:P}=e.getState(),_=(g=rr(e,P))==null?void 0:g.element;_&&Lf(_)},[e,c,r,o]),Ae(()=>{if(!e||!c||!r)return;let{baseElement:g,activeId:P}=e.getState();if(!(P===null)||!g)return;let h=s.current;s.current=null,h&&yo(h,{relatedTarget:g}),Ft(g)||g.focus()},[e,c,r]);let f=e.useState("activeId"),m=e.useState("virtualFocus");Ae(()=>{var g;if(!e||!r||!m)return;let P=s.current;if(s.current=null,!P)return;let h=((g=rr(e,f))==null?void 0:g.element)||wo(P);h!==P&&yo(P,{relatedTarget:h})},[e,f,m,r]);let v=Kf(e,i.onKeyDownCapture,s),y=Kf(e,i.onKeyUpCapture,s),b=i.onFocusCapture,x=te(g=>{if(b?.(g),g.defaultPrevented||!e)return;let{virtualFocus:P}=e.getState();if(!P)return;let _=g.relatedTarget,h=Vf(g.currentTarget);st(g)&&h&&(g.stopPropagation(),s.current=_)}),S=i.onFocus,A=te(g=>{if(S?.(g),g.defaultPrevented||!r||!e)return;let{relatedTarget:P}=g,{virtualFocus:_}=e.getState();_?st(g)&&!Co(e,P)&&queueMicrotask(u):st(g)&&e.setActiveId(null)}),V=i.onBlurCapture,T=te(g=>{var P;if(V?.(g),g.defaultPrevented||!e)return;let{virtualFocus:_,activeId:h}=e.getState();if(!_)return;let O=(P=rr(e,h))==null?void 0:P.element,w=g.relatedTarget,C=Co(e,w),M=s.current;s.current=null,st(g)&&C?(w===O?M&&M!==w&&yo(M,g):O?yo(O,g):M&&yo(M,g),g.stopPropagation()):!Co(e,g.target)&&O&&yo(O,g)}),N=i.onKeyDown,D=Ne(n),E=te(g=>{var P;if(N?.(g),g.nativeEvent.isComposing||g.defaultPrevented||!e||!st(g))return;let{orientation:_,renderedItems:h,activeId:O}=e.getState(),w=rr(e,O);if((P=w?.element)!=null&&P.isConnected)return;let C=_!=="horizontal",M=_!=="vertical",H=tx(h);if((g.key==="ArrowLeft"||g.key==="ArrowRight"||g.key==="Home"||g.key==="End")&&mt(g.currentTarget))return;let He={ArrowUp:(H||C)&&(()=>{if(H){let rt=nx(h);return rt?.id}return e?.last()}),ArrowRight:(H||M)&&e.first,ArrowDown:(H||C)&&e.first,ArrowLeft:(H||M)&&e.last,Home:e.first,End:e.last,PageUp:e.first,PageDown:e.last}[g.key];if(He){let rt=He();if(rt!==void 0){if(!D(g))return;g.preventDefault(),e.move(rt)}}});i=tr(i,g=>(0,Qf.jsx)(Jo,{value:e,children:g}),[e]),i={"aria-activedescendant":e.useState(g=>{var P;if(e&&r&&g.virtualFocus)return(P=rr(e,g.activeId))==null?void 0:P.id}),...i,ref:Ie(l,p,i.ref),onKeyDownCapture:v,onKeyUpCapture:y,onFocusCapture:x,onFocus:A,onBlurCapture:T,onKeyDown:E};let k=e.useState(g=>r&&(g.virtualFocus||g.activeId===null));return i=Gn({focusable:k,...i}),i}),iP=me(function(e){let r=mu(e);return be(ex,r)});var Un=St(),lP=Un.useContext,uP=Un.useScopedContext,pu=Un.useProviderContext,Xf=Un.ContextProvider,Zf=Un.ScopedContextProvider;var vu=d(le(),1),$n=St([Xf],[Zf]),mP=$n.useContext,pP=$n.useScopedContext,vP=$n.useProviderContext,Jf=$n.ContextProvider,xa=$n.ScopedContextProvider,gP=(0,vu.createContext)(void 0),hP=(0,vu.createContext)(void 0);var an=d(le(),1),rm=d(Nd(),1),gu=d(R(),1),ax="div";function em(t,e){let r=setTimeout(e,t);return()=>clearTimeout(r)}function sx(t){let e=requestAnimationFrame(()=>{e=requestAnimationFrame(t)});return()=>cancelAnimationFrame(e)}function tm(...t){return t.join(", ").split(", ").reduce((e,r)=>{let o=r.endsWith("ms")?1:1e3,n=Number.parseFloat(r||"0s")*o;return n>e?n:e},0)}function hu(t,e,r){return!r&&e!==!1&&(!t||!!e)}var lx=xe(function({store:e,alwaysVisible:r,...o}){let n=pu();e=e||n,Xe(e,!1);let i=(0,an.useRef)(null),a=Mt(o.id),[l,s]=(0,an.useState)(null),u=e.useState("open"),c=e.useState("mounted"),p=e.useState("animated"),f=e.useState("contentElement"),m=rn(e.disclosure,"contentElement");Ae(()=>{i.current&&e?.setContentElement(i.current)},[e]),Ae(()=>{let x;return e?.setState("animated",S=>(x=S,!0)),()=>{x!==void 0&&e?.setState("animated",x)}},[e]),Ae(()=>{if(p){if(!f?.isConnected){s(null);return}return sx(()=>{s(u?"enter":c?"leave":null)})}},[p,f,u,c]),Ae(()=>{if(!e||!p||!l||!f)return;let x=()=>e?.setState("animating",!1),S=()=>(0,rm.flushSync)(x);if(l==="leave"&&u||l==="enter"&&!u)return;if(typeof p=="number")return em(p,S);let{transitionDuration:A,animationDuration:V,transitionDelay:T,animationDelay:N}=getComputedStyle(f),{transitionDuration:D="0",animationDuration:E="0",transitionDelay:I="0",animationDelay:k="0"}=m?getComputedStyle(m):{},g=tm(T,N,I,k),P=tm(A,V,D,E),_=g+P;if(!_){l==="enter"&&e.setState("animated",!1),x();return}let h=1e3/60,O=Math.max(_-h,0);return em(O,S)},[e,p,f,m,u,l]),o=tr(o,x=>(0,gu.jsx)(xa,{value:e,children:x}),[e]);let v=hu(c,o.hidden,r),y=o.style,b=(0,an.useMemo)(()=>v?{...y,display:"none"}:y,[v,y]);return o={id:a,"data-open":u||void 0,"data-enter":l==="enter"||void 0,"data-leave":l==="leave"||void 0,hidden:v,...o,ref:Ie(a?e.setContentElement:null,i,o.ref),style:b},Ze(o)}),ux=me(function(e){let r=lx(e);return be(ax,r)}),EP=me(function({unmountOnHide:e,...r}){let o=pu(),n=r.store||o;return rn(n,a=>!e||a?.mounted)===!1?null:(0,gu.jsx)(ux,{...r})});function om(t={}){let e=Po(t.store,qn(t.disclosure,["contentElement","disclosureElement"]));let r=e?.getState(),o=ee(t.open,r?.open,t.defaultOpen,!1),n=ee(t.animated,r?.animated,!1),i={open:o,animated:n,animating:!!n&&o,mounted:o,contentElement:ee(r?.contentElement,null),disclosureElement:ee(r?.disclosureElement,null)},a=vt(i,e);return Ue(a,()=>$e(a,["animated","animating"],l=>{l.animated||a.setState("animating",!1)})),Ue(a,()=>tn(a,["open"],()=>{a.getState().animated&&a.setState("animating",!0)})),Ue(a,()=>$e(a,["open","animating"],l=>{a.setState("mounted",l.open||l.animating)})),{...a,disclosure:t.disclosure,setOpen:l=>a.setState("open",l),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",l=>!l),stopAnimation:()=>a.setState("animating",!1),setContentElement:l=>a.setState("contentElement",l),setDisclosureElement:l=>a.setState("disclosureElement",l)}}function nm(t,e,r){return er(e,[r.store,r.disclosure]),Te(t,r,"open","setOpen"),Te(t,r,"mounted","setMounted"),Te(t,r,"animated"),Object.assign(t,{disclosure:r.disclosure})}var Kn=St([Jf],[xa]),NP=Kn.useContext,MP=Kn.useScopedContext,im=Kn.useProviderContext,am=Kn.ContextProvider,sm=Kn.ScopedContextProvider;function dx(t){var e;let r=t.find(i=>!!i.element),o=[...t].reverse().find(i=>!!i.element),n=(e=r?.element)==null?void 0:e.parentElement;for(;n&&o?.element;){if(o&&n.contains(o.element))return n;n=n.parentElement}return _r(n).body}function cx(t){return t?.__unstablePrivateStore}function lm(t={}){var e;t.store;let r=(e=t.store)==null?void 0:e.getState(),o=ee(t.items,r?.items,t.defaultItems,[]),n=new Map(o.map(f=>[f.id,f])),i={items:o,renderedItems:ee(r?.renderedItems,[])},a=cx(t.store),l=vt({items:o,renderedItems:i.renderedItems},a),s=vt(i,t.store),u=f=>{let m=Xl(f,v=>v.element);l.setState("renderedItems",m),s.setState("renderedItems",m)};Ue(s,()=>en(l)),Ue(l,()=>no(l,["items"],f=>{s.setState("items",f.items)})),Ue(l,()=>no(l,["renderedItems"],f=>{let m=!0,v=requestAnimationFrame(()=>{let{renderedItems:S}=s.getState();f.renderedItems!==S&&u(f.renderedItems)});if(typeof IntersectionObserver!="function")return()=>cancelAnimationFrame(v);let y=()=>{if(m){m=!1;return}cancelAnimationFrame(v),v=requestAnimationFrame(()=>u(f.renderedItems))},b=dx(f.renderedItems),x=new IntersectionObserver(y,{root:b});for(let S of f.renderedItems)S.element&&x.observe(S.element);return()=>{cancelAnimationFrame(v),x.disconnect()}}));let c=(f,m,v=!1)=>{let y;return m(x=>{let S=x.findIndex(({id:V})=>V===f.id),A=x.slice();if(S!==-1){y=x[S];let V={...y,...f};A[S]=V,n.set(f.id,V)}else A.push(f),n.set(f.id,f);return A}),()=>{m(x=>{if(!y)return v&&n.delete(f.id),x.filter(({id:V})=>V!==f.id);let S=x.findIndex(({id:V})=>V===f.id);if(S===-1)return x;let A=x.slice();return A[S]=y,n.set(f.id,y),A})}},p=f=>c(f,m=>l.setState("items",m),!0);return{...s,registerItem:p,renderItem:f=>Jr(p(f),c(f,m=>l.setState("renderedItems",m))),item:f=>{if(!f)return null;let m=n.get(f);if(!m){let{items:v}=l.getState();m=v.find(y=>y.id===f),m&&n.set(f,m)}return m||null},__unstablePrivateStore:l}}function um(t,e,r){return er(e,[r.store]),Te(t,r,"items","setItems"),t}var fx={id:null};function Cr(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function mx(t,e){return t.filter(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function dm(t,e){return t.filter(r=>r.rowId===e)}function px(t,e,r=!1){let o=t.findIndex(n=>n.id===e);return[...t.slice(o+1),...r?[fx]:[],...t.slice(0,o)]}function cm(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function fm(t){let e=0;for(let{length:r}of t)r>e&&(e=r);return e}function vx(t){return{id:"__EMPTY_ITEM__",disabled:!0,rowId:t}}function gx(t,e,r){let o=fm(t);for(let n of t)for(let i=0;i$e(a,["renderedItems","activeId"],s=>{a.setState("activeId",u=>{var c;return u!==void 0?u:(c=Cr(s.renderedItems))==null?void 0:c.id})}));let l=(s="next",u={})=>{var c,p;let f=a.getState(),{skip:m=0,activeId:v=f.activeId,focusShift:y=f.focusShift,focusLoop:b=f.focusLoop,focusWrap:x=f.focusWrap,includesBaseElement:S=f.includesBaseElement,renderedItems:A=f.renderedItems,rtl:V=f.rtl}=u,T=s==="up"||s==="down",N=s==="next"||s==="down",D=N?V&&!T:!V||T,E=y&&!m,I=T?Yn(gx(cm(A),v,E)):A;if(I=D?nn(I):I,I=T?hx(I):I,v==null)return(c=Cr(I))==null?void 0:c.id;let k=I.find(H=>H.id===v);if(!k)return(p=Cr(I))==null?void 0:p.id;let g=I.some(H=>H.rowId),P=I.indexOf(k),_=I.slice(P+1),h=dm(_,k.rowId);if(m){let H=mx(h,v),ae=H.slice(m)[0]||H[H.length-1];return ae?.id}let O=b&&(T?b!=="horizontal":b!=="vertical"),w=g&&x&&(T?x!=="horizontal":x!=="vertical"),C=N?(!g||T)&&O&&S:T?S:!1;if(O){let H=w&&!C?I:dm(I,k.rowId),ae=px(H,v,C),_e=Cr(ae,v);return _e?.id}if(w){let H=Cr(C?h:_,v);return C?H?.id||null:H?.id}let M=Cr(h,v);return!M&&C?null:M?.id};return{...o,...a,setBaseElement:s=>a.setState("baseElement",s),setActiveId:s=>a.setState("activeId",s),move:s=>{s!==void 0&&(a.setState("activeId",s),a.setState("moves",u=>u+1))},first:()=>{var s;return(s=Cr(a.getState().renderedItems))==null?void 0:s.id},last:()=>{var s;return(s=Cr(nn(a.getState().renderedItems)))==null?void 0:s.id},next:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("next",s)),previous:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("previous",s)),down:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("down",s)),up:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("up",s))}}function pm(t){return{id:Mt(t.id),...t}}function vm(t,e,r){return t=um(t,e,r),Te(t,r,"activeId","setActiveId"),Te(t,r,"includesBaseElement"),Te(t,r,"virtualFocus"),Te(t,r,"orientation"),Te(t,r,"rtl"),Te(t,r,"focusLoop"),Te(t,r,"focusWrap"),Te(t,r,"focusShift"),t}var wa=d(le(),1),_a=(0,wa.createContext)(void 0),Qn=St([am,Jo],[sm,va]),bu=Qn.useContext,sn=Qn.useScopedContext,ya=Qn.useProviderContext,gm=Qn.ContextProvider,hm=Qn.ScopedContextProvider,Sa=(0,wa.createContext)(void 0),bm=(0,wa.createContext)(!1);function xm(t={}){return om(t)}function wm(t,e,r){return nm(t,e,r)}function _m({popover:t,...e}={}){let r=Po(e.store,qn(t,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"]));let o=r?.getState(),n=xm({...e,store:r}),i=ee(e.placement,o?.placement,"bottom"),a={...n.getState(),placement:i,currentPlacement:i,anchorElement:ee(o?.anchorElement,null),popoverElement:ee(o?.popoverElement,null),arrowElement:ee(o?.arrowElement,null),rendered:Symbol("rendered")},l=vt(a,n,r);return{...n,...l,setAnchorElement:s=>l.setState("anchorElement",s),setPopoverElement:s=>l.setState("popoverElement",s),setArrowElement:s=>l.setState("arrowElement",s),render:()=>l.setState("rendered",Symbol("rendered"))}}function ym(t,e,r){return er(e,[r.popover]),Te(t,r,"placement"),wm(t,e,r)}var bx="div",xu=xe(function({store:e,...r}){let o=im();return e=e||o,r={...r,ref:Ie(e?.setAnchorElement,r.ref)},r}),xA=me(function(e){let r=xu(e);return be(bx,r)});var Sm=d(le(),1),xx="div";function Cm(t){let e=t.relatedTarget;return e?.nodeType===Node.ELEMENT_NODE?e:null}function wx(t){let e=Cm(t);return e?Zt(t.currentTarget,e):!1}var wu=Symbol("composite-hover");function _x(t){let e=Cm(t);if(!e)return!1;do{if(yt(e,wu)&&e[wu])return!0;e=e.parentElement}while(e);return!1}var _u=xe(function({store:e,focusOnHover:r=!0,blurOnHoverEnd:o=!!r,...n}){let i=pa();e=e||i,Xe(e,!1);let a=_f(),l=n.onMouseMove,s=Ne(r),u=te(v=>{if(l?.(v),!v.defaultPrevented&&a()&&s(v)){if(!au(v.currentTarget)){let y=e?.getState().baseElement;y&&!Ft(y)&&y.focus()}e?.setActiveId(v.currentTarget.id)}}),c=n.onMouseLeave,p=Ne(o),f=te(v=>{var y;c?.(v),!v.defaultPrevented&&a()&&(wx(v)||_x(v)||s(v)&&p(v)&&(e?.setActiveId(null),(y=e?.getState().baseElement)==null||y.focus()))}),m=(0,Sm.useCallback)(v=>{v&&(v[wu]=!0)},[]);return n={...n,ref:Ie(m,n.ref),onMouseMove:u,onMouseLeave:f},Ze(n)}),AA=ro(me(function(e){let r=_u(e);return be(xx,r)}));var Je=d(le(),1),yx="input";function Em(t,e,r){if(!r)return!1;let o=t.find(n=>!n.disabled&&n.value);return o?.value===e}function Pm(t,e){return!e||t==null?!1:(t=Fn(t),e.length>t.length&&e.toLowerCase().indexOf(t.toLowerCase())===0)}function Sx(t){return t.type==="input"}function Cx(t){return t==="inline"||t==="list"||t==="both"||t==="none"}function Ex(t){let e=t.find(r=>{var o;return r.disabled?!1:((o=r.element)==null?void 0:o.getAttribute("role"))!=="tab"});return e?.id}var Px=xe(function({store:e,focusable:r=!0,autoSelect:o=!1,getAutoSelectId:n,setValueOnChange:i,showMinLength:a=0,showOnChange:l,showOnMouseDown:s,showOnClick:u=s,showOnKeyDown:c,showOnKeyPress:p=c,blurActiveItemOnClick:f,setValueOnClick:m=!0,moveOnKeyPress:v=!0,autoComplete:y="list",...b}){let x=ya();e=e||x,Xe(e,!1);let S=(0,Je.useRef)(null),[A,V]=xf(),T=(0,Je.useRef)(!1),N=(0,Je.useRef)(!1),D=e.useState(L=>L.virtualFocus&&o),E=y==="inline"||y==="both",[I,k]=(0,Je.useState)(E);bf(()=>{E&&k(!0)},[E]);let g=e.useState("value"),P=(0,Je.useRef)(void 0);(0,Je.useEffect)(()=>$e(e,["selectedValue","activeId"],(L,se)=>{P.current=se.selectedValue}),[]);let _=e.useState(L=>{var se;if(E&&I&&!(L.activeValue&&Array.isArray(L.selectedValue)&&(L.selectedValue.includes(L.activeValue)||(se=P.current)!=null&&se.includes(L.activeValue))))return L.activeValue}),h=e.useState("renderedItems"),O=e.useState("open"),w=e.useState("contentElement"),C=(0,Je.useMemo)(()=>{if(!E||!I)return g;if(Em(h,_,D)){if(Pm(g,_)){let se=_?.slice(g.length)||"";return g+se}return g}return _||g},[E,I,h,_,D,g]);(0,Je.useEffect)(()=>{let L=S.current;if(!L)return;let se=()=>k(!0);return L.addEventListener("combobox-item-move",se),()=>{L.removeEventListener("combobox-item-move",se)}},[]),(0,Je.useEffect)(()=>{if(!E||!I||!_||!Em(h,_,D)||!Pm(g,_))return;let se=Mn;return queueMicrotask(()=>{let je=S.current;if(!je)return;let{start:ze,end:kt}=Xo(je),gr=g.length,ot=_.length;Hn(je,gr,ot),se=()=>{if(!Ft(je))return;let{start:mo,end:uh}=Xo(je);mo===gr&&uh===ot&&Hn(je,ze,kt)}}),()=>se()},[A,E,I,_,h,D,g]);let M=(0,Je.useRef)(null),H=te(n),ae=(0,Je.useRef)(null);(0,Je.useEffect)(()=>{if(!O||!w)return;let L=Zo(w);if(!L)return;M.current=L;let se=()=>{T.current=!1},je=()=>{if(!e||!T.current)return;let{activeId:kt}=e.getState();kt!==null&&kt!==ae.current&&(T.current=!1)},ze={passive:!0,capture:!0};return L.addEventListener("wheel",se,ze),L.addEventListener("touchmove",se,ze),L.addEventListener("scroll",je,ze),()=>{L.removeEventListener("wheel",se,!0),L.removeEventListener("touchmove",se,!0),L.removeEventListener("scroll",je,!0)}},[O,w,e]),Ae(()=>{g&&(N.current||(T.current=!0))},[g]),Ae(()=>{D!=="always"&&O||(T.current=O)},[D,O]);let _e=e.useState("resetValueOnSelect");er(()=>{var L,se;let je=T.current;if(!e||!O||!je&&!_e)return;let{baseElement:ze,contentElement:kt,activeId:gr}=e.getState();if(!(ze&&!Ft(ze))){if(kt?.hasAttribute("data-placing")){let ot=new MutationObserver(V);return ot.observe(kt,{attributeFilter:["data-placing"]}),()=>ot.disconnect()}if(D&&je){let ot=H(h),mo=ot!==void 0?ot:(L=Ex(h))!=null?L:e.first();ae.current=mo,e.move(mo??null)}else{let ot=(se=e.item(gr||e.first()))==null?void 0:se.element;ot&&"scrollIntoView"in ot&&ot.scrollIntoView({block:"nearest",inline:"nearest"})}}},[e,O,A,g,D,_e,H,h]),(0,Je.useEffect)(()=>{if(!E)return;let L=S.current;if(!L)return;let se=[L,w].filter(ze=>!!ze),je=ze=>{se.every(kt=>fa(ze,kt))&&e?.setValue(C)};for(let ze of se)ze.addEventListener("focusout",je);return()=>{for(let ze of se)ze.removeEventListener("focusout",je)}},[E,w,e,C]);let ke=L=>L.currentTarget.value.length>=a,He=b.onChange,rt=Ne(l??ke),qt=Ne(i??!e.tag),mr=te(L=>{if(He?.(L),L.defaultPrevented||!e)return;let se=L.currentTarget,{value:je,selectionStart:ze,selectionEnd:kt}=se,gr=L.nativeEvent;if(T.current=!0,Sx(gr)&&(gr.isComposing&&(T.current=!1,N.current=!0),E)){let ot=gr.inputType==="insertText"||gr.inputType==="insertCompositionText",mo=ze===je.length;k(ot&&mo)}if(qt(L)){let ot=je===e.getState().value;e.setValue(je),queueMicrotask(()=>{Hn(se,ze,kt)}),E&&D&&ot&&V()}rt(L)&&e.show(),(!D||!T.current)&&e.setActiveId(null)}),Y=b.onCompositionEnd,Z=te(L=>{T.current=!0,N.current=!1,Y?.(L),!L.defaultPrevented&&D&&V()}),ge=b.onMouseDown,pr=Ne(f??(()=>!!e?.getState().includesBaseElement)),vr=Ne(m),co=Ne(u??ke),fo=te(L=>{ge?.(L),!L.defaultPrevented&&(L.button||L.ctrlKey||e&&(pr(L)&&e.setActiveId(null),vr(L)&&e.setValue(C),co(L)&&to(L.currentTarget,"mouseup",e.show)))}),Mo=b.onKeyDown,wn=Ne(p??ke),Ps=te(L=>{if(Mo?.(L),L.repeat||(T.current=!1),L.defaultPrevented||L.ctrlKey||L.altKey||L.shiftKey||L.metaKey||!e)return;let{open:se}=e.getState();se||(L.key==="ArrowUp"||L.key==="ArrowDown")&&wn(L)&&(L.preventDefault(),e.show())}),ud=b.onBlur,ih=te(L=>{T.current=!1,ud?.(L),L.defaultPrevented}),ah=Mt(b.id),sh=Cx(y)?y:void 0,lh=e.useState(L=>L.activeId===null);return b={id:ah,role:"combobox","aria-autocomplete":sh,"aria-haspopup":Ql(w,"listbox"),"aria-expanded":O,"aria-controls":w?.id,"data-active-item":lh||void 0,value:C,...b,ref:Ie(S,b.ref),onChange:mr,onCompositionEnd:Z,onMouseDown:fo,onKeyDown:Ps,onBlur:ih},b=mu({store:e,focusable:r,...b,moveOnKeyPress:L=>Yl(v,L)?!1:(E&&k(!0),!0)}),b=xu({store:e,...b}),{autoComplete:"off",...b}}),Ca=me(function(e){let r=Px(e);return be(yx,r)});var Ea=d(le(),1),yu=d(R(),1),Ax="div";function Ix(t,e){if(e!=null)return t==null?!1:Array.isArray(t)?t.includes(e):t===e}function Tx(t){var e;return(e={menu:"menuitem",listbox:"option",tree:"treeitem"}[t])!=null?e:"option"}var Am=xe(function({store:e,value:r,hideOnClick:o,setValueOnClick:n,selectValueOnClick:i=!0,resetValueOnSelect:a,focusOnHover:l=!1,moveOnKeyPress:s=!0,getItem:u,...c}){var p;let f=sn();e=e||f,Xe(e,!1);let{resetValueOnSelectState:m,multiSelectable:v,selected:y}=ba(e,{resetValueOnSelectState:"resetValueOnSelect",multiSelectable(g){return Array.isArray(g.selectedValue)},selected(g){return Ix(g.selectedValue,r)}}),b=(0,Ea.useCallback)(g=>{let P={...g,value:r};return u?u(P):P},[r,u]);n=n??!v,o=o??(r!=null&&!v);let x=c.onClick,S=Ne(n),A=Ne(i),V=Ne((p=a??m)!=null?p:v),T=Ne(o),N=te(g=>{x?.(g),!g.defaultPrevented&&(sf(g)||af(g)||(r!=null&&(A(g)&&(V(g)&&e?.resetValue(),e?.setSelectedValue(P=>Array.isArray(P)?P.includes(r)?P.filter(_=>_!==r):[...P,r]:r)),S(g)&&e?.setValue(r)),T(g)&&e?.hide()))}),D=c.onKeyDown,E=te(g=>{if(D?.(g),g.defaultPrevented)return;let P=e?.getState().baseElement;if(!P||Ft(P))return;(g.key.length===1||g.key==="Backspace"||g.key==="Delete")&&(queueMicrotask(()=>P.focus()),mt(P)&&e?.setValue(P.value))});v&&y!=null&&(c={"aria-selected":y,...c}),c=tr(c,g=>(0,yu.jsx)(Sa.Provider,{value:r,children:(0,yu.jsx)(bm.Provider,{value:y??!1,children:g})}),[r,y]);let I=(0,Ea.useContext)(_a);c={role:Tx(I),children:r,...c,onClick:N,onKeyDown:E};let k=Ne(s);return c=cu({store:e,...c,getItem:b,moveOnKeyPress:g=>{if(!k(g))return!1;let P=new Event("combobox-item-move"),_=e?.getState().baseElement;return _?.dispatchEvent(P),!0}}),c=_u({store:e,focusOnHover:l,...c}),c}),Xn=ro(me(function(e){let r=Am(e);return be(Ax,r)}));var Pa=d(le(),1),Tm=d(R(),1),Ox="span";function Im(t){return Fn(t).toLowerCase()}function Rx(t,e){let r=[];for(let o of e){let n=0,i=o.length;for(;t.indexOf(o,n)!==-1;){let a=t.indexOf(o,n);a!==-1&&r.push([a,i]),n=a+1}}return r}function Vx(t){return t.filter(([e,r],o,n)=>!n.some(([i,a],l)=>l!==o&&i<=e&&i+a>=e+r))}function kx(t){return t.sort(([e],[r])=>e-r)}function Dx(t,e){if(!t||!e)return t;let r=fu(e).filter(Boolean).map(Im),o=[],n=(s,u=!1)=>(0,Tm.jsx)("span",{"data-autocomplete-value":u?"":void 0,"data-user-value":u?void 0:"",children:s},o.length),i=kx(Vx(Rx(Im(t),new Set(r))));if(!i.length)return o.push(n(t,!0)),o;let[a]=i[0];return[t.slice(0,a),...i.flatMap(([s,u],c)=>{var p;let f=t.slice(s,s+u),m=(p=i[c+1])==null?void 0:p[0],v=t.slice(s+u,m);return[f,v]})].forEach((s,u)=>{s&&o.push(n(s,u%2===0))}),o}var Nx=xe(function({store:e,value:r,userValue:o,...n}){let i=sn();e=e||i;let a=(0,Pa.useContext)(Sa),l=r??a,s=rn(e,c=>o??c?.value);return n={children:(0,Pa.useMemo)(()=>{if(l)return s?Dx(l,s):l},[l,s]),...n},Ze(n)}),Aa=me(function(e){let r=Nx(e);return be(Ox,r)});var Mx="label",Fx=xe(function({store:e,...r}){let o=ya();return e=e||o,Xe(e,!1),r={htmlFor:e.useState(i=>{var a;return(a=i.baseElement)==null?void 0:a.id}),...r},Ze(r)}),Ia=ro(me(function(e){let r=Fx(e);return be(Mx,r)}));var Ta=d(le(),1),Su=d(R(),1),Lx="div",Om=xe(function({store:e,alwaysVisible:r,...o}){let n=sn(!0),i=bu();e=e||i;let a=!!e&&e===n;Xe(e,!1);let l=(0,Ta.useRef)(null),s=Mt(o.id),u=e.useState("mounted"),c=hu(u,o.hidden,r),p=c?{...o.style,display:"none"}:o.style,f=e.useState(V=>Array.isArray(V.selectedValue)),m=hf(l,"role",o.role),y=(m==="listbox"||m==="tree"||m==="grid")&&f||void 0,[b,x]=(0,Ta.useState)(!1),S=e.useState("contentElement");Ae(()=>{if(!u)return;let V=l.current;if(!V||S!==V)return;let T=()=>{x(!!V.querySelector("[role='listbox']"))},N=new MutationObserver(T);return N.observe(V,{subtree:!0,childList:!0,attributeFilter:["role"]}),T(),()=>N.disconnect()},[u,S]),b||(o={role:"listbox","aria-multiselectable":y,...o}),o=tr(o,V=>(0,Su.jsx)(hm,{value:e,children:(0,Su.jsx)(_a.Provider,{value:m,children:V})}),[e,m]);let A=s&&(!n||!a)?e.setContentElement:null;return o={id:s,hidden:c,...o,ref:Ie(A,l,o.ref),style:p},Ze(o)}),Zn=me(function(e){let r=Om(e);return be(Lx,r)});var Cu=d(le(),1),xI=(0,Cu.createContext)(null),wI=(0,Cu.createContext)(null),Jn=St([Jo],[va]),Rm=Jn.useContext,_I=Jn.useScopedContext,yI=Jn.useProviderContext,SI=Jn.ContextProvider,CI=Jn.ScopedContextProvider;var Bx=_o()&&Zl();function Vm({tag:t,...e}={}){let r=Po(e.store,du(t,["value","rtl"]));let o=t?.getState(),n=r?.getState(),i=ee(e.activeId,n?.activeId,e.defaultActiveId,null),a=mm({...e,activeId:i,includesBaseElement:ee(e.includesBaseElement,n?.includesBaseElement,!0),orientation:ee(e.orientation,n?.orientation,"vertical"),focusLoop:ee(e.focusLoop,n?.focusLoop,!0),focusWrap:ee(e.focusWrap,n?.focusWrap,!0),virtualFocus:ee(e.virtualFocus,n?.virtualFocus,!0)}),l=_m({...e,placement:ee(e.placement,n?.placement,"bottom-start")}),s=ee(e.value,n?.value,e.defaultValue,""),u=ee(e.selectedValue,n?.selectedValue,o?.values,e.defaultSelectedValue,""),c=Array.isArray(u),p={...a.getState(),...l.getState(),value:s,selectedValue:u,resetValueOnSelect:ee(e.resetValueOnSelect,n?.resetValueOnSelect,c),resetValueOnHide:ee(e.resetValueOnHide,n?.resetValueOnHide,c&&!t),activeValue:n?.activeValue},f=vt(p,a,l,r);return Bx&&Ue(f,()=>$e(f,["virtualFocus"],()=>{f.setState("virtualFocus",!1)})),Ue(f,()=>{if(t)return Jr($e(f,["selectedValue"],m=>{Array.isArray(m.selectedValue)&&t.setValues(m.selectedValue)}),$e(t,["values"],m=>{f.setState("selectedValue",m.values)}))}),Ue(f,()=>$e(f,["resetValueOnHide","mounted"],m=>{m.resetValueOnHide&&(m.mounted||f.setState("value",s))})),Ue(f,()=>$e(f,["open"],m=>{m.open||(f.setState("activeId",i),f.setState("moves",0))})),Ue(f,()=>$e(f,["moves","activeId"],(m,v)=>{m.moves===v.moves&&f.setState("activeValue",void 0)})),Ue(f,()=>no(f,["moves","renderedItems"],(m,v)=>{if(m.moves===v.moves)return;let{activeId:y}=f.getState(),b=a.item(y);f.setState("activeValue",b?.value)})),{...l,...a,...f,tag:t,setValue:m=>f.setState("value",m),resetValue:()=>f.setState("value",p.value),setSelectedValue:m=>f.setState("selectedValue",m)}}function jx(t){let e=Rm();return t={...t,tag:t.tag!==void 0?t.tag:e},pm(t)}function zx(t,e,r){return er(e,[r.tag]),Te(t,r,"value","setValue"),Te(t,r,"selectedValue","setSelectedValue"),Te(t,r,"resetValueOnHide"),Te(t,r,"resetValueOnSelect"),Object.assign(vm(ym(t,e,r),e,r),{tag:r.tag})}function Eu(t={}){t=jx(t);let[e,r]=on(Vm,t);return zx(e,r,t)}var km=d(R(),1);function Oa(t={}){let e=Eu(t);return(0,km.jsx)(gm,{value:e,children:t.children})}var jm=d(Fm(),1);var zm=d(Et(),1),Er=d($(),1),Ao=d(j(),1),Lt=d(q(),1);var $x=[],ei=(t,e)=>t.singleSelection?e?.value:Array.isArray(e?.value)?e.value:!Array.isArray(e?.value)&&e?.value?[e.value]:$x;var ti=d(j(),1),Kx=[];function Ke({elements:t,getElements:e}){let r=Array.isArray(t)&&t.length>0?t:Kx,[o,n]=(0,ti.useState)(r),[i,a]=(0,ti.useState)(!1);return(0,ti.useEffect)(()=>{if(!e){n(r);return}let l=!1;return a(!0),e().then(s=>{if(!l){let u=Array.isArray(s)&&s.length>0?s:r;n(u)}}).catch(()=>{l||n(r)}).finally(()=>{l||a(!1)}),()=>{l=!0}},[e,r]),{elements:o,isLoading:i}}var oe=d(R(),1);function Lm(t=""){return(0,jm.default)(t.trim().toLowerCase())}var Bm=(t,e,r)=>t.singleSelection?r:Array.isArray(e?.value)?e.value.includes(r)?e.value.filter(o=>o!==r):[...e.value,r]:[r];function Hm(t,e){return`${t}-${e}`}var Wm=({selected:t})=>(0,oe.jsx)("span",{className:z("dataviews-filters__search-widget-listitem-multi-selection",{"is-selected":t}),children:t&&(0,oe.jsx)(Lt.Icon,{icon:En})}),Gm=({selected:t})=>(0,oe.jsx)("span",{className:z("dataviews-filters__search-widget-listitem-single-selection",{"is-selected":t})});function qm({view:t,filter:e,onChangeView:r}){let o=(0,zm.useInstanceId)(qm,"dataviews-filter-list-box"),[n,i]=(0,Ao.useState)(e.operators?.length===1?void 0:null),a=t.filters?.find(s=>s.field===e.field),l=ei(e,a);return(0,oe.jsx)(Lt.Composite,{virtualFocus:!0,focusLoop:!0,activeId:n,setActiveId:i,role:"listbox",className:"dataviews-filters__search-widget-listbox","aria-label":(0,Er.sprintf)((0,Er.__)("List of: %1$s"),e.name),onFocusVisible:()=>{!n&&e.elements.length&&i(Hm(o,e.elements[0].value))},render:(0,oe.jsx)(Lt.Composite.Typeahead,{}),children:e.elements.map(s=>(0,oe.jsxs)(Lt.Composite.Hover,{render:(0,oe.jsx)(Lt.Composite.Item,{id:Hm(o,s.value),render:(0,oe.jsx)("div",{"aria-label":s.label,role:"option",className:"dataviews-filters__search-widget-listitem"}),onClick:()=>{let u=a?[...(t.filters??[]).map(c=>c.field===e.field?{...c,operator:a.operator||e.operators[0],value:Bm(e,a,s.value)}:c)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:Bm(e,a,s.value)}];r({...t,page:1,filters:u})}}),children:[e.singleSelection&&(0,oe.jsx)(Gm,{selected:l===s.value}),!e.singleSelection&&(0,oe.jsx)(Wm,{selected:l.includes(s.value)}),(0,oe.jsx)("span",{className:"dataviews-filters__search-widget-listitem-value",title:s.label,children:s.label})]},s.value))})}function Qx({view:t,filter:e,onChangeView:r}){let[o,n]=(0,Ao.useState)(""),i=(0,Ao.useDeferredValue)(o),a=t.filters?.find(u=>u.field===e.field),l=ei(e,a),s=(0,Ao.useMemo)(()=>{let u=Lm(i);return e.elements.filter(c=>Lm(c.label).includes(u))},[e.elements,i]);return(0,oe.jsxs)(Oa,{selectedValue:l,setSelectedValue:u=>{let c=a?[...(t.filters??[]).map(p=>p.field===e.field?{...p,operator:a.operator||e.operators[0],value:u}:p)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:u}];r({...t,page:1,filters:c})},setValue:n,children:[(0,oe.jsxs)("div",{className:"dataviews-filters__search-widget-filter-combobox__wrapper",children:[(0,oe.jsx)(Ia,{render:(0,oe.jsx)(Lt.VisuallyHidden,{children:(0,Er.__)("Search items")}),children:(0,Er.__)("Search items")}),(0,oe.jsx)(Ca,{autoSelect:"always",placeholder:(0,Er.__)("Search"),className:"dataviews-filters__search-widget-filter-combobox__input"}),(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-filter-combobox__icon",children:(0,oe.jsx)(Lt.Icon,{icon:xl})})]}),(0,oe.jsxs)(Zn,{className:"dataviews-filters__search-widget-filter-combobox-list",alwaysVisible:!0,children:[s.map(u=>(0,oe.jsxs)(Xn,{resetValueOnSelect:!1,value:u.value,className:"dataviews-filters__search-widget-listitem",hideOnClick:!1,setValueOnClick:!1,focusOnHover:!0,children:[e.singleSelection&&(0,oe.jsx)(Gm,{selected:l===u.value}),!e.singleSelection&&(0,oe.jsx)(Wm,{selected:l.includes(u.value)}),(0,oe.jsxs)("span",{className:"dataviews-filters__search-widget-listitem-value",title:u.label,children:[(0,oe.jsx)(Aa,{className:"dataviews-filters__search-widget-filter-combobox-item-value",value:u.label}),!!u.description&&(0,oe.jsx)("span",{className:"dataviews-filters__search-widget-listitem-description",children:u.description})]})]},u.value)),!s.length&&(0,oe.jsx)("p",{children:(0,Er.__)("No results found")})]})]})}function Ym(t){let{elements:e,isLoading:r}=Ke({elements:t.filter.elements,getElements:t.filter.getElements});if(r)return(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,oe.jsx)(Lt.Spinner,{})});if(e.length===0)return(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,Er.__)("No elements found")});let o=e.length>10?Qx:qm;return(0,oe.jsx)(o,{...t,filter:{...t.filter,elements:e}})}var Km=d($m(),1),Qm=d(Et(),1),Pu=d(j(),1),Xm=d(q(),1);var Au=d(R(),1);function Zm({filter:t,view:e,onChangeView:r,fields:o}){let n=e.filters?.find(u=>u.field===t.field),i=ei(t,n),a=(0,Pu.useMemo)(()=>{let u=o.find(c=>c.id===t.field);return u&&{...u,isValid:{},getValue:({item:c})=>c[u.id],setValue:({value:c})=>({[u.id]:c})}},[o,t.field]),l=(0,Pu.useMemo)(()=>(e.filters??[]).reduce((u,c)=>(u[c.field]=c.value,u),{}),[e.filters]),s=(0,Qm.useEvent)(u=>{if(!a||!n)return;let c=a.getValue({item:u});(0,Km.default)(c,i)||r({...e,filters:(e.filters??[]).map(p=>p.field===t.field?{...p,operator:n.operator||t.operators[0],value:c===""?void 0:c}:p)})});return!a||!a.Edit||!n?null:(0,Au.jsx)(Xm.Flex,{className:"dataviews-filters__user-input-widget",gap:2.5,direction:"column",children:(0,Au.jsx)(a.Edit,{hideLabelFromVision:!0,data:l,field:a,operator:n.operator,onChange:s})})}var Xx=Math.pow(10,8)*24*60*60*1e3,pT=-Xx,Va=6048e5,Jm=864e5;var Zx=3600;var ep=Zx*24,vT=ep*7,Jx=ep*365.2425,e0=Jx/12,gT=e0*3,Iu=Symbol.for("constructDateFrom");function Ge(t,e){return typeof t=="function"?t(e):t&&typeof t=="object"&&Iu in t?t[Iu](e):t instanceof Date?new t.constructor(e):new Date(e)}function ce(t,e){return Ge(e||t,t)}function ka(t,e,r){let o=ce(t,r?.in);return isNaN(e)?Ge(r?.in||t,NaN):(e&&o.setDate(o.getDate()+e),o)}function Da(t,e,r){let o=ce(t,r?.in);if(isNaN(e))return Ge(r?.in||t,NaN);if(!e)return o;let n=o.getDate(),i=Ge(r?.in||t,o.getTime());i.setMonth(o.getMonth()+e+1,0);let a=i.getDate();return n>=a?i:(o.setFullYear(i.getFullYear(),i.getMonth(),n),o)}var t0={};function io(){return t0}function Pr(t,e){let r=io(),o=e?.weekStartsOn??e?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,n=ce(t,e?.in),i=n.getDay(),a=(i=i.getTime()?o+1:r.getTime()>=l.getTime()?o:o-1}function Tu(t){let e=ce(t),r=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return r.setUTCFullYear(e.getFullYear()),+t-+r}function tp(t,...e){let r=Ge.bind(null,t||e.find(o=>typeof o=="object"));return e.map(r)}function Ou(t,e){let r=ce(t,e?.in);return r.setHours(0,0,0,0),r}function rp(t,e,r){let[o,n]=tp(r?.in,t,e),i=Ou(o),a=Ou(n),l=+i-Tu(i),s=+a-Tu(a);return Math.round((l-s)/Jm)}function op(t,e){let r=Na(t,e),o=Ge(e?.in||t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),Io(o)}function np(t,e,r){return ka(t,e*7,r)}function ip(t,e,r){return Da(t,e*12,r)}function ap(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function ln(t){return!(!ap(t)&&typeof t!="number"||isNaN(+ce(t)))}function sp(t,e){let r=ce(t,e?.in);return r.setDate(1),r.setHours(0,0,0,0),r}function Ma(t,e){let r=ce(t,e?.in);return r.setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r}var r0={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},lp=(t,e,r)=>{let o,n=r0[t];return typeof n=="string"?o=n:e===1?o=n.one:o=n.other.replace("{{count}}",e.toString()),r?.addSuffix?r.comparison&&r.comparison>0?"in "+o:o+" ago":o};function Fa(t){return(e={})=>{let r=e.width?String(e.width):t.defaultWidth;return t.formats[r]||t.formats[t.defaultWidth]}}var o0={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},n0={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},i0={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},up={date:Fa({formats:o0,defaultWidth:"full"}),time:Fa({formats:n0,defaultWidth:"full"}),dateTime:Fa({formats:i0,defaultWidth:"full"})};var a0={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},dp=(t,e,r,o)=>a0[t];function un(t){return(e,r)=>{let o=r?.context?String(r.context):"standalone",n;if(o==="formatting"&&t.formattingValues){let a=t.defaultFormattingWidth||t.defaultWidth,l=r?.width?String(r.width):a;n=t.formattingValues[l]||t.formattingValues[a]}else{let a=t.defaultWidth,l=r?.width?String(r.width):t.defaultWidth;n=t.values[l]||t.values[a]}let i=t.argumentCallback?t.argumentCallback(e):e;return n[i]}}var s0={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},l0={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},u0={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},d0={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},c0={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},f0={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},m0=(t,e)=>{let r=Number(t),o=r%100;if(o>20||o<10)switch(o%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},cp={ordinalNumber:m0,era:un({values:s0,defaultWidth:"wide"}),quarter:un({values:l0,defaultWidth:"wide",argumentCallback:t=>t-1}),month:un({values:u0,defaultWidth:"wide"}),day:un({values:d0,defaultWidth:"wide"}),dayPeriod:un({values:c0,defaultWidth:"wide",formattingValues:f0,defaultFormattingWidth:"wide"})};function dn(t){return(e,r={})=>{let o=r.width,n=o&&t.matchPatterns[o]||t.matchPatterns[t.defaultMatchWidth],i=e.match(n);if(!i)return null;let a=i[0],l=o&&t.parsePatterns[o]||t.parsePatterns[t.defaultParseWidth],s=Array.isArray(l)?v0(l,p=>p.test(a)):p0(l,p=>p.test(a)),u;u=t.valueCallback?t.valueCallback(s):s,u=r.valueCallback?r.valueCallback(u):u;let c=e.slice(a.length);return{value:u,rest:c}}}function p0(t,e){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&e(t[r]))return r}function v0(t,e){for(let r=0;r{let o=e.match(t.matchPattern);if(!o)return null;let n=o[0],i=e.match(t.parsePattern);if(!i)return null;let a=t.valueCallback?t.valueCallback(i[0]):i[0];a=r.valueCallback?r.valueCallback(a):a;let l=e.slice(n.length);return{value:a,rest:l}}}var g0=/^(\d+)(th|st|nd|rd)?/i,h0=/\d+/i,b0={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},x0={any:[/^b/i,/^(a|c)/i]},w0={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},_0={any:[/1/i,/2/i,/3/i,/4/i]},y0={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},S0={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},C0={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},E0={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},P0={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},A0={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},mp={ordinalNumber:fp({matchPattern:g0,parsePattern:h0,valueCallback:t=>parseInt(t,10)}),era:dn({matchPatterns:b0,defaultMatchWidth:"wide",parsePatterns:x0,defaultParseWidth:"any"}),quarter:dn({matchPatterns:w0,defaultMatchWidth:"wide",parsePatterns:_0,defaultParseWidth:"any",valueCallback:t=>t+1}),month:dn({matchPatterns:y0,defaultMatchWidth:"wide",parsePatterns:S0,defaultParseWidth:"any"}),day:dn({matchPatterns:C0,defaultMatchWidth:"wide",parsePatterns:E0,defaultParseWidth:"any"}),dayPeriod:dn({matchPatterns:P0,defaultMatchWidth:"any",parsePatterns:A0,defaultParseWidth:"any"})};var Ru={code:"en-US",formatDistance:lp,formatLong:up,formatRelative:dp,localize:cp,match:mp,options:{weekStartsOn:0,firstWeekContainsDate:1}};function pp(t,e){let r=ce(t,e?.in);return rp(r,Ma(r))+1}function vp(t,e){let r=ce(t,e?.in),o=+Io(r)-+op(r);return Math.round(o/Va)+1}function La(t,e){let r=ce(t,e?.in),o=r.getFullYear(),n=io(),i=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,a=Ge(e?.in||t,0);a.setFullYear(o+1,0,i),a.setHours(0,0,0,0);let l=Pr(a,e),s=Ge(e?.in||t,0);s.setFullYear(o,0,i),s.setHours(0,0,0,0);let u=Pr(s,e);return+r>=+l?o+1:+r>=+u?o:o-1}function gp(t,e){let r=io(),o=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,n=La(t,e),i=Ge(e?.in||t,0);return i.setFullYear(n,0,o),i.setHours(0,0,0,0),Pr(i,e)}function hp(t,e){let r=ce(t,e?.in),o=+Pr(r,e)-+gp(r,e);return Math.round(o/Va)+1}function ie(t,e){let r=t<0?"-":"",o=Math.abs(t).toString().padStart(e,"0");return r+o}var Ar={y(t,e){let r=t.getFullYear(),o=r>0?r:1-r;return ie(e==="yy"?o%100:o,e.length)},M(t,e){let r=t.getMonth();return e==="M"?String(r+1):ie(r+1,2)},d(t,e){return ie(t.getDate(),e.length)},a(t,e){let r=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return r==="am"?"a.m.":"p.m."}},h(t,e){return ie(t.getHours()%12||12,e.length)},H(t,e){return ie(t.getHours(),e.length)},m(t,e){return ie(t.getMinutes(),e.length)},s(t,e){return ie(t.getSeconds(),e.length)},S(t,e){let r=e.length,o=t.getMilliseconds(),n=Math.trunc(o*Math.pow(10,r-3));return ie(n,e.length)}};var cn={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Vu={G:function(t,e,r){let o=t.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return r.era(o,{width:"abbreviated"});case"GGGGG":return r.era(o,{width:"narrow"});default:return r.era(o,{width:"wide"})}},y:function(t,e,r){if(e==="yo"){let o=t.getFullYear(),n=o>0?o:1-o;return r.ordinalNumber(n,{unit:"year"})}return Ar.y(t,e)},Y:function(t,e,r,o){let n=La(t,o),i=n>0?n:1-n;if(e==="YY"){let a=i%100;return ie(a,2)}return e==="Yo"?r.ordinalNumber(i,{unit:"year"}):ie(i,e.length)},R:function(t,e){let r=Na(t);return ie(r,e.length)},u:function(t,e){let r=t.getFullYear();return ie(r,e.length)},Q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"Q":return String(o);case"QQ":return ie(o,2);case"Qo":return r.ordinalNumber(o,{unit:"quarter"});case"QQQ":return r.quarter(o,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(o,{width:"narrow",context:"formatting"});default:return r.quarter(o,{width:"wide",context:"formatting"})}},q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"q":return String(o);case"qq":return ie(o,2);case"qo":return r.ordinalNumber(o,{unit:"quarter"});case"qqq":return r.quarter(o,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(o,{width:"narrow",context:"standalone"});default:return r.quarter(o,{width:"wide",context:"standalone"})}},M:function(t,e,r){let o=t.getMonth();switch(e){case"M":case"MM":return Ar.M(t,e);case"Mo":return r.ordinalNumber(o+1,{unit:"month"});case"MMM":return r.month(o,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(o,{width:"narrow",context:"formatting"});default:return r.month(o,{width:"wide",context:"formatting"})}},L:function(t,e,r){let o=t.getMonth();switch(e){case"L":return String(o+1);case"LL":return ie(o+1,2);case"Lo":return r.ordinalNumber(o+1,{unit:"month"});case"LLL":return r.month(o,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(o,{width:"narrow",context:"standalone"});default:return r.month(o,{width:"wide",context:"standalone"})}},w:function(t,e,r,o){let n=hp(t,o);return e==="wo"?r.ordinalNumber(n,{unit:"week"}):ie(n,e.length)},I:function(t,e,r){let o=vp(t);return e==="Io"?r.ordinalNumber(o,{unit:"week"}):ie(o,e.length)},d:function(t,e,r){return e==="do"?r.ordinalNumber(t.getDate(),{unit:"date"}):Ar.d(t,e)},D:function(t,e,r){let o=pp(t);return e==="Do"?r.ordinalNumber(o,{unit:"dayOfYear"}):ie(o,e.length)},E:function(t,e,r){let o=t.getDay();switch(e){case"E":case"EE":case"EEE":return r.day(o,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(o,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},e:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return ie(i,2);case"eo":return r.ordinalNumber(i,{unit:"day"});case"eee":return r.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},c:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return ie(i,e.length);case"co":return r.ordinalNumber(i,{unit:"day"});case"ccc":return r.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(n,{width:"narrow",context:"standalone"});case"cccccc":return r.day(n,{width:"short",context:"standalone"});default:return r.day(n,{width:"wide",context:"standalone"})}},i:function(t,e,r){let o=t.getDay(),n=o===0?7:o;switch(e){case"i":return String(n);case"ii":return ie(n,e.length);case"io":return r.ordinalNumber(n,{unit:"day"});case"iii":return r.day(o,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(o,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},a:function(t,e,r){let n=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(t,e,r){let o=t.getHours(),n;switch(o===12?n=cn.noon:o===0?n=cn.midnight:n=o/12>=1?"pm":"am",e){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(t,e,r){let o=t.getHours(),n;switch(o>=17?n=cn.evening:o>=12?n=cn.afternoon:o>=4?n=cn.morning:n=cn.night,e){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(t,e,r){if(e==="ho"){let o=t.getHours()%12;return o===0&&(o=12),r.ordinalNumber(o,{unit:"hour"})}return Ar.h(t,e)},H:function(t,e,r){return e==="Ho"?r.ordinalNumber(t.getHours(),{unit:"hour"}):Ar.H(t,e)},K:function(t,e,r){let o=t.getHours()%12;return e==="Ko"?r.ordinalNumber(o,{unit:"hour"}):ie(o,e.length)},k:function(t,e,r){let o=t.getHours();return o===0&&(o=24),e==="ko"?r.ordinalNumber(o,{unit:"hour"}):ie(o,e.length)},m:function(t,e,r){return e==="mo"?r.ordinalNumber(t.getMinutes(),{unit:"minute"}):Ar.m(t,e)},s:function(t,e,r){return e==="so"?r.ordinalNumber(t.getSeconds(),{unit:"second"}):Ar.s(t,e)},S:function(t,e){return Ar.S(t,e)},X:function(t,e,r){let o=t.getTimezoneOffset();if(o===0)return"Z";switch(e){case"X":return xp(o);case"XXXX":case"XX":return To(o);default:return To(o,":")}},x:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"x":return xp(o);case"xxxx":case"xx":return To(o);default:return To(o,":")}},O:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+bp(o,":");default:return"GMT"+To(o,":")}},z:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+bp(o,":");default:return"GMT"+To(o,":")}},t:function(t,e,r){let o=Math.trunc(+t/1e3);return ie(o,e.length)},T:function(t,e,r){return ie(+t,e.length)}};function bp(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=Math.trunc(o/60),i=o%60;return i===0?r+String(n):r+String(n)+e+ie(i,2)}function xp(t,e){return t%60===0?(t>0?"-":"+")+ie(Math.abs(t)/60,2):To(t,e)}function To(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=ie(Math.trunc(o/60),2),i=ie(o%60,2);return r+n+e+i}var wp=(t,e)=>{switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}},_p=(t,e)=>{switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}},I0=(t,e)=>{let r=t.match(/(P+)(p+)?/)||[],o=r[1],n=r[2];if(!n)return wp(t,e);let i;switch(o){case"P":i=e.dateTime({width:"short"});break;case"PP":i=e.dateTime({width:"medium"});break;case"PPP":i=e.dateTime({width:"long"});break;default:i=e.dateTime({width:"full"});break}return i.replace("{{date}}",wp(o,e)).replace("{{time}}",_p(n,e))},yp={p:_p,P:I0};var T0=/^D+$/,O0=/^Y+$/,R0=["D","DD","YY","YYYY"];function Sp(t){return T0.test(t)}function Cp(t){return O0.test(t)}function Ep(t,e,r){let o=V0(t,e,r);if(console.warn(o),R0.includes(t))throw new RangeError(o)}function V0(t,e,r){let o=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${e}\`) for formatting ${o} to the input \`${r}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var k0=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,D0=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,N0=/^'([^]*?)'?$/,M0=/''/g,F0=/[a-zA-Z]/;function ku(t,e,r){let o=io(),n=r?.locale??o.locale??Ru,i=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??o.firstWeekContainsDate??o.locale?.options?.firstWeekContainsDate??1,a=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??o.weekStartsOn??o.locale?.options?.weekStartsOn??0,l=ce(t,r?.in);if(!ln(l))throw new RangeError("Invalid time value");let s=e.match(D0).map(c=>{let p=c[0];if(p==="p"||p==="P"){let f=yp[p];return f(c,n.formatLong)}return c}).join("").match(k0).map(c=>{if(c==="''")return{isToken:!1,value:"'"};let p=c[0];if(p==="'")return{isToken:!1,value:L0(c)};if(Vu[p])return{isToken:!0,value:c};if(p.match(F0))throw new RangeError("Format string contains an unescaped latin alphabet character `"+p+"`");return{isToken:!1,value:c}});n.localize.preprocessor&&(s=n.localize.preprocessor(l,s));let u={firstWeekContainsDate:i,weekStartsOn:a,locale:n};return s.map(c=>{if(!c.isToken)return c.value;let p=c.value;(!r?.useAdditionalWeekYearTokens&&Cp(p)||!r?.useAdditionalDayOfYearTokens&&Sp(p))&&Ep(p,e,String(t));let f=Vu[p[0]];return f(l,p,n.localize,u)}).join("")}function L0(t){let e=t.match(N0);return e?e[1].replace(M0,"'"):t}function Oo(t,e,r){return ka(t,-e,r)}function Ba(t,e,r){return Da(t,-e,r)}function Pp(t,e,r){return np(t,-e,r)}function Ha(t,e,r){return ip(t,-e,r)}var B=d($(),1),Oe=d(j(),1),gt=d(Ro(),1);var Du=d(R(),1),Me={Name:(0,Du.jsx)("span",{className:"dataviews-filters__summary-filter-text-name"}),Value:(0,Du.jsx)("span",{className:"dataviews-filters__summary-filter-text-value"})};function Ip(t,e){switch(e){case"days":return Oo(new Date,t);case"weeks":return Pp(new Date,t);case"months":return Ba(new Date,t);case"years":return Ha(new Date,t);default:return new Date}}var Tp={label:(0,B.__)("Is none of"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is none of: %2$s"),t.name,e.map(r=>r.label).join(", ")),Me),filter:((t,e,r)=>{if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?!r.some(n=>o.includes(n)):typeof o=="string"?!r.includes(o):!1}),selection:"multi"},ja=[{name:Se,label:(0,B.__)("Includes"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s includes: %2$s"),t.name,e.map(r=>r.label).join(", ")),Me),filter(t,e,r){if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?r.some(n=>o.includes(n)):typeof o=="string"?r.includes(o):!1},selection:"multi"},{name:Ce,...Tp},{name:nt,label:(0,B.__)("Includes all"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s includes all: %2$s"),t.name,e.map(r=>r.label).join(", ")),Me),filter(t,e,r){return r?.length?r.every(o=>e.getValue({item:t})?.includes(o)):!0},selection:"multi"},{name:it,...Tp},{name:ct,label:(0,B.__)("Between (inc)"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s between (inc): %2$s and %3$s"),t.name,e[0].label[0],e[0].label[1]),Me),filter(t,e,r){if(!Array.isArray(r)||r.length!==2||r[0]===void 0||r[1]===void 0)return!0;let o=e.getValue({item:t});return typeof o=="number"||o instanceof Date||typeof o=="string"?o>=r[0]&&o<=r[1]:!1},selection:"custom"},{name:ft,label:(0,B.__)("In the past"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is in the past: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Me),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Ip(r.value,r.unit),n=(0,gt.getDate)(e.getValue({item:t}));return n>=o&&n<=new Date},selection:"custom"},{name:xt,label:(0,B.__)("Over"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is over: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Me),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Ip(r.value,r.unit);return(0,gt.getDate)(e.getValue({item:t}))(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is: %2$s"),t.name,e[0].label),Me),filter(t,e,r){return r===e.getValue({item:t})||r===void 0},selection:"single"},{name:Pe,label:(0,B.__)("Is not"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is not: %2$s"),t.name,e[0].label),Me),filter(t,e,r){return r!==e.getValue({item:t})},selection:"single"},{name:Fr,label:(0,B.__)("Less than"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is less than: %2$s"),t.name,e[0].label),Me),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is greater than: %2$s"),t.name,e[0].label),Me),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>r},selection:"single"},{name:Br,label:(0,B.__)("Less than or equal"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is less than or equal to: %2$s"),t.name,e[0].label),Me),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})<=r},selection:"single"},{name:Hr,label:(0,B.__)("Greater than or equal"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is greater than or equal to: %2$s"),t.name,e[0].label),Me),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>=r},selection:"single"},{name:jr,label:(0,B.__)("Before"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is before: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is after: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))>o},selection:"single"},{name:Wr,label:(0,B.__)("Before (inc)"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is on or before: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))<=o},selection:"single"},{name:Gr,label:(0,B.__)("After (inc)"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is on or after: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r);return(0,gt.getDate)(e.getValue({item:t}))>=o},selection:"single"},{name:Ut,label:(0,B.__)("Contains"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s contains: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:$t,label:(0,B.__)("Doesn't contain"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s doesn't contain: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&!o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:Kt,label:(0,B.__)("Starts with"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s starts with: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().startsWith(String(r).toLowerCase())},selection:"single"},{name:qr,label:(0,B.__)("On"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r),n=(0,gt.getDate)(e.getValue({item:t}));return o.getTime()===n.getTime()},selection:"single"},{name:Yr,label:(0,B.__)("Not on"),filterText:(t,e)=>(0,Oe.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is not: %2$s"),t.name,e[0].label),Me),filter(t,e,r){if(r===void 0)return!0;let o=(0,gt.getDate)(r),n=(0,gt.getDate)(e.getValue({item:t}));return o.getTime()!==n.getTime()},selection:"single"}],Vo=t=>ja.find(e=>e.name===t),Op=()=>ja.map(t=>t.name),Rp=t=>ja.filter(e=>e.selection==="single").some(e=>e.name===t),Vp=t=>ja.some(e=>e.name===t);var et=d(R(),1),B0="Enter",H0=" ",j0=({activeElements:t,filterInView:e,filter:r})=>{if(t===void 0||t.length===0)return r.name;let o=Vo(e?.operator);return o!==void 0?o.filterText(r,t):(0,Ir.sprintf)((0,Ir.__)("Unknown status for %1$s"),r.name)};function z0({filter:t,view:e,onChangeView:r}){let o=t.operators?.map(a=>({value:a,label:Vo(a)?.label||a})),n=e.filters?.find(a=>a.field===t.field),i=n?.operator||t.operators[0];return o.length>1&&(0,et.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",className:"dataviews-filters__summary-operators-container",align:"center",children:[(0,et.jsx)(jt.FlexItem,{className:"dataviews-filters__summary-operators-filter-name",children:t.name}),(0,et.jsx)(jt.SelectControl,{className:"dataviews-filters__summary-operators-filter-select",label:(0,Ir.__)("Conditions"),value:i,options:o,onChange:a=>{let l=a,s=n?.operator,u=n?[...(e.filters??[]).map(c=>{if(c.field===t.field){let p=Vo(s)?.selection,f=Vo(l)?.selection,m=p!==f||[p,f].includes("custom");return{...c,value:m?void 0:c.value,operator:l}}return c})]:[...e.filters??[],{field:t.field,operator:l,value:void 0}];r({...e,page:1,filters:u})},size:"small",variant:"minimal",hideLabelFromVision:!0})]})}function kp({addFilterRef:t,openedFilter:e,fields:r,...o}){let n=(0,za.useRef)(null),{filter:i,view:a,onChangeView:l}=o,s=a.filters?.find(b=>b.field===i.field),u=[],c=(0,za.useMemo)(()=>{let b=r.find(x=>x.id===i.field);return b&&{...b,getValue:({item:x})=>x[b.id]}},[r,i.field]),{elements:p}=Ke({elements:i.elements,getElements:i.getElements});if(p.length>0)u=p.filter(b=>i.singleSelection?b.value===s?.value:s?.value?.includes(b.value));else if(Array.isArray(s?.value)){let b=s.value.map(x=>c?.getValueFormatted({item:{[c.id]:x},field:c})||String(x));u=[{value:s.value,label:b}]}else if(typeof s?.value=="object")u=[{value:s.value,label:s.value}];else if(s?.value!==void 0){let b=c!==void 0?c.getValueFormatted({item:{[c.id]:s.value},field:c}):String(s.value);u=[{value:s.value,label:b}]}let f=i.isPrimary,m=s?.isLocked,v=!m&&s?.value!==void 0,y=!m&&(!f||v);return(0,et.jsx)(jt.Dropdown,{defaultOpen:e===i.field,contentClassName:"dataviews-filters__summary-popover",popoverProps:{placement:"bottom-start",role:"dialog"},onClose:()=>{n.current?.focus()},renderToggle:({isOpen:b,onToggle:x})=>(0,et.jsxs)("div",{className:"dataviews-filters__summary-chip-container",children:[(0,et.jsx)(jt.Tooltip,{text:(0,Ir.sprintf)((0,Ir.__)("Filter by: %1$s"),i.name.toLowerCase()),placement:"top",children:(0,et.jsx)("div",{className:z("dataviews-filters__summary-chip",{"has-reset":y,"has-values":v,"is-not-clickable":m}),role:"button",tabIndex:m?-1:0,onClick:()=>{m||x()},onKeyDown:S=>{!m&&[B0,H0].includes(S.key)&&(x(),S.preventDefault())},"aria-disabled":m,"aria-pressed":b,"aria-expanded":b,ref:n,children:(0,et.jsx)(j0,{activeElements:u,filterInView:s,filter:i})})}),y&&(0,et.jsx)(jt.Tooltip,{text:f?(0,Ir.__)("Reset"):(0,Ir.__)("Remove"),placement:"top",children:(0,et.jsx)("button",{className:z("dataviews-filters__summary-chip-remove",{"has-values":v}),onClick:()=>{l({...a,page:1,filters:a.filters?.filter(S=>S.field!==i.field)}),f?n.current?.focus():t.current?.focus()},children:(0,et.jsx)(jt.Icon,{icon:Pn})})})]}),renderContent:()=>(0,et.jsxs)(F,{direction:"column",justify:"flex-start",children:[(0,et.jsx)(z0,{...o}),o.filter.hasElements?(0,et.jsx)(Ym,{...o,filter:{...o.filter,elements:p}}):(0,et.jsx)(Zm,{...o,fields:r})]})})}var Wa=d(q(),1),Dp=d($(),1),Np=d(j(),1);var Tr=d(R(),1),{Menu:ri}=K(Wa.privateApis);function Nu({filters:t,view:e,onChangeView:r,setOpenedFilter:o,triggerProps:n}){let i=t.filter(a=>!a.isVisible);return(0,Tr.jsxs)(ri,{children:[(0,Tr.jsx)(ri.TriggerButton,{...n}),(0,Tr.jsx)(ri.Popover,{children:i.map(a=>(0,Tr.jsx)(ri.Item,{onClick:()=>{o(a.field),r({...e,page:1,filters:[...e.filters||[],{field:a.field,value:void 0,operator:a.operators[0]}]})},children:(0,Tr.jsx)(ri.ItemLabel,{children:a.name})},a.field))})]})}function W0({filters:t,view:e,onChangeView:r,setOpenedFilter:o},n){if(!t.length||t.every(({isPrimary:a})=>a))return null;let i=t.filter(a=>!a.isVisible);return(0,Tr.jsx)(Nu,{triggerProps:{render:(0,Tr.jsx)(Wa.Button,{accessibleWhenDisabled:!0,size:"compact",className:"dataviews-filters-button",variant:"tertiary",disabled:!i.length,ref:n}),children:(0,Dp.__)("Add filter")},filters:t,view:e,onChangeView:r,setOpenedFilter:o})}var Mp=(0,Np.forwardRef)(W0);var Fp=d(q(),1),Lp=d($(),1),Bp=d(R(),1);function Hp({filters:t,view:e,onChangeView:r}){let o=i=>t.some(a=>a.field===i&&a.isPrimary),n=!e.search&&!e.filters?.some(i=>!i.isLocked&&(i.value!==void 0||!o(i.field)));return(0,Bp.jsx)(Fp.Button,{disabled:n,accessibleWhenDisabled:!0,size:"compact",variant:"tertiary",className:"dataviews-filters__reset-button",onClick:()=>{r({...e,page:1,search:"",filters:e.filters?.filter(i=>!!i.isLocked)||[]})},children:(0,Lp.__)("Reset")})}var jp=d(j(),1);function G0(t,e){return(0,jp.useMemo)(()=>{let r=[];return t.forEach(o=>{if(o.filterBy===!1||!o.hasElements&&!o.Edit)return;let n=o.filterBy.operators,i=!!o.filterBy?.isPrimary,a=e.filters?.some(l=>l.field===o.id&&!!l.isLocked)??!1;r.push({field:o.id,name:o.label,elements:o.elements,getElements:o.getElements,hasElements:o.hasElements,singleSelection:n.some(l=>Rp(l)),operators:n,isVisible:a||i||!!e.filters?.some(l=>l.field===o.id&&Vp(l.operator)),isPrimary:i,isLocked:a})}),r.sort((o,n)=>o.isLocked&&!n.isLocked?-1:!o.isLocked&&n.isLocked?1:o.isPrimary&&!n.isPrimary?-1:!o.isPrimary&&n.isPrimary?1:o.name.localeCompare(n.name)),r},[t,e])}var oi=G0;var ni=d(R(),1);function q0({className:t}){let{fields:e,view:r,onChangeView:o,openedFilter:n,setOpenedFilter:i}=(0,fn.useContext)(G),a=(0,fn.useRef)(null),l=oi(e,r),s=(0,ni.jsx)(Mp,{filters:l,view:r,onChangeView:o,ref:a,setOpenedFilter:i},"add-filter"),u=l.filter(p=>p.isVisible);if(u.length===0)return null;let c=[...u.map(p=>(0,ni.jsx)(kp,{filter:p,view:r,fields:e,onChangeView:o,addFilterRef:a,openedFilter:n},p.field)),s];return c.push((0,ni.jsx)(Hp,{filters:l,view:r,onChangeView:o},"reset-filters")),(0,ni.jsx)(F,{direction:"row",justify:"flex-start",gap:"sm",style:{width:"fit-content"},wrap:"wrap",className:t,children:c})}var ii=(0,fn.memo)(q0);var ao=d(j(),1),zp=d(q(),1);var Ga=d($(),1);var ir=d(R(),1);function Y0(){let{filters:t,view:e,onChangeView:r,setOpenedFilter:o,isShowingFilter:n,setIsShowingFilter:i}=(0,ao.useContext)(G),a=(0,ao.useRef)(null),l=(0,ao.useCallback)(m=>{r(m),i(!0)},[r,i]);if(t.length===0)return null;let s=t.some(m=>m.isVisible),u={label:(0,Ga.__)("Add filter"),"aria-expanded":!1,isPressed:!1},c={label:(0,Ga._x)("Filter","verb"),"aria-expanded":n,isPressed:n,onClick:()=>{n||o(null),i(!n)}},p=t.some(m=>m.isPrimary||m.isLocked),f=(0,ir.jsx)(zp.Button,{ref:a,className:"dataviews-filters__visibility-toggle",size:"compact",icon:An,disabled:p,accessibleWhenDisabled:!0,...s?c:u});return(0,ir.jsx)("div",{className:"dataviews-filters__container-visibility-toggle",children:s?(0,ir.jsx)(U0,{buttonRef:a,filtersCount:e.filters?.length,children:f}):(0,ir.jsx)(Nu,{filters:t,view:e,onChangeView:l,setOpenedFilter:o,triggerProps:{render:f}})})}function U0({buttonRef:t,filtersCount:e,children:r}){return(0,ao.useEffect)(()=>()=>{t.current?.focus()},[t]),(0,ir.jsxs)(ir.Fragment,{children:[r,!!e&&(0,ir.jsx)("span",{className:"dataviews-filters-toggle__count",children:e})]})}var qa=Y0;var Wp=d(j(),1);var Gp=d(R(),1);function $0(t){let{isShowingFilter:e}=(0,Wp.useContext)(G);return e?(0,Gp.jsx)(ii,{...t}):null}var Ya=$0;var qp=d(j(),1),Yp=d($(),1);var Mu=d(R(),1);function Fu({className:t}){let{actions:e=[],data:r,fields:o,getItemId:n,getItemLevel:i,hasInitiallyLoaded:a,isLoading:l,view:s,onChangeView:u,selection:c,onChangeSelection:p,setOpenedFilter:f,onClickItem:m,isItemClickable:v,renderItemLink:y,defaultLayouts:b,empty:x=(0,Mu.jsx)("p",{children:(0,Yp.__)("No results")})}=(0,qp.useContext)(G);if(!a)return null;let S=Zr.find(A=>A.type===s.type&&b[A.type])?.component;return(0,Mu.jsx)(S,{className:t,actions:e,data:r,fields:o,getItemId:n,getItemLevel:i,isLoading:l,onChangeView:u,onChangeSelection:p,selection:c,setOpenedFilter:f,onClickItem:m,renderItemLink:y,isItemClickable:v,view:s,empty:x})}var Up=d(j(),1);var mn=d(R(),1),K0=[];function Lu(){let{view:t,paginationInfo:{totalItems:e=0,totalPages:r},data:o,actions:n=K0,isLoading:i,hasInitiallyLoaded:a,hasInfiniteScrollHandler:l}=(0,Up.useContext)(G),s=!!i&&a&&!l&&!!o?.length,u=Xt(!!s),c=Wo(n,o)&&[Lo,Yi].includes(t.type);return!s&&(!e||!r||r<=1&&!c)?null:(!!e||s)&&(0,mn.jsx)("div",{className:"dataviews-footer",inert:s?"true":void 0,children:(0,mn.jsxs)(F,{direction:"row",justify:"end",align:"center",className:z("dataviews-footer__content",{"is-refreshing":u}),gap:"sm",children:[c&&(0,mn.jsx)(Qi,{}),(0,mn.jsx)(Lc,{})]})})}var $p=d($(),1),zt=d(j(),1),Kp=d(q(),1),Qp=d(Et(),1);var Xp=d(R(),1),Q0=(0,zt.memo)(function({label:e}){let{view:r,onChangeView:o}=(0,zt.useContext)(G),[n,i,a]=(0,Qp.useDebouncedInput)(r.search);(0,zt.useEffect)(()=>{i(r.search??"")},[r.search,i]);let l=(0,zt.useRef)(o),s=(0,zt.useRef)(r);(0,zt.useEffect)(()=>{l.current=o,s.current=r},[o,r]),(0,zt.useEffect)(()=>{a!==s.current?.search&&l.current({...s.current,page:1,search:a})},[a]);let u=e||(0,$p.__)("Search");return(0,Xp.jsx)(Kp.SearchControl,{className:"dataviews-search",onChange:i,value:n,label:u,placeholder:u,size:"compact"})}),Bu=Q0;var Fe=d(q(),1),Or=d($(),1),Wt=d(j(),1);var ju=d(Jp(),1),nv=d(Et(),1);var ev=d(q(),1),Hu=d($(),1),tv=d(j(),1);var rv=d(R(),1);function ov(){let t=(0,tv.useContext)(G),{view:e,onChangeView:r}=t,o=e.infiniteScrollEnabled??!1;return t.hasInfiniteScrollHandler?(0,rv.jsx)(ev.ToggleControl,{label:(0,Hu.__)("Enable infinite scroll"),help:(0,Hu.__)("Automatically load more content as you scroll, instead of showing pagination links."),checked:o,onChange:n=>{r({...e,infiniteScrollEnabled:n})}}):null}var re=d(R(),1),{Menu:ai}=K(Fe.privateApis),X0={className:"dataviews-config__popover",placement:"bottom-end",offset:9};function zu(){let{view:t,onChangeView:e,defaultLayouts:r}=(0,Wt.useContext)(G),o=Object.keys(r);if(o.length<=1)return null;let n=Zr.find(i=>t.type===i.type);return(0,re.jsxs)(ai,{children:[(0,re.jsx)(ai.TriggerButton,{render:(0,re.jsx)(Fe.Button,{size:"compact",icon:n?.icon,label:(0,Or.__)("Layout")})}),(0,re.jsx)(ai.Popover,{children:o.map(i=>{let a=Zr.find(l=>l.type===i);return a?(0,re.jsx)(ai.RadioItem,{value:i,name:"view-actions-available-view",checked:i===t.type,hideOnClick:!0,onChange:l=>{switch(l.target.value){case"list":case"grid":case"table":case"pickerGrid":case"pickerTable":case"activity":let s={...t};return"layout"in s&&delete s.layout,e({...s,type:l.target.value,...r[l.target.value]})}(0,ju.default)("Invalid dataview")},children:(0,re.jsx)(ai.ItemLabel,{children:a.label})},i):null})})]})}function Z0(){let{view:t,fields:e,onChangeView:r}=(0,Wt.useContext)(G),o=(0,Wt.useMemo)(()=>e.filter(i=>i.enableSorting!==!1).map(i=>({label:i.label,value:i.id})),[e]);return(0,re.jsx)(Fe.SelectControl,{__next40pxDefaultSize:!0,label:(0,Or.__)("Sort by"),value:t.sort?.field,options:o,onChange:n=>{r({...t,sort:{direction:t?.sort?.direction||"desc",field:n},showLevels:!1})}})}function J0(){let{view:t,fields:e,onChangeView:r}=(0,Wt.useContext)(G);if(e.filter(i=>i.enableSorting!==!1).length===0)return null;let n=t.sort?.direction;return!n&&t.sort?.field&&(n="desc"),(0,re.jsx)(Fe.__experimentalToggleGroupControl,{className:"dataviews-view-config__sort-direction",__next40pxDefaultSize:!0,isBlock:!0,label:(0,Or.__)("Order"),value:n,onChange:i=>{if(i==="asc"||i==="desc"){r({...t,sort:{direction:i,field:t.sort?.field||e.find(a=>a.enableSorting!==!1)?.id||""},showLevels:!1});return}(0,ju.default)("Invalid direction")},children:Wi.map(i=>(0,re.jsx)(Fe.__experimentalToggleGroupControlOptionIcon,{value:i,icon:Ud[i],label:qi[i]},i))})}function ew(){let{view:t,config:e,onChangeView:r}=(0,Wt.useContext)(G),{infiniteScrollEnabled:o}=t;return!e||!e.perPageSizes||e.perPageSizes.length<2||e.perPageSizes.length>6||o?null:(0,re.jsx)(Fe.__experimentalToggleGroupControl,{__next40pxDefaultSize:!0,isBlock:!0,label:(0,Or.__)("Items per page"),value:t.perPage||10,disabled:!t?.sort?.field,onChange:n=>{let i=typeof n=="number"||n===void 0?n:parseInt(n,10);r({...t,perPage:i,page:1})},children:e.perPageSizes.map(n=>(0,re.jsx)(Fe.__experimentalToggleGroupControlOption,{value:n,label:n.toString()},n))})}function tw(){let{onReset:t}=(0,Wt.useContext)(G);return t===void 0?null:(0,re.jsx)(Fe.Button,{variant:"tertiary",size:"compact",disabled:t===!1,accessibleWhenDisabled:!0,className:"dataviews-view-config__reset-button",onClick:()=>{typeof t=="function"&&t()},children:(0,Or.__)("Reset view")})}function Wu(){let{view:t,onReset:e}=(0,Wt.useContext)(G),r=(0,nv.useInstanceId)(iv,"dataviews-view-config-dropdown"),o=Zr.find(i=>i.type===t.type),n=typeof e=="function";return(0,re.jsx)(Fe.Dropdown,{expandOnMobile:!0,popoverProps:{...X0,id:r},renderToggle:({onToggle:i,isOpen:a})=>(0,re.jsxs)("div",{className:"dataviews-view-config__toggle-wrapper",children:[(0,re.jsx)(Fe.Button,{size:"compact",icon:Js,label:(0,Or._x)("View options","View is used as a noun"),onClick:i,"aria-expanded":a?"true":"false","aria-controls":r}),n&&(0,re.jsx)("span",{className:"dataviews-view-config__modified-indicator"})]}),renderContent:()=>(0,re.jsx)(Fe.__experimentalDropdownContentWrapper,{paddingSize:"medium",className:"dataviews-config__popover-content-wrapper",children:(0,re.jsxs)(F,{direction:"column",className:"dataviews-view-config",gap:"xl",children:[(0,re.jsxs)(F,{direction:"row",justify:"space-between",align:"center",className:"dataviews-view-config__header",children:[(0,re.jsx)(Fe.__experimentalHeading,{level:2,className:"dataviews-settings-section__title",children:(0,Or.__)("Appearance")}),(0,re.jsx)(tw,{})]}),(0,re.jsxs)(F,{direction:"column",gap:"lg",children:[(0,re.jsxs)(F,{direction:"row",gap:"sm",className:"dataviews-view-config__sort-controls",children:[(0,re.jsx)(Z0,{}),(0,re.jsx)(J0,{})]}),!!o?.viewConfigOptions&&(0,re.jsx)(o.viewConfigOptions,{}),(0,re.jsx)(ov,{}),(0,re.jsx)(ew,{}),(0,re.jsx)(Ji,{})]})]})})})}function iv(){return(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(zu,{}),(0,re.jsx)(Wu,{})]})}var rw=(0,Wt.memo)(iv),av=rw;var sv=d(q(),1),lv=d(j(),1);function pe(t,e){let r;return t?.required&&e?.required?r=e?.required?.message?e.required:void 0:t?.pattern&&e?.pattern?r=e.pattern:t?.min&&e?.min?r=e.min:t?.max&&e?.max?r=e.max:t?.minLength&&e?.minLength?r=e.minLength:t?.maxLength&&e?.maxLength?r=e.maxLength:t?.elements&&e?.elements?r=e.elements:e?.custom&&(r=e.custom),r}var uv=d(R(),1),{ValidatedCheckboxControl:ow}=K(sv.privateApis);function dv({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,label:s,description:u,isValid:c}=t,p=(0,lv.useCallback)(()=>{e(l({item:r,value:!a({item:r})}))},[r,a,e,l]);return(0,uv.jsx)(ow,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:pe(c,i),hidden:o,label:s,help:u,checked:a({item:r}),onChange:p})}var Ua=d(q(),1),cv=d(j(),1);var Gu=d(R(),1),{ValidatedComboboxControl:nw}=K(Ua.privateApis);function $a({data:t,field:e,onChange:r,hideLabelFromVision:o,validity:n}){let{label:i,description:a,placeholder:l,getValue:s,setValue:u,isValid:c}=e,p=s({item:t})??"",f=(0,cv.useCallback)(y=>r(u({item:t,value:y??""})),[t,r,u]),{elements:m,isLoading:v}=Ke({elements:e.elements,getElements:e.getElements});return v?(0,Gu.jsx)(Ua.Spinner,{}):(0,Gu.jsx)(nw,{required:!!e.isValid?.required,customValidity:pe(c,n),label:i,value:p,help:a,placeholder:l,options:m,onChange:f,hideLabelFromVision:o,allowReset:!0,expandOnFocus:!0})}var Za=d(q(),1),Bt=d(j(),1),Xa=d($(),1),Vt=d(Ro(),1);var vn=d(q(),1),qu=d(j(),1),ar=d($(),1);var pn=d(R(),1),iw={[ft]:[{value:"days",label:(0,ar.__)("Days")},{value:"weeks",label:(0,ar.__)("Weeks")},{value:"months",label:(0,ar.__)("Months")},{value:"years",label:(0,ar.__)("Years")}],[xt]:[{value:"days",label:(0,ar.__)("Days ago")},{value:"weeks",label:(0,ar.__)("Weeks ago")},{value:"months",label:(0,ar.__)("Months ago")},{value:"years",label:(0,ar.__)("Years ago")}]};function Ka({className:t,data:e,field:r,onChange:o,hideLabelFromVision:n,operator:i}){let a=iw[i===ft?"inThePast":"over"],{id:l,label:s,getValue:u,setValue:c}=r,p=u({item:e}),{value:f="",unit:m=a[0].value}=p&&typeof p=="object"?p:{},v=(0,qu.useCallback)(b=>o(c({item:e,value:{value:Number(b),unit:m}})),[o,c,e,m]),y=(0,qu.useCallback)(b=>o(c({item:e,value:{value:f,unit:b}})),[o,c,e,f]);return(0,pn.jsx)(vn.BaseControl,{id:l,className:z(t,"dataviews-controls__relative-date"),label:s,hideLabelFromVision:n,children:(0,pn.jsxs)(F,{direction:"row",gap:"sm",children:[(0,pn.jsx)(vn.__experimentalNumberControl,{__next40pxDefaultSize:!0,className:"dataviews-controls__relative-date-number",spinControls:"none",min:1,step:1,value:f,onChange:v}),(0,pn.jsx)(vn.SelectControl,{className:"dataviews-controls__relative-date-unit",__next40pxDefaultSize:!0,label:(0,ar.__)("Unit"),value:m,options:a,onChange:y,hideLabelFromVision:!0})]})})}var fv=d(Ro(),1);function Qa(t){if(!t)return null;let e=(0,fv.getDate)(t);return e&&ln(e)?e:null}var so=d(R(),1),{DateCalendar:aw,ValidatedInputControl:sw}=K(Za.privateApis),lw=t=>t?(0,Vt.dateI18n)("Y-m-d\\TH:i",(0,Vt.getDate)(t)):"";function uw({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,description:s,setValue:u,getValue:c,isValid:p}=e,f=c({item:t}),m=typeof f=="string"?f:void 0,[v,y]=(0,Bt.useState)(()=>Qa(m)||new Date),b=(0,Bt.useRef)(null),x=(0,Bt.useRef)(void 0),S=(0,Bt.useRef)(null),A=(0,Bt.useCallback)(k=>r(u({item:t,value:k})),[t,r,u]);(0,Bt.useEffect)(()=>()=>{x.current&&clearTimeout(x.current)},[]);let V=(0,Bt.useCallback)(k=>{let g;if(k){let P=(0,Vt.dateI18n)("Y-m-d",k),_;m?_=(0,Vt.dateI18n)("H:i",(0,Vt.getDate)(m)):_=(0,Vt.dateI18n)("H:i",k),g=(0,Vt.getDate)(`${P}T${_}`).toISOString(),A(g),x.current&&clearTimeout(x.current)}else A(void 0);S.current=b.current&&b.current.ownerDocument.activeElement,x.current=setTimeout(()=>{b.current&&(b.current.focus(),b.current.blur(),A(g),S.current&&S.current instanceof HTMLElement&&S.current.focus())},0)},[A,m]),T=(0,Bt.useCallback)(k=>{if(k){let g=(0,Vt.getDate)(k);A(g.toISOString());let P=Qa(g.toISOString());P&&y(P)}else A(void 0)},[A]),{format:N}=e,D=N.weekStartsOn??(0,Vt.getSettings)().l10n.startOfWeek,{timezone:{string:E}}=(0,Vt.getSettings)(),I=l;return p?.required&&!n&&!o?I=`${l} (${(0,Xa.__)("Required")})`:!p?.required&&n&&!o&&(I=`${l} (${(0,Xa.__)("Optional")})`),(0,so.jsx)(Za.BaseControl,{id:a,label:I,help:s,hideLabelFromVision:o,children:(0,so.jsxs)(F,{direction:"column",gap:"lg",children:[(0,so.jsx)(aw,{style:{width:"100%"},selected:m&&Qa(m)||void 0,onSelect:V,month:v,onMonthChange:y,timeZone:E||void 0,weekStartsOn:D}),(0,so.jsx)(sw,{ref:b,__next40pxDefaultSize:!0,required:!!p?.required,customValidity:pe(p,i),type:"datetime-local",label:(0,Xa.__)("Date time"),hideLabelFromVision:!0,value:lw(m),onChange:T})]})})}function mv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===ft||i===xt?(0,so.jsx)(Ka,{className:"dataviews-controls__datetime",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):(0,so.jsx)(uw,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var ut=d(q(),1),de=d(j(),1),qe=d($(),1),lt=d(Ro(),1);var ve=d(R(),1),{DateCalendar:dw,DateRangeCalendar:cw}=K(ut.privateApis),fw=[{id:"today",label:(0,qe.__)("Today"),getValue:()=>(0,lt.getDate)(null)},{id:"yesterday",label:(0,qe.__)("Yesterday"),getValue:()=>{let t=(0,lt.getDate)(null);return Oo(t,1)}},{id:"past-week",label:(0,qe.__)("Past week"),getValue:()=>{let t=(0,lt.getDate)(null);return Oo(t,7)}},{id:"past-month",label:(0,qe.__)("Past month"),getValue:()=>{let t=(0,lt.getDate)(null);return Ba(t,1)}}],mw=[{id:"last-7-days",label:(0,qe.__)("Last 7 days"),getValue:()=>{let t=(0,lt.getDate)(null);return[Oo(t,7),t]}},{id:"last-30-days",label:(0,qe.__)("Last 30 days"),getValue:()=>{let t=(0,lt.getDate)(null);return[Oo(t,30),t]}},{id:"month-to-date",label:(0,qe.__)("Month to date"),getValue:()=>{let t=(0,lt.getDate)(null);return[sp(t),t]}},{id:"last-year",label:(0,qe.__)("Last year"),getValue:()=>{let t=(0,lt.getDate)(null);return[Ha(t,1),t]}},{id:"year-to-date",label:(0,qe.__)("Year to date"),getValue:()=>{let t=(0,lt.getDate)(null);return[Ma(t),t]}}],gn=t=>{if(!t)return null;let e=(0,lt.getDate)(t);return e&&ln(e)?e:null},Yu=t=>t?typeof t=="string"?t:ku(t,"yyyy-MM-dd"):"";function pv({field:t,validity:e,inputRefs:r,isTouched:o,setIsTouched:n,children:i}){let{isValid:a}=t,[l,s]=(0,de.useState)(void 0),u=(0,de.useCallback)(()=>{let p=Array.isArray(r)?r:[r];for(let f of p){let m=f.current;if(m&&!m.validity.valid){s({type:"invalid",message:m.validationMessage});return}}s(void 0)},[r]);return(0,de.useEffect)(()=>{let p=Array.isArray(r)?r:[r],f=e?pe(a,e):void 0;for(let m of p){let v=m.current;v&&v.setCustomValidity(f?.type==="invalid"&&f.message?f.message:"")}},[r,a,e]),(0,de.useEffect)(()=>{let p=Array.isArray(r)?r:[r],f=m=>{m.preventDefault(),n(!0)};for(let m of p)m.current?.addEventListener("invalid",f);return()=>{for(let m of p)m.current?.removeEventListener("invalid",f)}},[r,n]),(0,de.useEffect)(()=>{if(!o)return;let p=e?pe(a,e):void 0;p?s(p):u()},[o,a,e,u]),(0,ve.jsxs)("div",{onBlur:p=>{o||(!p.relatedTarget||!p.currentTarget.contains(p.relatedTarget))&&n(!0)},children:[i,(0,ve.jsx)("div",{"aria-live":"polite",children:l&&(0,ve.jsxs)("p",{className:z("components-validated-control__indicator",l.type==="invalid"?"is-invalid":void 0),children:[(0,ve.jsx)(ut.Icon,{className:"components-validated-control__indicator-icon",icon:ol,size:16,fill:"currentColor"}),l.message]})})]})}function pw({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,setValue:s,getValue:u,isValid:c,format:p}=e,[f,m]=(0,de.useState)(null),v=p.weekStartsOn??(0,lt.getSettings)().l10n.startOfWeek,y=u({item:t}),b=typeof y=="string"?y:void 0,[x,S]=(0,de.useState)(()=>gn(b)||new Date),[A,V]=(0,de.useState)(!1),T=(0,de.useRef)(null),N=(0,de.useCallback)(P=>r(s({item:t,value:P})),[t,r,s]),D=(0,de.useCallback)(P=>{let _=P?ku(P,"yyyy-MM-dd"):void 0;N(_),m(null),V(!0)},[N]),E=(0,de.useCallback)(P=>{let _=P.getValue(),h=Yu(_);S(_),N(h),m(P.id),V(!0)},[N]),I=(0,de.useCallback)(P=>{if(N(P),P){let _=gn(P);_&&S(_)}m(null),V(!0)},[N]),{timezone:{string:k}}=(0,lt.getSettings)(),g=l;return c?.required&&!n?g=`${l} (${(0,qe.__)("Required")})`:!c?.required&&n&&(g=`${l} (${(0,qe.__)("Optional")})`),(0,ve.jsx)(pv,{field:e,validity:i,inputRefs:T,isTouched:A,setIsTouched:V,children:(0,ve.jsx)(ut.BaseControl,{id:a,className:"dataviews-controls__date",label:g,hideLabelFromVision:o,children:(0,ve.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ve.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[fw.map(P=>{let _=f===P.id;return(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:_,size:"small",onClick:()=>E(P),children:P.label},P.id)}),(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!f,size:"small",disabled:!!f,accessibleWhenDisabled:!1,children:(0,qe.__)("Custom")})]}),(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:T,type:"date",label:(0,qe.__)("Date"),hideLabelFromVision:!0,value:b,onChange:I,required:!!e.isValid?.required}),(0,ve.jsx)(dw,{style:{width:"100%"},selected:b&&gn(b)||void 0,onSelect:D,month:x,onMonthChange:S,timeZone:k||void 0,weekStartsOn:v})]})})})}function vw({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,getValue:s,setValue:u,format:c}=e,p,f=s({item:t});Array.isArray(f)&&f.length===2&&f.every(h=>typeof h=="string")&&(p=f);let m=c.weekStartsOn??(0,lt.getSettings)().l10n.startOfWeek,v=(0,de.useCallback)(h=>{r(u({item:t,value:h}))},[t,r,u]),[y,b]=(0,de.useState)(null),x=(0,de.useMemo)(()=>{if(!p)return{from:void 0,to:void 0};let[h,O]=p;return{from:gn(h)||void 0,to:gn(O)||void 0}},[p]),[S,A]=(0,de.useState)(()=>x.from||new Date),[V,T]=(0,de.useState)(!1),N=(0,de.useRef)(null),D=(0,de.useRef)(null),E=(0,de.useCallback)((h,O)=>{h&&O?v([Yu(h),Yu(O)]):!h&&!O&&v(void 0)},[v]),I=(0,de.useCallback)(h=>{E(h?.from,h?.to),b(null),T(!0)},[E]),k=(0,de.useCallback)(h=>{let[O,w]=h.getValue();A(O),E(O,w),b(h.id),T(!0)},[E]),g=(0,de.useCallback)((h,O)=>{let[w,C]=p||[void 0,void 0];if(E(h==="from"?O:w,h==="to"?O:C),O){let ae=gn(O);ae&&A(ae)}b(null),T(!0)},[p,E]),{timezone:P}=(0,lt.getSettings)(),_=l;return e.isValid?.required&&!n?_=`${l} (${(0,qe.__)("Required")})`:!e.isValid?.required&&n&&(_=`${l} (${(0,qe.__)("Optional")})`),(0,ve.jsx)(pv,{field:e,validity:i,inputRefs:[N,D],isTouched:V,setIsTouched:T,children:(0,ve.jsx)(ut.BaseControl,{id:a,className:"dataviews-controls__date",label:_,hideLabelFromVision:o,children:(0,ve.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ve.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[mw.map(h=>{let O=y===h.id;return(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:O,size:"small",onClick:()=>k(h),children:h.label},h.id)}),(0,ve.jsx)(ut.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!y,size:"small",accessibleWhenDisabled:!1,disabled:!!y,children:(0,qe.__)("Custom")})]}),(0,ve.jsxs)(F,{direction:"row",gap:"sm",justify:"space-between",className:"dataviews-controls__date-range-inputs",children:[(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:N,type:"date",label:(0,qe.__)("From"),hideLabelFromVision:!0,value:p?.[0],onChange:h=>g("from",h),required:!!e.isValid?.required}),(0,ve.jsx)(ut.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:D,type:"date",label:(0,qe.__)("To"),hideLabelFromVision:!0,value:p?.[1],onChange:h=>g("to",h),required:!!e.isValid?.required})]}),(0,ve.jsx)(cw,{style:{width:"100%"},selected:x,onSelect:I,month:S,onMonthChange:A,timeZone:P.string||void 0,weekStartsOn:m})]})})})}function vv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===ft||i===xt?(0,ve.jsx)(Ka,{className:"dataviews-controls__date",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):i===ct?(0,ve.jsx)(vw,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a}):(0,ve.jsx)(pw,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var Ja=d(q(),1),gv=d(j(),1);var Uu=d(R(),1),{ValidatedSelectControl:gw}=K(Ja.privateApis);function es({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{type:a,label:l,description:s,getValue:u,setValue:c,isValid:p}=e,f=a==="array",m=u({item:t})??(f?[]:""),v=(0,gv.useCallback)(x=>r(c({item:t,value:x})),[t,r,c]),{elements:y,isLoading:b}=Ke({elements:e.elements,getElements:e.getElements});return b?(0,Uu.jsx)(Ja.Spinner,{}):(0,Uu.jsx)(gw,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(p,i),label:l,value:m,help:s,options:y,onChange:v,__next40pxDefaultSize:!0,hideLabelFromVision:o,multiple:f})}var $u=d(R(),1),hw=10;function hv(t){let{field:e}=t,{elements:r}=Ke({elements:e.elements,getElements:e.getElements});return r.length>=hw?(0,$u.jsx)($a,{...t}):(0,$u.jsx)(es,{...t})}var rs=d(q(),1);var bv=d(q(),1),xv=d(j(),1);var wv=d(R(),1),{ValidatedInputControl:bw}=K(bv.privateApis);function sr({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,type:i,prefix:a,suffix:l,validity:s}){let{label:u,placeholder:c,description:p,getValue:f,setValue:m,isValid:v}=e,y=f({item:t}),b=(0,xv.useCallback)(x=>r(m({item:t,value:x})),[t,m,r]);return(0,wv.jsx)(bw,{required:!!v.required,markWhenOptional:n,customValidity:pe(v,s),label:u,placeholder:c,value:y??"",help:p,onChange:b,hideLabelFromVision:o,type:i,prefix:a,suffix:l,pattern:v.pattern?v.pattern.constraint:void 0,minLength:v.minLength?v.minLength.constraint:void 0,maxLength:v.maxLength?v.maxLength.constraint:void 0,__next40pxDefaultSize:!0})}var ts=d(R(),1);function _v({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,ts.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"email",prefix:(0,ts.jsx)(rs.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,ts.jsx)(rs.Icon,{icon:tl})})})}var ns=d(q(),1);var os=d(R(),1);function yv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,os.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"tel",prefix:(0,os.jsx)(ns.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,os.jsx)(ns.Icon,{icon:fl})})})}var as=d(q(),1);var is=d(R(),1);function Sv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,is.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"url",prefix:(0,is.jsx)(as.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,is.jsx)(as.Icon,{icon:dl})})})}var Rr=d(q(),1),si=d(j(),1),ss=d($(),1);var lo=d(R(),1),{ValidatedNumberControl:xw}=K(Rr.privateApis);function Cv(t){if(t===""||t===void 0)return"";let e=Number(t);return Number.isFinite(e)?e:""}function ww({value:t,onChange:e,hideLabelFromVision:r,step:o}){let[n="",i=""]=t,a=(0,si.useCallback)(s=>e([Cv(s),i]),[e,i]),l=(0,si.useCallback)(s=>e([n,Cv(s)]),[e,n]);return(0,lo.jsx)(Rr.BaseControl,{help:(0,ss.__)("The max. value must be greater than the min. value."),children:(0,lo.jsxs)(Rr.Flex,{direction:"row",gap:4,children:[(0,lo.jsx)(Rr.__experimentalNumberControl,{label:(0,ss.__)("Min."),value:n,max:i?Number(i)-o:void 0,onChange:a,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o}),(0,lo.jsx)(Rr.__experimentalNumberControl,{label:(0,ss.__)("Max."),value:i,min:n?Number(n)+o:void 0,onChange:l,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o})]})})}function ls({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){let l=e.format?.decimals??0,s=Math.pow(10,Math.abs(l)*-1),{label:u,description:c,getValue:p,setValue:f,isValid:m}=e,v=p({item:t})??"",y=(0,si.useCallback)(x=>{r(f({item:t,value:["",void 0].includes(x)?void 0:Number(x)}))},[t,r,f]),b=(0,si.useCallback)(x=>{r(f({item:t,value:x}))},[t,r,f]);if(i===ct){let x=["",""];return Array.isArray(v)&&v.length===2&&v.every(S=>typeof S=="number"||S==="")&&(x=v),(0,lo.jsx)(ww,{value:x,onChange:b,hideLabelFromVision:o,step:s})}return(0,lo.jsx)(xw,{required:!!m.required,markWhenOptional:n,customValidity:pe(m,a),label:u,help:c,value:v,onChange:y,__next40pxDefaultSize:!0,hideLabelFromVision:o,step:s,min:m.min?m.min.constraint:void 0,max:m.max?m.max.constraint:void 0})}var Ev=d(R(),1);function Pv(t){return(0,Ev.jsx)(ls,{...t})}var Av=d(R(),1);function Iv(t){return(0,Av.jsx)(ls,{...t})}var us=d(q(),1),Tv=d(j(),1);var Ku=d(R(),1),{ValidatedRadioControl:_w}=K(us.privateApis);function Ov({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:c}=e,{elements:p,isLoading:f}=Ke({elements:e.elements,getElements:e.getElements}),m=s({item:t}),v=(0,Tv.useCallback)(y=>r(u({item:t,value:y})),[t,r,u]);return f?(0,Ku.jsx)(us.Spinner,{}):(0,Ku.jsx)(_w,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(c,i),label:a,help:l,onChange:v,options:p,selected:m,hideLabelFromVision:o})}var Qu=d(j(),1);var Rv=d(R(),1);function Vv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{prefix:l,suffix:s}=i||{};return(0,Rv.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a,prefix:l?(0,Qu.createElement)(l):void 0,suffix:s?(0,Qu.createElement)(s):void 0})}var kv=d(q(),1),Dv=d(j(),1);var Nv=d(R(),1),{ValidatedToggleControl:yw}=K(kv.privateApis);function Mv({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:c}=t,p=(0,Dv.useCallback)(()=>{e(u({item:r,value:!s({item:r})}))},[e,u,r,s]);return(0,Nv.jsx)(yw,{required:!!c.required,markWhenOptional:n,customValidity:pe(c,i),hidden:o,label:a,help:l,checked:s({item:r}),onChange:p})}var Fv=d(q(),1),Lv=d(j(),1);var Bv=d(R(),1),{ValidatedTextareaControl:Sw}=K(Fv.privateApis);function Hv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{rows:l=4}=i||{},{label:s,placeholder:u,description:c,setValue:p,isValid:f}=e,m=e.getValue({item:t}),v=(0,Lv.useCallback)(y=>r(p({item:t,value:y})),[t,r,p]);return(0,Bv.jsx)(Sw,{required:!!f.required,markWhenOptional:n,customValidity:pe(f,a),label:s,placeholder:u,value:m??"",help:c,onChange:v,rows:l,minLength:f.minLength?f.minLength.constraint:void 0,maxLength:f.maxLength?f.maxLength.constraint:void 0,__next40pxDefaultSize:!0,hideLabelFromVision:o})}var hn=d(q(),1),jv=d(j(),1);var ds=d(R(),1),{ValidatedToggleGroupControl:Cw}=K(hn.privateApis);function zv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,isValid:s}=e,u=a({item:t}),c=(0,jv.useCallback)(v=>r(l({item:t,value:v})),[t,r,l]),{elements:p,isLoading:f}=Ke({elements:e.elements,getElements:e.getElements});if(f)return(0,ds.jsx)(hn.Spinner,{});if(p.length===0)return null;let m=p.find(v=>v.value===u);return(0,ds.jsx)(Cw,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(s,i),__next40pxDefaultSize:!0,isBlock:!0,label:e.label,help:m?.description||e.description,onChange:c,value:u,hideLabelFromVision:o,children:p.map(v=>(0,ds.jsx)(hn.__experimentalToggleGroupControlOption,{label:v.label,value:v.value},v.value))})}var cs=d(q(),1),fs=d(j(),1);var li=d(R(),1),{ValidatedFormTokenField:Ew}=K(cs.privateApis);function Wv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,getValue:s,setValue:u,isValid:c}=e,p=s({item:t}),{elements:f,isLoading:m}=Ke({elements:e.elements,getElements:e.getElements}),v=(0,fs.useMemo)(()=>Array.isArray(p)?p.map(b=>f?.find(S=>S.value===b)||{value:b,label:b}):[],[p,f]),y=(0,fs.useCallback)(b=>{let x=b.map(S=>typeof S=="object"&&"value"in S?S.value:S);r(u({item:t,value:x}))},[r,u,t]);return m?(0,li.jsx)(cs.Spinner,{}):(0,li.jsx)(Ew,{required:!!c?.required,markWhenOptional:n,customValidity:pe(c,i),label:o?void 0:a,value:v,onChange:y,placeholder:l,suggestions:f?.map(b=>b.value),__experimentalValidateInput:b=>e.isValid?.elements&&f?f.some(x=>x.value===b||x.label===b):!0,__experimentalExpandOnFocus:f&&f.length>0,__experimentalShowHowTo:!e.isValid?.elements,displayTransform:b=>typeof b=="object"&&"label"in b?b.label:typeof b=="string"&&f&&f.find(S=>S.value===b)?.label||b,__experimentalRenderItem:({item:b})=>{if(typeof b=="string"&&f){let x=f.find(S=>S.value===b);return(0,li.jsx)("span",{children:x?.label||b})}return(0,li.jsx)("span",{children:b})}})}var Pw={grad:.9,turn:360,rad:360/(2*Math.PI)},Vr=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},Qe=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},Ht=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},Zv=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},Gv=function(t){return{r:Ht(t.r,0,255),g:Ht(t.g,0,255),b:Ht(t.b,0,255),a:Ht(t.a)}},Xu=function(t){return{r:Qe(t.r),g:Qe(t.g),b:Qe(t.b),a:Qe(t.a,3)}},Aw=/^#([0-9a-f]{3,8})$/i,ms=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},Jv=function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=Math.max(e,r,o),a=i-Math.min(e,r,o),l=a?i===e?(r-o)/a:i===r?2+(o-e)/a:4+(e-r)/a:0;return{h:60*(l<0?l+6:l),s:i?a/i*100:0,v:i/255*100,a:n}},eg=function(t){var e=t.h,r=t.s,o=t.v,n=t.a;e=e/360*6,r/=100,o/=100;var i=Math.floor(e),a=o*(1-r),l=o*(1-(e-i)*r),s=o*(1-(1-e+i)*r),u=i%6;return{r:255*[o,l,a,a,s,o][u],g:255*[s,o,o,l,a,a][u],b:255*[a,a,s,o,o,l][u],a:n}},qv=function(t){return{h:Zv(t.h),s:Ht(t.s,0,100),l:Ht(t.l,0,100),a:Ht(t.a)}},Yv=function(t){return{h:Qe(t.h),s:Qe(t.s),l:Qe(t.l),a:Qe(t.a,3)}},Uv=function(t){return eg((r=(e=t).s,{h:e.h,s:(r*=((o=e.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:e.a}));var e,r,o},ui=function(t){return{h:(e=Jv(t)).h,s:(n=(200-(r=e.s))*(o=e.v)/100)>0&&n<200?r*o/100/(n<=100?n:200-n)*100:0,l:n/2,a:e.a};var e,r,o,n},Iw=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Tw=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Ow=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Rw=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,$v={string:[[function(t){var e=Aw.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?Qe(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?Qe(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=Ow.exec(t)||Rw.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:Gv({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=Iw.exec(t)||Tw.exec(t);if(!e)return null;var r,o,n=qv({h:(r=e[1],o=e[2],o===void 0&&(o="deg"),Number(r)*(Pw[o]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return Uv(n)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=n===void 0?1:n;return Vr(e)&&Vr(r)&&Vr(o)?Gv({r:Number(e),g:Number(r),b:Number(o),a:Number(i)}):null},"rgb"],[function(t){var e=t.h,r=t.s,o=t.l,n=t.a,i=n===void 0?1:n;if(!Vr(e)||!Vr(r)||!Vr(o))return null;var a=qv({h:Number(e),s:Number(r),l:Number(o),a:Number(i)});return Uv(a)},"hsl"],[function(t){var e=t.h,r=t.s,o=t.v,n=t.a,i=n===void 0?1:n;if(!Vr(e)||!Vr(r)||!Vr(o))return null;var a=(function(l){return{h:Zv(l.h),s:Ht(l.s,0,100),v:Ht(l.v,0,100),a:Ht(l.a)}})({h:Number(e),s:Number(r),v:Number(o),a:Number(i)});return eg(a)},"hsv"]]},Kv=function(t,e){for(var r=0;r=.5},t.prototype.toHex=function(){return e=Xu(this.rgba),r=e.r,o=e.g,n=e.b,a=(i=e.a)<1?ms(Qe(255*i)):"","#"+ms(r)+ms(o)+ms(n)+a;var e,r,o,n,i,a},t.prototype.toRgb=function(){return Xu(this.rgba)},t.prototype.toRgbString=function(){return e=Xu(this.rgba),r=e.r,o=e.g,n=e.b,(i=e.a)<1?"rgba("+r+", "+o+", "+n+", "+i+")":"rgb("+r+", "+o+", "+n+")";var e,r,o,n,i},t.prototype.toHsl=function(){return Yv(ui(this.rgba))},t.prototype.toHslString=function(){return e=Yv(ui(this.rgba)),r=e.h,o=e.s,n=e.l,(i=e.a)<1?"hsla("+r+", "+o+"%, "+n+"%, "+i+")":"hsl("+r+", "+o+"%, "+n+"%)";var e,r,o,n,i},t.prototype.toHsv=function(){return e=Jv(this.rgba),{h:Qe(e.h),s:Qe(e.s),v:Qe(e.v),a:Qe(e.a,3)};var e},t.prototype.invert=function(){return dt({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),dt(Zu(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),dt(Zu(this.rgba,-e))},t.prototype.grayscale=function(){return dt(Zu(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),dt(Qv(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),dt(Qv(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?dt({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):Qe(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=ui(this.rgba);return typeof e=="number"?dt({h:e,s:r.s,l:r.l,a:r.a}):Qe(r.h)},t.prototype.isEqual=function(e){return this.toHex()===dt(e).toHex()},t})(),dt=function(t){return t instanceof Xv?t:new Xv(t)};var Ct=d(q(),1),ed=d(j(),1),tg=d($(),1);var kr=d(R(),1),{ValidatedInputControl:kw}=K(Ct.privateApis),Dw=({color:t,onColorChange:e})=>{let r=t&&dt(t).isValid()?t:"#ffffff";return(0,kr.jsx)(Ct.Dropdown,{className:"dataviews-controls__color-picker-dropdown",popoverProps:{resize:!1},renderToggle:({onToggle:o})=>(0,kr.jsx)(Ct.Button,{onClick:o,"aria-label":(0,tg.__)("Open color picker"),size:"small",icon:()=>(0,kr.jsx)(Ct.ColorIndicator,{colorValue:r})}),renderContent:()=>(0,kr.jsx)(Ct.__experimentalDropdownContentWrapper,{paddingSize:"none",children:(0,kr.jsx)(Ct.ColorPicker,{color:r,onChange:e,enableAlpha:!0})})})};function rg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,description:s,setValue:u,isValid:c}=e,p=e.getValue({item:t})||"",f=(0,ed.useCallback)(v=>{r(u({item:t,value:v}))},[t,r,u]),m=(0,ed.useCallback)(v=>{r(u({item:t,value:v||""}))},[t,r,u]);return(0,kr.jsx)(kw,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:pe(c,i),label:a,placeholder:l,value:p,help:s,onChange:m,hideLabelFromVision:o,type:"text",prefix:(0,kr.jsx)(Ct.__experimentalInputControlPrefixWrapper,{variant:"control",children:(0,kr.jsx)(Dw,{color:p,onColorChange:f})})})}var vs=d(q(),1),gs=d(j(),1),td=d($(),1);var ps=d(R(),1);function og({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let[a,l]=(0,gs.useState)(!1),s=(0,gs.useCallback)(()=>{l(u=>!u)},[]);return(0,ps.jsx)(sr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:a?"text":"password",suffix:(0,ps.jsx)(vs.__experimentalInputControlSuffixWrapper,{variant:"control",children:(0,ps.jsx)(vs.Button,{icon:a?Tn:_l,onClick:s,size:"small",label:a?(0,td.__)("Hide password"):(0,td.__)("Show password")})})})}function hs(t){return Array.isArray(t.elements)&&t.elements.length>0||typeof t.getElements=="function"}var ig=d(R(),1),ng={adaptiveSelect:hv,array:Wv,checkbox:dv,color:rg,combobox:$a,datetime:mv,date:vv,email:_v,telephone:yv,url:Sv,integer:Pv,number:Iv,password:og,radio:Ov,select:es,text:Vv,toggle:Mv,textarea:Hv,toggleGroup:zv};function Nw(t){return t&&typeof t=="object"&&typeof t.control=="string"}function Mw(t){let{control:e,...r}=t,o=bs(e);return o===null?null:function(i){return(0,ig.jsx)(o,{...i,config:r})}}function ag(t,e){return typeof t.Edit=="function"?t.Edit:typeof t.Edit=="string"?bs(t.Edit):Nw(t.Edit)?Mw(t.Edit):hs(t)&&t.type!=="array"?bs("adaptiveSelect"):e===null?null:bs(e)}function bs(t){return Object.keys(ng).includes(t)?ng[t]:null}function Fw(t,e,r){if(t.filterBy===!1)return!1;let o=t.filterBy?.operators?.filter(n=>r.includes(n))??e;return o.length===0?!1:{isPrimary:!!t.filterBy?.isPrimary,operators:o}}var sg=Fw;var Lw=t=>({item:e})=>{let r=t.split("."),o=e;for(let n of r)o.hasOwnProperty(n)?o=o[n]:o=void 0;return o},lg=Lw;var Bw=t=>({value:e})=>{let r=t.split("."),o={},n=o;for(let i of r.slice(0,-1))n[i]={},n=n[i];return n[r.at(-1)]=e,o},ug=Bw;var cg=d($(),1);function xs({item:t,field:e}){let{elements:r,isLoading:o}=Ke({elements:e.elements,getElements:e.getElements}),n=e.getValue({item:t});return o||r.length===0?n:r?.find(i=>i.value===n)?.label||e.getValue({item:t})}var dg=d(R(),1);function Re({item:t,field:e}){return e.hasElements?(0,dg.jsx)(xs,{item:t,field:e}):e.getValueFormatted({item:t,field:e})}var lr=(t,e,r)=>r==="asc"?t.localeCompare(e):e.localeCompare(t);function Ve(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)}function ur(t,e){if(typeof e.isValid.minLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length>=e.isValid.minLength.constraint}function dr(t,e){if(typeof e.isValid.maxLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length<=e.isValid.maxLength.constraint}function cr(t,e){if(e.isValid.pattern?.constraint===void 0)return!0;try{let r=new RegExp(e.isValid.pattern.constraint),o=e.getValue({item:t});return[void 0,"",null].includes(o)?!0:r.test(String(o))}catch{return!1}}function we(t,e){let o=(e.elements??[]).map(i=>i.value);if(o.length===0)return!0;let n=e.getValue({item:t});return[].concat(n).every(i=>o.includes(i))}function Hw({item:t,field:e}){return e.getValue({item:t})}var ht=Hw;var jw=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function zw(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!jw.test(r)?(0,cg.__)("Value must be a valid email address."):null}var fg={type:"email",render:Re,Edit:"email",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Ut,$t,Kt,Se,Ce,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:cr,minLength:ur,maxLength:dr,elements:we,custom:zw}};var mg=d($(),1);var bn=(t,e,r)=>r==="asc"?t-e:e-t;function ws(t,e){if(typeof e.isValid.min?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)>=e.isValid.min.constraint}function _s(t,e){if(typeof e.isValid.max?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)<=e.isValid.max.constraint}var pg={separatorThousand:","};function Ww({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="integer"?o=pg:o=e.format;let{separatorThousand:n}=o,i=Math.trunc(r);return n?String(i).replace(/\B(?=(\d{3})+(?!\d))/g,n):String(i)}function Gw(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Number.isInteger(r)?(0,mg.__)("Value must be an integer."):null}var vg={type:"integer",render:Re,Edit:"integer",sort:bn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe,Fr,Lr,Br,Hr,ct],validOperators:[Ee,Pe,Fr,Lr,Br,Hr,ct,Se,Ce,nt,it],format:pg,getValueFormatted:Ww,validate:{required:Ve,min:ws,max:_s,elements:we,custom:Gw}};var gg=d($(),1);var hg={separatorThousand:",",separatorDecimal:".",decimals:2};function qw({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="number"?o=hg:o=e.format;let{separatorThousand:n,separatorDecimal:i,decimals:a}=o,l=r.toFixed(a),[s,u]=l.split("."),c=n?s.replace(/\B(?=(\d{3})+(?!\d))/g,n):s;return a===0?c:c+i+u}function Yw(t){return t===""||t===void 0||t===null}function Uw(t,e){let r=e.getValue({item:t});return!Yw(r)&&!Number.isFinite(r)?(0,gg.__)("Value must be a number."):null}var bg={type:"number",render:Re,Edit:"number",sort:bn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe,Fr,Lr,Br,Hr,ct],validOperators:[Ee,Pe,Fr,Lr,Br,Hr,ct,Se,Ce,nt,it],format:hg,getValueFormatted:qw,validate:{required:Ve,min:ws,max:_s,elements:we,custom:Uw}};var xg={type:"text",render:Re,Edit:"text",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Ut,$t,Kt,Se,Ce,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:cr,minLength:ur,maxLength:dr,elements:we}};var ko=d(Ro(),1);var wg={datetime:(0,ko.getSettings)().formats.datetime,weekStartsOn:(0,ko.getSettings)().l10n.startOfWeek};function $w({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="datetime"?o=wg:o=e.format,(0,ko.dateI18n)(o.datetime,(0,ko.getDate)(r))}var Kw=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},_g={type:"datetime",render:Re,Edit:"datetime",sort:Kw,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[qr,Yr,jr,zr,Wr,Gr,ft,xt],validOperators:[qr,Yr,jr,zr,Wr,Gr,ft,xt],format:wg,getValueFormatted:$w,validate:{required:Ve,elements:we}};var Do=d(Ro(),1);var yg={date:(0,Do.getSettings)().formats.date,weekStartsOn:(0,Do.getSettings)().l10n.startOfWeek};function Qw({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="date"?o=yg:o=e.format,(0,Do.dateI18n)(o.date,(0,Do.getDate)(r))}var Xw=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},Sg={type:"date",render:Re,Edit:"date",sort:Xw,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[qr,Yr,jr,zr,Wr,Gr,ft,xt,ct],validOperators:[qr,Yr,jr,zr,Wr,Gr,ft,xt,ct],format:yg,getValueFormatted:Qw,validate:{required:Ve,elements:we}};var ys=d($(),1);function Cg(t,e){return e.getValue({item:t})===!0}function Zw({item:t,field:e}){let r=e.getValue({item:t});return r===!0?(0,ys.__)("True"):r===!1?(0,ys.__)("False"):""}function Jw(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&![!0,!1].includes(r)?(0,ys.__)("Value must be true, false, or undefined"):null}var e_=(t,e,r)=>{let o=!!t;return o===!!e?0:r==="asc"?o?1:-1:o?-1:1},Eg={type:"boolean",render:Re,Edit:"checkbox",sort:e_,validate:{required:Cg,elements:we,custom:Jw},enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ee,Pe],format:{},getValueFormatted:Zw};var Pg={type:"media",render:()=>null,Edit:null,sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:ht,validate:{}};var rd=d($(),1);function Ag(t,e){let r=e.getValue({item:t});return Array.isArray(r)&&r.length>0&&r.every(o=>![void 0,"",null].includes(o))}function Ig({item:t,field:e}){let r=e.getValue({item:t});return(Array.isArray(r)?r:[]).join(", ")}function t_({item:t,field:e}){return Ig({item:t,field:e})}function r_(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Array.isArray(r)?(0,rd.__)("Value must be an array."):r.every(o=>typeof o=="string")?null:(0,rd.__)("Every value must be a string.")}var o_=(t,e,r)=>{let o=Array.isArray(t)?t:[],n=Array.isArray(e)?e:[];if(o.length!==n.length)return r==="asc"?o.length-n.length:n.length-o.length;let i=o.join(","),a=n.join(",");return r==="asc"?i.localeCompare(a):a.localeCompare(i)},Tg={type:"array",render:t_,Edit:"array",sort:o_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Se,Ce,nt,it],format:{},getValueFormatted:Ig,validate:{required:Ag,elements:we,custom:r_}};function n_({item:t,field:e}){return e.getValue({item:t})?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":""}var Og={type:"password",render:Re,Edit:"password",sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:n_,validate:{required:Ve,pattern:cr,minLength:ur,maxLength:dr,elements:we}};var Rg={type:"telephone",render:Re,Edit:"telephone",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Ut,$t,Kt,Se,Ce,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:cr,minLength:ur,maxLength:dr,elements:we}};var Vg=d($(),1);var xn=d(R(),1);function i_({item:t,field:e}){if(e.hasElements)return(0,xn.jsx)(xs,{item:t,field:e});let r=ht({item:t,field:e});return!r||!dt(r).isValid()?r:(0,xn.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,xn.jsx)("div",{style:{width:"16px",height:"16px",borderRadius:"50%",backgroundColor:r,border:"1px solid #ddd",flexShrink:0}}),(0,xn.jsx)("span",{children:r})]})}function a_(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!dt(r).isValid()?(0,Vg.__)("Value must be a valid color."):null}var s_=(t,e,r)=>{let o=dt(t),n=dt(e);if(!o.isValid()&&!n.isValid())return 0;if(!o.isValid())return r==="asc"?1:-1;if(!n.isValid())return r==="asc"?-1:1;let i=o.toHsl(),a=n.toHsl();return i.h!==a.h?r==="asc"?i.h-a.h:a.h-i.h:i.s!==a.s?r==="asc"?i.s-a.s:a.s-i.s:r==="asc"?i.l-a.l:a.l-i.l},kg={type:"color",render:i_,Edit:"color",sort:s_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Se,Ce],format:{},getValueFormatted:ht,validate:{required:Ve,elements:we,custom:a_}};var Dg={type:"url",render:Re,Edit:"url",sort:lr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Ut,$t,Kt,Se,Ce,nt,it],format:{},getValueFormatted:ht,validate:{required:Ve,pattern:cr,minLength:ur,maxLength:dr,elements:we}};var l_=(t,e,r)=>typeof t=="number"&&typeof e=="number"?bn(t,e,r):lr(t,e,r),Ng={render:Re,Edit:null,sort:l_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:Op(),format:{},getValueFormatted:ht,validate:{required:Ve,elements:we}};function Mg(t,e){let r;t.isValid?.required===!0&&e.validate.required!==void 0&&(r={constraint:!0,validate:e.validate.required});let o;(t.isValid?.elements===!0||t.isValid?.elements===void 0&&(t.elements||t.getElements))&&e.validate.elements!==void 0&&(o={constraint:!0,validate:e.validate.elements});let n;typeof t.isValid?.min=="number"&&e.validate.min!==void 0&&(n={constraint:t.isValid.min,validate:e.validate.min});let i;typeof t.isValid?.max=="number"&&e.validate.max!==void 0&&(i={constraint:t.isValid.max,validate:e.validate.max});let a;typeof t.isValid?.minLength=="number"&&e.validate.minLength!==void 0&&(a={constraint:t.isValid.minLength,validate:e.validate.minLength});let l;typeof t.isValid?.maxLength=="number"&&e.validate.maxLength!==void 0&&(l={constraint:t.isValid.maxLength,validate:e.validate.maxLength});let s;t.isValid?.pattern!==void 0&&e.validate.pattern!==void 0&&(s={constraint:t.isValid?.pattern,validate:e.validate.pattern});let u=t.isValid?.custom??e.validate.custom;return{required:r,elements:o,min:n,max:i,minLength:a,maxLength:l,pattern:s,custom:u}}function Fg(t){return t.validOperators.reduce((e,r)=>{let o=Vo(r);return o?.filter&&(e[r]=o.filter),e},{})}function u_(t,e){return{...e.format,...t.format}}var Lg=u_;function d_(t){let e=[fg,vg,bg,xg,_g,Sg,Eg,Pg,Tg,Og,Rg,kg,Dg].find(r=>r?.type===t);return e||Ng}function Bg(t){return t.map(e=>{let r=d_(e.type),o=e.getValue||lg(e.id),n=function(i,a,l){let s=o({item:i}),u=o({item:a});return e.sort?e.sort(s,u,l):r.sort(s,u,l)};return{id:e.id,label:e.label||e.id,header:e.header||e.label||e.id,description:e.description,placeholder:e.placeholder,getValue:o,setValue:e.setValue||ug(e.id),elements:e.elements,getElements:e.getElements,hasElements:hs(e),isVisible:e.isVisible,enableHiding:e.enableHiding??!0,readOnly:e.readOnly??!1,type:r.type,render:e.render??r.render,Edit:ag(e,r.Edit),sort:n,enableSorting:e.enableSorting??r.enableSorting,enableGlobalSearch:e.enableGlobalSearch??r.enableGlobalSearch,isValid:Mg(e,r),filterBy:sg(e,r.defaultOperators,r.validOperators),filter:Fg(r),format:Lg(e,r),getValueFormatted:e.getValueFormatted??r.getValueFormatted}})}var No=d(j(),1);function Hg(t,e,r){let o=(0,No.useRef)(t),n=(0,No.useRef)(r),[i,a]=(0,No.useState)(!e);return(0,No.useEffect)(()=>{e||(o.current=t,n.current=r,a(!0))},[t,e,r]),{data:e&&o.current?.length?o.current:t,paginationInfo:e&&o.current?.length?n.current:r,hasInitiallyLoaded:i}}var tt=d(R(),1),c_=t=>t.id,f_=()=>!0,m_=[],p_=Zr.filter(t=>!t.isPicker);function v_({header:t,search:e=!0,searchLabel:r=void 0}){return(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsxs)(F,{direction:"row",align:"top",justify:"space-between",className:"dataviews__view-actions",gap:"xs",children:[(0,tt.jsxs)(F,{direction:"row",justify:"start",gap:"sm",className:"dataviews__search",children:[e&&(0,tt.jsx)(Bu,{label:r}),(0,tt.jsx)(qa,{})]}),(0,tt.jsxs)(F,{direction:"row",gap:"xs",style:{flexShrink:0},children:[(0,tt.jsx)(av,{}),t]})]}),(0,tt.jsx)(Ya,{className:"dataviews-filters__container"}),(0,tt.jsx)(Fu,{}),(0,tt.jsx)(Lu,{})]})}function g_({view:t,onChangeView:e,fields:r,search:o=!0,searchLabel:n=void 0,actions:i=m_,data:a,getItemId:l=c_,getItemLevel:s,isLoading:u=!1,paginationInfo:c,defaultLayouts:p,selection:f,onChangeSelection:m,onClickItem:v,renderItemLink:y,isItemClickable:b=f_,header:x,children:S,config:A={perPageSizes:[10,20,50,100]},empty:V,onReset:T}){let{infiniteScrollHandler:N}=c,D=(0,bt.useRef)(null),[E,I]=(0,bt.useState)(0),k=(0,Ss.useResizeObserver)(Z=>{I(Z[0].borderBoxSize[0].inlineSize)},{box:"border-box"}),[g,P]=(0,bt.useState)([]),_=f===void 0||m===void 0,h=_?g:f,[O,w]=(0,bt.useState)(null);function C(Z){let ge=typeof Z=="function"?Z(h):Z;_&&P(ge),m&&m(ge)}let M=(0,bt.useMemo)(()=>Bg(r),[r]),H=(0,bt.useMemo)(()=>h.filter(Z=>a.some(ge=>l(ge)===Z)),[h,a,l]),ae=oi(M,t),_e=(0,bt.useMemo)(()=>(ae||[]).some(Z=>Z.isPrimary||Z.isLocked),[ae]),[ke,He]=(0,bt.useState)(_e);(0,bt.useEffect)(()=>{_e&&!ke&&He(!0)},[_e,ke]),(0,bt.useEffect)(()=>{if(!t.infiniteScrollEnabled||!D.current)return;let Z=(0,Ss.throttle)(pr=>{let vr=pr.target,co=vr.scrollTop,fo=vr.scrollHeight,Mo=vr.clientHeight;co+Mo>=fo-100&&N?.()},100),ge=D.current;return ge.addEventListener("scroll",Z),()=>{ge.removeEventListener("scroll",Z),Z.cancel()}},[N,t.infiniteScrollEnabled]);let rt=(0,bt.useMemo)(()=>Object.fromEntries(Object.entries(p).filter(([Z])=>p_.some(ge=>ge.type===Z))),[p]),{data:qt,paginationInfo:mr,hasInitiallyLoaded:Y}=Hg(a,u,c);return rt[t.type]?(0,tt.jsx)(G.Provider,{value:{view:t,onChangeView:e,fields:M,actions:i,data:qt,isLoading:u,paginationInfo:mr,selection:H,onChangeSelection:C,openedFilter:O,setOpenedFilter:w,getItemId:l,getItemLevel:s,isItemClickable:b,onClickItem:v,renderItemLink:y,containerWidth:E,containerRef:D,resizeObserverRef:k,defaultLayouts:rt,filters:ae,isShowingFilter:ke,setIsShowingFilter:He,config:A,empty:V,hasInitiallyLoaded:Y,hasInfiniteScrollHandler:!!N,onReset:T},children:(0,tt.jsx)("div",{className:"dataviews-wrapper",ref:D,children:S??(0,tt.jsx)(v_,{header:x,search:o,searchLabel:n})})}):null}var Gt=g_;Gt.BulkActionToolbar=Qi;Gt.Filters=ii;Gt.FiltersToggled=Ya;Gt.FiltersToggle=qa;Gt.Layout=Fu;Gt.LayoutSwitcher=zu;Gt.Pagination=Bl;Gt.Search=Bu;Gt.ViewConfig=Wu;Gt.Footer=Lu;var od=Gt;var jg=d(j(),1),zg=d(R(),1),Wg=(0,jg.forwardRef)(({children:t,className:e,ariaLabel:r,as:o="div",...n},i)=>(0,zg.jsx)(o,{ref:i,className:z("admin-ui-navigable-region",e),"aria-label":r,role:"region",tabIndex:"-1",...n,children:t}));Wg.displayName="NavigableRegion";var Gg=Wg;var uo=d(q(),1);var qg=d(q(),1),{Fill:Yg,Slot:Ug}=(0,qg.createSlotFill)("SidebarToggle");var Dr=d(R(),1);function $g({breadcrumbs:t,badges:e,title:r,subTitle:o,actions:n,showSidebarToggle:i=!0}){return(0,Dr.jsxs)(uo.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,Dr.jsxs)(uo.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,Dr.jsxs)(uo.__experimentalHStack,{spacing:2,justify:"left",children:[i&&(0,Dr.jsx)(Ug,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),r&&(0,Dr.jsx)(uo.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:r}),t,e]}),(0,Dr.jsx)(uo.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:n})]}),o&&(0,Dr.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var di=d(R(),1);function Kg({breadcrumbs:t,badges:e,title:r,subTitle:o,children:n,className:i,actions:a,hasPadding:l=!1,showSidebarToggle:s=!0}){let u=z("admin-ui-page",i);return(0,di.jsxs)(Gg,{className:u,ariaLabel:r,children:[(r||t||e)&&(0,di.jsx)($g,{breadcrumbs:t,badges:e,title:r,subTitle:o,actions:a,showSidebarToggle:s}),l?(0,di.jsx)("div",{className:"admin-ui-page__content has-padding",children:n}):n]})}Kg.SidebarToggleFill=Yg;var nd=Kg;var ci=d(id()),Es=d(q()),ld=d(Yt()),fr=d(j()),nh=d(Zg());var Jg=d(Sl()),{lock:ZM,unlock:Cs}=(0,Jg.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var h_=d(Yt()),b_=d(id()),x_={type:"table",sort:{field:"date",direction:"desc"},fields:["author","status","date"],titleField:"title",mediaField:"featured_media",descriptionField:"excerpt"},eh={table:{},grid:{},list:{}},ad=[{slug:"all",label:"All"},{slug:"publish",label:"Published"},{slug:"draft",label:"Draft"},{slug:"pending",label:"Pending"},{slug:"private",label:"Private"},{slug:"trash",label:"Trash"}];function th(t){return t==="all"?{}:{filters:[{field:"status",operator:"is",value:t}]}}function rh(t){return{...x_,showLevels:t?.hierarchical}}function oh(t,e){let r={};if(t.perPage!==void 0&&(r.per_page=t.perPage),t.page!==void 0&&(r.page=t.page),[void 0,""].includes(t.search)||(r.search=t.search),t.sort?.field!==void 0){let s=t.sort.field;s==="attached_to"&&(s="parent"),r.orderby=s}t.sort?.direction!==void 0&&(r.order=t.sort.direction),t.showLevels&&(r.orderby_hierarchy=!0);let o=t.filters?.find(s=>s.field==="status");o?r.status=o.value:e==="attachment"?r.status="inherit":r.status="draft,future,pending,private,publish";let n=t.filters?.find(s=>s.field==="author");n&&n.operator==="is"?r.author=n.value:n&&n.operator==="isNot"&&(r.author_exclude=n.value);let i=t.filters?.find(s=>s.field==="comment_status");i&&i.operator==="is"?r.comment_status=i.value:i&&i.operator==="isNot"&&(r.comment_status_exclude=i.value);let a=t.filters?.find(s=>s.field==="media_type");a&&(r.media_type=a.value);let l=t.filters?.find(s=>s.field==="date");return l&&l.value&&(l.operator==="before"?r.before=l.value:l.operator==="after"&&(r.after=l.value)),e==="attachment"&&(r._embed="wp:attached-to"),r}if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='b2d25721ea']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","b2d25721ea"),t.appendChild(document.createTextNode(':root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-fieldset{border:0;margin:0;padding:0}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{grid-gap:4px 8px;align-items:center;color:#1e1e1e;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{text-wrap:pretty;color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}fieldset.fields__media-edit{border:0;margin:0;padding:0;width:100%}fieldset.fields__media-edit .components-base-control__label{color:#1e1e1e}fieldset.fields__media-edit{container-type:inline-size}fieldset.fields__media-edit .fields__media-edit-compact-group{border:1px dashed #949494;border-radius:4px;overflow:hidden}fieldset.fields__media-edit .fields__media-edit-compact-group.is-single{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button{border:0;border-radius:0}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-compact:not(:last-child){border-bottom:1px solid #f0f0f0}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-compact{min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-compact:focus-within .fields__media-edit-compact-movers,fieldset.fields__media-edit .fields__media-edit-compact:hover .fields__media-edit-compact-movers{opacity:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers{background:#fff;border-radius:2px;opacity:0;pointer-events:none;position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-picker-button{align-items:center;border:1px dashed #949494;border-radius:2px;cursor:pointer;display:flex;gap:8px;min-height:40px;min-width:0;padding:4px 8px;position:relative}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment){border-color:var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment):hover{background-color:color-mix(in srgb,var(--wp-admin-theme-color,#3858e9) 4%,#0000);border-color:var(--wp-admin-theme-color-darker-20);color:var(--wp-admin-theme-color-darker-20)}fieldset.fields__media-edit .fields__media-edit-picker-button:hover{color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}fieldset.fields__media-edit .fields__media-edit-picker-button[aria-disabled=true]{cursor:default;opacity:.6}fieldset.fields__media-edit .fields__media-edit-picker-button .fields__media-edit-picker-button-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-filename,fieldset.fields__media-edit .fields__media-edit-placeholder{flex:1;min-width:0;width:100%}fieldset.fields__media-edit .fields__media-edit-placeholder{text-align:center}fieldset.fields__media-edit .fields__media-edit-thumbnail{aspect-ratio:1/1;border-radius:2px;flex-shrink:0;width:24px}fieldset.fields__media-edit .fields__media-edit-expanded{display:grid;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview{align-items:center;aspect-ratio:3/2;border-radius:2px;display:flex;justify-content:center;overflow:hidden;padding:4px;position:relative;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview .fields__media-edit-expanded-preview-stack{height:100%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-actions{background:#fff;border-radius:2px;position:absolute;right:4px;top:4px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item{border-radius:4px;min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:focus-within .fields__media-edit-expanded-overlay,fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:hover .fields__media-edit-expanded-overlay{opacity:1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:not(.has-preview-image) .fields__media-edit-expanded-preview-stack{padding:8px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-thumbnail{height:100%;object-fit:cover;object-position:50% 50%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-filename{flex:none;text-align:center}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button-spinner svg{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded.is-single{grid-template-columns:1fr}fieldset.fields__media-edit .fields__media-edit-expanded.is-single .fields__media-edit-expanded-preview{aspect-ratio:2/1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button{border-radius:4px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .fields__media-edit-picker-button{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(3,1fr)}@container (max-width: 768px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(2,1fr)}}@container (max-width: 280px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:1fr}}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-picker-button{padding:0}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-placeholder{align-items:center;aspect-ratio:3/2;display:flex;justify-content:center}.fields-controls__slug{border:0;margin:0;padding:0}.fields-controls__slug .fields-controls__slug-external-icon{margin-left:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-image,.fields-controls__featured-image-placeholder{border-radius:4px;display:block;height:100%;width:100%}.fields-controls__featured-image-placeholder{background:#f0f0f0;box-shadow:none}.fields-controls__parent,.fields-controls__password{border:0;margin:0;padding:0}.fields-field__title>span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.routes-post-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}')),document.head.appendChild(t)}var{useEntityRecordsWithPermissions:E_}=Cs(ci.privateApis),{usePostActions:P_,usePostFields:A_}=Cs(nh.privateApis),{Tabs:sd}=Cs(Es.privateApis);function I_(t){return t.id.toString()}function T_(t){return t.level??0}function O_(){let t=C_(),{type:e,slug:r="all"}=w_({from:"/types/$type/list/$slug"}),o=__(),n=y_({from:"/types/$type/list/$slug"}),i=(0,ld.useSelect)(_=>_(ci.store).getPostType(e),[e]),a=i?.labels,l=(0,ld.useSelect)(_=>_(ci.store).canUser("create",{kind:"postType",name:e}),[e]),s=(0,fr.useMemo)(()=>rh(i),[i]),u=(0,fr.useMemo)(()=>th(r),[r]),c=(0,fr.useCallback)(_=>{o({search:{...n,..._}})},[n,o]),{view:p,isModified:f,updateView:m,resetToDefault:v}=Rs({kind:"postType",name:e,slug:"default-new",defaultView:s,activeViewOverrides:u,queryParams:n,onChangeQueryParams:c}),y=()=>{v(),t()},b=_=>{m(_),_.type!==p.type&&t()},x=(0,fr.useMemo)(()=>oh(p,e),[p,e]),{records:S,totalItems:A,totalPages:V,isResolving:T}=E_("postType",e,x),N=A_({postType:e}),D=(0,fr.useMemo)(()=>N.filter(_=>!(_.id==="status"&&r!=="all")).map(_=>_.id==="status"?{..._,filterBy:!1}:_),[N,r]),E=(0,fr.useCallback)(_=>{let h=_.map(C=>C.id.toString()),O=n.postIds||[],w=O.filter(C=>!h.includes(C));w.length!==O.length?o({search:{...n,postIds:w.length>0?w:void 0}}):t()},[t,n,o]),I=P_({postType:e,context:"list",onActionPerformed:(_,h)=>{(_==="move-to-trash"||_==="permanently-delete")&&E(h)}}),k=(0,fr.useMemo)(()=>[...I?.flatMap(_=>{switch(_.id){case"permanently-delete":return[{..._,isEligible(h){return h.type==="attachment"?!0:_.isEligible?.(h)??!1}}];case"move-to-trash":return[{..._,isEligible(h){return h.type==="attachment"?!1:_.isEligible?.(h)??!1}}];case"view-post-revisions":return[]}return[_]})],[I]),g=(0,fr.useCallback)(_=>{o({to:`/types/${e}/list/${_}`})},[o,e]);if(!i)return null;let P=n.postIds??[];return p.type==="list"&&P.length===0&&S?.length>0&&P.push(S[0].id.toString()),p.type==="list"&&P.splice(1),React.createElement(nd,{title:i.labels?.name,subTitle:i.labels?.description,className:`${i.name.toLowerCase()}-page`,actions:a?.add_new_item&&l&&e!=="attachment"&&React.createElement(Es.Button,{variant:"primary",onClick:()=>{o({to:`/types/${e}/new`})},size:"compact"},a.add_new_item),hasPadding:!1},ad.length>1&&React.createElement("div",{className:"routes-post-list__tabs-wrapper"},React.createElement(sd,{onSelect:g,selectedTabId:r??"all"},React.createElement(sd.TabList,null,ad.map(_=>React.createElement(sd.Tab,{tabId:_.slug,key:_.slug},_.label))))),React.createElement(od,{data:S,fields:D,view:p,onChangeView:b,actions:k,isLoading:T,paginationInfo:{totalItems:A,totalPages:V},defaultLayouts:eh,getItemId:I_,getItemLevel:T_,selection:P,onReset:f?y:!1,onChangeSelection:_=>{o({search:{...n,postIds:_.length>0?_:void 0,edit:_.length===0?void 0:n.edit}})},renderItemLink:({item:_,...h})=>React.createElement(S_,{to:`/types/${e}/edit/${encodeURIComponent(_.id)}`,...h,onClick:O=>{O.stopPropagation()}})}))}var R_=O_;export{R_ as stage}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.production.js: + (** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/post-list/route.js b/src/wp-includes/build/routes/post-list/route.js new file mode 100644 index 0000000000000..b0b018112292e --- /dev/null +++ b/src/wp-includes/build/routes/post-list/route.js @@ -0,0 +1,328 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// routes/post-list/route.ts +var import_data4 = __toESM(require_data()); +var import_core_data2 = __toESM(require_core_data()); +import { notFound } from "@wordpress/route"; + +// packages/views/build-module/use-view.mjs +var import_element = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f) => f.field) + ); + const preserved = (view.filters ?? []).filter( + (f) => !activeFields.has(f.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); +async function loadView(config) { + const { kind, name, slug, defaultView, activeViewOverrides, queryParams } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data2.select)(import_preferences2.store).get( + "core/views", + preferenceKey + ); + const baseView = persistedView ?? defaultView; + const page = queryParams?.page ?? 1; + const search = queryParams?.search ?? ""; + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); +} + +// routes/post-list/view-utils.ts +var import_data3 = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var DEFAULT_VIEW = { + type: "table", + sort: { + field: "date", + direction: "desc" + }, + fields: ["author", "status", "date"], + titleField: "title", + mediaField: "featured_media", + descriptionField: "excerpt" +}; +function getActiveViewOverridesForTab(slug) { + if (slug === "all") { + return {}; + } + return { + filters: [ + { + field: "status", + operator: "is", + value: slug + } + ] + }; +} +function getDefaultView(postType) { + return { + ...DEFAULT_VIEW, + showLevels: postType?.hierarchical + }; +} +async function ensureView(type, slug, search) { + const postTypeObject = await (0, import_data3.resolveSelect)(import_core_data.store).getPostType(type); + const defaultView = getDefaultView(postTypeObject); + return loadView({ + kind: "postType", + name: type, + slug: "default-new", + defaultView, + activeViewOverrides: getActiveViewOverridesForTab(slug ?? "all"), + queryParams: search + }); +} +function viewToQuery(view, postType) { + const result = {}; + if (void 0 !== view.perPage) { + result.per_page = view.perPage; + } + if (void 0 !== view.page) { + result.page = view.page; + } + if (![void 0, ""].includes(view.search)) { + result.search = view.search; + } + if (void 0 !== view.sort?.field) { + let sortField = view.sort.field; + if (sortField === "attached_to") { + sortField = "parent"; + } + result.orderby = sortField; + } + if (void 0 !== view.sort?.direction) { + result.order = view.sort.direction; + } + if (view.showLevels) { + result.orderby_hierarchy = true; + } + const status = view.filters?.find( + (filter) => filter.field === "status" + ); + if (status) { + result.status = status.value; + } else if (postType === "attachment") { + result.status = "inherit"; + } else { + result.status = "draft,future,pending,private,publish"; + } + const author = view.filters?.find( + (filter) => filter.field === "author" + ); + if (author && author.operator === "is") { + result.author = author.value; + } else if (author && author.operator === "isNot") { + result.author_exclude = author.value; + } + const commentStatus = view.filters?.find( + (filter) => filter.field === "comment_status" + ); + if (commentStatus && commentStatus.operator === "is") { + result.comment_status = commentStatus.value; + } else if (commentStatus && commentStatus.operator === "isNot") { + result.comment_status_exclude = commentStatus.value; + } + const mediaType = view.filters?.find( + (filter) => filter.field === "media_type" + ); + if (mediaType) { + result.media_type = mediaType.value; + } + const date = view.filters?.find((filter) => filter.field === "date"); + if (date && date.value) { + if (date.operator === "before") { + result.before = date.value; + } else if (date.operator === "after") { + result.after = date.value; + } + } + if (postType === "attachment") { + result._embed = "wp:attached-to"; + } + return result; +} + +// routes/post-list/route.ts +var route = { + beforeLoad: async ({ params }) => { + try { + const postType = await (0, import_data4.resolveSelect)(import_core_data2.store).getPostType( + params.type + ); + if (!postType) { + throw notFound(); + } + } catch { + throw notFound(); + } + }, + title: async ({ params }) => { + const postType = await (0, import_data4.resolveSelect)(import_core_data2.store).getPostType( + params.type + ); + return postType?.labels?.name || params.type; + }, + async canvas(context) { + const { params, search } = context; + const view = await ensureView(params.type, params.slug, { + page: search.page, + search: search.search + }); + if (view.type !== "list") { + return void 0; + } + if (search.postIds && search.postIds.length > 0) { + const postId = search.postIds[0].toString(); + return { + postType: params.type, + postId, + isPreview: true, + editLink: `/types/${params.type}/edit/${postId}` + }; + } + const query = viewToQuery(view, params.type); + const posts = await (0, import_data4.resolveSelect)(import_core_data2.store).getEntityRecords( + "postType", + params.type, + { ...query, per_page: 1 } + ); + if (posts && posts.length > 0) { + const postId = posts[0].id.toString(); + return { + postType: params.type, + postId, + isPreview: true, + editLink: `/types/${params.type}/edit/${postId}` + }; + } + return void 0; + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/post-list/route.min.asset.php b/src/wp-includes/build/routes/post-list/route.min.asset.php new file mode 100644 index 0000000000000..3eaf44669504e --- /dev/null +++ b/src/wp-includes/build/routes/post-list/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data', 'wp-element', 'wp-preferences'), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'cf1814988f44c96c4aea'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/post-list/route.min.js b/src/wp-includes/build/routes/post-list/route.min.js new file mode 100644 index 0000000000000..e6660279cb502 --- /dev/null +++ b/src/wp-includes/build/routes/post-list/route.min.js @@ -0,0 +1 @@ +var q=Object.create;var T=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var C=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of z(t))!R.call(e,s)&&s!==r&&T(e,s,{get:()=>t[s],enumerable:!(i=K(t,s))||i.enumerable});return e};var l=(e,t,r)=>(r=e!=null?q(M(e)):{},C(t||!e||!e.__esModule?T(r,"default",{value:e,enumerable:!0}):r,e));var p=u((J,S)=>{S.exports=window.wp.data});var y=u((X,x)=>{x.exports=window.wp.coreData});var P=u((v,A)=>{A.exports=window.wp.element});var g=u((O,_)=>{_.exports=window.wp.preferences});var c=l(p()),d=l(y());import{notFound as E}from"@wordpress/route";var b=l(P(),1),F=l(p(),1),Q=l(g(),1);function m(e,t,r){return`dataviews-${e}-${t}-${r}`}var N=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function h(e,t,r){if(!t)return e;let i=e;for(let s of N)s in t&&(i={...i,[s]:t[s]});if(t.filters&&t.filters.length>0){let s=new Set(t.filters.map(o=>o.field)),n=(e.filters??[]).filter(o=>!s.has(o.field));i={...i,filters:[...n,...t.filters]}}return t.sort&&r&&e.sort?.field===r.sort?.field&&e.sort?.direction===r.sort?.direction&&(i={...i,sort:t.sort}),t.layout&&(i={...i,layout:{...i.layout,...t.layout}}),t.groupBy&&(i={...i,groupBy:t.groupBy}),i}var L=l(p(),1),V=l(g(),1);async function w(e){let{kind:t,name:r,slug:i,defaultView:s,activeViewOverrides:n,queryParams:o}=e,f=m(t,r,i),j=(0,L.select)(V.store).get("core/views",f)??s,U=o?.page??1,$=o?.search??"";return h({...j,page:U,search:$},n,s)}var D=l(p()),k=l(y()),W={type:"table",sort:{field:"date",direction:"desc"},fields:["author","status","date"],titleField:"title",mediaField:"featured_media",descriptionField:"excerpt"};function Y(e){return e==="all"?{}:{filters:[{field:"status",operator:"is",value:e}]}}function G(e){return{...W,showLevels:e?.hierarchical}}async function I(e,t,r){let i=await(0,D.resolveSelect)(k.store).getPostType(e),s=G(i);return w({kind:"postType",name:e,slug:"default-new",defaultView:s,activeViewOverrides:Y(t??"all"),queryParams:r})}function B(e,t){let r={};if(e.perPage!==void 0&&(r.per_page=e.perPage),e.page!==void 0&&(r.page=e.page),[void 0,""].includes(e.search)||(r.search=e.search),e.sort?.field!==void 0){let a=e.sort.field;a==="attached_to"&&(a="parent"),r.orderby=a}e.sort?.direction!==void 0&&(r.order=e.sort.direction),e.showLevels&&(r.orderby_hierarchy=!0);let i=e.filters?.find(a=>a.field==="status");i?r.status=i.value:t==="attachment"?r.status="inherit":r.status="draft,future,pending,private,publish";let s=e.filters?.find(a=>a.field==="author");s&&s.operator==="is"?r.author=s.value:s&&s.operator==="isNot"&&(r.author_exclude=s.value);let n=e.filters?.find(a=>a.field==="comment_status");n&&n.operator==="is"?r.comment_status=n.value:n&&n.operator==="isNot"&&(r.comment_status_exclude=n.value);let o=e.filters?.find(a=>a.field==="media_type");o&&(r.media_type=o.value);let f=e.filters?.find(a=>a.field==="date");return f&&f.value&&(f.operator==="before"?r.before=f.value:f.operator==="after"&&(r.after=f.value)),t==="attachment"&&(r._embed="wp:attached-to"),r}var Te={beforeLoad:async({params:e})=>{try{if(!await(0,c.resolveSelect)(d.store).getPostType(e.type))throw E()}catch{throw E()}},title:async({params:e})=>(await(0,c.resolveSelect)(d.store).getPostType(e.type))?.labels?.name||e.type,async canvas(e){let{params:t,search:r}=e,i=await I(t.type,t.slug,{page:r.page,search:r.search});if(i.type!=="list")return;if(r.postIds&&r.postIds.length>0){let o=r.postIds[0].toString();return{postType:t.type,postId:o,isPreview:!0,editLink:`/types/${t.type}/edit/${o}`}}let s=B(i,t.type),n=await(0,c.resolveSelect)(d.store).getEntityRecords("postType",t.type,{...s,per_page:1});if(n&&n.length>0){let o=n[0].id.toString();return{postType:t.type,postId:o,isPreview:!0,editLink:`/types/${t.type}/edit/${o}`}}}};export{Te as route}; diff --git a/src/wp-includes/build/routes/post-new/route.js b/src/wp-includes/build/routes/post-new/route.js new file mode 100644 index 0000000000000..6469d3c35360d --- /dev/null +++ b/src/wp-includes/build/routes/post-new/route.js @@ -0,0 +1,70 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// routes/post-new/route.ts +var import_data = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var route = { + title: async ({ params }) => { + const postType = await (0, import_data.resolveSelect)(import_core_data.store).getPostType( + params.type + ); + return postType?.labels?.add_new_item || postType?.labels?.add_new; + }, + async canvas(context) { + const { params } = context; + const newPost = await (0, import_data.dispatch)(import_core_data.store).saveEntityRecord( + "postType", + params.type, + { + title: "Auto Draft", + content: "", + status: "auto-draft" + } + ); + return { + postType: params.type, + postId: String(newPost.id) + }; + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/post-new/route.min.asset.php b/src/wp-includes/build/routes/post-new/route.min.asset.php new file mode 100644 index 0000000000000..13adc708ff47b --- /dev/null +++ b/src/wp-includes/build/routes/post-new/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data'), 'version' => 'aa76ce46f1b581e7dc6c'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/post-new/route.min.js b/src/wp-includes/build/routes/post-new/route.min.js new file mode 100644 index 0000000000000..df0a2a95e699d --- /dev/null +++ b/src/wp-includes/build/routes/post-new/route.min.js @@ -0,0 +1 @@ +var m=Object.create;var n=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var i=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var v=(e,t,a,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of f(t))!T.call(e,o)&&o!==a&&n(e,o,{get:()=>t[o],enumerable:!(p=u(t,o))||p.enumerable});return e};var c=(e,t,a)=>(a=e!=null?m(g(e)):{},v(t||!e||!e.__esModule?n(a,"default",{value:e,enumerable:!0}):a,e));var y=i((S,d)=>{d.exports=window.wp.data});var l=i((_,w)=>{w.exports=window.wp.coreData});var s=c(y()),r=c(l()),b={title:async({params:e})=>{let t=await(0,s.resolveSelect)(r.store).getPostType(e.type);return t?.labels?.add_new_item||t?.labels?.add_new},async canvas(e){let{params:t}=e,a=await(0,s.dispatch)(r.store).saveEntityRecord("postType",t.type,{title:"Auto Draft",content:"",status:"auto-draft"});return{postType:t.type,postId:String(a.id)}}};export{b as route}; diff --git a/src/wp-includes/build/routes/post/route.js b/src/wp-includes/build/routes/post/route.js new file mode 100644 index 0000000000000..31e2bc94c3e94 --- /dev/null +++ b/src/wp-includes/build/routes/post/route.js @@ -0,0 +1,17 @@ +// routes/post/route.ts +import { redirect } from "@wordpress/route"; +var route = { + beforeLoad: ({ params }) => { + throw redirect({ + throw: true, + to: "/types/$type/list/$slug", + params: { + type: params.type, + slug: "all" + } + }); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/post/route.min.asset.php b/src/wp-includes/build/routes/post/route.min.asset.php new file mode 100644 index 0000000000000..00edaaecc37c8 --- /dev/null +++ b/src/wp-includes/build/routes/post/route.min.asset.php @@ -0,0 +1 @@ + array(), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '578c1fae94cf3e2b85a0'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/post/route.min.js b/src/wp-includes/build/routes/post/route.min.js new file mode 100644 index 0000000000000..9a67b3c6568d8 --- /dev/null +++ b/src/wp-includes/build/routes/post/route.min.js @@ -0,0 +1 @@ +import{redirect as r}from"@wordpress/route";var o={beforeLoad:({params:t})=>{throw r({throw:!0,to:"/types/$type/list/$slug",params:{type:t.type,slug:"all"}})}};export{o as route}; diff --git a/src/wp-includes/build/routes/registry.php b/src/wp-includes/build/routes/registry.php new file mode 100644 index 0000000000000..e43f726820548 --- /dev/null +++ b/src/wp-includes/build/routes/registry.php @@ -0,0 +1,31 @@ + 'connectors-home', + 'path' => '/', + 'page' => 'options-connectors', + 'has_route' => true, + 'has_content' => true, + ), + array( + 'name' => 'font-list', + 'path' => '/font-list', + 'page' => 'font-library', + 'has_route' => true, + 'has_content' => true, + ), + array( + 'name' => 'fonts-home', + 'path' => '/', + 'page' => 'font-library', + 'has_route' => true, + 'has_content' => false, + ) +); diff --git a/src/wp-includes/build/routes/styles/content.js b/src/wp-includes/build/routes/styles/content.js new file mode 100644 index 0000000000000..e6def657bb6bd --- /dev/null +++ b/src/wp-includes/build/routes/styles/content.js @@ -0,0 +1,332 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/editor +var require_editor = __commonJS({ + "package-external:@wordpress/editor"(exports, module) { + module.exports = window.wp.editor; + } +}); + +// package-external:@wordpress/compose +var require_compose = __commonJS({ + "package-external:@wordpress/compose"(exports, module) { + module.exports = window.wp.compose; + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// routes/styles/stage.tsx +import { useNavigate, useSearch } from "@wordpress/route"; + +// node_modules/clsx/dist/clsx.mjs +function r(e) { + var t, f, n = ""; + if ("string" == typeof e || "number" == typeof e) n += e; + else if ("object" == typeof e) if (Array.isArray(e)) { + var o = e.length; + for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); + } else for (f in e) e[f] && (n && (n += " "), n += f); + return n; +} +function clsx() { + for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); + return n; +} +var clsx_default = clsx; + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element = __toESM(require_element(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components2 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_components2.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + import_components2.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/styles/stage.tsx +var import_i18n = __toESM(require_i18n()); +var import_editor = __toESM(require_editor()); +var import_compose = __toESM(require_compose()); +var import_components3 = __toESM(require_components()); + +// packages/icons/build-module/library/seen.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var seen_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) }); + +// routes/styles/stage.tsx +var import_element2 = __toESM(require_element()); + +// routes/styles/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='7be460f5dc']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "7be460f5dc"); + style.appendChild(document.createTextNode(".routes-styles__page .global-styles-ui-screen-root{box-shadow:none}.routes-styles__page .global-styles-ui-screen-root>div>hr{display:none}.routes-styles__page .global-styles-ui-sidebar__navigator-provider .components-tools-panel{border-top:none}.routes-styles__page .global-styles-ui-sidebar__navigator-provider{overflow-y:auto;padding-left:0;padding-right:0}")); + document.head.appendChild(style); +} + +// routes/lock-unlock.ts +var import_private_apis = __toESM(require_private_apis()); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// routes/styles/stage.tsx +var { GlobalStylesUIWrapper, GlobalStylesActionMenu } = unlock(import_editor.privateApis); +function Stage() { + const navigate = useNavigate(); + const search = useSearch({ strict: false }); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + const section = search.section ?? "/"; + const [isStyleBookOpened, setIsStyleBookOpened] = (0, import_element2.useState)( + search.preview === "stylebook" + ); + const onChangeSection = (updatedSection) => { + navigate({ + search: { + ...search, + section: updatedSection + } + }); + }; + return /* @__PURE__ */ React.createElement( + page_default, + { + actions: !isMobileViewport ? /* @__PURE__ */ React.createElement(import_components3.__experimentalHStack, null, /* @__PURE__ */ React.createElement( + import_components3.Button, + { + size: "compact", + isPressed: isStyleBookOpened, + icon: seen_default, + label: (0, import_i18n.__)("Style Book"), + onClick: () => { + const newIsStyleBookOpened = !isStyleBookOpened; + setIsStyleBookOpened(newIsStyleBookOpened); + navigate({ + search: newIsStyleBookOpened ? { ...search, preview: "stylebook" } : (() => { + const { + preview, + ...restSearch + } = search; + return restSearch; + })() + }); + } + } + ), /* @__PURE__ */ React.createElement( + GlobalStylesActionMenu, + { + hideWelcomeGuide: true, + onChangePath: onChangeSection + } + )) : null, + className: "routes-styles__page", + title: (0, import_i18n.__)("Styles") + }, + /* @__PURE__ */ React.createElement( + GlobalStylesUIWrapper, + { + path: section, + onPathChange: onChangeSection + } + ) + ); +} +var stage = Stage; + +// routes/styles/canvas.tsx +var import_editor2 = __toESM(require_editor()); +var import_components4 = __toESM(require_components()); +import { useNavigate as useNavigate2, useSearch as useSearch2 } from "@wordpress/route"; +import { useEditorAssets } from "@wordpress/lazy-editor"; +var { StyleBookPreview } = unlock(import_editor2.privateApis); +function Canvas() { + const { isReady: assetsReady } = useEditorAssets(); + const navigate = useNavigate2(); + const search = useSearch2({ strict: false }); + const section = search.section ?? "/"; + const onChangeSection = (updatedSection) => { + navigate({ + search: { + ...search, + section: updatedSection + } + }); + }; + if (!assetsReady) { + return /* @__PURE__ */ React.createElement( + "div", + { + style: { + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%" + } + }, + /* @__PURE__ */ React.createElement(import_components4.Spinner, null) + ); + } + return /* @__PURE__ */ React.createElement(StyleBookPreview, { path: section, onPathChange: onChangeSection }); +} +var canvas = Canvas; +export { + canvas, + stage +}; diff --git a/src/wp-includes/build/routes/styles/content.min.asset.php b/src/wp-includes/build/routes/styles/content.min.asset.php new file mode 100644 index 0000000000000..042585cb06891 --- /dev/null +++ b/src/wp-includes/build/routes/styles/content.min.asset.php @@ -0,0 +1 @@ + array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'module_dependencies' => array(array('id' => '@wordpress/lazy-editor', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '18e5a1185ec0c9a23034'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/styles/content.min.js b/src/wp-includes/build/routes/styles/content.min.js new file mode 100644 index 0000000000000..6f8fef2c084e4 --- /dev/null +++ b/src/wp-includes/build/routes/styles/content.min.js @@ -0,0 +1 @@ +var ea=Object.create;var R=Object.defineProperty;var oa=Object.getOwnPropertyDescriptor;var fa=Object.getOwnPropertyNames;var ra=Object.getPrototypeOf,sa=Object.prototype.hasOwnProperty;var d=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var la=(a,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let f of fa(t))!sa.call(a,f)&&f!==e&&R(a,f,{get:()=>t[f],enumerable:!(o=oa(t,f))||o.enumerable});return a};var r=(a,t,e)=>(e=a!=null?ea(ra(a)):{},la(t||!a||!a.__esModule?R(e,"default",{value:a,enumerable:!0}):e,a));var T=d((xa,B)=>{B.exports=window.wp.i18n});var i=d((Sa,N)=>{N.exports=window.wp.components});var p=d((ka,A)=>{A.exports=window.ReactJSXRuntime});var v=d((_a,j)=>{j.exports=window.wp.element});var x=d((Va,z)=>{z.exports=window.wp.editor});var W=d((Oa,E)=>{E.exports=window.wp.compose});var J=d((Ma,G)=>{G.exports=window.wp.primitives});var X=d((Wa,Z)=>{Z.exports=window.wp.privateApis});import{useNavigate as ma,useSearch as ua}from"@wordpress/route";function P(a){var t,e,o="";if(typeof a=="string"||typeof a=="number")o+=a;else if(typeof a=="object")if(Array.isArray(a)){var f=a.length;for(t=0;t(0,H.jsx)(o,{ref:s,className:g("admin-ui-navigable-region",t),"aria-label":e,role:"region",tabIndex:"-1",...f,children:a}));F.displayName="NavigableRegion";var I=F;var m=r(i(),1);var U=r(i(),1),{Fill:V,Slot:O}=(0,U.createSlotFill)("SidebarToggle");var l=r(p(),1);function M({breadcrumbs:a,badges:t,title:e,subTitle:o,actions:f,showSidebarToggle:s=!0}){return(0,l.jsxs)(m.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,l.jsxs)(m.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,l.jsxs)(m.__experimentalHStack,{spacing:2,justify:"left",children:[s&&(0,l.jsx)(O,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),e&&(0,l.jsx)(m.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:e}),a,t]}),(0,l.jsx)(m.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:f})]}),o&&(0,l.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var n=r(p(),1);function q({breadcrumbs:a,badges:t,title:e,subTitle:o,children:f,className:s,actions:c,hasPadding:u=!1,showSidebarToggle:_=!0}){let w=g("admin-ui-page",s);return(0,n.jsxs)(I,{className:w,ariaLabel:e,children:[(e||a||t)&&(0,n.jsx)(M,{breadcrumbs:a,badges:t,title:e,subTitle:o,actions:c,showSidebarToggle:_}),u?(0,n.jsx)("div",{className:"admin-ui-page__content has-padding",children:f}):f]})}q.SidebarToggleFill=V;var C=q;var L=r(T()),Q=r(x()),Y=r(W()),y=r(i());var h=r(J(),1),S=r(p(),1),k=(0,S.jsx)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,S.jsx)(h.Path,{d:"M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z"})});var $=r(v());if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='7be460f5dc']")){let a=document.createElement("style");a.setAttribute("data-wp-hash","7be460f5dc"),a.appendChild(document.createTextNode(".routes-styles__page .global-styles-ui-screen-root{box-shadow:none}.routes-styles__page .global-styles-ui-screen-root>div>hr{display:none}.routes-styles__page .global-styles-ui-sidebar__navigator-provider .components-tools-panel{border-top:none}.routes-styles__page .global-styles-ui-sidebar__navigator-provider{overflow-y:auto;padding-left:0;padding-right:0}")),document.head.appendChild(a)}var K=r(X()),{lock:Ga,unlock:b}=(0,K.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var{GlobalStylesUIWrapper:ia,GlobalStylesActionMenu:pa}=b(Q.privateApis);function na(){let a=ma(),t=ua({strict:!1}),e=(0,Y.useViewportMatch)("medium","<"),o=t.section??"/",[f,s]=(0,$.useState)(t.preview==="stylebook"),c=u=>{a({search:{...t,section:u}})};return React.createElement(C,{actions:e?null:React.createElement(y.__experimentalHStack,null,React.createElement(y.Button,{size:"compact",isPressed:f,icon:k,label:(0,L.__)("Style Book"),onClick:()=>{let u=!f;s(u),a({search:u?{...t,preview:"stylebook"}:(()=>{let{preview:_,...w}=t;return w})()})}}),React.createElement(pa,{hideWelcomeGuide:!0,onChangePath:c})),className:"routes-styles__page",title:(0,L.__)("Styles")},React.createElement(ia,{path:o,onPathChange:c}))}var ca=na;var aa=r(x()),ta=r(i());import{useNavigate as ga,useSearch as ha}from"@wordpress/route";import{useEditorAssets as ba}from"@wordpress/lazy-editor";var{StyleBookPreview:ya}=b(aa.privateApis);function wa(){let{isReady:a}=ba(),t=ga(),e=ha({strict:!1}),o=e.section??"/",f=s=>{t({search:{...e,section:s}})};return a?React.createElement(ya,{path:o,onPathChange:f}):React.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"}},React.createElement(ta.Spinner,null))}var va=wa;export{va as canvas,ca as stage}; diff --git a/src/wp-includes/build/routes/styles/route.js b/src/wp-includes/build/routes/styles/route.js new file mode 100644 index 0000000000000..6f7f959bad2ce --- /dev/null +++ b/src/wp-includes/build/routes/styles/route.js @@ -0,0 +1,49 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// routes/styles/route.ts +var import_i18n = __toESM(require_i18n()); +var route = { + title: () => (0, import_i18n.__)("Styles"), + async canvas(context) { + if (context.search.preview === "stylebook") { + return null; + } + return { + isPreview: true + }; + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/styles/route.min.asset.php b/src/wp-includes/build/routes/styles/route.min.asset.php new file mode 100644 index 0000000000000..4a60707cd9f5d --- /dev/null +++ b/src/wp-includes/build/routes/styles/route.min.asset.php @@ -0,0 +1 @@ + array('wp-i18n'), 'version' => '4d90e5b95e56aedaba48'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/styles/route.min.js b/src/wp-includes/build/routes/styles/route.min.js new file mode 100644 index 0000000000000..87122c72760be --- /dev/null +++ b/src/wp-includes/build/routes/styles/route.min.js @@ -0,0 +1 @@ +var p=Object.create;var i=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var c=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var v=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var f=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of w(r))!y.call(e,n)&&n!==t&&i(e,n,{get:()=>r[n],enumerable:!(o=u(r,n))||o.enumerable});return e};var m=(e,r,t)=>(t=e!=null?p(c(e)):{},f(r||!e||!e.__esModule?i(t,"default",{value:e,enumerable:!0}):t,e));var a=v((_,s)=>{s.exports=window.wp.i18n});var l=m(a()),b={title:()=>(0,l.__)("Styles"),async canvas(e){return e.search.preview==="stylebook"?null:{isPreview:!0}}};export{b as route}; diff --git a/src/wp-includes/build/routes/template-list/content.js b/src/wp-includes/build/routes/template-list/content.js new file mode 100644 index 0000000000000..afd0f5cc5b832 --- /dev/null +++ b/src/wp-includes/build/routes/template-list/content.js @@ -0,0 +1,19314 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// package-external:@wordpress/compose +var require_compose = __commonJS({ + "package-external:@wordpress/compose"(exports, module) { + module.exports = window.wp.compose; + } +}); + +// vendor-external:react +var require_react = __commonJS({ + "vendor-external:react"(exports, module) { + module.exports = window.React; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// vendor-external:react-dom +var require_react_dom = __commonJS({ + "vendor-external:react-dom"(exports, module) { + module.exports = window.ReactDOM; + } +}); + +// node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +var require_use_sync_external_store_shim_development = __commonJS({ + "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { + "use strict"; + (function() { + function is(x2, y2) { + return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; + } + function useSyncExternalStore$2(subscribe2, getSnapshot) { + didWarnOld18Alpha || void 0 === React9.startTransition || (didWarnOld18Alpha = true, console.error( + "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." + )); + var value = getSnapshot(); + if (!didWarnUncachedGetSnapshot) { + var cachedValue = getSnapshot(); + objectIs(value, cachedValue) || (console.error( + "The result of getSnapshot should be cached to avoid an infinite loop" + ), didWarnUncachedGetSnapshot = true); + } + cachedValue = useState29({ + inst: { value, getSnapshot } + }); + var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; + useLayoutEffect2( + function() { + inst.value = value; + inst.getSnapshot = getSnapshot; + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }, + [subscribe2, value, getSnapshot] + ); + useEffect22( + function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + return subscribe2(function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }); + }, + [subscribe2] + ); + useDebugValue(value); + return value; + } + function checkIfSnapshotChanged(inst) { + var latestGetSnapshot = inst.getSnapshot; + inst = inst.value; + try { + var nextValue = latestGetSnapshot(); + return !objectIs(inst, nextValue); + } catch (error) { + return true; + } + } + function useSyncExternalStore$1(subscribe2, getSnapshot) { + return getSnapshot(); + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var React9 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState29 = React9.useState, useEffect22 = React9.useEffect, useLayoutEffect2 = React9.useLayoutEffect, useDebugValue = React9.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; + exports.useSyncExternalStore = void 0 !== React9.useSyncExternalStore ? React9.useSyncExternalStore : shim; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); + } +}); + +// node_modules/use-sync-external-store/shim/index.js +var require_shim = __commonJS({ + "node_modules/use-sync-external-store/shim/index.js"(exports, module) { + "use strict"; + if (false) { + module.exports = null; + } else { + module.exports = require_use_sync_external_store_shim_development(); + } + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// package-external:@wordpress/keycodes +var require_keycodes = __commonJS({ + "package-external:@wordpress/keycodes"(exports, module) { + module.exports = window.wp.keycodes; + } +}); + +// node_modules/remove-accents/index.js +var require_remove_accents = __commonJS({ + "node_modules/remove-accents/index.js"(exports, module) { + var characterMap = { + "\xC0": "A", + "\xC1": "A", + "\xC2": "A", + "\xC3": "A", + "\xC4": "A", + "\xC5": "A", + "\u1EA4": "A", + "\u1EAE": "A", + "\u1EB2": "A", + "\u1EB4": "A", + "\u1EB6": "A", + "\xC6": "AE", + "\u1EA6": "A", + "\u1EB0": "A", + "\u0202": "A", + "\u1EA2": "A", + "\u1EA0": "A", + "\u1EA8": "A", + "\u1EAA": "A", + "\u1EAC": "A", + "\xC7": "C", + "\u1E08": "C", + "\xC8": "E", + "\xC9": "E", + "\xCA": "E", + "\xCB": "E", + "\u1EBE": "E", + "\u1E16": "E", + "\u1EC0": "E", + "\u1E14": "E", + "\u1E1C": "E", + "\u0206": "E", + "\u1EBA": "E", + "\u1EBC": "E", + "\u1EB8": "E", + "\u1EC2": "E", + "\u1EC4": "E", + "\u1EC6": "E", + "\xCC": "I", + "\xCD": "I", + "\xCE": "I", + "\xCF": "I", + "\u1E2E": "I", + "\u020A": "I", + "\u1EC8": "I", + "\u1ECA": "I", + "\xD0": "D", + "\xD1": "N", + "\xD2": "O", + "\xD3": "O", + "\xD4": "O", + "\xD5": "O", + "\xD6": "O", + "\xD8": "O", + "\u1ED0": "O", + "\u1E4C": "O", + "\u1E52": "O", + "\u020E": "O", + "\u1ECE": "O", + "\u1ECC": "O", + "\u1ED4": "O", + "\u1ED6": "O", + "\u1ED8": "O", + "\u1EDC": "O", + "\u1EDE": "O", + "\u1EE0": "O", + "\u1EDA": "O", + "\u1EE2": "O", + "\xD9": "U", + "\xDA": "U", + "\xDB": "U", + "\xDC": "U", + "\u1EE6": "U", + "\u1EE4": "U", + "\u1EEC": "U", + "\u1EEE": "U", + "\u1EF0": "U", + "\xDD": "Y", + "\xE0": "a", + "\xE1": "a", + "\xE2": "a", + "\xE3": "a", + "\xE4": "a", + "\xE5": "a", + "\u1EA5": "a", + "\u1EAF": "a", + "\u1EB3": "a", + "\u1EB5": "a", + "\u1EB7": "a", + "\xE6": "ae", + "\u1EA7": "a", + "\u1EB1": "a", + "\u0203": "a", + "\u1EA3": "a", + "\u1EA1": "a", + "\u1EA9": "a", + "\u1EAB": "a", + "\u1EAD": "a", + "\xE7": "c", + "\u1E09": "c", + "\xE8": "e", + "\xE9": "e", + "\xEA": "e", + "\xEB": "e", + "\u1EBF": "e", + "\u1E17": "e", + "\u1EC1": "e", + "\u1E15": "e", + "\u1E1D": "e", + "\u0207": "e", + "\u1EBB": "e", + "\u1EBD": "e", + "\u1EB9": "e", + "\u1EC3": "e", + "\u1EC5": "e", + "\u1EC7": "e", + "\xEC": "i", + "\xED": "i", + "\xEE": "i", + "\xEF": "i", + "\u1E2F": "i", + "\u020B": "i", + "\u1EC9": "i", + "\u1ECB": "i", + "\xF0": "d", + "\xF1": "n", + "\xF2": "o", + "\xF3": "o", + "\xF4": "o", + "\xF5": "o", + "\xF6": "o", + "\xF8": "o", + "\u1ED1": "o", + "\u1E4D": "o", + "\u1E53": "o", + "\u020F": "o", + "\u1ECF": "o", + "\u1ECD": "o", + "\u1ED5": "o", + "\u1ED7": "o", + "\u1ED9": "o", + "\u1EDD": "o", + "\u1EDF": "o", + "\u1EE1": "o", + "\u1EDB": "o", + "\u1EE3": "o", + "\xF9": "u", + "\xFA": "u", + "\xFB": "u", + "\xFC": "u", + "\u1EE7": "u", + "\u1EE5": "u", + "\u1EED": "u", + "\u1EEF": "u", + "\u1EF1": "u", + "\xFD": "y", + "\xFF": "y", + "\u0100": "A", + "\u0101": "a", + "\u0102": "A", + "\u0103": "a", + "\u0104": "A", + "\u0105": "a", + "\u0106": "C", + "\u0107": "c", + "\u0108": "C", + "\u0109": "c", + "\u010A": "C", + "\u010B": "c", + "\u010C": "C", + "\u010D": "c", + "C\u0306": "C", + "c\u0306": "c", + "\u010E": "D", + "\u010F": "d", + "\u0110": "D", + "\u0111": "d", + "\u0112": "E", + "\u0113": "e", + "\u0114": "E", + "\u0115": "e", + "\u0116": "E", + "\u0117": "e", + "\u0118": "E", + "\u0119": "e", + "\u011A": "E", + "\u011B": "e", + "\u011C": "G", + "\u01F4": "G", + "\u011D": "g", + "\u01F5": "g", + "\u011E": "G", + "\u011F": "g", + "\u0120": "G", + "\u0121": "g", + "\u0122": "G", + "\u0123": "g", + "\u0124": "H", + "\u0125": "h", + "\u0126": "H", + "\u0127": "h", + "\u1E2A": "H", + "\u1E2B": "h", + "\u0128": "I", + "\u0129": "i", + "\u012A": "I", + "\u012B": "i", + "\u012C": "I", + "\u012D": "i", + "\u012E": "I", + "\u012F": "i", + "\u0130": "I", + "\u0131": "i", + "\u0132": "IJ", + "\u0133": "ij", + "\u0134": "J", + "\u0135": "j", + "\u0136": "K", + "\u0137": "k", + "\u1E30": "K", + "\u1E31": "k", + "K\u0306": "K", + "k\u0306": "k", + "\u0139": "L", + "\u013A": "l", + "\u013B": "L", + "\u013C": "l", + "\u013D": "L", + "\u013E": "l", + "\u013F": "L", + "\u0140": "l", + "\u0141": "l", + "\u0142": "l", + "\u1E3E": "M", + "\u1E3F": "m", + "M\u0306": "M", + "m\u0306": "m", + "\u0143": "N", + "\u0144": "n", + "\u0145": "N", + "\u0146": "n", + "\u0147": "N", + "\u0148": "n", + "\u0149": "n", + "N\u0306": "N", + "n\u0306": "n", + "\u014C": "O", + "\u014D": "o", + "\u014E": "O", + "\u014F": "o", + "\u0150": "O", + "\u0151": "o", + "\u0152": "OE", + "\u0153": "oe", + "P\u0306": "P", + "p\u0306": "p", + "\u0154": "R", + "\u0155": "r", + "\u0156": "R", + "\u0157": "r", + "\u0158": "R", + "\u0159": "r", + "R\u0306": "R", + "r\u0306": "r", + "\u0212": "R", + "\u0213": "r", + "\u015A": "S", + "\u015B": "s", + "\u015C": "S", + "\u015D": "s", + "\u015E": "S", + "\u0218": "S", + "\u0219": "s", + "\u015F": "s", + "\u0160": "S", + "\u0161": "s", + "\u0162": "T", + "\u0163": "t", + "\u021B": "t", + "\u021A": "T", + "\u0164": "T", + "\u0165": "t", + "\u0166": "T", + "\u0167": "t", + "T\u0306": "T", + "t\u0306": "t", + "\u0168": "U", + "\u0169": "u", + "\u016A": "U", + "\u016B": "u", + "\u016C": "U", + "\u016D": "u", + "\u016E": "U", + "\u016F": "u", + "\u0170": "U", + "\u0171": "u", + "\u0172": "U", + "\u0173": "u", + "\u0216": "U", + "\u0217": "u", + "V\u0306": "V", + "v\u0306": "v", + "\u0174": "W", + "\u0175": "w", + "\u1E82": "W", + "\u1E83": "w", + "X\u0306": "X", + "x\u0306": "x", + "\u0176": "Y", + "\u0177": "y", + "\u0178": "Y", + "Y\u0306": "Y", + "y\u0306": "y", + "\u0179": "Z", + "\u017A": "z", + "\u017B": "Z", + "\u017C": "z", + "\u017D": "Z", + "\u017E": "z", + "\u017F": "s", + "\u0192": "f", + "\u01A0": "O", + "\u01A1": "o", + "\u01AF": "U", + "\u01B0": "u", + "\u01CD": "A", + "\u01CE": "a", + "\u01CF": "I", + "\u01D0": "i", + "\u01D1": "O", + "\u01D2": "o", + "\u01D3": "U", + "\u01D4": "u", + "\u01D5": "U", + "\u01D6": "u", + "\u01D7": "U", + "\u01D8": "u", + "\u01D9": "U", + "\u01DA": "u", + "\u01DB": "U", + "\u01DC": "u", + "\u1EE8": "U", + "\u1EE9": "u", + "\u1E78": "U", + "\u1E79": "u", + "\u01FA": "A", + "\u01FB": "a", + "\u01FC": "AE", + "\u01FD": "ae", + "\u01FE": "O", + "\u01FF": "o", + "\xDE": "TH", + "\xFE": "th", + "\u1E54": "P", + "\u1E55": "p", + "\u1E64": "S", + "\u1E65": "s", + "X\u0301": "X", + "x\u0301": "x", + "\u0403": "\u0413", + "\u0453": "\u0433", + "\u040C": "\u041A", + "\u045C": "\u043A", + "A\u030B": "A", + "a\u030B": "a", + "E\u030B": "E", + "e\u030B": "e", + "I\u030B": "I", + "i\u030B": "i", + "\u01F8": "N", + "\u01F9": "n", + "\u1ED2": "O", + "\u1ED3": "o", + "\u1E50": "O", + "\u1E51": "o", + "\u1EEA": "U", + "\u1EEB": "u", + "\u1E80": "W", + "\u1E81": "w", + "\u1EF2": "Y", + "\u1EF3": "y", + "\u0200": "A", + "\u0201": "a", + "\u0204": "E", + "\u0205": "e", + "\u0208": "I", + "\u0209": "i", + "\u020C": "O", + "\u020D": "o", + "\u0210": "R", + "\u0211": "r", + "\u0214": "U", + "\u0215": "u", + "B\u030C": "B", + "b\u030C": "b", + "\u010C\u0323": "C", + "\u010D\u0323": "c", + "\xCA\u030C": "E", + "\xEA\u030C": "e", + "F\u030C": "F", + "f\u030C": "f", + "\u01E6": "G", + "\u01E7": "g", + "\u021E": "H", + "\u021F": "h", + "J\u030C": "J", + "\u01F0": "j", + "\u01E8": "K", + "\u01E9": "k", + "M\u030C": "M", + "m\u030C": "m", + "P\u030C": "P", + "p\u030C": "p", + "Q\u030C": "Q", + "q\u030C": "q", + "\u0158\u0329": "R", + "\u0159\u0329": "r", + "\u1E66": "S", + "\u1E67": "s", + "V\u030C": "V", + "v\u030C": "v", + "W\u030C": "W", + "w\u030C": "w", + "X\u030C": "X", + "x\u030C": "x", + "Y\u030C": "Y", + "y\u030C": "y", + "A\u0327": "A", + "a\u0327": "a", + "B\u0327": "B", + "b\u0327": "b", + "\u1E10": "D", + "\u1E11": "d", + "\u0228": "E", + "\u0229": "e", + "\u0190\u0327": "E", + "\u025B\u0327": "e", + "\u1E28": "H", + "\u1E29": "h", + "I\u0327": "I", + "i\u0327": "i", + "\u0197\u0327": "I", + "\u0268\u0327": "i", + "M\u0327": "M", + "m\u0327": "m", + "O\u0327": "O", + "o\u0327": "o", + "Q\u0327": "Q", + "q\u0327": "q", + "U\u0327": "U", + "u\u0327": "u", + "X\u0327": "X", + "x\u0327": "x", + "Z\u0327": "Z", + "z\u0327": "z", + "\u0439": "\u0438", + "\u0419": "\u0418", + "\u0451": "\u0435", + "\u0401": "\u0415" + }; + var chars = Object.keys(characterMap).join("|"); + var allAccents = new RegExp(chars, "g"); + var firstAccent = new RegExp(chars, ""); + function matcher(match2) { + return characterMap[match2]; + } + var removeAccents3 = function(string) { + return string.replace(allAccents, matcher); + }; + var hasAccents = function(string) { + return !!string.match(firstAccent); + }; + module.exports = removeAccents3; + module.exports.has = hasAccents; + module.exports.remove = removeAccents3; + } +}); + +// node_modules/fast-deep-equal/es6/index.js +var require_es6 = __commonJS({ + "node_modules/fast-deep-equal/es6/index.js"(exports, module) { + "use strict"; + module.exports = function equal(a2, b2) { + if (a2 === b2) return true; + if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { + if (a2.constructor !== b2.constructor) return false; + var length, i2, keys; + if (Array.isArray(a2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (!equal(a2[i2], b2[i2])) return false; + return true; + } + if (a2 instanceof Map && b2 instanceof Map) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + for (i2 of a2.entries()) + if (!equal(i2[1], b2.get(i2[0]))) return false; + return true; + } + if (a2 instanceof Set && b2 instanceof Set) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + return true; + } + if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (a2[i2] !== b2[i2]) return false; + return true; + } + if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; + if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); + if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); + keys = Object.keys(a2); + length = keys.length; + if (length !== Object.keys(b2).length) return false; + for (i2 = length; i2-- !== 0; ) + if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; + for (i2 = length; i2-- !== 0; ) { + var key = keys[i2]; + if (!equal(a2[key], b2[key])) return false; + } + return true; + } + return a2 !== a2 && b2 !== b2; + }; + } +}); + +// package-external:@wordpress/date +var require_date = __commonJS({ + "package-external:@wordpress/date"(exports, module) { + module.exports = window.wp.date; + } +}); + +// package-external:@wordpress/warning +var require_warning = __commonJS({ + "package-external:@wordpress/warning"(exports, module) { + module.exports = window.wp.warning; + } +}); + +// package-external:@wordpress/deprecated +var require_deprecated = __commonJS({ + "package-external:@wordpress/deprecated"(exports, module) { + module.exports = window.wp.deprecated; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/editor +var require_editor = __commonJS({ + "package-external:@wordpress/editor"(exports, module) { + module.exports = window.wp.editor; + } +}); + +// package-external:@wordpress/html-entities +var require_html_entities = __commonJS({ + "package-external:@wordpress/html-entities"(exports, module) { + module.exports = window.wp.htmlEntities; + } +}); + +// package-external:@wordpress/notices +var require_notices = __commonJS({ + "package-external:@wordpress/notices"(exports, module) { + module.exports = window.wp.notices; + } +}); + +// package-external:@wordpress/dom +var require_dom = __commonJS({ + "package-external:@wordpress/dom"(exports, module) { + module.exports = window.wp.dom; + } +}); + +// package-external:@wordpress/url +var require_url = __commonJS({ + "package-external:@wordpress/url"(exports, module) { + module.exports = window.wp.url; + } +}); + +// routes/template-list/stage-activation.tsx +import { + useParams, + useNavigate as useNavigate2, + useSearch, + useInvalidate as useInvalidate2 +} from "@wordpress/route"; + +// node_modules/dequal/dist/index.mjs +var has = Object.prototype.hasOwnProperty; +function find(iter, tar, key) { + for (key of iter.keys()) { + if (dequal(key, tar)) return key; + } +} +function dequal(foo, bar) { + var ctor, len, tmp; + if (foo === bar) return true; + if (foo && bar && (ctor = foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + if (ctor === Array) { + if ((len = foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])) ; + } + return len === -1; + } + if (ctor === Set) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!bar.has(tmp)) return false; + } + return true; + } + if (ctor === Map) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len[0]; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!dequal(len[1], bar.get(tmp))) { + return false; + } + } + return true; + } + if (ctor === ArrayBuffer) { + foo = new Uint8Array(foo); + bar = new Uint8Array(bar); + } else if (ctor === DataView) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo.getInt8(len) === bar.getInt8(len)) ; + } + return len === -1; + } + if (ArrayBuffer.isView(foo)) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo[len] === bar[len]) ; + } + return len === -1; + } + if (!ctor || typeof foo === "object") { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + return foo !== foo && bar !== bar; +} + +// packages/views/build-module/use-view.mjs +var import_element = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + const preserved = (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} +function stripActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + const { [key]: _, ...rest } = result; + result = rest; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + result = { + ...result, + filters: (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ) + }; + } + if (activeViewOverrides.sort && view.sort?.field === activeViewOverrides.sort.field && view.sort?.direction === activeViewOverrides.sort.direction) { + result = { + ...result, + sort: defaultView?.sort + }; + } + if (activeViewOverrides.layout && "layout" in result && result.layout) { + const layout = { ...result.layout }; + for (const key of Object.keys(activeViewOverrides.layout)) { + delete layout[key]; + } + result = { + ...result, + layout: Object.keys(layout).length > 0 ? layout : void 0 + }; + } + if (activeViewOverrides.groupBy && "groupBy" in result) { + const { groupBy: _, ...rest } = result; + result = rest; + } + return result; +} + +// packages/views/build-module/use-view.mjs +function omit(obj, keys) { + const result = { ...obj }; + for (const key of keys) { + delete result[key]; + } + return result; +} +function useView(config) { + const { + kind, + name, + slug, + defaultView, + activeViewOverrides, + queryParams, + onChangeQueryParams + } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data.useSelect)( + (select2) => { + return select2(import_preferences.store).get( + "core/views", + preferenceKey + ); + }, + [preferenceKey] + ); + const { set } = (0, import_data.useDispatch)(import_preferences.store); + const baseView = persistedView ?? defaultView; + const page = Number(queryParams?.page ?? baseView.page ?? 1); + const search = queryParams?.search ?? baseView.search ?? ""; + const view = (0, import_element.useMemo)(() => { + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); + }, [baseView, page, search, activeViewOverrides, defaultView]); + const isModified = !!persistedView; + const updateView = (0, import_element.useCallback)( + (newView) => { + const urlParams = { + page: newView?.page, + search: newView?.search + }; + const preferenceView = stripActiveViewOverrides( + omit(newView, ["page", "search"]), + activeViewOverrides, + defaultView + ); + if (onChangeQueryParams && !dequal(urlParams, { page, search })) { + onChangeQueryParams(urlParams); + } + const comparableBaseView = stripActiveViewOverrides( + baseView, + activeViewOverrides, + defaultView + ); + const comparableDefaultView = stripActiveViewOverrides( + defaultView, + activeViewOverrides, + defaultView + ); + if (!dequal(comparableBaseView, preferenceView)) { + if (dequal(preferenceView, comparableDefaultView)) { + set("core/views", preferenceKey, void 0); + } else { + set("core/views", preferenceKey, preferenceView); + } + } + }, + [ + onChangeQueryParams, + page, + search, + baseView, + defaultView, + activeViewOverrides, + set, + preferenceKey + ] + ); + const resetToDefault = (0, import_element.useCallback)(() => { + set("core/views", preferenceKey, void 0); + }, [preferenceKey, set]); + return { + view, + isModified, + updateView, + resetToDefault + }; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); + +// packages/dataviews/build-module/dataviews/index.mjs +var import_element56 = __toESM(require_element(), 1); +var import_compose12 = __toESM(require_compose(), 1); + +// node_modules/@base-ui/utils/esm/useRefWithInit.js +var React2 = __toESM(require_react(), 1); +var UNINITIALIZED = {}; +function useRefWithInit(init2, initArg) { + const ref = React2.useRef(UNINITIALIZED); + if (ref.current === UNINITIALIZED) { + ref.current = init2(initArg); + } + return ref; +} + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var React5 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/useMergedRefs.js +function useMergedRefs(a2, b2, c2, d2) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChange(forkRef, a2, b2, c2, d2)) { + update(forkRef, [a2, b2, c2, d2]); + } + return forkRef.callback; +} +function useMergedRefsN(refs) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChangeN(forkRef, refs)) { + update(forkRef, refs); + } + return forkRef.callback; +} +function createForkRef() { + return { + callback: null, + cleanup: null, + refs: [] + }; +} +function didChange(forkRef, a2, b2, c2, d2) { + return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; +} +function didChangeN(forkRef, newRefs) { + return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]); +} +function update(forkRef, refs) { + forkRef.refs = refs; + if (refs.every((ref) => ref == null)) { + forkRef.callback = null; + return; + } + forkRef.callback = (instance) => { + if (forkRef.cleanup) { + forkRef.cleanup(); + forkRef.cleanup = null; + } + if (instance != null) { + const cleanupCallbacks = Array(refs.length).fill(null); + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const refCleanup = ref(instance); + if (typeof refCleanup === "function") { + cleanupCallbacks[i2] = refCleanup; + } + break; + } + case "object": { + ref.current = instance; + break; + } + default: + } + } + forkRef.cleanup = () => { + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const cleanupCallback = cleanupCallbacks[i2]; + if (typeof cleanupCallback === "function") { + cleanupCallback(); + } else { + ref(null); + } + break; + } + case "object": { + ref.current = null; + break; + } + default: + } + } + }; + } + }; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +var React4 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/reactVersion.js +var React3 = __toESM(require_react(), 1); +var majorVersion = parseInt(React3.version, 10); +function isReactVersionAtLeast(reactVersionToCheck) { + return majorVersion >= reactVersionToCheck; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +function getReactElementRef(element) { + if (!/* @__PURE__ */ React4.isValidElement(element)) { + return null; + } + const reactElement = element; + const propsWithRef = reactElement.props; + return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; +} + +// node_modules/@base-ui/utils/esm/mergeObjects.js +function mergeObjects(a2, b2) { + if (a2 && !b2) { + return a2; + } + if (!a2 && b2) { + return b2; + } + if (a2 || b2) { + return { + ...a2, + ...b2 + }; + } + return void 0; +} + +// node_modules/@base-ui/react/esm/utils/getStateAttributesProps.js +function getStateAttributesProps(state, customMapping) { + const props = {}; + for (const key in state) { + const value = state[key]; + if (customMapping?.hasOwnProperty(key)) { + const customProps = customMapping[key](value); + if (customProps != null) { + Object.assign(props, customProps); + } + continue; + } + if (value === true) { + props[`data-${key.toLowerCase()}`] = ""; + } else if (value) { + props[`data-${key.toLowerCase()}`] = value.toString(); + } + } + return props; +} + +// node_modules/@base-ui/react/esm/utils/resolveClassName.js +function resolveClassName(className, state) { + return typeof className === "function" ? className(state) : className; +} + +// node_modules/@base-ui/react/esm/utils/resolveStyle.js +function resolveStyle(style, state) { + return typeof style === "function" ? style(state) : style; +} + +// node_modules/@base-ui/react/esm/merge-props/mergeProps.js +var EMPTY_PROPS = {}; +function mergeProps(a2, b2, c2, d2, e2) { + let merged = { + ...resolvePropsGetter(a2, EMPTY_PROPS) + }; + if (b2) { + merged = mergeOne(merged, b2); + } + if (c2) { + merged = mergeOne(merged, c2); + } + if (d2) { + merged = mergeOne(merged, d2); + } + if (e2) { + merged = mergeOne(merged, e2); + } + return merged; +} +function mergePropsN(props) { + if (props.length === 0) { + return EMPTY_PROPS; + } + if (props.length === 1) { + return resolvePropsGetter(props[0], EMPTY_PROPS); + } + let merged = { + ...resolvePropsGetter(props[0], EMPTY_PROPS) + }; + for (let i2 = 1; i2 < props.length; i2 += 1) { + merged = mergeOne(merged, props[i2]); + } + return merged; +} +function mergeOne(merged, inputProps) { + if (isPropsGetter(inputProps)) { + return inputProps(merged); + } + return mutablyMergeInto(merged, inputProps); +} +function mutablyMergeInto(mergedProps, externalProps) { + if (!externalProps) { + return mergedProps; + } + for (const propName in externalProps) { + const externalPropValue = externalProps[propName]; + switch (propName) { + case "style": { + mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); + break; + } + case "className": { + mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); + break; + } + default: { + if (isEventHandler(propName, externalPropValue)) { + mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); + } else { + mergedProps[propName] = externalPropValue; + } + } + } + } + return mergedProps; +} +function isEventHandler(key, value) { + const code0 = key.charCodeAt(0); + const code1 = key.charCodeAt(1); + const code2 = key.charCodeAt(2); + return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); +} +function isPropsGetter(inputProps) { + return typeof inputProps === "function"; +} +function resolvePropsGetter(inputProps, previousProps) { + if (isPropsGetter(inputProps)) { + return inputProps(previousProps); + } + return inputProps ?? EMPTY_PROPS; +} +function mergeEventHandlers(ourHandler, theirHandler) { + if (!theirHandler) { + return ourHandler; + } + if (!ourHandler) { + return theirHandler; + } + return (event) => { + if (isSyntheticEvent(event)) { + const baseUIEvent = event; + makeEventPreventable(baseUIEvent); + const result2 = theirHandler(baseUIEvent); + if (!baseUIEvent.baseUIHandlerPrevented) { + ourHandler?.(baseUIEvent); + } + return result2; + } + const result = theirHandler(event); + ourHandler?.(event); + return result; + }; +} +function makeEventPreventable(event) { + event.preventBaseUIHandler = () => { + event.baseUIHandlerPrevented = true; + }; + return event; +} +function mergeClassNames(ourClassName, theirClassName) { + if (theirClassName) { + if (ourClassName) { + return theirClassName + " " + ourClassName; + } + return theirClassName; + } + return ourClassName; +} +function isSyntheticEvent(event) { + return event != null && typeof event === "object" && "nativeEvent" in event; +} + +// node_modules/@base-ui/utils/esm/empty.js +var EMPTY_ARRAY = Object.freeze([]); +var EMPTY_OBJECT = Object.freeze({}); + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var import_react = __toESM(require_react(), 1); +function useRenderElement(element, componentProps, params = {}) { + const renderProp = componentProps.render; + const outProps = useRenderElementProps(componentProps, params); + if (params.enabled === false) { + return null; + } + const state = params.state ?? EMPTY_OBJECT; + return evaluateRenderProp(element, renderProp, outProps, state); +} +function useRenderElementProps(componentProps, params = {}) { + const { + className: classNameProp, + style: styleProp, + render: renderProp + } = componentProps; + const { + state = EMPTY_OBJECT, + ref, + props, + stateAttributesMapping, + enabled = true + } = params; + const className = enabled ? resolveClassName(classNameProp, state) : void 0; + const style = enabled ? resolveStyle(styleProp, state) : void 0; + const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; + const outProps = enabled ? mergeObjects(stateProps, Array.isArray(props) ? mergePropsN(props) : props) ?? EMPTY_OBJECT : EMPTY_OBJECT; + if (typeof document !== "undefined") { + if (!enabled) { + useMergedRefs(null, null); + } else if (Array.isArray(ref)) { + outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); + } else { + outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); + } + } + if (!enabled) { + return EMPTY_OBJECT; + } + if (className !== void 0) { + outProps.className = mergeClassNames(outProps.className, className); + } + if (style !== void 0) { + outProps.style = mergeObjects(outProps.style, style); + } + return outProps; +} +function evaluateRenderProp(element, render4, props, state) { + if (render4) { + if (typeof render4 === "function") { + return render4(props, state); + } + const mergedProps = mergeProps(props, render4.props); + mergedProps.ref = props.ref; + return /* @__PURE__ */ React5.cloneElement(render4, mergedProps); + } + if (element) { + if (typeof element === "string") { + return renderTag(element, props); + } + } + throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage(8)); +} +function renderTag(Tag, props) { + if (Tag === "button") { + return /* @__PURE__ */ (0, import_react.createElement)("button", { + type: "button", + ...props, + key: props.key + }); + } + if (Tag === "img") { + return /* @__PURE__ */ (0, import_react.createElement)("img", { + alt: "", + ...props, + key: props.key + }); + } + return /* @__PURE__ */ React5.createElement(Tag, props); +} + +// node_modules/@base-ui/react/esm/use-render/useRender.js +function useRender(params) { + return useRenderElement(params.defaultTagName ?? "div", params, params); +} + +// node_modules/clsx/dist/clsx.mjs +function r(e2) { + var t2, f2, n2 = ""; + if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; + else if ("object" == typeof e2) if (Array.isArray(e2)) { + var o2 = e2.length; + for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2); + } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); + return n2; +} +function clsx() { + for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); + return n2; +} +var clsx_default = clsx; + +// packages/icons/build-module/library/archive.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var archive_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M11.934 7.406a1 1 0 0 0 .914.594H19a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5h5.764a.5.5 0 0 1 .447.276l.723 1.63Zm1.064-1.216a.5.5 0 0 0 .462.31H19a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.764a2 2 0 0 1 1.789 1.106l.445 1.084ZM8.5 10.5h7V12h-7v-1.5Zm7 3.5h-7v1.5h7V14Z" }) }); + +// packages/icons/build-module/library/arrow-down.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) }); + +// packages/icons/build-module/library/arrow-left.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) }); + +// packages/icons/build-module/library/arrow-right.mjs +var import_primitives4 = __toESM(require_primitives(), 1); +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) }); + +// packages/icons/build-module/library/arrow-up.mjs +var import_primitives5 = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) }); + +// packages/icons/build-module/library/block-meta.mjs +var import_primitives6 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var block_meta_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { fillRule: "evenodd", d: "M8.95 11.25H4v1.5h4.95v4.5H13V18c0 1.1.9 2 2 2h3c1.1 0 2-.9 2-2v-3c0-1.1-.9-2-2-2h-3c-1.1 0-2 .9-2 2v.75h-2.55v-7.5H13V9c0 1.1.9 2 2 2h3c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3c-1.1 0-2 .9-2 2v.75H8.95v4.5ZM14.5 15v3c0 .3.2.5.5.5h3c.3 0 .5-.2.5-.5v-3c0-.3-.2-.5-.5-.5h-3c-.3 0-.5.2-.5.5Zm0-6V6c0-.3.2-.5.5-.5h3c.3 0 .5.2.5.5v3c0 .3-.2.5-.5.5h-3c-.3 0-.5-.2-.5-.5Z", clipRule: "evenodd" }) }); + +// packages/icons/build-module/library/block-table.mjs +var import_primitives7 = __toESM(require_primitives(), 1); +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) }); + +// packages/icons/build-module/library/calendar.mjs +var import_primitives8 = __toESM(require_primitives(), 1); +var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); +var calendar_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z" }) }); + +// packages/icons/build-module/library/category.mjs +var import_primitives9 = __toESM(require_primitives(), 1); +var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); +var category_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z" }) }); + +// packages/icons/build-module/library/check.mjs +var import_primitives10 = __toESM(require_primitives(), 1); +var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); +var check_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) }); + +// packages/icons/build-module/library/close-small.mjs +var import_primitives11 = __toESM(require_primitives(), 1); +var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); +var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) }); + +// packages/icons/build-module/library/cog.mjs +var import_primitives12 = __toESM(require_primitives(), 1); +var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); +var cog_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z" }) }); + +// packages/icons/build-module/library/comment-author-avatar.mjs +var import_primitives13 = __toESM(require_primitives(), 1); +var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); +var comment_author_avatar_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M7.25 16.437a6.5 6.5 0 1 1 9.5 0V16A2.75 2.75 0 0 0 14 13.25h-4A2.75 2.75 0 0 0 7.25 16v.437Zm1.5 1.193a6.47 6.47 0 0 0 3.25.87 6.47 6.47 0 0 0 3.25-.87V16c0-.69-.56-1.25-1.25-1.25h-4c-.69 0-1.25.56-1.25 1.25v1.63ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm10-2a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z" }) }); + +// packages/icons/build-module/library/envelope.mjs +var import_primitives14 = __toESM(require_primitives(), 1); +var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); +var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z" }) }); + +// packages/icons/build-module/library/error.mjs +var import_primitives15 = __toESM(require_primitives(), 1); +var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); +var error_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z" }) }); + +// packages/icons/build-module/library/format-list-bullets-rtl.mjs +var import_primitives16 = __toESM(require_primitives(), 1); +var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) }); + +// packages/icons/build-module/library/format-list-bullets.mjs +var import_primitives17 = __toESM(require_primitives(), 1); +var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) }); + +// packages/icons/build-module/library/funnel.mjs +var import_primitives18 = __toESM(require_primitives(), 1); +var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); +var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) }); + +// packages/icons/build-module/library/home.mjs +var import_primitives19 = __toESM(require_primitives(), 1); +var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); +var home_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.Path, { d: "M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z" }) }); + +// packages/icons/build-module/library/layout.mjs +var import_primitives20 = __toESM(require_primitives(), 1); +var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); +var layout_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.Path, { d: "M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" }) }); + +// packages/icons/build-module/library/link.mjs +var import_primitives21 = __toESM(require_primitives(), 1); +var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); +var link_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) }); + +// packages/icons/build-module/library/list.mjs +var import_primitives22 = __toESM(require_primitives(), 1); +var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); +var list_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M4 4v1.5h16V4H4zm8 8.5h8V11h-8v1.5zM4 20h16v-1.5H4V20zm4-8c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2z" }) }); + +// packages/icons/build-module/library/media.mjs +var import_primitives23 = __toESM(require_primitives(), 1); +var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); +var media_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: [ + /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.Path, { d: "m7 6.5 4 2.5-4 2.5z" }), + /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "m5 3c-1.10457 0-2 .89543-2 2v14c0 1.1046.89543 2 2 2h14c1.1046 0 2-.8954 2-2v-14c0-1.10457-.8954-2-2-2zm14 1.5h-14c-.27614 0-.5.22386-.5.5v10.7072l3.62953-2.6465c.25108-.1831.58905-.1924.84981-.0234l2.92666 1.8969 3.5712-3.4719c.2911-.2831.7545-.2831 1.0456 0l2.9772 2.8945v-9.3568c0-.27614-.2239-.5-.5-.5zm-14.5 14.5v-1.4364l4.09643-2.987 2.99567 1.9417c.2936.1903.6798.1523.9307-.0917l3.4772-3.3806 3.4772 3.3806.0228-.0234v2.5968c0 .2761-.2239.5-.5.5h-14c-.27614 0-.5-.2239-.5-.5z" }) +] }); + +// packages/icons/build-module/library/mobile.mjs +var import_primitives24 = __toESM(require_primitives(), 1); +var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); +var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) }); + +// packages/icons/build-module/library/more-vertical.mjs +var import_primitives25 = __toESM(require_primitives(), 1); +var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); +var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); + +// packages/icons/build-module/library/next.mjs +var import_primitives26 = __toESM(require_primitives(), 1); +var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); +var next_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); + +// packages/icons/build-module/library/not-found.mjs +var import_primitives27 = __toESM(require_primitives(), 1); +var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); +var not_found_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.Path, { d: "M19 5c1.1 0 2 .9 2 2v10c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2V7c0-1.1.9-2 2-2zM5 6.5c-.3 0-.5.2-.5.5v10c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V7c0-.3-.2-.5-.5-.5zm7.01 2.75q.711 0 1.24.364.533.364.824 1.012.296.645.296 1.488 0 .887-.296 1.556-.292.664-.824 1.036-.528.368-1.24.368-.708 0-1.24-.368-.527-.372-.824-1.036-.296-.668-.296-1.556 0-.848.296-1.492.296-.648.824-1.008a2.14 2.14 0 0 1 1.24-.364m-3.484 3.6h.72v.832h-.72v1.28h-.984v-1.28H4.75l3.08-4.32h.696zm9.522 0h.72v.832h-.72v1.28h-.983v-1.28h-2.793l3.08-4.32h.696zm-6.038-2.696q-.568 0-.952.48-.384.475-.384 1.48 0 .716.176 1.168.176.45.476.66.304.212.684.212t.68-.208q.304-.207.48-.656.176-.451.176-1.176 0-.996-.384-1.476-.38-.484-.952-.484M6.33 12.85h1.212v-1.722zm9.523 0h1.211v-1.722z" }) }); + +// packages/icons/build-module/library/page.mjs +var import_primitives28 = __toESM(require_primitives(), 1); +var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); +var page_default = /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_primitives28.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: [ + /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.Path, { d: "M15.5 7.5h-7V9h7V7.5Zm-7 3.5h7v1.5h-7V11Zm7 3.5h-7V16h7v-1.5Z" }), + /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.Path, { d: "M17 4H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2ZM7 5.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5Z" }) +] }); + +// packages/icons/build-module/library/pencil.mjs +var import_primitives29 = __toESM(require_primitives(), 1); +var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); +var pencil_default = /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_primitives29.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_primitives29.Path, { d: "m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z" }) }); + +// packages/icons/build-module/library/pin.mjs +var import_primitives30 = __toESM(require_primitives(), 1); +var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); +var pin_default = /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_primitives30.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_primitives30.Path, { d: "m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z" }) }); + +// packages/icons/build-module/library/post.mjs +var import_primitives31 = __toESM(require_primitives(), 1); +var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); +var post_default = /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_primitives31.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_primitives31.Path, { d: "m7.3 9.7 1.4 1.4c.2-.2.3-.3.4-.5 0 0 0-.1.1-.1.3-.5.4-1.1.3-1.6L12 7 9 4 7.2 6.5c-.6-.1-1.1 0-1.6.3 0 0-.1 0-.1.1-.3.1-.4.2-.6.4l1.4 1.4L4 11v1h1l2.3-2.3zM4 20h9v-1.5H4V20zm0-5.5V16h16v-1.5H4z" }) }); + +// packages/icons/build-module/library/previous.mjs +var import_primitives32 = __toESM(require_primitives(), 1); +var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); +var previous_default = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_primitives32.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_primitives32.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); + +// packages/icons/build-module/library/published.mjs +var import_primitives33 = __toESM(require_primitives(), 1); +var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); +var published_default = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_primitives33.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_primitives33.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm11.53-1.47-1.06-1.06L11 12.94l-1.47-1.47-1.06 1.06L11 15.06l4.53-4.53Z" }) }); + +// packages/icons/build-module/library/scheduled.mjs +var import_primitives34 = __toESM(require_primitives(), 1); +var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); +var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_primitives34.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_primitives34.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z" }) }); + +// packages/icons/build-module/library/search.mjs +var import_primitives35 = __toESM(require_primitives(), 1); +var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); +var search_default = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_primitives35.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_primitives35.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) }); + +// packages/icons/build-module/library/seen.mjs +var import_primitives36 = __toESM(require_primitives(), 1); +var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); +var seen_default = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_primitives36.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_primitives36.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) }); + +// packages/icons/build-module/library/tag.mjs +var import_primitives37 = __toESM(require_primitives(), 1); +var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); +var tag_default = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_primitives37.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_primitives37.Path, { d: "M4.75 4a.75.75 0 0 0-.75.75v7.826c0 .2.08.39.22.53l6.72 6.716a2.313 2.313 0 0 0 3.276-.001l5.61-5.611-.531-.53.532.528a2.315 2.315 0 0 0 0-3.264L13.104 4.22a.75.75 0 0 0-.53-.22H4.75ZM19 12.576a.815.815 0 0 1-.236.574l-5.61 5.611a.814.814 0 0 1-1.153 0L5.5 12.264V5.5h6.763l6.5 6.502a.816.816 0 0 1 .237.574ZM8.75 9.75a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z" }) }); + +// packages/icons/build-module/library/unseen.mjs +var import_primitives38 = __toESM(require_primitives(), 1); +var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); +var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_primitives38.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_primitives38.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) }); + +// packages/icons/build-module/library/verse.mjs +var import_primitives39 = __toESM(require_primitives(), 1); +var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); +var verse_default = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_primitives39.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_primitives39.Path, { d: "M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z" }) }); + +// packages/ui/build-module/stack/stack.mjs +var import_element2 = __toESM(require_element(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='71d20935c2']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "71d20935c2"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")); + document.head.appendChild(style); +} +var style_default = { "stack": "_19ce0419607e1896__stack" }; +var gapTokens = { + xs: "var(--wpds-dimension-gap-xs, 4px)", + sm: "var(--wpds-dimension-gap-sm, 8px)", + md: "var(--wpds-dimension-gap-md, 12px)", + lg: "var(--wpds-dimension-gap-lg, 16px)", + xl: "var(--wpds-dimension-gap-xl, 24px)", + "2xl": "var(--wpds-dimension-gap-2xl, 32px)", + "3xl": "var(--wpds-dimension-gap-3xl, 40px)" +}; +var Stack = (0, import_element2.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) { + const style = { + gap: gap && gapTokens[gap], + alignItems: align, + justifyContent: justify, + flexDirection: direction, + flexWrap: wrap + }; + const element = useRender({ + render: render4, + ref, + props: mergeProps(props, { style, className: style_default.stack }) + }); + return element; +}); + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var import_element3 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/constants.mjs +var import_i18n = __toESM(require_i18n(), 1); +var OPERATOR_IS_ANY = "isAny"; +var OPERATOR_IS_NONE = "isNone"; +var OPERATOR_IS_ALL = "isAll"; +var OPERATOR_IS_NOT_ALL = "isNotAll"; +var OPERATOR_BETWEEN = "between"; +var OPERATOR_IN_THE_PAST = "inThePast"; +var OPERATOR_OVER = "over"; +var OPERATOR_IS = "is"; +var OPERATOR_IS_NOT = "isNot"; +var OPERATOR_LESS_THAN = "lessThan"; +var OPERATOR_GREATER_THAN = "greaterThan"; +var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual"; +var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual"; +var OPERATOR_BEFORE = "before"; +var OPERATOR_AFTER = "after"; +var OPERATOR_BEFORE_INC = "beforeInc"; +var OPERATOR_AFTER_INC = "afterInc"; +var OPERATOR_CONTAINS = "contains"; +var OPERATOR_NOT_CONTAINS = "notContains"; +var OPERATOR_STARTS_WITH = "startsWith"; +var OPERATOR_ON = "on"; +var OPERATOR_NOT_ON = "notOn"; +var SORTING_DIRECTIONS = ["asc", "desc"]; +var sortArrows = { asc: "\u2191", desc: "\u2193" }; +var sortValues = { asc: "ascending", desc: "descending" }; +var sortLabels = { + asc: (0, import_i18n.__)("Sort ascending"), + desc: (0, import_i18n.__)("Sort descending") +}; +var sortIcons = { + asc: arrow_up_default, + desc: arrow_down_default +}; +var LAYOUT_TABLE = "table"; +var LAYOUT_GRID = "grid"; +var LAYOUT_LIST = "list"; +var LAYOUT_ACTIVITY = "activity"; +var LAYOUT_PICKER_GRID = "pickerGrid"; +var LAYOUT_PICKER_TABLE = "pickerTable"; + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var DataViewsContext = (0, import_element3.createContext)({ + view: { type: LAYOUT_TABLE }, + onChangeView: () => { + }, + fields: [], + data: [], + paginationInfo: { + totalItems: 0, + totalPages: 0 + }, + selection: [], + onChangeSelection: () => { + }, + setOpenedFilter: () => { + }, + openedFilter: null, + getItemId: (item) => item.id, + isItemClickable: () => true, + renderItemLink: void 0, + containerWidth: 0, + containerRef: (0, import_element3.createRef)(), + resizeObserverRef: () => { + }, + defaultLayouts: { list: {}, grid: {}, table: {} }, + filters: [], + isShowingFilter: false, + setIsShowingFilter: () => { + }, + hasInitiallyLoaded: false, + hasInfiniteScrollHandler: false, + config: { + perPageSizes: [] + } +}); +DataViewsContext.displayName = "DataViewsContext"; +var dataviews_context_default = DataViewsContext; + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var import_i18n21 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_i18n9 = __toESM(require_i18n(), 1); +var import_components6 = __toESM(require_components(), 1); +var import_element11 = __toESM(require_element(), 1); +var import_keycodes = __toESM(require_keycodes(), 1); + +// packages/dataviews/build-module/components/dataviews-selection-checkbox/index.mjs +var import_components = __toESM(require_components(), 1); +var import_i18n2 = __toESM(require_i18n(), 1); +var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); +function DataViewsSelectionCheckbox({ + selection, + onChangeSelection, + item, + getItemId: getItemId3, + titleField, + disabled, + ...extraProps +}) { + const id = getItemId3(item); + const checked = !disabled && selection.includes(id); + const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n2.__)("(no title)"); + return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components.CheckboxControl, + { + className: "dataviews-selection-checkbox", + "aria-label": selectionLabel, + "aria-disabled": disabled, + checked, + onChange: () => { + if (disabled) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + }, + ...extraProps + } + ); +} + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_components2 = __toESM(require_components(), 1); +var import_i18n3 = __toESM(require_i18n(), 1); +var import_element4 = __toESM(require_element(), 1); +var import_data3 = __toESM(require_data(), 1); +var import_compose = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/lock-unlock.mjs +var import_private_apis = __toESM(require_private_apis(), 1); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/dataviews" +); + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); +var { Menu, kebabCase } = unlock(import_components2.privateApis); +function ButtonTrigger({ + action, + onClick, + items, + variant +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + import_components2.Button, + { + disabled: !!action.disabled, + accessibleWhenDisabled: true, + size: "compact", + variant, + onClick, + children: label + } + ); +} +function MenuItemTrigger({ + action, + onClick, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Menu.ItemLabel, { children: label }) }); +} +function ActionModal({ + action, + items, + closeModal +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader; + return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + import_components2.Modal, + { + title: modalHeader || label, + __experimentalHideHeader: !!action.hideModalHeader, + onRequestClose: closeModal, + focusOnMount: action.modalFocusOnMount ?? true, + size: action.modalSize || "medium", + overlayClassName: `dataviews-action-modal dataviews-action-modal__${kebabCase( + action.id + )}`, + children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(action.RenderModal, { items, closeModal }) + } + ); +} +function ActionsMenuGroup({ + actions, + item, + registry, + setActiveModalAction +}) { + const { primaryActions, regularActions } = (0, import_element4.useMemo)(() => { + return actions.reduce( + (acc, action) => { + (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action); + return acc; + }, + { + primaryActions: [], + regularActions: [] + } + ); + }, [actions]); + const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + MenuItemTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item] + }, + action.id + )); + return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Menu.Group, { children: [ + renderActionGroup(primaryActions), + renderActionGroup(regularActions) + ] }); +} +function ItemActions({ + item, + actions, + isCompact +}) { + const registry = (0, import_data3.useRegistry)(); + const { primaryActions, eligibleActions } = (0, import_element4.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isCompact) { + return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + isSmall: true, + registry + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( + Stack, + { + direction: "row", + justify: "flex-end", + className: "dataviews-item-actions", + style: { + flexShrink: 0, + width: "auto" + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport) && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + registry + } + ) + ] + } + ); +} +function CompactItemActions({ + item, + actions, + isSmall, + registry +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)( + null + ); + return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Menu, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + Menu.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + import_components2.Button, + { + size: isSmall ? "small" : "compact", + icon: more_vertical_default, + label: (0, import_i18n3.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + className: "dataviews-all-actions-button" + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + ActionsMenuGroup, + { + actions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} +function PrimaryActions({ + item, + actions, + registry, + buttonVariant +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)(null); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isMobileViewport) { + return null; + } + if (!Array.isArray(actions) || actions.length === 0) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [ + actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + ButtonTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item], + variant: buttonVariant + }, + action.id + )), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_components3 = __toESM(require_components(), 1); +var import_i18n5 = __toESM(require_i18n(), 1); +var import_element5 = __toESM(require_element(), 1); +var import_data4 = __toESM(require_data(), 1); +var import_compose2 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/utils/get-footer-message.mjs +var import_i18n4 = __toESM(require_i18n(), 1); +function getFooterMessage(selectionCount, itemsCount, totalItems) { + if (selectionCount > 0) { + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item selected", "%d Items selected", selectionCount), + selectionCount + ); + } + if (totalItems > itemsCount) { + return (0, import_i18n4.sprintf)( + /* translators: %1$d: number of items. %2$d: total number of items. */ + (0, import_i18n4._n)("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems), + itemsCount, + totalItems + ); + } + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item", "%d Items", itemsCount), + itemsCount + ); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); +function ActionWithModal({ + action, + items, + ActionTriggerComponent +}) { + const [isModalOpen, setIsModalOpen] = (0, import_element5.useState)(false); + const actionTriggerProps = { + action, + onClick: () => { + setIsModalOpen(true); + }, + items + }; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ActionTriggerComponent, { ...actionTriggerProps }), + isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ActionModal, + { + action, + items, + closeModal: () => setIsModalOpen(false) + } + ) + ] }); +} +function useHasAPossibleBulkAction(actions, item) { + return (0, import_element5.useMemo)(() => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }, [actions, item]); +} +function useSomeItemHasAPossibleBulkAction(actions, data) { + return (0, import_element5.useMemo)(() => { + return data.some((item) => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }); + }, [actions, data]); +} +function BulkSelectionCheckbox({ + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId3 +}) { + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return actions.some( + (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) + ); + }); + }, [data, actions]); + const selectedItems = data.filter( + (item) => selection.includes(getItemId3(item)) && selectableItems.includes(item) + ); + const areAllSelected = selectedItems.length === selectableItems.length; + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components3.CheckboxControl, + { + className: "dataviews-view-table-selection-checkbox", + checked: areAllSelected, + indeterminate: !areAllSelected && !!selectedItems.length, + onChange: () => { + if (areAllSelected) { + onChangeSelection([]); + } else { + onChangeSelection( + selectableItems.map((item) => getItemId3(item)) + ); + } + }, + "aria-label": areAllSelected ? (0, import_i18n5.__)("Deselect all") : (0, import_i18n5.__)("Select all") + } + ); +} +function ActionTrigger({ + action, + onClick, + isBusy, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + if (isMobile) { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + label, + icon: action.icon, + size: "compact", + onClick, + isBusy + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + size: "compact", + onClick, + isBusy, + children: label + } + ); +} +var EMPTY_ARRAY2 = []; +function ActionButton({ + action, + selectedItems, + actionInProgress, + setActionInProgress +}) { + const registry = (0, import_data4.useRegistry)(); + const selectedEligibleItems = (0, import_element5.useMemo)(() => { + return selectedItems.filter((item) => { + return !action.isEligible || action.isEligible(item); + }); + }, [action, selectedItems]); + if ("RenderModal" in action) { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ActionWithModal, + { + action, + items: selectedEligibleItems, + ActionTriggerComponent: ActionTrigger + }, + action.id + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ActionTrigger, + { + action, + onClick: async () => { + setActionInProgress(action.id); + await action.callback(selectedItems, { + registry + }); + setActionInProgress(null); + }, + items: selectedEligibleItems, + isBusy: actionInProgress === action.id + }, + action.id + ); +} +function renderFooterContent(data, actions, getItemId3, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) { + const message2 = getFooterMessage( + selection.length, + data.length, + paginationInfo.totalItems + ); + return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__container", + gap: "md", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId3 + } + ), + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }), + /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__action-buttons", + gap: "xs", + children: [ + actionsToShow.map((action) => { + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ActionButton, + { + action, + selectedItems, + actionInProgress, + setActionInProgress + }, + action.id + ); + }), + selectedItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components3.Button, + { + icon: close_small_default, + showTooltip: true, + tooltipPosition: "top", + size: "compact", + label: (0, import_i18n5.__)("Cancel"), + disabled: !!actionInProgress, + accessibleWhenDisabled: false, + onClick: () => { + onChangeSelection(EMPTY_ARRAY2); + } + } + ) + ] + } + ) + ] + } + ); +} +function FooterContent({ + selection, + actions, + onChangeSelection, + data, + getItemId: getItemId3, + paginationInfo +}) { + const [actionInProgress, setActionInProgress] = (0, import_element5.useState)( + null + ); + const footerContentRef = (0, import_element5.useRef)(void 0); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + const bulkActions = (0, import_element5.useMemo)( + () => actions.filter((action) => action.supportsBulk), + [actions] + ); + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return bulkActions.some( + (action) => !action.isEligible || action.isEligible(item) + ); + }); + }, [data, bulkActions]); + const selectedItems = (0, import_element5.useMemo)(() => { + return data.filter( + (item) => selection.includes(getItemId3(item)) && selectableItems.includes(item) + ); + }, [selection, data, getItemId3, selectableItems]); + const actionsToShow = (0, import_element5.useMemo)( + () => actions.filter((action) => { + return action.supportsBulk && (!isMobile || action.icon) && selectedItems.some( + (item) => !action.isEligible || action.isEligible(item) + ); + }), + [actions, selectedItems, isMobile] + ); + if (!actionInProgress) { + if (footerContentRef.current) { + footerContentRef.current = void 0; + } + return renderFooterContent( + data, + actions, + getItemId3, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } else if (!footerContentRef.current) { + footerContentRef.current = renderFooterContent( + data, + actions, + getItemId3, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } + return footerContentRef.current; +} +function BulkActionsFooter() { + const { + data, + selection, + actions = EMPTY_ARRAY2, + onChangeSelection, + getItemId: getItemId3, + paginationInfo + } = (0, import_element5.useContext)(dataviews_context_default); + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + FooterContent, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId3, + paginationInfo + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_i18n6 = __toESM(require_i18n(), 1); +var import_components4 = __toESM(require_components(), 1); +var import_element6 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/utils/get-hideable-fields.mjs +function getHideableFields(view, fields) { + const togglableFields = [ + view?.titleField, + view?.mediaField, + view?.descriptionField + ].filter(Boolean); + return fields.filter( + (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu2 } = unlock(import_components4.privateApis); +function WithMenuSeparators({ children }) { + return import_element6.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_element6.Fragment, { children: [ + i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.Separator, {}), + child + ] }, i2)); +} +var _HeaderMenu = (0, import_element6.forwardRef)(function HeaderMenu({ + fieldId, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove = true, + canInsertLeft = true, + canInsertRight = true +}, ref) { + const visibleFieldIds = view.fields ?? []; + const index = visibleFieldIds?.indexOf(fieldId); + const isSorted = view.sort?.field === fieldId; + let isHidable = false; + let isSortable = false; + let canAddFilter = false; + let operators = []; + const field = fields.find((f2) => f2.id === fieldId); + const { setIsShowingFilter } = (0, import_element6.useContext)(dataviews_context_default); + if (!field) { + return null; + } + isHidable = field.enableHiding !== false; + isSortable = field.enableSorting !== false; + const header = field.header; + operators = !!field.filterBy && field.filterBy?.operators || []; + canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary; + if (!isSortable && !canMove && !isHidable && !canAddFilter) { + return header; + } + const hiddenFields = getHideableFields(view, fields).filter( + (f2) => !visibleFieldIds.includes(f2.id) + ); + const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length; + const isRtl = (0, import_i18n6.isRTL)(); + return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)( + Menu2.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + import_components4.Button, + { + size: "compact", + className: "dataviews-view-table-header-button", + ref, + variant: "tertiary" + } + ), + children: [ + header, + view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(WithMenuSeparators, { children: [ + isSortable && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map( + (direction) => { + const isChecked = view.sort && isSorted && view.sort.direction === direction; + const value = `${fieldId}-${direction}`; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Menu2.RadioItem, + { + name: "view-table-sorting", + value, + checked: isChecked, + onChange: () => { + onChangeView({ + ...view, + sort: { + field: fieldId, + direction + }, + showLevels: false + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] }) + }, + value + ); + } + ) }), + canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components4.Icon, { icon: funnel_default }), + onClick: () => { + setOpenedFilter(fieldId); + setIsShowingFilter(true); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: fieldId, + value: void 0, + operator: operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Add filter") }) + } + ) }), + (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(Menu2.Group, { children: [ + canMove && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components4.Icon, { icon: arrow_left_default }), + disabled: isRtl ? index >= visibleFieldIds.length - 1 : index < 1, + onClick: () => { + const targetIndex = isRtl ? index + 1 : index - 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move left") }) + } + ), + canMove && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components4.Icon, { icon: arrow_right_default }), + disabled: isRtl ? index < 1 : index >= visibleFieldIds.length - 1, + onClick: () => { + const targetIndex = isRtl ? index - 1 : index + 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move right") }) + } + ), + canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert left") }) }), + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index + 1 : index; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert right") }) }), + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index : index + 1; + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components4.Icon, { icon: unseen_default }), + onClick: () => { + onHide(field); + onChangeView({ + ...view, + fields: visibleFieldIds.filter( + (id) => id !== fieldId + ) + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Hide column") }) + } + ) + ] }) + ] }) }) + ] }); +}); +var ColumnHeaderMenu = _HeaderMenu; +var column_header_menu_default = ColumnHeaderMenu; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs +var import_element7 = __toESM(require_element(), 1); +var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); +function getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className +}) { + if (!isItemClickable(item) || !onClickItem) { + return { className }; + } + return { + className: className ? `${className} ${className}--clickable` : void 0, + role: "button", + tabIndex: 0, + onClick: (event) => { + event.stopPropagation(); + onClickItem(item); + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + onClickItem(item); + } + } + }; +} +function ItemClickWrapper({ + item, + isItemClickable, + onClickItem, + renderItemLink, + className, + children, + ...extraProps +}) { + if (!isItemClickable(item)) { + return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className, ...extraProps, children }); + } + if (renderItemLink) { + const renderedElement = renderItemLink({ + item, + className: `${className} ${className}--clickable`, + ...extraProps, + children + }); + return (0, import_element7.cloneElement)(renderedElement, { + onClick: (event) => { + event.stopPropagation(); + if (renderedElement.props.onClick) { + renderedElement.props.onClick(event); + } + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + if (renderedElement.props.onKeyDown) { + renderedElement.props.onKeyDown(event); + } + } + } + }); + } + const clickProps = getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className + }); + return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { ...clickProps, ...extraProps, children }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-primary.mjs +var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); +function ColumnPrimary({ + item, + level, + titleField, + mediaField, + descriptionField: descriptionField2, + onClickItem, + renderItemLink, + isItemClickable +}) { + return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Stack, { direction: "row", gap: "md", align: "flex-start", justify: "flex-start", children: [ + mediaField && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media", + "aria-label": isItemClickable(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "32px" } + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)( + Stack, + { + direction: "column", + align: "flex-start", + className: "dataviews-view-table__primary-column-content", + children: [ + titleField && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-title-field", + children: [ + level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("span", { className: "dataviews-view-table__level", children: [ + Array(level).fill("\u2014").join(" "), + "\xA0" + ] }), + /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(titleField.render, { item, field: titleField }) + ] + } + ), + descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( + descriptionField2.render, + { + item, + field: descriptionField2 + } + ) + ] + } + ) + ] }); +} +var column_primary_default = ColumnPrimary; + +// packages/dataviews/build-module/components/dataviews-layouts/table/use-is-horizontal-scroll-end.mjs +var import_compose3 = __toESM(require_compose(), 1); +var import_element8 = __toESM(require_element(), 1); +var import_i18n7 = __toESM(require_i18n(), 1); +var isScrolledToEnd = (element) => { + if ((0, import_i18n7.isRTL)()) { + const scrollLeft = Math.abs(element.scrollLeft); + return scrollLeft <= 1; + } + return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1; +}; +function useIsHorizontalScrollEnd({ + scrollContainerRef, + enabled = false +}) { + const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element8.useState)(false); + const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)( + (0, import_element8.useCallback)(() => { + const scrollContainer = scrollContainerRef.current; + if (scrollContainer) { + setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer)); + } + }, [scrollContainerRef, setIsHorizontalScrollEnd]), + 200 + ); + (0, import_element8.useEffect)(() => { + if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) { + return () => { + }; + } + handleIsHorizontalScrollEnd(); + scrollContainerRef.current.addEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.addEventListener("resize", handleIsHorizontalScrollEnd); + return () => { + scrollContainerRef.current?.removeEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.removeEventListener("resize", handleIsHorizontalScrollEnd); + }; + }, [scrollContainerRef, enabled]); + return isHorizontalScrollEnd; +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/get-data-by-group.mjs +function getDataByGroup(data, groupByField) { + return data.reduce((groups, item) => { + const groupName = groupByField.getValue({ item }); + if (!groups.has(groupName)) { + groups.set(groupName, []); + } + groups.get(groupName)?.push(item); + return groups; + }, /* @__PURE__ */ new Map()); +} + +// packages/dataviews/build-module/components/dataviews-view-config/properties-section.mjs +var import_components5 = __toESM(require_components(), 1); +var import_i18n8 = __toESM(require_i18n(), 1); +var import_element9 = __toESM(require_element(), 1); +var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); +function FieldItem({ + field, + isVisible: isVisible2, + onToggleVisibility +}) { + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_components5.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Stack, { direction: "row", gap: "sm", justify: "flex-start", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_components5.Icon, { icon: check_default }) }), + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "dataviews-view-config__label", children: field.label }) + ] }) }); +} +function isDefined(item) { + return !!item; +} +function PropertiesSection({ + showLabel = true +}) { + const { view, fields, onChangeView } = (0, import_element9.useContext)(dataviews_context_default); + const regularFields = getHideableFields(view, fields); + if (!regularFields?.length) { + return null; + } + const titleField = fields.find((f2) => f2.id === view.titleField); + const previewField2 = fields.find((f2) => f2.id === view.mediaField); + const descriptionField2 = fields.find( + (f2) => f2.id === view.descriptionField + ); + const lockedFields = [ + { + field: titleField, + isVisibleFlag: "showTitle" + }, + { + field: previewField2, + isVisibleFlag: "showMedia" + }, + { + field: descriptionField2, + isVisibleFlag: "showDescription" + } + ].filter(({ field }) => isDefined(field)); + const visibleFieldIds = view.fields ?? []; + const visibleRegularFieldsCount = regularFields.filter( + (f2) => visibleFieldIds.includes(f2.id) + ).length; + const visibleLockedFields = lockedFields.filter( + ({ isVisibleFlag }) => ( + // @ts-expect-error + view[isVisibleFlag] ?? true + ) + ); + const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount; + const isSingleVisibleLockedField = totalVisibleFields === 1 && visibleLockedFields.length === 1; + return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Stack, { direction: "column", className: "dataviews-field-control", children: [ + showLabel && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_components5.BaseControl.VisualLabel, { children: (0, import_i18n8.__)("Properties") }), + /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-config__properties", + children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_components5.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [ + lockedFields.map(({ field, isVisibleFlag }) => { + const isVisible2 = view[isVisibleFlag] ?? true; + const fieldToRender = isSingleVisibleLockedField && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + [isVisibleFlag]: !isVisible2 + }); + } + }, + field.id + ); + }), + regularFields.map((field) => { + const isVisible2 = visibleFieldIds.includes(field.id); + const fieldToRender = totalVisibleFields === 1 && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + fields: isVisible2 ? visibleFieldIds.filter( + (fieldId) => fieldId !== field.id + ) : [...visibleFieldIds, field.id] + }); + } + }, + field.id + ); + }) + ] }) + } + ) + ] }); +} + +// packages/dataviews/build-module/hooks/use-delayed-loading.mjs +var import_element10 = __toESM(require_element(), 1); +function useDelayedLoading(isLoading, options = { delay: 400 }) { + const [showLoader, setShowLoader] = (0, import_element10.useState)(false); + (0, import_element10.useEffect)(() => { + if (!isLoading) { + return; + } + const timeout = setTimeout(() => { + setShowLoader(true); + }, options.delay); + return () => { + clearTimeout(timeout); + setShowLoader(false); + }; + }, [isLoading, options.delay]); + return showLoader; +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); +function getEffectiveAlign(explicitAlign, fieldType) { + if (explicitAlign) { + return explicitAlign; + } + if (fieldType === "integer" || fieldType === "number") { + return "end"; + } + return void 0; +} +function TableColumnField({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(field.render, { item, field }) }); +} +function TableRow({ + hasBulkActions, + item, + level, + actions, + fields, + id, + view, + titleField, + mediaField, + descriptionField: descriptionField2, + selection, + getItemId: getItemId3, + isItemClickable, + onClickItem, + renderItemLink, + onChangeSelection, + isActionsColumnSticky, + posinset +}) { + const { paginationInfo } = (0, import_element11.useContext)(dataviews_context_default); + const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item); + const isSelected2 = hasPossibleBulkAction && selection.includes(id); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const isTouchDeviceRef = (0, import_element11.useRef)(false); + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": hasPossibleBulkAction && isSelected2, + "has-bulk-actions": hasPossibleBulkAction + }), + onTouchStart: () => { + isTouchDeviceRef.current = true; + }, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : void 0, + onMouseDown: (event) => { + const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) { + event?.preventDefault(); + } + }, + onClick: (event) => { + if (!hasPossibleBulkAction) { + return; + } + const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") { + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId3, + titleField, + disabled: !hasPossibleBulkAction + } + ) }) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + column_primary_default, + { + item, + level, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField2 : void 0, + isItemClickable, + onClickItem, + renderItemLink + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find((f2) => f2.id === column); + const effectiveAlign = getEffectiveAlign(align, field?.type); + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + TableColumnField, + { + fields, + item, + column, + align: effectiveAlign + } + ) + }, + column + ); + }), + !!actions?.length && // Disable reason: we are not making the element interactive, + // but preventing any click events from bubbling up to the + // table row. This allows us to add a click handler to the row + // itself (to toggle row selection) without erroneously + // intercepting click events from ItemActions. + /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "td", + { + className: clsx_default("dataviews-view-table__actions-column", { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": isActionsColumnSticky + }), + onClick: (e2) => e2.stopPropagation(), + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ItemActions, { item, actions }) + } + ) + ] + } + ); +} +function ViewTable({ + actions, + data, + fields, + getItemId: getItemId3, + getItemLevel, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + view, + className, + empty +}) { + const { containerRef } = (0, import_element11.useContext)(dataviews_context_default); + const isDelayedLoading = useDelayedLoading(isLoading); + const headerMenuRefs = (0, import_element11.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element11.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element11.useState)(); + const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element11.useState)(null); + (0, import_element11.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element11.useId)(); + const isHorizontalScrollEnd = useIsHorizontalScrollEnd({ + scrollContainerRef: containerRef, + enabled: !!actions?.length + }); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const handleHeaderContextMenu = (event) => { + event.preventDefault(); + event.stopPropagation(); + const virtualAnchor = { + getBoundingClientRect: () => ({ + x: event.clientX, + y: event.clientY, + top: event.clientY, + left: event.clientX, + right: event.clientX, + bottom: event.clientY, + width: 0, + height: 0, + toJSON: () => ({}) + }) + }; + window.requestAnimationFrame(() => { + setContextMenuAnchor(virtualAnchor); + }); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField2 = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const isRtl = (0, import_i18n9.isRTL)(); + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + id: tableNoticeId, + children: empty + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + "table", + { + className: clsx_default("dataviews-view-table", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "has-bulk-actions": hasBulkActions, + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : void 0, + inert: !isInfiniteScroll && isLoading ? "true" : void 0, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("colgroup", { children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("col", { className: "dataviews-view-table__col-checkbox" }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("col", { className: "dataviews-view-table__col-first-data" }), + columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "col", + { + className: clsx_default( + `dataviews-view-table__col-${column}`, + { + "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0 + } + ) + }, + `col-${column}` + )), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("col", { className: "dataviews-view-table__col-actions" }) + ] }), + contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + import_components6.Popover, + { + anchor: contextMenuAnchor, + onClose: () => setContextMenuAnchor(null), + placement: "bottom-start", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PropertiesSection, { showLabel: false }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("tr", { className: "dataviews-view-table__row", children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "th", + { + className: "dataviews-view-table__checkbox-column", + scope: "col", + onContextMenu: handleHeaderContextMenu, + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId3 + } + ) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false, + canInsertLeft: isRtl ? view.layout?.enableMoving ?? true : false, + canInsertRight: isRtl ? false : view.layout?.enableMoving ?? true + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find( + (f2) => f2.id === column + ); + const effectiveAlign = getEffectiveAlign( + align, + field?.type + ); + const canInsertOrMove = view.layout?.enableMoving ?? true; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: effectiveAlign + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: canInsertOrMove, + canInsertLeft: canInsertOrMove, + canInsertRight: canInsertOrMove + } + ) + }, + column + ); + }), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "th", + { + className: clsx_default( + "dataviews-view-table__actions-column", + { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd + } + ), + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n9.__)("Actions") }) + } + ) + ] }) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("tbody", { children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0), + className: "dataviews-view-table__group-header-cell", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n9.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n9.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) }), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId3(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField: descriptionField2, + selection, + getItemId: getItemId3, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd + }, + getItemId3(item) + )) + ] }, `group-${groupName}`) + ) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId3(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField: descriptionField2, + selection, + getItemId: getItemId3, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd, + posinset: isInfiniteScroll ? index + 1 : void 0 + }, + getItemId3(item) + )) }) + ] + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-loading", id: tableNoticeId, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components6.Spinner, {}) }) }) + ] }); +} +var table_default = ViewTable; + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_components9 = __toESM(require_components(), 1); +var import_i18n12 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_components8 = __toESM(require_components(), 1); +var import_i18n11 = __toESM(require_i18n(), 1); +var import_compose4 = __toESM(require_compose(), 1); +var import_keycodes2 = __toESM(require_keycodes(), 1); +var import_element13 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/preview-size-picker.mjs +var import_components7 = __toESM(require_components(), 1); +var import_i18n10 = __toESM(require_i18n(), 1); +var import_element12 = __toESM(require_element(), 1); +var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); +var imageSizes = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +var DEFAULT_PREVIEW_SIZE = imageSizes[2].value; +function useGridColumns() { + const context = (0, import_element12.useContext)(dataviews_context_default); + const view = context.view; + return (0, import_element12.useMemo)(() => { + const containerWidth = context.containerWidth; + const gap = 32; + const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE; + const columns = Math.floor( + (containerWidth + gap) / (previewSize + gap) + ); + return Math.max(1, columns); + }, [context.containerWidth, view.layout?.previewSize]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); +var { Badge } = unlock(import_components8.privateApis); +function chunk(array, size) { + const chunks = []; + for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) { + chunks.push(array.slice(i2, i2 + size)); + } + return chunks; +} +var GridItem = (0, import_element13.forwardRef)(function GridItem2({ + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId3, + item, + actions, + mediaField, + titleField, + descriptionField: descriptionField2, + regularFields, + badgeFields, + hasBulkActions, + config, + ...props +}, ref) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasBulkAction = useHasAPossibleBulkAction(actions, item); + const id = getItemId3(item); + const instanceId = (0, import_compose4.useInstanceId)(GridItem2); + const isSelected2 = selection.includes(id); + const mediaPlaceholder = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "dataviews-view-grid__media-placeholder" }); + const rendersMediaField = showMedia && mediaField?.render; + const renderedMediaField = rendersMediaField ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : mediaPlaceholder; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(titleField.render, { item, field: titleField }) : null; + let mediaA11yProps; + let titleA11yProps; + if (isItemClickable(item) && onClickItem) { + if (renderedTitleField) { + mediaA11yProps = { + "aria-labelledby": `dataviews-view-grid__title-field-${instanceId}` + }; + titleA11yProps = { + id: `dataviews-view-grid__title-field-${instanceId}` + }; + } else { + mediaA11yProps = { + "aria-label": (0, import_i18n11.__)("Navigate to item") + }; + } + } + return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)( + Stack, + { + direction: "column", + ...props, + ref, + className: clsx_default( + props.className, + "dataviews-view-grid__row__gridcell", + "dataviews-view-grid__card", + { + "is-selected": hasBulkAction && isSelected2 + } + ), + onClickCapture: (event) => { + props.onClickCapture?.(event); + if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) { + event.stopPropagation(); + event.preventDefault(); + if (!hasBulkAction) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: clsx_default("dataviews-view-grid__media", { + "dataviews-view-grid__media--placeholder": !rendersMediaField + }), + ...mediaA11yProps, + children: renderedMediaField + } + ), + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId3, + titleField, + disabled: !hasBulkAction + } + ), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ItemActions, { item, actions, isCompact: true }) }), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "dataviews-view-grid__title", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-grid__title-field dataviews-title-field", + ...titleA11yProps, + title: titleField?.getValueFormatted({ + item, + field: titleField + }) || void 0, + children: renderedTitleField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + descriptionField2.render, + { + item, + field: descriptionField2 + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + Badge, + { + className: "dataviews-view-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components8.Flex, + { + className: "dataviews-view-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_components8.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_components8.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }), + /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components8.FlexItem, + { + className: "dataviews-view-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + } + ); +}); +function CompositeGrid({ + data, + isInfiniteScroll, + className, + inert, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId3, + actions +}) { + const { paginationInfo, resizeObserverRef } = (0, import_element13.useContext)(dataviews_context_default); + const gridColumns = useGridColumns(); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField2 = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const size = "900px"; + const totalRows = Math.ceil(data.length / gridColumns); + return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components8.Composite, + { + role: isInfiniteScroll ? "feed" : "grid", + className: clsx_default("dataviews-view-grid", className), + focusWrap: true, + "aria-busy": isLoading, + "aria-rowcount": isInfiniteScroll ? void 0 : totalRows, + ref: resizeObserverRef, + inert, + children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components8.Composite.Row, + { + render: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + "div", + { + role: "row", + "aria-rowindex": i2 + 1, + "aria-label": (0, import_i18n11.sprintf)( + /* translators: %d: The row number in the grid */ + (0, import_i18n11.__)("Row %d"), + i2 + 1 + ), + className: "dataviews-view-grid__row", + style: { + gridTemplateColumns: `repeat( ${gridColumns}, minmax(0, 1fr) )` + } + } + ), + children: row.map((item, indexInRow) => { + const index = i2 * gridColumns + indexInRow; + return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components8.Composite.Item, + { + render: (props) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + GridItem, + { + ...props, + role: isInfiniteScroll ? "article" : "gridcell", + "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0, + "aria-posinset": isInfiniteScroll ? index + 1 : void 0, + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId3, + item, + actions, + mediaField, + titleField, + descriptionField: descriptionField2, + regularFields, + badgeFields, + hasBulkActions, + config: { + sizes: size + } + } + ) + }, + getItemId3(item) + ); + }) + }, + i2 + )) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); +function ViewGrid({ + actions, + data, + fields, + getItemId: getItemId3, + isLoading, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + selection, + view, + className, + empty +}) { + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const gridProps = { + className: clsx_default(className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId3, + actions + }; + return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Stack, { direction: "column", gap: "lg", children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h3", { className: "dataviews-view-grid__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n12.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n12.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + CompositeGrid, + { + ...gridProps, + data: groupItems, + isInfiniteScroll: false + } + ) + ] + }, + groupName + ) + ) }), + // Render a single grid with all data. + !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + CompositeGrid, + { + ...gridProps, + data, + isInfiniteScroll: !!isInfiniteScroll + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_components9.Spinner, {}) }) + ] + }); +} +var grid_default = ViewGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/list/index.mjs +var import_compose5 = __toESM(require_compose(), 1); +var import_components10 = __toESM(require_components(), 1); +var import_element14 = __toESM(require_element(), 1); +var import_i18n13 = __toESM(require_i18n(), 1); +var import_data5 = __toESM(require_data(), 1); +var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu3 } = unlock(import_components10.privateApis); +function generateItemWrapperCompositeId(idPrefix) { + return `${idPrefix}-item-wrapper`; +} +function generatePrimaryActionCompositeId(idPrefix, primaryActionId) { + return `${idPrefix}-primary-action-${primaryActionId}`; +} +function generateDropdownTriggerCompositeId(idPrefix) { + return `${idPrefix}-dropdown`; +} +function PrimaryActionGridCell({ + idPrefix, + primaryAction, + item +}) { + const registry = (0, import_data5.useRegistry)(); + const [isModalOpen, setIsModalOpen] = (0, import_element14.useState)(false); + const compositeItemId = generatePrimaryActionCompositeId( + idPrefix, + primaryAction.id + ); + const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]); + return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + text: label, + size: "small", + onClick: () => setIsModalOpen(true) + } + ), + children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + ActionModal, + { + action: primaryAction, + items: [item], + closeModal: () => setIsModalOpen(false) + } + ) + } + ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + size: "small", + onClick: () => { + primaryAction.callback([item], { registry }); + }, + children: label + } + ) + } + ) }, primaryAction.id); +} +function ListItem({ + view, + actions, + idPrefix, + isSelected: isSelected2, + item, + titleField, + mediaField, + descriptionField: descriptionField2, + onSelect, + otherFields, + onDropdownTriggerKeyDown, + posinset +}) { + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element14.useRef)(null); + const labelId = `${idPrefix}-label`; + const descriptionId = `${idPrefix}-description`; + const registry = (0, import_data5.useRegistry)(); + const [isHovered, setIsHovered] = (0, import_element14.useState)(false); + const [activeModalAction, setActiveModalAction] = (0, import_element14.useState)( + null + ); + const handleHover = ({ type }) => { + const isHover = type === "mouseenter"; + setIsHovered(isHover); + }; + const { paginationInfo } = (0, import_element14.useContext)(dataviews_context_default); + (0, import_element14.useEffect)(() => { + if (isSelected2) { + itemRef.current?.scrollIntoView({ + behavior: "auto", + block: "nearest", + inline: "nearest" + }); + } + }, [isSelected2]); + const { primaryAction, eligibleActions } = (0, import_element14.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryAction: _primaryActions[0], + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1; + const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "52px" } + } + ) }) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(titleField.render, { item, field: titleField }) : null; + const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)( + Stack, + { + direction: "row", + gap: "md", + className: "dataviews-view-list__item-actions", + children: [ + primaryAction && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + PrimaryActionGridCell, + { + idPrefix, + primaryAction, + item + } + ), + !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { role: "gridcell", children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(Menu3, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + Menu3.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Composite.Item, + { + id: generateDropdownTriggerCompositeId( + idPrefix + ), + render: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Button, + { + size: "small", + icon: more_vertical_default, + label: (0, import_i18n13.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + onKeyDown: onDropdownTriggerKeyDown + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + ActionsMenuGroup, + { + actions: eligibleActions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }) + ] + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Composite.Row, + { + ref: itemRef, + render: ( + /* aria-posinset breaks Composite.Row if passed to it directly. */ + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + "div", + { + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0 + } + ) + ), + role: infiniteScrollEnabled ? "article" : "row", + className: clsx_default({ + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleHover, + onMouseLeave: handleHover, + children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-view-list__item-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Composite.Item, + { + id: generateItemWrapperCompositeId(idPrefix), + "aria-pressed": isSelected2, + "aria-labelledby": labelId, + "aria-describedby": descriptionId, + className: "dataviews-view-list__item", + onClick: () => onSelect(item) + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)( + Stack, + { + direction: "row", + gap: "md", + justify: "start", + align: "flex-start", + style: { flex: 1, minWidth: 0 }, + children: [ + renderedMediaField, + /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)( + Stack, + { + direction: "column", + gap: "xs", + className: "dataviews-view-list__field-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(Stack, { direction: "row", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + "div", + { + className: "dataviews-title-field dataviews-view-list__title-field", + id: labelId, + children: renderedTitleField + } + ), + usedActions + ] }), + showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + descriptionField2.render, + { + item, + field: descriptionField2 + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + "div", + { + className: "dataviews-view-list__fields", + id: descriptionId, + children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)( + "div", + { + className: "dataviews-view-list__field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.VisuallyHidden, + { + as: "span", + className: "dataviews-view-list__field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) + } + ) + ] + } + ) + ] + } + ) + ] + } + ) + } + ); +} +function isDefined2(item) { + return !!item; +} +function ViewList(props) { + const { + actions, + data, + fields, + getItemId: getItemId3, + isLoading, + onChangeSelection, + selection, + view, + className, + empty + } = props; + const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list"); + const isDelayedLoading = useDelayedLoading(!!isLoading); + const selectedItem = data?.findLast( + (item) => selection.includes(getItemId3(item)) + ); + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField2 = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2); + const onSelect = (item) => onChangeSelection([getItemId3(item)]); + const generateCompositeItemIdPrefix = (0, import_element14.useCallback)( + (item) => `${baseId}-${getItemId3(item)}`, + [baseId, getItemId3] + ); + const isActiveCompositeItem = (0, import_element14.useCallback)( + (item, idToCheck) => { + return idToCheck.startsWith( + generateCompositeItemIdPrefix(item) + ); + }, + [generateCompositeItemIdPrefix] + ); + const [activeCompositeId, setActiveCompositeId] = (0, import_element14.useState)(void 0); + (0, import_element14.useEffect)(() => { + if (selectedItem) { + setActiveCompositeId( + generateItemWrapperCompositeId( + generateCompositeItemIdPrefix(selectedItem) + ) + ); + } + }, [selectedItem, generateCompositeItemIdPrefix]); + const activeItemIndex = data.findIndex( + (item) => isActiveCompositeItem(item, activeCompositeId ?? "") + ); + const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex); + const isActiveIdInList = activeItemIndex !== -1; + const selectCompositeItem = (0, import_element14.useCallback)( + (targetIndex, generateCompositeId) => { + const clampedIndex = Math.min( + data.length - 1, + Math.max(0, targetIndex) + ); + if (!data[clampedIndex]) { + return; + } + const itemIdPrefix = generateCompositeItemIdPrefix( + data[clampedIndex] + ); + const targetCompositeItemId = generateCompositeId(itemIdPrefix); + setActiveCompositeId(targetCompositeItemId); + document.getElementById(targetCompositeItemId)?.focus(); + }, + [data, generateCompositeItemIdPrefix] + ); + (0, import_element14.useEffect)(() => { + const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1; + if (!isActiveIdInList && wasActiveIdInList) { + selectCompositeItem( + previousActiveItemIndex, + generateItemWrapperCompositeId + ); + } + }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]); + const onDropdownTriggerKeyDown = (0, import_element14.useCallback)( + (event) => { + if (event.key === "ArrowDown") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex + 1, + generateDropdownTriggerCompositeId + ); + } + if (event.key === "ArrowUp") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex - 1, + generateDropdownTriggerCompositeId + ); + } + }, + [selectCompositeItem, activeItemIndex] + ); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Composite, + { + id: `${baseId}`, + render: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {}), + className: "dataviews-view-list__group", + role: "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + Stack, + { + direction: "column", + gap: "lg", + className: clsx_default("dataviews-view-list", className), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h3", { className: "dataviews-view-list__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n13.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n13.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + groupItems.map((item) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField: descriptionField2, + otherFields, + onDropdownTriggerKeyDown + }, + id + ); + }) + ] + }, + groupName + ) + ) + } + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + import_components10.Composite, + { + id: baseId, + render: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {}), + className: clsx_default("dataviews-view-list", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + role: view.infiniteScrollEnabled ? "feed" : "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + children: data.map((item, index) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField: descriptionField2, + otherFields, + onDropdownTriggerKeyDown, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + }, + id + ); + }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_components10.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_components12 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-group.mjs +var import_i18n14 = __toESM(require_i18n(), 1); +var import_element15 = __toESM(require_element(), 1); +var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); +function ActivityGroup({ + groupName, + groupData, + groupField, + showLabel = true, + children +}) { + const groupHeader = showLabel ? (0, import_element15.createInterpolateElement)( + // translators: %s: The label of the field e.g. "Status". + (0, import_i18n14.sprintf)((0, import_i18n14.__)("%s: "), groupField.label).trim(), + { + groupName: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)( + groupField.render, + { + item: groupData[0], + field: groupField + } + ) + } + ) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(groupField.render, { item: groupData[0], field: groupField }); + return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-activity__group", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }), + children + ] + }, + groupName + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-item.mjs +var import_components11 = __toESM(require_components(), 1); +var import_element16 = __toESM(require_element(), 1); +var import_data6 = __toESM(require_data(), 1); +var import_compose6 = __toESM(require_compose(), 1); +var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); +function ActivityItem(props) { + const { + view, + actions, + item, + titleField, + mediaField, + descriptionField: descriptionField2, + otherFields, + posinset, + onClickItem, + renderItemLink, + isItemClickable + } = props; + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element16.useRef)(null); + const registry = (0, import_data6.useRegistry)(); + const { paginationInfo } = (0, import_element16.useContext)(dataviews_context_default); + const { primaryActions, eligibleActions } = (0, import_element16.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose6.useViewportMatch)("medium", "<"); + const density = view.layout?.density ?? "balanced"; + const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { + sizes: density === "comfortable" ? "32px" : "24px" + } + } + ) : null; + const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + "span", + { + className: "dataviews-view-activity__item-bullet", + "aria-hidden": "true" + } + ) }); + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(titleField.render, { item, field: titleField }) : null; + const verticalGap = (0, import_element16.useMemo)(() => { + switch (density) { + case "comfortable": + return "md"; + default: + return "sm"; + } + }, [density]); + return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + "div", + { + ref: itemRef, + role: infiniteScrollEnabled ? "article" : void 0, + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + className: clsx_default( + "dataviews-view-activity__item", + density === "compact" && "is-compact", + density === "balanced" && "is-balanced", + density === "comfortable" && "is-comfortable" + ), + children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + Stack, + { + direction: "column", + gap: "xs", + align: "center", + className: "dataviews-view-activity__item-type", + children: renderedMediaField + } + ), + /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)( + Stack, + { + direction: "column", + gap: verticalGap, + align: "flex-start", + className: "dataviews-view-activity__item-content", + children: [ + renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-activity__item-title", + children: renderedTitleField + } + ), + showDescription && descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + descriptionField2.render, + { + item, + field: descriptionField2 + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)( + "div", + { + className: "dataviews-view-activity__item-field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + import_components11.VisuallyHidden, + { + as: "span", + className: "dataviews-view-activity__item-field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) }), + !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry, + buttonVariant: "secondary" + } + ) + ] + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport && // At the same time, only show the menu if there are actions to show. + eligibleActions.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( + ItemActions, + { + item, + actions: eligibleActions, + isCompact: true + } + ) }) + ] }) + } + ); +} +var activity_item_default = ActivityItem; + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-items.mjs +var import_react3 = __toESM(require_react(), 1); +function isDefined3(item) { + return !!item; +} +function ActivityItems(props) { + const { data, fields, getItemId: getItemId3, view } = props; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField2 = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3); + return data.map((item, index) => { + return /* @__PURE__ */ (0, import_react3.createElement)( + activity_item_default, + { + ...props, + key: getItemId3(item), + item, + mediaField, + titleField, + descriptionField: descriptionField2, + otherFields, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + } + ); + }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); +function ViewActivity(props) { + const { empty, data, fields, isLoading, view, className } = props; + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const isInert = !isInfiniteScroll && !!isLoading; + const wrapperClassName = clsx_default("dataviews-view-activity", className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }); + const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : []; + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + Stack, + { + direction: "column", + gap: "sm", + className: wrapperClassName, + inert: isInert ? "true" : void 0, + children: groupedEntries.map( + ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + ActivityGroup, + { + groupName, + groupData, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + ActivityItems, + { + ...props, + data: groupData + } + ) + }, + groupName + ) + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( + "div", + { + className: wrapperClassName, + role: view.infiniteScrollEnabled ? "feed" : void 0, + inert: isInert ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ActivityItems, { ...props }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components12.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_components15 = __toESM(require_components(), 1); +var import_i18n17 = __toESM(require_i18n(), 1); +var import_compose7 = __toESM(require_compose(), 1); +var import_element20 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_components14 = __toESM(require_components(), 1); +var import_data7 = __toESM(require_data(), 1); +var import_element18 = __toESM(require_element(), 1); +var import_i18n16 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-pagination/index.mjs +var import_components13 = __toESM(require_components(), 1); +var import_element17 = __toESM(require_element(), 1); +var import_i18n15 = __toESM(require_i18n(), 1); +var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); +function DataViewsPagination() { + const { + view, + onChangeView, + paginationInfo: { totalItems = 0, totalPages } + } = (0, import_element17.useContext)(dataviews_context_default); + if (!totalItems || !totalPages || view.infiniteScrollEnabled) { + return null; + } + const currentPage = view.page ?? 1; + const pageSelectOptions = Array.from(Array(totalPages)).map( + (_, i2) => { + const page = i2 + 1; + return { + value: page.toString(), + label: page.toString(), + "aria-label": currentPage === page ? (0, import_i18n15.sprintf)( + // translators: 1: current page number. 2: total number of pages. + (0, import_i18n15.__)("Page %1$d of %2$d"), + currentPage, + totalPages + ) : page.toString() + }; + } + ); + return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-pagination", + justify: "end", + align: "center", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + align: "center", + gap: "xs", + className: "dataviews-pagination__page-select", + children: (0, import_element17.createInterpolateElement)( + (0, import_i18n15.sprintf)( + // translators: 1: Current page number, 2: Total number of pages. + (0, import_i18n15._x)( + "
      Page
      %1$s
      of %2$d
      ", + "paging" + ), + "", + totalPages + ), + { + div: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { "aria-hidden": true }), + CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + import_components13.SelectControl, + { + "aria-label": (0, import_i18n15.__)("Current page"), + value: currentPage.toString(), + options: pageSelectOptions, + onChange: (newValue) => { + onChangeView({ + ...view, + page: +newValue + }); + }, + size: "small", + variant: "minimal" + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Stack, { direction: "row", gap: "xs", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ + ...view, + page: currentPage - 1 + }), + disabled: currentPage === 1, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Previous page"), + icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime55.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ ...view, page: currentPage + 1 }), + disabled: currentPage >= totalPages, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Next page"), + icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ) + ] }) + ] + } + ); +} +var dataviews_pagination_default = (0, import_element17.memo)(DataViewsPagination); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); +function useIsMultiselectPicker(actions) { + return (0, import_element18.useMemo)(() => { + return actions?.every((action) => action.supportsBulk); + }, [actions]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/grid-items.mjs +var import_element19 = __toESM(require_element(), 1); +var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); +var GridItems = (0, import_element19.forwardRef)(({ className, previewSize, ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)( + "div", + { + ref, + className: clsx_default("dataviews-view-grid-items", className), + style: { + gridTemplateColumns: previewSize && `repeat(auto-fill, minmax(${previewSize}px, 1fr))` + }, + ...props + } + ); +}); + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); +var { Badge: Badge2 } = unlock(import_components15.privateApis); +function GridItem3({ + view, + multiselect, + selection, + onChangeSelection, + getItemId: getItemId3, + item, + mediaField, + titleField, + descriptionField: descriptionField2, + regularFields, + badgeFields, + config, + posinset, + setsize +}) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const id = getItemId3(item); + const isSelected2 = selection.includes(id); + const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(titleField.render, { item, field: titleField }) : null; + return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)( + import_components15.Composite.Item, + { + "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n17.__)("(no title)") : void 0, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Stack, { direction: "column", children, ...props }), + role: "option", + "aria-posinset": posinset, + "aria-setsize": setsize, + className: clsx_default("dataviews-view-picker-grid__card", { + "is-selected": isSelected2 + }), + "aria-selected": isSelected2, + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }), + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId3, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Stack, + { + direction: "row", + justify: "space-between", + className: "dataviews-view-picker-grid__title-actions", + children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + descriptionField2.render, + { + item, + field: descriptionField2 + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-picker-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Badge2, + { + className: "dataviews-view-picker-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-picker-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components15.Flex, + { + className: "dataviews-view-picker-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components15.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }), + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components15.FlexItem, + { + className: "dataviews-view-picker-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + }, + id + ); +} +function GridGroup({ + groupName, + groupField, + showLabel = true, + children +}) { + const headerId = (0, import_compose7.useInstanceId)( + GridGroup, + "dataviews-view-picker-grid-group__header" + ); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + role: "group", + "aria-labelledby": headerId, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + "h3", + { + className: "dataviews-view-picker-grid-group__header", + id: headerId, + children: showLabel ? (0, import_i18n17.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n17.__)("%1$s: %2$s"), + groupField.label, + groupName + ) : groupName + } + ), + children + ] + }, + groupName + ); +} +function ViewPickerGrid({ + actions, + data, + fields, + getItemId: getItemId3, + isLoading, + onChangeSelection, + selection, + view, + className, + empty +}) { + const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element20.useContext)(dataviews_context_default); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField2 = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const hasData = !!data?.length; + const usedPreviewSize = view.layout?.previewSize; + const isMultiselect = useIsMultiselectPicker(actions); + const size = "900px"; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const currentPage = view?.page ?? 1; + const perPage = view?.perPage ?? 0; + const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; + return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components15.Composite, + { + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + "aria-label": itemListLabel, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + Stack, + { + direction: "column", + gap: "lg", + children, + ...props + } + ), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + GridGroup, + { + groupName, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + GridItems, + { + previewSize: usedPreviewSize, + style: { + gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax(${usedPreviewSize}px, 1fr))` + }, + "aria-busy": isLoading, + ref: resizeObserverRef, + children: groupItems.map((item) => { + const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1; + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId3, + item, + mediaField, + titleField, + descriptionField: descriptionField2, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset: posInSet, + setsize: setSize + }, + getItemId3(item) + ); + }) + } + ) + }, + groupName + ) + ) + } + ), + // Render a single grid with all data. + hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + import_components15.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + GridItems, + { + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + previewSize: usedPreviewSize, + "aria-busy": isLoading, + ref: resizeObserverRef + } + ), + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + "aria-label": itemListLabel, + children: data.map((item, index) => { + let posinset = isInfiniteScroll ? index + 1 : void 0; + if (!isInfiniteScroll) { + posinset = (currentPage - 1) * perPage + index + 1; + } + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId3, + item, + mediaField, + titleField, + descriptionField: descriptionField2, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset, + setsize: setSize + }, + getItemId3(item) + ); + }) + } + ), + // Render empty state. + !hasData && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !isLoading + }), + children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components15.Spinner, {}) }) : empty + } + ), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_components15.Spinner, {}) }) + ] + }); +} +var picker_grid_default = ViewPickerGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/picker-table/index.mjs +var import_i18n18 = __toESM(require_i18n(), 1); +var import_components16 = __toESM(require_components(), 1); +var import_element21 = __toESM(require_element(), 1); +var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); +function TableColumnField2({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(field.render, { item, field }) }); +} +function TableRow2({ + item, + fields, + id, + view, + titleField, + mediaField, + descriptionField: descriptionField2, + selection, + getItemId: getItemId3, + onChangeSelection, + multiselect, + posinset +}) { + const { paginationInfo } = (0, import_element21.useContext)(dataviews_context_default); + const isSelected2 = selection.includes(id); + const [isHovered, setIsHovered] = (0, import_element21.useState)(false); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const handleMouseEnter = () => { + setIsHovered(true); + }; + const handleMouseLeave = () => { + setIsHovered(false); + }; + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + import_components16.Composite.Item, + { + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleMouseEnter, + onMouseLeave: handleMouseLeave, + children, + ...props + } + ), + "aria-selected": isSelected2, + "aria-setsize": paginationInfo.totalItems || void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : "option", + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "td", + { + className: "dataviews-view-table__checkbox-column", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId3, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ) }) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + column_primary_default, + { + item, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField2 : void 0, + isItemClickable: () => false + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + TableColumnField2, + { + fields, + item, + column, + align + } + ) + }, + column + ); + }) + ] + }, + id + ); +} +function ViewPickerTable({ + actions, + data, + fields, + getItemId: getItemId3, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + view, + className, + empty +}) { + const headerMenuRefs = (0, import_element21.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element21.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element21.useState)(); + const isMultiselect = useIsMultiselectPicker(actions) ?? false; + (0, import_element21.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element21.useId)(); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField2 = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_jsx_runtime59.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + "table", + { + className: clsx_default( + "dataviews-view-table", + "dataviews-view-picker-table", + className, + { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ) + } + ), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : "listbox", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + "tr", + { + className: "dataviews-view-table__row", + role: "presentation", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId3 + } + ) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: align + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: view.layout?.enableMoving ?? true + } + ) + }, + column + ); + }) + ] + } + ) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + import_components16.Composite, + { + virtualFocus: true, + orientation: "vertical", + render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("tbody", { role: "group" }), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "tr", + { + className: "dataviews-view-table__group-header-row", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1, + className: "dataviews-view-table__group-header-cell", + role: "presentation", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n18.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n18.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) + } + ), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + TableRow2, + { + item, + fields, + id: getItemId3(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField: descriptionField2, + selection, + getItemId: getItemId3, + onChangeSelection, + multiselect: isMultiselect + }, + getItemId3(item) + )) + ] + }, + `group-${groupName}` + ) + ) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + import_components16.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("tbody", { role: "presentation" }), + virtualFocus: true, + orientation: "vertical", + children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + TableRow2, + { + item, + fields, + id: getItemId3(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField: descriptionField2, + selection, + getItemId: getItemId3, + onChangeSelection, + multiselect: isMultiselect, + posinset: index + 1 + }, + getItemId3(item) + )) + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !hasData && !isLoading + }), + id: tableNoticeId, + children: [ + !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components16.Spinner, {}) }) : empty), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components16.Spinner, {}) }) + ] + } + ) + ] }); +} +var picker_table_default = ViewPickerTable; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/preview-size-picker.mjs +var import_components17 = __toESM(require_components(), 1); +var import_i18n19 = __toESM(require_i18n(), 1); +var import_element22 = __toESM(require_element(), 1); +var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); +var imageSizes2 = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +function PreviewSizePicker() { + const context = (0, import_element22.useContext)(dataviews_context_default); + const view = context.view; + const breakValues = imageSizes2.filter((size) => { + return context.containerWidth >= size.breakpoint; + }); + const layoutPreviewSize = view.layout?.previewSize ?? 230; + const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0; + const marks = breakValues.map((size, index) => { + return { + value: index + }; + }); + return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + import_components17.RangeControl, + { + __next40pxDefaultSize: true, + showTooltip: false, + label: (0, import_i18n19.__)("Preview size"), + value: previewSizeToUse, + min: 0, + max: breakValues.length - 1, + withInputField: false, + onChange: (value = 0) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + previewSize: breakValues[value].value + } + }); + }, + step: 1, + marks + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/density-picker.mjs +var import_components18 = __toESM(require_components(), 1); +var import_i18n20 = __toESM(require_i18n(), 1); +var import_element23 = __toESM(require_element(), 1); +var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); +function DensityPicker() { + const context = (0, import_element23.useContext)(dataviews_context_default); + const view = context.view; + return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)( + import_components18.__experimentalToggleGroupControl, + { + size: "__unstable-large", + label: (0, import_i18n20.__)("Density"), + value: view.layout?.density || "balanced", + onChange: (value) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + density: value + } + }); + }, + isBlock: true, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "comfortable", + label: (0, import_i18n20._x)( + "Comfortable", + "Density option for DataView layout" + ) + }, + "comfortable" + ), + /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "balanced", + label: (0, import_i18n20._x)("Balanced", "Density option for DataView layout") + }, + "balanced" + ), + /* @__PURE__ */ (0, import_jsx_runtime61.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "compact", + label: (0, import_i18n20._x)("Compact", "Density option for DataView layout") + }, + "compact" + ) + ] + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var VIEW_LAYOUTS = [ + { + type: LAYOUT_TABLE, + label: (0, import_i18n21.__)("Table"), + component: table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_GRID, + label: (0, import_i18n21.__)("Grid"), + component: grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker + }, + { + type: LAYOUT_LIST, + label: (0, import_i18n21.__)("List"), + component: ViewList, + icon: (0, import_i18n21.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_ACTIVITY, + label: (0, import_i18n21.__)("Activity"), + component: ViewActivity, + icon: scheduled_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_PICKER_GRID, + label: (0, import_i18n21.__)("Grid"), + component: picker_grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker, + isPicker: true + }, + { + type: LAYOUT_PICKER_TABLE, + label: (0, import_i18n21.__)("Table"), + component: picker_table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker, + isPicker: true + } +]; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_element31 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_components21 = __toESM(require_components(), 1); +var import_i18n24 = __toESM(require_i18n(), 1); +var import_element28 = __toESM(require_element(), 1); + +// node_modules/@ariakit/core/esm/__chunks/XMCVU3LR.js +function noop(..._) { +} +function applyState(argument, currentValue) { + if (isUpdater(argument)) { + const value = isLazyValue(currentValue) ? currentValue() : currentValue; + return argument(value); + } + return argument; +} +function isUpdater(argument) { + return typeof argument === "function"; +} +function isLazyValue(value) { + return typeof value === "function"; +} +function hasOwnProperty(object, prop) { + if (typeof Object.hasOwn === "function") { + return Object.hasOwn(object, prop); + } + return Object.prototype.hasOwnProperty.call(object, prop); +} +function chain(...fns) { + return (...args) => { + for (const fn of fns) { + if (typeof fn === "function") { + fn(...args); + } + } + }; +} +function normalizeString(str) { + return str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); +} +function omit2(object, keys) { + const result = { ...object }; + for (const key of keys) { + if (hasOwnProperty(result, key)) { + delete result[key]; + } + } + return result; +} +function pick(object, paths) { + const result = {}; + for (const key of paths) { + if (hasOwnProperty(object, key)) { + result[key] = object[key]; + } + } + return result; +} +function identity(value) { + return value; +} +function invariant(condition, message2) { + if (condition) return; + if (typeof message2 !== "string") throw new Error("Invariant failed"); + throw new Error(message2); +} +function getKeys(obj) { + return Object.keys(obj); +} +function isFalsyBooleanCallback(booleanOrCallback, ...args) { + const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback; + if (result == null) return false; + return !result; +} +function disabledFromProps(props) { + return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true"; +} +function removeUndefinedValues(obj) { + const result = {}; + for (const key in obj) { + if (obj[key] !== void 0) { + result[key] = obj[key]; + } + } + return result; +} +function defaultValue(...values) { + for (const value of values) { + if (value !== void 0) return value; + } + return void 0; +} + +// node_modules/@ariakit/react-core/esm/__chunks/YXGXYGQX.js +var import_react4 = __toESM(require_react(), 1); +function setRef(ref, value) { + if (typeof ref === "function") { + ref(value); + } else if (ref) { + ref.current = value; + } +} +function isValidElementWithRef(element) { + if (!element) return false; + if (!(0, import_react4.isValidElement)(element)) return false; + if ("ref" in element.props) return true; + if ("ref" in element) return true; + return false; +} +function getRefProperty(element) { + if (!isValidElementWithRef(element)) return null; + const props = { ...element.props }; + return props.ref || element.ref; +} +function mergeProps2(base, overrides) { + const props = { ...base }; + for (const key in overrides) { + if (!hasOwnProperty(overrides, key)) continue; + if (key === "className") { + const prop = "className"; + props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop]; + continue; + } + if (key === "style") { + const prop = "style"; + props[prop] = base[prop] ? { ...base[prop], ...overrides[prop] } : overrides[prop]; + continue; + } + const overrideValue = overrides[key]; + if (typeof overrideValue === "function" && key.startsWith("on")) { + const baseValue = base[key]; + if (typeof baseValue === "function") { + props[key] = (...args) => { + overrideValue(...args); + baseValue(...args); + }; + continue; + } + } + props[key] = overrideValue; + } + return props; +} + +// node_modules/@ariakit/core/esm/__chunks/3DNM6L6E.js +var canUseDOM = checkIsBrowser(); +function checkIsBrowser() { + var _a; + return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement); +} +function getDocument(node) { + if (!node) return document; + if ("self" in node) return node.document; + return node.ownerDocument || document; +} +function getActiveElement(node, activeDescendant = false) { + var _a; + const { activeElement } = getDocument(node); + if (!(activeElement == null ? void 0 : activeElement.nodeName)) { + return null; + } + if (isFrame(activeElement) && ((_a = activeElement.contentDocument) == null ? void 0 : _a.body)) { + return getActiveElement( + activeElement.contentDocument.body, + activeDescendant + ); + } + if (activeDescendant) { + const id = activeElement.getAttribute("aria-activedescendant"); + if (id) { + const element = getDocument(activeElement).getElementById(id); + if (element) { + return element; + } + } + } + return activeElement; +} +function contains(parent, child) { + return parent === child || parent.contains(child); +} +function isFrame(element) { + return element.tagName === "IFRAME"; +} +function isButton(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "button") return true; + if (tagName === "input" && element.type) { + return buttonInputTypes.indexOf(element.type) !== -1; + } + return false; +} +var buttonInputTypes = [ + "button", + "color", + "file", + "image", + "reset", + "submit" +]; +function isVisible(element) { + if (typeof element.checkVisibility === "function") { + return element.checkVisibility(); + } + const htmlElement = element; + return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0; +} +function isTextField(element) { + try { + const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null; + const isTextArea = element.tagName === "TEXTAREA"; + return isTextInput || isTextArea || false; + } catch (_error) { + return false; + } +} +function isTextbox(element) { + return element.isContentEditable || isTextField(element); +} +function getTextboxValue(element) { + if (isTextField(element)) { + return element.value; + } + if (element.isContentEditable) { + const range = getDocument(element).createRange(); + range.selectNodeContents(element); + return range.toString(); + } + return ""; +} +function getTextboxSelection(element) { + let start = 0; + let end = 0; + if (isTextField(element)) { + start = element.selectionStart || 0; + end = element.selectionEnd || 0; + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) { + const range = selection.getRangeAt(0); + const nextRange = range.cloneRange(); + nextRange.selectNodeContents(element); + nextRange.setEnd(range.startContainer, range.startOffset); + start = nextRange.toString().length; + nextRange.setEnd(range.endContainer, range.endOffset); + end = nextRange.toString().length; + } + } + return { start, end }; +} +function getPopupRole(element, fallback) { + const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"]; + const role = element == null ? void 0 : element.getAttribute("role"); + if (role && allowedPopupRoles.indexOf(role) !== -1) { + return role; + } + return fallback; +} +function getScrollingElement(element) { + if (!element) return null; + const isScrollableOverflow = (overflow) => { + if (overflow === "auto") return true; + if (overflow === "scroll") return true; + return false; + }; + if (element.clientHeight && element.scrollHeight > element.clientHeight) { + const { overflowY } = getComputedStyle(element); + if (isScrollableOverflow(overflowY)) return element; + } else if (element.clientWidth && element.scrollWidth > element.clientWidth) { + const { overflowX } = getComputedStyle(element); + if (isScrollableOverflow(overflowX)) return element; + } + return getScrollingElement(element.parentElement) || document.scrollingElement || document.body; +} +function setSelectionRange(element, ...args) { + if (/text|search|password|tel|url/i.test(element.type)) { + element.setSelectionRange(...args); + } +} +function sortBasedOnDOMPosition(items, getElement) { + const pairs = items.map((item, index) => [index, item]); + let isOrderDifferent = false; + pairs.sort(([indexA, a2], [indexB, b2]) => { + const elementA = getElement(a2); + const elementB = getElement(b2); + if (elementA === elementB) return 0; + if (!elementA || !elementB) return 0; + if (isElementPreceding(elementA, elementB)) { + if (indexA > indexB) { + isOrderDifferent = true; + } + return -1; + } + if (indexA < indexB) { + isOrderDifferent = true; + } + return 1; + }); + if (isOrderDifferent) { + return pairs.map(([_, item]) => item); + } + return items; +} +function isElementPreceding(a2, b2) { + return Boolean( + b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING + ); +} + +// node_modules/@ariakit/core/esm/__chunks/SNHYQNEZ.js +function isTouchDevice() { + return canUseDOM && !!navigator.maxTouchPoints; +} +function isApple() { + if (!canUseDOM) return false; + return /mac|iphone|ipad|ipod/i.test(navigator.platform); +} +function isSafari() { + return canUseDOM && isApple() && /apple/i.test(navigator.vendor); +} +function isFirefox() { + return canUseDOM && /firefox\//i.test(navigator.userAgent); +} + +// node_modules/@ariakit/core/esm/utils/events.js +function isPortalEvent(event) { + return Boolean( + event.currentTarget && !contains(event.currentTarget, event.target) + ); +} +function isSelfTarget(event) { + return event.target === event.currentTarget; +} +function isOpeningInNewTab(event) { + const element = event.currentTarget; + if (!element) return false; + const isAppleDevice = isApple(); + if (isAppleDevice && !event.metaKey) return false; + if (!isAppleDevice && !event.ctrlKey) return false; + const tagName = element.tagName.toLowerCase(); + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function isDownloading(event) { + const element = event.currentTarget; + if (!element) return false; + const tagName = element.tagName.toLowerCase(); + if (!event.altKey) return false; + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function fireBlurEvent(element, eventInit) { + const event = new FocusEvent("blur", eventInit); + const defaultAllowed = element.dispatchEvent(event); + const bubbleInit = { ...eventInit, bubbles: true }; + element.dispatchEvent(new FocusEvent("focusout", bubbleInit)); + return defaultAllowed; +} +function fireKeyboardEvent(element, type, eventInit) { + const event = new KeyboardEvent(type, eventInit); + return element.dispatchEvent(event); +} +function fireClickEvent(element, eventInit) { + const event = new MouseEvent("click", eventInit); + return element.dispatchEvent(event); +} +function isFocusEventOutside(event, container) { + const containerElement = container || event.currentTarget; + const relatedTarget = event.relatedTarget; + return !relatedTarget || !contains(containerElement, relatedTarget); +} +function queueBeforeEvent(element, type, callback, timeout) { + const createTimer = (callback2) => { + if (timeout) { + const timerId2 = setTimeout(callback2, timeout); + return () => clearTimeout(timerId2); + } + const timerId = requestAnimationFrame(callback2); + return () => cancelAnimationFrame(timerId); + }; + const cancelTimer = createTimer(() => { + element.removeEventListener(type, callSync, true); + callback(); + }); + const callSync = () => { + cancelTimer(); + callback(); + }; + element.addEventListener(type, callSync, { once: true, capture: true }); + return cancelTimer; +} +function addGlobalEventListener(type, listener, options, scope = window) { + const children = []; + try { + scope.document.addEventListener(type, listener, options); + for (const frame of Array.from(scope.frames)) { + children.push(addGlobalEventListener(type, listener, options, frame)); + } + } catch (e2) { + } + const removeEventListener = () => { + try { + scope.document.removeEventListener(type, listener, options); + } catch (e2) { + } + for (const remove of children) { + remove(); + } + }; + return removeEventListener; +} + +// node_modules/@ariakit/react-core/esm/__chunks/KPHZR4MB.js +var React6 = __toESM(require_react(), 1); +var import_react5 = __toESM(require_react(), 1); +var _React = { ...React6 }; +var useReactId = _React.useId; +var useReactDeferredValue = _React.useDeferredValue; +var useReactInsertionEffect = _React.useInsertionEffect; +var useSafeLayoutEffect = canUseDOM ? import_react5.useLayoutEffect : import_react5.useEffect; +function useInitialValue(value) { + const [initialValue] = (0, import_react5.useState)(value); + return initialValue; +} +function useLiveRef(value) { + const ref = (0, import_react5.useRef)(value); + useSafeLayoutEffect(() => { + ref.current = value; + }); + return ref; +} +function useEvent(callback) { + const ref = (0, import_react5.useRef)(() => { + throw new Error("Cannot call an event handler while rendering."); + }); + if (useReactInsertionEffect) { + useReactInsertionEffect(() => { + ref.current = callback; + }); + } else { + ref.current = callback; + } + return (0, import_react5.useCallback)((...args) => { + var _a; + return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args); + }, []); +} +function useTransactionState(callback) { + const [state, setState] = (0, import_react5.useState)(null); + useSafeLayoutEffect(() => { + if (state == null) return; + if (!callback) return; + let prevState = null; + callback((prev) => { + prevState = prev; + return state; + }); + return () => { + callback(prevState); + }; + }, [state, callback]); + return [state, setState]; +} +function useMergeRefs(...refs) { + return (0, import_react5.useMemo)(() => { + if (!refs.some(Boolean)) return; + return (value) => { + for (const ref of refs) { + setRef(ref, value); + } + }; + }, refs); +} +function useId3(defaultId) { + if (useReactId) { + const reactId = useReactId(); + if (defaultId) return defaultId; + return reactId; + } + const [id, setId] = (0, import_react5.useState)(defaultId); + useSafeLayoutEffect(() => { + if (defaultId || id) return; + const random = Math.random().toString(36).slice(2, 8); + setId(`id-${random}`); + }, [defaultId, id]); + return defaultId || id; +} +function useTagName(refOrElement, type) { + const stringOrUndefined = (type2) => { + if (typeof type2 !== "string") return; + return type2; + }; + const [tagName, setTagName] = (0, import_react5.useState)(() => stringOrUndefined(type)); + useSafeLayoutEffect(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type)); + }, [refOrElement, type]); + return tagName; +} +function useAttribute(refOrElement, attributeName, defaultValue2) { + const initialValue = useInitialValue(defaultValue2); + const [attribute, setAttribute] = (0, import_react5.useState)(initialValue); + (0, import_react5.useEffect)(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + if (!element) return; + const callback = () => { + const value = element.getAttribute(attributeName); + setAttribute(value == null ? initialValue : value); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { attributeFilter: [attributeName] }); + callback(); + return () => observer.disconnect(); + }, [refOrElement, attributeName, initialValue]); + return attribute; +} +function useUpdateEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + (0, import_react5.useEffect)(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + (0, import_react5.useEffect)( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useUpdateLayoutEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + useSafeLayoutEffect(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + useSafeLayoutEffect( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useForceUpdate() { + return (0, import_react5.useReducer)(() => [], []); +} +function useBooleanEvent(booleanOrCallback) { + return useEvent( + typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback + ); +} +function useWrapElement(props, callback, deps = []) { + const wrapElement = (0, import_react5.useCallback)( + (element) => { + if (props.wrapElement) { + element = props.wrapElement(element); + } + return callback(element); + }, + [...deps, props.wrapElement] + ); + return { ...props, wrapElement }; +} +function useMetadataProps(props, key, value) { + const parent = props.onLoadedMetadataCapture; + const onLoadedMetadataCapture = (0, import_react5.useMemo)(() => { + return Object.assign(() => { + }, { ...parent, [key]: value }); + }, [parent, key, value]); + return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }]; +} +var hasInstalledGlobalEventListeners = false; +function useIsMouseMoving() { + (0, import_react5.useEffect)(() => { + if (hasInstalledGlobalEventListeners) return; + addGlobalEventListener("mousemove", setMouseMoving, true); + addGlobalEventListener("mousedown", resetMouseMoving, true); + addGlobalEventListener("mouseup", resetMouseMoving, true); + addGlobalEventListener("keydown", resetMouseMoving, true); + addGlobalEventListener("scroll", resetMouseMoving, true); + hasInstalledGlobalEventListeners = true; + }, []); + const isMouseMoving = useEvent(() => mouseMoving); + return isMouseMoving; +} +var mouseMoving = false; +var previousScreenX = 0; +var previousScreenY = 0; +function hasMouseMovement(event) { + const movementX = event.movementX || event.screenX - previousScreenX; + const movementY = event.movementY || event.screenY - previousScreenY; + previousScreenX = event.screenX; + previousScreenY = event.screenY; + return movementX || movementY || false; +} +function setMouseMoving(event) { + if (!hasMouseMovement(event)) return; + mouseMoving = true; +} +function resetMouseMoving() { + mouseMoving = false; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GWSL6KNJ.js +var React7 = __toESM(require_react(), 1); +var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); +function forwardRef22(render4) { + const Role = React7.forwardRef( + // @ts-ignore Incompatible with React 19 types. Ignore for now. + (props, ref) => render4({ ...props, ref }) + ); + Role.displayName = render4.displayName || render4.name; + return Role; +} +function memo22(Component, propsAreEqual) { + return React7.memo(Component, propsAreEqual); +} +function createElement3(Type, props) { + const { wrapElement, render: render4, ...rest } = props; + const mergedRef = useMergeRefs(props.ref, getRefProperty(render4)); + let element; + if (React7.isValidElement(render4)) { + const renderProps = { + // @ts-ignore Incompatible with React 19 types. Ignore for now. + ...render4.props, + ref: mergedRef + }; + element = React7.cloneElement(render4, mergeProps2(rest, renderProps)); + } else if (render4) { + element = render4(rest); + } else { + element = /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Type, { ...rest }); + } + if (wrapElement) { + return wrapElement(element); + } + return element; +} +function createHook(useProps) { + const useRole = (props = {}) => { + return useProps(props); + }; + useRole.displayName = useProps.name; + return useRole; +} +function createStoreContext(providers = [], scopedProviders = []) { + const context = React7.createContext(void 0); + const scopedContext = React7.createContext(void 0); + const useContext28 = () => React7.useContext(context); + const useScopedContext = (onlyScoped = false) => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (onlyScoped) return scoped; + return scoped || store; + }; + const useProviderContext = () => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (scoped && scoped === store) return; + return store; + }; + const ContextProvider = (props) => { + return providers.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(context.Provider, { ...props }) + ); + }; + const ScopedContextProvider = (props) => { + return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(ContextProvider, { ...props, children: scopedProviders.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(scopedContext.Provider, { ...props }) + ) }); + }; + return { + context, + scopedContext, + useContext: useContext28, + useScopedContext, + useProviderContext, + ContextProvider, + ScopedContextProvider + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SMPCIMZM.js +var ctx = createStoreContext(); +var useCollectionContext = ctx.useContext; +var useCollectionScopedContext = ctx.useScopedContext; +var useCollectionProviderContext = ctx.useProviderContext; +var CollectionContextProvider = ctx.ContextProvider; +var CollectionScopedContextProvider = ctx.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/AVVXDJMZ.js +var import_react6 = __toESM(require_react(), 1); +var ctx2 = createStoreContext( + [CollectionContextProvider], + [CollectionScopedContextProvider] +); +var useCompositeContext = ctx2.useContext; +var useCompositeScopedContext = ctx2.useScopedContext; +var useCompositeProviderContext = ctx2.useProviderContext; +var CompositeContextProvider = ctx2.ContextProvider; +var CompositeScopedContextProvider = ctx2.ScopedContextProvider; +var CompositeItemContext = (0, import_react6.createContext)( + void 0 +); +var CompositeRowContext = (0, import_react6.createContext)( + void 0 +); + +// node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js +function findFirstEnabledItem(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItem(store, id) { + if (!id) return null; + return store.item(id) || null; +} +function groupItemsByRows(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function selectTextField(element, collapseToEnd = false) { + if (isTextField(element)) { + element.setSelectionRange( + collapseToEnd ? element.value.length : 0, + element.value.length + ); + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + selection == null ? void 0 : selection.selectAllChildren(element); + if (collapseToEnd) { + selection == null ? void 0 : selection.collapseToEnd(); + } + } +} +var FOCUS_SILENTLY = /* @__PURE__ */ Symbol("FOCUS_SILENTLY"); +function focusSilently(element) { + element[FOCUS_SILENTLY] = true; + element.focus({ preventScroll: true }); +} +function silentlyFocused(element) { + const isSilentlyFocused = element[FOCUS_SILENTLY]; + delete element[FOCUS_SILENTLY]; + return isSilentlyFocused; +} +function isItem(store, element, exclude) { + if (!element) return false; + if (element === exclude) return false; + const item = store.item(element.id); + if (!item) return false; + if (exclude && item.element === exclude) return false; + return true; +} + +// node_modules/@ariakit/react-core/esm/__chunks/Z2O3VLAQ.js +var import_react7 = __toESM(require_react(), 1); +var TagName = "div"; +var useCollectionItem = createHook( + function useCollectionItem2({ + store, + shouldRegisterItem = true, + getItem = identity, + // @ts-expect-error This prop may come from a collection renderer. + element, + ...props + }) { + const context = useCollectionContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react7.useRef)(element); + (0, import_react7.useEffect)(() => { + const element2 = ref.current; + if (!id) return; + if (!element2) return; + if (!shouldRegisterItem) return; + const item = getItem({ id, element: element2 }); + return store == null ? void 0 : store.renderItem(item); + }, [id, shouldRegisterItem, getItem, store]); + props = { + ...props, + ref: useMergeRefs(ref, props.ref) + }; + return removeUndefinedValues(props); + } +); +var CollectionItem = forwardRef22(function CollectionItem2(props) { + const htmlProps = useCollectionItem(props); + return createElement3(TagName, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js +var import_react8 = __toESM(require_react(), 1); +var FocusableContext = (0, import_react8.createContext)(true); + +// node_modules/@ariakit/core/esm/utils/focus.js +var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])"; +function isFocusable(element) { + if (!element.matches(selector)) return false; + if (!isVisible(element)) return false; + if (element.closest("[inert]")) return false; + return true; +} +function getClosestFocusable(element) { + while (element && !isFocusable(element)) { + element = element.closest(selector); + } + return element || null; +} +function hasFocus(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (activeElement === element) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + return activeDescendant === element.id; +} +function hasFocusWithin(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (contains(element, activeElement)) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + if (!("id" in element)) return false; + if (activeDescendant === element.id) return true; + return !!element.querySelector(`#${CSS.escape(activeDescendant)}`); +} +function focusIfNeeded(element) { + if (!hasFocusWithin(element) && isFocusable(element)) { + element.focus(); + } +} +function focusIntoView(element, options) { + if (!("scrollIntoView" in element)) { + element.focus(); + } else { + element.focus({ preventScroll: true }); + element.scrollIntoView({ block: "nearest", inline: "nearest", ...options }); + } +} + +// node_modules/@ariakit/react-core/esm/__chunks/U6HHPQDW.js +var import_react9 = __toESM(require_react(), 1); +var TagName2 = "div"; +var isSafariBrowser = isSafari(); +var alwaysFocusVisibleInputTypes = [ + "text", + "search", + "url", + "tel", + "email", + "password", + "number", + "date", + "month", + "week", + "time", + "datetime", + "datetime-local" +]; +var safariFocusAncestorSymbol = /* @__PURE__ */ Symbol("safariFocusAncestor"); +function markSafariFocusAncestor(element, value) { + if (!element) return; + element[safariFocusAncestorSymbol] = value; +} +function isAlwaysFocusVisible(element) { + const { tagName, readOnly, type } = element; + if (tagName === "TEXTAREA" && !readOnly) return true; + if (tagName === "SELECT" && !readOnly) return true; + if (tagName === "INPUT" && !readOnly) { + return alwaysFocusVisibleInputTypes.includes(type); + } + if (element.isContentEditable) return true; + const role = element.getAttribute("role"); + if (role === "combobox" && element.dataset.name) { + return true; + } + return false; +} +function getLabels(element) { + if ("labels" in element) { + return element.labels; + } + return null; +} +function isNativeCheckboxOrRadio(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "input" && element.type) { + return element.type === "radio" || element.type === "checkbox"; + } + return false; +} +function isNativeTabbable(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a"; +} +function supportsDisabledAttribute(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea"; +} +function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) { + if (!focusable) { + return tabIndexProp; + } + if (trulyDisabled) { + if (nativeTabbable && !supportsDisabled) { + return -1; + } + return; + } + if (nativeTabbable) { + return tabIndexProp; + } + return tabIndexProp || 0; +} +function useDisableEvent(onEvent, disabled) { + return useEvent((event) => { + onEvent == null ? void 0 : onEvent(event); + if (event.defaultPrevented) return; + if (disabled) { + event.stopPropagation(); + event.preventDefault(); + } + }); +} +var hasInstalledGlobalEventListeners2 = false; +var isKeyboardModality = true; +function onGlobalMouseDown(event) { + const target = event.target; + if (target && "hasAttribute" in target) { + if (!target.hasAttribute("data-focus-visible")) { + isKeyboardModality = false; + } + } +} +function onGlobalKeyDown(event) { + if (event.metaKey) return; + if (event.ctrlKey) return; + if (event.altKey) return; + isKeyboardModality = true; +} +var useFocusable = createHook( + function useFocusable2({ + focusable = true, + accessibleWhenDisabled, + autoFocus, + onFocusVisible, + ...props + }) { + const ref = (0, import_react9.useRef)(null); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (hasInstalledGlobalEventListeners2) return; + addGlobalEventListener("mousedown", onGlobalMouseDown, true); + addGlobalEventListener("keydown", onGlobalKeyDown, true); + hasInstalledGlobalEventListeners2 = true; + }, [focusable]); + if (isSafariBrowser) { + (0, import_react9.useEffect)(() => { + if (!focusable) return; + const element = ref.current; + if (!element) return; + if (!isNativeCheckboxOrRadio(element)) return; + const labels = getLabels(element); + if (!labels) return; + const onMouseUp = () => queueMicrotask(() => element.focus()); + for (const label of labels) { + label.addEventListener("mouseup", onMouseUp); + } + return () => { + for (const label of labels) { + label.removeEventListener("mouseup", onMouseUp); + } + }; + }, [focusable]); + } + const disabled = focusable && disabledFromProps(props); + const trulyDisabled = !!disabled && !accessibleWhenDisabled; + const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (trulyDisabled && focusVisible) { + setFocusVisible(false); + } + }, [focusable, trulyDisabled, focusVisible]); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (!focusVisible) return; + const element = ref.current; + if (!element) return; + if (typeof IntersectionObserver === "undefined") return; + const observer = new IntersectionObserver(() => { + if (!isFocusable(element)) { + setFocusVisible(false); + } + }); + observer.observe(element); + return () => observer.disconnect(); + }, [focusable, focusVisible]); + const onKeyPressCapture = useDisableEvent( + props.onKeyPressCapture, + disabled + ); + const onMouseDownCapture = useDisableEvent( + props.onMouseDownCapture, + disabled + ); + const onClickCapture = useDisableEvent(props.onClickCapture, disabled); + const onMouseDownProp = props.onMouseDown; + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + const element = event.currentTarget; + if (!isSafariBrowser) return; + if (isPortalEvent(event)) return; + if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return; + let receivedFocus = false; + const onFocus = () => { + receivedFocus = true; + }; + const options = { capture: true, once: true }; + element.addEventListener("focusin", onFocus, options); + const focusableContainer = getClosestFocusable(element.parentElement); + markSafariFocusAncestor(focusableContainer, true); + queueBeforeEvent(element, "mouseup", () => { + element.removeEventListener("focusin", onFocus, true); + markSafariFocusAncestor(focusableContainer, false); + if (receivedFocus) return; + focusIfNeeded(element); + }); + }); + const handleFocusVisible = (event, currentTarget) => { + if (currentTarget) { + event.currentTarget = currentTarget; + } + if (!focusable) return; + const element = event.currentTarget; + if (!element) return; + if (!hasFocus(element)) return; + onFocusVisible == null ? void 0 : onFocusVisible(event); + if (event.defaultPrevented) return; + element.dataset.focusVisible = "true"; + setFocusVisible(true); + }; + const onKeyDownCaptureProp = props.onKeyDownCapture; + const onKeyDownCapture = useEvent((event) => { + onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (focusVisible) return; + if (event.metaKey) return; + if (event.altKey) return; + if (event.ctrlKey) return; + if (!isSelfTarget(event)) return; + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + queueBeforeEvent(element, "focusout", applyFocusVisible); + }); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (!isSelfTarget(event)) { + setFocusVisible(false); + return; + } + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + if (isKeyboardModality || isAlwaysFocusVisible(event.target)) { + queueBeforeEvent(event.target, "focusout", applyFocusVisible); + } else { + setFocusVisible(false); + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + onBlurProp == null ? void 0 : onBlurProp(event); + if (!focusable) return; + if (!isFocusEventOutside(event)) return; + event.currentTarget.removeAttribute("data-focus-visible"); + setFocusVisible(false); + }); + const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext); + const autoFocusRef = useEvent((element) => { + if (!focusable) return; + if (!autoFocus) return; + if (!element) return; + if (!autoFocusOnShow) return; + queueMicrotask(() => { + if (hasFocus(element)) return; + if (!isFocusable(element)) return; + element.focus(); + }); + }); + const tagName = useTagName(ref); + const nativeTabbable = focusable && isNativeTabbable(tagName); + const supportsDisabled = focusable && supportsDisabledAttribute(tagName); + const styleProp = props.style; + const style = (0, import_react9.useMemo)(() => { + if (trulyDisabled) { + return { pointerEvents: "none", ...styleProp }; + } + return styleProp; + }, [trulyDisabled, styleProp]); + props = { + "data-focus-visible": focusable && focusVisible || void 0, + "data-autofocus": autoFocus || void 0, + "aria-disabled": disabled || void 0, + ...props, + ref: useMergeRefs(ref, autoFocusRef, props.ref), + style, + tabIndex: getTabIndex( + focusable, + trulyDisabled, + nativeTabbable, + supportsDisabled, + props.tabIndex + ), + disabled: supportsDisabled && trulyDisabled ? true : void 0, + // TODO: Test Focusable contentEditable. + contentEditable: disabled ? void 0 : props.contentEditable, + onKeyPressCapture, + onClickCapture, + onMouseDownCapture, + onMouseDown, + onKeyDownCapture, + onFocusCapture, + onBlur + }; + return removeUndefinedValues(props); + } +); +var Focusable = forwardRef22(function Focusable2(props) { + const htmlProps = useFocusable(props); + return createElement3(TagName2, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/PZ3OL7I2.js +var import_react10 = __toESM(require_react(), 1); +var TagName3 = "button"; +function isNativeClick(event) { + if (!event.isTrusted) return false; + const element = event.currentTarget; + if (event.key === "Enter") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A"; + } + if (event.key === " ") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT"; + } + return false; +} +var symbol = /* @__PURE__ */ Symbol("command"); +var useCommand = createHook( + function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { + const ref = (0, import_react10.useRef)(null); + const [isNativeButton, setIsNativeButton] = (0, import_react10.useState)(false); + (0, import_react10.useEffect)(() => { + if (!ref.current) return; + setIsNativeButton(isButton(ref.current)); + }, []); + const [active, setActive] = (0, import_react10.useState)(false); + const activeRef = (0, import_react10.useRef)(false); + const disabled = disabledFromProps(props); + const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + const element = event.currentTarget; + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (!isSelfTarget(event)) return; + if (isTextField(element)) return; + if (element.isContentEditable) return; + const isEnter = clickOnEnter && event.key === "Enter"; + const isSpace = clickOnSpace && event.key === " "; + const shouldPreventEnter = event.key === "Enter" && !clickOnEnter; + const shouldPreventSpace = event.key === " " && !clickOnSpace; + if (shouldPreventEnter || shouldPreventSpace) { + event.preventDefault(); + return; + } + if (isEnter || isSpace) { + const nativeClick = isNativeClick(event); + if (isEnter) { + if (!nativeClick) { + event.preventDefault(); + const { view, ...eventInit } = event; + const click = () => fireClickEvent(element, eventInit); + if (isFirefox()) { + queueBeforeEvent(element, "keyup", click); + } else { + queueMicrotask(click); + } + } + } else if (isSpace) { + activeRef.current = true; + if (!nativeClick) { + event.preventDefault(); + setActive(true); + } + } + } + }); + const onKeyUpProp = props.onKeyUp; + const onKeyUp = useEvent((event) => { + onKeyUpProp == null ? void 0 : onKeyUpProp(event); + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (event.metaKey) return; + const isSpace = clickOnSpace && event.key === " "; + if (activeRef.current && isSpace) { + activeRef.current = false; + if (!isNativeClick(event)) { + event.preventDefault(); + setActive(false); + const element = event.currentTarget; + const { view, ...eventInit } = event; + queueMicrotask(() => fireClickEvent(element, eventInit)); + } + } + }); + props = { + "data-active": active || void 0, + type: isNativeButton ? "button" : void 0, + ...metadataProps, + ...props, + ref: useMergeRefs(ref, props.ref), + onKeyDown, + onKeyUp + }; + props = useFocusable(props); + return props; + } +); +var Command = forwardRef22(function Command2(props) { + const htmlProps = useCommand(props); + return createElement3(TagName3, htmlProps); +}); + +// node_modules/@ariakit/core/esm/__chunks/SXKM4CGU.js +function getInternal(store, key) { + const internals = store.__unstableInternals; + invariant(internals, "Invalid store"); + return internals[key]; +} +function createStore(initialState, ...stores) { + let state = initialState; + let prevStateBatch = state; + let lastUpdate = /* @__PURE__ */ Symbol(); + let destroy = noop; + const instances = /* @__PURE__ */ new Set(); + const updatedKeys = /* @__PURE__ */ new Set(); + const setups = /* @__PURE__ */ new Set(); + const listeners = /* @__PURE__ */ new Set(); + const batchListeners = /* @__PURE__ */ new Set(); + const disposables = /* @__PURE__ */ new WeakMap(); + const listenerKeys = /* @__PURE__ */ new WeakMap(); + const storeSetup = (callback) => { + setups.add(callback); + return () => setups.delete(callback); + }; + const storeInit = () => { + const initialized = instances.size; + const instance = /* @__PURE__ */ Symbol(); + instances.add(instance); + const maybeDestroy = () => { + instances.delete(instance); + if (instances.size) return; + destroy(); + }; + if (initialized) return maybeDestroy; + const desyncs = getKeys(state).map( + (key) => chain( + ...stores.map((store) => { + var _a; + const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store); + if (!storeState) return; + if (!hasOwnProperty(storeState, key)) return; + return sync(store, [key], (state2) => { + setState( + key, + state2[key], + // @ts-expect-error - Not public API. This is just to prevent + // infinite loops. + true + ); + }); + }) + ) + ); + const teardowns = []; + for (const setup2 of setups) { + teardowns.push(setup2()); + } + const cleanups = stores.map(init); + destroy = chain(...desyncs, ...teardowns, ...cleanups); + return maybeDestroy; + }; + const sub = (keys, listener, set = listeners) => { + set.add(listener); + listenerKeys.set(listener, keys); + return () => { + var _a; + (_a = disposables.get(listener)) == null ? void 0 : _a(); + disposables.delete(listener); + listenerKeys.delete(listener); + set.delete(listener); + }; + }; + const storeSubscribe = (keys, listener) => sub(keys, listener); + const storeSync = (keys, listener) => { + disposables.set(listener, listener(state, state)); + return sub(keys, listener); + }; + const storeBatch = (keys, listener) => { + disposables.set(listener, listener(state, prevStateBatch)); + return sub(keys, listener, batchListeners); + }; + const storePick = (keys) => createStore(pick(state, keys), finalStore); + const storeOmit = (keys) => createStore(omit2(state, keys), finalStore); + const getState = () => state; + const setState = (key, value, fromStores = false) => { + var _a; + if (!hasOwnProperty(state, key)) return; + const nextValue = applyState(value, state[key]); + if (nextValue === state[key]) return; + if (!fromStores) { + for (const store of stores) { + (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue); + } + } + const prevState = state; + state = { ...state, [key]: nextValue }; + const thisUpdate = /* @__PURE__ */ Symbol(); + lastUpdate = thisUpdate; + updatedKeys.add(key); + const run = (listener, prev, uKeys) => { + var _a2; + const keys = listenerKeys.get(listener); + const updated = (k) => uKeys ? uKeys.has(k) : k === key; + if (!keys || keys.some(updated)) { + (_a2 = disposables.get(listener)) == null ? void 0 : _a2(); + disposables.set(listener, listener(state, prev)); + } + }; + for (const listener of listeners) { + run(listener, prevState); + } + queueMicrotask(() => { + if (lastUpdate !== thisUpdate) return; + const snapshot = state; + for (const listener of batchListeners) { + run(listener, prevStateBatch, updatedKeys); + } + prevStateBatch = snapshot; + updatedKeys.clear(); + }); + }; + const finalStore = { + getState, + setState, + __unstableInternals: { + setup: storeSetup, + init: storeInit, + subscribe: storeSubscribe, + sync: storeSync, + batch: storeBatch, + pick: storePick, + omit: storeOmit + } + }; + return finalStore; +} +function setup(store, ...args) { + if (!store) return; + return getInternal(store, "setup")(...args); +} +function init(store, ...args) { + if (!store) return; + return getInternal(store, "init")(...args); +} +function subscribe(store, ...args) { + if (!store) return; + return getInternal(store, "subscribe")(...args); +} +function sync(store, ...args) { + if (!store) return; + return getInternal(store, "sync")(...args); +} +function batch(store, ...args) { + if (!store) return; + return getInternal(store, "batch")(...args); +} +function omit22(store, ...args) { + if (!store) return; + return getInternal(store, "omit")(...args); +} +function pick2(store, ...args) { + if (!store) return; + return getInternal(store, "pick")(...args); +} +function mergeStore(...stores) { + var _a; + const initialState = {}; + for (const store2 of stores) { + const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2); + if (nextState) { + Object.assign(initialState, nextState); + } + } + const store = createStore(initialState, ...stores); + return Object.assign({}, ...stores, store); +} +function throwOnConflictingProps(props, store) { + if (false) return; + if (!store) return; + const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => { + var _a; + const stateKey = key.replace("default", ""); + return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}${stateKey.slice(1)}`; + }); + if (!defaultKeys.length) return; + const storeState = store.getState(); + const conflictingProps = defaultKeys.filter( + (key) => hasOwnProperty(storeState, key) + ); + if (!conflictingProps.length) return; + throw new Error( + `Passing a store prop in conjunction with a default state is not supported. + +const store = useSelectStore(); + + ^ ^ + +Instead, pass the default state to the topmost store: + +const store = useSelectStore({ defaultValue: "Apple" }); + + +See https://github.com/ariakit/ariakit/pull/2745 for more details. + +If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit +` + ); +} + +// node_modules/@ariakit/react-core/esm/__chunks/Q5W46E73.js +var React8 = __toESM(require_react(), 1); +var import_shim = __toESM(require_shim(), 1); +var { useSyncExternalStore } = import_shim.default; +var noopSubscribe = () => () => { +}; +function useStoreState(store, keyOrSelector = identity) { + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const key = typeof keyOrSelector === "string" ? keyOrSelector : null; + const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null; + const state = store == null ? void 0 : store.getState(); + if (selector2) return selector2(state); + if (!state) return; + if (!key) return; + if (!hasOwnProperty(state, key)) return; + return state[key]; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreStateObject(store, object) { + const objRef = React8.useRef( + {} + ); + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const state = store == null ? void 0 : store.getState(); + let updated = false; + const obj = objRef.current; + for (const prop in object) { + const keyOrSelector = object[prop]; + if (typeof keyOrSelector === "function") { + const value = keyOrSelector(state); + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + if (typeof keyOrSelector === "string") { + if (!state) continue; + if (!hasOwnProperty(state, keyOrSelector)) continue; + const value = state[keyOrSelector]; + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + } + if (updated) { + objRef.current = { ...obj }; + } + return objRef.current; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreProps(store, props, key, setKey) { + const value = hasOwnProperty(props, key) ? props[key] : void 0; + const setValue = setKey ? props[setKey] : void 0; + const propsRef = useLiveRef({ value, setValue }); + useSafeLayoutEffect(() => { + return sync(store, [key], (state, prev) => { + const { value: value2, setValue: setValue2 } = propsRef.current; + if (!setValue2) return; + if (state[key] === prev[key]) return; + if (state[key] === value2) return; + setValue2(state[key]); + }); + }, [store, key]); + useSafeLayoutEffect(() => { + if (value === void 0) return; + store.setState(key, value); + return batch(store, [key], () => { + if (value === void 0) return; + store.setState(key, value); + }); + }); +} +function useStore(createStore2, props) { + const [store, setStore] = React8.useState(() => createStore2(props)); + useSafeLayoutEffect(() => init(store), [store]); + const useState29 = React8.useCallback( + (keyOrSelector) => useStoreState(store, keyOrSelector), + [store] + ); + const memoizedStore = React8.useMemo( + () => ({ ...store, useState: useState29 }), + [store, useState29] + ); + const updateStore = useEvent(() => { + setStore((store2) => createStore2({ ...props, ...store2.getState() })); + }); + return [memoizedStore, updateStore]; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WZWDIE3S.js +var import_react11 = __toESM(require_react(), 1); +var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); +var TagName4 = "button"; +function isEditableElement(element) { + if (isTextbox(element)) return true; + return element.tagName === "INPUT" && !isButton(element); +} +function getNextPageOffset(scrollingElement, pageUp = false) { + const height = scrollingElement.clientHeight; + const { top } = scrollingElement.getBoundingClientRect(); + const pageSize = Math.max(height * 0.875, height - 40) * 1.5; + const pageOffset = pageUp ? height - pageSize + top : pageSize + top; + if (scrollingElement.tagName === "HTML") { + return pageOffset + scrollingElement.scrollTop; + } + return pageOffset; +} +function getItemOffset(itemElement, pageUp = false) { + const { top } = itemElement.getBoundingClientRect(); + if (pageUp) { + return top + itemElement.clientHeight; + } + return top; +} +function findNextPageItemId(element, store, next, pageUp = false) { + var _a; + if (!store) return; + if (!next) return; + const { renderedItems } = store.getState(); + const scrollingElement = getScrollingElement(element); + if (!scrollingElement) return; + const nextPageOffset = getNextPageOffset(scrollingElement, pageUp); + let id; + let prevDifference; + for (let i2 = 0; i2 < renderedItems.length; i2 += 1) { + const previousId = id; + id = next(i2); + if (!id) break; + if (id === previousId) continue; + const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element; + if (!itemElement) continue; + const itemOffset = getItemOffset(itemElement, pageUp); + const difference = itemOffset - nextPageOffset; + const absDifference = Math.abs(difference); + if (pageUp && difference <= 0 || !pageUp && difference >= 0) { + if (prevDifference !== void 0 && prevDifference < absDifference) { + id = previousId; + } + break; + } + prevDifference = absDifference; + } + return id; +} +function targetIsAnotherItem(event, store) { + if (isSelfTarget(event)) return false; + return isItem(store, event.target); +} +var useCompositeItem = createHook( + function useCompositeItem2({ + store, + rowId: rowIdProp, + preventScrollOnKeyDown = false, + moveOnKeyPress = true, + tabbable = false, + getItem: getItemProp, + "aria-setsize": ariaSetSizeProp, + "aria-posinset": ariaPosInSetProp, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react11.useRef)(null); + const row = (0, import_react11.useContext)(CompositeRowContext); + const disabled = disabledFromProps(props); + const trulyDisabled = disabled && !props.accessibleWhenDisabled; + const { + rowId, + baseElement, + isActiveItem, + ariaSetSize, + ariaPosInSet, + isTabbable + } = useStoreStateObject(store, { + rowId(state) { + if (rowIdProp) return rowIdProp; + if (!state) return; + if (!(row == null ? void 0 : row.baseElement)) return; + if (row.baseElement !== state.baseElement) return; + return row.id; + }, + baseElement(state) { + return (state == null ? void 0 : state.baseElement) || void 0; + }, + isActiveItem(state) { + return !!state && state.activeId === id; + }, + ariaSetSize(state) { + if (ariaSetSizeProp != null) return ariaSetSizeProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaSetSize)) return; + if (row.baseElement !== state.baseElement) return; + return row.ariaSetSize; + }, + ariaPosInSet(state) { + if (ariaPosInSetProp != null) return ariaPosInSetProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaPosInSet)) return; + if (row.baseElement !== state.baseElement) return; + const itemsInRow = state.renderedItems.filter( + (item) => item.rowId === rowId + ); + return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id); + }, + isTabbable(state) { + if (!(state == null ? void 0 : state.renderedItems.length)) return true; + if (state.virtualFocus) return false; + if (tabbable) return true; + if (state.activeId === null) return false; + const item = store == null ? void 0 : store.item(state.activeId); + if (item == null ? void 0 : item.disabled) return true; + if (!(item == null ? void 0 : item.element)) return true; + return state.activeId === id; + } + }); + const getItem = (0, import_react11.useCallback)( + (item) => { + var _a; + const nextItem = { + ...item, + id: id || item.id, + rowId, + disabled: !!trulyDisabled, + children: (_a = item.element) == null ? void 0 : _a.textContent + }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [id, rowId, trulyDisabled, getItemProp] + ); + const onFocusProp = props.onFocus; + const hasFocusedComposite = (0, import_react11.useRef)(false); + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (isPortalEvent(event)) return; + if (!id) return; + if (!store) return; + if (targetIsAnotherItem(event, store)) return; + const { virtualFocus, baseElement: baseElement2 } = store.getState(); + store.setActiveId(id); + if (isTextbox(event.currentTarget)) { + selectTextField(event.currentTarget); + } + if (!virtualFocus) return; + if (!isSelfTarget(event)) return; + if (isEditableElement(event.currentTarget)) return; + if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return; + if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) { + event.currentTarget.scrollIntoView({ + block: "nearest", + inline: "nearest" + }); + } + hasFocusedComposite.current = true; + const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget); + if (fromComposite) { + focusSilently(baseElement2); + } else { + baseElement2.focus(); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + const state = store == null ? void 0 : store.getState(); + if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) { + hasFocusedComposite.current = false; + event.preventDefault(); + event.stopPropagation(); + } + }); + const onKeyDownProp = props.onKeyDown; + const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown); + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + if (!isSelfTarget(event)) return; + if (!store) return; + const { currentTarget } = event; + const state = store.getState(); + const item = store.item(id); + const isGrid2 = !!(item == null ? void 0 : item.rowId); + const isVertical = state.orientation !== "horizontal"; + const isHorizontal = state.orientation !== "vertical"; + const canHomeEnd = () => { + if (isGrid2) return true; + if (isHorizontal) return true; + if (!state.baseElement) return true; + if (!isTextField(state.baseElement)) return true; + return false; + }; + const keyMap = { + ArrowUp: (isGrid2 || isVertical) && store.up, + ArrowRight: (isGrid2 || isHorizontal) && store.next, + ArrowDown: (isGrid2 || isVertical) && store.down, + ArrowLeft: (isGrid2 || isHorizontal) && store.previous, + Home: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.first(); + } + return store == null ? void 0 : store.previous(-1); + }, + End: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.last(); + } + return store == null ? void 0 : store.next(-1); + }, + PageUp: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true); + }, + PageDown: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down); + } + }; + const action = keyMap[event.key]; + if (action) { + if (isTextbox(currentTarget)) { + const selection = getTextboxSelection(currentTarget); + const isLeft = isHorizontal && event.key === "ArrowLeft"; + const isRight = isHorizontal && event.key === "ArrowRight"; + const isUp = isVertical && event.key === "ArrowUp"; + const isDown = isVertical && event.key === "ArrowDown"; + if (isRight || isDown) { + const { length: valueLength } = getTextboxValue(currentTarget); + if (selection.end !== valueLength) return; + } else if ((isLeft || isUp) && selection.start !== 0) return; + } + const nextId = action(); + if (preventScrollOnKeyDownProp(event) || nextId !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(nextId); + } + } + }); + const providerValue = (0, import_react11.useMemo)( + () => ({ id, baseElement }), + [id, baseElement] + ); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }), + [providerValue] + ); + props = { + id, + "data-active-item": isActiveItem || void 0, + ...props, + ref: useMergeRefs(ref, props.ref), + tabIndex: isTabbable ? props.tabIndex : -1, + onFocus, + onBlurCapture, + onKeyDown + }; + props = useCommand(props); + props = useCollectionItem({ + store, + ...props, + getItem, + shouldRegisterItem: id ? props.shouldRegisterItem : false + }); + return removeUndefinedValues({ + ...props, + "aria-setsize": ariaSetSize, + "aria-posinset": ariaPosInSet + }); + } +); +var CompositeItem = memo22( + forwardRef22(function CompositeItem2(props) { + const htmlProps = useCompositeItem(props); + return createElement3(TagName4, htmlProps); + }) +); + +// node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js +function toArray(arg) { + if (Array.isArray(arg)) { + return arg; + } + return typeof arg !== "undefined" ? [arg] : []; +} +function flatten2DArray(array) { + const flattened = []; + for (const row of array) { + flattened.push(...row); + } + return flattened; +} +function reverseArray(array) { + return array.slice().reverse(); +} + +// node_modules/@ariakit/react-core/esm/__chunks/ZMWF7ASR.js +var import_react12 = __toESM(require_react(), 1); +var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); +var TagName5 = "div"; +function isGrid(items) { + return items.some((item) => !!item.rowId); +} +function isPrintableKey(event) { + const target = event.target; + if (target && !isTextField(target)) return false; + return event.key.length === 1 && !event.ctrlKey && !event.metaKey; +} +function isModifierKey(event) { + return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta"; +} +function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) { + return useEvent((event) => { + var _a; + onKeyboardEvent == null ? void 0 : onKeyboardEvent(event); + if (event.defaultPrevented) return; + if (event.isPropagationStopped()) return; + if (!isSelfTarget(event)) return; + if (isModifierKey(event)) return; + if (isPrintableKey(event)) return; + const state = store.getState(); + const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element; + if (!activeElement) return; + const { view, ...eventInit } = event; + const previousElement = previousElementRef == null ? void 0 : previousElementRef.current; + if (activeElement !== previousElement) { + activeElement.focus(); + } + if (!fireKeyboardEvent(activeElement, event.type, eventInit)) { + event.preventDefault(); + } + if (event.currentTarget.contains(activeElement)) { + event.stopPropagation(); + } + }); +} +function findFirstEnabledItemInTheLastRow(items) { + return findFirstEnabledItem( + flatten2DArray(reverseArray(groupItemsByRows(items))) + ); +} +function useScheduleFocus(store) { + const [scheduled, setScheduled] = (0, import_react12.useState)(false); + const schedule = (0, import_react12.useCallback)(() => setScheduled(true), []); + const activeItem = store.useState( + (state) => getEnabledItem(store, state.activeId) + ); + (0, import_react12.useEffect)(() => { + const activeElement = activeItem == null ? void 0 : activeItem.element; + if (!scheduled) return; + if (!activeElement) return; + setScheduled(false); + activeElement.focus({ preventScroll: true }); + }, [activeItem, scheduled]); + return schedule; +} +var useComposite = createHook( + function useComposite2({ + store, + composite = true, + focusOnMove = composite, + moveOnKeyPress = true, + ...props + }) { + const context = useCompositeProviderContext(); + store = store || context; + invariant( + store, + "Composite must receive a `store` prop or be wrapped in a CompositeProvider component." + ); + const ref = (0, import_react12.useRef)(null); + const previousElementRef = (0, import_react12.useRef)(null); + const scheduleFocus = useScheduleFocus(store); + const moves = store.useState("moves"); + const [, setBaseElement] = useTransactionState( + composite ? store.setBaseElement : null + ); + (0, import_react12.useEffect)(() => { + var _a; + if (!store) return; + if (!moves) return; + if (!composite) return; + if (!focusOnMove) return; + const { activeId: activeId2 } = store.getState(); + const itemElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + if (!itemElement) return; + focusIntoView(itemElement); + }, [store, moves, composite, focusOnMove]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!moves) return; + if (!composite) return; + const { baseElement, activeId: activeId2 } = store.getState(); + const isSelfAcive = activeId2 === null; + if (!isSelfAcive) return; + if (!baseElement) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (previousElement) { + fireBlurEvent(previousElement, { relatedTarget: baseElement }); + } + if (!hasFocus(baseElement)) { + baseElement.focus(); + } + }, [store, moves, composite]); + const activeId = store.useState("activeId"); + const virtualFocus = store.useState("virtualFocus"); + useSafeLayoutEffect(() => { + var _a; + if (!store) return; + if (!composite) return; + if (!virtualFocus) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (!previousElement) return; + const activeElement = (_a = getEnabledItem(store, activeId)) == null ? void 0 : _a.element; + const relatedTarget = activeElement || getActiveElement(previousElement); + if (relatedTarget === previousElement) return; + fireBlurEvent(previousElement, { relatedTarget }); + }, [store, activeId, virtualFocus, composite]); + const onKeyDownCapture = useKeyboardEventProxy( + store, + props.onKeyDownCapture, + previousElementRef + ); + const onKeyUpCapture = useKeyboardEventProxy( + store, + props.onKeyUpCapture, + previousElementRef + ); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (!virtualFocus2) return; + const previousActiveElement = event.relatedTarget; + const isSilentlyFocused = silentlyFocused(event.currentTarget); + if (isSelfTarget(event) && isSilentlyFocused) { + event.stopPropagation(); + previousElementRef.current = previousActiveElement; + } + }); + const onFocusProp = props.onFocus; + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (!composite) return; + if (!store) return; + const { relatedTarget } = event; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (virtualFocus2) { + if (isSelfTarget(event) && !isItem(store, relatedTarget)) { + queueMicrotask(scheduleFocus); + } + } else if (isSelfTarget(event)) { + store.setActiveId(null); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + var _a; + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState(); + if (!virtualFocus2) return; + const activeElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + const nextActiveElement = event.relatedTarget; + const nextActiveElementIsItem = isItem(store, nextActiveElement); + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (isSelfTarget(event) && nextActiveElementIsItem) { + if (nextActiveElement === activeElement) { + if (previousElement && previousElement !== nextActiveElement) { + fireBlurEvent(previousElement, event); + } + } else if (activeElement) { + fireBlurEvent(activeElement, event); + } else if (previousElement) { + fireBlurEvent(previousElement, event); + } + event.stopPropagation(); + } else { + const targetIsItem = isItem(store, event.target); + if (!targetIsItem && activeElement) { + fireBlurEvent(activeElement, event); + } + } + }); + const onKeyDownProp = props.onKeyDown; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + var _a; + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.nativeEvent.isComposing) return; + if (event.defaultPrevented) return; + if (!store) return; + if (!isSelfTarget(event)) return; + const { orientation, renderedItems, activeId: activeId2 } = store.getState(); + const activeItem = getEnabledItem(store, activeId2); + if ((_a = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a.isConnected) return; + const isVertical = orientation !== "horizontal"; + const isHorizontal = orientation !== "vertical"; + const grid = isGrid(renderedItems); + const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End"; + if (isHorizontalKey && isTextField(event.currentTarget)) return; + const up = () => { + if (grid) { + const item = findFirstEnabledItemInTheLastRow(renderedItems); + return item == null ? void 0 : item.id; + } + return store == null ? void 0 : store.last(); + }; + const keyMap = { + ArrowUp: (grid || isVertical) && up, + ArrowRight: (grid || isHorizontal) && store.first, + ArrowDown: (grid || isVertical) && store.first, + ArrowLeft: (grid || isHorizontal) && store.last, + Home: store.first, + End: store.last, + PageUp: store.first, + PageDown: store.last + }; + const action = keyMap[event.key]; + if (action) { + const id = action(); + if (id !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(id); + } + } + }); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CompositeContextProvider, { value: store, children: element }), + [store] + ); + const activeDescendant = store.useState((state) => { + var _a; + if (!store) return; + if (!composite) return; + if (!state.virtualFocus) return; + return (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.id; + }); + props = { + "aria-activedescendant": activeDescendant, + ...props, + ref: useMergeRefs(ref, setBaseElement, props.ref), + onKeyDownCapture, + onKeyUpCapture, + onFocusCapture, + onFocus, + onBlurCapture, + onKeyDown + }; + const focusable = store.useState( + (state) => composite && (state.virtualFocus || state.activeId === null) + ); + props = useFocusable({ focusable, ...props }); + return props; + } +); +var Composite5 = forwardRef22(function Composite22(props) { + const htmlProps = useComposite(props); + return createElement3(TagName5, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/LVDQFHCH.js +var ctx3 = createStoreContext(); +var useDisclosureContext = ctx3.useContext; +var useDisclosureScopedContext = ctx3.useScopedContext; +var useDisclosureProviderContext = ctx3.useProviderContext; +var DisclosureContextProvider = ctx3.ContextProvider; +var DisclosureScopedContextProvider = ctx3.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/A62MDFCW.js +var import_react13 = __toESM(require_react(), 1); +var ctx4 = createStoreContext( + [DisclosureContextProvider], + [DisclosureScopedContextProvider] +); +var useDialogContext = ctx4.useContext; +var useDialogScopedContext = ctx4.useScopedContext; +var useDialogProviderContext = ctx4.useProviderContext; +var DialogContextProvider = ctx4.ContextProvider; +var DialogScopedContextProvider = ctx4.ScopedContextProvider; +var DialogHeadingContext = (0, import_react13.createContext)(void 0); +var DialogDescriptionContext = (0, import_react13.createContext)(void 0); + +// node_modules/@ariakit/react-core/esm/__chunks/6B3RXHKP.js +var import_react14 = __toESM(require_react(), 1); +var import_react_dom = __toESM(require_react_dom(), 1); +var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); +var TagName6 = "div"; +function afterTimeout(timeoutMs, cb) { + const timeoutId = setTimeout(cb, timeoutMs); + return () => clearTimeout(timeoutId); +} +function afterPaint2(cb) { + let raf = requestAnimationFrame(() => { + raf = requestAnimationFrame(cb); + }); + return () => cancelAnimationFrame(raf); +} +function parseCSSTime(...times) { + return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => { + const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3; + const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier; + if (currentTime > longestTime) return currentTime; + return longestTime; + }, 0); +} +function isHidden(mounted, hidden, alwaysVisible) { + return !alwaysVisible && hidden !== false && (!mounted || !!hidden); +} +var useDisclosureContent = createHook(function useDisclosureContent2({ store, alwaysVisible, ...props }) { + const context = useDisclosureProviderContext(); + store = store || context; + invariant( + store, + "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component." + ); + const ref = (0, import_react14.useRef)(null); + const id = useId3(props.id); + const [transition, setTransition] = (0, import_react14.useState)(null); + const open = store.useState("open"); + const mounted = store.useState("mounted"); + const animated = store.useState("animated"); + const contentElement = store.useState("contentElement"); + const otherElement = useStoreState(store.disclosure, "contentElement"); + useSafeLayoutEffect(() => { + if (!ref.current) return; + store == null ? void 0 : store.setContentElement(ref.current); + }, [store]); + useSafeLayoutEffect(() => { + let previousAnimated; + store == null ? void 0 : store.setState("animated", (animated2) => { + previousAnimated = animated2; + return true; + }); + return () => { + if (previousAnimated === void 0) return; + store == null ? void 0 : store.setState("animated", previousAnimated); + }; + }, [store]); + useSafeLayoutEffect(() => { + if (!animated) return; + if (!(contentElement == null ? void 0 : contentElement.isConnected)) { + setTransition(null); + return; + } + return afterPaint2(() => { + setTransition(open ? "enter" : mounted ? "leave" : null); + }); + }, [animated, contentElement, open, mounted]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!animated) return; + if (!transition) return; + if (!contentElement) return; + const stopAnimation = () => store == null ? void 0 : store.setState("animating", false); + const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation); + if (transition === "leave" && open) return; + if (transition === "enter" && !open) return; + if (typeof animated === "number") { + const timeout2 = animated; + return afterTimeout(timeout2, stopAnimationSync); + } + const { + transitionDuration, + animationDuration, + transitionDelay, + animationDelay + } = getComputedStyle(contentElement); + const { + transitionDuration: transitionDuration2 = "0", + animationDuration: animationDuration2 = "0", + transitionDelay: transitionDelay2 = "0", + animationDelay: animationDelay2 = "0" + } = otherElement ? getComputedStyle(otherElement) : {}; + const delay = parseCSSTime( + transitionDelay, + animationDelay, + transitionDelay2, + animationDelay2 + ); + const duration = parseCSSTime( + transitionDuration, + animationDuration, + transitionDuration2, + animationDuration2 + ); + const timeout = delay + duration; + if (!timeout) { + if (transition === "enter") { + store.setState("animated", false); + } + stopAnimation(); + return; + } + const frameRate = 1e3 / 60; + const maxTimeout = Math.max(timeout - frameRate, 0); + return afterTimeout(maxTimeout, stopAnimationSync); + }, [store, animated, contentElement, otherElement, open, transition]); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(DialogScopedContextProvider, { value: store, children: element }), + [store] + ); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const styleProp = props.style; + const style = (0, import_react14.useMemo)(() => { + if (hidden) { + return { ...styleProp, display: "none" }; + } + return styleProp; + }, [hidden, styleProp]); + props = { + id, + "data-open": open || void 0, + "data-enter": transition === "enter" || void 0, + "data-leave": transition === "leave" || void 0, + hidden, + ...props, + ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref), + style + }; + return removeUndefinedValues(props); +}); +var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) { + const htmlProps = useDisclosureContent(props); + return createElement3(TagName6, htmlProps); +}); +var DisclosureContent = forwardRef22(function DisclosureContent2({ + unmountOnHide, + ...props +}) { + const context = useDisclosureProviderContext(); + const store = props.store || context; + const mounted = useStoreState( + store, + (state) => !unmountOnHide || (state == null ? void 0 : state.mounted) + ); + if (mounted === false) return null; + return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(DisclosureContentImpl, { ...props }); +}); + +// node_modules/@ariakit/core/esm/__chunks/75BJEVSH.js +function createDisclosureStore(props = {}) { + const store = mergeStore( + props.store, + omit22(props.disclosure, ["contentElement", "disclosureElement"]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const open = defaultValue( + props.open, + syncState == null ? void 0 : syncState.open, + props.defaultOpen, + false + ); + const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false); + const initialState = { + open, + animated, + animating: !!animated && open, + mounted: open, + contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null), + disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null) + }; + const disclosure = createStore(initialState, store); + setup( + disclosure, + () => sync(disclosure, ["animated", "animating"], (state) => { + if (state.animated) return; + disclosure.setState("animating", false); + }) + ); + setup( + disclosure, + () => subscribe(disclosure, ["open"], () => { + if (!disclosure.getState().animated) return; + disclosure.setState("animating", true); + }) + ); + setup( + disclosure, + () => sync(disclosure, ["open", "animating"], (state) => { + disclosure.setState("mounted", state.open || state.animating); + }) + ); + return { + ...disclosure, + disclosure: props.disclosure, + setOpen: (value) => disclosure.setState("open", value), + show: () => disclosure.setState("open", true), + hide: () => disclosure.setState("open", false), + toggle: () => disclosure.setState("open", (open2) => !open2), + stopAnimation: () => disclosure.setState("animating", false), + setContentElement: (value) => disclosure.setState("contentElement", value), + setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WLZ6H5FH.js +function useDisclosureStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store, props.disclosure]); + useStoreProps(store, props, "open", "setOpen"); + useStoreProps(store, props, "mounted", "setMounted"); + useStoreProps(store, props, "animated"); + return Object.assign(store, { disclosure: props.disclosure }); +} + +// node_modules/@ariakit/react-core/esm/__chunks/JMU4N4M5.js +var ctx5 = createStoreContext( + [DialogContextProvider], + [DialogScopedContextProvider] +); +var usePopoverContext = ctx5.useContext; +var usePopoverScopedContext = ctx5.useScopedContext; +var usePopoverProviderContext = ctx5.useProviderContext; +var PopoverContextProvider = ctx5.ContextProvider; +var PopoverScopedContextProvider = ctx5.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/__chunks/N5XGANPW.js +function getCommonParent(items) { + var _a; + const firstItem = items.find((item) => !!item.element); + const lastItem = [...items].reverse().find((item) => !!item.element); + let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement; + while (parentElement && (lastItem == null ? void 0 : lastItem.element)) { + const parent = parentElement; + if (lastItem && parent.contains(lastItem.element)) { + return parentElement; + } + parentElement = parentElement.parentElement; + } + return getDocument(parentElement).body; +} +function getPrivateStore(store) { + return store == null ? void 0 : store.__unstablePrivateStore; +} +function createCollectionStore(props = {}) { + var _a; + throwOnConflictingProps(props, props.store); + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const items = defaultValue( + props.items, + syncState == null ? void 0 : syncState.items, + props.defaultItems, + [] + ); + const itemsMap = new Map(items.map((item) => [item.id, item])); + const initialState = { + items, + renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, []) + }; + const syncPrivateStore = getPrivateStore(props.store); + const privateStore = createStore( + { items, renderedItems: initialState.renderedItems }, + syncPrivateStore + ); + const collection = createStore(initialState, props.store); + const sortItems = (renderedItems) => { + const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element); + privateStore.setState("renderedItems", sortedItems); + collection.setState("renderedItems", sortedItems); + }; + setup(collection, () => init(privateStore)); + setup(privateStore, () => { + return batch(privateStore, ["items"], (state) => { + collection.setState("items", state.items); + }); + }); + setup(privateStore, () => { + return batch(privateStore, ["renderedItems"], (state) => { + let firstRun = true; + let raf = requestAnimationFrame(() => { + const { renderedItems } = collection.getState(); + if (state.renderedItems === renderedItems) return; + sortItems(state.renderedItems); + }); + if (typeof IntersectionObserver !== "function") { + return () => cancelAnimationFrame(raf); + } + const ioCallback = () => { + if (firstRun) { + firstRun = false; + return; + } + cancelAnimationFrame(raf); + raf = requestAnimationFrame(() => sortItems(state.renderedItems)); + }; + const root = getCommonParent(state.renderedItems); + const observer = new IntersectionObserver(ioCallback, { root }); + for (const item of state.renderedItems) { + if (!item.element) continue; + observer.observe(item.element); + } + return () => { + cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + }); + const mergeItem = (item, setItems, canDeleteFromMap = false) => { + let prevItem; + setItems((items2) => { + const index = items2.findIndex(({ id }) => id === item.id); + const nextItems = items2.slice(); + if (index !== -1) { + prevItem = items2[index]; + const nextItem = { ...prevItem, ...item }; + nextItems[index] = nextItem; + itemsMap.set(item.id, nextItem); + } else { + nextItems.push(item); + itemsMap.set(item.id, item); + } + return nextItems; + }); + const unmergeItem = () => { + setItems((items2) => { + if (!prevItem) { + if (canDeleteFromMap) { + itemsMap.delete(item.id); + } + return items2.filter(({ id }) => id !== item.id); + } + const index = items2.findIndex(({ id }) => id === item.id); + if (index === -1) return items2; + const nextItems = items2.slice(); + nextItems[index] = prevItem; + itemsMap.set(item.id, prevItem); + return nextItems; + }); + }; + return unmergeItem; + }; + const registerItem = (item) => mergeItem( + item, + (getItems) => privateStore.setState("items", getItems), + true + ); + return { + ...collection, + registerItem, + renderItem: (item) => chain( + registerItem(item), + mergeItem( + item, + (getItems) => privateStore.setState("renderedItems", getItems) + ) + ), + item: (id) => { + if (!id) return null; + let item = itemsMap.get(id); + if (!item) { + const { items: items2 } = privateStore.getState(); + item = items2.find((item2) => item2.id === id); + if (item) { + itemsMap.set(id, item); + } + } + return item || null; + }, + // @ts-expect-error Internal + __unstablePrivateStore: privateStore + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GVAFFF2B.js +function useCollectionStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store]); + useStoreProps(store, props, "items", "setItems"); + return store; +} + +// node_modules/@ariakit/core/esm/__chunks/RVTIKFRL.js +var NULL_ITEM = { id: null }; +function findFirstEnabledItem2(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItems(items, excludeId) { + return items.filter((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getItemsInRow(items, rowId) { + return items.filter((item) => item.rowId === rowId); +} +function flipItems(items, activeId, shouldInsertNullItem = false) { + const index = items.findIndex((item) => item.id === activeId); + return [ + ...items.slice(index + 1), + ...shouldInsertNullItem ? [NULL_ITEM] : [], + ...items.slice(0, index) + ]; +} +function groupItemsByRows2(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function getMaxRowLength(array) { + let maxLength = 0; + for (const { length } of array) { + if (length > maxLength) { + maxLength = length; + } + } + return maxLength; +} +function createEmptyItem(rowId) { + return { + id: "__EMPTY_ITEM__", + disabled: true, + rowId + }; +} +function normalizeRows(rows, activeId, focusShift) { + const maxLength = getMaxRowLength(rows); + for (const row of rows) { + for (let i2 = 0; i2 < maxLength; i2 += 1) { + const item = row[i2]; + if (!item || focusShift && item.disabled) { + const isFirst = i2 === 0; + const previousItem = isFirst && focusShift ? findFirstEnabledItem2(row) : row[i2 - 1]; + row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId); + } + } + } + return rows; +} +function verticalizeItems(items) { + const rows = groupItemsByRows2(items); + const maxLength = getMaxRowLength(rows); + const verticalized = []; + for (let i2 = 0; i2 < maxLength; i2 += 1) { + for (const row of rows) { + const item = row[i2]; + if (item) { + verticalized.push({ + ...item, + // If there's no rowId, it means that it's not a grid composite, but + // a single row instead. So, instead of verticalizing it, that is, + // assigning a different rowId based on the column index, we keep it + // undefined so they will be part of the same row. This is useful + // when using up/down on one-dimensional composites. + rowId: item.rowId ? `${i2}` : void 0 + }); + } + } + } + return verticalized; +} +function createCompositeStore(props = {}) { + var _a; + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const collection = createCollectionStore(props); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId + ); + const initialState = { + ...collection.getState(), + id: defaultValue( + props.id, + syncState == null ? void 0 : syncState.id, + `id-${Math.random().toString(36).slice(2, 8)}` + ), + activeId, + baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null), + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + activeId === null + ), + moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "both" + ), + rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + false + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false), + focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false) + }; + const composite = createStore(initialState, collection, props.store); + setup( + composite, + () => sync(composite, ["renderedItems", "activeId"], (state) => { + composite.setState("activeId", (activeId2) => { + var _a2; + if (activeId2 !== void 0) return activeId2; + return (_a2 = findFirstEnabledItem2(state.renderedItems)) == null ? void 0 : _a2.id; + }); + }) + ); + const getNextId = (direction = "next", options = {}) => { + var _a2, _b; + const defaultState = composite.getState(); + const { + skip = 0, + activeId: activeId2 = defaultState.activeId, + focusShift = defaultState.focusShift, + focusLoop = defaultState.focusLoop, + focusWrap = defaultState.focusWrap, + includesBaseElement = defaultState.includesBaseElement, + renderedItems = defaultState.renderedItems, + rtl = defaultState.rtl + } = options; + const isVerticalDirection = direction === "up" || direction === "down"; + const isNextDirection = direction === "next" || direction === "down"; + const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection; + const canShift = focusShift && !skip; + let items = !isVerticalDirection ? renderedItems : flatten2DArray( + normalizeRows(groupItemsByRows2(renderedItems), activeId2, canShift) + ); + items = canReverse ? reverseArray(items) : items; + items = isVerticalDirection ? verticalizeItems(items) : items; + if (activeId2 == null) { + return (_a2 = findFirstEnabledItem2(items)) == null ? void 0 : _a2.id; + } + const activeItem = items.find((item) => item.id === activeId2); + if (!activeItem) { + return (_b = findFirstEnabledItem2(items)) == null ? void 0 : _b.id; + } + const isGrid2 = items.some((item) => item.rowId); + const activeIndex = items.indexOf(activeItem); + const nextItems = items.slice(activeIndex + 1); + const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId); + if (skip) { + const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2); + const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one. + nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1]; + return nextItem2 == null ? void 0 : nextItem2.id; + } + const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"); + const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical"); + const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false; + if (canLoop) { + const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId); + const sortedItems = flipItems(loopItems, activeId2, hasNullItem); + const nextItem2 = findFirstEnabledItem2(sortedItems, activeId2); + return nextItem2 == null ? void 0 : nextItem2.id; + } + if (canWrap) { + const nextItem2 = findFirstEnabledItem2( + // We can use nextItems, which contains all the next items, including + // items from other rows, to wrap between rows. However, if there is a + // null item (the composite container), we'll only use the next items in + // the row. So moving next from the last item will focus on the + // composite container. On grid composites, horizontal navigation never + // focuses on the composite container, only vertical. + hasNullItem ? nextItemsInRow : nextItems, + activeId2 + ); + const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id; + return nextId; + } + const nextItem = findFirstEnabledItem2(nextItemsInRow, activeId2); + if (!nextItem && hasNullItem) { + return null; + } + return nextItem == null ? void 0 : nextItem.id; + }; + return { + ...collection, + ...composite, + setBaseElement: (element) => composite.setState("baseElement", element), + setActiveId: (id) => composite.setState("activeId", id), + move: (id) => { + if (id === void 0) return; + composite.setState("activeId", id); + composite.setState("moves", (moves) => moves + 1); + }, + first: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(composite.getState().renderedItems)) == null ? void 0 : _a2.id; + }, + last: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id; + }, + next: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("next", options); + }, + previous: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("previous", options); + }, + down: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("down", options); + }, + up: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("up", options); + } + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/IQYAUKXT.js +function useCompositeStoreOptions(props) { + const id = useId3(props.id); + return { id, ...props }; +} +function useCompositeStoreProps(store, update2, props) { + store = useCollectionStoreProps(store, update2, props); + useStoreProps(store, props, "activeId", "setActiveId"); + useStoreProps(store, props, "includesBaseElement"); + useStoreProps(store, props, "virtualFocus"); + useStoreProps(store, props, "orientation"); + useStoreProps(store, props, "rtl"); + useStoreProps(store, props, "focusLoop"); + useStoreProps(store, props, "focusWrap"); + useStoreProps(store, props, "focusShift"); + return store; +} + +// node_modules/@ariakit/react-core/esm/__chunks/CVCFNOHX.js +var import_react15 = __toESM(require_react(), 1); +var ComboboxListRoleContext = (0, import_react15.createContext)( + void 0 +); +var ctx6 = createStoreContext( + [PopoverContextProvider, CompositeContextProvider], + [PopoverScopedContextProvider, CompositeScopedContextProvider] +); +var useComboboxContext = ctx6.useContext; +var useComboboxScopedContext = ctx6.useScopedContext; +var useComboboxProviderContext = ctx6.useProviderContext; +var ComboboxContextProvider = ctx6.ContextProvider; +var ComboboxScopedContextProvider = ctx6.ScopedContextProvider; +var ComboboxItemValueContext = (0, import_react15.createContext)( + void 0 +); +var ComboboxItemCheckedContext = (0, import_react15.createContext)(false); + +// node_modules/@ariakit/core/esm/__chunks/KMAUV3TY.js +function createDialogStore(props = {}) { + return createDisclosureStore(props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4NYSH4UO.js +function useDialogStoreProps(store, update2, props) { + return useDisclosureStoreProps(store, update2, props); +} + +// node_modules/@ariakit/core/esm/__chunks/BFGNM53A.js +function createPopoverStore({ + popover: otherPopover, + ...props +} = {}) { + const store = mergeStore( + props.store, + omit22(otherPopover, [ + "arrowElement", + "anchorElement", + "contentElement", + "popoverElement", + "disclosureElement" + ]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const dialog = createDialogStore({ ...props, store }); + const placement = defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom" + ); + const initialState = { + ...dialog.getState(), + placement, + currentPlacement: placement, + anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null), + popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null), + arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null), + rendered: /* @__PURE__ */ Symbol("rendered") + }; + const popover = createStore(initialState, dialog, store); + return { + ...dialog, + ...popover, + setAnchorElement: (element) => popover.setState("anchorElement", element), + setPopoverElement: (element) => popover.setState("popoverElement", element), + setArrowElement: (element) => popover.setState("arrowElement", element), + render: () => popover.setState("rendered", /* @__PURE__ */ Symbol("rendered")) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/B6FLPFJM.js +function usePopoverStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.popover]); + useStoreProps(store, props, "placement"); + return useDialogStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4POTBZ2J.js +var TagName7 = "div"; +var usePopoverAnchor = createHook( + function usePopoverAnchor2({ store, ...props }) { + const context = usePopoverProviderContext(); + store = store || context; + props = { + ...props, + ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref) + }; + return props; + } +); +var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) { + const htmlProps = usePopoverAnchor(props); + return createElement3(TagName7, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/X6LNAU2F.js +var import_react16 = __toESM(require_react(), 1); +var TagName8 = "div"; +function getMouseDestination(event) { + const relatedTarget = event.relatedTarget; + if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) { + return relatedTarget; + } + return null; +} +function hoveringInside(event) { + const nextElement = getMouseDestination(event); + if (!nextElement) return false; + return contains(event.currentTarget, nextElement); +} +var symbol2 = /* @__PURE__ */ Symbol("composite-hover"); +function movingToAnotherItem(event) { + let dest = getMouseDestination(event); + if (!dest) return false; + do { + if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true; + dest = dest.parentElement; + } while (dest); + return false; +} +var useCompositeHover = createHook( + function useCompositeHover2({ + store, + focusOnHover = true, + blurOnHoverEnd = !!focusOnHover, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + invariant( + store, + "CompositeHover must be wrapped in a Composite component." + ); + const isMouseMoving = useIsMouseMoving(); + const onMouseMoveProp = props.onMouseMove; + const focusOnHoverProp = useBooleanEvent(focusOnHover); + const onMouseMove = useEvent((event) => { + onMouseMoveProp == null ? void 0 : onMouseMoveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (!focusOnHoverProp(event)) return; + if (!hasFocusWithin(event.currentTarget)) { + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (baseElement && !hasFocus(baseElement)) { + baseElement.focus(); + } + } + store == null ? void 0 : store.setActiveId(event.currentTarget.id); + }); + const onMouseLeaveProp = props.onMouseLeave; + const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd); + const onMouseLeave = useEvent((event) => { + var _a; + onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (hoveringInside(event)) return; + if (movingToAnotherItem(event)) return; + if (!focusOnHoverProp(event)) return; + if (!blurOnHoverEndProp(event)) return; + store == null ? void 0 : store.setActiveId(null); + (_a = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a.focus(); + }); + const ref = (0, import_react16.useCallback)((element) => { + if (!element) return; + element[symbol2] = true; + }, []); + props = { + ...props, + ref: useMergeRefs(ref, props.ref), + onMouseMove, + onMouseLeave + }; + return removeUndefinedValues(props); + } +); +var CompositeHover = memo22( + forwardRef22(function CompositeHover2(props) { + const htmlProps = useCompositeHover(props); + return createElement3(TagName8, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox.js +var import_react17 = __toESM(require_react(), 1); +var TagName9 = "input"; +function isFirstItemAutoSelected(items, activeValue, autoSelect) { + if (!autoSelect) return false; + const firstItem = items.find((item) => !item.disabled && item.value); + return (firstItem == null ? void 0 : firstItem.value) === activeValue; +} +function hasCompletionString(value, activeValue) { + if (!activeValue) return false; + if (value == null) return false; + value = normalizeString(value); + return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0; +} +function isInputEvent(event) { + return event.type === "input"; +} +function isAriaAutoCompleteValue(value) { + return value === "inline" || value === "list" || value === "both" || value === "none"; +} +function getDefaultAutoSelectId(items) { + const item = items.find((item2) => { + var _a; + if (item2.disabled) return false; + return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab"; + }); + return item == null ? void 0 : item.id; +} +var useCombobox = createHook( + function useCombobox2({ + store, + focusable = true, + autoSelect: autoSelectProp = false, + getAutoSelectId, + setValueOnChange, + showMinLength = 0, + showOnChange, + showOnMouseDown, + showOnClick = showOnMouseDown, + showOnKeyDown, + showOnKeyPress = showOnKeyDown, + blurActiveItemOnClick, + setValueOnClick = true, + moveOnKeyPress = true, + autoComplete = "list", + ...props + }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react17.useRef)(null); + const [valueUpdated, forceValueUpdate] = useForceUpdate(); + const canAutoSelectRef = (0, import_react17.useRef)(false); + const composingRef = (0, import_react17.useRef)(false); + const autoSelect = store.useState( + (state) => state.virtualFocus && autoSelectProp + ); + const inline = autoComplete === "inline" || autoComplete === "both"; + const [canInline, setCanInline] = (0, import_react17.useState)(inline); + useUpdateLayoutEffect(() => { + if (!inline) return; + setCanInline(true); + }, [inline]); + const storeValue = store.useState("value"); + const prevSelectedValueRef = (0, import_react17.useRef)(void 0); + (0, import_react17.useEffect)(() => { + return sync(store, ["selectedValue", "activeId"], (_, prev) => { + prevSelectedValueRef.current = prev.selectedValue; + }); + }, []); + const inlineActiveValue = store.useState((state) => { + var _a; + if (!inline) return; + if (!canInline) return; + if (state.activeValue && Array.isArray(state.selectedValue)) { + if (state.selectedValue.includes(state.activeValue)) return; + if ((_a = prevSelectedValueRef.current) == null ? void 0 : _a.includes(state.activeValue)) return; + } + return state.activeValue; + }); + const items = store.useState("renderedItems"); + const open = store.useState("open"); + const contentElement = store.useState("contentElement"); + const value = (0, import_react17.useMemo)(() => { + if (!inline) return storeValue; + if (!canInline) return storeValue; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (firstItemAutoSelected) { + if (hasCompletionString(storeValue, inlineActiveValue)) { + const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || ""; + return storeValue + slice; + } + return storeValue; + } + return inlineActiveValue || storeValue; + }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]); + (0, import_react17.useEffect)(() => { + const element = ref.current; + if (!element) return; + const onCompositeItemMove = () => setCanInline(true); + element.addEventListener("combobox-item-move", onCompositeItemMove); + return () => { + element.removeEventListener("combobox-item-move", onCompositeItemMove); + }; + }, []); + (0, import_react17.useEffect)(() => { + if (!inline) return; + if (!canInline) return; + if (!inlineActiveValue) return; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (!firstItemAutoSelected) return; + if (!hasCompletionString(storeValue, inlineActiveValue)) return; + let cleanup = noop; + queueMicrotask(() => { + const element = ref.current; + if (!element) return; + const { start: prevStart, end: prevEnd } = getTextboxSelection(element); + const nextStart = storeValue.length; + const nextEnd = inlineActiveValue.length; + setSelectionRange(element, nextStart, nextEnd); + cleanup = () => { + if (!hasFocus(element)) return; + const { start, end } = getTextboxSelection(element); + if (start !== nextStart) return; + if (end !== nextEnd) return; + setSelectionRange(element, prevStart, prevEnd); + }; + }); + return () => cleanup(); + }, [ + valueUpdated, + inline, + canInline, + inlineActiveValue, + items, + autoSelect, + storeValue + ]); + const scrollingElementRef = (0, import_react17.useRef)(null); + const getAutoSelectIdProp = useEvent(getAutoSelectId); + const autoSelectIdRef = (0, import_react17.useRef)(null); + (0, import_react17.useEffect)(() => { + if (!open) return; + if (!contentElement) return; + const scrollingElement = getScrollingElement(contentElement); + if (!scrollingElement) return; + scrollingElementRef.current = scrollingElement; + const onUserScroll = () => { + canAutoSelectRef.current = false; + }; + const onScroll = () => { + if (!store) return; + if (!canAutoSelectRef.current) return; + const { activeId } = store.getState(); + if (activeId === null) return; + if (activeId === autoSelectIdRef.current) return; + canAutoSelectRef.current = false; + }; + const options = { passive: true, capture: true }; + scrollingElement.addEventListener("wheel", onUserScroll, options); + scrollingElement.addEventListener("touchmove", onUserScroll, options); + scrollingElement.addEventListener("scroll", onScroll, options); + return () => { + scrollingElement.removeEventListener("wheel", onUserScroll, true); + scrollingElement.removeEventListener("touchmove", onUserScroll, true); + scrollingElement.removeEventListener("scroll", onScroll, true); + }; + }, [open, contentElement, store]); + useSafeLayoutEffect(() => { + if (!storeValue) return; + if (composingRef.current) return; + canAutoSelectRef.current = true; + }, [storeValue]); + useSafeLayoutEffect(() => { + if (autoSelect !== "always" && open) return; + canAutoSelectRef.current = open; + }, [autoSelect, open]); + const resetValueOnSelect = store.useState("resetValueOnSelect"); + useUpdateEffect(() => { + var _a, _b; + const canAutoSelect = canAutoSelectRef.current; + if (!store) return; + if (!open) return; + if (!canAutoSelect && !resetValueOnSelect) return; + const { baseElement, contentElement: contentElement2, activeId } = store.getState(); + if (baseElement && !hasFocus(baseElement)) return; + if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) { + const observer = new MutationObserver(forceValueUpdate); + observer.observe(contentElement2, { attributeFilter: ["data-placing"] }); + return () => observer.disconnect(); + } + if (autoSelect && canAutoSelect) { + const userAutoSelectId = getAutoSelectIdProp(items); + const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a = getDefaultAutoSelectId(items)) != null ? _a : store.first(); + autoSelectIdRef.current = autoSelectId; + store.move(autoSelectId != null ? autoSelectId : null); + } else { + const element = (_b = store.item(activeId || store.first())) == null ? void 0 : _b.element; + if (element && "scrollIntoView" in element) { + element.scrollIntoView({ block: "nearest", inline: "nearest" }); + } + } + return; + }, [ + store, + open, + valueUpdated, + storeValue, + autoSelect, + resetValueOnSelect, + getAutoSelectIdProp, + items + ]); + (0, import_react17.useEffect)(() => { + if (!inline) return; + const combobox = ref.current; + if (!combobox) return; + const elements = [combobox, contentElement].filter( + (value2) => !!value2 + ); + const onBlur2 = (event) => { + if (elements.every((el) => isFocusEventOutside(event, el))) { + store == null ? void 0 : store.setValue(value); + } + }; + for (const element of elements) { + element.addEventListener("focusout", onBlur2); + } + return () => { + for (const element of elements) { + element.removeEventListener("focusout", onBlur2); + } + }; + }, [inline, contentElement, store, value]); + const canShow = (event) => { + const currentTarget = event.currentTarget; + return currentTarget.value.length >= showMinLength; + }; + const onChangeProp = props.onChange; + const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow); + const setValueOnChangeProp = useBooleanEvent( + // If the combobox is combined with tags, the value will be set by the tag + // input component. + setValueOnChange != null ? setValueOnChange : !store.tag + ); + const onChange = useEvent((event) => { + onChangeProp == null ? void 0 : onChangeProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const currentTarget = event.currentTarget; + const { value: value2, selectionStart, selectionEnd } = currentTarget; + const nativeEvent = event.nativeEvent; + canAutoSelectRef.current = true; + if (isInputEvent(nativeEvent)) { + if (nativeEvent.isComposing) { + canAutoSelectRef.current = false; + composingRef.current = true; + } + if (inline) { + const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText"; + const caretAtEnd = selectionStart === value2.length; + setCanInline(textInserted && caretAtEnd); + } + } + if (setValueOnChangeProp(event)) { + const isSameValue = value2 === store.getState().value; + store.setValue(value2); + queueMicrotask(() => { + setSelectionRange(currentTarget, selectionStart, selectionEnd); + }); + if (inline && autoSelect && isSameValue) { + forceValueUpdate(); + } + } + if (showOnChangeProp(event)) { + store.show(); + } + if (!autoSelect || !canAutoSelectRef.current) { + store.setActiveId(null); + } + }); + const onCompositionEndProp = props.onCompositionEnd; + const onCompositionEnd = useEvent((event) => { + canAutoSelectRef.current = true; + composingRef.current = false; + onCompositionEndProp == null ? void 0 : onCompositionEndProp(event); + if (event.defaultPrevented) return; + if (!autoSelect) return; + forceValueUpdate(); + }); + const onMouseDownProp = props.onMouseDown; + const blurActiveItemOnClickProp = useBooleanEvent( + blurActiveItemOnClick != null ? blurActiveItemOnClick : (() => !!(store == null ? void 0 : store.getState().includesBaseElement)) + ); + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow); + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (event.button) return; + if (event.ctrlKey) return; + if (!store) return; + if (blurActiveItemOnClickProp(event)) { + store.setActiveId(null); + } + if (setValueOnClickProp(event)) { + store.setValue(value); + } + if (showOnClickProp(event)) { + queueBeforeEvent(event.currentTarget, "mouseup", store.show); + } + }); + const onKeyDownProp = props.onKeyDown; + const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (!event.repeat) { + canAutoSelectRef.current = false; + } + if (event.defaultPrevented) return; + if (event.ctrlKey) return; + if (event.altKey) return; + if (event.shiftKey) return; + if (event.metaKey) return; + if (!store) return; + const { open: open2 } = store.getState(); + if (open2) return; + if (event.key === "ArrowUp" || event.key === "ArrowDown") { + if (showOnKeyPressProp(event)) { + event.preventDefault(); + store.show(); + } + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + canAutoSelectRef.current = false; + onBlurProp == null ? void 0 : onBlurProp(event); + if (event.defaultPrevented) return; + }); + const id = useId3(props.id); + const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0; + const isActiveItem = store.useState((state) => state.activeId === null); + props = { + id, + role: "combobox", + "aria-autocomplete": ariaAutoComplete, + "aria-haspopup": getPopupRole(contentElement, "listbox"), + "aria-expanded": open, + "aria-controls": contentElement == null ? void 0 : contentElement.id, + "data-active-item": isActiveItem || void 0, + value, + ...props, + ref: useMergeRefs(ref, props.ref), + onChange, + onCompositionEnd, + onMouseDown, + onKeyDown, + onBlur + }; + props = useComposite({ + store, + focusable, + ...props, + // Enable inline autocomplete when the user moves from the combobox input + // to an item. + moveOnKeyPress: (event) => { + if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false; + if (inline) setCanInline(true); + return true; + } + }); + props = usePopoverAnchor({ store, ...props }); + return { autoComplete: "off", ...props }; + } +); +var Combobox = forwardRef22(function Combobox2(props) { + const htmlProps = useCombobox(props); + return createElement3(TagName9, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/IBXZ2LQC.js +var import_react18 = __toESM(require_react(), 1); +var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); +var TagName10 = "div"; +function isSelected(storeValue, itemValue) { + if (itemValue == null) return; + if (storeValue == null) return false; + if (Array.isArray(storeValue)) { + return storeValue.includes(itemValue); + } + return storeValue === itemValue; +} +function getItemRole(popupRole) { + var _a; + const itemRoleByPopupRole = { + menu: "menuitem", + listbox: "option", + tree: "treeitem" + }; + const key = popupRole; + return (_a = itemRoleByPopupRole[key]) != null ? _a : "option"; +} +var useComboboxItem = createHook( + function useComboboxItem2({ + store, + value, + hideOnClick, + setValueOnClick, + selectValueOnClick = true, + resetValueOnSelect, + focusOnHover = false, + moveOnKeyPress = true, + getItem: getItemProp, + ...props + }) { + var _a; + const context = useComboboxScopedContext(); + store = store || context; + invariant( + store, + "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component." + ); + const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, { + resetValueOnSelectState: "resetValueOnSelect", + multiSelectable(state) { + return Array.isArray(state.selectedValue); + }, + selected(state) { + return isSelected(state.selectedValue, value); + } + }); + const getItem = (0, import_react18.useCallback)( + (item) => { + const nextItem = { ...item, value }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [value, getItemProp] + ); + setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable; + hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable; + const onClickProp = props.onClick; + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const selectValueOnClickProp = useBooleanEvent(selectValueOnClick); + const resetValueOnSelectProp = useBooleanEvent( + (_a = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a : multiSelectable + ); + const hideOnClickProp = useBooleanEvent(hideOnClick); + const onClick = useEvent((event) => { + onClickProp == null ? void 0 : onClickProp(event); + if (event.defaultPrevented) return; + if (isDownloading(event)) return; + if (isOpeningInNewTab(event)) return; + if (value != null) { + if (selectValueOnClickProp(event)) { + if (resetValueOnSelectProp(event)) { + store == null ? void 0 : store.resetValue(); + } + store == null ? void 0 : store.setSelectedValue((prevValue) => { + if (!Array.isArray(prevValue)) return value; + if (prevValue.includes(value)) { + return prevValue.filter((v2) => v2 !== value); + } + return [...prevValue, value]; + }); + } + if (setValueOnClickProp(event)) { + store == null ? void 0 : store.setValue(value); + } + } + if (hideOnClickProp(event)) { + store == null ? void 0 : store.hide(); + } + }); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (!baseElement) return; + if (hasFocus(baseElement)) return; + const printable = event.key.length === 1; + if (printable || event.key === "Backspace" || event.key === "Delete") { + queueMicrotask(() => baseElement.focus()); + if (isTextField(baseElement)) { + store == null ? void 0 : store.setValue(baseElement.value); + } + } + }); + if (multiSelectable && selected != null) { + props = { + "aria-selected": selected, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }), + [value, selected] + ); + const popupRole = (0, import_react18.useContext)(ComboboxListRoleContext); + props = { + role: getItemRole(popupRole), + children: value, + ...props, + onClick, + onKeyDown + }; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + props = useCompositeItem({ + store, + ...props, + getItem, + // Dispatch a custom event on the combobox input when moving to an item + // with the keyboard so the Combobox component can enable inline + // autocompletion. + moveOnKeyPress: (event) => { + if (!moveOnKeyPressProp(event)) return false; + const moveEvent = new Event("combobox-item-move"); + const baseElement = store == null ? void 0 : store.getState().baseElement; + baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent); + return true; + } + }); + props = useCompositeHover({ store, focusOnHover, ...props }); + return props; + } +); +var ComboboxItem = memo22( + forwardRef22(function ComboboxItem2(props) { + const htmlProps = useComboboxItem(props); + return createElement3(TagName10, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js +var import_react19 = __toESM(require_react(), 1); +var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); +var TagName11 = "span"; +function normalizeValue(value) { + return normalizeString(value).toLowerCase(); +} +function getOffsets(string, values) { + const offsets = []; + for (const value of values) { + let pos = 0; + const length = value.length; + while (string.indexOf(value, pos) !== -1) { + const index = string.indexOf(value, pos); + if (index !== -1) { + offsets.push([index, length]); + } + pos = index + 1; + } + } + return offsets; +} +function filterOverlappingOffsets(offsets) { + return offsets.filter(([offset, length], i2, arr) => { + return !arr.some( + ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length + ); + }); +} +function sortOffsets(offsets) { + return offsets.sort(([a2], [b2]) => a2 - b2); +} +function splitValue(itemValue, userValue) { + if (!itemValue) return itemValue; + if (!userValue) return itemValue; + const userValues = toArray(userValue).filter(Boolean).map(normalizeValue); + const parts = []; + const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( + "span", + { + "data-autocomplete-value": autocomplete ? "" : void 0, + "data-user-value": autocomplete ? void 0 : "", + children: value + }, + parts.length + ); + const offsets = sortOffsets( + filterOverlappingOffsets( + // Convert userValues into a set to avoid duplicates + getOffsets(normalizeValue(itemValue), new Set(userValues)) + ) + ); + if (!offsets.length) { + parts.push(span(itemValue, true)); + return parts; + } + const [firstOffset] = offsets[0]; + const values = [ + itemValue.slice(0, firstOffset), + ...offsets.flatMap(([offset, length], i2) => { + var _a; + const value = itemValue.slice(offset, offset + length); + const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0]; + const nextValue = itemValue.slice(offset + length, nextOffset); + return [value, nextValue]; + }) + ]; + values.forEach((value, i2) => { + if (!value) return; + parts.push(span(value, i2 % 2 === 0)); + }); + return parts; +} +var useComboboxItemValue = createHook(function useComboboxItemValue2({ store, value, userValue, ...props }) { + const context = useComboboxScopedContext(); + store = store || context; + const itemContext = (0, import_react19.useContext)(ComboboxItemValueContext); + const itemValue = value != null ? value : itemContext; + const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value); + const children = (0, import_react19.useMemo)(() => { + if (!itemValue) return; + if (!inputValue) return itemValue; + return splitValue(itemValue, inputValue); + }, [itemValue, inputValue]); + props = { + children, + ...props + }; + return removeUndefinedValues(props); +}); +var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) { + const htmlProps = useComboboxItemValue(props); + return createElement3(TagName11, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-label.js +var TagName12 = "label"; +var useComboboxLabel = createHook( + function useComboboxLabel2({ store, ...props }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const comboboxId = store.useState((state) => { + var _a; + return (_a = state.baseElement) == null ? void 0 : _a.id; + }); + props = { + htmlFor: comboboxId, + ...props + }; + return removeUndefinedValues(props); + } +); +var ComboboxLabel = memo22( + forwardRef22(function ComboboxLabel2(props) { + const htmlProps = useComboboxLabel(props); + return createElement3(TagName12, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/__chunks/2G6YEJT4.js +var import_react20 = __toESM(require_react(), 1); +var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); +var TagName13 = "div"; +var useComboboxList = createHook( + function useComboboxList2({ store, alwaysVisible, ...props }) { + const scopedContext = useComboboxScopedContext(true); + const context = useComboboxContext(); + store = store || context; + const scopedContextSameStore = !!store && store === scopedContext; + invariant( + store, + "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react20.useRef)(null); + const id = useId3(props.id); + const mounted = store.useState("mounted"); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const style = hidden ? { ...props.style, display: "none" } : props.style; + const multiSelectable = store.useState( + (state) => Array.isArray(state.selectedValue) + ); + const role = useAttribute(ref, "role", props.role); + const isCompositeRole = role === "listbox" || role === "tree" || role === "grid"; + const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0; + const [hasListboxInside, setHasListboxInside] = (0, import_react20.useState)(false); + const contentElement = store.useState("contentElement"); + useSafeLayoutEffect(() => { + if (!mounted) return; + const element = ref.current; + if (!element) return; + if (contentElement !== element) return; + const callback = () => { + setHasListboxInside(!!element.querySelector("[role='listbox']")); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { + subtree: true, + childList: true, + attributeFilter: ["role"] + }); + callback(); + return () => observer.disconnect(); + }, [mounted, contentElement]); + if (!hasListboxInside) { + props = { + role: "listbox", + "aria-multiselectable": ariaMultiSelectable, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }), + [store, role] + ); + const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null; + props = { + id, + hidden, + ...props, + ref: useMergeRefs(setContentElement, ref, props.ref), + style + }; + return removeUndefinedValues(props); + } +); +var ComboboxList = forwardRef22(function ComboboxList2(props) { + const htmlProps = useComboboxList(props); + return createElement3(TagName13, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/XSIEPKGA.js +var import_react21 = __toESM(require_react(), 1); +var TagValueContext = (0, import_react21.createContext)(null); +var TagRemoveIdContext = (0, import_react21.createContext)( + null +); +var ctx7 = createStoreContext( + [CompositeContextProvider], + [CompositeScopedContextProvider] +); +var useTagContext = ctx7.useContext; +var useTagScopedContext = ctx7.useScopedContext; +var useTagProviderContext = ctx7.useProviderContext; +var TagContextProvider = ctx7.ContextProvider; +var TagScopedContextProvider = ctx7.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/combobox/combobox-store.js +var isTouchSafari = isSafari() && isTouchDevice(); +function createComboboxStore({ + tag, + ...props +} = {}) { + const store = mergeStore(props.store, pick2(tag, ["value", "rtl"])); + throwOnConflictingProps(props, store); + const tagState = tag == null ? void 0 : tag.getState(); + const syncState = store == null ? void 0 : store.getState(); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId, + null + ); + const composite = createCompositeStore({ + ...props, + activeId, + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + true + ), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "vertical" + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + true + ) + }); + const popover = createPopoverStore({ + ...props, + placement: defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom-start" + ) + }); + const value = defaultValue( + props.value, + syncState == null ? void 0 : syncState.value, + props.defaultValue, + "" + ); + const selectedValue = defaultValue( + props.selectedValue, + syncState == null ? void 0 : syncState.selectedValue, + tagState == null ? void 0 : tagState.values, + props.defaultSelectedValue, + "" + ); + const multiSelectable = Array.isArray(selectedValue); + const initialState = { + ...composite.getState(), + ...popover.getState(), + value, + selectedValue, + resetValueOnSelect: defaultValue( + props.resetValueOnSelect, + syncState == null ? void 0 : syncState.resetValueOnSelect, + multiSelectable + ), + resetValueOnHide: defaultValue( + props.resetValueOnHide, + syncState == null ? void 0 : syncState.resetValueOnHide, + multiSelectable && !tag + ), + activeValue: syncState == null ? void 0 : syncState.activeValue + }; + const combobox = createStore(initialState, composite, popover, store); + if (isTouchSafari) { + setup( + combobox, + () => sync(combobox, ["virtualFocus"], () => { + combobox.setState("virtualFocus", false); + }) + ); + } + setup(combobox, () => { + if (!tag) return; + return chain( + sync(combobox, ["selectedValue"], (state) => { + if (!Array.isArray(state.selectedValue)) return; + tag.setValues(state.selectedValue); + }), + sync(tag, ["values"], (state) => { + combobox.setState("selectedValue", state.values); + }) + ); + }); + setup( + combobox, + () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => { + if (!state.resetValueOnHide) return; + if (state.mounted) return; + combobox.setState("value", value); + }) + ); + setup( + combobox, + () => sync(combobox, ["open"], (state) => { + if (state.open) return; + combobox.setState("activeId", activeId); + combobox.setState("moves", 0); + }) + ); + setup( + combobox, + () => sync(combobox, ["moves", "activeId"], (state, prevState) => { + if (state.moves === prevState.moves) { + combobox.setState("activeValue", void 0); + } + }) + ); + setup( + combobox, + () => batch(combobox, ["moves", "renderedItems"], (state, prev) => { + if (state.moves === prev.moves) return; + const { activeId: activeId2 } = combobox.getState(); + const activeItem = composite.item(activeId2); + combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value); + }) + ); + return { + ...popover, + ...composite, + ...combobox, + tag, + setValue: (value2) => combobox.setState("value", value2), + resetValue: () => combobox.setState("value", initialState.value), + setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SVN33SY6.js +function useComboboxStoreOptions(props) { + const tag = useTagContext(); + props = { + ...props, + tag: props.tag !== void 0 ? props.tag : tag + }; + return useCompositeStoreOptions(props); +} +function useComboboxStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.tag]); + useStoreProps(store, props, "value", "setValue"); + useStoreProps(store, props, "selectedValue", "setSelectedValue"); + useStoreProps(store, props, "resetValueOnHide"); + useStoreProps(store, props, "resetValueOnSelect"); + return Object.assign( + useCompositeStoreProps( + usePopoverStoreProps(store, update2, props), + update2, + props + ), + { tag: props.tag } + ); +} +function useComboboxStore(props = {}) { + props = useComboboxStoreOptions(props); + const [store, update2] = useStore(createComboboxStore, props); + return useComboboxStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js +var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); +function ComboboxProvider(props = {}) { + const store = useComboboxStore(props); + return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ComboboxContextProvider, { value: store, children: props.children }); +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_remove_accents = __toESM(require_remove_accents(), 1); +var import_compose8 = __toESM(require_compose(), 1); +var import_i18n22 = __toESM(require_i18n(), 1); +var import_element25 = __toESM(require_element(), 1); +var import_components19 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/utils.mjs +var EMPTY_ARRAY3 = []; +var getCurrentValue = (filterDefinition, currentFilter) => { + if (filterDefinition.singleSelection) { + return currentFilter?.value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value; + } + if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) { + return [currentFilter.value]; + } + return EMPTY_ARRAY3; +}; + +// packages/dataviews/build-module/hooks/use-elements.mjs +var import_element24 = __toESM(require_element(), 1); +var EMPTY_ARRAY4 = []; +function useElements({ + elements, + getElements +}) { + const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY4; + const [records, setRecords] = (0, import_element24.useState)(staticElements); + const [isLoading, setIsLoading] = (0, import_element24.useState)(false); + (0, import_element24.useEffect)(() => { + if (!getElements) { + setRecords(staticElements); + return; + } + let cancelled = false; + setIsLoading(true); + getElements().then((fetchedElements) => { + if (!cancelled) { + const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements; + setRecords(dynamicElements); + } + }).catch(() => { + if (!cancelled) { + setRecords(staticElements); + } + }).finally(() => { + if (!cancelled) { + setIsLoading(false); + } + }); + return () => { + cancelled = true; + }; + }, [getElements, staticElements]); + return { + elements: records, + isLoading + }; +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); +function normalizeSearchInput(input = "") { + return (0, import_remove_accents.default)(input.trim().toLowerCase()); +} +var getNewValue = (filterDefinition, currentFilter, value) => { + if (filterDefinition.singleSelection) { + return value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value]; + } + return [value]; +}; +function generateFilterElementCompositeItemId(prefix, filterElementValue) { + return `${prefix}-${filterElementValue}`; +} +var MultiSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-multi-selection", + { "is-selected": selected } + ), + children: selected && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_components19.Icon, { icon: check_default }) + } + ); +}; +var SingleSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-single-selection", + { "is-selected": selected } + ) + } + ); +}; +function ListBox({ view, filter, onChangeView }) { + const baseId = (0, import_compose8.useInstanceId)(ListBox, "dataviews-filter-list-box"); + const [activeCompositeId, setActiveCompositeId] = (0, import_element25.useState)( + // When there are one or less operators, the first item is set as active + // (by setting the initial `activeId` to `undefined`). + // With 2 or more operators, the focus is moved on the operators control + // (by setting the initial `activeId` to `null`), meaning that there won't + // be an active item initially. Focus is then managed via the + // `onFocusVisible` callback. + filter.operators?.length === 1 ? void 0 : null + ); + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components19.Composite, + { + virtualFocus: true, + focusLoop: true, + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + role: "listbox", + className: "dataviews-filters__search-widget-listbox", + "aria-label": (0, import_i18n22.sprintf)( + /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */ + (0, import_i18n22.__)("List of: %1$s"), + filter.name + ), + onFocusVisible: () => { + if (!activeCompositeId && filter.elements.length) { + setActiveCompositeId( + generateFilterElementCompositeItemId( + baseId, + filter.elements[0].value + ) + ); + } + }, + render: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_components19.Composite.Typeahead, {}), + children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)( + import_components19.Composite.Hover, + { + render: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components19.Composite.Item, + { + id: generateFilterElementCompositeItemId( + baseId, + element.value + ), + render: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + "div", + { + "aria-label": element.label, + role: "option", + className: "dataviews-filters__search-widget-listitem" + } + ), + onClick: () => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + } + } + ), + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes(element.value) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: element.label + } + ) + ] + }, + element.value + )) + } + ); +} +function ComboboxList22({ view, filter, onChangeView }) { + const [searchValue, setSearchValue] = (0, import_element25.useState)(""); + const deferredSearchValue = (0, import_element25.useDeferredValue)(searchValue); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const matches = (0, import_element25.useMemo)(() => { + const normalizedSearch = normalizeSearchInput(deferredSearchValue); + return filter.elements.filter( + (item) => normalizeSearchInput(item.label).includes(normalizedSearch) + ); + }, [filter.elements, deferredSearchValue]); + return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)( + ComboboxProvider, + { + selectedValue: currentValue, + setSelectedValue: (value) => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map((_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value + }; + } + return _filter; + }) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + setValue: setSearchValue, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + ComboboxLabel, + { + render: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_components19.VisuallyHidden, { children: (0, import_i18n22.__)("Search items") }), + children: (0, import_i18n22.__)("Search items") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + Combobox, + { + autoSelect: "always", + placeholder: (0, import_i18n22.__)("Search"), + className: "dataviews-filters__search-widget-filter-combobox__input" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_components19.Icon, { icon: search_default }) }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)( + ComboboxList, + { + className: "dataviews-filters__search-widget-filter-combobox-list", + alwaysVisible: true, + children: [ + matches.map((element) => { + return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)( + ComboboxItem, + { + resetValueOnSelect: false, + value: element.value, + className: "dataviews-filters__search-widget-listitem", + hideOnClick: false, + setValueOnClick: false, + focusOnHover: true, + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes( + element.value + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + ComboboxItemValue, + { + className: "dataviews-filters__search-widget-filter-combobox-item-value", + value: element.label + } + ), + !!element.description && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description }) + ] + } + ) + ] + }, + element.value + ); + }), + !matches.length && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { children: (0, import_i18n22.__)("No results found") }) + ] + } + ) + ] + } + ); +} +function SearchWidget(props) { + const { elements, isLoading } = useElements({ + elements: props.filter.elements, + getElements: props.filter.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_components19.Spinner, {}) }); + } + if (elements.length === 0) { + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n22.__)("No elements found") }); + } + const Widget = elements.length > 10 ? ComboboxList22 : ListBox; + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Widget, { ...props, filter: { ...props.filter, elements } }); +} + +// packages/dataviews/build-module/components/dataviews-filters/input-widget.mjs +var import_es6 = __toESM(require_es6(), 1); +var import_compose9 = __toESM(require_compose(), 1); +var import_element26 = __toESM(require_element(), 1); +var import_components20 = __toESM(require_components(), 1); +var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); +function InputWidget({ + filter, + view, + onChangeView, + fields +}) { + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const field = (0, import_element26.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Deactivate validation for filters. + isValid: {}, + // Configure getValue/setValue as if Item was a plain object. + getValue: ({ item }) => item[currentField.id], + setValue: ({ value }) => ({ + [currentField.id]: value + }) + }; + } + return currentField; + }, [fields, filter.field]); + const data = (0, import_element26.useMemo)(() => { + return (view.filters ?? []).reduce( + (acc, activeFilter) => { + acc[activeFilter.field] = activeFilter.value; + return acc; + }, + {} + ); + }, [view.filters]); + const handleChange = (0, import_compose9.useEvent)((updatedData) => { + if (!field || !currentFilter) { + return; + } + const nextValue = field.getValue({ item: updatedData }); + if ((0, import_es6.default)(nextValue, currentValue)) { + return; + } + onChangeView({ + ...view, + filters: (view.filters ?? []).map( + (_filter) => _filter.field === filter.field ? { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + // Consider empty strings as undefined: + // + // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records + // - empty string as value means "search empty string": returns only the records that have an empty string as value + // + // In practice, this means the filter will not be able to find an empty string as the value. + value: nextValue === "" ? void 0 : nextValue + } : _filter + ) + }); + }); + if (!field || !field.Edit || !currentFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components20.Flex, + { + className: "dataviews-filters__user-input-widget", + gap: 2.5, + direction: "column", + children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + field.Edit, + { + hideLabelFromVision: true, + data, + field, + operator: currentFilter.operator, + onChange: handleChange + } + ) + } + ); +} + +// packages/dataviews/node_modules/date-fns/constants.js +var daysInYear = 365.2425; +var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3; +var minTime = -maxTime; +var millisecondsInWeek = 6048e5; +var millisecondsInDay = 864e5; +var secondsInHour = 3600; +var secondsInDay = secondsInHour * 24; +var secondsInWeek = secondsInDay * 7; +var secondsInYear = secondsInDay * daysInYear; +var secondsInMonth = secondsInYear / 12; +var secondsInQuarter = secondsInMonth * 3; +var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom"); + +// packages/dataviews/node_modules/date-fns/constructFrom.js +function constructFrom(date, value) { + if (typeof date === "function") return date(value); + if (date && typeof date === "object" && constructFromSymbol in date) + return date[constructFromSymbol](value); + if (date instanceof Date) return new date.constructor(value); + return new Date(value); +} + +// packages/dataviews/node_modules/date-fns/toDate.js +function toDate(argument, context) { + return constructFrom(context || argument, argument); +} + +// packages/dataviews/node_modules/date-fns/addDays.js +function addDays(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) return _date; + _date.setDate(_date.getDate() + amount); + return _date; +} + +// packages/dataviews/node_modules/date-fns/addMonths.js +function addMonths(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) { + return _date; + } + const dayOfMonth = _date.getDate(); + const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime()); + endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); + const daysInMonth = endOfDesiredMonth.getDate(); + if (dayOfMonth >= daysInMonth) { + return endOfDesiredMonth; + } else { + _date.setFullYear( + endOfDesiredMonth.getFullYear(), + endOfDesiredMonth.getMonth(), + dayOfMonth + ); + return _date; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js +var defaultOptions = {}; +function getDefaultOptions() { + return defaultOptions; +} + +// packages/dataviews/node_modules/date-fns/startOfWeek.js +function startOfWeek(date, options) { + const defaultOptions2 = getDefaultOptions(); + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const _date = toDate(date, options?.in); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + _date.setDate(_date.getDate() - diff); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeek.js +function startOfISOWeek(date, options) { + return startOfWeek(date, { ...options, weekStartsOn: 1 }); +} + +// packages/dataviews/node_modules/date-fns/getISOWeekYear.js +function getISOWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const fourthOfJanuaryOfNextYear = constructFrom(_date, 0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); + const fourthOfJanuaryOfThisYear = constructFrom(_date, 0); + fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); + if (_date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (_date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +function getTimezoneOffsetInMilliseconds(date) { + const _date = toDate(date); + const utcDate = new Date( + Date.UTC( + _date.getFullYear(), + _date.getMonth(), + _date.getDate(), + _date.getHours(), + _date.getMinutes(), + _date.getSeconds(), + _date.getMilliseconds() + ) + ); + utcDate.setUTCFullYear(_date.getFullYear()); + return +date - +utcDate; +} + +// packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js +function normalizeDates(context, ...dates) { + const normalize = constructFrom.bind( + null, + context || dates.find((date) => typeof date === "object") + ); + return dates.map(normalize); +} + +// packages/dataviews/node_modules/date-fns/startOfDay.js +function startOfDay(date, options) { + const _date = toDate(date, options?.in); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js +function differenceInCalendarDays(laterDate, earlierDate, options) { + const [laterDate_, earlierDate_] = normalizeDates( + options?.in, + laterDate, + earlierDate + ); + const laterStartOfDay = startOfDay(laterDate_); + const earlierStartOfDay = startOfDay(earlierDate_); + const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay); + const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); + return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay); +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js +function startOfISOWeekYear(date, options) { + const year = getISOWeekYear(date, options); + const fourthOfJanuary = constructFrom(options?.in || date, 0); + fourthOfJanuary.setFullYear(year, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + return startOfISOWeek(fourthOfJanuary); +} + +// packages/dataviews/node_modules/date-fns/addWeeks.js +function addWeeks(date, amount, options) { + return addDays(date, amount * 7, options); +} + +// packages/dataviews/node_modules/date-fns/addYears.js +function addYears(date, amount, options) { + return addMonths(date, amount * 12, options); +} + +// packages/dataviews/node_modules/date-fns/isDate.js +function isDate(value) { + return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"; +} + +// packages/dataviews/node_modules/date-fns/isValid.js +function isValid(date) { + return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date))); +} + +// packages/dataviews/node_modules/date-fns/startOfMonth.js +function startOfMonth(date, options) { + const _date = toDate(date, options?.in); + _date.setDate(1); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfYear.js +function startOfYear(date, options) { + const date_ = toDate(date, options?.in); + date_.setFullYear(date_.getFullYear(), 0, 1); + date_.setHours(0, 0, 0, 0); + return date_; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +var formatDistanceLocale = { + lessThanXSeconds: { + one: "less than a second", + other: "less than {{count}} seconds" + }, + xSeconds: { + one: "1 second", + other: "{{count}} seconds" + }, + halfAMinute: "half a minute", + lessThanXMinutes: { + one: "less than a minute", + other: "less than {{count}} minutes" + }, + xMinutes: { + one: "1 minute", + other: "{{count}} minutes" + }, + aboutXHours: { + one: "about 1 hour", + other: "about {{count}} hours" + }, + xHours: { + one: "1 hour", + other: "{{count}} hours" + }, + xDays: { + one: "1 day", + other: "{{count}} days" + }, + aboutXWeeks: { + one: "about 1 week", + other: "about {{count}} weeks" + }, + xWeeks: { + one: "1 week", + other: "{{count}} weeks" + }, + aboutXMonths: { + one: "about 1 month", + other: "about {{count}} months" + }, + xMonths: { + one: "1 month", + other: "{{count}} months" + }, + aboutXYears: { + one: "about 1 year", + other: "about {{count}} years" + }, + xYears: { + one: "1 year", + other: "{{count}} years" + }, + overXYears: { + one: "over 1 year", + other: "over {{count}} years" + }, + almostXYears: { + one: "almost 1 year", + other: "almost {{count}} years" + } +}; +var formatDistance = (token, count, options) => { + let result; + const tokenValue = formatDistanceLocale[token]; + if (typeof tokenValue === "string") { + result = tokenValue; + } else if (count === 1) { + result = tokenValue.one; + } else { + result = tokenValue.other.replace("{{count}}", count.toString()); + } + if (options?.addSuffix) { + if (options.comparison && options.comparison > 0) { + return "in " + result; + } else { + return result + " ago"; + } + } + return result; +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +function buildFormatLongFn(args) { + return (options = {}) => { + const width = options.width ? String(options.width) : args.defaultWidth; + const format6 = args.formats[width] || args.formats[args.defaultWidth]; + return format6; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js +var dateFormats = { + full: "EEEE, MMMM do, y", + long: "MMMM do, y", + medium: "MMM d, y", + short: "MM/dd/yyyy" +}; +var timeFormats = { + full: "h:mm:ss a zzzz", + long: "h:mm:ss a z", + medium: "h:mm:ss a", + short: "h:mm a" +}; +var dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: "{{date}}, {{time}}", + short: "{{date}}, {{time}}" +}; +var formatLong = { + date: buildFormatLongFn({ + formats: dateFormats, + defaultWidth: "full" + }), + time: buildFormatLongFn({ + formats: timeFormats, + defaultWidth: "full" + }), + dateTime: buildFormatLongFn({ + formats: dateTimeFormats, + defaultWidth: "full" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +var formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: "P" +}; +var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +function buildLocalizeFn(args) { + return (value, options) => { + const context = options?.context ? String(options.context) : "standalone"; + let valuesArray; + if (context === "formatting" && args.formattingValues) { + const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + const width = options?.width ? String(options.width) : defaultWidth; + valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + const defaultWidth = args.defaultWidth; + const width = options?.width ? String(options.width) : args.defaultWidth; + valuesArray = args.values[width] || args.values[defaultWidth]; + } + const index = args.argumentCallback ? args.argumentCallback(value) : value; + return valuesArray[index]; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js +var eraValues = { + narrow: ["B", "A"], + abbreviated: ["BC", "AD"], + wide: ["Before Christ", "Anno Domini"] +}; +var quarterValues = { + narrow: ["1", "2", "3", "4"], + abbreviated: ["Q1", "Q2", "Q3", "Q4"], + wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] +}; +var monthValues = { + narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], + abbreviated: [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + wide: [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] +}; +var dayValues = { + narrow: ["S", "M", "T", "W", "T", "F", "S"], + short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + wide: [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] +}; +var dayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + } +}; +var formattingDayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + } +}; +var ordinalNumber = (dirtyNumber, _options) => { + const number = Number(dirtyNumber); + const rem100 = number % 100; + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + "st"; + case 2: + return number + "nd"; + case 3: + return number + "rd"; + } + } + return number + "th"; +}; +var localize = { + ordinalNumber, + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: "wide" + }), + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: "wide", + argumentCallback: (quarter) => quarter - 1 + }), + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: "wide" + }), + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: "wide" + }), + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: "wide", + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: "wide" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js +function buildMatchFn(args) { + return (string, options = {}) => { + const width = options.width; + const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; + const matchResult = string.match(matchPattern); + if (!matchResult) { + return null; + } + const matchedString = matchResult[0]; + const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; + const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : ( + // [TODO] -- I challenge you to fix the type + findKey(parsePatterns, (pattern) => pattern.test(matchedString)) + ); + let value; + value = args.valueCallback ? args.valueCallback(key) : key; + value = options.valueCallback ? ( + // [TODO] -- I challenge you to fix the type + options.valueCallback(value) + ) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} +function findKey(object, predicate) { + for (const key in object) { + if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) { + return key; + } + } + return void 0; +} +function findIndex(array, predicate) { + for (let key = 0; key < array.length; key++) { + if (predicate(array[key])) { + return key; + } + } + return void 0; +} + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +function buildMatchPatternFn(args) { + return (string, options = {}) => { + const matchResult = string.match(args.matchPattern); + if (!matchResult) return null; + const matchedString = matchResult[0]; + const parseResult = string.match(args.parsePattern); + if (!parseResult) return null; + let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; + value = options.valueCallback ? options.valueCallback(value) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js +var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +var parseOrdinalNumberPattern = /\d+/i; +var matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i +}; +var parseEraPatterns = { + any: [/^b/i, /^(a|c)/i] +}; +var matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i +}; +var parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i] +}; +var matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i +}; +var parseMonthPatterns = { + narrow: [ + /^j/i, + /^f/i, + /^m/i, + /^a/i, + /^m/i, + /^j/i, + /^j/i, + /^a/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ], + any: [ + /^ja/i, + /^f/i, + /^mar/i, + /^ap/i, + /^may/i, + /^jun/i, + /^jul/i, + /^au/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ] +}; +var matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i +}; +var parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] +}; +var matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i +}; +var parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i + } +}; +var match = { + ordinalNumber: buildMatchPatternFn({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: (value) => parseInt(value, 10) + }), + era: buildMatchFn({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseEraPatterns, + defaultParseWidth: "any" + }), + quarter: buildMatchFn({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseQuarterPatterns, + defaultParseWidth: "any", + valueCallback: (index) => index + 1 + }), + month: buildMatchFn({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseMonthPatterns, + defaultParseWidth: "any" + }), + day: buildMatchFn({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseDayPatterns, + defaultParseWidth: "any" + }), + dayPeriod: buildMatchFn({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: "any", + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: "any" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US.js +var enUS = { + code: "en-US", + formatDistance, + formatLong, + formatRelative, + localize, + match, + options: { + weekStartsOn: 0, + firstWeekContainsDate: 1 + } +}; + +// packages/dataviews/node_modules/date-fns/getDayOfYear.js +function getDayOfYear(date, options) { + const _date = toDate(date, options?.in); + const diff = differenceInCalendarDays(_date, startOfYear(_date)); + const dayOfYear = diff + 1; + return dayOfYear; +} + +// packages/dataviews/node_modules/date-fns/getISOWeek.js +function getISOWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/getWeekYear.js +function getWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const firstWeekOfNextYear = constructFrom(options?.in || date, 0); + firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfWeek(firstWeekOfNextYear, options); + const firstWeekOfThisYear = constructFrom(options?.in || date, 0); + firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfWeek(firstWeekOfThisYear, options); + if (+_date >= +startOfNextYear) { + return year + 1; + } else if (+_date >= +startOfThisYear) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/startOfWeekYear.js +function startOfWeekYear(date, options) { + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const year = getWeekYear(date, options); + const firstWeek = constructFrom(options?.in || date, 0); + firstWeek.setFullYear(year, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + const _date = startOfWeek(firstWeek, options); + return _date; +} + +// packages/dataviews/node_modules/date-fns/getWeek.js +function getWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js +function addLeadingZeros(number, targetLength) { + const sign = number < 0 ? "-" : ""; + const output = Math.abs(number).toString().padStart(targetLength, "0"); + return sign + output; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js +var lightFormatters = { + // Year + y(date, token) { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); + }, + // Month + M(date, token) { + const month = date.getMonth(); + return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); + }, + // Day of the month + d(date, token) { + return addLeadingZeros(date.getDate(), token.length); + }, + // AM or PM + a(date, token) { + const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return dayPeriodEnumValue.toUpperCase(); + case "aaa": + return dayPeriodEnumValue; + case "aaaaa": + return dayPeriodEnumValue[0]; + case "aaaa": + default: + return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; + } + }, + // Hour [1-12] + h(date, token) { + return addLeadingZeros(date.getHours() % 12 || 12, token.length); + }, + // Hour [0-23] + H(date, token) { + return addLeadingZeros(date.getHours(), token.length); + }, + // Minute + m(date, token) { + return addLeadingZeros(date.getMinutes(), token.length); + }, + // Second + s(date, token) { + return addLeadingZeros(date.getSeconds(), token.length); + }, + // Fraction of second + S(date, token) { + const numberOfDigits = token.length; + const milliseconds = date.getMilliseconds(); + const fractionalSeconds = Math.trunc( + milliseconds * Math.pow(10, numberOfDigits - 3) + ); + return addLeadingZeros(fractionalSeconds, token.length); + } +}; + +// packages/dataviews/node_modules/date-fns/_lib/format/formatters.js +var dayPeriodEnum = { + am: "am", + pm: "pm", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" +}; +var formatters = { + // Era + G: function(date, token, localize2) { + const era = date.getFullYear() > 0 ? 1 : 0; + switch (token) { + // AD, BC + case "G": + case "GG": + case "GGG": + return localize2.era(era, { width: "abbreviated" }); + // A, B + case "GGGGG": + return localize2.era(era, { width: "narrow" }); + // Anno Domini, Before Christ + case "GGGG": + default: + return localize2.era(era, { width: "wide" }); + } + }, + // Year + y: function(date, token, localize2) { + if (token === "yo") { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize2.ordinalNumber(year, { unit: "year" }); + } + return lightFormatters.y(date, token); + }, + // Local week-numbering year + Y: function(date, token, localize2, options) { + const signedWeekYear = getWeekYear(date, options); + const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; + if (token === "YY") { + const twoDigitYear = weekYear % 100; + return addLeadingZeros(twoDigitYear, 2); + } + if (token === "Yo") { + return localize2.ordinalNumber(weekYear, { unit: "year" }); + } + return addLeadingZeros(weekYear, token.length); + }, + // ISO week-numbering year + R: function(date, token) { + const isoWeekYear = getISOWeekYear(date); + return addLeadingZeros(isoWeekYear, token.length); + }, + // Extended year. This is a single number designating the year of this calendar system. + // The main difference between `y` and `u` localizers are B.C. years: + // | Year | `y` | `u` | + // |------|-----|-----| + // | AC 1 | 1 | 1 | + // | BC 1 | 1 | 0 | + // | BC 2 | 2 | -1 | + // Also `yy` always returns the last two digits of a year, + // while `uu` pads single digit years to 2 characters and returns other years unchanged. + u: function(date, token) { + const year = date.getFullYear(); + return addLeadingZeros(year, token.length); + }, + // Quarter + Q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "Q": + return String(quarter); + // 01, 02, 03, 04 + case "QQ": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "Qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "QQQ": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "formatting" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "QQQQQ": + return localize2.quarter(quarter, { + width: "narrow", + context: "formatting" + }); + // 1st quarter, 2nd quarter, ... + case "QQQQ": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone quarter + q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "q": + return String(quarter); + // 01, 02, 03, 04 + case "qq": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "qqq": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "standalone" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "qqqqq": + return localize2.quarter(quarter, { + width: "narrow", + context: "standalone" + }); + // 1st quarter, 2nd quarter, ... + case "qqqq": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "standalone" + }); + } + }, + // Month + M: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + case "M": + case "MM": + return lightFormatters.M(date, token); + // 1st, 2nd, ..., 12th + case "Mo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "MMM": + return localize2.month(month, { + width: "abbreviated", + context: "formatting" + }); + // J, F, ..., D + case "MMMMM": + return localize2.month(month, { + width: "narrow", + context: "formatting" + }); + // January, February, ..., December + case "MMMM": + default: + return localize2.month(month, { width: "wide", context: "formatting" }); + } + }, + // Stand-alone month + L: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + // 1, 2, ..., 12 + case "L": + return String(month + 1); + // 01, 02, ..., 12 + case "LL": + return addLeadingZeros(month + 1, 2); + // 1st, 2nd, ..., 12th + case "Lo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "LLL": + return localize2.month(month, { + width: "abbreviated", + context: "standalone" + }); + // J, F, ..., D + case "LLLLL": + return localize2.month(month, { + width: "narrow", + context: "standalone" + }); + // January, February, ..., December + case "LLLL": + default: + return localize2.month(month, { width: "wide", context: "standalone" }); + } + }, + // Local week of year + w: function(date, token, localize2, options) { + const week = getWeek(date, options); + if (token === "wo") { + return localize2.ordinalNumber(week, { unit: "week" }); + } + return addLeadingZeros(week, token.length); + }, + // ISO week of year + I: function(date, token, localize2) { + const isoWeek = getISOWeek(date); + if (token === "Io") { + return localize2.ordinalNumber(isoWeek, { unit: "week" }); + } + return addLeadingZeros(isoWeek, token.length); + }, + // Day of the month + d: function(date, token, localize2) { + if (token === "do") { + return localize2.ordinalNumber(date.getDate(), { unit: "date" }); + } + return lightFormatters.d(date, token); + }, + // Day of year + D: function(date, token, localize2) { + const dayOfYear = getDayOfYear(date); + if (token === "Do") { + return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); + } + return addLeadingZeros(dayOfYear, token.length); + }, + // Day of week + E: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + switch (token) { + // Tue + case "E": + case "EE": + case "EEE": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "EEEEE": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "EEEEEE": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "EEEE": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Local day of week + e: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (Nth day of week with current locale or weekStartsOn) + case "e": + return String(localDayOfWeek); + // Padded numerical value + case "ee": + return addLeadingZeros(localDayOfWeek, 2); + // 1st, 2nd, ..., 7th + case "eo": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "eee": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "eeeee": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "eeeeee": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "eeee": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone local day of week + c: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (same as in `e`) + case "c": + return String(localDayOfWeek); + // Padded numerical value + case "cc": + return addLeadingZeros(localDayOfWeek, token.length); + // 1st, 2nd, ..., 7th + case "co": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "ccc": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "standalone" + }); + // T + case "ccccc": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "standalone" + }); + // Tu + case "cccccc": + return localize2.day(dayOfWeek, { + width: "short", + context: "standalone" + }); + // Tuesday + case "cccc": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "standalone" + }); + } + }, + // ISO day of week + i: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + switch (token) { + // 2 + case "i": + return String(isoDayOfWeek); + // 02 + case "ii": + return addLeadingZeros(isoDayOfWeek, token.length); + // 2nd + case "io": + return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); + // Tue + case "iii": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "iiiii": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "iiiiii": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "iiii": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // AM or PM + a: function(date, token, localize2) { + const hours = date.getHours(); + const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "aaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "aaaaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "aaaa": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // AM, PM, midnight, noon + b: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours === 12) { + dayPeriodEnumValue = dayPeriodEnum.noon; + } else if (hours === 0) { + dayPeriodEnumValue = dayPeriodEnum.midnight; + } else { + dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + } + switch (token) { + case "b": + case "bb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "bbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "bbbbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "bbbb": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // in the morning, in the afternoon, in the evening, at night + B: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours >= 17) { + dayPeriodEnumValue = dayPeriodEnum.evening; + } else if (hours >= 12) { + dayPeriodEnumValue = dayPeriodEnum.afternoon; + } else if (hours >= 4) { + dayPeriodEnumValue = dayPeriodEnum.morning; + } else { + dayPeriodEnumValue = dayPeriodEnum.night; + } + switch (token) { + case "B": + case "BB": + case "BBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "BBBBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "BBBB": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // Hour [1-12] + h: function(date, token, localize2) { + if (token === "ho") { + let hours = date.getHours() % 12; + if (hours === 0) hours = 12; + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return lightFormatters.h(date, token); + }, + // Hour [0-23] + H: function(date, token, localize2) { + if (token === "Ho") { + return localize2.ordinalNumber(date.getHours(), { unit: "hour" }); + } + return lightFormatters.H(date, token); + }, + // Hour [0-11] + K: function(date, token, localize2) { + const hours = date.getHours() % 12; + if (token === "Ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Hour [1-24] + k: function(date, token, localize2) { + let hours = date.getHours(); + if (hours === 0) hours = 24; + if (token === "ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Minute + m: function(date, token, localize2) { + if (token === "mo") { + return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" }); + } + return lightFormatters.m(date, token); + }, + // Second + s: function(date, token, localize2) { + if (token === "so") { + return localize2.ordinalNumber(date.getSeconds(), { unit: "second" }); + } + return lightFormatters.s(date, token); + }, + // Fraction of second + S: function(date, token) { + return lightFormatters.S(date, token); + }, + // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) + X: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + if (timezoneOffset === 0) { + return "Z"; + } + switch (token) { + // Hours and optional minutes + case "X": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XX` + case "XXXX": + case "XX": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XXX` + case "XXXXX": + case "XXX": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) + x: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Hours and optional minutes + case "x": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xx` + case "xxxx": + case "xx": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xxx` + case "xxxxx": + case "xxx": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (GMT) + O: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "O": + case "OO": + case "OOO": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "OOOO": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (specific non-location) + z: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "z": + case "zz": + case "zzz": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "zzzz": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Seconds timestamp + t: function(date, token, _localize) { + const timestamp = Math.trunc(+date / 1e3); + return addLeadingZeros(timestamp, token.length); + }, + // Milliseconds timestamp + T: function(date, token, _localize) { + return addLeadingZeros(+date, token.length); + } +}; +function formatTimezoneShort(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = Math.trunc(absOffset / 60); + const minutes = absOffset % 60; + if (minutes === 0) { + return sign + String(hours); + } + return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); +} +function formatTimezoneWithOptionalMinutes(offset, delimiter) { + if (offset % 60 === 0) { + const sign = offset > 0 ? "-" : "+"; + return sign + addLeadingZeros(Math.abs(offset) / 60, 2); + } + return formatTimezone(offset, delimiter); +} +function formatTimezone(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); + const minutes = addLeadingZeros(absOffset % 60, 2); + return sign + hours + delimiter + minutes; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js +var dateLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "P": + return formatLong2.date({ width: "short" }); + case "PP": + return formatLong2.date({ width: "medium" }); + case "PPP": + return formatLong2.date({ width: "long" }); + case "PPPP": + default: + return formatLong2.date({ width: "full" }); + } +}; +var timeLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "p": + return formatLong2.time({ width: "short" }); + case "pp": + return formatLong2.time({ width: "medium" }); + case "ppp": + return formatLong2.time({ width: "long" }); + case "pppp": + default: + return formatLong2.time({ width: "full" }); + } +}; +var dateTimeLongFormatter = (pattern, formatLong2) => { + const matchResult = pattern.match(/(P+)(p+)?/) || []; + const datePattern = matchResult[1]; + const timePattern = matchResult[2]; + if (!timePattern) { + return dateLongFormatter(pattern, formatLong2); + } + let dateTimeFormat; + switch (datePattern) { + case "P": + dateTimeFormat = formatLong2.dateTime({ width: "short" }); + break; + case "PP": + dateTimeFormat = formatLong2.dateTime({ width: "medium" }); + break; + case "PPP": + dateTimeFormat = formatLong2.dateTime({ width: "long" }); + break; + case "PPPP": + default: + dateTimeFormat = formatLong2.dateTime({ width: "full" }); + break; + } + return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); +}; +var longFormatters = { + p: timeLongFormatter, + P: dateTimeLongFormatter +}; + +// packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js +var dayOfYearTokenRE = /^D+$/; +var weekYearTokenRE = /^Y+$/; +var throwTokens = ["D", "DD", "YY", "YYYY"]; +function isProtectedDayOfYearToken(token) { + return dayOfYearTokenRE.test(token); +} +function isProtectedWeekYearToken(token) { + return weekYearTokenRE.test(token); +} +function warnOrThrowProtectedError(token, format6, input) { + const _message = message(token, format6, input); + console.warn(_message); + if (throwTokens.includes(token)) throw new RangeError(_message); +} +function message(token, format6, input) { + const subject = token[0] === "Y" ? "years" : "days of the month"; + return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format6}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; +} + +// packages/dataviews/node_modules/date-fns/format.js +var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; +var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp = /^'([^]*?)'?$/; +var doubleQuoteRegExp = /''/g; +var unescapedLatinCharacterRegExp = /[a-zA-Z]/; +function format(date, formatStr, options) { + const defaultOptions2 = getDefaultOptions(); + const locale = options?.locale ?? defaultOptions2.locale ?? enUS; + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const originalDate = toDate(date, options?.in); + if (!isValid(originalDate)) { + throw new RangeError("Invalid time value"); + } + let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => { + const firstCharacter = substring[0]; + if (firstCharacter === "p" || firstCharacter === "P") { + const longFormatter = longFormatters[firstCharacter]; + return longFormatter(substring, locale.formatLong); + } + return substring; + }).join("").match(formattingTokensRegExp).map((substring) => { + if (substring === "''") { + return { isToken: false, value: "'" }; + } + const firstCharacter = substring[0]; + if (firstCharacter === "'") { + return { isToken: false, value: cleanEscapedString(substring) }; + } + if (formatters[firstCharacter]) { + return { isToken: true, value: substring }; + } + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" + ); + } + return { isToken: false, value: substring }; + }); + if (locale.localize.preprocessor) { + parts = locale.localize.preprocessor(originalDate, parts); + } + const formatterOptions = { + firstWeekContainsDate, + weekStartsOn, + locale + }; + return parts.map((part) => { + if (!part.isToken) return part.value; + const token = part.value; + if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { + warnOrThrowProtectedError(token, formatStr, String(date)); + } + const formatter = formatters[token[0]]; + return formatter(originalDate, token, locale.localize, formatterOptions); + }).join(""); +} +function cleanEscapedString(input) { + const matched = input.match(escapedStringRegExp); + if (!matched) { + return input; + } + return matched[1].replace(doubleQuoteRegExp, "'"); +} + +// packages/dataviews/node_modules/date-fns/subDays.js +function subDays(date, amount, options) { + return addDays(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subMonths.js +function subMonths(date, amount, options) { + return addMonths(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subWeeks.js +function subWeeks(date, amount, options) { + return addWeeks(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subYears.js +function subYears(date, amount, options) { + return addYears(date, -amount, options); +} + +// packages/dataviews/build-module/utils/operators.mjs +var import_i18n23 = __toESM(require_i18n(), 1); +var import_element27 = __toESM(require_element(), 1); +var import_date = __toESM(require_date(), 1); +var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); +var filterTextWrappers = { + Name: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }), + Value: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" }) +}; +function getRelativeDate(value, unit) { + switch (unit) { + case "days": + return subDays(/* @__PURE__ */ new Date(), value); + case "weeks": + return subWeeks(/* @__PURE__ */ new Date(), value); + case "months": + return subMonths(/* @__PURE__ */ new Date(), value); + case "years": + return subYears(/* @__PURE__ */ new Date(), value); + default: + return /* @__PURE__ */ new Date(); + } +} +var isNoneOperatorDefinition = { + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is none of"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */ + (0, import_i18n23.__)("%1$s is none of: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter: ((item, field, filterValue) => { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return !filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return !filterValue.includes(fieldValue); + } + return false; + }), + selection: "multi" +}; +var OPERATORS = [ + { + name: OPERATOR_IS_ANY, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return filterValue.includes(fieldValue); + } + return false; + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NONE, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_IS_ALL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes all"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes all: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + return filterValue.every((value) => { + return field.getValue({ item })?.includes(value); + }); + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NOT_ALL, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_BETWEEN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Between (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Item count"). 2: Filter value min. 3: Filter value max. e.g.: "Item count between (inc): 10 and 180". */ + (0, import_i18n23.__)( + "%1$s between (inc): %2$s and %3$s" + ), + filter.name, + activeElements[0].label[0], + activeElements[0].label[1] + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!Array.isArray(filterValue) || filterValue.length !== 2 || filterValue[0] === void 0 || filterValue[1] === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") { + return fieldValue >= filterValue[0] && fieldValue <= filterValue[1]; + } + return false; + }, + selection: "custom" + }, + { + name: OPERATOR_IN_THE_PAST, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("In the past"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */ + (0, import_i18n23.__)( + "%1$s is in the past: %2$s" + ), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date(); + }, + selection: "custom" + }, + { + name: OPERATOR_OVER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Over"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */ + (0, import_i18n23.__)("%1$s is over: %2$s"), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue < targetDate; + }, + selection: "custom" + }, + { + name: OPERATOR_IS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue === field.getValue({ item }) || filterValue === void 0; + }, + selection: "single" + }, + { + name: OPERATOR_IS_NOT, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is not"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue !== field.getValue({ item }); + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */ + (0, import_i18n23.__)("%1$s is less than: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue < filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue > filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is less than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue <= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue >= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is before: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate < filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is after: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate > filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or before: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate <= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or after: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate >= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Contains"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */ + (0, import_i18n23.__)("%1$s contains: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Doesn't contain"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */ + (0, import_i18n23.__)( + "%1$s doesn't contain: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_STARTS_WITH, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Starts with"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */ + (0, import_i18n23.__)("%1$s starts with: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("On"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() === fieldDate.getTime(); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Not on"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() !== fieldDate.getTime(); + }, + selection: "single" + } +]; +var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name); +var getAllOperatorNames = () => OPERATORS.map((op) => op.name); +var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some( + (op) => op.name === name +); +var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); +var ENTER = "Enter"; +var SPACE = " "; +var FilterText = ({ + activeElements, + filterInView, + filter +}) => { + if (activeElements === void 0 || activeElements.length === 0) { + return filter.name; + } + const operator = getOperatorByName(filterInView?.operator); + if (operator !== void 0) { + return operator.filterText(filter, activeElements); + } + return (0, import_i18n24.sprintf)( + /* translators: 1: Filter name e.g.: "Unknown status for Author". */ + (0, import_i18n24.__)("Unknown status for %1$s"), + filter.name + ); +}; +function OperatorSelector({ + filter, + view, + onChangeView +}) { + const operatorOptions = filter.operators?.map((operator) => ({ + value: operator, + label: getOperatorByName(operator)?.label || operator + })); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const value = currentFilter?.operator || filter.operators[0]; + return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "flex-start", + className: "dataviews-filters__summary-operators-container", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components21.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }), + /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + import_components21.SelectControl, + { + className: "dataviews-filters__summary-operators-filter-select", + label: (0, import_i18n24.__)("Conditions"), + value, + options: operatorOptions, + onChange: (newValue) => { + const newOperator = newValue; + const currentOperator = currentFilter?.operator; + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + const currentOpSelectionModel = getOperatorByName( + currentOperator + )?.selection; + const newOpSelectionModel = getOperatorByName( + newOperator + )?.selection; + const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [ + currentOpSelectionModel, + newOpSelectionModel + ].includes("custom"); + return { + ..._filter, + value: shouldResetValue ? void 0 : _filter.value, + operator: newOperator + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: newOperator, + value: void 0 + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + size: "small", + variant: "minimal", + hideLabelFromVision: true + } + ) + ] + } + ); +} +function Filter({ + addFilterRef, + openedFilter, + fields, + ...commonProps +}) { + const toggleRef = (0, import_element28.useRef)(null); + const { filter, view, onChangeView } = commonProps; + const filterInView = view.filters?.find( + (f2) => f2.field === filter.field + ); + let activeElements = []; + const field = (0, import_element28.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Configure getValue as if Item was a plain object. + // See related input-widget.tsx + getValue: ({ item }) => item[currentField.id] + }; + } + return currentField; + }, [fields, filter.field]); + const { elements } = useElements({ + elements: filter.elements, + getElements: filter.getElements + }); + if (elements.length > 0) { + activeElements = elements.filter((element) => { + if (filter.singleSelection) { + return element.value === filterInView?.value; + } + return filterInView?.value?.includes(element.value); + }); + } else if (Array.isArray(filterInView?.value)) { + const label = filterInView.value.map((v2) => { + const formattedValue = field?.getValueFormatted({ + item: { [field.id]: v2 }, + field + }); + return formattedValue || String(v2); + }); + activeElements = [ + { + value: filterInView.value, + // @ts-ignore + label + } + ]; + } else if (typeof filterInView?.value === "object") { + activeElements = [ + { value: filterInView.value, label: filterInView.value } + ]; + } else if (filterInView?.value !== void 0) { + const label = field !== void 0 ? field.getValueFormatted({ + item: { [field.id]: filterInView.value }, + field + }) : String(filterInView.value); + activeElements = [ + { + value: filterInView.value, + label + } + ]; + } + const isPrimary = filter.isPrimary; + const isLocked = filterInView?.isLocked; + const hasValues = !isLocked && filterInView?.value !== void 0; + const canResetOrRemove = !isLocked && (!isPrimary || hasValues); + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + import_components21.Dropdown, + { + defaultOpen: openedFilter === filter.field, + contentClassName: "dataviews-filters__summary-popover", + popoverProps: { placement: "bottom-start", role: "dialog" }, + onClose: () => { + toggleRef.current?.focus(); + }, + renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [ + /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + import_components21.Tooltip, + { + text: (0, import_i18n24.sprintf)( + /* translators: 1: Filter name. */ + (0, import_i18n24.__)("Filter by: %1$s"), + filter.name.toLowerCase() + ), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + "div", + { + className: clsx_default( + "dataviews-filters__summary-chip", + { + "has-reset": canResetOrRemove, + "has-values": hasValues, + "is-not-clickable": isLocked + } + ), + role: "button", + tabIndex: isLocked ? -1 : 0, + onClick: () => { + if (!isLocked) { + onToggle(); + } + }, + onKeyDown: (event) => { + if (!isLocked && [ENTER, SPACE].includes(event.key)) { + onToggle(); + event.preventDefault(); + } + }, + "aria-disabled": isLocked, + "aria-pressed": isOpen, + "aria-expanded": isOpen, + ref: toggleRef, + children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + FilterText, + { + activeElements, + filterInView, + filter + } + ) + } + ) + } + ), + canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + import_components21.Tooltip, + { + text: isPrimary ? (0, import_i18n24.__)("Reset") : (0, import_i18n24.__)("Remove"), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + "button", + { + className: clsx_default( + "dataviews-filters__summary-chip-remove", + { "has-values": hasValues } + ), + onClick: () => { + onChangeView({ + ...view, + page: 1, + filters: view.filters?.filter( + (_filter) => _filter.field !== filter.field + ) + }); + if (!isPrimary) { + addFilterRef.current?.focus(); + } else { + toggleRef.current?.focus(); + } + }, + children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components21.Icon, { icon: close_small_default }) + } + ) + } + ) + ] }), + renderContent: () => { + return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(Stack, { direction: "column", justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(OperatorSelector, { ...commonProps }), + commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + SearchWidget, + { + ...commonProps, + filter: { + ...commonProps.filter, + elements + } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(InputWidget, { ...commonProps, fields }) + ] }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/add-filter.mjs +var import_components22 = __toESM(require_components(), 1); +var import_i18n25 = __toESM(require_i18n(), 1); +var import_element29 = __toESM(require_element(), 1); +var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu4 } = unlock(import_components22.privateApis); +function AddFilterMenu({ + filters, + view, + onChangeView, + setOpenedFilter, + triggerProps +}) { + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(Menu4, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Menu4.TriggerButton, { ...triggerProps }), + /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( + Menu4.Item, + { + onClick: () => { + setOpenedFilter(filter.field); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: filter.field, + value: void 0, + operator: filter.operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Menu4.ItemLabel, { children: filter.name }) + }, + filter.field + ); + }) }) + ] }); +} +function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) { + if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) { + return null; + } + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( + AddFilterMenu, + { + triggerProps: { + render: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( + import_components22.Button, + { + accessibleWhenDisabled: true, + size: "compact", + className: "dataviews-filters-button", + variant: "tertiary", + disabled: !inactiveFilters.length, + ref + } + ), + children: (0, import_i18n25.__)("Add filter") + }, + ...{ filters, view, onChangeView, setOpenedFilter } + } + ); +} +var add_filter_default = (0, import_element29.forwardRef)(AddFilter); + +// packages/dataviews/build-module/components/dataviews-filters/reset-filters.mjs +var import_components23 = __toESM(require_components(), 1); +var import_i18n26 = __toESM(require_i18n(), 1); +var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); +function ResetFilter({ + filters, + view, + onChangeView +}) { + const isPrimary = (field) => filters.some( + (_filter) => _filter.field === field && _filter.isPrimary + ); + const isDisabled = !view.search && !view.filters?.some( + (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field)) + ); + return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + import_components23.Button, + { + disabled: isDisabled, + accessibleWhenDisabled: true, + size: "compact", + variant: "tertiary", + className: "dataviews-filters__reset-button", + onClick: () => { + onChangeView({ + ...view, + page: 1, + search: "", + filters: view.filters?.filter((f2) => !!f2.isLocked) || [] + }); + }, + children: (0, import_i18n26.__)("Reset") + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/use-filters.mjs +var import_element30 = __toESM(require_element(), 1); +function useFilters(fields, view) { + return (0, import_element30.useMemo)(() => { + const filters = []; + fields.forEach((field) => { + if (field.filterBy === false || !field.hasElements && !field.Edit) { + return; + } + const operators = field.filterBy.operators; + const isPrimary = !!field.filterBy?.isPrimary; + const isLocked = view.filters?.some( + (f2) => f2.field === field.id && !!f2.isLocked + ) ?? false; + filters.push({ + field: field.id, + name: field.label, + elements: field.elements, + getElements: field.getElements, + hasElements: field.hasElements, + singleSelection: operators.some( + (op) => isSingleSelectionOperator(op) + ), + operators, + isVisible: isLocked || isPrimary || !!view.filters?.some( + (f2) => f2.field === field.id && isRegisteredOperator(f2.operator) + ), + isPrimary, + isLocked + }); + }); + filters.sort((a2, b2) => { + if (a2.isLocked && !b2.isLocked) { + return -1; + } + if (!a2.isLocked && b2.isLocked) { + return 1; + } + if (a2.isPrimary && !b2.isPrimary) { + return -1; + } + if (!a2.isPrimary && b2.isPrimary) { + return 1; + } + return a2.name.localeCompare(b2.name); + }); + return filters; + }, [fields, view]); +} +var use_filters_default = useFilters; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); +function Filters({ className }) { + const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element31.useContext)(dataviews_context_default); + const addFilterRef = (0, import_element31.useRef)(null); + const filters = use_filters_default(fields, view); + const addFilter = /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + add_filter_default, + { + filters, + view, + onChangeView, + ref: addFilterRef, + setOpenedFilter + }, + "add-filter" + ); + const visibleFilters = filters.filter((filter) => filter.isVisible); + if (visibleFilters.length === 0) { + return null; + } + const filterComponents = [ + ...visibleFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + Filter, + { + filter, + view, + fields, + onChangeView, + addFilterRef, + openedFilter + }, + filter.field + ); + }), + addFilter + ]; + filterComponents.push( + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + ResetFilter, + { + filters, + view, + onChangeView + }, + "reset-filters" + ) + ); + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + gap: "sm", + style: { width: "fit-content" }, + wrap: "wrap", + className, + children: filterComponents + } + ); +} +var filters_default = (0, import_element31.memo)(Filters); + +// packages/dataviews/build-module/components/dataviews-filters/toggle.mjs +var import_element32 = __toESM(require_element(), 1); +var import_components24 = __toESM(require_components(), 1); +var import_i18n27 = __toESM(require_i18n(), 1); +var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); +function FiltersToggle() { + const { + filters, + view, + onChangeView, + setOpenedFilter, + isShowingFilter, + setIsShowingFilter + } = (0, import_element32.useContext)(dataviews_context_default); + const buttonRef = (0, import_element32.useRef)(null); + const onChangeViewWithFilterVisibility = (0, import_element32.useCallback)( + (_view) => { + onChangeView(_view); + setIsShowingFilter(true); + }, + [onChangeView, setIsShowingFilter] + ); + if (filters.length === 0) { + return null; + } + const hasVisibleFilters = filters.some((filter) => filter.isVisible); + const addFilterButtonProps = { + label: (0, import_i18n27.__)("Add filter"), + "aria-expanded": false, + isPressed: false + }; + const toggleFiltersButtonProps = { + label: (0, import_i18n27._x)("Filter", "verb"), + "aria-expanded": isShowingFilter, + isPressed: isShowingFilter, + onClick: () => { + if (!isShowingFilter) { + setOpenedFilter(null); + } + setIsShowingFilter(!isShowingFilter); + } + }; + const hasPrimaryOrLockedFilters = filters.some( + (filter) => filter.isPrimary || filter.isLocked + ); + const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components24.Button, + { + ref: buttonRef, + className: "dataviews-filters__visibility-toggle", + size: "compact", + icon: funnel_default, + disabled: hasPrimaryOrLockedFilters, + accessibleWhenDisabled: true, + ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + AddFilterMenu, + { + filters, + view, + onChangeView: onChangeViewWithFilterVisibility, + setOpenedFilter, + triggerProps: { render: buttonComponent } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + FilterVisibilityToggle, + { + buttonRef, + filtersCount: view.filters?.length, + children: buttonComponent + } + ) }); +} +function FilterVisibilityToggle({ + buttonRef, + filtersCount, + children +}) { + (0, import_element32.useEffect)( + () => () => { + buttonRef.current?.focus(); + }, + [buttonRef] + ); + return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [ + children, + !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount }) + ] }); +} +var toggle_default = FiltersToggle; + +// packages/dataviews/build-module/components/dataviews-filters/filters-toggled.mjs +var import_element33 = __toESM(require_element(), 1); +var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); +function FiltersToggled(props) { + const { isShowingFilter } = (0, import_element33.useContext)(dataviews_context_default); + if (!isShowingFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(filters_default, { ...props }); +} +var filters_toggled_default = FiltersToggled; + +// packages/dataviews/build-module/components/dataviews-layout/index.mjs +var import_element34 = __toESM(require_element(), 1); +var import_i18n28 = __toESM(require_i18n(), 1); +var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); +function DataViewsLayout({ className }) { + const { + actions = [], + data, + fields, + getItemId: getItemId3, + getItemLevel, + hasInitiallyLoaded, + isLoading, + view, + onChangeView, + selection, + onChangeSelection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + defaultLayouts, + empty = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { children: (0, import_i18n28.__)("No results") }) + } = (0, import_element34.useContext)(dataviews_context_default); + if (!hasInitiallyLoaded) { + return null; + } + const ViewComponent = VIEW_LAYOUTS.find( + (v2) => v2.type === view.type && defaultLayouts[v2.type] + )?.component; + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( + ViewComponent, + { + className, + actions, + data, + fields, + getItemId: getItemId3, + getItemLevel, + isLoading, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + renderItemLink, + isItemClickable, + view, + empty + } + ); +} + +// packages/dataviews/build-module/components/dataviews-footer/index.mjs +var import_element35 = __toESM(require_element(), 1); +var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1); +var EMPTY_ARRAY5 = []; +function DataViewsFooter() { + const { + view, + paginationInfo: { totalItems = 0, totalPages }, + data, + actions = EMPTY_ARRAY5, + isLoading, + hasInitiallyLoaded, + hasInfiniteScrollHandler + } = (0, import_element35.useContext)(dataviews_context_default); + const isRefreshing = !!isLoading && hasInitiallyLoaded && !hasInfiniteScrollHandler && !!data?.length; + const isDelayedRefreshing = useDelayedLoading(!!isRefreshing); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type); + if (!isRefreshing && (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions)) { + return null; + } + return (!!totalItems || isRefreshing) && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)( + "div", + { + className: "dataviews-footer", + inert: isRefreshing ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)( + Stack, + { + direction: "row", + justify: "end", + align: "center", + className: clsx_default("dataviews-footer__content", { + "is-refreshing": isDelayedRefreshing + }), + gap: "sm", + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(BulkActionsFooter, {}), + /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(dataviews_pagination_default, {}) + ] + } + ) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-search/index.mjs +var import_i18n29 = __toESM(require_i18n(), 1); +var import_element36 = __toESM(require_element(), 1); +var import_components25 = __toESM(require_components(), 1); +var import_compose10 = __toESM(require_compose(), 1); +var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1); +var DataViewsSearch = (0, import_element36.memo)(function Search({ label }) { + const { view, onChangeView } = (0, import_element36.useContext)(dataviews_context_default); + const [search, setSearch, debouncedSearch] = (0, import_compose10.useDebouncedInput)( + view.search + ); + (0, import_element36.useEffect)(() => { + setSearch(view.search ?? ""); + }, [view.search, setSearch]); + const onChangeViewRef = (0, import_element36.useRef)(onChangeView); + const viewRef = (0, import_element36.useRef)(view); + (0, import_element36.useEffect)(() => { + onChangeViewRef.current = onChangeView; + viewRef.current = view; + }, [onChangeView, view]); + (0, import_element36.useEffect)(() => { + if (debouncedSearch !== viewRef.current?.search) { + onChangeViewRef.current({ + ...viewRef.current, + page: 1, + search: debouncedSearch + }); + } + }, [debouncedSearch]); + const searchLabel = label || (0, import_i18n29.__)("Search"); + return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)( + import_components25.SearchControl, + { + className: "dataviews-search", + onChange: setSearch, + value: search, + label: searchLabel, + placeholder: searchLabel, + size: "compact" + } + ); +}); +var dataviews_search_default = DataViewsSearch; + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_components27 = __toESM(require_components(), 1); +var import_i18n31 = __toESM(require_i18n(), 1); +var import_element38 = __toESM(require_element(), 1); +var import_warning = __toESM(require_warning(), 1); +var import_compose11 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +var import_components26 = __toESM(require_components(), 1); +var import_i18n30 = __toESM(require_i18n(), 1); +var import_element37 = __toESM(require_element(), 1); +var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1); +function InfiniteScrollToggle() { + const context = (0, import_element37.useContext)(dataviews_context_default); + const { view, onChangeView } = context; + const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false; + if (!context.hasInfiniteScrollHandler) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( + import_components26.ToggleControl, + { + label: (0, import_i18n30.__)("Enable infinite scroll"), + help: (0, import_i18n30.__)( + "Automatically load more content as you scroll, instead of showing pagination links." + ), + checked: infiniteScrollEnabled, + onChange: (newValue) => { + onChangeView({ + ...view, + infiniteScrollEnabled: newValue + }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu5 } = unlock(import_components27.privateApis); +var DATAVIEWS_CONFIG_POPOVER_PROPS = { + className: "dataviews-config__popover", + placement: "bottom-end", + offset: 9 +}; +function ViewTypeMenu() { + const { view, onChangeView, defaultLayouts } = (0, import_element38.useContext)(dataviews_context_default); + const availableLayouts = Object.keys(defaultLayouts); + if (availableLayouts.length <= 1) { + return null; + } + const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type); + return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(Menu5, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + Menu5.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.Button, + { + size: "compact", + icon: activeView?.icon, + label: (0, import_i18n31.__)("Layout") + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => { + const config = VIEW_LAYOUTS.find( + (v2) => v2.type === layout + ); + if (!config) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + Menu5.RadioItem, + { + value: layout, + name: "view-actions-available-view", + checked: layout === view.type, + hideOnClick: true, + onChange: (e2) => { + switch (e2.target.value) { + case "list": + case "grid": + case "table": + case "pickerGrid": + case "pickerTable": + case "activity": + const viewWithoutLayout = { ...view }; + if ("layout" in viewWithoutLayout) { + delete viewWithoutLayout.layout; + } + return onChangeView({ + ...viewWithoutLayout, + type: e2.target.value, + ...defaultLayouts[e2.target.value] + }); + } + (0, import_warning.default)("Invalid dataview"); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Menu5.ItemLabel, { children: config.label }) + }, + layout + ); + }) }) + ] }); +} +function SortFieldControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const orderOptions = (0, import_element38.useMemo)(() => { + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + return sortableFields.map((field) => { + return { + label: field.label, + value: field.id + }; + }); + }, [fields]); + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.SelectControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n31.__)("Sort by"), + value: view.sort?.field, + options: orderOptions, + onChange: (value) => { + onChangeView({ + ...view, + sort: { + direction: view?.sort?.direction || "desc", + field: value + }, + showLevels: false + }); + } + } + ); +} +function SortDirectionControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + if (sortableFields.length === 0) { + return null; + } + let value = view.sort?.direction; + if (!value && view.sort?.field) { + value = "desc"; + } + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.__experimentalToggleGroupControl, + { + className: "dataviews-view-config__sort-direction", + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Order"), + value, + onChange: (newDirection) => { + if (newDirection === "asc" || newDirection === "desc") { + onChangeView({ + ...view, + sort: { + direction: newDirection, + field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field. + fields.find( + (field) => field.enableSorting !== false + )?.id || "" + }, + showLevels: false + }); + return; + } + (0, import_warning.default)("Invalid direction"); + }, + children: SORTING_DIRECTIONS.map((direction) => { + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.__experimentalToggleGroupControlOptionIcon, + { + value: direction, + icon: sortIcons[direction], + label: sortLabels[direction] + }, + direction + ); + }) + } + ); +} +function ItemsPerPageControl() { + const { view, config, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const { infiniteScrollEnabled } = view; + if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.__experimentalToggleGroupControl, + { + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Items per page"), + value: view.perPage || 10, + disabled: !view?.sort?.field, + onChange: (newItemsPerPage) => { + const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10); + onChangeView({ + ...view, + perPage: newItemsPerPageNumber, + page: 1 + }); + }, + children: config.perPageSizes.map((value) => { + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.__experimentalToggleGroupControlOption, + { + value, + label: value.toString() + }, + value + ); + }) + } + ); +} +function ResetViewButton() { + const { onReset } = (0, import_element38.useContext)(dataviews_context_default); + if (onReset === void 0) { + return null; + } + const isDisabled = onReset === false; + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.Button, + { + variant: "tertiary", + size: "compact", + disabled: isDisabled, + accessibleWhenDisabled: true, + className: "dataviews-view-config__reset-button", + onClick: () => { + if (typeof onReset === "function") { + onReset(); + } + }, + children: (0, import_i18n31.__)("Reset view") + } + ); +} +function DataviewsViewConfigDropdown() { + const { view, onReset } = (0, import_element38.useContext)(dataviews_context_default); + const popoverId = (0, import_compose11.useInstanceId)( + _DataViewsViewConfig, + "dataviews-view-config-dropdown" + ); + const activeLayout = VIEW_LAYOUTS.find( + (layout) => layout.type === view.type + ); + const isModified = typeof onReset === "function"; + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.Dropdown, + { + expandOnMobile: true, + popoverProps: { + ...DATAVIEWS_CONFIG_POPOVER_PROPS, + id: popoverId + }, + renderToggle: ({ onToggle, isOpen }) => { + return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "dataviews-view-config__toggle-wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.Button, + { + size: "compact", + icon: cog_default, + label: (0, import_i18n31._x)( + "View options", + "View is used as a noun" + ), + onClick: onToggle, + "aria-expanded": isOpen ? "true" : "false", + "aria-controls": popoverId + } + ), + isModified && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "dataviews-view-config__modified-indicator" }) + ] }); + }, + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.__experimentalDropdownContentWrapper, + { + paddingSize: "medium", + className: "dataviews-config__popover-content-wrapper", + children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-config", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)( + Stack, + { + direction: "row", + justify: "space-between", + align: "center", + className: "dataviews-view-config__header", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + import_components27.__experimentalHeading, + { + level: 2, + className: "dataviews-settings-section__title", + children: (0, import_i18n31.__)("Appearance") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(ResetViewButton, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + className: "dataviews-view-config__sort-controls", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(SortFieldControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(SortDirectionControl, {}) + ] + } + ), + !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(activeLayout.viewConfigOptions, {}), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(InfiniteScrollToggle, {}), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(ItemsPerPageControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PropertiesSection, {}) + ] }) + ] + } + ) + } + ) + } + ); +} +function _DataViewsViewConfig() { + return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(ViewTypeMenu, {}), + /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(DataviewsViewConfigDropdown, {}) + ] }); +} +var DataViewsViewConfig = (0, import_element38.memo)(_DataViewsViewConfig); +var dataviews_view_config_default = DataViewsViewConfig; + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_components28 = __toESM(require_components(), 1); +var import_element39 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs +function getCustomValidity(isValid2, validity) { + let customValidity; + if (isValid2?.required && validity?.required) { + customValidity = validity?.required?.message ? validity.required : void 0; + } else if (isValid2?.pattern && validity?.pattern) { + customValidity = validity.pattern; + } else if (isValid2?.min && validity?.min) { + customValidity = validity.min; + } else if (isValid2?.max && validity?.max) { + customValidity = validity.max; + } else if (isValid2?.minLength && validity?.minLength) { + customValidity = validity.minLength; + } else if (isValid2?.maxLength && validity?.maxLength) { + customValidity = validity.maxLength; + } else if (isValid2?.elements && validity?.elements) { + customValidity = validity.elements; + } else if (validity?.custom) { + customValidity = validity.custom; + } + return customValidity; +} + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1); +var { ValidatedCheckboxControl } = unlock(import_components28.privateApis); +function Checkbox({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, label, description, isValid: isValid2 } = field; + const onChangeControl = (0, import_element39.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [data, getValue, onChange, setValue]); + return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + ValidatedCheckboxControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/combobox.mjs +var import_components29 = __toESM(require_components(), 1); +var import_element40 = __toESM(require_element(), 1); +var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1); +var { ValidatedComboboxControl } = unlock(import_components29.privateApis); +function Combobox3({ + data, + field, + onChange, + hideLabelFromVision, + validity +}) { + const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element40.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(import_components29.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)( + ValidatedComboboxControl, + { + required: !!field.isValid?.required, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + placeholder, + options: elements, + onChange: onChangeControl, + hideLabelFromVision, + allowReset: true, + expandOnFocus: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_components31 = __toESM(require_components(), 1); +var import_element42 = __toESM(require_element(), 1); +var import_i18n33 = __toESM(require_i18n(), 1); +var import_date3 = __toESM(require_date(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs +var import_components30 = __toESM(require_components(), 1); +var import_element41 = __toESM(require_element(), 1); +var import_i18n32 = __toESM(require_i18n(), 1); +var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1); +var TIME_UNITS_OPTIONS = { + [OPERATOR_IN_THE_PAST]: [ + { value: "days", label: (0, import_i18n32.__)("Days") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks") }, + { value: "months", label: (0, import_i18n32.__)("Months") }, + { value: "years", label: (0, import_i18n32.__)("Years") } + ], + [OPERATOR_OVER]: [ + { value: "days", label: (0, import_i18n32.__)("Days ago") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks ago") }, + { value: "months", label: (0, import_i18n32.__)("Months ago") }, + { value: "years", label: (0, import_i18n32.__)("Years ago") } + ] +}; +function RelativeDateControl({ + className, + data, + field, + onChange, + hideLabelFromVision, + operator +}) { + const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"]; + const { id, label, getValue, setValue } = field; + const fieldValue = getValue({ item: data }); + const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {}; + const onChangeValue = (0, import_element41.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: { value: Number(newValue), unit } + }) + ), + [onChange, setValue, data, unit] + ); + const onChangeUnit = (0, import_element41.useCallback)( + (newUnit) => onChange( + setValue({ + item: data, + value: { value: relValue, unit: newUnit } + }) + ), + [onChange, setValue, data, relValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + import_components30.BaseControl, + { + id, + className: clsx_default(className, "dataviews-controls__relative-date"), + label, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(Stack, { direction: "row", gap: "sm", children: [ + /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + import_components30.__experimentalNumberControl, + { + __next40pxDefaultSize: true, + className: "dataviews-controls__relative-date-number", + spinControls: "none", + min: 1, + step: 1, + value: relValue, + onChange: onChangeValue + } + ), + /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( + import_components30.SelectControl, + { + className: "dataviews-controls__relative-date-unit", + __next40pxDefaultSize: true, + label: (0, import_i18n32.__)("Unit"), + value: unit, + options, + onChange: onChangeUnit, + hideLabelFromVision: true + } + ) + ] }) + } + ); +} + +// packages/dataviews/build-module/field-types/utils/parse-date-time.mjs +var import_date2 = __toESM(require_date(), 1); +function parseDateTime(dateTimeString) { + if (!dateTimeString) { + return null; + } + const parsed = (0, import_date2.getDate)(dateTimeString); + return parsed && isValid(parsed) ? parsed : null; +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar, ValidatedInputControl } = unlock(import_components31.privateApis); +var formatDateTime = (value) => { + if (!value) { + return ""; + } + return (0, import_date3.dateI18n)("Y-m-d\\TH:i", (0, import_date3.getDate)(value)); +}; +function CalendarDateTimeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, description, setValue, getValue, isValid: isValid2 } = field; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element42.useState)(() => { + const parsedDate = parseDateTime(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const inputControlRef = (0, import_element42.useRef)(null); + const validationTimeoutRef = (0, import_element42.useRef)(void 0); + const previousFocusRef = (0, import_element42.useRef)(null); + const onChangeCallback = (0, import_element42.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + (0, import_element42.useEffect)(() => { + return () => { + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + }; + }, []); + const onSelectDate = (0, import_element42.useCallback)( + (newDate) => { + let dateTimeValue; + if (newDate) { + const wpDate = (0, import_date3.dateI18n)("Y-m-d", newDate); + let wpTime; + if (value) { + wpTime = (0, import_date3.dateI18n)("H:i", (0, import_date3.getDate)(value)); + } else { + wpTime = (0, import_date3.dateI18n)("H:i", newDate); + } + const finalDateTime = (0, import_date3.getDate)(`${wpDate}T${wpTime}`); + dateTimeValue = finalDateTime.toISOString(); + onChangeCallback(dateTimeValue); + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + } else { + onChangeCallback(void 0); + } + previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement; + validationTimeoutRef.current = setTimeout(() => { + if (inputControlRef.current) { + inputControlRef.current.focus(); + inputControlRef.current.blur(); + onChangeCallback(dateTimeValue); + if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) { + previousFocusRef.current.focus(); + } + } + }, 0); + }, + [onChangeCallback, value] + ); + const handleManualDateTimeChange = (0, import_element42.useCallback)( + (newValue) => { + if (newValue) { + const dateTime = (0, import_date3.getDate)(newValue); + onChangeCallback(dateTime.toISOString()); + const parsedDate = parseDateTime(dateTime.toISOString()); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } else { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const { format: fieldFormat } = field; + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek; + const { + timezone: { string: timezoneString } + } = (0, import_date3.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + import_components31.BaseControl, + { + id, + label: displayLabel, + help: description, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + DateCalendar, + { + style: { width: "100%" }, + selected: value ? parseDateTime(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ), + /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + ValidatedInputControl, + { + ref: inputControlRef, + __next40pxDefaultSize: true, + required: !!isValid2?.required, + customValidity: getCustomValidity(isValid2, validity), + type: "datetime-local", + label: (0, import_i18n33.__)("Date time"), + hideLabelFromVision: true, + value: formatDateTime(value), + onChange: handleManualDateTimeChange + } + ) + ] }) + } + ); +} +function DateTime({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__datetime", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + CalendarDateTimeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/date.mjs +var import_components32 = __toESM(require_components(), 1); +var import_element43 = __toESM(require_element(), 1); +var import_i18n34 = __toESM(require_i18n(), 1); +var import_date4 = __toESM(require_date(), 1); +var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components32.privateApis); +var DATE_PRESETS = [ + { + id: "today", + label: (0, import_i18n34.__)("Today"), + getValue: () => (0, import_date4.getDate)(null) + }, + { + id: "yesterday", + label: (0, import_i18n34.__)("Yesterday"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 1); + } + }, + { + id: "past-week", + label: (0, import_i18n34.__)("Past week"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 7); + } + }, + { + id: "past-month", + label: (0, import_i18n34.__)("Past month"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subMonths(today, 1); + } + } +]; +var DATE_RANGE_PRESETS = [ + { + id: "last-7-days", + label: (0, import_i18n34.__)("Last 7 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 7), today]; + } + }, + { + id: "last-30-days", + label: (0, import_i18n34.__)("Last 30 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 30), today]; + } + }, + { + id: "month-to-date", + label: (0, import_i18n34.__)("Month to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfMonth(today), today]; + } + }, + { + id: "last-year", + label: (0, import_i18n34.__)("Last year"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subYears(today, 1), today]; + } + }, + { + id: "year-to-date", + label: (0, import_i18n34.__)("Year to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfYear(today), today]; + } + } +]; +var parseDate = (dateString) => { + if (!dateString) { + return null; + } + const parsed = (0, import_date4.getDate)(dateString); + return parsed && isValid(parsed) ? parsed : null; +}; +var formatDate = (date) => { + if (!date) { + return ""; + } + return typeof date === "string" ? date : format(date, "yyyy-MM-dd"); +}; +function ValidatedDateControl({ + field, + validity, + inputRefs, + isTouched, + setIsTouched, + children +}) { + const { isValid: isValid2 } = field; + const [customValidity, setCustomValidity] = (0, import_element43.useState)(void 0); + const validateRefs = (0, import_element43.useCallback)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + for (const ref of refs) { + const input = ref.current; + if (input && !input.validity.valid) { + setCustomValidity({ + type: "invalid", + message: input.validationMessage + }); + return; + } + } + setCustomValidity(void 0); + }, [inputRefs]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + for (const ref of refs) { + const input = ref.current; + if (input) { + input.setCustomValidity( + result?.type === "invalid" && result.message ? result.message : "" + ); + } + } + }, [inputRefs, isValid2, validity]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const handleInvalid = (event) => { + event.preventDefault(); + setIsTouched(true); + }; + for (const ref of refs) { + ref.current?.addEventListener("invalid", handleInvalid); + } + return () => { + for (const ref of refs) { + ref.current?.removeEventListener("invalid", handleInvalid); + } + }; + }, [inputRefs, setIsTouched]); + (0, import_element43.useEffect)(() => { + if (!isTouched) { + return; + } + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + if (result) { + setCustomValidity(result); + } else { + validateRefs(); + } + }, [isTouched, isValid2, validity, validateRefs]); + const onBlur = (event) => { + if (isTouched) { + return; + } + if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) { + setIsTouched(true); + } + }; + return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { onBlur, children: [ + children, + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)( + "p", + { + className: clsx_default( + "components-validated-control__indicator", + customValidity.type === "invalid" ? "is-invalid" : void 0 + ), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.Icon, + { + className: "components-validated-control__indicator-icon", + icon: error_default, + size: 16, + fill: "currentColor" + } + ), + customValidity.message + ] + } + ) }) + ] }); +} +function CalendarDateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { + id, + label, + setValue, + getValue, + isValid: isValid2, + format: fieldFormat + } = field; + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + const parsedDate = parseDate(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const validityTargetRef = (0, import_element43.useRef)(null); + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const onSelectDate = (0, import_element43.useCallback)( + (newDate) => { + const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0; + onChangeCallback(dateValue); + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const presetDate = preset.getValue(); + const dateValue = formatDate(presetDate); + setCalendarMonth(presetDate); + onChangeCallback(dateValue); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (newValue) => { + onChangeCallback(newValue); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const { + timezone: { string: timezoneString } + } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: validityTargetRef, + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + disabled: !!selectedPresetId, + accessibleWhenDisabled: false, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: validityTargetRef, + type: "date", + label: (0, import_i18n34.__)("Date"), + hideLabelFromVision: true, + value, + onChange: handleManualDateChange, + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + DateCalendar2, + { + style: { width: "100%" }, + selected: value ? parseDate(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function CalendarDateRangeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, getValue, setValue, format: fieldFormat } = field; + let value; + const fieldValue = getValue({ item: data }); + if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) { + value = fieldValue; + } + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const selectedRange = (0, import_element43.useMemo)(() => { + if (!value) { + return { from: void 0, to: void 0 }; + } + const [from, to] = value; + return { + from: parseDate(from) || void 0, + to: parseDate(to) || void 0 + }; + }, [value]); + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + return selectedRange.from || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const fromInputRef = (0, import_element43.useRef)(null); + const toInputRef = (0, import_element43.useRef)(null); + const updateDateRange = (0, import_element43.useCallback)( + (fromDate, toDate2) => { + if (fromDate && toDate2) { + onChangeCallback([ + formatDate(fromDate), + formatDate(toDate2) + ]); + } else if (!fromDate && !toDate2) { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const onSelectCalendarRange = (0, import_element43.useCallback)( + (newRange) => { + updateDateRange(newRange?.from, newRange?.to); + setSelectedPresetId(null); + setIsTouched(true); + }, + [updateDateRange] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const [startDate, endDate] = preset.getValue(); + setCalendarMonth(startDate); + updateDateRange(startDate, endDate); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [updateDateRange] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (fromOrTo, newValue) => { + const [currentFrom, currentTo] = value || [ + void 0, + void 0 + ]; + const updatedFrom = fromOrTo === "from" ? newValue : currentFrom; + const updatedTo = fromOrTo === "to" ? newValue : currentTo; + updateDateRange(updatedFrom, updatedTo); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [value, updateDateRange] + ); + const { timezone } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (field.isValid?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!field.isValid?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: [fromInputRef, toInputRef], + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_RANGE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + accessibleWhenDisabled: false, + disabled: !!selectedPresetId, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "space-between", + className: "dataviews-controls__date-range-inputs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: fromInputRef, + type: "date", + label: (0, import_i18n34.__)("From"), + hideLabelFromVision: true, + value: value?.[0], + onChange: (newValue) => handleManualDateChange("from", newValue), + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: toInputRef, + type: "date", + label: (0, import_i18n34.__)("To"), + hideLabelFromVision: true, + value: value?.[1], + onChange: (newValue) => handleManualDateChange("to", newValue), + required: !!field.isValid?.required + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + DateRangeCalendar, + { + style: { width: "100%" }, + selected: selectedRange, + onSelect: onSelectCalendarRange, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezone.string || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function DateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__date", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + if (operator === OPERATOR_BETWEEN) { + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + CalendarDateRangeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + CalendarDateControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/select.mjs +var import_components33 = __toESM(require_components(), 1); +var import_element44 = __toESM(require_element(), 1); +var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1); +var { ValidatedSelectControl } = unlock(import_components33.privateApis); +function Select({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { type, label, description, getValue, setValue, isValid: isValid2 } = field; + const isMultiple = type === "array"; + const value = getValue({ item: data }) ?? (isMultiple ? [] : ""); + const onChangeControl = (0, import_element44.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_components33.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( + ValidatedSelectControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + options: elements, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + multiple: isMultiple + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs +var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1); +var ELEMENTS_THRESHOLD = 10; +function AdaptiveSelect(props) { + const { field } = props; + const { elements } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (elements.length >= ELEMENTS_THRESHOLD) { + return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Combobox3, { ...props }); + } + return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Select, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_components35 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs +var import_components34 = __toESM(require_components(), 1); +var import_element45 = __toESM(require_element(), 1); +var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components34.privateApis); +function ValidatedText({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + type, + prefix, + suffix, + validity +}) { + const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element45.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: newValue + }) + ), + [data, setValue, onChange] + ); + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)( + ValidatedInputControl2, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + hideLabelFromVision, + type, + prefix, + suffix, + pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1); +function Email({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "email", + prefix: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_components35.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_components35.Icon, { icon: envelope_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/telephone.mjs +var import_components36 = __toESM(require_components(), 1); +var import_jsx_runtime93 = __toESM(require_jsx_runtime(), 1); +function Telephone({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "tel", + prefix: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components36.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components36.Icon, { icon: mobile_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/url.mjs +var import_components37 = __toESM(require_components(), 1); +var import_jsx_runtime94 = __toESM(require_jsx_runtime(), 1); +function Url({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "url", + prefix: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_components37.Icon, { icon: link_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs +var import_components38 = __toESM(require_components(), 1); +var import_element46 = __toESM(require_element(), 1); +var import_i18n35 = __toESM(require_i18n(), 1); +var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1); +var { ValidatedNumberControl } = unlock(import_components38.privateApis); +function toNumberOrEmpty(value) { + if (value === "" || value === void 0) { + return ""; + } + const number = Number(value); + return Number.isFinite(number) ? number : ""; +} +function BetweenControls({ + value, + onChange, + hideLabelFromVision, + step +}) { + const [min = "", max = ""] = value; + const onChangeMin = (0, import_element46.useCallback)( + (newValue) => onChange([toNumberOrEmpty(newValue), max]), + [onChange, max] + ); + const onChangeMax = (0, import_element46.useCallback)( + (newValue) => onChange([min, toNumberOrEmpty(newValue)]), + [onChange, min] + ); + return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + import_components38.BaseControl, + { + help: (0, import_i18n35.__)("The max. value must be greater than the min. value."), + children: /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_components38.Flex, { direction: "row", gap: 4, children: [ + /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Min."), + value: min, + max: max ? Number(max) - step : void 0, + onChange: onChangeMin, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ), + /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Max."), + value: max, + min: min ? Number(min) + step : void 0, + onChange: onChangeMax, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ) + ] }) + } + ); +} +function ValidatedNumber({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + const decimals = field.format?.decimals ?? 0; + const step = Math.pow(10, Math.abs(decimals) * -1); + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + // Do not convert an empty string or undefined to a number, + // otherwise there's a mismatch between the UI control (empty) + // and the data relied by onChange (0). + value: ["", void 0].includes(newValue) ? void 0 : Number(newValue) + }) + ); + }, + [data, onChange, setValue] + ); + const onChangeBetweenControls = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + if (operator === OPERATOR_BETWEEN) { + let valueBetween = ["", ""]; + if (Array.isArray(value) && value.length === 2 && value.every( + (element) => typeof element === "number" || element === "" + )) { + valueBetween = value; + } + return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + BetweenControls, + { + value: valueBetween, + onChange: onChangeBetweenControls, + hideLabelFromVision, + step + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( + ValidatedNumberControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + value, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + step, + min: isValid2.min ? isValid2.min.constraint : void 0, + max: isValid2.max ? isValid2.max.constraint : void 0 + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/integer.mjs +var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1); +function Integer(props) { + return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/number.mjs +var import_jsx_runtime97 = __toESM(require_jsx_runtime(), 1); +function Number2(props) { + return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/radio.mjs +var import_components39 = __toESM(require_components(), 1); +var import_element47 = __toESM(require_element(), 1); +var import_jsx_runtime98 = __toESM(require_jsx_runtime(), 1); +var { ValidatedRadioControl } = unlock(import_components39.privateApis); +function Radio({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = getValue({ item: data }); + const onChangeControl = (0, import_element47.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_components39.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)( + ValidatedRadioControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + onChange: onChangeControl, + options: elements, + selected: value, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/text.mjs +var import_element48 = __toESM(require_element(), 1); +var import_jsx_runtime99 = __toESM(require_jsx_runtime(), 1); +function Text({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { prefix, suffix } = config || {}; + return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + prefix: prefix ? (0, import_element48.createElement)(prefix) : void 0, + suffix: suffix ? (0, import_element48.createElement)(suffix) : void 0 + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle.mjs +var import_components40 = __toESM(require_components(), 1); +var import_element49 = __toESM(require_element(), 1); +var import_jsx_runtime100 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleControl } = unlock(import_components40.privateApis); +function Toggle({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const onChangeControl = (0, import_element49.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [onChange, setValue, data, getValue]); + return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)( + ValidatedToggleControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/textarea.mjs +var import_components41 = __toESM(require_components(), 1); +var import_element50 = __toESM(require_element(), 1); +var import_jsx_runtime101 = __toESM(require_jsx_runtime(), 1); +var { ValidatedTextareaControl } = unlock(import_components41.privateApis); +function Textarea({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { rows = 4 } = config || {}; + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }); + const onChangeControl = (0, import_element50.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( + ValidatedTextareaControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + rows, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs +var import_components42 = __toESM(require_components(), 1); +var import_element51 = __toESM(require_element(), 1); +var import_jsx_runtime102 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleGroupControl } = unlock(import_components42.privateApis); +function ToggleGroup({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element51.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(import_components42.Spinner, {}); + } + if (elements.length === 0) { + return null; + } + const selectedOption = elements.find((el) => el.value === value); + return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + ValidatedToggleGroupControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + __next40pxDefaultSize: true, + isBlock: true, + label: field.label, + help: selectedOption?.description || field.description, + onChange: onChangeControl, + value, + hideLabelFromVision, + children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + import_components42.__experimentalToggleGroupControlOption, + { + label: el.label, + value: el.value + }, + el.value + )) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/array.mjs +var import_components43 = __toESM(require_components(), 1); +var import_element52 = __toESM(require_element(), 1); +var import_jsx_runtime103 = __toESM(require_jsx_runtime(), 1); +var { ValidatedFormTokenField } = unlock(import_components43.privateApis); +function ArrayControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const arrayValueAsElements = (0, import_element52.useMemo)( + () => Array.isArray(value) ? value.map((token) => { + const element = elements?.find( + (suggestion) => suggestion.value === token + ); + return element || { value: token, label: token }; + }) : [], + [value, elements] + ); + const onChangeControl = (0, import_element52.useCallback)( + (tokens) => { + const valueTokens = tokens.map((token) => { + if (typeof token === "object" && "value" in token) { + return token.value; + } + return token; + }); + onChange(setValue({ item: data, value: valueTokens })); + }, + [onChange, setValue, data] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_components43.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( + ValidatedFormTokenField, + { + required: !!isValid2?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label: hideLabelFromVision ? void 0 : label, + value: arrayValueAsElements, + onChange: onChangeControl, + placeholder, + suggestions: elements?.map((element) => element.value), + __experimentalValidateInput: (token) => { + if (field.isValid?.elements && elements) { + return elements.some( + (element) => element.value === token || element.label === token + ); + } + return true; + }, + __experimentalExpandOnFocus: elements && elements.length > 0, + __experimentalShowHowTo: !field.isValid?.elements, + displayTransform: (token) => { + if (typeof token === "object" && "label" in token) { + return token.label; + } + if (typeof token === "string" && elements) { + const element = elements.find( + (el) => el.value === token + ); + return element?.label || token; + } + return token; + }, + __experimentalRenderItem: ({ item }) => { + if (typeof item === "string" && elements) { + const element = elements.find( + (el) => el.value === item + ); + return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { children: element?.label || item }); + } + return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { children: item }); + } + } + ); +} + +// node_modules/colord/index.mjs +var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; +var t = function(r3) { + return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; +}; +var n = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0; +}; +var e = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2; +}; +var u = function(r3) { + return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; +}; +var a = function(r3) { + return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; +}; +var o = function(r3) { + return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; +}; +var i = /^#([0-9a-f]{3,8})$/i; +var s = function(r3) { + var t2 = r3.toString(16); + return t2.length < 2 ? "0" + t2 : t2; +}; +var h = function(r3) { + var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0; + return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; +}; +var b = function(r3) { + var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; + t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100; + var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6; + return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 }; +}; +var g = function(r3) { + return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; +}; +var d = function(r3) { + return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; +}; +var f = function(r3) { + return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a })); + var t2, n2, e2; +}; +var c = function(r3) { + return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a }; + var t2, n2, e2, u2; +}; +var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var y = { string: [[function(r3) { + var t2 = i.exec(r3); + return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; +}, "hex"], [function(r3) { + var t2 = v.exec(r3) || m.exec(r3); + return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null; +}, "rgb"], [function(t2) { + var n2 = l.exec(t2) || p.exec(t2); + if (!n2) return null; + var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); + return f(a2); +}, "hsl"]], object: [[function(r3) { + var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2; + return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; +}, "rgb"], [function(r3) { + var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2; + if (!t(n2) || !t(e2) || !t(u2)) return null; + var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) }); + return f(i2); +}, "hsl"], [function(r3) { + var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; + if (!t(n2) || !t(a2) || !t(o2)) return null; + var h2 = (function(r4) { + return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; + })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) }); + return b(h2); +}, "hsv"]] }; +var N = function(r3, t2) { + for (var n2 = 0; n2 < t2.length; n2++) { + var e2 = t2[n2][0](r3); + if (e2) return [e2, t2[n2][1]]; + } + return [null, void 0]; +}; +var x = function(r3) { + return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; +}; +var M = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a }; +}; +var H = function(r3) { + return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; +}; +var $ = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a }; +}; +var j = (function() { + function r3(r4) { + this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; + } + return r3.prototype.isValid = function() { + return null !== this.parsed; + }, r3.prototype.brightness = function() { + return n(H(this.rgba), 2); + }, r3.prototype.isDark = function() { + return H(this.rgba) < 0.5; + }, r3.prototype.isLight = function() { + return H(this.rgba) >= 0.5; + }, r3.prototype.toHex = function() { + return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2; + var r4, t2, e2, u2, a2, i2; + }, r3.prototype.toRgb = function() { + return o(this.rgba); + }, r3.prototype.toRgbString = function() { + return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsl = function() { + return d(c(this.rgba)); + }, r3.prototype.toHslString = function() { + return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsv = function() { + return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; + var r4; + }, r3.prototype.invert = function() { + return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); + var r4; + }, r3.prototype.saturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); + }, r3.prototype.desaturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); + }, r3.prototype.grayscale = function() { + return w(M(this.rgba, -1)); + }, r3.prototype.lighten = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); + }, r3.prototype.darken = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); + }, r3.prototype.rotate = function(r4) { + return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); + }, r3.prototype.alpha = function(r4) { + return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3); + var t2; + }, r3.prototype.hue = function(r4) { + var t2 = c(this.rgba); + return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h); + }, r3.prototype.isEqual = function(r4) { + return this.toHex() === w(r4).toHex(); + }, r3; +})(); +var w = function(r3) { + return r3 instanceof j ? r3 : new j(r3); +}; + +// packages/dataviews/build-module/components/dataform-controls/color.mjs +var import_components44 = __toESM(require_components(), 1); +var import_element53 = __toESM(require_element(), 1); +var import_i18n36 = __toESM(require_i18n(), 1); +var import_jsx_runtime104 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl3 } = unlock(import_components44.privateApis); +var ColorPickerDropdown = ({ + color, + onColorChange +}) => { + const validColor = color && w(color).isValid() ? color : "#ffffff"; + return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)( + import_components44.Dropdown, + { + className: "dataviews-controls__color-picker-dropdown", + popoverProps: { resize: false }, + renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime104.jsx)( + import_components44.Button, + { + onClick: onToggle, + "aria-label": (0, import_i18n36.__)("Open color picker"), + size: "small", + icon: () => /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(import_components44.ColorIndicator, { colorValue: validColor }) + } + ), + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(import_components44.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime104.jsx)( + import_components44.ColorPicker, + { + color: validColor, + onChange: onColorChange, + enableAlpha: true + } + ) }) + } + ); +}; +function Color({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }) || ""; + const handleColorChange = (0, import_element53.useCallback)( + (newColor) => { + onChange(setValue({ item: data, value: newColor })); + }, + [data, onChange, setValue] + ); + const handleInputChange = (0, import_element53.useCallback)( + (newValue) => { + onChange(setValue({ item: data, value: newValue || "" })); + }, + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)( + ValidatedInputControl3, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value, + help: description, + onChange: handleInputChange, + hideLabelFromVision, + type: "text", + prefix: /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(import_components44.__experimentalInputControlPrefixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime104.jsx)( + ColorPickerDropdown, + { + color: value, + onColorChange: handleColorChange + } + ) }) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/password.mjs +var import_components45 = __toESM(require_components(), 1); +var import_element54 = __toESM(require_element(), 1); +var import_i18n37 = __toESM(require_i18n(), 1); +var import_jsx_runtime105 = __toESM(require_jsx_runtime(), 1); +function Password({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const [isVisible2, setIsVisible] = (0, import_element54.useState)(false); + const toggleVisibility = (0, import_element54.useCallback)(() => { + setIsVisible((prev) => !prev); + }, []); + return /* @__PURE__ */ (0, import_jsx_runtime105.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: isVisible2 ? "text" : "password", + suffix: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_components45.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)( + import_components45.Button, + { + icon: isVisible2 ? unseen_default : seen_default, + onClick: toggleVisibility, + size: "small", + label: isVisible2 ? (0, import_i18n37.__)("Hide password") : (0, import_i18n37.__)("Show password") + } + ) }) + } + } + ); +} + +// packages/dataviews/build-module/field-types/utils/has-elements.mjs +function hasElements(field) { + return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function"; +} + +// packages/dataviews/build-module/components/dataform-controls/index.mjs +var import_jsx_runtime106 = __toESM(require_jsx_runtime(), 1); +var FORM_CONTROLS = { + adaptiveSelect: AdaptiveSelect, + array: ArrayControl, + checkbox: Checkbox, + color: Color, + combobox: Combobox3, + datetime: DateTime, + date: DateControl, + email: Email, + telephone: Telephone, + url: Url, + integer: Integer, + number: Number2, + password: Password, + radio: Radio, + select: Select, + text: Text, + toggle: Toggle, + textarea: Textarea, + toggleGroup: ToggleGroup +}; +function isEditConfig(value) { + return value && typeof value === "object" && typeof value.control === "string"; +} +function createConfiguredControl(config) { + const { control, ...controlConfig } = config; + const BaseControlType = getControlByType(control); + if (BaseControlType === null) { + return null; + } + return function ConfiguredControl(props) { + return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(BaseControlType, { ...props, config: controlConfig }); + }; +} +function getControl(field, fallback) { + if (typeof field.Edit === "function") { + return field.Edit; + } + if (typeof field.Edit === "string") { + return getControlByType(field.Edit); + } + if (isEditConfig(field.Edit)) { + return createConfiguredControl(field.Edit); + } + if (hasElements(field) && field.type !== "array") { + return getControlByType("adaptiveSelect"); + } + if (fallback === null) { + return null; + } + return getControlByType(fallback); +} +function getControlByType(type) { + if (Object.keys(FORM_CONTROLS).includes(type)) { + return FORM_CONTROLS[type]; + } + return null; +} + +// packages/dataviews/build-module/field-types/utils/get-filter-by.mjs +function getFilterBy(field, defaultOperators, validOperators) { + if (field.filterBy === false) { + return false; + } + const operators = field.filterBy?.operators?.filter( + (op) => validOperators.includes(op) + ) ?? defaultOperators; + if (operators.length === 0) { + return false; + } + return { + isPrimary: !!field.filterBy?.isPrimary, + operators + }; +} +var get_filter_by_default = getFilterBy; + +// packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs +var getValueFromId = (id) => ({ item }) => { + const path = id.split("."); + let value = item; + for (const segment of path) { + if (value.hasOwnProperty(segment)) { + value = value[segment]; + } else { + value = void 0; + } + } + return value; +}; +var get_value_from_id_default = getValueFromId; + +// packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs +var setValueFromId = (id) => ({ value }) => { + const path = id.split("."); + const result = {}; + let current = result; + for (const segment of path.slice(0, -1)) { + current[segment] = {}; + current = current[segment]; + } + current[path.at(-1)] = value; + return result; +}; +var set_value_from_id_default = setValueFromId; + +// packages/dataviews/build-module/field-types/email.mjs +var import_i18n38 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/render-from-elements.mjs +function RenderFromElements({ + item, + field +}) { + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = field.getValue({ item }); + if (isLoading) { + return value; + } + if (elements.length === 0) { + return value; + } + return elements?.find((element) => element.value === value)?.label || field.getValue({ item }); +} + +// packages/dataviews/build-module/field-types/utils/render-default.mjs +var import_jsx_runtime107 = __toESM(require_jsx_runtime(), 1); +function render({ + item, + field +}) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(RenderFromElements, { item, field }); + } + return field.getValueFormatted({ item, field }); +} + +// packages/dataviews/build-module/field-types/utils/sort-text.mjs +var sort_text_default = (a2, b2, direction) => { + return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2); +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-required.mjs +function isValidRequired(item, field) { + const value = field.getValue({ item }); + return ![void 0, "", null].includes(value); +} + +// packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs +function isValidMinLength(item, field) { + if (typeof field.isValid.minLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length >= field.isValid.minLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs +function isValidMaxLength(item, field) { + if (typeof field.isValid.maxLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length <= field.isValid.maxLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs +function isValidPattern(item, field) { + if (field.isValid.pattern?.constraint === void 0) { + return true; + } + try { + const regexp = new RegExp(field.isValid.pattern.constraint); + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return regexp.test(String(value)); + } catch { + return false; + } +} + +// packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs +function isValidElements(item, field) { + const elements = field.elements ?? []; + const validValues = elements.map((el) => el.value); + if (validValues.length === 0) { + return true; + } + const value = field.getValue({ item }); + return [].concat(value).every((v2) => validValues.includes(v2)); +} + +// packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs +function getValueFormatted({ + item, + field +}) { + return field.getValue({ item }); +} +var get_value_formatted_default_default = getValueFormatted; + +// packages/dataviews/build-module/field-types/email.mjs +var emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; +function isValidCustom(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !emailRegex.test(value)) { + return (0, import_i18n38.__)("Value must be a valid email address."); + } + return null; +} +var email_default = { + type: "email", + render, + Edit: "email", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements, + custom: isValidCustom + } +}; + +// packages/dataviews/build-module/field-types/integer.mjs +var import_i18n39 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/sort-number.mjs +var sort_number_default = (a2, b2, direction) => { + return direction === "asc" ? a2 - b2 : b2 - a2; +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-min.mjs +function isValidMin(item, field) { + if (typeof field.isValid.min?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) >= field.isValid.min.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max.mjs +function isValidMax(item, field) { + if (typeof field.isValid.max?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) <= field.isValid.max.constraint; +} + +// packages/dataviews/build-module/field-types/integer.mjs +var format2 = { + separatorThousand: "," +}; +function getValueFormatted2({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatInteger; + if (field.type !== "integer") { + formatInteger = format2; + } else { + formatInteger = field.format; + } + const { separatorThousand } = formatInteger; + const integerValue = Math.trunc(value); + if (!separatorThousand) { + return String(integerValue); + } + return String(integerValue).replace( + /\B(?=(\d{3})+(?!\d))/g, + separatorThousand + ); +} +function isValidCustom2(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Number.isInteger(value)) { + return (0, import_i18n39.__)("Value must be an integer."); + } + return null; +} +var integer_default = { + type: "integer", + render, + Edit: "integer", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format2, + getValueFormatted: getValueFormatted2, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom2 + } +}; + +// packages/dataviews/build-module/field-types/number.mjs +var import_i18n40 = __toESM(require_i18n(), 1); +var format3 = { + separatorThousand: ",", + separatorDecimal: ".", + decimals: 2 +}; +function getValueFormatted3({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatNumber; + if (field.type !== "number") { + formatNumber = format3; + } else { + formatNumber = field.format; + } + const { separatorThousand, separatorDecimal, decimals } = formatNumber; + const fixedValue = value.toFixed(decimals); + const [integerPart, decimalPart] = fixedValue.split("."); + const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart; + return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart; +} +function isEmpty2(value) { + return value === "" || value === void 0 || value === null; +} +function isValidCustom3(item, field) { + const value = field.getValue({ item }); + if (!isEmpty2(value) && !Number.isFinite(value)) { + return (0, import_i18n40.__)("Value must be a number."); + } + return null; +} +var number_default = { + type: "number", + render, + Edit: "number", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format3, + getValueFormatted: getValueFormatted3, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom3 + } +}; + +// packages/dataviews/build-module/field-types/text.mjs +var text_default = { + type: "text", + render, + Edit: "text", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + // Single selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/datetime.mjs +var import_date6 = __toESM(require_date(), 1); +var format4 = { + datetime: (0, import_date6.getSettings)().formats.datetime, + weekStartsOn: (0, import_date6.getSettings)().l10n.startOfWeek +}; +function getValueFormatted4({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDatetime; + if (field.type !== "datetime") { + formatDatetime = format4; + } else { + formatDatetime = field.format; + } + return (0, import_date6.dateI18n)(formatDatetime.datetime, (0, import_date6.getDate)(value)); +} +var sort = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var datetime_default = { + type: "datetime", + render, + Edit: "datetime", + sort, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + format: format4, + getValueFormatted: getValueFormatted4, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/date.mjs +var import_date7 = __toESM(require_date(), 1); +var format5 = { + date: (0, import_date7.getSettings)().formats.date, + weekStartsOn: (0, import_date7.getSettings)().l10n.startOfWeek +}; +function getValueFormatted5({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDate2; + if (field.type !== "date") { + formatDate2 = format5; + } else { + formatDate2 = field.format; + } + return (0, import_date7.dateI18n)(formatDate2.date, (0, import_date7.getDate)(value)); +} +var sort2 = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var date_default = { + type: "date", + render, + Edit: "date", + sort: sort2, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + format: format5, + getValueFormatted: getValueFormatted5, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/boolean.mjs +var import_i18n41 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs +function isValidRequiredForBool(item, field) { + const value = field.getValue({ item }); + return value === true; +} + +// packages/dataviews/build-module/field-types/boolean.mjs +function getValueFormatted6({ + item, + field +}) { + const value = field.getValue({ item }); + if (value === true) { + return (0, import_i18n41.__)("True"); + } + if (value === false) { + return (0, import_i18n41.__)("False"); + } + return ""; +} +function isValidCustom4(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && ![true, false].includes(value)) { + return (0, import_i18n41.__)("Value must be true, false, or undefined"); + } + return null; +} +var sort3 = (a2, b2, direction) => { + const boolA = Boolean(a2); + const boolB = Boolean(b2); + if (boolA === boolB) { + return 0; + } + if (direction === "asc") { + return boolA ? 1 : -1; + } + return boolA ? -1 : 1; +}; +var boolean_default = { + type: "boolean", + render, + Edit: "checkbox", + sort: sort3, + validate: { + required: isValidRequiredForBool, + elements: isValidElements, + custom: isValidCustom4 + }, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + format: {}, + getValueFormatted: getValueFormatted6 +}; + +// packages/dataviews/build-module/field-types/media.mjs +var media_default2 = { + type: "media", + render: () => null, + Edit: null, + sort: () => 0, + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: get_value_formatted_default_default, + // cannot validate any constraint, so + // the only available validation for the field author + // would be providing a custom validator. + validate: {} +}; + +// packages/dataviews/build-module/field-types/array.mjs +var import_i18n42 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs +function isValidRequiredForArray(item, field) { + const value = field.getValue({ item }); + return Array.isArray(value) && value.length > 0 && value.every( + (element) => ![void 0, "", null].includes(element) + ); +} + +// packages/dataviews/build-module/field-types/array.mjs +function getValueFormatted7({ + item, + field +}) { + const value = field.getValue({ item }); + const arr = Array.isArray(value) ? value : []; + return arr.join(", "); +} +function render2({ item, field }) { + return getValueFormatted7({ item, field }); +} +function isValidCustom5(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Array.isArray(value)) { + return (0, import_i18n42.__)("Value must be an array."); + } + if (!value.every((v2) => typeof v2 === "string")) { + return (0, import_i18n42.__)("Every value must be a string."); + } + return null; +} +var sort4 = (a2, b2, direction) => { + const arrA = Array.isArray(a2) ? a2 : []; + const arrB = Array.isArray(b2) ? b2 : []; + if (arrA.length !== arrB.length) { + return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length; + } + const joinedA = arrA.join(","); + const joinedB = arrB.join(","); + return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA); +}; +var array_default = { + type: "array", + render: render2, + Edit: "array", + sort: sort4, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: getValueFormatted7, + validate: { + required: isValidRequiredForArray, + elements: isValidElements, + custom: isValidCustom5 + } +}; + +// packages/dataviews/build-module/field-types/password.mjs +function getValueFormatted8({ + item, + field +}) { + return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : ""; +} +var password_default = { + type: "password", + render, + Edit: "password", + sort: () => 0, + // Passwords should not be sortable for security reasons + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: getValueFormatted8, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/telephone.mjs +var telephone_default = { + type: "telephone", + render, + Edit: "telephone", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/color.mjs +var import_i18n43 = __toESM(require_i18n(), 1); +var import_jsx_runtime108 = __toESM(require_jsx_runtime(), 1); +function render3({ item, field }) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(RenderFromElements, { item, field }); + } + const value = get_value_formatted_default_default({ item, field }); + if (!value || !w(value).isValid()) { + return value; + } + return /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime108.jsx)( + "div", + { + style: { + width: "16px", + height: "16px", + borderRadius: "50%", + backgroundColor: value, + border: "1px solid #ddd", + flexShrink: 0 + } + } + ), + /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { children: value }) + ] }); +} +function isValidCustom6(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !w(value).isValid()) { + return (0, import_i18n43.__)("Value must be a valid color."); + } + return null; +} +var sort5 = (a2, b2, direction) => { + const colorA = w(a2); + const colorB = w(b2); + if (!colorA.isValid() && !colorB.isValid()) { + return 0; + } + if (!colorA.isValid()) { + return direction === "asc" ? 1 : -1; + } + if (!colorB.isValid()) { + return direction === "asc" ? -1 : 1; + } + const hslA = colorA.toHsl(); + const hslB = colorB.toHsl(); + if (hslA.h !== hslB.h) { + return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h; + } + if (hslA.s !== hslB.s) { + return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s; + } + return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l; +}; +var color_default = { + type: "color", + render: render3, + Edit: "color", + sort: sort5, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_IS_ANY, + OPERATOR_IS_NONE + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements, + custom: isValidCustom6 + } +}; + +// packages/dataviews/build-module/field-types/url.mjs +var url_default = { + type: "url", + render, + Edit: "url", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/no-type.mjs +var sort6 = (a2, b2, direction) => { + if (typeof a2 === "number" && typeof b2 === "number") { + return sort_number_default(a2, b2, direction); + } + return sort_text_default(a2, b2, direction); +}; +var no_type_default = { + // type: no type for this one + render, + Edit: null, + sort: sort6, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: getAllOperatorNames(), + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/utils/get-is-valid.mjs +function getIsValid(field, fieldType) { + let required; + if (field.isValid?.required === true && fieldType.validate.required !== void 0) { + required = { + constraint: true, + validate: fieldType.validate.required + }; + } + let elements; + if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out + field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) { + elements = { + constraint: true, + validate: fieldType.validate.elements + }; + } + let min; + if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) { + min = { + constraint: field.isValid.min, + validate: fieldType.validate.min + }; + } + let max; + if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) { + max = { + constraint: field.isValid.max, + validate: fieldType.validate.max + }; + } + let minLength; + if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) { + minLength = { + constraint: field.isValid.minLength, + validate: fieldType.validate.minLength + }; + } + let maxLength; + if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) { + maxLength = { + constraint: field.isValid.maxLength, + validate: fieldType.validate.maxLength + }; + } + let pattern; + if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) { + pattern = { + constraint: field.isValid?.pattern, + validate: fieldType.validate.pattern + }; + } + const custom = field.isValid?.custom ?? fieldType.validate.custom; + return { + required, + elements, + min, + max, + minLength, + maxLength, + pattern, + custom + }; +} + +// packages/dataviews/build-module/field-types/utils/get-filter.mjs +function getFilter(fieldType) { + return fieldType.validOperators.reduce((accumulator, operator) => { + const operatorObj = getOperatorByName(operator); + if (operatorObj?.filter) { + accumulator[operator] = operatorObj.filter; + } + return accumulator; + }, {}); +} + +// packages/dataviews/build-module/field-types/utils/get-format.mjs +function getFormat(field, fieldType) { + return { + ...fieldType.format, + ...field.format + }; +} +var get_format_default = getFormat; + +// packages/dataviews/build-module/field-types/index.mjs +function getFieldTypeByName(type) { + const found = [ + email_default, + integer_default, + number_default, + text_default, + datetime_default, + date_default, + boolean_default, + media_default2, + array_default, + password_default, + telephone_default, + color_default, + url_default + ].find((fieldType) => fieldType?.type === type); + if (!!found) { + return found; + } + return no_type_default; +} +function normalizeFields(fields) { + return fields.map((field) => { + const fieldType = getFieldTypeByName(field.type); + const getValue = field.getValue || get_value_from_id_default(field.id); + const sort7 = function(a2, b2, direction) { + const aValue = getValue({ item: a2 }); + const bValue = getValue({ item: b2 }); + return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction); + }; + return { + id: field.id, + label: field.label || field.id, + header: field.header || field.label || field.id, + description: field.description, + placeholder: field.placeholder, + getValue, + setValue: field.setValue || set_value_from_id_default(field.id), + elements: field.elements, + getElements: field.getElements, + hasElements: hasElements(field), + isVisible: field.isVisible, + enableHiding: field.enableHiding ?? true, + readOnly: field.readOnly ?? false, + // The type provides defaults for the following props + type: fieldType.type, + render: field.render ?? fieldType.render, + Edit: getControl(field, fieldType.Edit), + sort: sort7, + enableSorting: field.enableSorting ?? fieldType.enableSorting, + enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch, + isValid: getIsValid(field, fieldType), + filterBy: get_filter_by_default( + field, + fieldType.defaultOperators, + fieldType.validOperators + ), + filter: getFilter(fieldType), + format: get_format_default(field, fieldType), + getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted + }; + }); +} + +// packages/dataviews/build-module/hooks/use-data.mjs +var import_element55 = __toESM(require_element(), 1); +function useData(data, isLoading, paginationInfo) { + const previousDataRef = (0, import_element55.useRef)(data); + const previousPaginationInfoRef = (0, import_element55.useRef)(paginationInfo); + const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element55.useState)( + !isLoading + ); + (0, import_element55.useEffect)(() => { + if (!isLoading) { + previousDataRef.current = data; + previousPaginationInfoRef.current = paginationInfo; + setHasInitiallyLoaded(true); + } + }, [data, isLoading, paginationInfo]); + return { + data: isLoading && previousDataRef.current?.length ? previousDataRef.current : data, + paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo, + hasInitiallyLoaded + }; +} + +// packages/dataviews/build-module/dataviews/index.mjs +var import_jsx_runtime109 = __toESM(require_jsx_runtime(), 1); +var defaultGetItemId = (item) => item.id; +var defaultIsItemClickable = () => true; +var EMPTY_ARRAY6 = []; +var dataViewsLayouts = VIEW_LAYOUTS.filter( + (viewLayout) => !viewLayout.isPicker +); +function DefaultUI({ + header, + search = true, + searchLabel = void 0 +}) { + return /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)(import_jsx_runtime109.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)( + Stack, + { + direction: "row", + align: "top", + justify: "space-between", + className: "dataviews__view-actions", + gap: "xs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)( + Stack, + { + direction: "row", + justify: "start", + gap: "sm", + className: "dataviews__search", + children: [ + search && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(dataviews_search_default, { label: searchLabel }), + /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(toggle_default, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(dataviews_view_config_default, {}), + header + ] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }), + /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(DataViewsLayout, {}), + /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(DataViewsFooter, {}) + ] }); +} +function DataViews({ + view, + onChangeView, + fields, + search = true, + searchLabel = void 0, + actions = EMPTY_ARRAY6, + data, + getItemId: getItemId3 = defaultGetItemId, + getItemLevel, + isLoading = false, + paginationInfo, + defaultLayouts: defaultLayoutsProperty, + selection: selectionProperty, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable = defaultIsItemClickable, + header, + children, + config = { perPageSizes: [10, 20, 50, 100] }, + empty, + onReset +}) { + const { infiniteScrollHandler } = paginationInfo; + const containerRef = (0, import_element56.useRef)(null); + const [containerWidth, setContainerWidth] = (0, import_element56.useState)(0); + const resizeObserverRef = (0, import_compose12.useResizeObserver)( + (resizeObserverEntries) => { + setContainerWidth( + resizeObserverEntries[0].borderBoxSize[0].inlineSize + ); + }, + { box: "border-box" } + ); + const [selectionState, setSelectionState] = (0, import_element56.useState)([]); + const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0; + const selection = isUncontrolled ? selectionState : selectionProperty; + const [openedFilter, setOpenedFilter] = (0, import_element56.useState)(null); + function setSelectionWithChange(value) { + const newValue = typeof value === "function" ? value(selection) : value; + if (isUncontrolled) { + setSelectionState(newValue); + } + if (onChangeSelection) { + onChangeSelection(newValue); + } + } + const _fields = (0, import_element56.useMemo)(() => normalizeFields(fields), [fields]); + const _selection = (0, import_element56.useMemo)(() => { + return selection.filter( + (id) => data.some((item) => getItemId3(item) === id) + ); + }, [selection, data, getItemId3]); + const filters = use_filters_default(_fields, view); + const hasPrimaryOrLockedFilters = (0, import_element56.useMemo)( + () => (filters || []).some( + (filter) => filter.isPrimary || filter.isLocked + ), + [filters] + ); + const [isShowingFilter, setIsShowingFilter] = (0, import_element56.useState)( + hasPrimaryOrLockedFilters + ); + (0, import_element56.useEffect)(() => { + if (hasPrimaryOrLockedFilters && !isShowingFilter) { + setIsShowingFilter(true); + } + }, [hasPrimaryOrLockedFilters, isShowingFilter]); + (0, import_element56.useEffect)(() => { + if (!view.infiniteScrollEnabled || !containerRef.current) { + return; + } + const handleScroll = (0, import_compose12.throttle)((event) => { + const target = event.target; + const scrollTop = target.scrollTop; + const scrollHeight = target.scrollHeight; + const clientHeight = target.clientHeight; + if (scrollTop + clientHeight >= scrollHeight - 100) { + infiniteScrollHandler?.(); + } + }, 100); + const container = containerRef.current; + container.addEventListener("scroll", handleScroll); + return () => { + container.removeEventListener("scroll", handleScroll); + handleScroll.cancel(); + }; + }, [infiniteScrollHandler, view.infiniteScrollEnabled]); + const defaultLayouts = (0, import_element56.useMemo)( + () => Object.fromEntries( + Object.entries(defaultLayoutsProperty).filter( + ([layoutType]) => { + return dataViewsLayouts.some( + (viewLayout) => viewLayout.type === layoutType + ); + } + ) + ), + [defaultLayoutsProperty] + ); + const { + data: displayData, + paginationInfo: displayPaginationInfo, + hasInitiallyLoaded + } = useData(data, isLoading, paginationInfo); + if (!defaultLayouts[view.type]) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)( + dataviews_context_default.Provider, + { + value: { + view, + onChangeView, + fields: _fields, + actions, + data: displayData, + isLoading, + paginationInfo: displayPaginationInfo, + selection: _selection, + onChangeSelection: setSelectionWithChange, + openedFilter, + setOpenedFilter, + getItemId: getItemId3, + getItemLevel, + isItemClickable, + onClickItem, + renderItemLink, + containerWidth, + containerRef, + resizeObserverRef, + defaultLayouts, + filters, + isShowingFilter, + setIsShowingFilter, + config, + empty, + hasInitiallyLoaded, + hasInfiniteScrollHandler: !!infiniteScrollHandler, + onReset + }, + children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "dataviews-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime109.jsx)( + DefaultUI, + { + header, + search, + searchLabel + } + ) }) + } + ); +} +var DataViewsSubComponents = DataViews; +DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter; +DataViewsSubComponents.Filters = filters_default; +DataViewsSubComponents.FiltersToggled = filters_toggled_default; +DataViewsSubComponents.FiltersToggle = toggle_default; +DataViewsSubComponents.Layout = DataViewsLayout; +DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu; +DataViewsSubComponents.Pagination = DataViewsPagination; +DataViewsSubComponents.Search = dataviews_search_default; +DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown; +DataViewsSubComponents.Footer = DataViewsFooter; +var dataviews_default = DataViewsSubComponents; + +// packages/dataviews/build-module/utils/filter-sort-and-paginate.mjs +var import_remove_accents2 = __toESM(require_remove_accents(), 1); +var import_deprecated = __toESM(require_deprecated(), 1); +function normalizeSearchInput2(input = "") { + return (0, import_remove_accents2.default)(input.trim().toLowerCase()); +} +var EMPTY_ARRAY7 = []; +function filterSortAndPaginate(data, view, fields) { + if (!data) { + return { + data: EMPTY_ARRAY7, + paginationInfo: { totalItems: 0, totalPages: 0 } + }; + } + const _fields = normalizeFields(fields); + let filteredData = [...data]; + if (view.search) { + const normalizedSearch = normalizeSearchInput2(view.search); + filteredData = filteredData.filter((item) => { + return _fields.filter((field) => field.enableGlobalSearch).some((field) => { + const fieldValue = field.getValue({ item }); + const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue]; + return values.some( + (value) => normalizeSearchInput2(String(value)).includes( + normalizedSearch + ) + ); + }); + }); + } + if (view.filters && view.filters?.length > 0) { + view.filters.forEach((filter) => { + const field = _fields.find( + (_field) => _field.id === filter.field + ); + if (field) { + if (filter.operator === OPERATOR_IS_NOT_ALL) { + (0, import_deprecated.default)("The 'isNotAll' filter operator", { + since: "7.0", + alternative: "'isNone'" + }); + } + const handler = field.filter[filter.operator]; + if (handler) { + filteredData = filteredData.filter( + (item) => handler(item, field, filter.value) + ); + } + } + }); + } + const sortByField = view.sort?.field ? _fields.find((field) => { + return field.enableSorting !== false && field.id === view.sort?.field; + }) : null; + const groupByField = view.groupBy?.field ? _fields.find((field) => { + return field.enableSorting !== false && field.id === view.groupBy?.field; + }) : null; + if (sortByField || groupByField) { + filteredData.sort((a2, b2) => { + if (groupByField) { + const groupCompare = groupByField.sort( + a2, + b2, + view.groupBy?.direction ?? "asc" + ); + if (groupCompare !== 0) { + return groupCompare; + } + } + if (sortByField) { + return sortByField.sort(a2, b2, view.sort?.direction ?? "desc"); + } + return 0; + }); + } + let totalItems = filteredData.length; + let totalPages = 1; + if (view.page !== void 0 && view.perPage !== void 0) { + const start = (view.page - 1) * view.perPage; + totalItems = filteredData?.length || 0; + totalPages = Math.ceil(totalItems / view.perPage); + filteredData = filteredData?.slice(start, start + view.perPage); + } + return { + data: filteredData, + paginationInfo: { + totalItems, + totalPages + } + }; +} + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element57 = __toESM(require_element(), 1); +var import_jsx_runtime110 = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element57.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components47 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components46 = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components46.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime111 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(import_components47.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(import_components47.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(import_components47.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_components47.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime111.jsx)( + import_components47.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime112 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default2 = Page; + +// routes/template-list/stage-activation.tsx +var import_core_data9 = __toESM(require_core_data()); +var import_components53 = __toESM(require_components()); +var import_data13 = __toESM(require_data()); +var import_element65 = __toESM(require_element()); +var import_editor = __toESM(require_editor()); +var import_i18n54 = __toESM(require_i18n()); + +// routes/lock-unlock.ts +var import_private_apis2 = __toESM(require_private_apis()); +var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// routes/template-list/view-utils.ts +var DEFAULT_VIEW = { + type: "grid", + perPage: 20, + sort: { + field: "title", + direction: "asc" + }, + fields: ["author", "active", "slug"], + titleField: "title", + descriptionField: "description", + mediaField: "preview", + filters: [] +}; +var DEFAULT_VIEW_LEGACY = { + ...DEFAULT_VIEW, + fields: ["author"] +}; +var DEFAULT_LAYOUTS = { + table: { + showMedia: false + }, + grid: { + showMedia: true + }, + list: { + showMedia: false + } +}; +function getActiveViewOverridesForTab(activeView) { + if (activeView === "user") { + return { + sort: { field: "date", direction: "desc" } + }; + } + if (activeView === "active") { + return {}; + } + return { + filters: [ + { + field: "author", + operator: "isAny", + value: [activeView] + } + ] + }; +} +function getActiveViewOverridesForTabLegacy(activeView) { + if (activeView === "all") { + return {}; + } + return { + filters: [ + { + field: "author", + operator: "isAny", + value: [activeView] + } + ] + }; +} + +// routes/template-list/fields/preview.tsx +var import_i18n44 = __toESM(require_i18n()); +import { Preview } from "@wordpress/lazy-editor"; +function PreviewField({ item }) { + const description = item.description; + return /* @__PURE__ */ React.createElement( + Preview, + { + content: item?.content?.raw, + blocks: item?.blocks, + description + } + ); +} +var previewField = { + label: (0, import_i18n44.__)("Preview"), + id: "preview", + render: PreviewField, + enableSorting: false +}; + +// routes/template-list/fields/author.tsx +var import_components48 = __toESM(require_components()); +var import_i18n45 = __toESM(require_i18n()); +var import_element58 = __toESM(require_element()); +var import_core_data = __toESM(require_core_data()); +var import_data8 = __toESM(require_data()); +function useAddedBy(type, id) { + const { author, authorText } = (0, import_data8.useSelect)( + (select2) => { + const { getUser, getEditedEntityRecord } = select2(import_core_data.store); + const _record = getEditedEntityRecord("postType", type, id); + return { + author: _record?.author ? getUser(_record.author) : null, + authorText: _record?.author_text + }; + }, + [type, id] + ); + return (0, import_element58.useMemo)(() => { + if (authorText) { + return { + text: authorText, + icon: "admin-plugins" + }; + } + if (author) { + return { + text: author.name, + icon: "admin-users", + imageUrl: author.avatar_urls?.[48] + }; + } + return { + text: (0, import_i18n45.__)("Unknown"), + icon: "admin-users" + }; + }, [author, authorText]); +} +function AuthorField({ item }) { + const [isImageLoaded, setIsImageLoaded] = (0, import_element58.useState)(false); + const { text, icon, imageUrl } = useAddedBy(item.type, item.id); + return /* @__PURE__ */ React.createElement(import_components48.__experimentalHStack, { alignment: "left", spacing: 0 }, imageUrl && /* @__PURE__ */ React.createElement( + "div", + { + className: clsx_default( + "routes-template-list-author-field__avatar", + { + "is-loaded": isImageLoaded + } + ) + }, + /* @__PURE__ */ React.createElement( + "img", + { + onLoad: () => setIsImageLoaded(true), + alt: "", + src: imageUrl + } + ) + ), !imageUrl && /* @__PURE__ */ React.createElement("div", { className: "routes-template-list-author-field__icon" }, /* @__PURE__ */ React.createElement(import_components48.Icon, { icon })), /* @__PURE__ */ React.createElement("span", { className: "routes-template-list-author-field__name" }, text)); +} +var authorField = { + label: (0, import_i18n45.__)("Author"), + id: "author", + getValue: ({ item }) => item.author_text ?? item.author, + render: AuthorField +}; + +// routes/template-list/fields/description.tsx +var import_i18n46 = __toESM(require_i18n()); +var import_html_entities = __toESM(require_html_entities()); +var import_core_data2 = __toESM(require_core_data()); +var { useEntityRecordsWithPermissions } = unlock2(import_core_data2.privateApis); +function useAllDefaultTemplateTypes() { + const { records: staticRecords } = useEntityRecordsWithPermissions( + "root", + "registeredTemplate" + ); + return staticRecords?.filter((record) => !record.is_custom).map((record) => { + return { + slug: record.slug, + title: record.title.rendered, + description: record.description + }; + }); +} +var descriptionField = { + label: (0, import_i18n46.__)("Description"), + id: "description", + render: function RenderDescription({ item }) { + const defaultTemplateTypes = useAllDefaultTemplateTypes(); + const defaultTemplateType = defaultTemplateTypes?.find( + (type) => type.slug === item.slug + ); + return item.description ? (0, import_html_entities.decodeEntities)(item.description) : defaultTemplateType?.description; + }, + enableSorting: false, + enableGlobalSearch: true +}; + +// routes/template-list/fields/active.tsx +var import_i18n47 = __toESM(require_i18n()); +var import_components49 = __toESM(require_components()); +var { Badge: Badge3 } = unlock2(import_components49.privateApis); +var activeField = { + label: (0, import_i18n47.__)("Status"), + id: "active", + type: "boolean", + getValue: ({ item }) => item._isActive, + render: function Render({ item }) { + const activeLabel = item._isCustom ? (0, import_i18n47._x)("Active when used", "template") : (0, import_i18n47._x)("Active", "template"); + const activeIntent = item._isCustom ? "info" : "success"; + const isActive = item._isActive; + return /* @__PURE__ */ React.createElement(Badge3, { intent: isActive ? activeIntent : "default" }, isActive ? activeLabel : (0, import_i18n47._x)("Inactive", "template")); + } +}; + +// routes/template-list/fields/slug.tsx +var import_i18n48 = __toESM(require_i18n()); +var import_core_data3 = __toESM(require_core_data()); +var { useEntityRecordsWithPermissions: useEntityRecordsWithPermissions2 } = unlock2(import_core_data3.privateApis); +function useAllDefaultTemplateTypes2() { + const { records: staticRecords } = useEntityRecordsWithPermissions2( + "root", + "registeredTemplate" + ); + return staticRecords?.filter((record) => !record.is_custom).map((record) => { + return { + slug: record.slug, + title: record.title.rendered, + description: record.description + }; + }); +} +var slugField = { + label: (0, import_i18n48.__)("Template Type"), + id: "slug", + getValue: ({ item }) => item.slug, + render: function Render2({ item }) { + const defaultTemplateTypes = useAllDefaultTemplateTypes2(); + const defaultTemplateType = defaultTemplateTypes?.find( + (type) => type.slug === item.slug + ); + return defaultTemplateType?.title || (0, import_i18n48._x)("Custom", "template type"); + } +}; + +// routes/template-list/use-templates.ts +var import_element59 = __toESM(require_element()); +var import_data9 = __toESM(require_data()); +var import_core_data4 = __toESM(require_core_data()); +var { useEntityRecordsWithPermissions: useEntityRecordsWithPermissions3 } = unlock2(import_core_data4.privateApis); +function useTemplates(activeView = "active") { + const { activeTemplatesOption, activeTheme, defaultTemplateTypes } = (0, import_data9.useSelect)((select2) => { + const { getEntityRecord, getCurrentTheme } = select2(import_core_data4.store); + return { + activeTemplatesOption: getEntityRecord("root", "site")?.active_templates, + activeTheme: getCurrentTheme(), + defaultTemplateTypes: select2(import_core_data4.store).getCurrentTheme()?.default_template_types + }; + }, []); + const { records: userRecords, isResolving: isLoadingUserRecords } = useEntityRecordsWithPermissions3("postType", "wp_template", { + per_page: -1, + combinedTemplates: false + }); + const { records: staticRecords, isResolving: isLoadingStaticData } = useEntityRecordsWithPermissions3("root", "registeredTemplate", { + per_page: -1 + }); + const activeTemplates = (0, import_element59.useMemo)(() => { + const _active = [...staticRecords]; + if (activeTemplatesOption) { + for (const activeSlug in activeTemplatesOption) { + const activeId = activeTemplatesOption[activeSlug]; + const template = userRecords.find( + (userRecord) => userRecord.id === activeId && userRecord.theme === activeTheme.stylesheet + ); + if (template) { + const index = _active.findIndex( + ({ slug }) => slug === template.slug + ); + if (index !== -1) { + _active[index] = template; + } else { + _active.push(template); + } + } + } + } + return _active; + }, [userRecords, staticRecords, activeTemplatesOption, activeTheme]); + const records = (0, import_element59.useMemo)(() => { + function isCustom(record) { + return record.is_custom ?? // For user templates it's custom if the is_wp_suggestion meta + // field is not set and the slug is not found in the default + // template types. + (!record.meta?.is_wp_suggestion && !defaultTemplateTypes.some( + (type) => type.slug === record.slug + )); + } + let _records; + if (activeView === "active") { + _records = activeTemplates.filter( + (record) => !isCustom(record) + ); + } else if (activeView === "user") { + _records = userRecords; + } else { + _records = staticRecords; + } + return _records.map((record) => ({ + ...record, + _isActive: activeTemplates.some( + (template) => template.id === record.id + ), + _isCustom: isCustom(record) + })); + }, [ + activeTemplates, + defaultTemplateTypes, + userRecords, + staticRecords, + activeView + ]); + return { + records, + isLoading: isLoadingUserRecords || isLoadingStaticData, + staticRecords, + userRecords, + activeTemplates + }; +} + +// routes/template-list/actions/set-active-template.tsx +var import_i18n49 = __toESM(require_i18n()); +var import_element60 = __toESM(require_element()); +var import_data10 = __toESM(require_data()); +var import_core_data5 = __toESM(require_core_data()); +function useSetActiveTemplateAction() { + const activeTheme = (0, import_data10.useSelect)( + (select2) => select2(import_core_data5.store).getCurrentTheme() + ); + const { getEntityRecord } = (0, import_data10.useSelect)(import_core_data5.store); + const { editEntityRecord, saveEditedEntityRecord } = (0, import_data10.useDispatch)(import_core_data5.store); + return (0, import_element60.useMemo)( + () => ({ + id: "set-active-template", + label(items) { + return items.some((item) => item._isActive) ? (0, import_i18n49.__)("Deactivate") : (0, import_i18n49.__)("Activate"); + }, + isPrimary: true, + icon: pencil_default, + isEligible(item) { + if (!activeTheme) { + return false; + } + if (item.theme !== activeTheme.stylesheet) { + return false; + } + if (typeof item.id !== "number") { + return item._isActive === false; + } + return true; + }, + async callback(items) { + const deactivate = items.some((item) => item._isActive); + const activeTemplates = { + ...(await getEntityRecord("root", "site"))?.active_templates ?? {} + }; + for (const item of items) { + if (deactivate) { + delete activeTemplates[item.slug]; + } else { + activeTemplates[item.slug] = item.id; + } + } + await editEntityRecord("root", "site", void 0, { + active_templates: activeTemplates + }); + await saveEditedEntityRecord("root", "site"); + } + }), + [ + editEntityRecord, + saveEditedEntityRecord, + getEntityRecord, + activeTheme + ] + ); +} + +// routes/template-list/add-new-template/index.tsx +var import_components52 = __toESM(require_components()); +var import_html_entities4 = __toESM(require_html_entities()); +var import_element64 = __toESM(require_element()); +var import_data12 = __toESM(require_data()); +var import_core_data8 = __toESM(require_core_data()); +var import_compose14 = __toESM(require_compose()); +var import_i18n53 = __toESM(require_i18n()); +var import_notices = __toESM(require_notices()); +var import_dom11 = __toESM(require_dom()); +import { useNavigate, useInvalidate } from "@wordpress/route"; + +// routes/template-list/add-new-template/add-custom-template-modal-content.tsx +var import_element62 = __toESM(require_element()); +var import_i18n51 = __toESM(require_i18n()); +var import_components50 = __toESM(require_components()); +var import_core_data7 = __toESM(require_core_data()); +var import_html_entities3 = __toESM(require_html_entities()); +var import_compose13 = __toESM(require_compose()); +var import_dom10 = __toESM(require_dom()); +var import_url4 = __toESM(require_url()); + +// routes/template-list/add-new-template/utils.ts +var import_data11 = __toESM(require_data()); +var import_core_data6 = __toESM(require_core_data()); +var import_html_entities2 = __toESM(require_html_entities()); +var import_element61 = __toESM(require_element()); +var import_i18n50 = __toESM(require_i18n()); +var import_url3 = __toESM(require_url()); +var TEMPLATE_POST_TYPE = "wp_template"; +var EMPTY_OBJECT2 = {}; +var getValueFromObjectPath = (object, path) => { + let value = object; + path.split(".").forEach((fieldName) => { + value = value?.[fieldName]; + }); + return value; +}; +function prefixSlug(prefix, slug) { + return `${prefix}-${(0, import_url3.safeDecodeURI)(slug)}`; +} +function mapToIHasNameAndId(entities, path) { + return (entities || []).map((entity) => ({ + ...entity, + name: (0, import_html_entities2.decodeEntities)(getValueFromObjectPath(entity, path)) + })); +} +var useExistingTemplates = () => { + return (0, import_data11.useSelect)( + (select2) => select2(import_core_data6.store).getEntityRecords( + "postType", + TEMPLATE_POST_TYPE, + { + per_page: -1 + } + ), + [] + ); +}; +var useDefaultTemplateTypes = () => { + return (0, import_data11.useSelect)( + (select2) => select2(import_core_data6.store).getCurrentTheme()?.default_template_types || [], + [] + ); +}; +var usePublicPostTypes = () => { + const postTypes = (0, import_data11.useSelect)( + (select2) => select2(import_core_data6.store).getPostTypes({ per_page: -1 }), + [] + ); + return (0, import_element61.useMemo)(() => { + const excludedPostTypes = ["attachment"]; + return postTypes?.filter( + ({ viewable, slug }) => viewable && !excludedPostTypes.includes(slug) + ).sort((a2, b2) => { + if (a2.slug === "post" || b2.slug === "post") { + return 0; + } + return a2.name.localeCompare(b2.name); + }); + }, [postTypes]); +}; +var usePublicTaxonomies = () => { + const taxonomies = (0, import_data11.useSelect)( + (select2) => select2(import_core_data6.store).getTaxonomies({ per_page: -1 }), + [] + ); + return (0, import_element61.useMemo)(() => { + return taxonomies?.filter( + ({ visibility }) => visibility?.publicly_queryable + ); + }, [taxonomies]); +}; +function usePostTypeArchiveMenuItems() { + const publicPostTypes = usePublicPostTypes(); + const postTypesWithArchives = (0, import_element61.useMemo)( + () => publicPostTypes?.filter( + (postType) => postType.has_archive + ), + [publicPostTypes] + ); + const existingTemplates = useExistingTemplates(); + const postTypeLabels = (0, import_element61.useMemo)( + () => publicPostTypes?.reduce((accumulator, { labels }) => { + const singularName = labels.singular_name.toLowerCase(); + accumulator[singularName] = (accumulator[singularName] || 0) + 1; + return accumulator; + }, {}), + [publicPostTypes] + ); + const needsUniqueIdentifier = (0, import_element61.useCallback)( + ({ labels, slug }) => { + const singularName = labels.singular_name.toLowerCase(); + return postTypeLabels[singularName] > 1 && singularName !== slug; + }, + [postTypeLabels] + ); + return (0, import_element61.useMemo)( + () => postTypesWithArchives?.filter( + (postType) => !(existingTemplates || []).some( + (existingTemplate) => existingTemplate.slug === "archive-" + postType.slug + ) + ).map((postType) => { + let title; + if (needsUniqueIdentifier(postType)) { + title = (0, import_i18n50.sprintf)( + // translators: %1s: Name of the post type e.g: "Post"; %2s: Slug of the post type e.g: "book". + (0, import_i18n50.__)("Archive: %1$s (%2$s)"), + postType.labels.singular_name, + postType.slug + ); + } else { + title = (0, import_i18n50.sprintf)( + // translators: %s: Name of the post type e.g: "Post". + (0, import_i18n50.__)("Archive: %s"), + postType.labels.singular_name + ); + } + return { + slug: "archive-" + postType.slug, + description: (0, import_i18n50.sprintf)( + // translators: %s: Name of the post type e.g: "Post". + (0, import_i18n50.__)( + "Displays an archive with the latest posts of type: %s." + ), + postType.labels.singular_name + ), + title, + // `icon` is the `menu_icon` property of a post type. We + // only handle `dashicons` for now, even if the `menu_icon` + // also supports urls and svg as values. + icon: typeof postType.icon === "string" && postType.icon.startsWith("dashicons-") ? postType.icon.slice(10) : archive_default, + templatePrefix: "archive" + }; + }) || [], + [postTypesWithArchives, existingTemplates, needsUniqueIdentifier] + ); +} +var usePostTypeMenuItems = (onClickMenuItem) => { + const publicPostTypes = usePublicPostTypes(); + const defaultTemplateTypes = useDefaultTemplateTypes(); + const templateLabels = (0, import_element61.useMemo)( + () => publicPostTypes?.reduce((accumulator, { labels }) => { + const templateName = (labels.template_name || labels.singular_name).toLowerCase(); + accumulator[templateName] = (accumulator[templateName] || 0) + 1; + return accumulator; + }, {}), + [publicPostTypes] + ); + const needsUniqueIdentifier = (0, import_element61.useCallback)( + ({ labels, slug }) => { + const templateName = (labels.template_name || labels.singular_name).toLowerCase(); + return templateLabels[templateName] > 1 && templateName !== slug; + }, + [templateLabels] + ); + const templatePrefixes = (0, import_element61.useMemo)( + () => publicPostTypes?.reduce((accumulator, { slug }) => { + let suffix = slug; + if (slug !== "page") { + suffix = `single-${suffix}`; + } + accumulator[slug] = suffix; + return accumulator; + }, {}), + [publicPostTypes] + ); + const postTypesInfo = useEntitiesInfo("postType", templatePrefixes); + const menuItems = (publicPostTypes || []).reduce( + (accumulator, postType) => { + const { slug, labels, icon } = postType; + const generalTemplateSlug = templatePrefixes[slug]; + const defaultTemplateType = defaultTemplateTypes?.find( + ({ slug: _slug }) => _slug === generalTemplateSlug + ); + const _needsUniqueIdentifier = needsUniqueIdentifier(postType); + let menuItemTitle = labels.template_name || (0, import_i18n50.sprintf)( + // translators: %s: Name of the post type e.g: "Post". + (0, import_i18n50.__)("Single item: %s"), + labels.singular_name + ); + if (_needsUniqueIdentifier) { + menuItemTitle = labels.template_name ? (0, import_i18n50.sprintf)( + // translators: 1: Name of the template e.g: "Single Item: Post". 2: Slug of the post type e.g: "book". + (0, import_i18n50._x)("%1$s (%2$s)", "post type menu label"), + labels.template_name, + slug + ) : (0, import_i18n50.sprintf)( + // translators: 1: Name of the post type e.g: "Post". 2: Slug of the post type e.g: "book". + (0, import_i18n50._x)( + "Single item: %1$s (%2$s)", + "post type menu label" + ), + labels.singular_name, + slug + ); + } + const menuItem = defaultTemplateType ? { + ...defaultTemplateType, + templatePrefix: templatePrefixes[slug] + } : { + slug: generalTemplateSlug, + title: menuItemTitle, + description: (0, import_i18n50.sprintf)( + // translators: %s: Name of the post type e.g: "Post". + (0, import_i18n50.__)("Displays a single item: %s."), + labels.singular_name + ), + // `icon` is the `menu_icon` property of a post type. We + // only handle `dashicons` for now, even if the `menu_icon` + // also supports urls and svg as values. + icon: typeof icon === "string" && icon.startsWith("dashicons-") ? icon.slice(10) : post_default, + templatePrefix: templatePrefixes[slug] + }; + const hasEntities = postTypesInfo?.[slug]?.hasEntities; + if (hasEntities) { + menuItem.onClick = (template) => { + onClickMenuItem({ + type: "postType", + slug, + config: { + recordNamePath: "title.rendered", + queryArgs: ({ search }) => { + return { + _fields: "id,title,slug,link", + orderBy: search ? "relevance" : "modified", + exclude: postTypesInfo[slug].existingEntitiesIds + }; + }, + getSpecificTemplate: (suggestion) => { + const templateSlug = prefixSlug( + templatePrefixes[slug], + suggestion.slug + ); + return { + title: templateSlug, + slug: templateSlug, + templatePrefix: templatePrefixes[slug] + }; + } + }, + labels, + template + }); + }; + } + if (hasEntities) { + accumulator.push(menuItem); + } + return accumulator; + }, + [] + ); + const postTypesMenuItems = (0, import_element61.useMemo)( + () => menuItems.reduce( + (accumulator, postType) => { + const { slug } = postType; + let key = "postTypesMenuItems"; + if (slug === "page") { + key = "defaultPostTypesMenuItems"; + } + accumulator[key].push(postType); + return accumulator; + }, + { defaultPostTypesMenuItems: [], postTypesMenuItems: [] } + ), + [menuItems] + ); + return postTypesMenuItems; +}; +var useTaxonomiesMenuItems = (onClickMenuItem) => { + const publicTaxonomies = usePublicTaxonomies(); + const existingTemplates = useExistingTemplates(); + const defaultTemplateTypes = useDefaultTemplateTypes(); + const templatePrefixes = (0, import_element61.useMemo)( + () => publicTaxonomies?.reduce((accumulator, { slug }) => { + let suffix = slug; + if (!["category", "post_tag"].includes(slug)) { + suffix = `taxonomy-${suffix}`; + } + if (slug === "post_tag") { + suffix = `tag`; + } + accumulator[slug] = suffix; + return accumulator; + }, {}), + [publicTaxonomies] + ); + const taxonomyLabels = publicTaxonomies?.reduce( + (accumulator, { labels }) => { + const templateName = (labels.template_name || labels.singular_name).toLowerCase(); + accumulator[templateName] = (accumulator[templateName] || 0) + 1; + return accumulator; + }, + {} + ); + const needsUniqueIdentifier = (labels, slug) => { + if (["category", "post_tag"].includes(slug)) { + return false; + } + const templateName = (labels.template_name || labels.singular_name).toLowerCase(); + return taxonomyLabels[templateName] > 1 && templateName !== slug; + }; + const taxonomiesInfo = useEntitiesInfo("taxonomy", templatePrefixes); + const existingTemplateSlugs = (existingTemplates || []).map( + ({ slug }) => slug + ); + const menuItems = (publicTaxonomies || []).reduce( + (accumulator, taxonomy) => { + const { slug, labels } = taxonomy; + const generalTemplateSlug = templatePrefixes[slug]; + const defaultTemplateType = defaultTemplateTypes?.find( + ({ slug: _slug }) => _slug === generalTemplateSlug + ); + const hasGeneralTemplate = existingTemplateSlugs?.includes(generalTemplateSlug); + const _needsUniqueIdentifier = needsUniqueIdentifier( + labels, + slug + ); + let menuItemTitle = labels.template_name || labels.singular_name; + if (_needsUniqueIdentifier) { + menuItemTitle = labels.template_name ? (0, import_i18n50.sprintf)( + // translators: 1: Name of the template e.g: "Products by Category". 2: Slug of the taxonomy e.g: "product_cat". + (0, import_i18n50._x)("%1$s (%2$s)", "taxonomy template menu label"), + labels.template_name, + slug + ) : (0, import_i18n50.sprintf)( + // translators: 1: Name of the taxonomy e.g: "Category". 2: Slug of the taxonomy e.g: "product_cat". + (0, import_i18n50._x)("%1$s (%2$s)", "taxonomy menu label"), + labels.singular_name, + slug + ); + } + const menuItem = defaultTemplateType ? { + ...defaultTemplateType, + templatePrefix: templatePrefixes[slug] + } : { + slug: generalTemplateSlug, + title: menuItemTitle, + description: (0, import_i18n50.sprintf)( + // translators: %s: Name of the taxonomy e.g: "Product Categories". + (0, import_i18n50.__)("Displays taxonomy: %s."), + labels.singular_name + ), + icon: block_meta_default, + templatePrefix: templatePrefixes[slug] + }; + const hasEntities = taxonomiesInfo?.[slug]?.hasEntities; + if (hasEntities) { + menuItem.onClick = (template) => { + onClickMenuItem({ + type: "taxonomy", + slug, + config: { + queryArgs: ({ search }) => { + return { + _fields: "id,name,slug,link", + orderBy: search ? "name" : "count", + exclude: taxonomiesInfo[slug].existingEntitiesIds + }; + }, + getSpecificTemplate: (suggestion) => { + const templateSlug = prefixSlug( + templatePrefixes[slug], + suggestion.slug + ); + return { + title: templateSlug, + slug: templateSlug, + templatePrefix: templatePrefixes[slug] + }; + } + }, + labels, + hasGeneralTemplate, + template + }); + }; + } + if (!hasGeneralTemplate || hasEntities) { + accumulator.push(menuItem); + } + return accumulator; + }, + [] + ); + const taxonomiesMenuItems = (0, import_element61.useMemo)( + () => menuItems.reduce( + (accumulator, taxonomy) => { + const { slug } = taxonomy; + let key = "taxonomiesMenuItems"; + if (["category", "tag"].includes(slug)) { + key = "defaultTaxonomiesMenuItems"; + } + accumulator[key].push(taxonomy); + return accumulator; + }, + { defaultTaxonomiesMenuItems: [], taxonomiesMenuItems: [] } + ), + [menuItems] + ); + return taxonomiesMenuItems; +}; +var USE_AUTHOR_MENU_ITEM_TEMPLATE_PREFIX = { + user: "author" +}; +var USE_AUTHOR_MENU_ITEM_QUERY_PARAMETERS = { + user: { who: "authors" } +}; +function useAuthorMenuItem(onClickMenuItem) { + const existingTemplates = useExistingTemplates(); + const defaultTemplateTypes = useDefaultTemplateTypes(); + const authorInfo = useEntitiesInfo( + "root", + USE_AUTHOR_MENU_ITEM_TEMPLATE_PREFIX, + USE_AUTHOR_MENU_ITEM_QUERY_PARAMETERS + ); + let authorMenuItem = defaultTemplateTypes?.find( + ({ slug }) => slug === "author" + ); + if (!authorMenuItem) { + authorMenuItem = { + description: (0, import_i18n50.__)( + "Displays latest posts written by a single author." + ), + slug: "author", + title: "Author" + }; + } + const hasGeneralTemplate = !!existingTemplates?.find( + ({ slug }) => slug === "author" + ); + if (authorInfo.user?.hasEntities) { + authorMenuItem = { ...authorMenuItem, templatePrefix: "author" }; + authorMenuItem.onClick = (template) => { + onClickMenuItem({ + type: "root", + slug: "user", + config: { + queryArgs: ({ search }) => { + return { + _fields: "id,name,slug,link", + orderBy: search ? "name" : "registered_date", + exclude: authorInfo.user.existingEntitiesIds, + who: "authors" + }; + }, + getSpecificTemplate: (suggestion) => { + const templateSlug = prefixSlug( + "author", + suggestion.slug + ); + return { + title: (0, import_i18n50.sprintf)( + // translators: %s: Name of the author e.g: "Admin". + (0, import_i18n50.__)("Author: %s"), + suggestion.name + ), + slug: templateSlug, + templatePrefix: "author" + }; + } + }, + labels: { + singular_name: (0, import_i18n50.__)("Author"), + search_items: (0, import_i18n50.__)("Search Authors"), + not_found: (0, import_i18n50.__)("No authors found."), + all_items: (0, import_i18n50.__)("All Authors") + }, + hasGeneralTemplate, + template + }); + }; + } + if (!hasGeneralTemplate || authorInfo.user?.hasEntities) { + return authorMenuItem; + } +} +var useEntitiesInfo = (entityName, templatePrefixes, additionalQueryParameters = EMPTY_OBJECT2) => { + const entitiesHasRecords = (0, import_data11.useSelect)( + (select2) => { + return Object.keys(templatePrefixes || {}).reduce( + (accumulator, slug) => { + accumulator[slug] = !!select2( + import_core_data6.store + ).getEntityRecords(entityName, slug, { + per_page: 1, + _fields: "id", + context: "view", + ...additionalQueryParameters[slug] + })?.length; + return accumulator; + }, + {} + ); + }, + [templatePrefixes, entityName, additionalQueryParameters] + ); + const entitiesInfo = (0, import_element61.useMemo)(() => { + return Object.keys(templatePrefixes || {}).reduce( + (accumulator, slug) => { + accumulator[slug] = { + hasEntities: entitiesHasRecords[slug] + }; + return accumulator; + }, + {} + ); + }, [templatePrefixes, entitiesHasRecords]); + return entitiesInfo; +}; + +// routes/template-list/add-new-template/add-custom-template-modal-content.tsx +var EMPTY_ARRAY8 = []; +function SuggestionListItem({ + suggestion, + search, + onSelect, + entityForSuggestions +}) { + const baseCssClass = "template-list-custom-template-modal__suggestions_list__list-item"; + return /* @__PURE__ */ React.createElement( + import_components50.Composite.Item, + { + render: /* @__PURE__ */ React.createElement( + import_components50.Button, + { + __next40pxDefaultSize: true, + role: "option", + className: baseCssClass, + onClick: () => onSelect( + entityForSuggestions.config.getSpecificTemplate( + suggestion + ) + ) + } + ) + }, + /* @__PURE__ */ React.createElement( + import_components50.__experimentalText, + { + size: "body", + lineHeight: 1.53846153846, + weight: 500, + className: `${baseCssClass}__title` + }, + /* @__PURE__ */ React.createElement( + import_components50.TextHighlight, + { + text: (0, import_html_entities3.decodeEntities)(suggestion.name), + highlight: search + } + ) + ), + suggestion.link && /* @__PURE__ */ React.createElement( + import_components50.__experimentalText, + { + size: "body", + lineHeight: 1.53846153846, + className: `${baseCssClass}__info` + }, + (0, import_url4.safeDecodeURI)(suggestion.link) + ) + ); +} +function useSearchSuggestions(entityForSuggestions, search) { + const { config } = entityForSuggestions; + const query = (0, import_element62.useMemo)( + () => ({ + order: "asc", + context: "view", + search, + per_page: search ? 20 : 10, + ...config.queryArgs({ search }) + }), + [search, config] + ); + const { records: searchResults, hasResolved: searchHasResolved } = (0, import_core_data7.useEntityRecords)( + entityForSuggestions.type, + entityForSuggestions.slug, + query + ); + const [suggestions, setSuggestions] = (0, import_element62.useState)(EMPTY_ARRAY8); + (0, import_element62.useEffect)(() => { + if (!searchHasResolved) { + return; + } + let newSuggestions = EMPTY_ARRAY8; + if (searchResults?.length) { + newSuggestions = searchResults; + if (config.recordNamePath) { + newSuggestions = mapToIHasNameAndId( + newSuggestions, + config.recordNamePath + ); + } + } + setSuggestions(newSuggestions); + }, [searchResults, searchHasResolved, config.recordNamePath]); + return suggestions; +} +function SuggestionList({ + entityForSuggestions, + onSelect +}) { + const [search, setSearch, debouncedSearch] = (0, import_compose13.useDebouncedInput)(); + const suggestions = useSearchSuggestions( + entityForSuggestions, + debouncedSearch + ); + const { labels } = entityForSuggestions; + const [showSearchControl, setShowSearchControl] = (0, import_element62.useState)(false); + if (!showSearchControl && suggestions?.length > 9) { + setShowSearchControl(true); + } + return /* @__PURE__ */ React.createElement(React.Fragment, null, showSearchControl && /* @__PURE__ */ React.createElement( + import_components50.SearchControl, + { + onChange: setSearch, + value: search, + label: labels.search_items, + placeholder: labels.search_items + } + ), !!suggestions?.length && /* @__PURE__ */ React.createElement( + import_components50.Composite, + { + orientation: "vertical", + role: "listbox", + className: "template-list-custom-template-modal__suggestions_list", + "aria-label": (0, import_i18n51.__)("Suggestions list") + }, + suggestions.map((suggestion) => /* @__PURE__ */ React.createElement( + SuggestionListItem, + { + key: suggestion.slug, + suggestion, + search: debouncedSearch, + onSelect, + entityForSuggestions + } + )) + ), debouncedSearch && !suggestions?.length && /* @__PURE__ */ React.createElement( + import_components50.__experimentalText, + { + as: "p", + className: "template-list-custom-template-modal__no-results" + }, + labels.not_found + )); +} +function AddCustomTemplateModalContent({ + onSelect, + entityForSuggestions, + onBack, + containerRef +}) { + const [showSearchEntities, setShowSearchEntities] = (0, import_element62.useState)(false); + (0, import_element62.useEffect)(() => { + if (containerRef.current) { + const [firstFocusable] = import_dom10.focus.focusable.find( + containerRef.current + ); + firstFocusable?.focus(); + } + }, [showSearchEntities, containerRef]); + return /* @__PURE__ */ React.createElement( + import_components50.__experimentalVStack, + { + spacing: 4, + className: "template-list-custom-template-modal__contents-wrapper", + alignment: "left" + }, + !showSearchEntities && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(import_components50.__experimentalText, { as: "p" }, (0, import_i18n51.__)( + "Select whether to create a single template for all items or a specific one." + )), /* @__PURE__ */ React.createElement( + import_components50.Flex, + { + className: "template-list-custom-template-modal__contents", + gap: "4", + align: "initial" + }, + /* @__PURE__ */ React.createElement( + import_components50.FlexItem, + { + isBlock: true, + as: import_components50.Button, + onClick: () => { + const { + slug, + title, + description, + templatePrefix + } = entityForSuggestions.template; + onSelect({ + slug, + title, + description, + templatePrefix + }); + } + }, + /* @__PURE__ */ React.createElement( + import_components50.__experimentalText, + { + as: "span", + weight: 500, + lineHeight: 1.53846153846 + }, + entityForSuggestions.labels.all_items + ), + /* @__PURE__ */ React.createElement( + import_components50.__experimentalText, + { + as: "span", + lineHeight: 1.53846153846 + }, + // translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one. + (0, import_i18n51.__)("For all items") + ) + ), + /* @__PURE__ */ React.createElement( + import_components50.FlexItem, + { + isBlock: true, + as: import_components50.Button, + onClick: () => { + setShowSearchEntities(true); + } + }, + /* @__PURE__ */ React.createElement( + import_components50.__experimentalText, + { + as: "span", + weight: 500, + lineHeight: 1.53846153846 + }, + entityForSuggestions.labels.singular_name + ), + /* @__PURE__ */ React.createElement( + import_components50.__experimentalText, + { + as: "span", + lineHeight: 1.53846153846 + }, + // translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one. + (0, import_i18n51.__)("For a specific item") + ) + ) + ), /* @__PURE__ */ React.createElement(import_components50.Flex, { justify: "right" }, /* @__PURE__ */ React.createElement( + import_components50.Button, + { + __next40pxDefaultSize: true, + variant: "tertiary", + onClick: onBack + }, + (0, import_i18n51.__)("Back") + ))), + showSearchEntities && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(import_components50.__experimentalText, { as: "p" }, (0, import_i18n51.__)( + "This template will be used only for the specific item chosen." + )), /* @__PURE__ */ React.createElement( + SuggestionList, + { + entityForSuggestions, + onSelect + } + ), /* @__PURE__ */ React.createElement(import_components50.Flex, { justify: "right" }, /* @__PURE__ */ React.createElement( + import_components50.Button, + { + __next40pxDefaultSize: true, + variant: "tertiary", + onClick: () => { + if (entityForSuggestions.hasGeneralTemplate) { + onBack(); + } else { + setShowSearchEntities(false); + } + } + }, + (0, import_i18n51.__)("Back") + ))) + ); +} +var add_custom_template_modal_content_default = AddCustomTemplateModalContent; + +// node_modules/tslib/tslib.es6.mjs +var __assign = function() { + __assign = Object.assign || function __assign2(t2) { + for (var s2, i2 = 1, n2 = arguments.length; i2 < n2; i2++) { + s2 = arguments[i2]; + for (var p2 in s2) if (Object.prototype.hasOwnProperty.call(s2, p2)) t2[p2] = s2[p2]; + } + return t2; + }; + return __assign.apply(this, arguments); +}; + +// node_modules/lower-case/dist.es2015/index.js +function lowerCase(str) { + return str.toLowerCase(); +} + +// node_modules/no-case/dist.es2015/index.js +var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g]; +var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi; +function noCase(input, options) { + if (options === void 0) { + options = {}; + } + var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d; + var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0"); + var start = 0; + var end = result.length; + while (result.charAt(start) === "\0") + start++; + while (result.charAt(end - 1) === "\0") + end--; + return result.slice(start, end).split("\0").map(transform).join(delimiter); +} +function replace(input, re, value) { + if (re instanceof RegExp) + return input.replace(re, value); + return re.reduce(function(input2, re2) { + return input2.replace(re2, value); + }, input); +} + +// node_modules/dot-case/dist.es2015/index.js +function dotCase(input, options) { + if (options === void 0) { + options = {}; + } + return noCase(input, __assign({ delimiter: "." }, options)); +} + +// node_modules/param-case/dist.es2015/index.js +function paramCase(input, options) { + if (options === void 0) { + options = {}; + } + return dotCase(input, __assign({ delimiter: "-" }, options)); +} + +// routes/template-list/add-new-template/add-custom-generic-template-modal-content.tsx +var import_element63 = __toESM(require_element()); +var import_i18n52 = __toESM(require_i18n()); +var import_components51 = __toESM(require_components()); +function AddCustomGenericTemplateModalContent({ + createTemplate, + onBack +}) { + const [title, setTitle] = (0, import_element63.useState)(""); + const defaultTitle = (0, import_i18n52.__)("Custom Template"); + const [isBusy, setIsBusy] = (0, import_element63.useState)(false); + const inputRef = (0, import_element63.useRef)(null); + (0, import_element63.useEffect)(() => { + if (inputRef.current) { + inputRef.current.focus(); + } + }, []); + async function onCreateTemplate(event) { + event.preventDefault(); + if (isBusy) { + return; + } + setIsBusy(true); + try { + await createTemplate( + { + slug: paramCase(title || defaultTitle) || "wp-custom-template", + title: title || defaultTitle + }, + false + ); + } finally { + setIsBusy(false); + } + } + return /* @__PURE__ */ React.createElement("form", { onSubmit: onCreateTemplate }, /* @__PURE__ */ React.createElement(import_components51.__experimentalVStack, { spacing: 6 }, /* @__PURE__ */ React.createElement( + import_components51.TextControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n52.__)("Name"), + value: title, + onChange: setTitle, + placeholder: defaultTitle, + disabled: isBusy, + ref: inputRef, + help: (0, import_i18n52.__)( + // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts + 'Describe the template, e.g. "Post with sidebar". A custom template can be manually applied to any post or page.' + ) + } + ), /* @__PURE__ */ React.createElement( + import_components51.__experimentalHStack, + { + className: "template-list-custom-generic-template__modal-actions", + justify: "right" + }, + /* @__PURE__ */ React.createElement( + import_components51.Button, + { + __next40pxDefaultSize: true, + variant: "tertiary", + onClick: onBack + }, + (0, import_i18n52.__)("Back") + ), + /* @__PURE__ */ React.createElement( + import_components51.Button, + { + __next40pxDefaultSize: true, + variant: "primary", + type: "submit", + isBusy, + "aria-disabled": isBusy + }, + (0, import_i18n52.__)("Create") + ) + ))); +} +var add_custom_generic_template_modal_content_default = AddCustomGenericTemplateModalContent; + +// routes/template-list/add-new-template/index.tsx +var TEMPLATE_POST_TYPE2 = "wp_template"; +var DEFAULT_TEMPLATE_SLUGS = [ + "front-page", + "home", + "single", + "page", + "index", + "archive", + "author", + "category", + "date", + "tag", + "search", + "404" +]; +var TEMPLATE_ICONS = { + "front-page": home_default, + home: verse_default, + single: pin_default, + page: page_default, + archive: archive_default, + search: search_default, + 404: not_found_default, + index: list_default, + category: category_default, + author: comment_author_avatar_default, + taxonomy: block_meta_default, + date: calendar_default, + tag: tag_default, + attachment: media_default +}; +function TemplateListItem({ + title, + direction, + className, + description, + icon, + onClick, + children +}) { + return /* @__PURE__ */ React.createElement( + import_components52.Button, + { + __next40pxDefaultSize: true, + className, + onClick, + label: description, + showTooltip: !!description + }, + /* @__PURE__ */ React.createElement( + import_components52.Flex, + { + as: "span", + align: "center", + justify: "center", + style: { width: "100%" }, + direction + }, + /* @__PURE__ */ React.createElement("div", { className: "template-list-add-new-template__template-icon" }, /* @__PURE__ */ React.createElement(import_components52.Icon, { icon })), + /* @__PURE__ */ React.createElement( + import_components52.__experimentalVStack, + { + className: "template-list-add-new-template__template-name", + alignment: "center", + spacing: 0 + }, + /* @__PURE__ */ React.createElement( + import_components52.__experimentalText, + { + align: "center", + weight: 500, + lineHeight: 1.53846153846 + }, + title + ), + children + ) + ) + ); +} +var modalContentMap = { + templatesList: 1, + customTemplate: 2, + customGenericTemplate: 3 +}; +function NewTemplateModal({ onClose }) { + const [modalContent, setModalContent] = (0, import_element64.useState)(modalContentMap.templatesList); + const [entityForSuggestions, setEntityForSuggestions] = (0, import_element64.useState)(); + const [isSubmitting, setIsSubmitting] = (0, import_element64.useState)(false); + const missingTemplates = useMissingTemplates( + setEntityForSuggestions, + () => setModalContent(modalContentMap.customTemplate) + ); + const navigate = useNavigate(); + const invalidate = useInvalidate(); + const { saveEntityRecord } = (0, import_data12.useDispatch)(import_core_data8.store); + const { createErrorNotice, createSuccessNotice } = (0, import_data12.useDispatch)(import_notices.store); + const containerRef = (0, import_element64.useRef)(null); + const isMobile = (0, import_compose14.useViewportMatch)("medium", "<"); + const homeUrl = (0, import_data12.useSelect)((select2) => { + return select2(import_core_data8.store).getEntityRecord("root", "__unstableBase")?.home; + }, []); + const TEMPLATE_SHORT_DESCRIPTIONS = { + "front-page": homeUrl, + date: (0, import_i18n53.sprintf)( + // translators: %s: The homepage url. + (0, import_i18n53.__)("E.g. %s"), + homeUrl + "/" + (/* @__PURE__ */ new Date()).getFullYear() + ) + }; + (0, import_element64.useEffect)(() => { + if (containerRef.current && modalContent === modalContentMap.templatesList) { + const [firstFocusable] = import_dom11.focus.focusable.find( + containerRef.current + ); + firstFocusable?.focus(); + } + }, [modalContent]); + async function createTemplate(template, isWPSuggestion = true) { + if (isSubmitting) { + return; + } + setIsSubmitting(true); + try { + const { title, description, slug } = template; + const newTemplate = await saveEntityRecord( + "postType", + TEMPLATE_POST_TYPE2, + { + description, + // Slugs need to be strings, so this is for template `404` + slug: slug.toString(), + status: "publish", + title, + // This adds post meta fields in template + meta: { + is_wp_suggestion: isWPSuggestion, + // Mark as inactive by default when template activation is enabled + is_inactive_by_default: true + } + }, + { throwOnError: true } + ); + navigate({ + to: `/types/wp_template/edit/${encodeURIComponent( + String(newTemplate.id) + )}` + }); + invalidate(); + createSuccessNotice( + (0, import_i18n53.sprintf)( + // translators: %s: Title of the created post or template, e.g: "Hello world". + (0, import_i18n53.__)('"%s" successfully created.'), + (0, import_html_entities4.decodeEntities)(newTemplate.title?.rendered || title) || (0, import_i18n53.__)("(no title)") + ), + { + type: "snackbar" + } + ); + } catch (error) { + const errorMessage = error.message && error.code !== "unknown_error" ? error.message : (0, import_i18n53.__)("An error occurred while creating the template."); + createErrorNotice(errorMessage, { + type: "snackbar" + }); + } finally { + setIsSubmitting(false); + } + } + const onModalClose = () => { + onClose(); + setModalContent(modalContentMap.templatesList); + }; + let modalTitle = (0, import_i18n53.__)("Add template"); + if (modalContent === modalContentMap.customTemplate && entityForSuggestions) { + modalTitle = (0, import_i18n53.sprintf)( + // translators: %s: Name of the post type e.g: "Post". + (0, import_i18n53.__)("Add template: %s"), + entityForSuggestions.labels.singular_name + ); + } else if (modalContent === modalContentMap.customGenericTemplate) { + modalTitle = (0, import_i18n53.__)("Create custom template"); + } + return /* @__PURE__ */ React.createElement( + import_components52.Modal, + { + title: modalTitle, + className: clsx_default("template-list-add-new-template__modal", { + "template-list-add-new-template__modal_template_list": modalContent === modalContentMap.templatesList, + "template-list-custom-template-modal": modalContent === modalContentMap.customTemplate + }), + onRequestClose: onModalClose, + overlayClassName: modalContent === modalContentMap.customGenericTemplate ? "template-list-custom-generic-template__modal" : void 0, + ref: containerRef + }, + modalContent === modalContentMap.templatesList && /* @__PURE__ */ React.createElement( + import_components52.__experimentalGrid, + { + columns: isMobile ? 2 : 3, + gap: 4, + align: "flex-start", + justify: "center", + className: "template-list-add-new-template__template-list__contents" + }, + /* @__PURE__ */ React.createElement(import_components52.Flex, { className: "template-list-add-new-template__template-list__prompt" }, (0, import_i18n53.__)( + "Select what the new template should apply to:" + )), + missingTemplates.map((template) => { + const { title, slug, onClick } = template; + return /* @__PURE__ */ React.createElement( + TemplateListItem, + { + key: slug, + title, + direction: "column", + className: "template-list-add-new-template__template-button", + description: TEMPLATE_SHORT_DESCRIPTIONS[slug], + icon: TEMPLATE_ICONS[slug] || layout_default, + onClick: () => onClick ? onClick(template) : createTemplate(template) + } + ); + }), + /* @__PURE__ */ React.createElement( + TemplateListItem, + { + title: (0, import_i18n53.__)("Custom template"), + direction: "row", + className: "template-list-add-new-template__custom-template-button", + icon: pencil_default, + onClick: () => setModalContent( + modalContentMap.customGenericTemplate + ) + }, + /* @__PURE__ */ React.createElement( + import_components52.__experimentalText, + { + lineHeight: 1.53846153846 + }, + (0, import_i18n53.__)( + "A custom template can be manually applied to any post or page." + ) + ) + ) + ), + modalContent === modalContentMap.customTemplate && entityForSuggestions && /* @__PURE__ */ React.createElement( + add_custom_template_modal_content_default, + { + onSelect: createTemplate, + entityForSuggestions, + onBack: () => setModalContent(modalContentMap.templatesList), + containerRef + } + ), + modalContent === modalContentMap.customGenericTemplate && /* @__PURE__ */ React.createElement( + add_custom_generic_template_modal_content_default, + { + createTemplate, + onBack: () => setModalContent(modalContentMap.templatesList) + } + ) + ); +} +function NewTemplate() { + const [showModal, setShowModal] = (0, import_element64.useState)(false); + const { postType } = (0, import_data12.useSelect)((select2) => { + const { getPostType } = select2(import_core_data8.store); + return { + postType: getPostType(TEMPLATE_POST_TYPE2) + }; + }, []); + if (!postType) { + return null; + } + return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement( + import_components52.Button, + { + variant: "primary", + onClick: () => setShowModal(true), + label: postType.labels.add_new_item, + size: "compact" + }, + postType.labels.add_new_item + ), showModal && /* @__PURE__ */ React.createElement(NewTemplateModal, { onClose: () => setShowModal(false) })); +} +function useMissingTemplates(setEntityForSuggestions, onClick) { + const defaultTemplateTypes = useDefaultTemplateTypes(); + const missingDefaultTemplates = (defaultTemplateTypes || []).filter( + (template) => DEFAULT_TEMPLATE_SLUGS.includes(template.slug) + ); + const onClickMenuItem = (_entityForSuggestions) => { + onClick?.(); + setEntityForSuggestions(_entityForSuggestions); + }; + const enhancedMissingDefaultTemplateTypes = [ + ...missingDefaultTemplates + ]; + const { defaultTaxonomiesMenuItems, taxonomiesMenuItems } = useTaxonomiesMenuItems(onClickMenuItem); + const { defaultPostTypesMenuItems, postTypesMenuItems } = usePostTypeMenuItems(onClickMenuItem); + const authorMenuItem = useAuthorMenuItem(onClickMenuItem); + [ + ...defaultTaxonomiesMenuItems, + ...defaultPostTypesMenuItems, + authorMenuItem + ].forEach((menuItem) => { + if (!menuItem) { + return; + } + const matchIndex = enhancedMissingDefaultTemplateTypes.findIndex( + (template) => template.slug === menuItem.slug + ); + if (matchIndex > -1) { + enhancedMissingDefaultTemplateTypes[matchIndex] = menuItem; + } else { + enhancedMissingDefaultTemplateTypes.push(menuItem); + } + }); + enhancedMissingDefaultTemplateTypes?.sort((template1, template2) => { + return DEFAULT_TEMPLATE_SLUGS.indexOf(template1.slug) - DEFAULT_TEMPLATE_SLUGS.indexOf(template2.slug); + }); + const missingTemplates = [ + ...enhancedMissingDefaultTemplateTypes, + ...usePostTypeArchiveMenuItems(), + ...postTypesMenuItems, + ...taxonomiesMenuItems + ]; + return missingTemplates; +} +var add_new_template_default = (0, import_element64.memo)(NewTemplate); + +// routes/template-list/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='bfa9b6f0e8']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "bfa9b6f0e8"); + style.appendChild(document.createTextNode(':root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-fieldset{border:0;margin:0;padding:0}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{grid-gap:4px 8px;align-items:center;color:#1e1e1e;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{text-wrap:pretty;color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}fieldset.fields__media-edit{border:0;margin:0;padding:0;width:100%}fieldset.fields__media-edit .components-base-control__label{color:#1e1e1e}fieldset.fields__media-edit{container-type:inline-size}fieldset.fields__media-edit .fields__media-edit-compact-group{border:1px dashed #949494;border-radius:4px;overflow:hidden}fieldset.fields__media-edit .fields__media-edit-compact-group.is-single{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button{border:0;border-radius:0}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-compact:not(:last-child){border-bottom:1px solid #f0f0f0}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-compact{min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-compact:focus-within .fields__media-edit-compact-movers,fieldset.fields__media-edit .fields__media-edit-compact:hover .fields__media-edit-compact-movers{opacity:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers{background:#fff;border-radius:2px;opacity:0;pointer-events:none;position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-picker-button{align-items:center;border:1px dashed #949494;border-radius:2px;cursor:pointer;display:flex;gap:8px;min-height:40px;min-width:0;padding:4px 8px;position:relative}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment){border-color:var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment):hover{background-color:color-mix(in srgb,var(--wp-admin-theme-color,#3858e9) 4%,#0000);border-color:var(--wp-admin-theme-color-darker-20);color:var(--wp-admin-theme-color-darker-20)}fieldset.fields__media-edit .fields__media-edit-picker-button:hover{color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}fieldset.fields__media-edit .fields__media-edit-picker-button[aria-disabled=true]{cursor:default;opacity:.6}fieldset.fields__media-edit .fields__media-edit-picker-button .fields__media-edit-picker-button-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-filename,fieldset.fields__media-edit .fields__media-edit-placeholder{flex:1;min-width:0;width:100%}fieldset.fields__media-edit .fields__media-edit-placeholder{text-align:center}fieldset.fields__media-edit .fields__media-edit-thumbnail{aspect-ratio:1/1;border-radius:2px;flex-shrink:0;width:24px}fieldset.fields__media-edit .fields__media-edit-expanded{display:grid;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview{align-items:center;aspect-ratio:3/2;border-radius:2px;display:flex;justify-content:center;overflow:hidden;padding:4px;position:relative;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview .fields__media-edit-expanded-preview-stack{height:100%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-actions{background:#fff;border-radius:2px;position:absolute;right:4px;top:4px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item{border-radius:4px;min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:focus-within .fields__media-edit-expanded-overlay,fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:hover .fields__media-edit-expanded-overlay{opacity:1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:not(.has-preview-image) .fields__media-edit-expanded-preview-stack{padding:8px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-thumbnail{height:100%;object-fit:cover;object-position:50% 50%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-filename{flex:none;text-align:center}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button-spinner svg{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded.is-single{grid-template-columns:1fr}fieldset.fields__media-edit .fields__media-edit-expanded.is-single .fields__media-edit-expanded-preview{aspect-ratio:2/1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button{border-radius:4px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .fields__media-edit-picker-button{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(3,1fr)}@container (max-width: 768px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(2,1fr)}}@container (max-width: 280px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:1fr}}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-picker-button{padding:0}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-placeholder{align-items:center;aspect-ratio:3/2;display:flex;justify-content:center}.fields-controls__slug{border:0;margin:0;padding:0}.fields-controls__slug .fields-controls__slug-external-icon{margin-left:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-image,.fields-controls__featured-image-placeholder{border-radius:4px;display:block;height:100%;width:100%}.fields-controls__featured-image-placeholder{background:#f0f0f0;box-shadow:none}.fields-controls__parent,.fields-controls__password{border:0;margin:0;padding:0}.fields-field__title>span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.routes-template-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}.routes-template-list-author-field__avatar{border-radius:50%;height:24px;margin-right:8px;opacity:0;overflow:hidden;transition:opacity .1s ease-in;width:24px}.routes-template-list-author-field__avatar.is-loaded{opacity:1}.routes-template-list-author-field__avatar img{height:100%;object-fit:cover;width:100%}.routes-template-list-author-field__icon{align-items:center;color:#757575;display:flex;height:24px;justify-content:center;margin-right:8px;width:24px}.routes-template-list-author-field__name{color:#1e1e1e}')); + document.head.appendChild(style); +} + +// routes/template-list/add-new-template/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='0ccc4ccc5c']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "0ccc4ccc5c"); + style.appendChild(document.createTextNode(".template-list-custom-template-modal__contents-wrapper{height:100%;justify-content:flex-start!important}.template-list-custom-template-modal__contents-wrapper>*{width:100%}.template-list-custom-template-modal__contents-wrapper__suggestions_list{margin-left:-12px;margin-right:-12px;width:calc(100% + 24px)}.template-list-custom-template-modal__contents>.components-button{height:auto;justify-content:center}@media (min-width:782px){.template-list-custom-template-modal{width:456px}}@media (min-width:600px){.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list{max-height:224px;overflow-y:auto}}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item{display:block;height:auto;overflow-wrap:break-word;padding:8px 12px;text-align:left;white-space:pre-wrap;width:100%}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item mark{background:none;font-weight:700}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:hover *,.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:hover mark{color:var(--wp-admin-theme-color)}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:focus{background-color:#f0f0f0}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color) inset}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item__info,.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item__title{display:block;overflow:hidden;text-overflow:ellipsis}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item__info{color:#757575;word-break:break-all}.template-list-custom-template-modal__no-results{border:1px solid #ccc;border-radius:2px;padding:16px}.template-list-custom-generic-template__modal .components-modal__header{border-bottom:none}.template-list-custom-generic-template__modal .components-modal__content:before{margin-bottom:4px}@media (min-width:960px){.template-list-add-new-template__modal{margin-top:64px;max-height:calc(100% - 128px);max-width:832px;width:calc(100% - 128px)}}.template-list-add-new-template__modal .template-list-add-new-template__custom-template-button svg,.template-list-add-new-template__modal .template-list-add-new-template__template-button svg{fill:var(--wp-admin-theme-color)}.template-list-add-new-template__modal .template-list-add-new-template__custom-template-button .template-list-add-new-template__template-name{align-items:flex-start;flex-grow:1}.template-list-add-new-template__modal .template-list-add-new-template__template-icon{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:100%;max-height:40px;max-width:40px;padding:8px}.template-list-add-new-template__template-list__contents>.components-button,.template-list-custom-template-modal__contents>.components-button{border:1px solid #ddd;display:flex;flex-direction:column;justify-content:center;outline:1px solid #0000;padding:32px}.template-list-add-new-template__template-list__contents>.components-button span:first-child,.template-list-custom-template-modal__contents>.components-button span:first-child{color:#1e1e1e}.template-list-add-new-template__template-list__contents>.components-button span,.template-list-custom-template-modal__contents>.components-button span{color:#757575}.template-list-add-new-template__template-list__contents>.components-button:hover,.template-list-custom-template-modal__contents>.components-button:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-color:#0000;color:var(--wp-admin-theme-color-darker-10)}.template-list-add-new-template__template-list__contents>.components-button:hover span,.template-list-custom-template-modal__contents>.components-button:hover span{color:var(--wp-admin-theme-color)}.template-list-add-new-template__template-list__contents>.components-button:focus,.template-list-custom-template-modal__contents>.components-button:focus{border-color:#0000;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:3px solid #0000}.template-list-add-new-template__template-list__contents>.components-button:focus span:first-child,.template-list-custom-template-modal__contents>.components-button:focus span:first-child{color:var(--wp-admin-theme-color)}.template-list-add-new-template__template-list__contents .template-list-add-new-template__custom-template-button,.template-list-add-new-template__template-list__contents .template-list-add-new-template__template-list__prompt,.template-list-custom-template-modal__contents .template-list-add-new-template__custom-template-button,.template-list-custom-template-modal__contents .template-list-add-new-template__template-list__prompt{grid-column:1/-1}.template-list-add-new-template__template-list__contents>.components-button{align-items:flex-start;height:100%;text-align:start}")); + document.head.appendChild(style); +} + +// routes/template-list/stage-activation.tsx +var { usePostActions, templateTitleField } = unlock2(import_editor.privateApis); +var { Tabs } = unlock2(import_components53.privateApis); +function getItemId(item) { + return item.id.toString(); +} +function TemplateListActivation() { + const invalidate = useInvalidate2(); + const { activeView = "active" } = useParams({ + from: "/templates/list/$activeView" + }); + const navigate = useNavigate2(); + const searchParams = useSearch({ from: "/templates/list/$activeView" }); + const postTypeObject = (0, import_data13.useSelect)( + (select2) => select2(import_core_data9.store).getPostType("wp_template"), + [] + ); + const [selectedRegisteredTemplate, setSelectedRegisteredTemplate] = (0, import_element65.useState)(null); + const defaultView = DEFAULT_VIEW; + const activeViewOverrides = (0, import_element65.useMemo)( + () => getActiveViewOverridesForTab(activeView), + [activeView] + ); + const handleQueryParamsChange = (0, import_element65.useCallback)( + (params) => { + navigate({ + search: { + ...searchParams, + ...params + } + }); + }, + [searchParams, navigate] + ); + const { view, isModified, updateView, resetToDefault } = useView({ + kind: "postType", + name: "wp_template", + slug: "default-new", + defaultView, + activeViewOverrides, + queryParams: searchParams, + onChangeQueryParams: handleQueryParamsChange + }); + const onReset = () => { + resetToDefault(); + invalidate(); + }; + const onChangeView = (newView) => { + updateView(newView); + if (newView.type !== view.type) { + invalidate(); + } + }; + const { records, isLoading, staticRecords } = useTemplates(activeView); + const users = (0, import_data13.useSelect)( + (select2) => { + const { getUser } = select2(import_core_data9.store); + return records.reduce((acc, record) => { + if (record.author_text) { + if (!acc[record.author_text]) { + acc[record.author_text] = record.author_text; + } + } else if (record.author) { + if (!acc[record.author]) { + acc[record.author] = getUser(record.author); + } + } + return acc; + }, {}); + }, + [records] + ); + const fields = (0, import_element65.useMemo)(() => { + const elements = []; + for (const author in users) { + elements.push({ + value: users[author]?.id ?? author, + label: users[author]?.name ?? author + }); + } + return [ + previewField, + templateTitleField, + descriptionField, + activeField, + slugField, + { + ...authorField, + elements + } + ]; + }, [users]); + const { data: posts, paginationInfo } = (0, import_element65.useMemo)(() => { + return filterSortAndPaginate(records, view, fields); + }, [records, view, fields]); + const cleanupDeletedPostIdsFromUrl = (0, import_element65.useCallback)( + (deletedItems) => { + const deletedIds = deletedItems.map( + (item) => item.id.toString() + ); + const currentPostIds = searchParams.postIds || []; + const remainingPostIds = currentPostIds.filter( + (id) => !deletedIds.includes(id) + ); + if (remainingPostIds.length !== currentPostIds.length) { + navigate({ + search: { + ...searchParams, + postIds: remainingPostIds.length > 0 ? remainingPostIds : void 0 + } + }); + } else { + invalidate(); + } + }, + [invalidate, searchParams, navigate] + ); + const onActionPerformed = (0, import_element65.useCallback)( + (actionId, items) => { + if (actionId === "move-to-trash" || actionId === "permanently-delete") { + cleanupDeletedPostIdsFromUrl(items); + } + if (actionId === "duplicate-post") { + navigate({ + to: `/templates/list/user` + }); + } + }, + [cleanupDeletedPostIdsFromUrl, navigate] + ); + const setActiveTemplateAction = useSetActiveTemplateAction(); + const postTypeActions = usePostActions({ + postType: "wp_template", + context: "list", + onActionPerformed + }); + const actions = (0, import_element65.useMemo)(() => { + return [ + setActiveTemplateAction, + ...postTypeActions?.flatMap((action) => { + if (action.id === "view-post-revisions") { + return []; + } + return [action]; + }) + ]; + }, [setActiveTemplateAction, postTypeActions]); + const tabs = (0, import_element65.useMemo)(() => { + const baseTabs = [ + { + slug: "active", + label: (0, import_i18n54.__)("Active"), + icon: published_default + }, + { + slug: "user", + label: (0, import_i18n54.__)("Created templates"), + icon: comment_author_avatar_default + } + ]; + const authorMap = /* @__PURE__ */ new Map(); + staticRecords.forEach((record) => { + if (record.author_text && !authorMap.has(record.author_text)) { + authorMap.set(record.author_text, { + slug: record.author_text, + label: record.author_text + }); + } + }); + const authorTabs = Array.from(authorMap.values()); + return [...baseTabs, ...authorTabs]; + }, [staticRecords]); + const handleTabChange = (0, import_element65.useCallback)( + (viewSlug) => { + navigate({ + to: `/templates/list/${viewSlug}` + }); + }, + [navigate] + ); + if (!postTypeObject) { + return null; + } + const selection = searchParams.postIds ?? []; + if (view.type === "list" && selection.length === 0 && posts?.length > 0) { + selection.push(posts[0].id.toString()); + } + if (view.type === "list") { + selection.splice(1); + } + const duplicateAction = actions.find( + (action) => action.id === "duplicate-post" + ); + if (duplicateAction && !("RenderModal" in duplicateAction)) { + throw new Error( + "Expected duplicate action to have a RenderModal component" + ); + } + return /* @__PURE__ */ React.createElement( + page_default2, + { + title: (0, import_i18n54.__)("Templates"), + className: "template-page", + actions: /* @__PURE__ */ React.createElement(add_new_template_default, null), + hasPadding: false + }, + tabs.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "routes-template-list__tabs-wrapper" }, /* @__PURE__ */ React.createElement( + Tabs, + { + onSelect: handleTabChange, + selectedTabId: activeView ?? "active" + }, + /* @__PURE__ */ React.createElement(Tabs.TabList, null, tabs.map((tab) => /* @__PURE__ */ React.createElement(Tabs.Tab, { tabId: tab.slug, key: tab.slug }, tab.label))) + )), + /* @__PURE__ */ React.createElement( + dataviews_default, + { + data: posts, + fields, + view, + onChangeView, + actions, + isLoading, + paginationInfo, + defaultLayouts: DEFAULT_LAYOUTS, + getItemId, + selection, + onReset: isModified ? onReset : false, + onChangeSelection: (items) => { + navigate({ + search: { + ...searchParams, + postIds: items.length > 0 ? items : void 0, + edit: items.length === 0 ? void 0 : searchParams.edit + } + }); + }, + isItemClickable: () => true, + onClickItem: (item) => { + if (typeof item.id === "string") { + setSelectedRegisteredTemplate(item); + } else { + navigate({ + to: `/types/wp_template/edit/${encodeURIComponent( + item.id + )}` + }); + } + } + } + ), + selectedRegisteredTemplate && duplicateAction && /* @__PURE__ */ React.createElement( + import_components53.Modal, + { + title: (0, import_i18n54.__)("Duplicate"), + onRequestClose: () => setSelectedRegisteredTemplate(null), + size: "small" + }, + /* @__PURE__ */ React.createElement( + duplicateAction.RenderModal, + { + items: [selectedRegisteredTemplate], + closeModal: () => setSelectedRegisteredTemplate(null) + } + ) + ) + ); +} +var stageActivation = TemplateListActivation; + +// routes/template-list/stage-legacy.tsx +import { + useParams as useParams2, + useNavigate as useNavigate3, + useSearch as useSearch2, + useInvalidate as useInvalidate3 +} from "@wordpress/route"; +var import_core_data11 = __toESM(require_core_data()); +var import_components54 = __toESM(require_components()); +var import_data14 = __toESM(require_data()); +var import_element67 = __toESM(require_element()); +var import_editor2 = __toESM(require_editor()); +var import_i18n55 = __toESM(require_i18n()); + +// routes/template-list/use-templates-legacy.ts +var import_element66 = __toESM(require_element()); +var import_core_data10 = __toESM(require_core_data()); +var { useEntityRecordsWithPermissions: useEntityRecordsWithPermissions4 } = unlock2(import_core_data10.privateApis); +function useTemplatesLegacy(activeView = "all") { + const { records, isResolving } = useEntityRecordsWithPermissions4( + "postType", + "wp_template", + { + per_page: -1 + } + ); + const filteredRecords = (0, import_element66.useMemo)(() => { + if (!records) { + return []; + } + if (activeView === "all") { + return records; + } + return records.filter( + (record) => record.author_text === activeView + ); + }, [records, activeView]); + return { + records: filteredRecords, + isLoading: isResolving, + allRecords: records || [] + // For building author tabs + }; +} + +// routes/template-list/stage-legacy.tsx +var { usePostActions: usePostActions2, templateTitleField: templateTitleField2 } = unlock2(import_editor2.privateApis); +var { Tabs: Tabs2 } = unlock2(import_components54.privateApis); +function getItemId2(item) { + return item.id.toString(); +} +function TemplateListLegacy() { + const invalidate = useInvalidate3(); + const { activeView = "all" } = useParams2({ + from: "/templates/list/$activeView" + }); + const navigate = useNavigate3(); + const searchParams = useSearch2({ from: "/templates/list/$activeView" }); + const postTypeObject = (0, import_data14.useSelect)( + (select2) => select2(import_core_data11.store).getPostType("wp_template"), + [] + ); + const defaultView = DEFAULT_VIEW_LEGACY; + const activeViewOverrides = (0, import_element67.useMemo)( + () => getActiveViewOverridesForTabLegacy(activeView), + [activeView] + ); + const handleQueryParamsChange = (0, import_element67.useCallback)( + (params) => { + navigate({ + search: { + ...searchParams, + ...params + } + }); + }, + [searchParams, navigate] + ); + const { view, isModified, updateView, resetToDefault } = useView({ + kind: "postType", + name: "wp_template", + slug: "default-new", + defaultView, + activeViewOverrides, + queryParams: searchParams, + onChangeQueryParams: handleQueryParamsChange + }); + const onReset = () => { + resetToDefault(); + invalidate(); + }; + const onChangeView = (newView) => { + updateView(newView); + if (newView.type !== view.type) { + invalidate(); + } + }; + const { records, isLoading, allRecords } = useTemplatesLegacy(activeView); + const users = (0, import_data14.useSelect)( + (select2) => { + const { getUser } = select2(import_core_data11.store); + return records.reduce((acc, record) => { + if (record.author_text) { + if (!acc[record.author_text]) { + acc[record.author_text] = record.author_text; + } + } else if (record.author) { + if (!acc[record.author]) { + acc[record.author] = getUser(record.author); + } + } + return acc; + }, {}); + }, + [records] + ); + const fields = (0, import_element67.useMemo)(() => { + const elements = []; + for (const author in users) { + elements.push({ + value: users[author]?.id ?? author, + label: users[author]?.name ?? author + }); + } + return [ + previewField, + templateTitleField2, + descriptionField, + { + ...authorField, + elements + } + ]; + }, [users]); + const { data: posts, paginationInfo } = (0, import_element67.useMemo)(() => { + return filterSortAndPaginate(records, view, fields); + }, [records, view, fields]); + const cleanupDeletedPostIdsFromUrl = (0, import_element67.useCallback)( + (deletedItems) => { + const deletedIds = deletedItems.map( + (item) => item.id.toString() + ); + const currentPostIds = searchParams.postIds || []; + const remainingPostIds = currentPostIds.filter( + (id) => !deletedIds.includes(id) + ); + if (remainingPostIds.length !== currentPostIds.length) { + navigate({ + search: { + ...searchParams, + postIds: remainingPostIds.length > 0 ? remainingPostIds : void 0 + } + }); + } else { + invalidate(); + } + }, + [invalidate, searchParams, navigate] + ); + const onActionPerformed = (0, import_element67.useCallback)( + (actionId, items) => { + if (actionId === "move-to-trash" || actionId === "permanently-delete") { + cleanupDeletedPostIdsFromUrl(items); + } + if (actionId === "duplicate-post") { + navigate({ + to: `/templates/list/all` + }); + } + }, + [cleanupDeletedPostIdsFromUrl, navigate] + ); + const postTypeActions = usePostActions2({ + postType: "wp_template", + context: "list", + onActionPerformed + }); + const actions = (0, import_element67.useMemo)(() => { + return postTypeActions?.flatMap((action) => { + if (action.id === "view-post-revisions") { + return []; + } + return [action]; + }); + }, [postTypeActions]); + const tabs = (0, import_element67.useMemo)(() => { + const baseTabs = [ + { + slug: "all", + label: (0, import_i18n55.__)("All templates"), + icon: layout_default + } + ]; + const authorMap = /* @__PURE__ */ new Map(); + allRecords.forEach((record) => { + if (record.author_text && !authorMap.has(record.author_text)) { + authorMap.set(record.author_text, { + slug: record.author_text, + label: record.author_text + }); + } + }); + const authorTabs = Array.from(authorMap.values()); + return [...baseTabs, ...authorTabs]; + }, [allRecords]); + const handleTabChange = (0, import_element67.useCallback)( + (viewSlug) => { + navigate({ + to: `/templates/list/${viewSlug}` + }); + }, + [navigate] + ); + if (!postTypeObject) { + return null; + } + const selection = searchParams.postIds ?? []; + if (view.type === "list" && selection.length === 0 && posts?.length > 0) { + selection.push(posts[0].id.toString()); + } + if (view.type === "list") { + selection.splice(1); + } + return /* @__PURE__ */ React.createElement( + page_default2, + { + title: (0, import_i18n55.__)("Templates"), + className: "template-page", + actions: /* @__PURE__ */ React.createElement(add_new_template_default, null), + hasPadding: false + }, + tabs.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "routes-template-list__tabs-wrapper" }, /* @__PURE__ */ React.createElement( + Tabs2, + { + onSelect: handleTabChange, + selectedTabId: activeView ?? "all" + }, + /* @__PURE__ */ React.createElement(Tabs2.TabList, null, tabs.map((tab) => /* @__PURE__ */ React.createElement(Tabs2.Tab, { tabId: tab.slug, key: tab.slug }, tab.label))) + )), + /* @__PURE__ */ React.createElement( + dataviews_default, + { + data: posts, + fields, + view, + onChangeView, + actions, + isLoading, + paginationInfo, + defaultLayouts: DEFAULT_LAYOUTS, + getItemId: getItemId2, + selection, + onReset: isModified ? onReset : false, + onChangeSelection: (items) => { + navigate({ + search: { + ...searchParams, + postIds: items.length > 0 ? items : void 0, + edit: items.length === 0 ? void 0 : searchParams.edit + } + }); + }, + isItemClickable: () => true, + onClickItem: (item) => { + navigate({ + to: `/types/wp_template/edit/${encodeURIComponent( + item.id + )}` + }); + } + } + ) + ); +} +var stageLegacy = TemplateListLegacy; + +// routes/template-list/stage.tsx +function TemplateList() { + const isTemplateActivateEnabled = typeof window !== "undefined" && window.__experimentalTemplateActivate; + if (isTemplateActivateEnabled) { + return /* @__PURE__ */ React.createElement(stageActivation, null); + } + return /* @__PURE__ */ React.createElement(stageLegacy, null); +} +var stage = TemplateList; +export { + stage +}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.development.js: + (** + * @license React + * use-sync-external-store-shim.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/template-list/content.min.asset.php b/src/wp-includes/build/routes/template-list/content.min.asset.php new file mode 100644 index 0000000000000..0c68ceddc3a3f --- /dev/null +++ b/src/wp-includes/build/routes/template-list/content.min.asset.php @@ -0,0 +1 @@ + array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-url', 'wp-warning'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/lazy-editor', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '71cfec3a65af6a8912b7'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/template-list/content.min.js b/src/wp-includes/build/routes/template-list/content.min.js new file mode 100644 index 0000000000000..b6ee3f1e89a82 --- /dev/null +++ b/src/wp-includes/build/routes/template-list/content.min.js @@ -0,0 +1,14 @@ +var t_=Object.create;var em=Object.defineProperty;var r_=Object.getOwnPropertyDescriptor;var o_=Object.getOwnPropertyNames;var n_=Object.getPrototypeOf,i_=Object.prototype.hasOwnProperty;var Ce=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var a_=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of o_(e))!i_.call(t,n)&&n!==r&&em(t,n,{get:()=>e[n],enumerable:!(o=r_(e,n))||o.enumerable});return t};var u=(t,e,r)=>(r=t!=null?t_(n_(t)):{},a_(e||!t||!t.__esModule?em(r,"default",{value:t,enumerable:!0}):r,t));var j=Ce((nS,om)=>{om.exports=window.wp.element});var gt=Ce((iS,nm)=>{nm.exports=window.wp.data});var Nl=Ce((aS,im)=>{im.exports=window.wp.preferences});var ht=Ce((_S,sm)=>{sm.exports=window.wp.compose});var de=Ce((xS,lm)=>{lm.exports=window.React});var V=Ce((wS,dm)=>{dm.exports=window.ReactJSXRuntime});var Tm=Ce(($S,Cm)=>{Cm.exports=window.ReactDOM});var Pm=Ce(Em=>{"use strict";var Xo=de();function S_(t,e){return t===e&&(t!==0||1/t===1/e)||t!==t&&e!==e}var C_=typeof Object.is=="function"?Object.is:S_,T_=Xo.useState,E_=Xo.useEffect,P_=Xo.useLayoutEffect,A_=Xo.useDebugValue;function I_(t,e){var r=e(),o=T_({inst:{value:r,getSnapshot:e}}),n=o[0].inst,i=o[1];return P_(function(){n.value=r,n.getSnapshot=e,Ul(n)&&i({inst:n})},[t,r,e]),E_(function(){return Ul(n)&&i({inst:n}),t(function(){Ul(n)&&i({inst:n})})},[t]),A_(r),r}function Ul(t){var e=t.getSnapshot;t=t.value;try{var r=e();return!C_(t,r)}catch{return!0}}function O_(t,e){return e()}var R_=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?O_:I_;Em.useSyncExternalStore=Xo.useSyncExternalStore!==void 0?Xo.useSyncExternalStore:R_});var Im=Ce((ZS,Am)=>{"use strict";Am.exports=Pm()});var W=Ce((eC,Vm)=>{Vm.exports=window.wp.i18n});var K=Ce((tC,km)=>{km.exports=window.wp.primitives});var ec=Ce((PT,Dm)=>{Dm.exports=window.wp.privateApis});var G=Ce((MT,Wm)=>{Wm.exports=window.wp.components});var rc=Ce((LT,Gm)=>{Gm.exports=window.wp.keycodes});var od=Ce((iV,Is)=>{var Cg={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u1EA4:"A",\u1EAE:"A",\u1EB2:"A",\u1EB4:"A",\u1EB6:"A",\u00C6:"AE",\u1EA6:"A",\u1EB0:"A",\u0202:"A",\u1EA2:"A",\u1EA0:"A",\u1EA8:"A",\u1EAA:"A",\u1EAC:"A",\u00C7:"C",\u1E08:"C",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u1EBE:"E",\u1E16:"E",\u1EC0:"E",\u1E14:"E",\u1E1C:"E",\u0206:"E",\u1EBA:"E",\u1EBC:"E",\u1EB8:"E",\u1EC2:"E",\u1EC4:"E",\u1EC6:"E",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u1E2E:"I",\u020A:"I",\u1EC8:"I",\u1ECA:"I",\u00D0:"D",\u00D1:"N",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u1ED0:"O",\u1E4C:"O",\u1E52:"O",\u020E:"O",\u1ECE:"O",\u1ECC:"O",\u1ED4:"O",\u1ED6:"O",\u1ED8:"O",\u1EDC:"O",\u1EDE:"O",\u1EE0:"O",\u1EDA:"O",\u1EE2:"O",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u1EE6:"U",\u1EE4:"U",\u1EEC:"U",\u1EEE:"U",\u1EF0:"U",\u00DD:"Y",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u1EA5:"a",\u1EAF:"a",\u1EB3:"a",\u1EB5:"a",\u1EB7:"a",\u00E6:"ae",\u1EA7:"a",\u1EB1:"a",\u0203:"a",\u1EA3:"a",\u1EA1:"a",\u1EA9:"a",\u1EAB:"a",\u1EAD:"a",\u00E7:"c",\u1E09:"c",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u1EBF:"e",\u1E17:"e",\u1EC1:"e",\u1E15:"e",\u1E1D:"e",\u0207:"e",\u1EBB:"e",\u1EBD:"e",\u1EB9:"e",\u1EC3:"e",\u1EC5:"e",\u1EC7:"e",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u1E2F:"i",\u020B:"i",\u1EC9:"i",\u1ECB:"i",\u00F0:"d",\u00F1:"n",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u1ED1:"o",\u1E4D:"o",\u1E53:"o",\u020F:"o",\u1ECF:"o",\u1ECD:"o",\u1ED5:"o",\u1ED7:"o",\u1ED9:"o",\u1EDD:"o",\u1EDF:"o",\u1EE1:"o",\u1EDB:"o",\u1EE3:"o",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u1EE7:"u",\u1EE5:"u",\u1EED:"u",\u1EEF:"u",\u1EF1:"u",\u00FD:"y",\u00FF:"y",\u0100:"A",\u0101:"a",\u0102:"A",\u0103:"a",\u0104:"A",\u0105:"a",\u0106:"C",\u0107:"c",\u0108:"C",\u0109:"c",\u010A:"C",\u010B:"c",\u010C:"C",\u010D:"c",C\u0306:"C",c\u0306:"c",\u010E:"D",\u010F:"d",\u0110:"D",\u0111:"d",\u0112:"E",\u0113:"e",\u0114:"E",\u0115:"e",\u0116:"E",\u0117:"e",\u0118:"E",\u0119:"e",\u011A:"E",\u011B:"e",\u011C:"G",\u01F4:"G",\u011D:"g",\u01F5:"g",\u011E:"G",\u011F:"g",\u0120:"G",\u0121:"g",\u0122:"G",\u0123:"g",\u0124:"H",\u0125:"h",\u0126:"H",\u0127:"h",\u1E2A:"H",\u1E2B:"h",\u0128:"I",\u0129:"i",\u012A:"I",\u012B:"i",\u012C:"I",\u012D:"i",\u012E:"I",\u012F:"i",\u0130:"I",\u0131:"i",\u0132:"IJ",\u0133:"ij",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u1E30:"K",\u1E31:"k",K\u0306:"K",k\u0306:"k",\u0139:"L",\u013A:"l",\u013B:"L",\u013C:"l",\u013D:"L",\u013E:"l",\u013F:"L",\u0140:"l",\u0141:"l",\u0142:"l",\u1E3E:"M",\u1E3F:"m",M\u0306:"M",m\u0306:"m",\u0143:"N",\u0144:"n",\u0145:"N",\u0146:"n",\u0147:"N",\u0148:"n",\u0149:"n",N\u0306:"N",n\u0306:"n",\u014C:"O",\u014D:"o",\u014E:"O",\u014F:"o",\u0150:"O",\u0151:"o",\u0152:"OE",\u0153:"oe",P\u0306:"P",p\u0306:"p",\u0154:"R",\u0155:"r",\u0156:"R",\u0157:"r",\u0158:"R",\u0159:"r",R\u0306:"R",r\u0306:"r",\u0212:"R",\u0213:"r",\u015A:"S",\u015B:"s",\u015C:"S",\u015D:"s",\u015E:"S",\u0218:"S",\u0219:"s",\u015F:"s",\u0160:"S",\u0161:"s",\u0162:"T",\u0163:"t",\u021B:"t",\u021A:"T",\u0164:"T",\u0165:"t",\u0166:"T",\u0167:"t",T\u0306:"T",t\u0306:"t",\u0168:"U",\u0169:"u",\u016A:"U",\u016B:"u",\u016C:"U",\u016D:"u",\u016E:"U",\u016F:"u",\u0170:"U",\u0171:"u",\u0172:"U",\u0173:"u",\u0216:"U",\u0217:"u",V\u0306:"V",v\u0306:"v",\u0174:"W",\u0175:"w",\u1E82:"W",\u1E83:"w",X\u0306:"X",x\u0306:"x",\u0176:"Y",\u0177:"y",\u0178:"Y",Y\u0306:"Y",y\u0306:"y",\u0179:"Z",\u017A:"z",\u017B:"Z",\u017C:"z",\u017D:"Z",\u017E:"z",\u017F:"s",\u0192:"f",\u01A0:"O",\u01A1:"o",\u01AF:"U",\u01B0:"u",\u01CD:"A",\u01CE:"a",\u01CF:"I",\u01D0:"i",\u01D1:"O",\u01D2:"o",\u01D3:"U",\u01D4:"u",\u01D5:"U",\u01D6:"u",\u01D7:"U",\u01D8:"u",\u01D9:"U",\u01DA:"u",\u01DB:"U",\u01DC:"u",\u1EE8:"U",\u1EE9:"u",\u1E78:"U",\u1E79:"u",\u01FA:"A",\u01FB:"a",\u01FC:"AE",\u01FD:"ae",\u01FE:"O",\u01FF:"o",\u00DE:"TH",\u00FE:"th",\u1E54:"P",\u1E55:"p",\u1E64:"S",\u1E65:"s",X\u0301:"X",x\u0301:"x",\u0403:"\u0413",\u0453:"\u0433",\u040C:"\u041A",\u045C:"\u043A",A\u030B:"A",a\u030B:"a",E\u030B:"E",e\u030B:"e",I\u030B:"I",i\u030B:"i",\u01F8:"N",\u01F9:"n",\u1ED2:"O",\u1ED3:"o",\u1E50:"O",\u1E51:"o",\u1EEA:"U",\u1EEB:"u",\u1E80:"W",\u1E81:"w",\u1EF2:"Y",\u1EF3:"y",\u0200:"A",\u0201:"a",\u0204:"E",\u0205:"e",\u0208:"I",\u0209:"i",\u020C:"O",\u020D:"o",\u0210:"R",\u0211:"r",\u0214:"U",\u0215:"u",B\u030C:"B",b\u030C:"b",\u010C\u0323:"C",\u010D\u0323:"c",\u00CA\u030C:"E",\u00EA\u030C:"e",F\u030C:"F",f\u030C:"f",\u01E6:"G",\u01E7:"g",\u021E:"H",\u021F:"h",J\u030C:"J",\u01F0:"j",\u01E8:"K",\u01E9:"k",M\u030C:"M",m\u030C:"m",P\u030C:"P",p\u030C:"p",Q\u030C:"Q",q\u030C:"q",\u0158\u0329:"R",\u0159\u0329:"r",\u1E66:"S",\u1E67:"s",V\u030C:"V",v\u030C:"v",W\u030C:"W",w\u030C:"w",X\u030C:"X",x\u030C:"x",Y\u030C:"Y",y\u030C:"y",A\u0327:"A",a\u0327:"a",B\u0327:"B",b\u0327:"b",\u1E10:"D",\u1E11:"d",\u0228:"E",\u0229:"e",\u0190\u0327:"E",\u025B\u0327:"e",\u1E28:"H",\u1E29:"h",I\u0327:"I",i\u0327:"i",\u0197\u0327:"I",\u0268\u0327:"i",M\u0327:"M",m\u0327:"m",O\u0327:"O",o\u0327:"o",Q\u0327:"Q",q\u0327:"q",U\u0327:"U",u\u0327:"u",X\u0327:"X",x\u0327:"x",Z\u0327:"Z",z\u0327:"z",\u0439:"\u0438",\u0419:"\u0418",\u0451:"\u0435",\u0401:"\u0415"},Tg=Object.keys(Cg).join("|"),Ny=new RegExp(Tg,"g"),My=new RegExp(Tg,"");function Ly(t){return Cg[t]}var Eg=function(t){return t.replace(Ny,Ly)},Fy=function(t){return!!t.match(My)};Is.exports=Eg;Is.exports.has=Fy;Is.exports.remove=Eg});var Lg=Ce((fV,Mg)=>{"use strict";Mg.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var o,n,i;if(Array.isArray(e)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(!t(e[n],r[n]))return!1;return!0}if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;for(n of e.entries())if(!t(n[1],r.get(n[0])))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(e[n]!==r[n])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(i=Object.keys(e),o=i.length,o!==Object.keys(r).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=o;n--!==0;){var a=i[n];if(!t(e[a],r[a]))return!1}return!0}return e!==e&&r!==r}});var Go=Ce((kk,hh)=>{hh.exports=window.wp.date});var zh=Ce((A4,Hh)=>{Hh.exports=window.wp.warning});var Ob=Ce((FL,Ib)=>{Ib.exports=window.wp.deprecated});var Zt=Ce((oF,Wb)=>{Wb.exports=window.wp.coreData});var Nd=Ce((nF,Gb)=>{Gb.exports=window.wp.editor});var Ui=Ce((fF,Qb)=>{Qb.exports=window.wp.htmlEntities});var m0=Ce((CF,d0)=>{d0.exports=window.wp.notices});var jd=Ce((TF,f0)=>{f0.exports=window.wp.dom});var Hd=Ce((EF,p0)=>{p0.exports=window.wp.url});import{useParams as L2,useNavigate as F2,useSearch as B2,useInvalidate as j2}from"@wordpress/route";var tm=Object.prototype.hasOwnProperty;function rm(t,e,r){for(r of t.keys())if(Yr(r,e))return r}function Yr(t,e){var r,o,n;if(t===e)return!0;if(t&&e&&(r=t.constructor)===e.constructor){if(r===Date)return t.getTime()===e.getTime();if(r===RegExp)return t.toString()===e.toString();if(r===Array){if((o=t.length)===e.length)for(;o--&&Yr(t[o],e[o]););return o===-1}if(r===Set){if(t.size!==e.size)return!1;for(o of t)if(n=o,n&&typeof n=="object"&&(n=rm(e,n),!n)||!e.has(n))return!1;return!0}if(r===Map){if(t.size!==e.size)return!1;for(o of t)if(n=o[0],n&&typeof n=="object"&&(n=rm(e,n),!n)||!Yr(o[1],e.get(n)))return!1;return!0}if(r===ArrayBuffer)t=new Uint8Array(t),e=new Uint8Array(e);else if(r===DataView){if((o=t.byteLength)===e.byteLength)for(;o--&&t.getInt8(o)===e.getInt8(o););return o===-1}if(ArrayBuffer.isView(t)){if((o=t.byteLength)===e.byteLength)for(;o--&&t[o]===e[o];);return o===-1}if(!r||typeof t=="object"){o=0;for(r in t)if(tm.call(t,r)&&++o&&!tm.call(e,r)||!(r in e)||!Yr(t[r],e[r]))return!1;return Object.keys(e).length===o}}return t!==t&&e!==e}var zn=u(j(),1),Qi=u(gt(),1),Fl=u(Nl(),1);function Ml(t,e,r){return`dataviews-${t}-${e}-${r}`}var am=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function Ll(t,e,r){if(!e)return t;let o=t;for(let n of am)n in e&&(o={...o,[n]:e[n]});if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(a=>a.field)),i=(t.filters??[]).filter(a=>!n.has(a.field));o={...o,filters:[...i,...e.filters]}}return e.sort&&r&&t.sort?.field===r.sort?.field&&t.sort?.direction===r.sort?.direction&&(o={...o,sort:e.sort}),e.layout&&(o={...o,layout:{...o.layout,...e.layout}}),e.groupBy&&(o={...o,groupBy:e.groupBy}),o}function Xi(t,e,r){if(!e)return t;let o=t;for(let n of am)if(n in e){let{[n]:i,...a}=o;o=a}if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(i=>i.field));o={...o,filters:(t.filters??[]).filter(i=>!n.has(i.field))}}if(e.sort&&t.sort?.field===e.sort.field&&t.sort?.direction===e.sort.direction&&(o={...o,sort:r?.sort}),e.layout&&"layout"in o&&o.layout){let n={...o.layout};for(let i of Object.keys(e.layout))delete n[i];o={...o,layout:Object.keys(n).length>0?n:void 0}}if(e.groupBy&&"groupBy"in o){let{groupBy:n,...i}=o;o=i}return o}function s_(t,e){let r={...t};for(let o of e)delete r[o];return r}function Wn(t){let{kind:e,name:r,slug:o,defaultView:n,activeViewOverrides:i,queryParams:a,onChangeQueryParams:l}=t,s=Ml(e,r,o),c=(0,Qi.useSelect)(S=>S(Fl.store).get("core/views",s),[s]),{set:f}=(0,Qi.useDispatch)(Fl.store),m=c??n,d=Number(a?.page??m.page??1),p=a?.search??m.search??"",g=(0,zn.useMemo)(()=>Ll({...m,page:d,search:p},i,n),[m,d,p,i,n]),w=!!c,v=(0,zn.useCallback)(S=>{let P={page:S?.page,search:S?.search},R=Xi(s_(S,["page","search"]),i,n);l&&!Yr(P,{page:d,search:p})&&l(P);let I=Xi(m,i,n),k=Xi(n,i,n);Yr(I,R)||(Yr(R,k)?f("core/views",s,void 0):f("core/views",s,R))},[l,d,p,m,n,i,f,s]),b=(0,zn.useCallback)(()=>{f("core/views",s,void 0)},[s,f]);return{view:g,isModified:w,updateView:v,resetToDefault:b}}var l_=u(gt(),1),u_=u(Nl(),1);var Ct=u(j(),1),wl=u(ht(),1);var cm=u(de(),1),um={};function Bl(t,e){let r=cm.useRef(um);return r.current===um&&(r.current=t(e)),r}function jl(t,...e){let r=new URL(`https://base-ui.com/production-error/${t}`);return e.forEach(o=>r.searchParams.append("args[]",o)),`Base UI error #${t}; visit ${r} for the full message.`}var ea=u(de(),1);function Hl(t,e,r,o){let n=Bl(fm).current;return d_(n,t,e,r,o)&&pm(n,[t,e,r,o]),n.callback}function mm(t){let e=Bl(fm).current;return m_(e,t)&&pm(e,t),e.callback}function fm(){return{callback:null,cleanup:null,refs:[]}}function d_(t,e,r,o,n){return t.refs[0]!==e||t.refs[1]!==r||t.refs[2]!==o||t.refs[3]!==n}function m_(t,e){return t.refs.length!==e.length||t.refs.some((r,o)=>r!==e[o])}function pm(t,e){if(t.refs=e,e.every(r=>r==null)){t.callback=null;return}t.callback=r=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),r!=null){let o=Array(e.length).fill(null);for(let n=0;n{for(let n=0;n=t}function zl(t){if(!vm.isValidElement(t))return null;let e=t,r=e.props;return(hm(19)?r?.ref:e.ref)??null}function Gn(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function bm(t,e){let r={};for(let o in t){let n=t[o];if(e?.hasOwnProperty(o)){let i=e[o](n);i!=null&&Object.assign(r,i);continue}n===!0?r[`data-${o.toLowerCase()}`]="":n&&(r[`data-${o.toLowerCase()}`]=n.toString())}return r}function _m(t,e){return typeof t=="function"?t(e):t}function xm(t,e){return typeof t=="function"?t(e):t}var Un={};function Ji(t,e,r,o,n){let i={...Wl(t,Un)};return e&&(i=qn(i,e)),r&&(i=qn(i,r)),o&&(i=qn(i,o)),n&&(i=qn(i,n)),i}function ym(t){if(t.length===0)return Un;if(t.length===1)return Wl(t[0],Un);let e={...Wl(t[0],Un)};for(let r=1;r=65&&n<=90&&(typeof e=="function"||typeof e>"u")}function wm(t){return typeof t=="function"}function Wl(t,e){return wm(t)?t(e):t??Un}function h_(t,e){return e?t?r=>{if(b_(r)){let n=r;v_(n);let i=e(n);return n.baseUIHandlerPrevented||t?.(n),i}let o=e(r);return t?.(r),o}:e:t}function v_(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Gl(t,e){return e?t?e+" "+t:e:t}function b_(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}var __=Object.freeze([]),$r=Object.freeze({});var ql=u(de(),1);function Sm(t,e,r={}){let o=e.render,n=x_(e,r);if(r.enabled===!1)return null;let i=r.state??$r;return y_(t,o,n,i)}function x_(t,e={}){let{className:r,style:o,render:n}=t,{state:i=$r,ref:a,props:l,stateAttributesMapping:s,enabled:c=!0}=e,f=c?_m(r,i):void 0,m=c?xm(o,i):void 0,d=c?bm(i,s):$r,p=c?Gn(d,Array.isArray(l)?ym(l):l)??$r:$r;return typeof document<"u"&&(c?Array.isArray(a)?p.ref=mm([p.ref,zl(n),...a]):p.ref=Hl(p.ref,zl(n),a):Hl(null,null)),c?(f!==void 0&&(p.className=Gl(p.className,f)),m!==void 0&&(p.style=Gn(p.style,m)),p):$r}function y_(t,e,r,o){if(e){if(typeof e=="function")return e(r,o);let n=Ji(r,e.props);return n.ref=r.ref,ea.cloneElement(e,n)}if(t&&typeof t=="string")return w_(t,r);throw new Error(jl(8))}function w_(t,e){return t==="button"?(0,ql.createElement)("button",{type:"button",...e,key:e.key}):t==="img"?(0,ql.createElement)("img",{alt:"",...e,key:e.key}):ea.createElement(t,e)}function Om(t){return Sm(t.defaultTagName??"div",t,t)}function Rm(t){var e,r,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e{},fields:[],data:[],paginationInfo:{totalItems:0,totalPages:0},selection:[],onChangeSelection:()=>{},setOpenedFilter:()=>{},openedFilter:null,getItemId:t=>t.id,isItemClickable:()=>!0,renderItemLink:void 0,containerWidth:0,containerRef:(0,qa.createRef)(),resizeObserverRef:()=>{},defaultLayouts:{list:{},grid:{},table:{}},filters:[],isShowingFilter:!1,setIsShowingFilter:()=>{},hasInitiallyLoaded:!1,hasInfiniteScrollHandler:!1,config:{perPageSizes:[]}});zm.displayName="DataViewsContext";var U=zm;var Or=u(W(),1);var Io=u(W(),1),Ja=u(G(),1),It=u(j(),1),lc=u(rc(),1);var qm=u(G(),1),Um=u(W(),1),Ym=u(V(),1);function io({selection:t,onChangeSelection:e,item:r,getItemId:o,titleField:n,disabled:i,...a}){let l=o(r),s=!i&&t.includes(l),c=n?.getValue?.({item:r})||(0,Um.__)("(no title)");return(0,Ym.jsx)(qm.CheckboxControl,{className:"dataviews-selection-checkbox","aria-label":c,"aria-disabled":i,checked:s,onChange:()=>{i||e(t.includes(l)?t.filter(f=>l!==f):[...t,l])},...a})}var Po=u(G(),1),Zm=u(W(),1),tn=u(j(),1);var Xm=u(gt(),1),oc=u(ht(),1);var $m=u(ec(),1),{lock:BT,unlock:Z}=(0,$m.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/dataviews");var xe=u(V(),1),{Menu:en,kebabCase:N_}=Z(Po.privateApis);function M_({action:t,onClick:e,items:r,variant:o}){let n=typeof t.label=="string"?t.label:t.label(r);return(0,xe.jsx)(Po.Button,{disabled:!!t.disabled,accessibleWhenDisabled:!0,size:"compact",variant:o,onClick:e,children:n})}function L_({action:t,onClick:e,items:r}){let o=typeof t.label=="string"?t.label:t.label(r);return(0,xe.jsx)(en.Item,{disabled:t.disabled,onClick:e,children:(0,xe.jsx)(en.ItemLabel,{children:o})})}function Ao({action:t,items:e,closeModal:r}){let o=typeof t.label=="string"?t.label:t.label(e),n=typeof t.modalHeader=="function"?t.modalHeader(e):t.modalHeader;return(0,xe.jsx)(Po.Modal,{title:n||o,__experimentalHideHeader:!!t.hideModalHeader,onRequestClose:r,focusOnMount:t.modalFocusOnMount??!0,size:t.modalSize||"medium",overlayClassName:`dataviews-action-modal dataviews-action-modal__${N_(t.id)}`,children:(0,xe.jsx)(t.RenderModal,{items:e,closeModal:r})})}function nc({actions:t,item:e,registry:r,setActiveModalAction:o}){let{primaryActions:n,regularActions:i}=(0,tn.useMemo)(()=>t.reduce((l,s)=>((s.isPrimary?l.primaryActions:l.regularActions).push(s),l),{primaryActions:[],regularActions:[]}),[t]),a=l=>l.map(s=>(0,xe.jsx)(L_,{action:s,onClick:()=>{if("RenderModal"in s){o(s);return}s.callback([e],{registry:r})},items:[e]},s.id));return(0,xe.jsxs)(en.Group,{children:[a(n),a(i)]})}function rn({item:t,actions:e,isCompact:r}){let o=(0,Xm.useRegistry)(),{primaryActions:n,eligibleActions:i}=(0,tn.useMemo)(()=>{let l=e.filter(c=>!c.isEligible||c.isEligible(t));return{primaryActions:l.filter(c=>c.isPrimary),eligibleActions:l}},[e,t]),a=(0,oc.useViewportMatch)("medium","<");return r?(0,xe.jsx)(Km,{item:t,actions:i,isSmall:!0,registry:o}):(0,xe.jsxs)(F,{direction:"row",justify:"flex-end",className:"dataviews-item-actions",style:{flexShrink:0,width:"auto"},children:[(0,xe.jsx)(ic,{item:t,actions:n,registry:o}),(n.lengthi(null)})]})}function ic({item:t,actions:e,registry:r,buttonVariant:o}){let[n,i]=(0,tn.useState)(null);return(0,oc.useViewportMatch)("medium","<")||!Array.isArray(e)||e.length===0?null:(0,xe.jsxs)(xe.Fragment,{children:[e.map(l=>(0,xe.jsx)(M_,{action:l,onClick:()=>{if("RenderModal"in l){i(l);return}l.callback([t],{registry:r})},items:[t],variant:o},l.id)),!!n&&(0,xe.jsx)(Ao,{action:n,items:[t],closeModal:()=>i(null)})]})}var on=u(G(),1),Ua=u(W(),1),ut=u(j(),1),tf=u(gt(),1);var ac=u(ht(),1);var ao=u(W(),1);function Qm(t,e,r){return t>0?(0,ao.sprintf)((0,ao._n)("%d Item selected","%d Items selected",t),t):r>e?(0,ao.sprintf)((0,ao._n)("%1$d of %2$d Item","%1$d of %2$d Items",r),e,r):(0,ao.sprintf)((0,ao._n)("%d Item","%d Items",e),e)}var qe=u(V(),1);function F_({action:t,items:e,ActionTriggerComponent:r}){let[o,n]=(0,ut.useState)(!1);return(0,qe.jsxs)(qe.Fragment,{children:[(0,qe.jsx)(r,{...{action:t,onClick:()=>{n(!0)},items:e}}),o&&(0,qe.jsx)(Ao,{action:t,items:e,closeModal:()=>n(!1)})]})}function Ya(t,e){return(0,ut.useMemo)(()=>t.some(r=>r.supportsBulk&&(!r.isEligible||r.isEligible(e))),[t,e])}function nn(t,e){return(0,ut.useMemo)(()=>e.some(r=>t.some(o=>o.supportsBulk&&(!o.isEligible||o.isEligible(r)))),[t,e])}function li({selection:t,onChangeSelection:e,data:r,actions:o,getItemId:n}){let i=(0,ut.useMemo)(()=>r.filter(s=>o.some(c=>c.supportsBulk&&(!c.isEligible||c.isEligible(s)))),[r,o]),a=r.filter(s=>t.includes(n(s))&&i.includes(s)),l=a.length===i.length;return(0,qe.jsx)(on.CheckboxControl,{className:"dataviews-view-table-selection-checkbox",checked:l,indeterminate:!l&&!!a.length,onChange:()=>{e(l?[]:i.map(s=>n(s)))},"aria-label":l?(0,Ua.__)("Deselect all"):(0,Ua.__)("Select all")})}function Jm({action:t,onClick:e,isBusy:r,items:o}){let n=typeof t.label=="string"?t.label:t.label(o);return(0,ac.useViewportMatch)("medium","<")?(0,qe.jsx)(on.Button,{disabled:r,accessibleWhenDisabled:!0,label:n,icon:t.icon,size:"compact",onClick:e,isBusy:r}):(0,qe.jsx)(on.Button,{disabled:r,accessibleWhenDisabled:!0,size:"compact",onClick:e,isBusy:r,children:n})}var rf=[];function B_({action:t,selectedItems:e,actionInProgress:r,setActionInProgress:o}){let n=(0,tf.useRegistry)(),i=(0,ut.useMemo)(()=>e.filter(a=>!t.isEligible||t.isEligible(a)),[t,e]);return"RenderModal"in t?(0,qe.jsx)(F_,{action:t,items:i,ActionTriggerComponent:Jm},t.id):(0,qe.jsx)(Jm,{action:t,onClick:async()=>{o(t.id),await t.callback(e,{registry:n}),o(null)},items:i,isBusy:r===t.id},t.id)}function ef(t,e,r,o,n,i,a,l,s,c){let f=Qm(o.length,t.length,c.totalItems);return(0,qe.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__container",gap:"md",align:"center",children:[(0,qe.jsx)(li,{selection:o,onChangeSelection:s,data:t,actions:e,getItemId:r}),(0,qe.jsx)("span",{className:"dataviews-bulk-actions-footer__item-count",children:f}),(0,qe.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__action-buttons",gap:"xs",children:[n.map(m=>(0,qe.jsx)(B_,{action:m,selectedItems:i,actionInProgress:a,setActionInProgress:l},m.id)),i.length>0&&(0,qe.jsx)(on.Button,{icon:Zn,showTooltip:!0,tooltipPosition:"top",size:"compact",label:(0,Ua.__)("Cancel"),disabled:!!a,accessibleWhenDisabled:!1,onClick:()=>{s(rf)}})]})]})}function j_({selection:t,actions:e,onChangeSelection:r,data:o,getItemId:n,paginationInfo:i}){let[a,l]=(0,ut.useState)(null),s=(0,ut.useRef)(void 0),c=(0,ac.useViewportMatch)("medium","<"),f=(0,ut.useMemo)(()=>e.filter(g=>g.supportsBulk),[e]),m=(0,ut.useMemo)(()=>o.filter(g=>f.some(w=>!w.isEligible||w.isEligible(g))),[o,f]),d=(0,ut.useMemo)(()=>o.filter(g=>t.includes(n(g))&&m.includes(g)),[t,o,n,m]),p=(0,ut.useMemo)(()=>e.filter(g=>g.supportsBulk&&(!c||g.icon)&&d.some(w=>!g.isEligible||g.isEligible(w))),[e,d,c]);if(a)s.current||(s.current=ef(o,e,n,t,p,d,a,l,r,i));else return s.current&&(s.current=void 0),ef(o,e,n,t,p,d,a,l,r,i);return s.current}function $a(){let{data:t,selection:e,actions:r=rf,onChangeSelection:o,getItemId:n,paginationInfo:i}=(0,ut.useContext)(U);return(0,qe.jsx)(j_,{selection:e,onChangeSelection:o,data:t,actions:r,getItemId:n,paginationInfo:i})}var Pr=u(W(),1);var Ar=u(G(),1),so=u(j(),1);function Ka(t,e){let r=[t?.titleField,t?.mediaField,t?.descriptionField].filter(Boolean);return e.filter(o=>!r.includes(o.id)&&o.type!=="media"&&o.enableHiding!==!1)}var Q=u(V(),1),{Menu:me}=Z(Ar.privateApis);function H_({children:t}){return so.Children.toArray(t).filter(Boolean).map((e,r)=>(0,Q.jsxs)(so.Fragment,{children:[r>0&&(0,Q.jsx)(me.Separator,{}),e]},r))}var z_=(0,so.forwardRef)(function({fieldId:e,view:r,fields:o,onChangeView:n,onHide:i,setOpenedFilter:a,canMove:l=!0,canInsertLeft:s=!0,canInsertRight:c=!0},f){let m=r.fields??[],d=m?.indexOf(e),p=r.sort?.field===e,g=!1,w=!1,v=!1,b=[],S=o.find(T=>T.id===e),{setIsShowingFilter:P}=(0,so.useContext)(U);if(!S)return null;g=S.enableHiding!==!1,w=S.enableSorting!==!1;let R=S.header;if(b=!!S.filterBy&&S.filterBy?.operators||[],v=!r.filters?.some(T=>e===T.field)&&!!(S.hasElements||S.Edit)&&S.filterBy!==!1&&!S.filterBy?.isPrimary,!w&&!l&&!g&&!v)return R;let I=Ka(r,o).filter(T=>!m.includes(T.id)),k=(s||c)&&!!I.length,D=(0,Pr.isRTL)();return(0,Q.jsxs)(me,{children:[(0,Q.jsxs)(me.TriggerButton,{render:(0,Q.jsx)(Ar.Button,{size:"compact",className:"dataviews-view-table-header-button",ref:f,variant:"tertiary"}),children:[R,r.sort&&p&&(0,Q.jsx)("span",{"aria-hidden":"true",children:Mm[r.sort.direction]})]}),(0,Q.jsx)(me.Popover,{style:{minWidth:"240px"},children:(0,Q.jsxs)(H_,{children:[w&&(0,Q.jsx)(me.Group,{children:Ha.map(T=>{let O=r.sort&&p&&r.sort.direction===T,N=`${e}-${T}`;return(0,Q.jsx)(me.RadioItem,{name:"view-table-sorting",value:N,checked:O,onChange:()=>{n({...r,sort:{field:e,direction:T},showLevels:!1})},children:(0,Q.jsx)(me.ItemLabel,{children:Wa[T]})},N)})}),v&&(0,Q.jsx)(me.Group,{children:(0,Q.jsx)(me.Item,{prefix:(0,Q.jsx)(Ar.Icon,{icon:Qn}),onClick:()=>{a(e),P(!0),n({...r,page:1,filters:[...r.filters||[],{field:e,value:void 0,operator:b[0]}]})},children:(0,Q.jsx)(me.ItemLabel,{children:(0,Pr.__)("Add filter")})})}),(l||g||k)&&S&&(0,Q.jsxs)(me.Group,{children:[l&&(0,Q.jsx)(me.Item,{prefix:(0,Q.jsx)(Ar.Icon,{icon:Xl}),disabled:D?d>=m.length-1:d<1,onClick:()=>{let T=D?d+1:d-1,O=[...m];O.splice(d,1),O.splice(T,0,e),n({...r,fields:O})},children:(0,Q.jsx)(me.ItemLabel,{children:(0,Pr.__)("Move left")})}),l&&(0,Q.jsx)(me.Item,{prefix:(0,Q.jsx)(Ar.Icon,{icon:Jl}),disabled:D?d<1:d>=m.length-1,onClick:()=>{let T=D?d-1:d+1,O=[...m];O.splice(d,1),O.splice(T,0,e),n({...r,fields:O})},children:(0,Q.jsx)(me.ItemLabel,{children:(0,Pr.__)("Move right")})}),s&&!!I.length&&(0,Q.jsxs)(me,{children:[(0,Q.jsx)(me.SubmenuTriggerItem,{children:(0,Q.jsx)(me.ItemLabel,{children:(0,Pr.__)("Insert left")})}),(0,Q.jsx)(me.Popover,{children:I.map(T=>{let O=D?d+1:d;return(0,Q.jsx)(me.Item,{onClick:()=>{n({...r,fields:[...m.slice(0,O),T.id,...m.slice(O)]})},children:(0,Q.jsx)(me.ItemLabel,{children:T.label})},T.id)})})]}),c&&!!I.length&&(0,Q.jsxs)(me,{children:[(0,Q.jsx)(me.SubmenuTriggerItem,{children:(0,Q.jsx)(me.ItemLabel,{children:(0,Pr.__)("Insert right")})}),(0,Q.jsx)(me.Popover,{children:I.map(T=>{let O=D?d:d+1;return(0,Q.jsx)(me.Item,{onClick:()=>{n({...r,fields:[...m.slice(0,O),T.id,...m.slice(O)]})},children:(0,Q.jsx)(me.ItemLabel,{children:T.label})},T.id)})})]}),g&&S&&(0,Q.jsx)(me.Item,{prefix:(0,Q.jsx)(Ar.Icon,{icon:si}),onClick:()=>{i(S),n({...r,fields:m.filter(T=>T!==e)})},children:(0,Q.jsx)(me.ItemLabel,{children:(0,Pr.__)("Hide column")})})]})]})})]})}),W_=z_,an=W_;var of=u(j(),1),sc=u(V(),1);function G_({item:t,isItemClickable:e,onClickItem:r,className:o}){return!e(t)||!r?{className:o}:{className:o?`${o} ${o}--clickable`:void 0,role:"button",tabIndex:0,onClick:n=>{n.stopPropagation(),r(t)},onKeyDown:n=>{(n.key==="Enter"||n.key===""||n.key===" ")&&(n.stopPropagation(),r(t))}}}function lo({item:t,isItemClickable:e,onClickItem:r,renderItemLink:o,className:n,children:i,...a}){if(!e(t))return(0,sc.jsx)("div",{className:n,...a,children:i});if(o){let s=o({item:t,className:`${n} ${n}--clickable`,...a,children:i});return(0,of.cloneElement)(s,{onClick:c=>{c.stopPropagation(),s.props.onClick&&s.props.onClick(c)},onKeyDown:c=>{(c.key==="Enter"||c.key===""||c.key===" ")&&(c.stopPropagation(),s.props.onKeyDown&&s.props.onKeyDown(c))}})}let l=G_({item:t,isItemClickable:e,onClickItem:r,className:n});return(0,sc.jsx)("div",{...l,...a,children:i})}var sr=u(V(),1);function q_({item:t,level:e,titleField:r,mediaField:o,descriptionField:n,onClickItem:i,renderItemLink:a,isItemClickable:l}){return(0,sr.jsxs)(F,{direction:"row",gap:"md",align:"flex-start",justify:"flex-start",children:[o&&(0,sr.jsx)(lo,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-column-primary__media","aria-label":l(t)&&(i||a)&&r?r.getValue?.({item:t}):void 0,children:(0,sr.jsx)(o.render,{item:t,field:o,config:{sizes:"32px"}})}),(0,sr.jsxs)(F,{direction:"column",align:"flex-start",className:"dataviews-view-table__primary-column-content",children:[r&&(0,sr.jsxs)(lo,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-title-field",children:[e!==void 0&&e>0&&(0,sr.jsxs)("span",{className:"dataviews-view-table__level",children:[Array(e).fill("\u2014").join(" "),"\xA0"]}),(0,sr.jsx)(r.render,{item:t,field:r})]}),n&&(0,sr.jsx)(n.render,{item:t,field:n})]})]})}var Za=q_;var nf=u(ht(),1),sn=u(j(),1),af=u(W(),1),U_=t=>(0,af.isRTL)()?Math.abs(t.scrollLeft)<=1:t.scrollLeft+t.clientWidth>=t.scrollWidth-1;function sf({scrollContainerRef:t,enabled:e=!1}){let[r,o]=(0,sn.useState)(!1),n=(0,nf.useDebounce)((0,sn.useCallback)(()=>{let i=t.current;i&&o(U_(i))},[t,o]),200);return(0,sn.useEffect)(()=>typeof window>"u"||!e||!t.current?()=>{}:(n(),t.current.addEventListener("scroll",n),window.addEventListener("resize",n),()=>{t.current?.removeEventListener("scroll",n),window.removeEventListener("resize",n)}),[t,e]),r}function Wt(t,e){return t.reduce((r,o)=>{let n=e.getValue({item:o});return r.has(n)||r.set(n,[]),r.get(n)?.push(o),r},new Map)}var uo=u(G(),1),uf=u(W(),1),cf=u(j(),1);var Dt=u(V(),1);function lf({field:t,isVisible:e,onToggleVisibility:r}){return(0,Dt.jsx)(uo.__experimentalItem,{onClick:t.enableHiding?r:void 0,children:(0,Dt.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",align:"center",children:[(0,Dt.jsx)("div",{style:{height:24,width:24},children:e&&(0,Dt.jsx)(uo.Icon,{icon:Kn})}),(0,Dt.jsx)("span",{className:"dataviews-view-config__label",children:t.label})]})})}function Y_(t){return!!t}function Xa({showLabel:t=!0}){let{view:e,fields:r,onChangeView:o}=(0,cf.useContext)(U),n=Ka(e,r);if(!n?.length)return null;let i=r.find(g=>g.id===e.titleField),a=r.find(g=>g.id===e.mediaField),l=r.find(g=>g.id===e.descriptionField),s=[{field:i,isVisibleFlag:"showTitle"},{field:a,isVisibleFlag:"showMedia"},{field:l,isVisibleFlag:"showDescription"}].filter(({field:g})=>Y_(g)),c=e.fields??[],f=n.filter(g=>c.includes(g.id)).length,m=s.filter(({isVisibleFlag:g})=>e[g]??!0),d=m.length+f,p=d===1&&m.length===1;return(0,Dt.jsxs)(F,{direction:"column",className:"dataviews-field-control",children:[t&&(0,Dt.jsx)(uo.BaseControl.VisualLabel,{children:(0,uf.__)("Properties")}),(0,Dt.jsx)(F,{direction:"column",className:"dataviews-view-config__properties",children:(0,Dt.jsxs)(uo.__experimentalItemGroup,{isBordered:!0,isSeparated:!0,size:"medium",children:[s.map(({field:g,isVisibleFlag:w})=>{let v=e[w]??!0,b=p&&v?{...g,enableHiding:!1}:g;return(0,Dt.jsx)(lf,{field:b,isVisible:v,onToggleVisibility:()=>{o({...e,[w]:!v})}},g.id)}),n.map(g=>{let w=c.includes(g.id),v=d===1&&w?{...g,enableHiding:!1}:g;return(0,Dt.jsx)(lf,{field:v,isVisible:w,onToggleVisibility:()=>{o({...e,fields:w?c.filter(b=>b!==g.id):[...c,g.id]})}},g.id)})]})})]})}var Qa=u(j(),1);function lr(t,e={delay:400}){let[r,o]=(0,Qa.useState)(!1);return(0,Qa.useEffect)(()=>{if(!t)return;let n=setTimeout(()=>{o(!0)},e.delay);return()=>{clearTimeout(n),o(!1)}},[t,e.delay]),r}var $=u(V(),1);function mf(t,e){if(t)return t;if(e==="integer"||e==="number")return"end"}function $_({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=z("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,$.jsx)("div",{className:i,children:(0,$.jsx)(n.render,{item:t,field:n})})}function df({hasBulkActions:t,item:e,level:r,actions:o,fields:n,id:i,view:a,titleField:l,mediaField:s,descriptionField:c,selection:f,getItemId:m,isItemClickable:d,onClickItem:p,renderItemLink:g,onChangeSelection:w,isActionsColumnSticky:v,posinset:b}){let{paginationInfo:S}=(0,It.useContext)(U),P=Ya(o,e),R=P&&f.includes(i),{showTitle:I=!0,showMedia:k=!0,showDescription:D=!0,infiniteScrollEnabled:T}=a,O=(0,It.useRef)(!1),N=a.fields??[],_=l&&I||s&&k||c&&D;return(0,$.jsxs)("tr",{className:z("dataviews-view-table__row",{"is-selected":P&&R,"has-bulk-actions":P}),onTouchStart:()=>{O.current=!0},"aria-setsize":T?S.totalItems:void 0,"aria-posinset":b,role:T?"article":void 0,onMouseDown:y=>{let E=(0,lc.isAppleOS)()?y.metaKey:y.ctrlKey;y.button===0&&E&&window.navigator.userAgent.toLowerCase().includes("firefox")&&y?.preventDefault()},onClick:y=>{if(!P)return;((0,lc.isAppleOS)()?y.metaKey:y.ctrlKey)&&!O.current&&document.getSelection()?.type!=="Range"&&w(f.includes(i)?f.filter(x=>i!==x):[...f,i])},children:[t&&(0,$.jsx)("td",{className:"dataviews-view-table__checkbox-column",children:(0,$.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,$.jsx)(io,{item:e,selection:f,onChangeSelection:w,getItemId:m,titleField:l,disabled:!P})})}),_&&(0,$.jsx)("td",{children:(0,$.jsx)(Za,{item:e,level:r,titleField:I?l:void 0,mediaField:k?s:void 0,descriptionField:D?c:void 0,isItemClickable:d,onClickItem:p,renderItemLink:g})}),N.map(y=>{let{width:E,maxWidth:x,minWidth:A,align:h}=a.layout?.styles?.[y]??{},C=n.find(L=>L.id===y),M=mf(h,C?.type);return(0,$.jsx)("td",{style:{width:E,maxWidth:x,minWidth:A},children:(0,$.jsx)($_,{fields:n,item:e,column:y,align:M})},y)}),!!o?.length&&(0,$.jsx)("td",{className:z("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":v}),onClick:y=>y.stopPropagation(),children:(0,$.jsx)(rn,{item:e,actions:o})})]})}function K_({actions:t,data:e,fields:r,getItemId:o,getItemLevel:n,isLoading:i=!1,onChangeView:a,onChangeSelection:l,selection:s,setOpenedFilter:c,onClickItem:f,isItemClickable:m,renderItemLink:d,view:p,className:g,empty:w}){let{containerRef:v}=(0,It.useContext)(U),b=lr(i),S=(0,It.useRef)(new Map),P=(0,It.useRef)(void 0),[R,I]=(0,It.useState)(),[k,D]=(0,It.useState)(null);(0,It.useEffect)(()=>{P.current&&(P.current.focus(),P.current=void 0)});let T=(0,It.useId)(),O=sf({scrollContainerRef:v,enabled:!!t?.length}),N=nn(t,e);if(R){P.current=R,I(void 0);return}let _=Y=>{let J=S.current.get(Y.id),_e=J?S.current.get(J.fallback):void 0;I(_e?.node)},y=Y=>{Y.preventDefault(),Y.stopPropagation();let J={getBoundingClientRect:()=>({x:Y.clientX,y:Y.clientY,top:Y.clientY,left:Y.clientX,right:Y.clientX,bottom:Y.clientY,width:0,height:0,toJSON:()=>({})})};window.requestAnimationFrame(()=>{D(J)})},E=!!e?.length,x=r.find(Y=>Y.id===p.titleField),A=r.find(Y=>Y.id===p.mediaField),h=r.find(Y=>Y.id===p.descriptionField),C=p.groupBy?.field?r.find(Y=>Y.id===p.groupBy?.field):null,M=C?Wt(e,C):null,{showTitle:L=!0,showMedia:ne=!0,showDescription:Te=!0}=p,Me=x&&L||A&&ne||h&&Te,ze=p.fields??[],at=(Y,J)=>_e=>{_e?S.current.set(Y,{node:_e,fallback:ze[J>0?J-1:1]}):S.current.delete(Y)},or=p.infiniteScrollEnabled&&!M,Sr=(0,Io.isRTL)();return E?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("table",{className:z("dataviews-view-table",g,{[`has-${p.layout?.density}-density`]:p.layout?.density&&["compact","comfortable"].includes(p.layout.density),"has-bulk-actions":N,"is-refreshing":!or&&b}),"aria-busy":i,"aria-describedby":T,role:or?"feed":void 0,inert:!or&&i?"true":void 0,children:[(0,$.jsxs)("colgroup",{children:[N&&(0,$.jsx)("col",{className:"dataviews-view-table__col-checkbox"}),Me&&(0,$.jsx)("col",{className:"dataviews-view-table__col-first-data"}),ze.map((Y,J)=>(0,$.jsx)("col",{className:z(`dataviews-view-table__col-${Y}`,{"dataviews-view-table__col-first-data":!Me&&J===0})},`col-${Y}`)),!!t?.length&&(0,$.jsx)("col",{className:"dataviews-view-table__col-actions"})]}),k&&(0,$.jsx)(Ja.Popover,{anchor:k,onClose:()=>D(null),placement:"bottom-start",children:(0,$.jsx)(Xa,{showLabel:!1})}),(0,$.jsx)("thead",{onContextMenu:y,children:(0,$.jsxs)("tr",{className:"dataviews-view-table__row",children:[N&&(0,$.jsx)("th",{className:"dataviews-view-table__checkbox-column",scope:"col",onContextMenu:y,children:(0,$.jsx)(li,{selection:s,onChangeSelection:l,data:e,actions:t,getItemId:o})}),Me&&(0,$.jsx)("th",{scope:"col",children:x&&(0,$.jsx)(an,{ref:at(x.id,0),fieldId:x.id,view:p,fields:r,onChangeView:a,onHide:_,setOpenedFilter:c,canMove:!1,canInsertLeft:Sr?p.layout?.enableMoving??!0:!1,canInsertRight:Sr?!1:p.layout?.enableMoving??!0})}),ze.map((Y,J)=>{let{width:_e,maxWidth:Cr,minWidth:Tr,align:Co}=p.layout?.styles?.[Y]??{},To=r.find(Dl=>Dl.id===Y),Zo=mf(Co,To?.type),Hn=p.layout?.enableMoving??!0;return(0,$.jsx)("th",{style:{width:_e,maxWidth:Cr,minWidth:Tr,textAlign:Zo},"aria-sort":p.sort?.direction&&p.sort?.field===Y?za[p.sort.direction]:void 0,scope:"col",children:(0,$.jsx)(an,{ref:at(Y,J),fieldId:Y,view:p,fields:r,onChangeView:a,onHide:_,setOpenedFilter:c,canMove:Hn,canInsertLeft:Hn,canInsertRight:Hn})},Y)}),!!t?.length&&(0,$.jsx)("th",{className:z("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":!O}),children:(0,$.jsx)("span",{className:"dataviews-view-table-header",children:(0,Io.__)("Actions")})})]})}),E&&C&&M?Array.from(M.entries()).map(([Y,J])=>(0,$.jsxs)("tbody",{children:[(0,$.jsx)("tr",{className:"dataviews-view-table__group-header-row",children:(0,$.jsx)("td",{colSpan:ze.length+(Me?1:0)+(N?1:0)+(t?.length?1:0),className:"dataviews-view-table__group-header-cell",children:p.groupBy?.showLabel===!1?Y:(0,Io.sprintf)((0,Io.__)("%1$s: %2$s"),C.label,Y)})}),J.map((_e,Cr)=>(0,$.jsx)(df,{item:_e,level:p.showLevels&&typeof n=="function"?n(_e):void 0,hasBulkActions:N,actions:t,fields:r,id:o(_e)||Cr.toString(),view:p,titleField:x,mediaField:A,descriptionField:h,selection:s,getItemId:o,onChangeSelection:l,onClickItem:f,renderItemLink:d,isItemClickable:m,isActionsColumnSticky:!O},o(_e)))]},`group-${Y}`)):(0,$.jsx)("tbody",{children:E&&e.map((Y,J)=>(0,$.jsx)(df,{item:Y,level:p.showLevels&&typeof n=="function"?n(Y):void 0,hasBulkActions:N,actions:t,fields:r,id:o(Y)||J.toString(),view:p,titleField:x,mediaField:A,descriptionField:h,selection:s,getItemId:o,onChangeSelection:l,onClickItem:f,renderItemLink:d,isItemClickable:m,isActionsColumnSticky:!O,posinset:or?J+1:void 0},o(Y)))})]}),or&&i&&(0,$.jsx)("div",{className:"dataviews-loading",id:T,children:(0,$.jsx)("p",{className:"dataviews-loading-more",children:(0,$.jsx)(Ja.Spinner,{})})})]}):(0,$.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":b}),id:T,children:w})}var ff=K_;var vf=u(G(),1),rs=u(W(),1);var Nt=u(G(),1);var ui=u(W(),1),gf=u(ht(),1),hf=u(rc(),1),ts=u(j(),1);var Z_=u(G(),1),X_=u(W(),1),es=u(j(),1);var Q_=u(V(),1),J_=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}],ex=J_[2].value;function pf(){let t=(0,es.useContext)(U),e=t.view;return(0,es.useMemo)(()=>{let r=t.containerWidth,o=32,n=e.layout?.previewSize??ex,i=Math.floor((r+o)/(n+o));return Math.max(1,i)},[t.containerWidth,e.layout?.previewSize])}var se=u(V(),1),{Badge:tx}=Z(Nt.privateApis);function rx(t,e){let r=[];for(let o=0,n=t.length;o{if(b.onClickCapture?.(h),(0,hf.isAppleOS)()?h.metaKey:h.ctrlKey){if(h.stopPropagation(),h.preventDefault(),!k)return;o(r.includes(D)?r.filter(C=>D!==C):[...r,D])}},children:[(0,se.jsx)(lo,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:z("dataviews-view-grid__media",{"dataviews-view-grid__media--placeholder":!_}),...x,children:y}),w&&(0,se.jsx)(io,{item:s,selection:r,onChangeSelection:o,getItemId:l,titleField:m,disabled:!k}),!!c?.length&&(0,se.jsx)("div",{className:"dataviews-view-grid__media-actions",children:(0,se.jsx)(rn,{item:s,actions:c,isCompact:!0})}),P&&(0,se.jsx)("div",{className:"dataviews-view-grid__title",children:(0,se.jsx)(lo,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:"dataviews-view-grid__title-field dataviews-title-field",...A,title:m?.getValueFormatted({item:s,field:m})||void 0,children:E})}),(0,se.jsxs)(F,{direction:"column",gap:"xs",children:[I&&d?.render&&(0,se.jsx)(d.render,{item:s,field:d}),!!g?.length&&(0,se.jsx)(F,{direction:"row",className:"dataviews-view-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:g.map(h=>(0,se.jsx)(tx,{className:"dataviews-view-grid__field-value",children:(0,se.jsx)(h.render,{item:s,field:h})},h.id))}),!!p?.length&&(0,se.jsx)(F,{direction:"column",className:"dataviews-view-grid__fields",gap:"xs",children:p.map(h=>(0,se.jsx)(Nt.Flex,{className:"dataviews-view-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,se.jsxs)(se.Fragment,{children:[(0,se.jsx)(Nt.Tooltip,{text:h.label,children:(0,se.jsx)(Nt.FlexItem,{className:"dataviews-view-grid__field-name",children:h.header})}),(0,se.jsx)(Nt.FlexItem,{className:"dataviews-view-grid__field-value",style:{maxHeight:"none"},children:(0,se.jsx)(h.render,{item:s,field:h})})]})},h.id))})]})]})});function uc({data:t,isInfiniteScroll:e,className:r,inert:o,isLoading:n,view:i,fields:a,selection:l,onChangeSelection:s,onClickItem:c,isItemClickable:f,renderItemLink:m,getItemId:d,actions:p}){let{paginationInfo:g,resizeObserverRef:w}=(0,ts.useContext)(U),v=pf(),b=nn(p,t),S=a.find(N=>N.id===i?.titleField),P=a.find(N=>N.id===i?.mediaField),R=a.find(N=>N.id===i?.descriptionField),I=i.fields??[],{regularFields:k,badgeFields:D}=I.reduce((N,_)=>{let y=a.find(x=>x.id===_);if(!y)return N;let E=i.layout?.badgeFields?.includes(_)?"badgeFields":"regularFields";return N[E].push(y),N},{regularFields:[],badgeFields:[]}),T="900px",O=Math.ceil(t.length/v);return(0,se.jsx)(Nt.Composite,{role:e?"feed":"grid",className:z("dataviews-view-grid",r),focusWrap:!0,"aria-busy":n,"aria-rowcount":e?void 0:O,ref:w,inert:o,children:rx(t,v).map((N,_)=>(0,se.jsx)(Nt.Composite.Row,{render:(0,se.jsx)("div",{role:"row","aria-rowindex":_+1,"aria-label":(0,ui.sprintf)((0,ui.__)("Row %d"),_+1),className:"dataviews-view-grid__row",style:{gridTemplateColumns:`repeat( ${v}, minmax(0, 1fr) )`}}),children:N.map((y,E)=>{let x=_*v+E;return(0,se.jsx)(Nt.Composite.Item,{render:A=>(0,se.jsx)(ox,{...A,role:e?"article":"gridcell","aria-setsize":e?g.totalItems:void 0,"aria-posinset":e?x+1:void 0,view:i,selection:l,onChangeSelection:s,onClickItem:c,isItemClickable:f,renderItemLink:m,getItemId:d,item:y,actions:p,mediaField:P,titleField:S,descriptionField:R,regularFields:k,badgeFields:D,hasBulkActions:b,config:{sizes:T}})},d(y))})},_))})}var Mt=u(V(),1);function nx({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,selection:c,view:f,className:m,empty:d}){let p=lr(!!n),g=!!e?.length,w=f.groupBy?.field?r.find(P=>P.id===f.groupBy?.field):null,v=w?Wt(e,w):null,b=f.infiniteScrollEnabled&&!v;if(!g)return(0,Mt.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":p}),children:d});let S={className:z(m,{"is-refreshing":!b&&p}),inert:!b&&n?"true":void 0,isLoading:n,view:f,fields:r,selection:c,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,getItemId:o,actions:t};return(0,Mt.jsxs)(Mt.Fragment,{children:[g&&w&&v&&(0,Mt.jsx)(F,{direction:"column",gap:"lg",children:Array.from(v.entries()).map(([P,R])=>(0,Mt.jsxs)(F,{direction:"column",gap:"sm",children:[(0,Mt.jsx)("h3",{className:"dataviews-view-grid__group-header",children:f.groupBy?.showLabel===!1?P:(0,rs.sprintf)((0,rs.__)("%1$s: %2$s"),w.label,P)}),(0,Mt.jsx)(uc,{...S,data:R,isInfiniteScroll:!1})]},P))}),!v&&(0,Mt.jsx)(uc,{...S,data:e,isInfiniteScroll:!!b}),b&&n&&(0,Mt.jsx)("p",{className:"dataviews-loading-more",children:(0,Mt.jsx)(vf.Spinner,{})})]})}var bf=nx;var os=u(ht(),1),Ke=u(G(),1),He=u(j(),1),ci=u(W(),1);var fc=u(gt(),1);var q=u(V(),1),{Menu:cc}=Z(Ke.privateApis);function dc(t){return`${t}-item-wrapper`}function ix(t,e){return`${t}-primary-action-${e}`}function mc(t){return`${t}-dropdown`}function ax({idPrefix:t,primaryAction:e,item:r}){let o=(0,fc.useRegistry)(),[n,i]=(0,He.useState)(!1),a=ix(t,e.id),l=typeof e.label=="string"?e.label:e.label([r]);return"RenderModal"in e?(0,q.jsx)("div",{role:"gridcell",children:(0,q.jsx)(Ke.Composite.Item,{id:a,render:(0,q.jsx)(Ke.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,text:l,size:"small",onClick:()=>i(!0)}),children:n&&(0,q.jsx)(Ao,{action:e,items:[r],closeModal:()=>i(!1)})})},e.id):(0,q.jsx)("div",{role:"gridcell",children:(0,q.jsx)(Ke.Composite.Item,{id:a,render:(0,q.jsx)(Ke.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,size:"small",onClick:()=>{e.callback([r],{registry:o})},children:l})})},e.id)}function _f({view:t,actions:e,idPrefix:r,isSelected:o,item:n,titleField:i,mediaField:a,descriptionField:l,onSelect:s,otherFields:c,onDropdownTriggerKeyDown:f,posinset:m}){let{showTitle:d=!0,showMedia:p=!0,showDescription:g=!0,infiniteScrollEnabled:w}=t,v=(0,He.useRef)(null),b=`${r}-label`,S=`${r}-description`,P=(0,fc.useRegistry)(),[R,I]=(0,He.useState)(!1),[k,D]=(0,He.useState)(null),T=({type:h})=>{I(h==="mouseenter")},{paginationInfo:O}=(0,He.useContext)(U);(0,He.useEffect)(()=>{o&&v.current?.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})},[o]);let{primaryAction:N,eligibleActions:_}=(0,He.useMemo)(()=>{let h=e.filter(M=>!M.isEligible||M.isEligible(n));return{primaryAction:h.filter(M=>M.isPrimary)[0],eligibleActions:h}},[e,n]),y=N&&e.length===1,E=p&&a?.render?(0,q.jsx)("div",{className:"dataviews-view-list__media-wrapper",children:(0,q.jsx)(a.render,{item:n,field:a,config:{sizes:"52px"}})}):null,x=d&&i?.render?(0,q.jsx)(i.render,{item:n,field:i}):null,A=_?.length>0&&(0,q.jsxs)(F,{direction:"row",gap:"md",className:"dataviews-view-list__item-actions",children:[N&&(0,q.jsx)(ax,{idPrefix:r,primaryAction:N,item:n}),!y&&(0,q.jsxs)("div",{role:"gridcell",children:[(0,q.jsxs)(cc,{placement:"bottom-end",children:[(0,q.jsx)(cc.TriggerButton,{render:(0,q.jsx)(Ke.Composite.Item,{id:mc(r),render:(0,q.jsx)(Ke.Button,{size:"small",icon:ri,label:(0,ci.__)("Actions"),accessibleWhenDisabled:!0,disabled:!e.length,onKeyDown:f})})}),(0,q.jsx)(cc.Popover,{children:(0,q.jsx)(nc,{actions:_,item:n,registry:P,setActiveModalAction:D})})]}),!!k&&(0,q.jsx)(Ao,{action:k,items:[n],closeModal:()=>D(null)})]})]});return(0,q.jsx)(Ke.Composite.Row,{ref:v,render:(0,q.jsx)("div",{"aria-posinset":m,"aria-setsize":w?O.totalItems:void 0}),role:w?"article":"row",className:z({"is-selected":o,"is-hovered":R}),onMouseEnter:T,onMouseLeave:T,children:(0,q.jsxs)(F,{direction:"row",className:"dataviews-view-list__item-wrapper",children:[(0,q.jsx)("div",{role:"gridcell",children:(0,q.jsx)(Ke.Composite.Item,{id:dc(r),"aria-pressed":o,"aria-labelledby":b,"aria-describedby":S,className:"dataviews-view-list__item",onClick:()=>s(n)})}),(0,q.jsxs)(F,{direction:"row",gap:"md",justify:"start",align:"flex-start",style:{flex:1,minWidth:0},children:[E,(0,q.jsxs)(F,{direction:"column",gap:"xs",className:"dataviews-view-list__field-wrapper",children:[(0,q.jsxs)(F,{direction:"row",align:"center",children:[(0,q.jsx)("div",{className:"dataviews-title-field dataviews-view-list__title-field",id:b,children:x}),A]}),g&&l?.render&&(0,q.jsx)("div",{className:"dataviews-view-list__field",children:(0,q.jsx)(l.render,{item:n,field:l})}),(0,q.jsx)("div",{className:"dataviews-view-list__fields",id:S,children:c.map(h=>(0,q.jsxs)("div",{className:"dataviews-view-list__field",children:[(0,q.jsx)(Ke.VisuallyHidden,{as:"span",className:"dataviews-view-list__field-label",children:h.label}),(0,q.jsx)("span",{className:"dataviews-view-list__field-value",children:(0,q.jsx)(h.render,{item:n,field:h})})]},h.id))})]})]})]})})}function sx(t){return!!t}function pc(t){let{actions:e,data:r,fields:o,getItemId:n,isLoading:i,onChangeSelection:a,selection:l,view:s,className:c,empty:f}=t,m=(0,os.useInstanceId)(pc,"view-list"),d=lr(!!i),p=r?.findLast(h=>l.includes(n(h))),g=o.find(h=>h.id===s.titleField),w=o.find(h=>h.id===s.mediaField),v=o.find(h=>h.id===s.descriptionField),b=(s?.fields??[]).map(h=>o.find(C=>h===C.id)).filter(sx),S=h=>a([n(h)]),P=(0,He.useCallback)(h=>`${m}-${n(h)}`,[m,n]),R=(0,He.useCallback)((h,C)=>C.startsWith(P(h)),[P]),[I,k]=(0,He.useState)(void 0);(0,He.useEffect)(()=>{p&&k(dc(P(p)))},[p,P]);let D=r.findIndex(h=>R(h,I??"")),T=(0,os.usePrevious)(D),O=D!==-1,N=(0,He.useCallback)((h,C)=>{let M=Math.min(r.length-1,Math.max(0,h));if(!r[M])return;let L=P(r[M]),ne=C(L);k(ne),document.getElementById(ne)?.focus()},[r,P]);(0,He.useEffect)(()=>{!O&&(T!==void 0&&T!==-1)&&N(T,dc)},[O,N,T]);let _=(0,He.useCallback)(h=>{h.key==="ArrowDown"&&(h.preventDefault(),N(D+1,mc)),h.key==="ArrowUp"&&(h.preventDefault(),N(D-1,mc))},[N,D]),y=!!r?.length,E=s.groupBy?.field?o.find(h=>h.id===s.groupBy?.field):null,x=y&&E?Wt(r,E):null,A=s.infiniteScrollEnabled&&!x;return y?y&&E&&x?(0,q.jsx)(Ke.Composite,{id:`${m}`,render:(0,q.jsx)("div",{}),className:"dataviews-view-list__group",role:"grid",activeId:I,setActiveId:k,children:(0,q.jsx)(F,{direction:"column",gap:"lg",className:z("dataviews-view-list",c),children:Array.from(x.entries()).map(([h,C])=>(0,q.jsxs)(F,{direction:"column",gap:"sm",children:[(0,q.jsx)("h3",{className:"dataviews-view-list__group-header",children:s.groupBy?.showLabel===!1?h:(0,ci.sprintf)((0,ci.__)("%1$s: %2$s"),E.label,h)}),C.map(M=>{let L=P(M);return(0,q.jsx)(_f,{view:s,idPrefix:L,actions:e,item:M,isSelected:M===p,onSelect:S,mediaField:w,titleField:g,descriptionField:v,otherFields:b,onDropdownTriggerKeyDown:_},L)})]},h))})}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Ke.Composite,{id:m,render:(0,q.jsx)("div",{}),className:z("dataviews-view-list",c,{[`has-${s.layout?.density}-density`]:s.layout?.density&&["compact","comfortable"].includes(s.layout.density),"is-refreshing":!A&&d}),role:s.infiniteScrollEnabled?"feed":"grid",activeId:I,setActiveId:k,inert:!A&&i?"true":void 0,children:r.map((h,C)=>{let M=P(h);return(0,q.jsx)(_f,{view:s,idPrefix:M,actions:e,item:h,isSelected:h===p,onSelect:S,mediaField:w,titleField:g,descriptionField:v,otherFields:b,onDropdownTriggerKeyDown:_,posinset:s.infiniteScrollEnabled?C+1:void 0},M)})}),A&&i&&(0,q.jsx)("p",{className:"dataviews-loading-more",children:(0,q.jsx)(Ke.Spinner,{})})]}):(0,q.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":d}),children:f})}var Pf=u(G(),1);var ns=u(W(),1),xf=u(j(),1);var ln=u(V(),1);function yf({groupName:t,groupData:e,groupField:r,showLabel:o=!0,children:n}){let i=o?(0,xf.createInterpolateElement)((0,ns.sprintf)((0,ns.__)("%s: "),r.label).trim(),{groupName:(0,ln.jsx)(r.render,{item:e[0],field:r})}):(0,ln.jsx)(r.render,{item:e[0],field:r});return(0,ln.jsxs)(F,{direction:"column",className:"dataviews-view-activity__group",children:[(0,ln.jsx)("h3",{className:"dataviews-view-activity__group-header",children:i}),n]},t)}var wf=u(G(),1),Oo=u(j(),1),Sf=u(gt(),1),Cf=u(ht(),1);var Le=u(V(),1);function lx(t){let{view:e,actions:r,item:o,titleField:n,mediaField:i,descriptionField:a,otherFields:l,posinset:s,onClickItem:c,renderItemLink:f,isItemClickable:m}=t,{showTitle:d=!0,showMedia:p=!0,showDescription:g=!0,infiniteScrollEnabled:w}=e,v=(0,Oo.useRef)(null),b=(0,Sf.useRegistry)(),{paginationInfo:S}=(0,Oo.useContext)(U),{primaryActions:P,eligibleActions:R}=(0,Oo.useMemo)(()=>{let _=r.filter(E=>!E.isEligible||E.isEligible(o));return{primaryActions:_.filter(E=>E.isPrimary),eligibleActions:_}},[r,o]),I=(0,Cf.useViewportMatch)("medium","<"),k=e.layout?.density??"balanced",D=p&&k!=="compact"&&i?.render?(0,Le.jsx)(i.render,{item:o,field:i,config:{sizes:k==="comfortable"?"32px":"24px"}}):null,T=(0,Le.jsx)("div",{className:"dataviews-view-activity__item-type-icon",children:D||(0,Le.jsx)("span",{className:"dataviews-view-activity__item-bullet","aria-hidden":"true"})}),O=d&&n?.render?(0,Le.jsx)(n.render,{item:o,field:n}):null,N=(0,Oo.useMemo)(()=>k==="comfortable"?"md":"sm",[k]);return(0,Le.jsx)("div",{ref:v,role:w?"article":void 0,"aria-posinset":s,"aria-setsize":w?S.totalItems:void 0,className:z("dataviews-view-activity__item",k==="compact"&&"is-compact",k==="balanced"&&"is-balanced",k==="comfortable"&&"is-comfortable"),children:(0,Le.jsxs)(F,{direction:"row",gap:"lg",justify:"start",align:"flex-start",children:[(0,Le.jsx)(F,{direction:"column",gap:"xs",align:"center",className:"dataviews-view-activity__item-type",children:T}),(0,Le.jsxs)(F,{direction:"column",gap:N,align:"flex-start",className:"dataviews-view-activity__item-content",children:[O&&(0,Le.jsx)(lo,{item:o,isItemClickable:m,onClickItem:c,renderItemLink:f,className:"dataviews-view-activity__item-title",children:O}),g&&a&&(0,Le.jsx)("div",{className:"dataviews-view-activity__item-description",children:(0,Le.jsx)(a.render,{item:o,field:a})}),(0,Le.jsx)("div",{className:"dataviews-view-activity__item-fields",children:l.map(_=>(0,Le.jsxs)("div",{className:"dataviews-view-activity__item-field",children:[(0,Le.jsx)(wf.VisuallyHidden,{as:"span",className:"dataviews-view-activity__item-field-label",children:_.label}),(0,Le.jsx)("span",{className:"dataviews-view-activity__item-field-value",children:(0,Le.jsx)(_.render,{item:o,field:_})})]},_.id))}),!!P?.length&&(0,Le.jsx)(ic,{item:o,actions:P,registry:b,buttonVariant:"secondary"})]}),(P.length0)&&(0,Le.jsx)("div",{className:"dataviews-view-activity__item-actions",children:(0,Le.jsx)(rn,{item:o,actions:R,isCompact:!0})})]})})}var Tf=lx;var Ef=u(de(),1);function ux(t){return!!t}function gc(t){let{data:e,fields:r,getItemId:o,view:n}=t,i=r.find(c=>c.id===n.titleField),a=r.find(c=>c.id===n.mediaField),l=r.find(c=>c.id===n.descriptionField),s=(n?.fields??[]).map(c=>r.find(f=>c===f.id)).filter(ux);return e.map((c,f)=>(0,Ef.createElement)(Tf,{...t,key:o(c),item:c,mediaField:a,titleField:i,descriptionField:l,otherFields:s,posinset:n.infiniteScrollEnabled?f+1:void 0}))}var Lt=u(V(),1);function Af(t){let{empty:e,data:r,fields:o,isLoading:n,view:i,className:a}=t,l=lr(!!n),s=!!r?.length,c=i.groupBy?.field?o.find(w=>w.id===i.groupBy?.field):null,f=s&&c?Wt(r,c):null,m=i.infiniteScrollEnabled&&!f;if(!s)return(0,Lt.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":l}),children:e});let d=!m&&!!n,p=z("dataviews-view-activity",a,{"is-refreshing":!m&&l}),g=f?Array.from(f.entries()):[];return s&&c&&f?(0,Lt.jsx)(F,{direction:"column",gap:"sm",className:p,inert:d?"true":void 0,children:g.map(([w,v])=>(0,Lt.jsx)(yf,{groupName:w,groupData:v,groupField:c,showLabel:i.groupBy?.showLabel!==!1,children:(0,Lt.jsx)(gc,{...t,data:v})},w))}):(0,Lt.jsxs)(Lt.Fragment,{children:[(0,Lt.jsx)("div",{className:p,role:i.infiniteScrollEnabled?"feed":void 0,inert:d?"true":void 0,children:(0,Lt.jsx)(gc,{...t})}),m&&n&&(0,Lt.jsx)("p",{className:"dataviews-loading-more",children:(0,Lt.jsx)(Pf.Spinner,{})})]})}var Ot=u(G(),1),mi=u(W(),1),Nf=u(ht(),1),Mf=u(j(),1);var Of=u(G(),1),cx=u(gt(),1),is=u(j(),1);var dx=u(W(),1);var di=u(G(),1),un=u(j(),1),Ft=u(W(),1);var Ir=u(V(),1);function hc(){let{view:t,onChangeView:e,paginationInfo:{totalItems:r=0,totalPages:o}}=(0,un.useContext)(U);if(!r||!o||t.infiniteScrollEnabled)return null;let n=t.page??1,i=Array.from(Array(o)).map((a,l)=>{let s=l+1;return{value:s.toString(),label:s.toString(),"aria-label":n===s?(0,Ft.sprintf)((0,Ft.__)("Page %1$d of %2$d"),n,o):s.toString()}});return!!r&&o!==1&&(0,Ir.jsxs)(F,{direction:"row",className:"dataviews-pagination",justify:"end",align:"center",gap:"xl",children:[(0,Ir.jsx)(F,{direction:"row",justify:"flex-start",align:"center",gap:"xs",className:"dataviews-pagination__page-select",children:(0,un.createInterpolateElement)((0,Ft.sprintf)((0,Ft._x)("
      Page
      %1$s
      of %2$d
      ","paging"),"",o),{div:(0,Ir.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,Ir.jsx)(di.SelectControl,{"aria-label":(0,Ft.__)("Current page"),value:n.toString(),options:i,onChange:a=>{e({...t,page:+a})},size:"small",variant:"minimal"})})}),(0,Ir.jsxs)(F,{direction:"row",gap:"xs",align:"center",children:[(0,Ir.jsx)(di.Button,{onClick:()=>e({...t,page:n-1}),disabled:n===1,accessibleWhenDisabled:!0,label:(0,Ft.__)("Previous page"),icon:(0,Ft.isRTL)()?Pa:ka,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,Ir.jsx)(di.Button,{onClick:()=>e({...t,page:n+1}),disabled:n>=o,accessibleWhenDisabled:!0,label:(0,Ft.__)("Next page"),icon:(0,Ft.isRTL)()?ka:Pa,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})}var If=(0,un.memo)(hc);var Rf=u(V(),1);function as(t){return(0,is.useMemo)(()=>t?.every(e=>e.supportsBulk),[t])}var Vf=u(j(),1);var kf=u(V(),1),vc=(0,Vf.forwardRef)(({className:t,previewSize:e,...r},o)=>(0,kf.jsx)("div",{ref:o,className:z("dataviews-view-grid-items",t),style:{gridTemplateColumns:e&&`repeat(auto-fill, minmax(${e}px, 1fr))`},...r}));var X=u(V(),1),{Badge:mx}=Z(Ot.privateApis);function Df({view:t,multiselect:e,selection:r,onChangeSelection:o,getItemId:n,item:i,mediaField:a,titleField:l,descriptionField:s,regularFields:c,badgeFields:f,config:m,posinset:d,setsize:p}){let{showTitle:g=!0,showMedia:w=!0,showDescription:v=!0}=t,b=n(i),S=r.includes(b),P=a?.render?(0,X.jsx)(a.render,{item:i,field:a,config:m}):null,R=g&&l?.render?(0,X.jsx)(l.render,{item:i,field:l}):null;return(0,X.jsxs)(Ot.Composite.Item,{"aria-label":l?l.getValue({item:i})||(0,mi.__)("(no title)"):void 0,render:({children:I,...k})=>(0,X.jsx)(F,{direction:"column",children:I,...k}),role:"option","aria-posinset":d,"aria-setsize":p,className:z("dataviews-view-picker-grid__card",{"is-selected":S}),"aria-selected":S,onClick:()=>{if(S)o(r.filter(I=>b!==I));else{let I=e?[...r,b]:[b];o(I)}},children:[w&&P&&(0,X.jsx)("div",{className:"dataviews-view-picker-grid__media",children:P}),w&&P&&(0,X.jsx)(io,{item:i,selection:r,onChangeSelection:o,getItemId:n,titleField:l,disabled:!1,"aria-hidden":!0,tabIndex:-1}),g&&(0,X.jsx)(F,{direction:"row",justify:"space-between",className:"dataviews-view-picker-grid__title-actions",children:(0,X.jsx)("div",{className:"dataviews-view-picker-grid__title-field dataviews-title-field",children:R})}),(0,X.jsxs)(F,{direction:"column",gap:"xs",children:[v&&s?.render&&(0,X.jsx)(s.render,{item:i,field:s}),!!f?.length&&(0,X.jsx)(F,{direction:"row",className:"dataviews-view-picker-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:f.map(I=>(0,X.jsx)(mx,{className:"dataviews-view-picker-grid__field-value",children:(0,X.jsx)(I.render,{item:i,field:I})},I.id))}),!!c?.length&&(0,X.jsx)(F,{direction:"column",className:"dataviews-view-picker-grid__fields",gap:"xs",children:c.map(I=>(0,X.jsx)(Ot.Flex,{className:"dataviews-view-picker-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Ot.FlexItem,{className:"dataviews-view-picker-grid__field-name",children:I.header}),(0,X.jsx)(Ot.FlexItem,{className:"dataviews-view-picker-grid__field-value",style:{maxHeight:"none"},children:(0,X.jsx)(I.render,{item:i,field:I})})]})},I.id))})]})]},b)}function Lf({groupName:t,groupField:e,showLabel:r=!0,children:o}){let n=(0,Nf.useInstanceId)(Lf,"dataviews-view-picker-grid-group__header");return(0,X.jsxs)(F,{direction:"column",gap:"sm",role:"group","aria-labelledby":n,children:[(0,X.jsx)("h3",{className:"dataviews-view-picker-grid-group__header",id:n,children:r?(0,mi.sprintf)((0,mi.__)("%1$s: %2$s"),e.label,t):t}),o]},t)}function fx({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,selection:a,view:l,className:s,empty:c}){let{resizeObserverRef:f,paginationInfo:m,itemListLabel:d}=(0,Mf.useContext)(U),p=r.find(E=>E.id===l?.titleField),g=r.find(E=>E.id===l?.mediaField),w=r.find(E=>E.id===l?.descriptionField),v=l.fields??[],{regularFields:b,badgeFields:S}=v.reduce((E,x)=>{let A=r.find(C=>C.id===x);if(!A)return E;let h=l.layout?.badgeFields?.includes(x)?"badgeFields":"regularFields";return E[h].push(A),E},{regularFields:[],badgeFields:[]}),P=!!e?.length,R=l.layout?.previewSize,I=as(t),k="900px",D=l.groupBy?.field?r.find(E=>E.id===l.groupBy?.field):null,T=D?Wt(e,D):null,O=l.infiniteScrollEnabled&&!T,N=l?.page??1,_=l?.perPage??0,y=O?m?.totalItems:void 0;return(0,X.jsxs)(X.Fragment,{children:[P&&D&&T&&(0,X.jsx)(Ot.Composite,{virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":I,className:z("dataviews-view-picker-grid",s),"aria-label":d,render:({children:E,...x})=>(0,X.jsx)(F,{direction:"column",gap:"lg",children:E,...x}),children:Array.from(T.entries()).map(([E,x])=>(0,X.jsx)(Lf,{groupName:E,groupField:D,showLabel:l.groupBy?.showLabel!==!1,children:(0,X.jsx)(vc,{previewSize:R,style:{gridTemplateColumns:R&&`repeat(auto-fill, minmax(${R}px, 1fr))`},"aria-busy":n,ref:f,children:x.map(A=>{let h=(N-1)*_+e.indexOf(A)+1;return(0,X.jsx)(Df,{view:l,multiselect:I,selection:a,onChangeSelection:i,getItemId:o,item:A,mediaField:g,titleField:p,descriptionField:w,regularFields:b,badgeFields:S,config:{sizes:k},posinset:h,setsize:y},o(A))})})},E))}),P&&!T&&(0,X.jsx)(Ot.Composite,{render:(0,X.jsx)(vc,{className:z("dataviews-view-picker-grid",s),previewSize:R,"aria-busy":n,ref:f}),virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":I,"aria-label":d,children:e.map((E,x)=>{let A=O?x+1:void 0;return O||(A=(N-1)*_+x+1),(0,X.jsx)(Df,{view:l,multiselect:I,selection:a,onChangeSelection:i,getItemId:o,item:E,mediaField:g,titleField:p,descriptionField:w,regularFields:b,badgeFields:S,config:{sizes:k},posinset:A,setsize:y},o(E))})}),!P&&(0,X.jsx)("div",{className:z({"dataviews-loading":n,"dataviews-no-results":!n}),children:n?(0,X.jsx)("p",{children:(0,X.jsx)(Ot.Spinner,{})}):c}),P&&n&&(0,X.jsx)("p",{className:"dataviews-loading-more",children:(0,X.jsx)(Ot.Spinner,{})})]})}var Ff=fx;var ss=u(W(),1),Ro=u(G(),1),Gt=u(j(),1);var ee=u(V(),1);function px({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=z("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,ee.jsx)("div",{className:i,children:(0,ee.jsx)(n.render,{item:t,field:n})})}function Bf({item:t,fields:e,id:r,view:o,titleField:n,mediaField:i,descriptionField:a,selection:l,getItemId:s,onChangeSelection:c,multiselect:f,posinset:m}){let{paginationInfo:d}=(0,Gt.useContext)(U),p=l.includes(r),[g,w]=(0,Gt.useState)(!1),{showTitle:v=!0,showMedia:b=!0,showDescription:S=!0,infiniteScrollEnabled:P}=o,R=()=>{w(!0)},I=()=>{w(!1)},k=o.fields??[],D=n&&v||i&&b||a&&S;return(0,ee.jsxs)(Ro.Composite.Item,{render:({children:T,...O})=>(0,ee.jsx)("tr",{className:z("dataviews-view-table__row",{"is-selected":p,"is-hovered":g}),onMouseEnter:R,onMouseLeave:I,children:T,...O}),"aria-selected":p,"aria-setsize":d.totalItems||void 0,"aria-posinset":m,role:P?"article":"option",onClick:()=>{if(p)c(l.filter(T=>r!==T));else{let T=f?[...l,r]:[r];c(T)}},children:[(0,ee.jsx)("td",{className:"dataviews-view-table__checkbox-column",role:"presentation",children:(0,ee.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,ee.jsx)(io,{item:t,selection:l,onChangeSelection:c,getItemId:s,titleField:n,disabled:!1,"aria-hidden":!0,tabIndex:-1})})}),D&&(0,ee.jsx)("td",{role:"presentation",children:(0,ee.jsx)(Za,{item:t,titleField:v?n:void 0,mediaField:b?i:void 0,descriptionField:S?a:void 0,isItemClickable:()=>!1})}),k.map(T=>{let{width:O,maxWidth:N,minWidth:_,align:y}=o.layout?.styles?.[T]??{};return(0,ee.jsx)("td",{style:{width:O,maxWidth:N,minWidth:_},role:"presentation",children:(0,ee.jsx)(px,{fields:e,item:t,column:T,align:y})},T)})]},r)}function gx({actions:t,data:e,fields:r,getItemId:o,isLoading:n=!1,onChangeView:i,onChangeSelection:a,selection:l,setOpenedFilter:s,view:c,className:f,empty:m}){let d=(0,Gt.useRef)(new Map),p=(0,Gt.useRef)(void 0),[g,w]=(0,Gt.useState)(),v=as(t)??!1;(0,Gt.useEffect)(()=>{p.current&&(p.current.focus(),p.current=void 0)});let b=(0,Gt.useId)();if(g){p.current=g,w(void 0);return}let S=h=>{let C=d.current.get(h.id),M=C?d.current.get(C.fallback):void 0;w(M?.node)},P=!!e?.length,R=r.find(h=>h.id===c.titleField),I=r.find(h=>h.id===c.mediaField),k=r.find(h=>h.id===c.descriptionField),D=c.groupBy?.field?r.find(h=>h.id===c.groupBy?.field):null,T=D?Wt(e,D):null,{showTitle:O=!0,showMedia:N=!0,showDescription:_=!0}=c,y=R&&O||I&&N||k&&_,E=c.fields??[],x=(h,C)=>M=>{M?d.current.set(h,{node:M,fallback:E[C>0?C-1:1]}):d.current.delete(h)},A=c.infiniteScrollEnabled&&!T;return(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsxs)("table",{className:z("dataviews-view-table","dataviews-view-picker-table",f,{[`has-${c.layout?.density}-density`]:c.layout?.density&&["compact","comfortable"].includes(c.layout.density)}),"aria-busy":n,"aria-describedby":b,role:A?"feed":"listbox",children:[(0,ee.jsx)("thead",{role:"presentation",children:(0,ee.jsxs)("tr",{className:"dataviews-view-table__row",role:"presentation",children:[(0,ee.jsx)("th",{className:"dataviews-view-table__checkbox-column",children:v&&(0,ee.jsx)(li,{selection:l,onChangeSelection:a,data:e,actions:t,getItemId:o})}),y&&(0,ee.jsx)("th",{children:R&&(0,ee.jsx)(an,{ref:x(R.id,0),fieldId:R.id,view:c,fields:r,onChangeView:i,onHide:S,setOpenedFilter:s,canMove:!1})}),E.map((h,C)=>{let{width:M,maxWidth:L,minWidth:ne,align:Te}=c.layout?.styles?.[h]??{};return(0,ee.jsx)("th",{style:{width:M,maxWidth:L,minWidth:ne,textAlign:Te},"aria-sort":c.sort?.direction&&c.sort?.field===h?za[c.sort.direction]:void 0,scope:"col",children:(0,ee.jsx)(an,{ref:x(h,C),fieldId:h,view:c,fields:r,onChangeView:i,onHide:S,setOpenedFilter:s,canMove:c.layout?.enableMoving??!0})},h)})]})}),P&&D&&T?Array.from(T.entries()).map(([h,C])=>(0,ee.jsxs)(Ro.Composite,{virtualFocus:!0,orientation:"vertical",render:(0,ee.jsx)("tbody",{role:"group"}),children:[(0,ee.jsx)("tr",{className:"dataviews-view-table__group-header-row",role:"presentation",children:(0,ee.jsx)("td",{colSpan:E.length+(y?1:0)+1,className:"dataviews-view-table__group-header-cell",role:"presentation",children:c.groupBy?.showLabel===!1?h:(0,ss.sprintf)((0,ss.__)("%1$s: %2$s"),D.label,h)})}),C.map((M,L)=>(0,ee.jsx)(Bf,{item:M,fields:r,id:o(M)||L.toString(),view:c,titleField:R,mediaField:I,descriptionField:k,selection:l,getItemId:o,onChangeSelection:a,multiselect:v},o(M)))]},`group-${h}`)):(0,ee.jsx)(Ro.Composite,{render:(0,ee.jsx)("tbody",{role:"presentation"}),virtualFocus:!0,orientation:"vertical",children:P&&e.map((h,C)=>(0,ee.jsx)(Bf,{item:h,fields:r,id:o(h)||C.toString(),view:c,titleField:R,mediaField:I,descriptionField:k,selection:l,getItemId:o,onChangeSelection:a,multiselect:v,posinset:C+1},o(h)))})]}),(0,ee.jsxs)("div",{className:z({"dataviews-loading":n,"dataviews-no-results":!P&&!n}),id:b,children:[!P&&(n?(0,ee.jsx)("p",{children:(0,ee.jsx)(Ro.Spinner,{})}):m),P&&n&&(0,ee.jsx)("p",{className:"dataviews-loading-more",children:(0,ee.jsx)(Ro.Spinner,{})})]})]})}var jf=gx;var Hf=u(G(),1),zf=u(W(),1),Wf=u(j(),1);var Gf=u(V(),1),hx=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}];function bc(){let t=(0,Wf.useContext)(U),e=t.view,r=hx.filter(a=>t.containerWidth>=a.breakpoint),o=e.layout?.previewSize??230,n=r.map((a,l)=>({...a,index:l})).filter(a=>a.value<=o).sort((a,l)=>l.value-a.value)[0]?.index??0,i=r.map((a,l)=>({value:l}));return(0,Gf.jsx)(Hf.RangeControl,{__next40pxDefaultSize:!0,showTooltip:!1,label:(0,zf.__)("Preview size"),value:n,min:0,max:r.length-1,withInputField:!1,onChange:(a=0)=>{t.onChangeView({...e,layout:{...e.layout,previewSize:r[a].value}})},step:1,marks:i})}var cn=u(G(),1),dn=u(W(),1),qf=u(j(),1);var mn=u(V(),1);function fi(){let t=(0,qf.useContext)(U),e=t.view;return(0,mn.jsxs)(cn.__experimentalToggleGroupControl,{size:"__unstable-large",label:(0,dn.__)("Density"),value:e.layout?.density||"balanced",onChange:r=>{t.onChangeView({...e,layout:{...e.layout,density:r}})},isBlock:!0,children:[(0,mn.jsx)(cn.__experimentalToggleGroupControlOption,{value:"comfortable",label:(0,dn._x)("Comfortable","Density option for DataView layout")},"comfortable"),(0,mn.jsx)(cn.__experimentalToggleGroupControlOption,{value:"balanced",label:(0,dn._x)("Balanced","Density option for DataView layout")},"balanced"),(0,mn.jsx)(cn.__experimentalToggleGroupControlOption,{value:"compact",label:(0,dn._x)("Compact","Density option for DataView layout")},"compact")]})}var co=[{type:Jo,label:(0,Or.__)("Table"),component:ff,icon:la,viewConfigOptions:fi},{type:Ga,label:(0,Or.__)("Grid"),component:bf,icon:Qo,viewConfigOptions:bc},{type:Fm,label:(0,Or.__)("List"),component:pc,icon:(0,Or.isRTL)()?vu:_u,viewConfigOptions:fi},{type:Bm,label:(0,Or.__)("Activity"),component:Af,icon:qu,viewConfigOptions:fi},{type:jm,label:(0,Or.__)("Grid"),component:Ff,icon:Qo,viewConfigOptions:bc,isPicker:!0},{type:Hm,label:(0,Or.__)("Table"),component:jf,icon:la,viewConfigOptions:fi,isPicker:!0}];var Pn=u(j(),1);var Xt=u(G(),1),Fr=u(W(),1),js=u(j(),1);function pi(...t){}function _c(t,e){if(vx(t)){let r=bx(e)?e():e;return t(r)}return t}function vx(t){return typeof t=="function"}function bx(t){return typeof t=="function"}function Rt(t,e){return typeof Object.hasOwn=="function"?Object.hasOwn(t,e):Object.prototype.hasOwnProperty.call(t,e)}function mo(...t){return(...e)=>{for(let r of t)typeof r=="function"&&r(...e)}}function gi(t){return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function xc(t,e){let r={...t};for(let o of e)Rt(r,o)&&delete r[o];return r}function yc(t,e){let r={};for(let o of e)Rt(t,o)&&(r[o]=t[o]);return r}function hi(t){return t}function et(t,e){if(!t)throw typeof e!="string"?new Error("Invariant failed"):new Error(e)}function wc(t){return Object.keys(t)}function Sc(t,...e){let r=typeof t=="function"?t(...e):t;return r==null?!1:!r}function Vo(t){return t.disabled||t["aria-disabled"]===!0||t["aria-disabled"]==="true"}function tt(t){let e={};for(let r in t)t[r]!==void 0&&(e[r]=t[r]);return e}function te(...t){for(let e of t)if(e!==void 0)return e}var Uf=u(de(),1);function Yf(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function _x(t){return!t||!(0,Uf.isValidElement)(t)?!1:"ref"in t.props||"ref"in t}function $f(t){return _x(t)?{...t.props}.ref||t.ref:null}function Kf(t,e){let r={...t};for(let o in e){if(!Rt(e,o))continue;if(o==="className"){let i="className";r[i]=t[i]?`${t[i]} ${e[i]}`:e[i];continue}if(o==="style"){let i="style";r[i]=t[i]?{...t[i],...e[i]}:e[i];continue}let n=e[o];if(typeof n=="function"&&o.startsWith("on")){let i=t[o];if(typeof i=="function"){r[o]=(...a)=>{n(...a),i(...a)};continue}}r[o]=n}return r}var fo=xx();function xx(){var t;return typeof window<"u"&&!!((t=window.document)!=null&&t.createElement)}function Rr(t){return t?"self"in t?t.document:t.ownerDocument||document:document}function ko(t,e=!1){var r;let{activeElement:o}=Rr(t);if(!o?.nodeName)return null;if(Cc(o)&&((r=o.contentDocument)!=null&&r.body))return ko(o.contentDocument.body,e);if(e){let n=o.getAttribute("aria-activedescendant");if(n){let i=Rr(o).getElementById(n);if(i)return i}}return o}function ur(t,e){return t===e||t.contains(e)}function Cc(t){return t.tagName==="IFRAME"}function Vr(t){let e=t.tagName.toLowerCase();return e==="button"?!0:e==="input"&&t.type?yx.indexOf(t.type)!==-1:!1}var yx=["button","color","file","image","reset","submit"];function Tc(t){if(typeof t.checkVisibility=="function")return t.checkVisibility();let e=t;return e.offsetWidth>0||e.offsetHeight>0||t.getClientRects().length>0}function _t(t){try{let e=t instanceof HTMLInputElement&&t.selectionStart!==null,r=t.tagName==="TEXTAREA";return e||r||!1}catch{return!1}}function vi(t){return t.isContentEditable||_t(t)}function Ec(t){if(_t(t))return t.value;if(t.isContentEditable){let e=Rr(t).createRange();return e.selectNodeContents(t),e.toString()}return""}function fn(t){let e=0,r=0;if(_t(t))e=t.selectionStart||0,r=t.selectionEnd||0;else if(t.isContentEditable){let o=Rr(t).getSelection();if(o?.rangeCount&&o.anchorNode&&ur(t,o.anchorNode)&&o.focusNode&&ur(t,o.focusNode)){let n=o.getRangeAt(0),i=n.cloneRange();i.selectNodeContents(t),i.setEnd(n.startContainer,n.startOffset),e=i.toString().length,i.setEnd(n.endContainer,n.endOffset),r=i.toString().length}}return{start:e,end:r}}function Pc(t,e){let r=["dialog","menu","listbox","tree","grid"],o=t?.getAttribute("role");return o&&r.indexOf(o)!==-1?o:e}function pn(t){if(!t)return null;let e=r=>r==="auto"||r==="scroll";if(t.clientHeight&&t.scrollHeight>t.clientHeight){let{overflowY:r}=getComputedStyle(t);if(e(r))return t}else if(t.clientWidth&&t.scrollWidth>t.clientWidth){let{overflowX:r}=getComputedStyle(t);if(e(r))return t}return pn(t.parentElement)||document.scrollingElement||document.body}function bi(t,...e){/text|search|password|tel|url/i.test(t.type)&&t.setSelectionRange(...e)}function Ac(t,e){let r=t.map((n,i)=>[i,n]),o=!1;return r.sort(([n,i],[a,l])=>{let s=e(i),c=e(l);return s===c||!s||!c?0:wx(s,c)?(n>a&&(o=!0),-1):(ni):t}function wx(t,e){return!!(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_PRECEDING)}function Ic(){return fo&&!!navigator.maxTouchPoints}function ls(){return fo?/mac|iphone|ipad|ipod/i.test(navigator.platform):!1}function Do(){return fo&&ls()&&/apple/i.test(navigator.vendor)}function Oc(){return fo&&/firefox\//i.test(navigator.userAgent)}function us(t){return!!(t.currentTarget&&!ur(t.currentTarget,t.target))}function ct(t){return t.target===t.currentTarget}function Zf(t){let e=t.currentTarget;if(!e)return!1;let r=ls();if(r&&!t.metaKey||!r&&!t.ctrlKey)return!1;let o=e.tagName.toLowerCase();return o==="a"||o==="button"&&e.type==="submit"||o==="input"&&e.type==="submit"}function Xf(t){let e=t.currentTarget;if(!e)return!1;let r=e.tagName.toLowerCase();return t.altKey?r==="a"||r==="button"&&e.type==="submit"||r==="input"&&e.type==="submit":!1}function No(t,e){let r=new FocusEvent("blur",e),o=t.dispatchEvent(r),n={...e,bubbles:!0};return t.dispatchEvent(new FocusEvent("focusout",n)),o}function Qf(t,e,r){let o=new KeyboardEvent(e,r);return t.dispatchEvent(o)}function Rc(t,e){let r=new MouseEvent("click",e);return t.dispatchEvent(r)}function cs(t,e){let r=e||t.currentTarget,o=t.relatedTarget;return!o||!ur(r,o)}function po(t,e,r,o){let i=(l=>{if(o){let c=setTimeout(l,o);return()=>clearTimeout(c)}let s=requestAnimationFrame(l);return()=>cancelAnimationFrame(s)})(()=>{t.removeEventListener(e,a,!0),r()}),a=()=>{i(),r()};return t.addEventListener(e,a,{once:!0,capture:!0}),i}function cr(t,e,r,o=window){let n=[];try{o.document.addEventListener(t,e,r);for(let a of Array.from(o.frames))n.push(cr(t,e,r,a))}catch{}return()=>{try{o.document.removeEventListener(t,e,r)}catch{}for(let a of n)a()}}var Sx=u(de(),1),ge=u(de(),1),Vc={...Sx},Jf=Vc.useId,DA=Vc.useDeferredValue,ep=Vc.useInsertionEffect,Oe=fo?ge.useLayoutEffect:ge.useEffect;function Cx(t){let[e]=(0,ge.useState)(t);return e}function np(t){let e=(0,ge.useRef)(t);return Oe(()=>{e.current=t}),e}function re(t){let e=(0,ge.useRef)(()=>{throw new Error("Cannot call an event handler while rendering.")});return ep?ep(()=>{e.current=t}):e.current=t,(0,ge.useCallback)((...r)=>{var o;return(o=e.current)==null?void 0:o.call(e,...r)},[])}function ip(t){let[e,r]=(0,ge.useState)(null);return Oe(()=>{if(e==null||!t)return;let o=null;return t(n=>(o=n,e)),()=>{t(o)}},[e,t]),[e,r]}function Re(...t){return(0,ge.useMemo)(()=>{if(t.some(Boolean))return e=>{for(let r of t)Yf(r,e)}},t)}function qt(t){if(Jf){let o=Jf();return t||o}let[e,r]=(0,ge.useState)(t);return Oe(()=>{if(t||e)return;let o=Math.random().toString(36).slice(2,8);r(`id-${o}`)},[t,e]),t||e}function ap(t,e){let r=i=>{if(typeof i=="string")return i},[o,n]=(0,ge.useState)(()=>r(e));return Oe(()=>{let i=t&&"current"in t?t.current:t;n(i?.tagName.toLowerCase()||r(e))},[t,e]),o}function sp(t,e,r){let o=Cx(r),[n,i]=(0,ge.useState)(o);return(0,ge.useEffect)(()=>{let a=t&&"current"in t?t.current:t;if(!a)return;let l=()=>{let c=a.getAttribute(e);i(c??o)},s=new MutationObserver(l);return s.observe(a,{attributeFilter:[e]}),l(),()=>s.disconnect()},[t,e,o]),n}function dr(t,e){let r=(0,ge.useRef)(!1);(0,ge.useEffect)(()=>{if(r.current)return t();r.current=!0},e),(0,ge.useEffect)(()=>()=>{r.current=!1},[])}function lp(t,e){let r=(0,ge.useRef)(!1);Oe(()=>{if(r.current)return t();r.current=!0},e),Oe(()=>()=>{r.current=!1},[])}function up(){return(0,ge.useReducer)(()=>[],[])}function Fe(t){return re(typeof t=="function"?t:()=>t)}function mr(t,e,r=[]){let o=(0,ge.useCallback)(n=>(t.wrapElement&&(n=t.wrapElement(n)),e(n)),[...r,t.wrapElement]);return{...t,wrapElement:o}}function cp(t,e,r){let o=t.onLoadedMetadataCapture,n=(0,ge.useMemo)(()=>Object.assign(()=>{},{...o,[e]:r}),[o,e,r]);return[o?.[e],{onLoadedMetadataCapture:n}]}var tp=!1;function dp(){return(0,ge.useEffect)(()=>{tp||(cr("mousemove",Ex,!0),cr("mousedown",ds,!0),cr("mouseup",ds,!0),cr("keydown",ds,!0),cr("scroll",ds,!0),tp=!0)},[]),re(()=>kc)}var kc=!1,rp=0,op=0;function Tx(t){let e=t.movementX||t.screenX-rp,r=t.movementY||t.screenY-op;return rp=t.screenX,op=t.screenY,e||r||!1}function Ex(t){Tx(t)&&(kc=!0)}function ds(){kc=!1}var xt=u(de(),1),Mo=u(V(),1);function he(t){let e=xt.forwardRef((r,o)=>t({...r,ref:o}));return e.displayName=t.displayName||t.name,e}function go(t,e){return xt.memo(t,e)}function ye(t,e){let{wrapElement:r,render:o,...n}=e,i=Re(e.ref,$f(o)),a;if(xt.isValidElement(o)){let l={...o.props,ref:i};a=xt.cloneElement(o,Kf(n,l))}else o?a=o(n):a=(0,Mo.jsx)(t,{...n});return r?r(a):a}function we(t){let e=(r={})=>t(r);return e.displayName=t.name,e}function Vt(t=[],e=[]){let r=xt.createContext(void 0),o=xt.createContext(void 0),n=()=>xt.useContext(r),i=(c=!1)=>{let f=xt.useContext(o),m=n();return c?f:f||m},a=()=>{let c=xt.useContext(o),f=n();if(!(c&&c===f))return f},l=c=>t.reduceRight((f,m)=>(0,Mo.jsx)(m,{...c,children:f}),(0,Mo.jsx)(r.Provider,{...c}));return{context:r,scopedContext:o,useContext:n,useScopedContext:i,useProviderContext:a,ContextProvider:l,ScopedContextProvider:c=>(0,Mo.jsx)(l,{...c,children:e.reduceRight((f,m)=>(0,Mo.jsx)(m,{...c,children:f}),(0,Mo.jsx)(o.Provider,{...c}))})}}var _i=Vt(),mp=_i.useContext,jA=_i.useScopedContext,HA=_i.useProviderContext,fp=_i.ContextProvider,pp=_i.ScopedContextProvider;var Dc=u(de(),1),xi=Vt([fp],[pp]),ms=xi.useContext,qA=xi.useScopedContext,gp=xi.useProviderContext,gn=xi.ContextProvider,fs=xi.ScopedContextProvider,hp=(0,Dc.createContext)(void 0),vp=(0,Dc.createContext)(void 0);function bp(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function fr(t,e){return e&&t.item(e)||null}function _p(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function xp(t,e=!1){if(_t(t))t.setSelectionRange(e?t.value.length:0,t.value.length);else if(t.isContentEditable){let r=Rr(t).getSelection();r?.selectAllChildren(t),e&&r?.collapseToEnd()}}var Nc=Symbol("FOCUS_SILENTLY");function yp(t){t[Nc]=!0,t.focus({preventScroll:!0})}function wp(t){let e=t[Nc];return delete t[Nc],e}function Lo(t,e,r){if(!e||e===r)return!1;let o=t.item(e.id);return!(!o||r&&o.element===r)}var ps=u(de(),1),Px="div",Mc=we(function({store:e,shouldRegisterItem:r=!0,getItem:o=hi,element:n,...i}){let a=mp();e=e||a;let l=qt(i.id),s=(0,ps.useRef)(n);return(0,ps.useEffect)(()=>{let c=s.current;if(!l||!c||!r)return;let f=o({id:l,element:c});return e?.renderItem(f)},[l,r,o,e]),i={...i,ref:Re(s,i.ref)},tt(i)}),JA=he(function(e){let r=Mc(e);return ye(Px,r)});var Sp=u(de(),1),Cp=(0,Sp.createContext)(!0);var Tp="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function yi(t){return!(!t.matches(Tp)||!Tc(t)||t.closest("[inert]"))}function Ep(t){for(;t&&!yi(t);)t=t.closest(Tp);return t||null}function Ut(t){let e=ko(t);if(!e)return!1;if(e===t)return!0;let r=e.getAttribute("aria-activedescendant");return r?r===t.id:!1}function Lc(t){let e=ko(t);if(!e)return!1;if(ur(t,e))return!0;let r=e.getAttribute("aria-activedescendant");return!r||!("id"in t)?!1:r===t.id?!0:!!t.querySelector(`#${CSS.escape(r)}`)}function Pp(t){!Lc(t)&&yi(t)&&t.focus()}function Ap(t,e){"scrollIntoView"in t?(t.focus({preventScroll:!0}),t.scrollIntoView({block:"nearest",inline:"nearest",...e})):t.focus()}var Bt=u(de(),1),Ax="div",Ip=Do(),Ix=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"],Ox=Symbol("safariFocusAncestor");function Op(t,e){t&&(t[Ox]=e)}function Rx(t){let{tagName:e,readOnly:r,type:o}=t;return e==="TEXTAREA"&&!r||e==="SELECT"&&!r?!0:e==="INPUT"&&!r?Ix.includes(o):!!(t.isContentEditable||t.getAttribute("role")==="combobox"&&t.dataset.name)}function Vx(t){return"labels"in t?t.labels:null}function Rp(t){return t.tagName.toLowerCase()==="input"&&t.type?t.type==="radio"||t.type==="checkbox":!1}function kx(t){return t?t==="button"||t==="summary"||t==="input"||t==="select"||t==="textarea"||t==="a":!0}function Dx(t){return t?t==="button"||t==="input"||t==="select"||t==="textarea":!0}function Nx(t,e,r,o,n){return t?e?r&&!o?-1:void 0:r?n:n||0:n}function Fc(t,e){return re(r=>{t?.(r),!r.defaultPrevented&&e&&(r.stopPropagation(),r.preventDefault())})}var Vp=!1,Bc=!0;function Mx(t){let e=t.target;e&&"hasAttribute"in e&&(e.hasAttribute("data-focus-visible")||(Bc=!1))}function Lx(t){t.metaKey||t.ctrlKey||t.altKey||(Bc=!0)}var wi=we(function({focusable:e=!0,accessibleWhenDisabled:r,autoFocus:o,onFocusVisible:n,...i}){let a=(0,Bt.useRef)(null);(0,Bt.useEffect)(()=>{e&&(Vp||(cr("mousedown",Mx,!0),cr("keydown",Lx,!0),Vp=!0))},[e]),Ip&&(0,Bt.useEffect)(()=>{if(!e)return;let x=a.current;if(!x||!Rp(x))return;let A=Vx(x);if(!A)return;let h=()=>queueMicrotask(()=>x.focus());for(let C of A)C.addEventListener("mouseup",h);return()=>{for(let C of A)C.removeEventListener("mouseup",h)}},[e]);let l=e&&Vo(i),s=!!l&&!r,[c,f]=(0,Bt.useState)(!1);(0,Bt.useEffect)(()=>{e&&s&&c&&f(!1)},[e,s,c]),(0,Bt.useEffect)(()=>{if(!e||!c)return;let x=a.current;if(!x||typeof IntersectionObserver>"u")return;let A=new IntersectionObserver(()=>{yi(x)||f(!1)});return A.observe(x),()=>A.disconnect()},[e,c]);let m=Fc(i.onKeyPressCapture,l),d=Fc(i.onMouseDownCapture,l),p=Fc(i.onClickCapture,l),g=i.onMouseDown,w=re(x=>{if(g?.(x),x.defaultPrevented||!e)return;let A=x.currentTarget;if(!Ip||us(x)||!Vr(A)&&!Rp(A))return;let h=!1,C=()=>{h=!0},M={capture:!0,once:!0};A.addEventListener("focusin",C,M);let L=Ep(A.parentElement);Op(L,!0),po(A,"mouseup",()=>{A.removeEventListener("focusin",C,!0),Op(L,!1),!h&&Pp(A)})}),v=(x,A)=>{if(A&&(x.currentTarget=A),!e)return;let h=x.currentTarget;h&&Ut(h)&&(n?.(x),!x.defaultPrevented&&(h.dataset.focusVisible="true",f(!0)))},b=i.onKeyDownCapture,S=re(x=>{if(b?.(x),x.defaultPrevented||!e||c||x.metaKey||x.altKey||x.ctrlKey||!ct(x))return;let A=x.currentTarget;po(A,"focusout",()=>v(x,A))}),P=i.onFocusCapture,R=re(x=>{if(P?.(x),x.defaultPrevented||!e)return;if(!ct(x)){f(!1);return}let A=x.currentTarget,h=()=>v(x,A);Bc||Rx(x.target)?po(x.target,"focusout",h):f(!1)}),I=i.onBlur,k=re(x=>{I?.(x),e&&cs(x)&&(x.currentTarget.removeAttribute("data-focus-visible"),f(!1))}),D=(0,Bt.useContext)(Cp),T=re(x=>{e&&o&&x&&D&&queueMicrotask(()=>{Ut(x)||yi(x)&&x.focus()})}),O=ap(a),N=e&&kx(O),_=e&&Dx(O),y=i.style,E=(0,Bt.useMemo)(()=>s?{pointerEvents:"none",...y}:y,[s,y]);return i={"data-focus-visible":e&&c||void 0,"data-autofocus":o||void 0,"aria-disabled":l||void 0,...i,ref:Re(a,T,i.ref),style:E,tabIndex:Nx(e,s,N,_,i.tabIndex),disabled:_&&s?!0:void 0,contentEditable:l?void 0:i.contentEditable,onKeyPressCapture:m,onClickCapture:p,onMouseDownCapture:d,onMouseDown:w,onKeyDownCapture:S,onFocusCapture:R,onBlur:k},tt(i)}),gI=he(function(e){let r=wi(e);return ye(Ax,r)});var ho=u(de(),1),Fx="button";function kp(t){if(!t.isTrusted)return!1;let e=t.currentTarget;return t.key==="Enter"?Vr(e)||e.tagName==="SUMMARY"||e.tagName==="A":t.key===" "?Vr(e)||e.tagName==="SUMMARY"||e.tagName==="INPUT"||e.tagName==="SELECT":!1}var Bx=Symbol("command"),jc=we(function({clickOnEnter:e=!0,clickOnSpace:r=!0,...o}){let n=(0,ho.useRef)(null),[i,a]=(0,ho.useState)(!1);(0,ho.useEffect)(()=>{n.current&&a(Vr(n.current))},[]);let[l,s]=(0,ho.useState)(!1),c=(0,ho.useRef)(!1),f=Vo(o),[m,d]=cp(o,Bx,!0),p=o.onKeyDown,g=re(b=>{p?.(b);let S=b.currentTarget;if(b.defaultPrevented||m||f||!ct(b)||_t(S)||S.isContentEditable)return;let P=e&&b.key==="Enter",R=r&&b.key===" ",I=b.key==="Enter"&&!e,k=b.key===" "&&!r;if(I||k){b.preventDefault();return}if(P||R){let D=kp(b);if(P){if(!D){b.preventDefault();let{view:T,...O}=b,N=()=>Rc(S,O);Oc()?po(S,"keyup",N):queueMicrotask(N)}}else R&&(c.current=!0,D||(b.preventDefault(),s(!0)))}}),w=o.onKeyUp,v=re(b=>{if(w?.(b),b.defaultPrevented||m||f||b.metaKey)return;let S=r&&b.key===" ";if(c.current&&S&&(c.current=!1,!kp(b))){b.preventDefault(),s(!1);let P=b.currentTarget,{view:R,...I}=b;queueMicrotask(()=>Rc(P,I))}});return o={"data-active":l||void 0,type:i?"button":void 0,...d,...o,ref:Re(n,o.ref),onKeyDown:g,onKeyUp:v},o=wi(o),o}),CI=he(function(e){let r=jc(e);return ye(Fx,r)});function Fo(t,e){let r=t.__unstableInternals;return et(r,"Invalid store"),r[e]}function yt(t,...e){let r=t,o=r,n=Symbol(),i=pi,a=new Set,l=new Set,s=new Set,c=new Set,f=new Set,m=new WeakMap,d=new WeakMap,p=T=>(s.add(T),()=>s.delete(T)),g=()=>{let T=a.size,O=Symbol();a.add(O);let N=()=>{a.delete(O),!a.size&&i()};if(T)return N;let _=wc(r).map(x=>mo(...e.map(A=>{var h;let C=(h=A?.getState)==null?void 0:h.call(A);if(C&&Rt(C,x))return Xe(A,[x],M=>{k(x,M[x],!0)})}))),y=[];for(let x of s)y.push(x());let E=e.map(hn);return i=mo(..._,...y,...E),N},w=(T,O,N=c)=>(N.add(O),d.set(O,T),()=>{var _;(_=m.get(O))==null||_(),m.delete(O),d.delete(O),N.delete(O)}),v=(T,O)=>w(T,O),b=(T,O)=>(m.set(O,O(r,r)),w(T,O)),S=(T,O)=>(m.set(O,O(r,o)),w(T,O,f)),P=T=>yt(yc(r,T),D),R=T=>yt(xc(r,T),D),I=()=>r,k=(T,O,N=!1)=>{var _;if(!Rt(r,T))return;let y=_c(O,r[T]);if(y===r[T])return;if(!N)for(let h of e)(_=h?.setState)==null||_.call(h,T,y);let E=r;r={...r,[T]:y};let x=Symbol();n=x,l.add(T);let A=(h,C,M)=>{var L;let ne=d.get(h),Te=Me=>M?M.has(Me):Me===T;(!ne||ne.some(Te))&&((L=m.get(h))==null||L(),m.set(h,h(r,C)))};for(let h of c)A(h,E);queueMicrotask(()=>{if(n!==x)return;let h=r;for(let C of f)A(C,o,l);o=h,l.clear()})},D={getState:I,setState:k,__unstableInternals:{setup:p,init:g,subscribe:v,sync:b,batch:S,pick:P,omit:R}};return D}function Ze(t,...e){if(t)return Fo(t,"setup")(...e)}function hn(t,...e){if(t)return Fo(t,"init")(...e)}function vn(t,...e){if(t)return Fo(t,"subscribe")(...e)}function Xe(t,...e){if(t)return Fo(t,"sync")(...e)}function vo(t,...e){if(t)return Fo(t,"batch")(...e)}function Si(t,...e){if(t)return Fo(t,"omit")(...e)}function Hc(t,...e){if(t)return Fo(t,"pick")(...e)}function Bo(...t){var e;let r={};for(let n of t){let i=(e=n?.getState)==null?void 0:e.call(n);i&&Object.assign(r,i)}let o=yt(r,...t);return Object.assign({},...t,o)}var pr=u(de(),1),Dp=u(Im(),1),{useSyncExternalStore:Np}=Dp.default,Mp=()=>()=>{};function bn(t,e=hi){let r=pr.useCallback(n=>t?vn(t,null,n):Mp(),[t]),o=()=>{let n=typeof e=="string"?e:null,i=typeof e=="function"?e:null,a=t?.getState();if(i)return i(a);if(a&&n&&Rt(a,n))return a[n]};return Np(r,o,o)}function hs(t,e){let r=pr.useRef({}),o=pr.useCallback(i=>t?vn(t,null,i):Mp(),[t]),n=()=>{let i=t?.getState(),a=!1,l=r.current;for(let s in e){let c=e[s];if(typeof c=="function"){let f=c(i);f!==l[s]&&(l[s]=f,a=!0)}if(typeof c=="string"){if(!i||!Rt(i,c))continue;let f=i[c];f!==l[s]&&(l[s]=f,a=!0)}}return a&&(r.current={...l}),r.current};return Np(o,n,n)}function Ve(t,e,r,o){let n=Rt(e,r)?e[r]:void 0,i=o?e[o]:void 0,a=np({value:n,setValue:i});Oe(()=>Xe(t,[r],(l,s)=>{let{value:c,setValue:f}=a.current;f&&l[r]!==s[r]&&l[r]!==c&&f(l[r])}),[t,r]),Oe(()=>{if(n!==void 0)return t.setState(r,n),vo(t,[r],()=>{n!==void 0&&t.setState(r,n)})})}function _n(t,e){let[r,o]=pr.useState(()=>t(e));Oe(()=>hn(r),[r]);let n=pr.useCallback(l=>bn(r,l),[r]),i=pr.useMemo(()=>({...r,useState:n}),[r,n]),a=re(()=>{o(l=>t({...e,...l.getState()}))});return[i,a]}var kr=u(de(),1),Fp=u(V(),1),jx="button";function Hx(t){return vi(t)?!0:t.tagName==="INPUT"&&!Vr(t)}function zx(t,e=!1){let r=t.clientHeight,{top:o}=t.getBoundingClientRect(),n=Math.max(r*.875,r-40)*1.5,i=e?r-n+o:n+o;return t.tagName==="HTML"?i+t.scrollTop:i}function Wx(t,e=!1){let{top:r}=t.getBoundingClientRect();return e?r+t.clientHeight:r}function Lp(t,e,r,o=!1){var n;if(!e||!r)return;let{renderedItems:i}=e.getState(),a=pn(t);if(!a)return;let l=zx(a,o),s,c;for(let f=0;f=0){c!==void 0&&cL.rowId===v);return p.ariaPosInSet+M.findIndex(L=>L.id===m)},isTabbable(C){if(!C?.renderedItems.length)return!0;if(C.virtualFocus)return!1;if(i)return!0;if(C.activeId===null)return!1;let M=e?.item(C.activeId);return M?.disabled||!M?.element?!0:C.activeId===m}}),k=(0,kr.useCallback)(C=>{var M;let L={...C,id:m||C.id,rowId:v,disabled:!!w,children:(M=C.element)==null?void 0:M.textContent};return a?a(L):L},[m,v,w,a]),D=c.onFocus,T=(0,kr.useRef)(!1),O=re(C=>{if(D?.(C),C.defaultPrevented||us(C)||!m||!e||Gx(C,e))return;let{virtualFocus:M,baseElement:L}=e.getState();if(e.setActiveId(m),vi(C.currentTarget)&&xp(C.currentTarget),!M||!ct(C)||Hx(C.currentTarget)||!L?.isConnected)return;Do()&&C.currentTarget.hasAttribute("data-autofocus")&&C.currentTarget.scrollIntoView({block:"nearest",inline:"nearest"}),T.current=!0,C.relatedTarget===L||Lo(e,C.relatedTarget)?yp(L):L.focus()}),N=c.onBlurCapture,_=re(C=>{if(N?.(C),C.defaultPrevented)return;let M=e?.getState();M?.virtualFocus&&T.current&&(T.current=!1,C.preventDefault(),C.stopPropagation())}),y=c.onKeyDown,E=Fe(o),x=Fe(n),A=re(C=>{if(y?.(C),C.defaultPrevented||!ct(C)||!e)return;let{currentTarget:M}=C,L=e.getState(),ne=e.item(m),Te=!!ne?.rowId,Me=L.orientation!=="horizontal",ze=L.orientation!=="vertical",at=()=>!!(Te||ze||!L.baseElement||!_t(L.baseElement)),Sr={ArrowUp:(Te||Me)&&e.up,ArrowRight:(Te||ze)&&e.next,ArrowDown:(Te||Me)&&e.down,ArrowLeft:(Te||ze)&&e.previous,Home:()=>{if(at())return!Te||C.ctrlKey?e?.first():e?.previous(-1)},End:()=>{if(at())return!Te||C.ctrlKey?e?.last():e?.next(-1)},PageUp:()=>Lp(M,e,e?.up,!0),PageDown:()=>Lp(M,e,e?.down)}[C.key];if(Sr){if(vi(M)){let J=fn(M),_e=ze&&C.key==="ArrowLeft",Cr=ze&&C.key==="ArrowRight",Tr=Me&&C.key==="ArrowUp",Co=Me&&C.key==="ArrowDown";if(Cr||Co){let{length:To}=Ec(M);if(J.end!==To)return}else if((_e||Tr)&&J.start!==0)return}let Y=Sr();if(E(C)||Y!==void 0){if(!x(C))return;C.preventDefault(),e.move(Y)}}}),h=(0,kr.useMemo)(()=>({id:m,baseElement:b}),[m,b]);return c=mr(c,C=>(0,Fp.jsx)(hp.Provider,{value:h,children:C}),[h]),c={id:m,"data-active-item":S||void 0,...c,ref:Re(d,c.ref),tabIndex:I?c.tabIndex:-1,onFocus:O,onBlurCapture:_,onKeyDown:A},c=jc(c),c=Mc({store:e,...c,getItem:k,shouldRegisterItem:m?c.shouldRegisterItem:!1}),tt({...c,"aria-setsize":P,"aria-posinset":R})}),qI=go(he(function(e){let r=zc(e);return ye(jx,r)}));function Wc(t){return Array.isArray(t)?t:typeof t<"u"?[t]:[]}function Ci(t){let e=[];for(let r of t)e.push(...r);return e}function xn(t){return t.slice().reverse()}var gr=u(de(),1),jp=u(V(),1),qx="div";function Ux(t){return t.some(e=>!!e.rowId)}function Yx(t){let e=t.target;return e&&!_t(e)?!1:t.key.length===1&&!t.ctrlKey&&!t.metaKey}function $x(t){return t.key==="Shift"||t.key==="Control"||t.key==="Alt"||t.key==="Meta"}function Bp(t,e,r){return re(o=>{var n;if(e?.(o),o.defaultPrevented||o.isPropagationStopped()||!ct(o)||$x(o)||Yx(o))return;let i=t.getState(),a=(n=fr(t,i.activeId))==null?void 0:n.element;if(!a)return;let{view:l,...s}=o,c=r?.current;a!==c&&a.focus(),Qf(a,o.type,s)||o.preventDefault(),o.currentTarget.contains(a)&&o.stopPropagation()})}function Kx(t){return bp(Ci(xn(_p(t))))}function Zx(t){let[e,r]=(0,gr.useState)(!1),o=(0,gr.useCallback)(()=>r(!0),[]),n=t.useState(i=>fr(t,i.activeId));return(0,gr.useEffect)(()=>{let i=n?.element;e&&i&&(r(!1),i.focus({preventScroll:!0}))},[n,e]),o}var Gc=we(function({store:e,composite:r=!0,focusOnMove:o=r,moveOnKeyPress:n=!0,...i}){let a=gp();e=e||a,et(e,!1);let l=(0,gr.useRef)(null),s=(0,gr.useRef)(null),c=Zx(e),f=e.useState("moves"),[,m]=ip(r?e.setBaseElement:null);(0,gr.useEffect)(()=>{var _;if(!e||!f||!r||!o)return;let{activeId:y}=e.getState(),E=(_=fr(e,y))==null?void 0:_.element;E&&Ap(E)},[e,f,r,o]),Oe(()=>{if(!e||!f||!r)return;let{baseElement:_,activeId:y}=e.getState();if(!(y===null)||!_)return;let x=s.current;s.current=null,x&&No(x,{relatedTarget:_}),Ut(_)||_.focus()},[e,f,r]);let d=e.useState("activeId"),p=e.useState("virtualFocus");Oe(()=>{var _;if(!e||!r||!p)return;let y=s.current;if(s.current=null,!y)return;let x=((_=fr(e,d))==null?void 0:_.element)||ko(y);x!==y&&No(y,{relatedTarget:x})},[e,d,p,r]);let g=Bp(e,i.onKeyDownCapture,s),w=Bp(e,i.onKeyUpCapture,s),v=i.onFocusCapture,b=re(_=>{if(v?.(_),_.defaultPrevented||!e)return;let{virtualFocus:y}=e.getState();if(!y)return;let E=_.relatedTarget,x=wp(_.currentTarget);ct(_)&&x&&(_.stopPropagation(),s.current=E)}),S=i.onFocus,P=re(_=>{if(S?.(_),_.defaultPrevented||!r||!e)return;let{relatedTarget:y}=_,{virtualFocus:E}=e.getState();E?ct(_)&&!Lo(e,y)&&queueMicrotask(c):ct(_)&&e.setActiveId(null)}),R=i.onBlurCapture,I=re(_=>{var y;if(R?.(_),_.defaultPrevented||!e)return;let{virtualFocus:E,activeId:x}=e.getState();if(!E)return;let A=(y=fr(e,x))==null?void 0:y.element,h=_.relatedTarget,C=Lo(e,h),M=s.current;s.current=null,ct(_)&&C?(h===A?M&&M!==h&&No(M,_):A?No(A,_):M&&No(M,_),_.stopPropagation()):!Lo(e,_.target)&&A&&No(A,_)}),k=i.onKeyDown,D=Fe(n),T=re(_=>{var y;if(k?.(_),_.nativeEvent.isComposing||_.defaultPrevented||!e||!ct(_))return;let{orientation:E,renderedItems:x,activeId:A}=e.getState(),h=fr(e,A);if((y=h?.element)!=null&&y.isConnected)return;let C=E!=="horizontal",M=E!=="vertical",L=Ux(x);if((_.key==="ArrowLeft"||_.key==="ArrowRight"||_.key==="Home"||_.key==="End")&&_t(_.currentTarget))return;let ze={ArrowUp:(L||C)&&(()=>{if(L){let at=Kx(x);return at?.id}return e?.last()}),ArrowRight:(L||M)&&e.first,ArrowDown:(L||C)&&e.first,ArrowLeft:(L||M)&&e.last,Home:e.first,End:e.last,PageUp:e.first,PageDown:e.last}[_.key];if(ze){let at=ze();if(at!==void 0){if(!D(_))return;_.preventDefault(),e.move(at)}}});i=mr(i,_=>(0,jp.jsx)(gn,{value:e,children:_}),[e]),i={"aria-activedescendant":e.useState(_=>{var y;if(e&&r&&_.virtualFocus)return(y=fr(e,_.activeId))==null?void 0:y.id}),...i,ref:Re(l,m,i.ref),onKeyDownCapture:g,onKeyUpCapture:w,onFocusCapture:b,onFocus:P,onBlurCapture:I,onKeyDown:T};let N=e.useState(_=>r&&(_.virtualFocus||_.activeId===null));return i=wi({focusable:N,...i}),i}),sO=he(function(e){let r=Gc(e);return ye(qx,r)});var Ti=Vt(),cO=Ti.useContext,dO=Ti.useScopedContext,qc=Ti.useProviderContext,Hp=Ti.ContextProvider,zp=Ti.ScopedContextProvider;var Uc=u(de(),1),Ei=Vt([Hp],[zp]),gO=Ei.useContext,hO=Ei.useScopedContext,vO=Ei.useProviderContext,Wp=Ei.ContextProvider,vs=Ei.ScopedContextProvider,bO=(0,Uc.createContext)(void 0),_O=(0,Uc.createContext)(void 0);var yn=u(de(),1),Up=u(Tm(),1),Yc=u(V(),1),Xx="div";function Gp(t,e){let r=setTimeout(e,t);return()=>clearTimeout(r)}function Qx(t){let e=requestAnimationFrame(()=>{e=requestAnimationFrame(t)});return()=>cancelAnimationFrame(e)}function qp(...t){return t.join(", ").split(", ").reduce((e,r)=>{let o=r.endsWith("ms")?1:1e3,n=Number.parseFloat(r||"0s")*o;return n>e?n:e},0)}function $c(t,e,r){return!r&&e!==!1&&(!t||!!e)}var Jx=we(function({store:e,alwaysVisible:r,...o}){let n=qc();e=e||n,et(e,!1);let i=(0,yn.useRef)(null),a=qt(o.id),[l,s]=(0,yn.useState)(null),c=e.useState("open"),f=e.useState("mounted"),m=e.useState("animated"),d=e.useState("contentElement"),p=bn(e.disclosure,"contentElement");Oe(()=>{i.current&&e?.setContentElement(i.current)},[e]),Oe(()=>{let b;return e?.setState("animated",S=>(b=S,!0)),()=>{b!==void 0&&e?.setState("animated",b)}},[e]),Oe(()=>{if(m){if(!d?.isConnected){s(null);return}return Qx(()=>{s(c?"enter":f?"leave":null)})}},[m,d,c,f]),Oe(()=>{if(!e||!m||!l||!d)return;let b=()=>e?.setState("animating",!1),S=()=>(0,Up.flushSync)(b);if(l==="leave"&&c||l==="enter"&&!c)return;if(typeof m=="number")return Gp(m,S);let{transitionDuration:P,animationDuration:R,transitionDelay:I,animationDelay:k}=getComputedStyle(d),{transitionDuration:D="0",animationDuration:T="0",transitionDelay:O="0",animationDelay:N="0"}=p?getComputedStyle(p):{},_=qp(I,k,O,N),y=qp(P,R,D,T),E=_+y;if(!E){l==="enter"&&e.setState("animated",!1),b();return}let x=1e3/60,A=Math.max(E-x,0);return Gp(A,S)},[e,m,d,p,c,l]),o=mr(o,b=>(0,Yc.jsx)(vs,{value:e,children:b}),[e]);let g=$c(f,o.hidden,r),w=o.style,v=(0,yn.useMemo)(()=>g?{...w,display:"none"}:w,[g,w]);return o={id:a,"data-open":c||void 0,"data-enter":l==="enter"||void 0,"data-leave":l==="leave"||void 0,hidden:g,...o,ref:Re(a?e.setContentElement:null,i,o.ref),style:v},tt(o)}),ey=he(function(e){let r=Jx(e);return ye(Xx,r)}),PO=he(function({unmountOnHide:e,...r}){let o=qc(),n=r.store||o;return bn(n,a=>!e||a?.mounted)===!1?null:(0,Yc.jsx)(ey,{...r})});function Yp(t={}){let e=Bo(t.store,Si(t.disclosure,["contentElement","disclosureElement"]));let r=e?.getState(),o=te(t.open,r?.open,t.defaultOpen,!1),n=te(t.animated,r?.animated,!1),i={open:o,animated:n,animating:!!n&&o,mounted:o,contentElement:te(r?.contentElement,null),disclosureElement:te(r?.disclosureElement,null)},a=yt(i,e);return Ze(a,()=>Xe(a,["animated","animating"],l=>{l.animated||a.setState("animating",!1)})),Ze(a,()=>vn(a,["open"],()=>{a.getState().animated&&a.setState("animating",!0)})),Ze(a,()=>Xe(a,["open","animating"],l=>{a.setState("mounted",l.open||l.animating)})),{...a,disclosure:t.disclosure,setOpen:l=>a.setState("open",l),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",l=>!l),stopAnimation:()=>a.setState("animating",!1),setContentElement:l=>a.setState("contentElement",l),setDisclosureElement:l=>a.setState("disclosureElement",l)}}function $p(t,e,r){return dr(e,[r.store,r.disclosure]),Ve(t,r,"open","setOpen"),Ve(t,r,"mounted","setMounted"),Ve(t,r,"animated"),Object.assign(t,{disclosure:r.disclosure})}var Pi=Vt([Wp],[vs]),LO=Pi.useContext,FO=Pi.useScopedContext,Kp=Pi.useProviderContext,Zp=Pi.ContextProvider,Xp=Pi.ScopedContextProvider;function ty(t){var e;let r=t.find(i=>!!i.element),o=[...t].reverse().find(i=>!!i.element),n=(e=r?.element)==null?void 0:e.parentElement;for(;n&&o?.element;){if(o&&n.contains(o.element))return n;n=n.parentElement}return Rr(n).body}function ry(t){return t?.__unstablePrivateStore}function Qp(t={}){var e;t.store;let r=(e=t.store)==null?void 0:e.getState(),o=te(t.items,r?.items,t.defaultItems,[]),n=new Map(o.map(d=>[d.id,d])),i={items:o,renderedItems:te(r?.renderedItems,[])},a=ry(t.store),l=yt({items:o,renderedItems:i.renderedItems},a),s=yt(i,t.store),c=d=>{let p=Ac(d,g=>g.element);l.setState("renderedItems",p),s.setState("renderedItems",p)};Ze(s,()=>hn(l)),Ze(l,()=>vo(l,["items"],d=>{s.setState("items",d.items)})),Ze(l,()=>vo(l,["renderedItems"],d=>{let p=!0,g=requestAnimationFrame(()=>{let{renderedItems:S}=s.getState();d.renderedItems!==S&&c(d.renderedItems)});if(typeof IntersectionObserver!="function")return()=>cancelAnimationFrame(g);let w=()=>{if(p){p=!1;return}cancelAnimationFrame(g),g=requestAnimationFrame(()=>c(d.renderedItems))},v=ty(d.renderedItems),b=new IntersectionObserver(w,{root:v});for(let S of d.renderedItems)S.element&&b.observe(S.element);return()=>{cancelAnimationFrame(g),b.disconnect()}}));let f=(d,p,g=!1)=>{let w;return p(b=>{let S=b.findIndex(({id:R})=>R===d.id),P=b.slice();if(S!==-1){w=b[S];let R={...w,...d};P[S]=R,n.set(d.id,R)}else P.push(d),n.set(d.id,d);return P}),()=>{p(b=>{if(!w)return g&&n.delete(d.id),b.filter(({id:R})=>R!==d.id);let S=b.findIndex(({id:R})=>R===d.id);if(S===-1)return b;let P=b.slice();return P[S]=w,n.set(d.id,w),P})}},m=d=>f(d,p=>l.setState("items",p),!0);return{...s,registerItem:m,renderItem:d=>mo(m(d),f(d,p=>l.setState("renderedItems",p))),item:d=>{if(!d)return null;let p=n.get(d);if(!p){let{items:g}=l.getState();p=g.find(w=>w.id===d),p&&n.set(d,p)}return p||null},__unstablePrivateStore:l}}function Jp(t,e,r){return dr(e,[r.store]),Ve(t,r,"items","setItems"),t}var oy={id:null};function Dr(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function ny(t,e){return t.filter(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function eg(t,e){return t.filter(r=>r.rowId===e)}function iy(t,e,r=!1){let o=t.findIndex(n=>n.id===e);return[...t.slice(o+1),...r?[oy]:[],...t.slice(0,o)]}function tg(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function rg(t){let e=0;for(let{length:r}of t)r>e&&(e=r);return e}function ay(t){return{id:"__EMPTY_ITEM__",disabled:!0,rowId:t}}function sy(t,e,r){let o=rg(t);for(let n of t)for(let i=0;iXe(a,["renderedItems","activeId"],s=>{a.setState("activeId",c=>{var f;return c!==void 0?c:(f=Dr(s.renderedItems))==null?void 0:f.id})}));let l=(s="next",c={})=>{var f,m;let d=a.getState(),{skip:p=0,activeId:g=d.activeId,focusShift:w=d.focusShift,focusLoop:v=d.focusLoop,focusWrap:b=d.focusWrap,includesBaseElement:S=d.includesBaseElement,renderedItems:P=d.renderedItems,rtl:R=d.rtl}=c,I=s==="up"||s==="down",k=s==="next"||s==="down",D=k?R&&!I:!R||I,T=w&&!p,O=I?Ci(sy(tg(P),g,T)):P;if(O=D?xn(O):O,O=I?ly(O):O,g==null)return(f=Dr(O))==null?void 0:f.id;let N=O.find(L=>L.id===g);if(!N)return(m=Dr(O))==null?void 0:m.id;let _=O.some(L=>L.rowId),y=O.indexOf(N),E=O.slice(y+1),x=eg(E,N.rowId);if(p){let L=ny(x,g),ne=L.slice(p)[0]||L[L.length-1];return ne?.id}let A=v&&(I?v!=="horizontal":v!=="vertical"),h=_&&b&&(I?b!=="horizontal":b!=="vertical"),C=k?(!_||I)&&A&&S:I?S:!1;if(A){let L=h&&!C?O:eg(O,N.rowId),ne=iy(L,g,C),Te=Dr(ne,g);return Te?.id}if(h){let L=Dr(C?x:E,g);return C?L?.id||null:L?.id}let M=Dr(x,g);return!M&&C?null:M?.id};return{...o,...a,setBaseElement:s=>a.setState("baseElement",s),setActiveId:s=>a.setState("activeId",s),move:s=>{s!==void 0&&(a.setState("activeId",s),a.setState("moves",c=>c+1))},first:()=>{var s;return(s=Dr(a.getState().renderedItems))==null?void 0:s.id},last:()=>{var s;return(s=Dr(xn(a.getState().renderedItems)))==null?void 0:s.id},next:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("next",s)),previous:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("previous",s)),down:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("down",s)),up:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("up",s))}}function ng(t){return{id:qt(t.id),...t}}function ig(t,e,r){return t=Jp(t,e,r),Ve(t,r,"activeId","setActiveId"),Ve(t,r,"includesBaseElement"),Ve(t,r,"virtualFocus"),Ve(t,r,"orientation"),Ve(t,r,"rtl"),Ve(t,r,"focusLoop"),Ve(t,r,"focusWrap"),Ve(t,r,"focusShift"),t}var bs=u(de(),1),_s=(0,bs.createContext)(void 0),Ai=Vt([Zp,gn],[Xp,fs]),Kc=Ai.useContext,wn=Ai.useScopedContext,xs=Ai.useProviderContext,ag=Ai.ContextProvider,sg=Ai.ScopedContextProvider,ys=(0,bs.createContext)(void 0),lg=(0,bs.createContext)(!1);function ug(t={}){return Yp(t)}function cg(t,e,r){return $p(t,e,r)}function dg({popover:t,...e}={}){let r=Bo(e.store,Si(t,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"]));let o=r?.getState(),n=ug({...e,store:r}),i=te(e.placement,o?.placement,"bottom"),a={...n.getState(),placement:i,currentPlacement:i,anchorElement:te(o?.anchorElement,null),popoverElement:te(o?.popoverElement,null),arrowElement:te(o?.arrowElement,null),rendered:Symbol("rendered")},l=yt(a,n,r);return{...n,...l,setAnchorElement:s=>l.setState("anchorElement",s),setPopoverElement:s=>l.setState("popoverElement",s),setArrowElement:s=>l.setState("arrowElement",s),render:()=>l.setState("rendered",Symbol("rendered"))}}function mg(t,e,r){return dr(e,[r.popover]),Ve(t,r,"placement"),cg(t,e,r)}var uy="div",Zc=we(function({store:e,...r}){let o=Kp();return e=e||o,r={...r,ref:Re(e?.setAnchorElement,r.ref)},r}),yR=he(function(e){let r=Zc(e);return ye(uy,r)});var fg=u(de(),1),cy="div";function pg(t){let e=t.relatedTarget;return e?.nodeType===Node.ELEMENT_NODE?e:null}function dy(t){let e=pg(t);return e?ur(t.currentTarget,e):!1}var Xc=Symbol("composite-hover");function my(t){let e=pg(t);if(!e)return!1;do{if(Rt(e,Xc)&&e[Xc])return!0;e=e.parentElement}while(e);return!1}var Qc=we(function({store:e,focusOnHover:r=!0,blurOnHoverEnd:o=!!r,...n}){let i=ms();e=e||i,et(e,!1);let a=dp(),l=n.onMouseMove,s=Fe(r),c=re(g=>{if(l?.(g),!g.defaultPrevented&&a()&&s(g)){if(!Lc(g.currentTarget)){let w=e?.getState().baseElement;w&&!Ut(w)&&w.focus()}e?.setActiveId(g.currentTarget.id)}}),f=n.onMouseLeave,m=Fe(o),d=re(g=>{var w;f?.(g),!g.defaultPrevented&&a()&&(dy(g)||my(g)||s(g)&&m(g)&&(e?.setActiveId(null),(w=e?.getState().baseElement)==null||w.focus()))}),p=(0,fg.useCallback)(g=>{g&&(g[Xc]=!0)},[]);return n={...n,ref:Re(p,n.ref),onMouseMove:c,onMouseLeave:d},tt(n)}),IR=go(he(function(e){let r=Qc(e);return ye(cy,r)}));var rt=u(de(),1),fy="input";function gg(t,e,r){if(!r)return!1;let o=t.find(n=>!n.disabled&&n.value);return o?.value===e}function hg(t,e){return!e||t==null?!1:(t=gi(t),e.length>t.length&&e.toLowerCase().indexOf(t.toLowerCase())===0)}function py(t){return t.type==="input"}function gy(t){return t==="inline"||t==="list"||t==="both"||t==="none"}function hy(t){let e=t.find(r=>{var o;return r.disabled?!1:((o=r.element)==null?void 0:o.getAttribute("role"))!=="tab"});return e?.id}var vy=we(function({store:e,focusable:r=!0,autoSelect:o=!1,getAutoSelectId:n,setValueOnChange:i,showMinLength:a=0,showOnChange:l,showOnMouseDown:s,showOnClick:c=s,showOnKeyDown:f,showOnKeyPress:m=f,blurActiveItemOnClick:d,setValueOnClick:p=!0,moveOnKeyPress:g=!0,autoComplete:w="list",...v}){let b=xs();e=e||b,et(e,!1);let S=(0,rt.useRef)(null),[P,R]=up(),I=(0,rt.useRef)(!1),k=(0,rt.useRef)(!1),D=e.useState(B=>B.virtualFocus&&o),T=w==="inline"||w==="both",[O,N]=(0,rt.useState)(T);lp(()=>{T&&N(!0)},[T]);let _=e.useState("value"),y=(0,rt.useRef)(void 0);(0,rt.useEffect)(()=>Xe(e,["selectedValue","activeId"],(B,ue)=>{y.current=ue.selectedValue}),[]);let E=e.useState(B=>{var ue;if(T&&O&&!(B.activeValue&&Array.isArray(B.selectedValue)&&(B.selectedValue.includes(B.activeValue)||(ue=y.current)!=null&&ue.includes(B.activeValue))))return B.activeValue}),x=e.useState("renderedItems"),A=e.useState("open"),h=e.useState("contentElement"),C=(0,rt.useMemo)(()=>{if(!T||!O)return _;if(gg(x,E,D)){if(hg(_,E)){let ue=E?.slice(_.length)||"";return _+ue}return _}return E||_},[T,O,x,E,D,_]);(0,rt.useEffect)(()=>{let B=S.current;if(!B)return;let ue=()=>N(!0);return B.addEventListener("combobox-item-move",ue),()=>{B.removeEventListener("combobox-item-move",ue)}},[]),(0,rt.useEffect)(()=>{if(!T||!O||!E||!gg(x,E,D)||!hg(_,E))return;let ue=pi;return queueMicrotask(()=>{let We=S.current;if(!We)return;let{start:Ge,end:zt}=fn(We),Er=_.length,st=E.length;bi(We,Er,st),ue=()=>{if(!Ut(We))return;let{start:Eo,end:e_}=fn(We);Eo===Er&&e_===st&&bi(We,Ge,zt)}}),()=>ue()},[P,T,O,E,x,D,_]);let M=(0,rt.useRef)(null),L=re(n),ne=(0,rt.useRef)(null);(0,rt.useEffect)(()=>{if(!A||!h)return;let B=pn(h);if(!B)return;M.current=B;let ue=()=>{I.current=!1},We=()=>{if(!e||!I.current)return;let{activeId:zt}=e.getState();zt!==null&&zt!==ne.current&&(I.current=!1)},Ge={passive:!0,capture:!0};return B.addEventListener("wheel",ue,Ge),B.addEventListener("touchmove",ue,Ge),B.addEventListener("scroll",We,Ge),()=>{B.removeEventListener("wheel",ue,!0),B.removeEventListener("touchmove",ue,!0),B.removeEventListener("scroll",We,!0)}},[A,h,e]),Oe(()=>{_&&(k.current||(I.current=!0))},[_]),Oe(()=>{D!=="always"&&A||(I.current=A)},[D,A]);let Te=e.useState("resetValueOnSelect");dr(()=>{var B,ue;let We=I.current;if(!e||!A||!We&&!Te)return;let{baseElement:Ge,contentElement:zt,activeId:Er}=e.getState();if(!(Ge&&!Ut(Ge))){if(zt?.hasAttribute("data-placing")){let st=new MutationObserver(R);return st.observe(zt,{attributeFilter:["data-placing"]}),()=>st.disconnect()}if(D&&We){let st=L(x),Eo=st!==void 0?st:(B=hy(x))!=null?B:e.first();ne.current=Eo,e.move(Eo??null)}else{let st=(ue=e.item(Er||e.first()))==null?void 0:ue.element;st&&"scrollIntoView"in st&&st.scrollIntoView({block:"nearest",inline:"nearest"})}}},[e,A,P,_,D,Te,L,x]),(0,rt.useEffect)(()=>{if(!T)return;let B=S.current;if(!B)return;let ue=[B,h].filter(Ge=>!!Ge),We=Ge=>{ue.every(zt=>cs(Ge,zt))&&e?.setValue(C)};for(let Ge of ue)Ge.addEventListener("focusout",We);return()=>{for(let Ge of ue)Ge.removeEventListener("focusout",We)}},[T,h,e,C]);let Me=B=>B.currentTarget.value.length>=a,ze=v.onChange,at=Fe(l??Me),or=Fe(i??!e.tag),Sr=re(B=>{if(ze?.(B),B.defaultPrevented||!e)return;let ue=B.currentTarget,{value:We,selectionStart:Ge,selectionEnd:zt}=ue,Er=B.nativeEvent;if(I.current=!0,py(Er)&&(Er.isComposing&&(I.current=!1,k.current=!0),T)){let st=Er.inputType==="insertText"||Er.inputType==="insertCompositionText",Eo=Ge===We.length;N(st&&Eo)}if(or(B)){let st=We===e.getState().value;e.setValue(We),queueMicrotask(()=>{bi(ue,Ge,zt)}),T&&D&&st&&R()}at(B)&&e.show(),(!D||!I.current)&&e.setActiveId(null)}),Y=v.onCompositionEnd,J=re(B=>{I.current=!0,k.current=!1,Y?.(B),!B.defaultPrevented&&D&&R()}),_e=v.onMouseDown,Cr=Fe(d??(()=>!!e?.getState().includesBaseElement)),Tr=Fe(p),Co=Fe(c??Me),To=re(B=>{_e?.(B),!B.defaultPrevented&&(B.button||B.ctrlKey||e&&(Cr(B)&&e.setActiveId(null),Tr(B)&&e.setValue(C),Co(B)&&po(B.currentTarget,"mouseup",e.show)))}),Zo=v.onKeyDown,Hn=Fe(m??Me),Dl=re(B=>{if(Zo?.(B),B.repeat||(I.current=!1),B.defaultPrevented||B.ctrlKey||B.altKey||B.shiftKey||B.metaKey||!e)return;let{open:ue}=e.getState();ue||(B.key==="ArrowUp"||B.key==="ArrowDown")&&Hn(B)&&(B.preventDefault(),e.show())}),Jd=v.onBlur,Z0=re(B=>{I.current=!1,Jd?.(B),B.defaultPrevented}),X0=qt(v.id),Q0=gy(w)?w:void 0,J0=e.useState(B=>B.activeId===null);return v={id:X0,role:"combobox","aria-autocomplete":Q0,"aria-haspopup":Pc(h,"listbox"),"aria-expanded":A,"aria-controls":h?.id,"data-active-item":J0||void 0,value:C,...v,ref:Re(S,v.ref),onChange:Sr,onCompositionEnd:J,onMouseDown:To,onKeyDown:Dl,onBlur:Z0},v=Gc({store:e,focusable:r,...v,moveOnKeyPress:B=>Sc(g,B)?!1:(T&&N(!0),!0)}),v=Zc({store:e,...v}),{autoComplete:"off",...v}}),ws=he(function(e){let r=vy(e);return ye(fy,r)});var Ss=u(de(),1),Jc=u(V(),1),by="div";function _y(t,e){if(e!=null)return t==null?!1:Array.isArray(t)?t.includes(e):t===e}function xy(t){var e;return(e={menu:"menuitem",listbox:"option",tree:"treeitem"}[t])!=null?e:"option"}var vg=we(function({store:e,value:r,hideOnClick:o,setValueOnClick:n,selectValueOnClick:i=!0,resetValueOnSelect:a,focusOnHover:l=!1,moveOnKeyPress:s=!0,getItem:c,...f}){var m;let d=wn();e=e||d,et(e,!1);let{resetValueOnSelectState:p,multiSelectable:g,selected:w}=hs(e,{resetValueOnSelectState:"resetValueOnSelect",multiSelectable(_){return Array.isArray(_.selectedValue)},selected(_){return _y(_.selectedValue,r)}}),v=(0,Ss.useCallback)(_=>{let y={..._,value:r};return c?c(y):y},[r,c]);n=n??!g,o=o??(r!=null&&!g);let b=f.onClick,S=Fe(n),P=Fe(i),R=Fe((m=a??p)!=null?m:g),I=Fe(o),k=re(_=>{b?.(_),!_.defaultPrevented&&(Xf(_)||Zf(_)||(r!=null&&(P(_)&&(R(_)&&e?.resetValue(),e?.setSelectedValue(y=>Array.isArray(y)?y.includes(r)?y.filter(E=>E!==r):[...y,r]:r)),S(_)&&e?.setValue(r)),I(_)&&e?.hide()))}),D=f.onKeyDown,T=re(_=>{if(D?.(_),_.defaultPrevented)return;let y=e?.getState().baseElement;if(!y||Ut(y))return;(_.key.length===1||_.key==="Backspace"||_.key==="Delete")&&(queueMicrotask(()=>y.focus()),_t(y)&&e?.setValue(y.value))});g&&w!=null&&(f={"aria-selected":w,...f}),f=mr(f,_=>(0,Jc.jsx)(ys.Provider,{value:r,children:(0,Jc.jsx)(lg.Provider,{value:w??!1,children:_})}),[r,w]);let O=(0,Ss.useContext)(_s);f={role:xy(O),children:r,...f,onClick:k,onKeyDown:T};let N=Fe(s);return f=zc({store:e,...f,getItem:v,moveOnKeyPress:_=>{if(!N(_))return!1;let y=new Event("combobox-item-move"),E=e?.getState().baseElement;return E?.dispatchEvent(y),!0}}),f=Qc({store:e,focusOnHover:l,...f}),f}),Ii=go(he(function(e){let r=vg(e);return ye(by,r)}));var Cs=u(de(),1),_g=u(V(),1),yy="span";function bg(t){return gi(t).toLowerCase()}function wy(t,e){let r=[];for(let o of e){let n=0,i=o.length;for(;t.indexOf(o,n)!==-1;){let a=t.indexOf(o,n);a!==-1&&r.push([a,i]),n=a+1}}return r}function Sy(t){return t.filter(([e,r],o,n)=>!n.some(([i,a],l)=>l!==o&&i<=e&&i+a>=e+r))}function Cy(t){return t.sort(([e],[r])=>e-r)}function Ty(t,e){if(!t||!e)return t;let r=Wc(e).filter(Boolean).map(bg),o=[],n=(s,c=!1)=>(0,_g.jsx)("span",{"data-autocomplete-value":c?"":void 0,"data-user-value":c?void 0:"",children:s},o.length),i=Cy(Sy(wy(bg(t),new Set(r))));if(!i.length)return o.push(n(t,!0)),o;let[a]=i[0];return[t.slice(0,a),...i.flatMap(([s,c],f)=>{var m;let d=t.slice(s,s+c),p=(m=i[f+1])==null?void 0:m[0],g=t.slice(s+c,p);return[d,g]})].forEach((s,c)=>{s&&o.push(n(s,c%2===0))}),o}var Ey=we(function({store:e,value:r,userValue:o,...n}){let i=wn();e=e||i;let a=(0,Cs.useContext)(ys),l=r??a,s=bn(e,f=>o??f?.value);return n={children:(0,Cs.useMemo)(()=>{if(l)return s?Ty(l,s):l},[l,s]),...n},tt(n)}),Ts=he(function(e){let r=Ey(e);return ye(yy,r)});var Py="label",Ay=we(function({store:e,...r}){let o=xs();return e=e||o,et(e,!1),r={htmlFor:e.useState(i=>{var a;return(a=i.baseElement)==null?void 0:a.id}),...r},tt(r)}),Es=go(he(function(e){let r=Ay(e);return ye(Py,r)}));var Ps=u(de(),1),ed=u(V(),1),Iy="div",xg=we(function({store:e,alwaysVisible:r,...o}){let n=wn(!0),i=Kc();e=e||i;let a=!!e&&e===n;et(e,!1);let l=(0,Ps.useRef)(null),s=qt(o.id),c=e.useState("mounted"),f=$c(c,o.hidden,r),m=f?{...o.style,display:"none"}:o.style,d=e.useState(R=>Array.isArray(R.selectedValue)),p=sp(l,"role",o.role),w=(p==="listbox"||p==="tree"||p==="grid")&&d||void 0,[v,b]=(0,Ps.useState)(!1),S=e.useState("contentElement");Oe(()=>{if(!c)return;let R=l.current;if(!R||S!==R)return;let I=()=>{b(!!R.querySelector("[role='listbox']"))},k=new MutationObserver(I);return k.observe(R,{subtree:!0,childList:!0,attributeFilter:["role"]}),I(),()=>k.disconnect()},[c,S]),v||(o={role:"listbox","aria-multiselectable":w,...o}),o=mr(o,R=>(0,ed.jsx)(sg,{value:e,children:(0,ed.jsx)(_s.Provider,{value:p,children:R})}),[e,p]);let P=s&&(!n||!a)?e.setContentElement:null;return o={id:s,hidden:f,...o,ref:Re(P,l,o.ref),style:m},tt(o)}),Oi=he(function(e){let r=xg(e);return ye(Iy,r)});var td=u(de(),1),y5=(0,td.createContext)(null),w5=(0,td.createContext)(null),Ri=Vt([gn],[fs]),yg=Ri.useContext,S5=Ri.useScopedContext,C5=Ri.useProviderContext,T5=Ri.ContextProvider,E5=Ri.ScopedContextProvider;var Oy=Do()&&Ic();function wg({tag:t,...e}={}){let r=Bo(e.store,Hc(t,["value","rtl"]));let o=t?.getState(),n=r?.getState(),i=te(e.activeId,n?.activeId,e.defaultActiveId,null),a=og({...e,activeId:i,includesBaseElement:te(e.includesBaseElement,n?.includesBaseElement,!0),orientation:te(e.orientation,n?.orientation,"vertical"),focusLoop:te(e.focusLoop,n?.focusLoop,!0),focusWrap:te(e.focusWrap,n?.focusWrap,!0),virtualFocus:te(e.virtualFocus,n?.virtualFocus,!0)}),l=dg({...e,placement:te(e.placement,n?.placement,"bottom-start")}),s=te(e.value,n?.value,e.defaultValue,""),c=te(e.selectedValue,n?.selectedValue,o?.values,e.defaultSelectedValue,""),f=Array.isArray(c),m={...a.getState(),...l.getState(),value:s,selectedValue:c,resetValueOnSelect:te(e.resetValueOnSelect,n?.resetValueOnSelect,f),resetValueOnHide:te(e.resetValueOnHide,n?.resetValueOnHide,f&&!t),activeValue:n?.activeValue},d=yt(m,a,l,r);return Oy&&Ze(d,()=>Xe(d,["virtualFocus"],()=>{d.setState("virtualFocus",!1)})),Ze(d,()=>{if(t)return mo(Xe(d,["selectedValue"],p=>{Array.isArray(p.selectedValue)&&t.setValues(p.selectedValue)}),Xe(t,["values"],p=>{d.setState("selectedValue",p.values)}))}),Ze(d,()=>Xe(d,["resetValueOnHide","mounted"],p=>{p.resetValueOnHide&&(p.mounted||d.setState("value",s))})),Ze(d,()=>Xe(d,["open"],p=>{p.open||(d.setState("activeId",i),d.setState("moves",0))})),Ze(d,()=>Xe(d,["moves","activeId"],(p,g)=>{p.moves===g.moves&&d.setState("activeValue",void 0)})),Ze(d,()=>vo(d,["moves","renderedItems"],(p,g)=>{if(p.moves===g.moves)return;let{activeId:w}=d.getState(),v=a.item(w);d.setState("activeValue",v?.value)})),{...l,...a,...d,tag:t,setValue:p=>d.setState("value",p),resetValue:()=>d.setState("value",m.value),setSelectedValue:p=>d.setState("selectedValue",p)}}function Vy(t){let e=yg();return t={...t,tag:t.tag!==void 0?t.tag:e},ng(t)}function ky(t,e,r){return dr(e,[r.tag]),Ve(t,r,"value","setValue"),Ve(t,r,"selectedValue","setSelectedValue"),Ve(t,r,"resetValueOnHide"),Ve(t,r,"resetValueOnSelect"),Object.assign(ig(mg(t,e,r),e,r),{tag:r.tag})}function rd(t={}){t=Vy(t);let[e,r]=_n(wg,t);return ky(e,r,t)}var Sg=u(V(),1);function As(t={}){let e=rd(t);return(0,Sg.jsx)(ag,{value:e,children:t.children})}var Og=u(od(),1);var Rg=u(ht(),1),Nr=u(W(),1),jo=u(j(),1),Yt=u(G(),1);var By=[],Vi=(t,e)=>t.singleSelection?e?.value:Array.isArray(e?.value)?e.value:!Array.isArray(e?.value)&&e?.value?[e.value]:By;var ki=u(j(),1),jy=[];function Qe({elements:t,getElements:e}){let r=Array.isArray(t)&&t.length>0?t:jy,[o,n]=(0,ki.useState)(r),[i,a]=(0,ki.useState)(!1);return(0,ki.useEffect)(()=>{if(!e){n(r);return}let l=!1;return a(!0),e().then(s=>{if(!l){let c=Array.isArray(s)&&s.length>0?s:r;n(c)}}).catch(()=>{l||n(r)}).finally(()=>{l||a(!1)}),()=>{l=!0}},[e,r]),{elements:o,isLoading:i}}var ie=u(V(),1);function Pg(t=""){return(0,Og.default)(t.trim().toLowerCase())}var Ag=(t,e,r)=>t.singleSelection?r:Array.isArray(e?.value)?e.value.includes(r)?e.value.filter(o=>o!==r):[...e.value,r]:[r];function Ig(t,e){return`${t}-${e}`}var Vg=({selected:t})=>(0,ie.jsx)("span",{className:z("dataviews-filters__search-widget-listitem-multi-selection",{"is-selected":t}),children:t&&(0,ie.jsx)(Yt.Icon,{icon:Kn})}),kg=({selected:t})=>(0,ie.jsx)("span",{className:z("dataviews-filters__search-widget-listitem-single-selection",{"is-selected":t})});function Dg({view:t,filter:e,onChangeView:r}){let o=(0,Rg.useInstanceId)(Dg,"dataviews-filter-list-box"),[n,i]=(0,jo.useState)(e.operators?.length===1?void 0:null),a=t.filters?.find(s=>s.field===e.field),l=Vi(e,a);return(0,ie.jsx)(Yt.Composite,{virtualFocus:!0,focusLoop:!0,activeId:n,setActiveId:i,role:"listbox",className:"dataviews-filters__search-widget-listbox","aria-label":(0,Nr.sprintf)((0,Nr.__)("List of: %1$s"),e.name),onFocusVisible:()=>{!n&&e.elements.length&&i(Ig(o,e.elements[0].value))},render:(0,ie.jsx)(Yt.Composite.Typeahead,{}),children:e.elements.map(s=>(0,ie.jsxs)(Yt.Composite.Hover,{render:(0,ie.jsx)(Yt.Composite.Item,{id:Ig(o,s.value),render:(0,ie.jsx)("div",{"aria-label":s.label,role:"option",className:"dataviews-filters__search-widget-listitem"}),onClick:()=>{let c=a?[...(t.filters??[]).map(f=>f.field===e.field?{...f,operator:a.operator||e.operators[0],value:Ag(e,a,s.value)}:f)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:Ag(e,a,s.value)}];r({...t,page:1,filters:c})}}),children:[e.singleSelection&&(0,ie.jsx)(kg,{selected:l===s.value}),!e.singleSelection&&(0,ie.jsx)(Vg,{selected:l.includes(s.value)}),(0,ie.jsx)("span",{className:"dataviews-filters__search-widget-listitem-value",title:s.label,children:s.label})]},s.value))})}function Hy({view:t,filter:e,onChangeView:r}){let[o,n]=(0,jo.useState)(""),i=(0,jo.useDeferredValue)(o),a=t.filters?.find(c=>c.field===e.field),l=Vi(e,a),s=(0,jo.useMemo)(()=>{let c=Pg(i);return e.elements.filter(f=>Pg(f.label).includes(c))},[e.elements,i]);return(0,ie.jsxs)(As,{selectedValue:l,setSelectedValue:c=>{let f=a?[...(t.filters??[]).map(m=>m.field===e.field?{...m,operator:a.operator||e.operators[0],value:c}:m)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:c}];r({...t,page:1,filters:f})},setValue:n,children:[(0,ie.jsxs)("div",{className:"dataviews-filters__search-widget-filter-combobox__wrapper",children:[(0,ie.jsx)(Es,{render:(0,ie.jsx)(Yt.VisuallyHidden,{children:(0,Nr.__)("Search items")}),children:(0,Nr.__)("Search items")}),(0,ie.jsx)(ws,{autoSelect:"always",placeholder:(0,Nr.__)("Search"),className:"dataviews-filters__search-widget-filter-combobox__input"}),(0,ie.jsx)("div",{className:"dataviews-filters__search-widget-filter-combobox__icon",children:(0,ie.jsx)(Yt.Icon,{icon:ai})})]}),(0,ie.jsxs)(Oi,{className:"dataviews-filters__search-widget-filter-combobox-list",alwaysVisible:!0,children:[s.map(c=>(0,ie.jsxs)(Ii,{resetValueOnSelect:!1,value:c.value,className:"dataviews-filters__search-widget-listitem",hideOnClick:!1,setValueOnClick:!1,focusOnHover:!0,children:[e.singleSelection&&(0,ie.jsx)(kg,{selected:l===c.value}),!e.singleSelection&&(0,ie.jsx)(Vg,{selected:l.includes(c.value)}),(0,ie.jsxs)("span",{className:"dataviews-filters__search-widget-listitem-value",title:c.label,children:[(0,ie.jsx)(Ts,{className:"dataviews-filters__search-widget-filter-combobox-item-value",value:c.label}),!!c.description&&(0,ie.jsx)("span",{className:"dataviews-filters__search-widget-listitem-description",children:c.description})]})]},c.value)),!s.length&&(0,ie.jsx)("p",{children:(0,Nr.__)("No results found")})]})]})}function Ng(t){let{elements:e,isLoading:r}=Qe({elements:t.filter.elements,getElements:t.filter.getElements});if(r)return(0,ie.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,ie.jsx)(Yt.Spinner,{})});if(e.length===0)return(0,ie.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,Nr.__)("No elements found")});let o=e.length>10?Hy:Dg;return(0,ie.jsx)(o,{...t,filter:{...t.filter,elements:e}})}var Fg=u(Lg(),1),Bg=u(ht(),1),nd=u(j(),1),jg=u(G(),1);var id=u(V(),1);function Hg({filter:t,view:e,onChangeView:r,fields:o}){let n=e.filters?.find(c=>c.field===t.field),i=Vi(t,n),a=(0,nd.useMemo)(()=>{let c=o.find(f=>f.id===t.field);return c&&{...c,isValid:{},getValue:({item:f})=>f[c.id],setValue:({value:f})=>({[c.id]:f})}},[o,t.field]),l=(0,nd.useMemo)(()=>(e.filters??[]).reduce((c,f)=>(c[f.field]=f.value,c),{}),[e.filters]),s=(0,Bg.useEvent)(c=>{if(!a||!n)return;let f=a.getValue({item:c});(0,Fg.default)(f,i)||r({...e,filters:(e.filters??[]).map(m=>m.field===t.field?{...m,operator:n.operator||t.operators[0],value:f===""?void 0:f}:m)})});return!a||!a.Edit||!n?null:(0,id.jsx)(jg.Flex,{className:"dataviews-filters__user-input-widget",gap:2.5,direction:"column",children:(0,id.jsx)(a.Edit,{hideLabelFromVision:!0,data:l,field:a,operator:n.operator,onChange:s})})}var zy=Math.pow(10,8)*24*60*60*1e3,hV=-zy,Os=6048e5,zg=864e5;var Wy=3600;var Wg=Wy*24,vV=Wg*7,Gy=Wg*365.2425,qy=Gy/12,bV=qy*3,ad=Symbol.for("constructDateFrom");function Ue(t,e){return typeof t=="function"?t(e):t&&typeof t=="object"&&ad in t?t[ad](e):t instanceof Date?new t.constructor(e):new Date(e)}function pe(t,e){return Ue(e||t,t)}function Rs(t,e,r){let o=pe(t,r?.in);return isNaN(e)?Ue(r?.in||t,NaN):(e&&o.setDate(o.getDate()+e),o)}function Vs(t,e,r){let o=pe(t,r?.in);if(isNaN(e))return Ue(r?.in||t,NaN);if(!e)return o;let n=o.getDate(),i=Ue(r?.in||t,o.getTime());i.setMonth(o.getMonth()+e+1,0);let a=i.getDate();return n>=a?i:(o.setFullYear(i.getFullYear(),i.getMonth(),n),o)}var Uy={};function bo(){return Uy}function Mr(t,e){let r=bo(),o=e?.weekStartsOn??e?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,n=pe(t,e?.in),i=n.getDay(),a=(i=i.getTime()?o+1:r.getTime()>=l.getTime()?o:o-1}function sd(t){let e=pe(t),r=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return r.setUTCFullYear(e.getFullYear()),+t-+r}function Gg(t,...e){let r=Ue.bind(null,t||e.find(o=>typeof o=="object"));return e.map(r)}function ld(t,e){let r=pe(t,e?.in);return r.setHours(0,0,0,0),r}function qg(t,e,r){let[o,n]=Gg(r?.in,t,e),i=ld(o),a=ld(n),l=+i-sd(i),s=+a-sd(a);return Math.round((l-s)/zg)}function Ug(t,e){let r=ks(t,e),o=Ue(e?.in||t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),Ho(o)}function Yg(t,e,r){return Rs(t,e*7,r)}function $g(t,e,r){return Vs(t,e*12,r)}function Kg(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function Sn(t){return!(!Kg(t)&&typeof t!="number"||isNaN(+pe(t)))}function Zg(t,e){let r=pe(t,e?.in);return r.setDate(1),r.setHours(0,0,0,0),r}function Ds(t,e){let r=pe(t,e?.in);return r.setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r}var Yy={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Xg=(t,e,r)=>{let o,n=Yy[t];return typeof n=="string"?o=n:e===1?o=n.one:o=n.other.replace("{{count}}",e.toString()),r?.addSuffix?r.comparison&&r.comparison>0?"in "+o:o+" ago":o};function Ns(t){return(e={})=>{let r=e.width?String(e.width):t.defaultWidth;return t.formats[r]||t.formats[t.defaultWidth]}}var $y={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Ky={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zy={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Qg={date:Ns({formats:$y,defaultWidth:"full"}),time:Ns({formats:Ky,defaultWidth:"full"}),dateTime:Ns({formats:Zy,defaultWidth:"full"})};var Xy={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Jg=(t,e,r,o)=>Xy[t];function Cn(t){return(e,r)=>{let o=r?.context?String(r.context):"standalone",n;if(o==="formatting"&&t.formattingValues){let a=t.defaultFormattingWidth||t.defaultWidth,l=r?.width?String(r.width):a;n=t.formattingValues[l]||t.formattingValues[a]}else{let a=t.defaultWidth,l=r?.width?String(r.width):t.defaultWidth;n=t.values[l]||t.values[a]}let i=t.argumentCallback?t.argumentCallback(e):e;return n[i]}}var Qy={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Jy={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},ew={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},tw={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},rw={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},ow={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},nw=(t,e)=>{let r=Number(t),o=r%100;if(o>20||o<10)switch(o%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},eh={ordinalNumber:nw,era:Cn({values:Qy,defaultWidth:"wide"}),quarter:Cn({values:Jy,defaultWidth:"wide",argumentCallback:t=>t-1}),month:Cn({values:ew,defaultWidth:"wide"}),day:Cn({values:tw,defaultWidth:"wide"}),dayPeriod:Cn({values:rw,defaultWidth:"wide",formattingValues:ow,defaultFormattingWidth:"wide"})};function Tn(t){return(e,r={})=>{let o=r.width,n=o&&t.matchPatterns[o]||t.matchPatterns[t.defaultMatchWidth],i=e.match(n);if(!i)return null;let a=i[0],l=o&&t.parsePatterns[o]||t.parsePatterns[t.defaultParseWidth],s=Array.isArray(l)?aw(l,m=>m.test(a)):iw(l,m=>m.test(a)),c;c=t.valueCallback?t.valueCallback(s):s,c=r.valueCallback?r.valueCallback(c):c;let f=e.slice(a.length);return{value:c,rest:f}}}function iw(t,e){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&e(t[r]))return r}function aw(t,e){for(let r=0;r{let o=e.match(t.matchPattern);if(!o)return null;let n=o[0],i=e.match(t.parsePattern);if(!i)return null;let a=t.valueCallback?t.valueCallback(i[0]):i[0];a=r.valueCallback?r.valueCallback(a):a;let l=e.slice(n.length);return{value:a,rest:l}}}var sw=/^(\d+)(th|st|nd|rd)?/i,lw=/\d+/i,uw={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},cw={any:[/^b/i,/^(a|c)/i]},dw={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},mw={any:[/1/i,/2/i,/3/i,/4/i]},fw={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},pw={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},gw={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},hw={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},vw={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},bw={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rh={ordinalNumber:th({matchPattern:sw,parsePattern:lw,valueCallback:t=>parseInt(t,10)}),era:Tn({matchPatterns:uw,defaultMatchWidth:"wide",parsePatterns:cw,defaultParseWidth:"any"}),quarter:Tn({matchPatterns:dw,defaultMatchWidth:"wide",parsePatterns:mw,defaultParseWidth:"any",valueCallback:t=>t+1}),month:Tn({matchPatterns:fw,defaultMatchWidth:"wide",parsePatterns:pw,defaultParseWidth:"any"}),day:Tn({matchPatterns:gw,defaultMatchWidth:"wide",parsePatterns:hw,defaultParseWidth:"any"}),dayPeriod:Tn({matchPatterns:vw,defaultMatchWidth:"any",parsePatterns:bw,defaultParseWidth:"any"})};var ud={code:"en-US",formatDistance:Xg,formatLong:Qg,formatRelative:Jg,localize:eh,match:rh,options:{weekStartsOn:0,firstWeekContainsDate:1}};function oh(t,e){let r=pe(t,e?.in);return qg(r,Ds(r))+1}function nh(t,e){let r=pe(t,e?.in),o=+Ho(r)-+Ug(r);return Math.round(o/Os)+1}function Ms(t,e){let r=pe(t,e?.in),o=r.getFullYear(),n=bo(),i=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,a=Ue(e?.in||t,0);a.setFullYear(o+1,0,i),a.setHours(0,0,0,0);let l=Mr(a,e),s=Ue(e?.in||t,0);s.setFullYear(o,0,i),s.setHours(0,0,0,0);let c=Mr(s,e);return+r>=+l?o+1:+r>=+c?o:o-1}function ih(t,e){let r=bo(),o=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,n=Ms(t,e),i=Ue(e?.in||t,0);return i.setFullYear(n,0,o),i.setHours(0,0,0,0),Mr(i,e)}function ah(t,e){let r=pe(t,e?.in),o=+Mr(r,e)-+ih(r,e);return Math.round(o/Os)+1}function le(t,e){let r=t<0?"-":"",o=Math.abs(t).toString().padStart(e,"0");return r+o}var Lr={y(t,e){let r=t.getFullYear(),o=r>0?r:1-r;return le(e==="yy"?o%100:o,e.length)},M(t,e){let r=t.getMonth();return e==="M"?String(r+1):le(r+1,2)},d(t,e){return le(t.getDate(),e.length)},a(t,e){let r=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return r==="am"?"a.m.":"p.m."}},h(t,e){return le(t.getHours()%12||12,e.length)},H(t,e){return le(t.getHours(),e.length)},m(t,e){return le(t.getMinutes(),e.length)},s(t,e){return le(t.getSeconds(),e.length)},S(t,e){let r=e.length,o=t.getMilliseconds(),n=Math.trunc(o*Math.pow(10,r-3));return le(n,e.length)}};var En={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},cd={G:function(t,e,r){let o=t.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return r.era(o,{width:"abbreviated"});case"GGGGG":return r.era(o,{width:"narrow"});default:return r.era(o,{width:"wide"})}},y:function(t,e,r){if(e==="yo"){let o=t.getFullYear(),n=o>0?o:1-o;return r.ordinalNumber(n,{unit:"year"})}return Lr.y(t,e)},Y:function(t,e,r,o){let n=Ms(t,o),i=n>0?n:1-n;if(e==="YY"){let a=i%100;return le(a,2)}return e==="Yo"?r.ordinalNumber(i,{unit:"year"}):le(i,e.length)},R:function(t,e){let r=ks(t);return le(r,e.length)},u:function(t,e){let r=t.getFullYear();return le(r,e.length)},Q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"Q":return String(o);case"QQ":return le(o,2);case"Qo":return r.ordinalNumber(o,{unit:"quarter"});case"QQQ":return r.quarter(o,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(o,{width:"narrow",context:"formatting"});default:return r.quarter(o,{width:"wide",context:"formatting"})}},q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"q":return String(o);case"qq":return le(o,2);case"qo":return r.ordinalNumber(o,{unit:"quarter"});case"qqq":return r.quarter(o,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(o,{width:"narrow",context:"standalone"});default:return r.quarter(o,{width:"wide",context:"standalone"})}},M:function(t,e,r){let o=t.getMonth();switch(e){case"M":case"MM":return Lr.M(t,e);case"Mo":return r.ordinalNumber(o+1,{unit:"month"});case"MMM":return r.month(o,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(o,{width:"narrow",context:"formatting"});default:return r.month(o,{width:"wide",context:"formatting"})}},L:function(t,e,r){let o=t.getMonth();switch(e){case"L":return String(o+1);case"LL":return le(o+1,2);case"Lo":return r.ordinalNumber(o+1,{unit:"month"});case"LLL":return r.month(o,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(o,{width:"narrow",context:"standalone"});default:return r.month(o,{width:"wide",context:"standalone"})}},w:function(t,e,r,o){let n=ah(t,o);return e==="wo"?r.ordinalNumber(n,{unit:"week"}):le(n,e.length)},I:function(t,e,r){let o=nh(t);return e==="Io"?r.ordinalNumber(o,{unit:"week"}):le(o,e.length)},d:function(t,e,r){return e==="do"?r.ordinalNumber(t.getDate(),{unit:"date"}):Lr.d(t,e)},D:function(t,e,r){let o=oh(t);return e==="Do"?r.ordinalNumber(o,{unit:"dayOfYear"}):le(o,e.length)},E:function(t,e,r){let o=t.getDay();switch(e){case"E":case"EE":case"EEE":return r.day(o,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(o,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},e:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return le(i,2);case"eo":return r.ordinalNumber(i,{unit:"day"});case"eee":return r.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},c:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return le(i,e.length);case"co":return r.ordinalNumber(i,{unit:"day"});case"ccc":return r.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(n,{width:"narrow",context:"standalone"});case"cccccc":return r.day(n,{width:"short",context:"standalone"});default:return r.day(n,{width:"wide",context:"standalone"})}},i:function(t,e,r){let o=t.getDay(),n=o===0?7:o;switch(e){case"i":return String(n);case"ii":return le(n,e.length);case"io":return r.ordinalNumber(n,{unit:"day"});case"iii":return r.day(o,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(o,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},a:function(t,e,r){let n=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(t,e,r){let o=t.getHours(),n;switch(o===12?n=En.noon:o===0?n=En.midnight:n=o/12>=1?"pm":"am",e){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(t,e,r){let o=t.getHours(),n;switch(o>=17?n=En.evening:o>=12?n=En.afternoon:o>=4?n=En.morning:n=En.night,e){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(t,e,r){if(e==="ho"){let o=t.getHours()%12;return o===0&&(o=12),r.ordinalNumber(o,{unit:"hour"})}return Lr.h(t,e)},H:function(t,e,r){return e==="Ho"?r.ordinalNumber(t.getHours(),{unit:"hour"}):Lr.H(t,e)},K:function(t,e,r){let o=t.getHours()%12;return e==="Ko"?r.ordinalNumber(o,{unit:"hour"}):le(o,e.length)},k:function(t,e,r){let o=t.getHours();return o===0&&(o=24),e==="ko"?r.ordinalNumber(o,{unit:"hour"}):le(o,e.length)},m:function(t,e,r){return e==="mo"?r.ordinalNumber(t.getMinutes(),{unit:"minute"}):Lr.m(t,e)},s:function(t,e,r){return e==="so"?r.ordinalNumber(t.getSeconds(),{unit:"second"}):Lr.s(t,e)},S:function(t,e){return Lr.S(t,e)},X:function(t,e,r){let o=t.getTimezoneOffset();if(o===0)return"Z";switch(e){case"X":return lh(o);case"XXXX":case"XX":return zo(o);default:return zo(o,":")}},x:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"x":return lh(o);case"xxxx":case"xx":return zo(o);default:return zo(o,":")}},O:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+sh(o,":");default:return"GMT"+zo(o,":")}},z:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+sh(o,":");default:return"GMT"+zo(o,":")}},t:function(t,e,r){let o=Math.trunc(+t/1e3);return le(o,e.length)},T:function(t,e,r){return le(+t,e.length)}};function sh(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=Math.trunc(o/60),i=o%60;return i===0?r+String(n):r+String(n)+e+le(i,2)}function lh(t,e){return t%60===0?(t>0?"-":"+")+le(Math.abs(t)/60,2):zo(t,e)}function zo(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=le(Math.trunc(o/60),2),i=le(o%60,2);return r+n+e+i}var uh=(t,e)=>{switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}},ch=(t,e)=>{switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}},_w=(t,e)=>{let r=t.match(/(P+)(p+)?/)||[],o=r[1],n=r[2];if(!n)return uh(t,e);let i;switch(o){case"P":i=e.dateTime({width:"short"});break;case"PP":i=e.dateTime({width:"medium"});break;case"PPP":i=e.dateTime({width:"long"});break;default:i=e.dateTime({width:"full"});break}return i.replace("{{date}}",uh(o,e)).replace("{{time}}",ch(n,e))},dh={p:ch,P:_w};var xw=/^D+$/,yw=/^Y+$/,ww=["D","DD","YY","YYYY"];function mh(t){return xw.test(t)}function fh(t){return yw.test(t)}function ph(t,e,r){let o=Sw(t,e,r);if(console.warn(o),ww.includes(t))throw new RangeError(o)}function Sw(t,e,r){let o=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${e}\`) for formatting ${o} to the input \`${r}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var Cw=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Tw=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Ew=/^'([^]*?)'?$/,Pw=/''/g,Aw=/[a-zA-Z]/;function dd(t,e,r){let o=bo(),n=r?.locale??o.locale??ud,i=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??o.firstWeekContainsDate??o.locale?.options?.firstWeekContainsDate??1,a=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??o.weekStartsOn??o.locale?.options?.weekStartsOn??0,l=pe(t,r?.in);if(!Sn(l))throw new RangeError("Invalid time value");let s=e.match(Tw).map(f=>{let m=f[0];if(m==="p"||m==="P"){let d=dh[m];return d(f,n.formatLong)}return f}).join("").match(Cw).map(f=>{if(f==="''")return{isToken:!1,value:"'"};let m=f[0];if(m==="'")return{isToken:!1,value:Iw(f)};if(cd[m])return{isToken:!0,value:f};if(m.match(Aw))throw new RangeError("Format string contains an unescaped latin alphabet character `"+m+"`");return{isToken:!1,value:f}});n.localize.preprocessor&&(s=n.localize.preprocessor(l,s));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:n};return s.map(f=>{if(!f.isToken)return f.value;let m=f.value;(!r?.useAdditionalWeekYearTokens&&fh(m)||!r?.useAdditionalDayOfYearTokens&&mh(m))&&ph(m,e,String(t));let d=cd[m[0]];return d(l,m,n.localize,c)}).join("")}function Iw(t){let e=t.match(Ew);return e?e[1].replace(Pw,"'"):t}function Wo(t,e,r){return Rs(t,-e,r)}function Ls(t,e,r){return Vs(t,-e,r)}function gh(t,e,r){return Yg(t,-e,r)}function Fs(t,e,r){return $g(t,-e,r)}var H=u(W(),1),ke=u(j(),1),wt=u(Go(),1);var md=u(V(),1),Be={Name:(0,md.jsx)("span",{className:"dataviews-filters__summary-filter-text-name"}),Value:(0,md.jsx)("span",{className:"dataviews-filters__summary-filter-text-value"})};function vh(t,e){switch(e){case"days":return Wo(new Date,t);case"weeks":return gh(new Date,t);case"months":return Ls(new Date,t);case"years":return Fs(new Date,t);default:return new Date}}var bh={label:(0,H.__)("Is none of"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is none of: %2$s"),t.name,e.map(r=>r.label).join(", ")),Be),filter:((t,e,r)=>{if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?!r.some(n=>o.includes(n)):typeof o=="string"?!r.includes(o):!1}),selection:"multi"},Bs=[{name:Ee,label:(0,H.__)("Includes"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s includes: %2$s"),t.name,e.map(r=>r.label).join(", ")),Be),filter(t,e,r){if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?r.some(n=>o.includes(n)):typeof o=="string"?r.includes(o):!1},selection:"multi"},{name:Pe,...bh},{name:lt,label:(0,H.__)("Includes all"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s includes all: %2$s"),t.name,e.map(r=>r.label).join(", ")),Be),filter(t,e,r){return r?.length?r.every(o=>e.getValue({item:t})?.includes(o)):!0},selection:"multi"},{name:$e,...bh},{name:vt,label:(0,H.__)("Between (inc)"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s between (inc): %2$s and %3$s"),t.name,e[0].label[0],e[0].label[1]),Be),filter(t,e,r){if(!Array.isArray(r)||r.length!==2||r[0]===void 0||r[1]===void 0)return!0;let o=e.getValue({item:t});return typeof o=="number"||o instanceof Date||typeof o=="string"?o>=r[0]&&o<=r[1]:!1},selection:"custom"},{name:bt,label:(0,H.__)("In the past"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is in the past: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Be),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=vh(r.value,r.unit),n=(0,wt.getDate)(e.getValue({item:t}));return n>=o&&n<=new Date},selection:"custom"},{name:At,label:(0,H.__)("Over"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is over: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Be),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=vh(r.value,r.unit);return(0,wt.getDate)(e.getValue({item:t}))(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is: %2$s"),t.name,e[0].label),Be),filter(t,e,r){return r===e.getValue({item:t})||r===void 0},selection:"single"},{name:Ie,label:(0,H.__)("Is not"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is not: %2$s"),t.name,e[0].label),Be),filter(t,e,r){return r!==e.getValue({item:t})},selection:"single"},{name:Kr,label:(0,H.__)("Less than"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is less than: %2$s"),t.name,e[0].label),Be),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is greater than: %2$s"),t.name,e[0].label),Be),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>r},selection:"single"},{name:Xr,label:(0,H.__)("Less than or equal"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is less than or equal to: %2$s"),t.name,e[0].label),Be),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})<=r},selection:"single"},{name:Qr,label:(0,H.__)("Greater than or equal"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is greater than or equal to: %2$s"),t.name,e[0].label),Be),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>=r},selection:"single"},{name:Jr,label:(0,H.__)("Before"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is before: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=(0,wt.getDate)(r);return(0,wt.getDate)(e.getValue({item:t}))(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is after: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=(0,wt.getDate)(r);return(0,wt.getDate)(e.getValue({item:t}))>o},selection:"single"},{name:to,label:(0,H.__)("Before (inc)"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is on or before: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=(0,wt.getDate)(r);return(0,wt.getDate)(e.getValue({item:t}))<=o},selection:"single"},{name:ro,label:(0,H.__)("After (inc)"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is on or after: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=(0,wt.getDate)(r);return(0,wt.getDate)(e.getValue({item:t}))>=o},selection:"single"},{name:nr,label:(0,H.__)("Contains"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s contains: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:ir,label:(0,H.__)("Doesn't contain"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s doesn't contain: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&!o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:ar,label:(0,H.__)("Starts with"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s starts with: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().startsWith(String(r).toLowerCase())},selection:"single"},{name:oo,label:(0,H.__)("On"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=(0,wt.getDate)(r),n=(0,wt.getDate)(e.getValue({item:t}));return o.getTime()===n.getTime()},selection:"single"},{name:no,label:(0,H.__)("Not on"),filterText:(t,e)=>(0,ke.createInterpolateElement)((0,H.sprintf)((0,H.__)("%1$s is not: %2$s"),t.name,e[0].label),Be),filter(t,e,r){if(r===void 0)return!0;let o=(0,wt.getDate)(r),n=(0,wt.getDate)(e.getValue({item:t}));return o.getTime()!==n.getTime()},selection:"single"}],qo=t=>Bs.find(e=>e.name===t),_h=()=>Bs.map(t=>t.name),xh=t=>Bs.filter(e=>e.selection==="single").some(e=>e.name===t),yh=t=>Bs.some(e=>e.name===t);var ot=u(V(),1),Ow="Enter",Rw=" ",Vw=({activeElements:t,filterInView:e,filter:r})=>{if(t===void 0||t.length===0)return r.name;let o=qo(e?.operator);return o!==void 0?o.filterText(r,t):(0,Fr.sprintf)((0,Fr.__)("Unknown status for %1$s"),r.name)};function kw({filter:t,view:e,onChangeView:r}){let o=t.operators?.map(a=>({value:a,label:qo(a)?.label||a})),n=e.filters?.find(a=>a.field===t.field),i=n?.operator||t.operators[0];return o.length>1&&(0,ot.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",className:"dataviews-filters__summary-operators-container",align:"center",children:[(0,ot.jsx)(Xt.FlexItem,{className:"dataviews-filters__summary-operators-filter-name",children:t.name}),(0,ot.jsx)(Xt.SelectControl,{className:"dataviews-filters__summary-operators-filter-select",label:(0,Fr.__)("Conditions"),value:i,options:o,onChange:a=>{let l=a,s=n?.operator,c=n?[...(e.filters??[]).map(f=>{if(f.field===t.field){let m=qo(s)?.selection,d=qo(l)?.selection,p=m!==d||[m,d].includes("custom");return{...f,value:p?void 0:f.value,operator:l}}return f})]:[...e.filters??[],{field:t.field,operator:l,value:void 0}];r({...e,page:1,filters:c})},size:"small",variant:"minimal",hideLabelFromVision:!0})]})}function wh({addFilterRef:t,openedFilter:e,fields:r,...o}){let n=(0,js.useRef)(null),{filter:i,view:a,onChangeView:l}=o,s=a.filters?.find(v=>v.field===i.field),c=[],f=(0,js.useMemo)(()=>{let v=r.find(b=>b.id===i.field);return v&&{...v,getValue:({item:b})=>b[v.id]}},[r,i.field]),{elements:m}=Qe({elements:i.elements,getElements:i.getElements});if(m.length>0)c=m.filter(v=>i.singleSelection?v.value===s?.value:s?.value?.includes(v.value));else if(Array.isArray(s?.value)){let v=s.value.map(b=>f?.getValueFormatted({item:{[f.id]:b},field:f})||String(b));c=[{value:s.value,label:v}]}else if(typeof s?.value=="object")c=[{value:s.value,label:s.value}];else if(s?.value!==void 0){let v=f!==void 0?f.getValueFormatted({item:{[f.id]:s.value},field:f}):String(s.value);c=[{value:s.value,label:v}]}let d=i.isPrimary,p=s?.isLocked,g=!p&&s?.value!==void 0,w=!p&&(!d||g);return(0,ot.jsx)(Xt.Dropdown,{defaultOpen:e===i.field,contentClassName:"dataviews-filters__summary-popover",popoverProps:{placement:"bottom-start",role:"dialog"},onClose:()=>{n.current?.focus()},renderToggle:({isOpen:v,onToggle:b})=>(0,ot.jsxs)("div",{className:"dataviews-filters__summary-chip-container",children:[(0,ot.jsx)(Xt.Tooltip,{text:(0,Fr.sprintf)((0,Fr.__)("Filter by: %1$s"),i.name.toLowerCase()),placement:"top",children:(0,ot.jsx)("div",{className:z("dataviews-filters__summary-chip",{"has-reset":w,"has-values":g,"is-not-clickable":p}),role:"button",tabIndex:p?-1:0,onClick:()=>{p||b()},onKeyDown:S=>{!p&&[Ow,Rw].includes(S.key)&&(b(),S.preventDefault())},"aria-disabled":p,"aria-pressed":v,"aria-expanded":v,ref:n,children:(0,ot.jsx)(Vw,{activeElements:c,filterInView:s,filter:i})})}),w&&(0,ot.jsx)(Xt.Tooltip,{text:d?(0,Fr.__)("Reset"):(0,Fr.__)("Remove"),placement:"top",children:(0,ot.jsx)("button",{className:z("dataviews-filters__summary-chip-remove",{"has-values":g}),onClick:()=>{l({...a,page:1,filters:a.filters?.filter(S=>S.field!==i.field)}),d?n.current?.focus():t.current?.focus()},children:(0,ot.jsx)(Xt.Icon,{icon:Zn})})})]}),renderContent:()=>(0,ot.jsxs)(F,{direction:"column",justify:"flex-start",children:[(0,ot.jsx)(kw,{...o}),o.filter.hasElements?(0,ot.jsx)(Ng,{...o,filter:{...o.filter,elements:m}}):(0,ot.jsx)(Hg,{...o,fields:r})]})})}var Hs=u(G(),1),Sh=u(W(),1),Ch=u(j(),1);var Br=u(V(),1),{Menu:Di}=Z(Hs.privateApis);function fd({filters:t,view:e,onChangeView:r,setOpenedFilter:o,triggerProps:n}){let i=t.filter(a=>!a.isVisible);return(0,Br.jsxs)(Di,{children:[(0,Br.jsx)(Di.TriggerButton,{...n}),(0,Br.jsx)(Di.Popover,{children:i.map(a=>(0,Br.jsx)(Di.Item,{onClick:()=>{o(a.field),r({...e,page:1,filters:[...e.filters||[],{field:a.field,value:void 0,operator:a.operators[0]}]})},children:(0,Br.jsx)(Di.ItemLabel,{children:a.name})},a.field))})]})}function Dw({filters:t,view:e,onChangeView:r,setOpenedFilter:o},n){if(!t.length||t.every(({isPrimary:a})=>a))return null;let i=t.filter(a=>!a.isVisible);return(0,Br.jsx)(fd,{triggerProps:{render:(0,Br.jsx)(Hs.Button,{accessibleWhenDisabled:!0,size:"compact",className:"dataviews-filters-button",variant:"tertiary",disabled:!i.length,ref:n}),children:(0,Sh.__)("Add filter")},filters:t,view:e,onChangeView:r,setOpenedFilter:o})}var Th=(0,Ch.forwardRef)(Dw);var Eh=u(G(),1),Ph=u(W(),1),Ah=u(V(),1);function Ih({filters:t,view:e,onChangeView:r}){let o=i=>t.some(a=>a.field===i&&a.isPrimary),n=!e.search&&!e.filters?.some(i=>!i.isLocked&&(i.value!==void 0||!o(i.field)));return(0,Ah.jsx)(Eh.Button,{disabled:n,accessibleWhenDisabled:!0,size:"compact",variant:"tertiary",className:"dataviews-filters__reset-button",onClick:()=>{r({...e,page:1,search:"",filters:e.filters?.filter(i=>!!i.isLocked)||[]})},children:(0,Ph.__)("Reset")})}var Oh=u(j(),1);function Nw(t,e){return(0,Oh.useMemo)(()=>{let r=[];return t.forEach(o=>{if(o.filterBy===!1||!o.hasElements&&!o.Edit)return;let n=o.filterBy.operators,i=!!o.filterBy?.isPrimary,a=e.filters?.some(l=>l.field===o.id&&!!l.isLocked)??!1;r.push({field:o.id,name:o.label,elements:o.elements,getElements:o.getElements,hasElements:o.hasElements,singleSelection:n.some(l=>xh(l)),operators:n,isVisible:a||i||!!e.filters?.some(l=>l.field===o.id&&yh(l.operator)),isPrimary:i,isLocked:a})}),r.sort((o,n)=>o.isLocked&&!n.isLocked?-1:!o.isLocked&&n.isLocked?1:o.isPrimary&&!n.isPrimary?-1:!o.isPrimary&&n.isPrimary?1:o.name.localeCompare(n.name)),r},[t,e])}var Ni=Nw;var Mi=u(V(),1);function Mw({className:t}){let{fields:e,view:r,onChangeView:o,openedFilter:n,setOpenedFilter:i}=(0,Pn.useContext)(U),a=(0,Pn.useRef)(null),l=Ni(e,r),s=(0,Mi.jsx)(Th,{filters:l,view:r,onChangeView:o,ref:a,setOpenedFilter:i},"add-filter"),c=l.filter(m=>m.isVisible);if(c.length===0)return null;let f=[...c.map(m=>(0,Mi.jsx)(wh,{filter:m,view:r,fields:e,onChangeView:o,addFilterRef:a,openedFilter:n},m.field)),s];return f.push((0,Mi.jsx)(Ih,{filters:l,view:r,onChangeView:o},"reset-filters")),(0,Mi.jsx)(F,{direction:"row",justify:"flex-start",gap:"sm",style:{width:"fit-content"},wrap:"wrap",className:t,children:f})}var Li=(0,Pn.memo)(Mw);var _o=u(j(),1),Rh=u(G(),1);var zs=u(W(),1);var hr=u(V(),1);function Lw(){let{filters:t,view:e,onChangeView:r,setOpenedFilter:o,isShowingFilter:n,setIsShowingFilter:i}=(0,_o.useContext)(U),a=(0,_o.useRef)(null),l=(0,_o.useCallback)(p=>{r(p),i(!0)},[r,i]);if(t.length===0)return null;let s=t.some(p=>p.isVisible),c={label:(0,zs.__)("Add filter"),"aria-expanded":!1,isPressed:!1},f={label:(0,zs._x)("Filter","verb"),"aria-expanded":n,isPressed:n,onClick:()=>{n||o(null),i(!n)}},m=t.some(p=>p.isPrimary||p.isLocked),d=(0,hr.jsx)(Rh.Button,{ref:a,className:"dataviews-filters__visibility-toggle",size:"compact",icon:Qn,disabled:m,accessibleWhenDisabled:!0,...s?f:c});return(0,hr.jsx)("div",{className:"dataviews-filters__container-visibility-toggle",children:s?(0,hr.jsx)(Fw,{buttonRef:a,filtersCount:e.filters?.length,children:d}):(0,hr.jsx)(fd,{filters:t,view:e,onChangeView:l,setOpenedFilter:o,triggerProps:{render:d}})})}function Fw({buttonRef:t,filtersCount:e,children:r}){return(0,_o.useEffect)(()=>()=>{t.current?.focus()},[t]),(0,hr.jsxs)(hr.Fragment,{children:[r,!!e&&(0,hr.jsx)("span",{className:"dataviews-filters-toggle__count",children:e})]})}var Ws=Lw;var Vh=u(j(),1);var kh=u(V(),1);function Bw(t){let{isShowingFilter:e}=(0,Vh.useContext)(U);return e?(0,kh.jsx)(Li,{...t}):null}var Gs=Bw;var Dh=u(j(),1),Nh=u(W(),1);var pd=u(V(),1);function gd({className:t}){let{actions:e=[],data:r,fields:o,getItemId:n,getItemLevel:i,hasInitiallyLoaded:a,isLoading:l,view:s,onChangeView:c,selection:f,onChangeSelection:m,setOpenedFilter:d,onClickItem:p,isItemClickable:g,renderItemLink:w,defaultLayouts:v,empty:b=(0,pd.jsx)("p",{children:(0,Nh.__)("No results")})}=(0,Dh.useContext)(U);if(!a)return null;let S=co.find(P=>P.type===s.type&&v[P.type])?.component;return(0,pd.jsx)(S,{className:t,actions:e,data:r,fields:o,getItemId:n,getItemLevel:i,isLoading:l,onChangeView:c,onChangeSelection:m,selection:f,setOpenedFilter:d,onClickItem:p,renderItemLink:w,isItemClickable:g,view:s,empty:b})}var Mh=u(j(),1);var An=u(V(),1),jw=[];function hd(){let{view:t,paginationInfo:{totalItems:e=0,totalPages:r},data:o,actions:n=jw,isLoading:i,hasInitiallyLoaded:a,hasInfiniteScrollHandler:l}=(0,Mh.useContext)(U),s=!!i&&a&&!l&&!!o?.length,c=lr(!!s),f=nn(n,o)&&[Jo,Ga].includes(t.type);return!s&&(!e||!r||r<=1&&!f)?null:(!!e||s)&&(0,An.jsx)("div",{className:"dataviews-footer",inert:s?"true":void 0,children:(0,An.jsxs)(F,{direction:"row",justify:"end",align:"center",className:z("dataviews-footer__content",{"is-refreshing":c}),gap:"sm",children:[f&&(0,An.jsx)($a,{}),(0,An.jsx)(If,{})]})})}var Lh=u(W(),1),Qt=u(j(),1),Fh=u(G(),1),Bh=u(ht(),1);var jh=u(V(),1),Hw=(0,Qt.memo)(function({label:e}){let{view:r,onChangeView:o}=(0,Qt.useContext)(U),[n,i,a]=(0,Bh.useDebouncedInput)(r.search);(0,Qt.useEffect)(()=>{i(r.search??"")},[r.search,i]);let l=(0,Qt.useRef)(o),s=(0,Qt.useRef)(r);(0,Qt.useEffect)(()=>{l.current=o,s.current=r},[o,r]),(0,Qt.useEffect)(()=>{a!==s.current?.search&&l.current({...s.current,page:1,search:a})},[a]);let c=e||(0,Lh.__)("Search");return(0,jh.jsx)(Fh.SearchControl,{className:"dataviews-search",onChange:i,value:n,label:c,placeholder:c,size:"compact"})}),vd=Hw;var je=u(G(),1),jr=u(W(),1),Jt=u(j(),1);var _d=u(zh(),1),Yh=u(ht(),1);var Wh=u(G(),1),bd=u(W(),1),Gh=u(j(),1);var qh=u(V(),1);function Uh(){let t=(0,Gh.useContext)(U),{view:e,onChangeView:r}=t,o=e.infiniteScrollEnabled??!1;return t.hasInfiniteScrollHandler?(0,qh.jsx)(Wh.ToggleControl,{label:(0,bd.__)("Enable infinite scroll"),help:(0,bd.__)("Automatically load more content as you scroll, instead of showing pagination links."),checked:o,onChange:n=>{r({...e,infiniteScrollEnabled:n})}}):null}var oe=u(V(),1),{Menu:Fi}=Z(je.privateApis),zw={className:"dataviews-config__popover",placement:"bottom-end",offset:9};function xd(){let{view:t,onChangeView:e,defaultLayouts:r}=(0,Jt.useContext)(U),o=Object.keys(r);if(o.length<=1)return null;let n=co.find(i=>t.type===i.type);return(0,oe.jsxs)(Fi,{children:[(0,oe.jsx)(Fi.TriggerButton,{render:(0,oe.jsx)(je.Button,{size:"compact",icon:n?.icon,label:(0,jr.__)("Layout")})}),(0,oe.jsx)(Fi.Popover,{children:o.map(i=>{let a=co.find(l=>l.type===i);return a?(0,oe.jsx)(Fi.RadioItem,{value:i,name:"view-actions-available-view",checked:i===t.type,hideOnClick:!0,onChange:l=>{switch(l.target.value){case"list":case"grid":case"table":case"pickerGrid":case"pickerTable":case"activity":let s={...t};return"layout"in s&&delete s.layout,e({...s,type:l.target.value,...r[l.target.value]})}(0,_d.default)("Invalid dataview")},children:(0,oe.jsx)(Fi.ItemLabel,{children:a.label})},i):null})})]})}function Ww(){let{view:t,fields:e,onChangeView:r}=(0,Jt.useContext)(U),o=(0,Jt.useMemo)(()=>e.filter(i=>i.enableSorting!==!1).map(i=>({label:i.label,value:i.id})),[e]);return(0,oe.jsx)(je.SelectControl,{__next40pxDefaultSize:!0,label:(0,jr.__)("Sort by"),value:t.sort?.field,options:o,onChange:n=>{r({...t,sort:{direction:t?.sort?.direction||"desc",field:n},showLevels:!1})}})}function Gw(){let{view:t,fields:e,onChangeView:r}=(0,Jt.useContext)(U);if(e.filter(i=>i.enableSorting!==!1).length===0)return null;let n=t.sort?.direction;return!n&&t.sort?.field&&(n="desc"),(0,oe.jsx)(je.__experimentalToggleGroupControl,{className:"dataviews-view-config__sort-direction",__next40pxDefaultSize:!0,isBlock:!0,label:(0,jr.__)("Order"),value:n,onChange:i=>{if(i==="asc"||i==="desc"){r({...t,sort:{direction:i,field:t.sort?.field||e.find(a=>a.enableSorting!==!1)?.id||""},showLevels:!1});return}(0,_d.default)("Invalid direction")},children:Ha.map(i=>(0,oe.jsx)(je.__experimentalToggleGroupControlOptionIcon,{value:i,icon:Lm[i],label:Wa[i]},i))})}function qw(){let{view:t,config:e,onChangeView:r}=(0,Jt.useContext)(U),{infiniteScrollEnabled:o}=t;return!e||!e.perPageSizes||e.perPageSizes.length<2||e.perPageSizes.length>6||o?null:(0,oe.jsx)(je.__experimentalToggleGroupControl,{__next40pxDefaultSize:!0,isBlock:!0,label:(0,jr.__)("Items per page"),value:t.perPage||10,disabled:!t?.sort?.field,onChange:n=>{let i=typeof n=="number"||n===void 0?n:parseInt(n,10);r({...t,perPage:i,page:1})},children:e.perPageSizes.map(n=>(0,oe.jsx)(je.__experimentalToggleGroupControlOption,{value:n,label:n.toString()},n))})}function Uw(){let{onReset:t}=(0,Jt.useContext)(U);return t===void 0?null:(0,oe.jsx)(je.Button,{variant:"tertiary",size:"compact",disabled:t===!1,accessibleWhenDisabled:!0,className:"dataviews-view-config__reset-button",onClick:()=>{typeof t=="function"&&t()},children:(0,jr.__)("Reset view")})}function yd(){let{view:t,onReset:e}=(0,Jt.useContext)(U),r=(0,Yh.useInstanceId)($h,"dataviews-view-config-dropdown"),o=co.find(i=>i.type===t.type),n=typeof e=="function";return(0,oe.jsx)(je.Dropdown,{expandOnMobile:!0,popoverProps:{...zw,id:r},renderToggle:({onToggle:i,isOpen:a})=>(0,oe.jsxs)("div",{className:"dataviews-view-config__toggle-wrapper",children:[(0,oe.jsx)(je.Button,{size:"compact",icon:cu,label:(0,jr._x)("View options","View is used as a noun"),onClick:i,"aria-expanded":a?"true":"false","aria-controls":r}),n&&(0,oe.jsx)("span",{className:"dataviews-view-config__modified-indicator"})]}),renderContent:()=>(0,oe.jsx)(je.__experimentalDropdownContentWrapper,{paddingSize:"medium",className:"dataviews-config__popover-content-wrapper",children:(0,oe.jsxs)(F,{direction:"column",className:"dataviews-view-config",gap:"xl",children:[(0,oe.jsxs)(F,{direction:"row",justify:"space-between",align:"center",className:"dataviews-view-config__header",children:[(0,oe.jsx)(je.__experimentalHeading,{level:2,className:"dataviews-settings-section__title",children:(0,jr.__)("Appearance")}),(0,oe.jsx)(Uw,{})]}),(0,oe.jsxs)(F,{direction:"column",gap:"lg",children:[(0,oe.jsxs)(F,{direction:"row",gap:"sm",className:"dataviews-view-config__sort-controls",children:[(0,oe.jsx)(Ww,{}),(0,oe.jsx)(Gw,{})]}),!!o?.viewConfigOptions&&(0,oe.jsx)(o.viewConfigOptions,{}),(0,oe.jsx)(Uh,{}),(0,oe.jsx)(qw,{}),(0,oe.jsx)(Xa,{})]})]})})})}function $h(){return(0,oe.jsxs)(oe.Fragment,{children:[(0,oe.jsx)(xd,{}),(0,oe.jsx)(yd,{})]})}var Yw=(0,Jt.memo)($h),Kh=Yw;var Zh=u(G(),1),Xh=u(j(),1);function ve(t,e){let r;return t?.required&&e?.required?r=e?.required?.message?e.required:void 0:t?.pattern&&e?.pattern?r=e.pattern:t?.min&&e?.min?r=e.min:t?.max&&e?.max?r=e.max:t?.minLength&&e?.minLength?r=e.minLength:t?.maxLength&&e?.maxLength?r=e.maxLength:t?.elements&&e?.elements?r=e.elements:e?.custom&&(r=e.custom),r}var Qh=u(V(),1),{ValidatedCheckboxControl:$w}=Z(Zh.privateApis);function Jh({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,label:s,description:c,isValid:f}=t,m=(0,Xh.useCallback)(()=>{e(l({item:r,value:!a({item:r})}))},[r,a,e,l]);return(0,Qh.jsx)($w,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:ve(f,i),hidden:o,label:s,help:c,checked:a({item:r}),onChange:m})}var qs=u(G(),1),ev=u(j(),1);var wd=u(V(),1),{ValidatedComboboxControl:Kw}=Z(qs.privateApis);function Us({data:t,field:e,onChange:r,hideLabelFromVision:o,validity:n}){let{label:i,description:a,placeholder:l,getValue:s,setValue:c,isValid:f}=e,m=s({item:t})??"",d=(0,ev.useCallback)(w=>r(c({item:t,value:w??""})),[t,r,c]),{elements:p,isLoading:g}=Qe({elements:e.elements,getElements:e.getElements});return g?(0,wd.jsx)(qs.Spinner,{}):(0,wd.jsx)(Kw,{required:!!e.isValid?.required,customValidity:ve(f,n),label:i,value:m,help:a,placeholder:l,options:p,onChange:d,hideLabelFromVision:o,allowReset:!0,expandOnFocus:!0})}var Zs=u(G(),1),$t=u(j(),1),Ks=u(W(),1),jt=u(Go(),1);var On=u(G(),1),Sd=u(j(),1),vr=u(W(),1);var In=u(V(),1),Zw={[bt]:[{value:"days",label:(0,vr.__)("Days")},{value:"weeks",label:(0,vr.__)("Weeks")},{value:"months",label:(0,vr.__)("Months")},{value:"years",label:(0,vr.__)("Years")}],[At]:[{value:"days",label:(0,vr.__)("Days ago")},{value:"weeks",label:(0,vr.__)("Weeks ago")},{value:"months",label:(0,vr.__)("Months ago")},{value:"years",label:(0,vr.__)("Years ago")}]};function Ys({className:t,data:e,field:r,onChange:o,hideLabelFromVision:n,operator:i}){let a=Zw[i===bt?"inThePast":"over"],{id:l,label:s,getValue:c,setValue:f}=r,m=c({item:e}),{value:d="",unit:p=a[0].value}=m&&typeof m=="object"?m:{},g=(0,Sd.useCallback)(v=>o(f({item:e,value:{value:Number(v),unit:p}})),[o,f,e,p]),w=(0,Sd.useCallback)(v=>o(f({item:e,value:{value:d,unit:v}})),[o,f,e,d]);return(0,In.jsx)(On.BaseControl,{id:l,className:z(t,"dataviews-controls__relative-date"),label:s,hideLabelFromVision:n,children:(0,In.jsxs)(F,{direction:"row",gap:"sm",children:[(0,In.jsx)(On.__experimentalNumberControl,{__next40pxDefaultSize:!0,className:"dataviews-controls__relative-date-number",spinControls:"none",min:1,step:1,value:d,onChange:g}),(0,In.jsx)(On.SelectControl,{className:"dataviews-controls__relative-date-unit",__next40pxDefaultSize:!0,label:(0,vr.__)("Unit"),value:p,options:a,onChange:w,hideLabelFromVision:!0})]})})}var tv=u(Go(),1);function $s(t){if(!t)return null;let e=(0,tv.getDate)(t);return e&&Sn(e)?e:null}var xo=u(V(),1),{DateCalendar:Xw,ValidatedInputControl:Qw}=Z(Zs.privateApis),Jw=t=>t?(0,jt.dateI18n)("Y-m-d\\TH:i",(0,jt.getDate)(t)):"";function e1({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,description:s,setValue:c,getValue:f,isValid:m}=e,d=f({item:t}),p=typeof d=="string"?d:void 0,[g,w]=(0,$t.useState)(()=>$s(p)||new Date),v=(0,$t.useRef)(null),b=(0,$t.useRef)(void 0),S=(0,$t.useRef)(null),P=(0,$t.useCallback)(N=>r(c({item:t,value:N})),[t,r,c]);(0,$t.useEffect)(()=>()=>{b.current&&clearTimeout(b.current)},[]);let R=(0,$t.useCallback)(N=>{let _;if(N){let y=(0,jt.dateI18n)("Y-m-d",N),E;p?E=(0,jt.dateI18n)("H:i",(0,jt.getDate)(p)):E=(0,jt.dateI18n)("H:i",N),_=(0,jt.getDate)(`${y}T${E}`).toISOString(),P(_),b.current&&clearTimeout(b.current)}else P(void 0);S.current=v.current&&v.current.ownerDocument.activeElement,b.current=setTimeout(()=>{v.current&&(v.current.focus(),v.current.blur(),P(_),S.current&&S.current instanceof HTMLElement&&S.current.focus())},0)},[P,p]),I=(0,$t.useCallback)(N=>{if(N){let _=(0,jt.getDate)(N);P(_.toISOString());let y=$s(_.toISOString());y&&w(y)}else P(void 0)},[P]),{format:k}=e,D=k.weekStartsOn??(0,jt.getSettings)().l10n.startOfWeek,{timezone:{string:T}}=(0,jt.getSettings)(),O=l;return m?.required&&!n&&!o?O=`${l} (${(0,Ks.__)("Required")})`:!m?.required&&n&&!o&&(O=`${l} (${(0,Ks.__)("Optional")})`),(0,xo.jsx)(Zs.BaseControl,{id:a,label:O,help:s,hideLabelFromVision:o,children:(0,xo.jsxs)(F,{direction:"column",gap:"lg",children:[(0,xo.jsx)(Xw,{style:{width:"100%"},selected:p&&$s(p)||void 0,onSelect:R,month:g,onMonthChange:w,timeZone:T||void 0,weekStartsOn:D}),(0,xo.jsx)(Qw,{ref:v,__next40pxDefaultSize:!0,required:!!m?.required,customValidity:ve(m,i),type:"datetime-local",label:(0,Ks.__)("Date time"),hideLabelFromVision:!0,value:Jw(p),onChange:I})]})})}function rv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===bt||i===At?(0,xo.jsx)(Ys,{className:"dataviews-controls__datetime",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):(0,xo.jsx)(e1,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var mt=u(G(),1),fe=u(j(),1),Ye=u(W(),1),dt=u(Go(),1);var be=u(V(),1),{DateCalendar:t1,DateRangeCalendar:r1}=Z(mt.privateApis),o1=[{id:"today",label:(0,Ye.__)("Today"),getValue:()=>(0,dt.getDate)(null)},{id:"yesterday",label:(0,Ye.__)("Yesterday"),getValue:()=>{let t=(0,dt.getDate)(null);return Wo(t,1)}},{id:"past-week",label:(0,Ye.__)("Past week"),getValue:()=>{let t=(0,dt.getDate)(null);return Wo(t,7)}},{id:"past-month",label:(0,Ye.__)("Past month"),getValue:()=>{let t=(0,dt.getDate)(null);return Ls(t,1)}}],n1=[{id:"last-7-days",label:(0,Ye.__)("Last 7 days"),getValue:()=>{let t=(0,dt.getDate)(null);return[Wo(t,7),t]}},{id:"last-30-days",label:(0,Ye.__)("Last 30 days"),getValue:()=>{let t=(0,dt.getDate)(null);return[Wo(t,30),t]}},{id:"month-to-date",label:(0,Ye.__)("Month to date"),getValue:()=>{let t=(0,dt.getDate)(null);return[Zg(t),t]}},{id:"last-year",label:(0,Ye.__)("Last year"),getValue:()=>{let t=(0,dt.getDate)(null);return[Fs(t,1),t]}},{id:"year-to-date",label:(0,Ye.__)("Year to date"),getValue:()=>{let t=(0,dt.getDate)(null);return[Ds(t),t]}}],Rn=t=>{if(!t)return null;let e=(0,dt.getDate)(t);return e&&Sn(e)?e:null},Cd=t=>t?typeof t=="string"?t:dd(t,"yyyy-MM-dd"):"";function ov({field:t,validity:e,inputRefs:r,isTouched:o,setIsTouched:n,children:i}){let{isValid:a}=t,[l,s]=(0,fe.useState)(void 0),c=(0,fe.useCallback)(()=>{let m=Array.isArray(r)?r:[r];for(let d of m){let p=d.current;if(p&&!p.validity.valid){s({type:"invalid",message:p.validationMessage});return}}s(void 0)},[r]);return(0,fe.useEffect)(()=>{let m=Array.isArray(r)?r:[r],d=e?ve(a,e):void 0;for(let p of m){let g=p.current;g&&g.setCustomValidity(d?.type==="invalid"&&d.message?d.message:"")}},[r,a,e]),(0,fe.useEffect)(()=>{let m=Array.isArray(r)?r:[r],d=p=>{p.preventDefault(),n(!0)};for(let p of m)p.current?.addEventListener("invalid",d);return()=>{for(let p of m)p.current?.removeEventListener("invalid",d)}},[r,n]),(0,fe.useEffect)(()=>{if(!o)return;let m=e?ve(a,e):void 0;m?s(m):c()},[o,a,e,c]),(0,be.jsxs)("div",{onBlur:m=>{o||(!m.relatedTarget||!m.currentTarget.contains(m.relatedTarget))&&n(!0)},children:[i,(0,be.jsx)("div",{"aria-live":"polite",children:l&&(0,be.jsxs)("p",{className:z("components-validated-control__indicator",l.type==="invalid"?"is-invalid":void 0),children:[(0,be.jsx)(mt.Icon,{className:"components-validated-control__indicator-icon",icon:gu,size:16,fill:"currentColor"}),l.message]})})]})}function i1({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,setValue:s,getValue:c,isValid:f,format:m}=e,[d,p]=(0,fe.useState)(null),g=m.weekStartsOn??(0,dt.getSettings)().l10n.startOfWeek,w=c({item:t}),v=typeof w=="string"?w:void 0,[b,S]=(0,fe.useState)(()=>Rn(v)||new Date),[P,R]=(0,fe.useState)(!1),I=(0,fe.useRef)(null),k=(0,fe.useCallback)(y=>r(s({item:t,value:y})),[t,r,s]),D=(0,fe.useCallback)(y=>{let E=y?dd(y,"yyyy-MM-dd"):void 0;k(E),p(null),R(!0)},[k]),T=(0,fe.useCallback)(y=>{let E=y.getValue(),x=Cd(E);S(E),k(x),p(y.id),R(!0)},[k]),O=(0,fe.useCallback)(y=>{if(k(y),y){let E=Rn(y);E&&S(E)}p(null),R(!0)},[k]),{timezone:{string:N}}=(0,dt.getSettings)(),_=l;return f?.required&&!n?_=`${l} (${(0,Ye.__)("Required")})`:!f?.required&&n&&(_=`${l} (${(0,Ye.__)("Optional")})`),(0,be.jsx)(ov,{field:e,validity:i,inputRefs:I,isTouched:P,setIsTouched:R,children:(0,be.jsx)(mt.BaseControl,{id:a,className:"dataviews-controls__date",label:_,hideLabelFromVision:o,children:(0,be.jsxs)(F,{direction:"column",gap:"lg",children:[(0,be.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[o1.map(y=>{let E=d===y.id;return(0,be.jsx)(mt.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:E,size:"small",onClick:()=>T(y),children:y.label},y.id)}),(0,be.jsx)(mt.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!d,size:"small",disabled:!!d,accessibleWhenDisabled:!1,children:(0,Ye.__)("Custom")})]}),(0,be.jsx)(mt.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:I,type:"date",label:(0,Ye.__)("Date"),hideLabelFromVision:!0,value:v,onChange:O,required:!!e.isValid?.required}),(0,be.jsx)(t1,{style:{width:"100%"},selected:v&&Rn(v)||void 0,onSelect:D,month:b,onMonthChange:S,timeZone:N||void 0,weekStartsOn:g})]})})})}function a1({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,getValue:s,setValue:c,format:f}=e,m,d=s({item:t});Array.isArray(d)&&d.length===2&&d.every(x=>typeof x=="string")&&(m=d);let p=f.weekStartsOn??(0,dt.getSettings)().l10n.startOfWeek,g=(0,fe.useCallback)(x=>{r(c({item:t,value:x}))},[t,r,c]),[w,v]=(0,fe.useState)(null),b=(0,fe.useMemo)(()=>{if(!m)return{from:void 0,to:void 0};let[x,A]=m;return{from:Rn(x)||void 0,to:Rn(A)||void 0}},[m]),[S,P]=(0,fe.useState)(()=>b.from||new Date),[R,I]=(0,fe.useState)(!1),k=(0,fe.useRef)(null),D=(0,fe.useRef)(null),T=(0,fe.useCallback)((x,A)=>{x&&A?g([Cd(x),Cd(A)]):!x&&!A&&g(void 0)},[g]),O=(0,fe.useCallback)(x=>{T(x?.from,x?.to),v(null),I(!0)},[T]),N=(0,fe.useCallback)(x=>{let[A,h]=x.getValue();P(A),T(A,h),v(x.id),I(!0)},[T]),_=(0,fe.useCallback)((x,A)=>{let[h,C]=m||[void 0,void 0];if(T(x==="from"?A:h,x==="to"?A:C),A){let ne=Rn(A);ne&&P(ne)}v(null),I(!0)},[m,T]),{timezone:y}=(0,dt.getSettings)(),E=l;return e.isValid?.required&&!n?E=`${l} (${(0,Ye.__)("Required")})`:!e.isValid?.required&&n&&(E=`${l} (${(0,Ye.__)("Optional")})`),(0,be.jsx)(ov,{field:e,validity:i,inputRefs:[k,D],isTouched:R,setIsTouched:I,children:(0,be.jsx)(mt.BaseControl,{id:a,className:"dataviews-controls__date",label:E,hideLabelFromVision:o,children:(0,be.jsxs)(F,{direction:"column",gap:"lg",children:[(0,be.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[n1.map(x=>{let A=w===x.id;return(0,be.jsx)(mt.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:A,size:"small",onClick:()=>N(x),children:x.label},x.id)}),(0,be.jsx)(mt.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!w,size:"small",accessibleWhenDisabled:!1,disabled:!!w,children:(0,Ye.__)("Custom")})]}),(0,be.jsxs)(F,{direction:"row",gap:"sm",justify:"space-between",className:"dataviews-controls__date-range-inputs",children:[(0,be.jsx)(mt.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:k,type:"date",label:(0,Ye.__)("From"),hideLabelFromVision:!0,value:m?.[0],onChange:x=>_("from",x),required:!!e.isValid?.required}),(0,be.jsx)(mt.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:D,type:"date",label:(0,Ye.__)("To"),hideLabelFromVision:!0,value:m?.[1],onChange:x=>_("to",x),required:!!e.isValid?.required})]}),(0,be.jsx)(r1,{style:{width:"100%"},selected:b,onSelect:O,month:S,onMonthChange:P,timeZone:y.string||void 0,weekStartsOn:p})]})})})}function nv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===bt||i===At?(0,be.jsx)(Ys,{className:"dataviews-controls__date",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):i===vt?(0,be.jsx)(a1,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a}):(0,be.jsx)(i1,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var Xs=u(G(),1),iv=u(j(),1);var Td=u(V(),1),{ValidatedSelectControl:s1}=Z(Xs.privateApis);function Qs({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{type:a,label:l,description:s,getValue:c,setValue:f,isValid:m}=e,d=a==="array",p=c({item:t})??(d?[]:""),g=(0,iv.useCallback)(b=>r(f({item:t,value:b})),[t,r,f]),{elements:w,isLoading:v}=Qe({elements:e.elements,getElements:e.getElements});return v?(0,Td.jsx)(Xs.Spinner,{}):(0,Td.jsx)(s1,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(m,i),label:l,value:p,help:s,options:w,onChange:g,__next40pxDefaultSize:!0,hideLabelFromVision:o,multiple:d})}var Ed=u(V(),1),l1=10;function av(t){let{field:e}=t,{elements:r}=Qe({elements:e.elements,getElements:e.getElements});return r.length>=l1?(0,Ed.jsx)(Us,{...t}):(0,Ed.jsx)(Qs,{...t})}var el=u(G(),1);var sv=u(G(),1),lv=u(j(),1);var uv=u(V(),1),{ValidatedInputControl:u1}=Z(sv.privateApis);function br({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,type:i,prefix:a,suffix:l,validity:s}){let{label:c,placeholder:f,description:m,getValue:d,setValue:p,isValid:g}=e,w=d({item:t}),v=(0,lv.useCallback)(b=>r(p({item:t,value:b})),[t,p,r]);return(0,uv.jsx)(u1,{required:!!g.required,markWhenOptional:n,customValidity:ve(g,s),label:c,placeholder:f,value:w??"",help:m,onChange:v,hideLabelFromVision:o,type:i,prefix:a,suffix:l,pattern:g.pattern?g.pattern.constraint:void 0,minLength:g.minLength?g.minLength.constraint:void 0,maxLength:g.maxLength?g.maxLength.constraint:void 0,__next40pxDefaultSize:!0})}var Js=u(V(),1);function cv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,Js.jsx)(br,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"email",prefix:(0,Js.jsx)(el.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,Js.jsx)(el.Icon,{icon:fu})})})}var rl=u(G(),1);var tl=u(V(),1);function dv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,tl.jsx)(br,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"tel",prefix:(0,tl.jsx)(rl.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,tl.jsx)(rl.Icon,{icon:Ou})})})}var nl=u(G(),1);var ol=u(V(),1);function mv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,ol.jsx)(br,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"url",prefix:(0,ol.jsx)(nl.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,ol.jsx)(nl.Icon,{icon:Tu})})})}var Hr=u(G(),1),Bi=u(j(),1),il=u(W(),1);var yo=u(V(),1),{ValidatedNumberControl:c1}=Z(Hr.privateApis);function fv(t){if(t===""||t===void 0)return"";let e=Number(t);return Number.isFinite(e)?e:""}function d1({value:t,onChange:e,hideLabelFromVision:r,step:o}){let[n="",i=""]=t,a=(0,Bi.useCallback)(s=>e([fv(s),i]),[e,i]),l=(0,Bi.useCallback)(s=>e([n,fv(s)]),[e,n]);return(0,yo.jsx)(Hr.BaseControl,{help:(0,il.__)("The max. value must be greater than the min. value."),children:(0,yo.jsxs)(Hr.Flex,{direction:"row",gap:4,children:[(0,yo.jsx)(Hr.__experimentalNumberControl,{label:(0,il.__)("Min."),value:n,max:i?Number(i)-o:void 0,onChange:a,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o}),(0,yo.jsx)(Hr.__experimentalNumberControl,{label:(0,il.__)("Max."),value:i,min:n?Number(n)+o:void 0,onChange:l,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o})]})})}function al({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){let l=e.format?.decimals??0,s=Math.pow(10,Math.abs(l)*-1),{label:c,description:f,getValue:m,setValue:d,isValid:p}=e,g=m({item:t})??"",w=(0,Bi.useCallback)(b=>{r(d({item:t,value:["",void 0].includes(b)?void 0:Number(b)}))},[t,r,d]),v=(0,Bi.useCallback)(b=>{r(d({item:t,value:b}))},[t,r,d]);if(i===vt){let b=["",""];return Array.isArray(g)&&g.length===2&&g.every(S=>typeof S=="number"||S==="")&&(b=g),(0,yo.jsx)(d1,{value:b,onChange:v,hideLabelFromVision:o,step:s})}return(0,yo.jsx)(c1,{required:!!p.required,markWhenOptional:n,customValidity:ve(p,a),label:c,help:f,value:g,onChange:w,__next40pxDefaultSize:!0,hideLabelFromVision:o,step:s,min:p.min?p.min.constraint:void 0,max:p.max?p.max.constraint:void 0})}var pv=u(V(),1);function gv(t){return(0,pv.jsx)(al,{...t})}var hv=u(V(),1);function vv(t){return(0,hv.jsx)(al,{...t})}var sl=u(G(),1),bv=u(j(),1);var Pd=u(V(),1),{ValidatedRadioControl:m1}=Z(sl.privateApis);function _v({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:c,isValid:f}=e,{elements:m,isLoading:d}=Qe({elements:e.elements,getElements:e.getElements}),p=s({item:t}),g=(0,bv.useCallback)(w=>r(c({item:t,value:w})),[t,r,c]);return d?(0,Pd.jsx)(sl.Spinner,{}):(0,Pd.jsx)(m1,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(f,i),label:a,help:l,onChange:g,options:m,selected:p,hideLabelFromVision:o})}var Ad=u(j(),1);var xv=u(V(),1);function yv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{prefix:l,suffix:s}=i||{};return(0,xv.jsx)(br,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a,prefix:l?(0,Ad.createElement)(l):void 0,suffix:s?(0,Ad.createElement)(s):void 0})}var wv=u(G(),1),Sv=u(j(),1);var Cv=u(V(),1),{ValidatedToggleControl:f1}=Z(wv.privateApis);function Tv({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:c,isValid:f}=t,m=(0,Sv.useCallback)(()=>{e(c({item:r,value:!s({item:r})}))},[e,c,r,s]);return(0,Cv.jsx)(f1,{required:!!f.required,markWhenOptional:n,customValidity:ve(f,i),hidden:o,label:a,help:l,checked:s({item:r}),onChange:m})}var Ev=u(G(),1),Pv=u(j(),1);var Av=u(V(),1),{ValidatedTextareaControl:p1}=Z(Ev.privateApis);function Iv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{rows:l=4}=i||{},{label:s,placeholder:c,description:f,setValue:m,isValid:d}=e,p=e.getValue({item:t}),g=(0,Pv.useCallback)(w=>r(m({item:t,value:w})),[t,r,m]);return(0,Av.jsx)(p1,{required:!!d.required,markWhenOptional:n,customValidity:ve(d,a),label:s,placeholder:c,value:p??"",help:f,onChange:g,rows:l,minLength:d.minLength?d.minLength.constraint:void 0,maxLength:d.maxLength?d.maxLength.constraint:void 0,__next40pxDefaultSize:!0,hideLabelFromVision:o})}var Vn=u(G(),1),Ov=u(j(),1);var ll=u(V(),1),{ValidatedToggleGroupControl:g1}=Z(Vn.privateApis);function Rv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,isValid:s}=e,c=a({item:t}),f=(0,Ov.useCallback)(g=>r(l({item:t,value:g})),[t,r,l]),{elements:m,isLoading:d}=Qe({elements:e.elements,getElements:e.getElements});if(d)return(0,ll.jsx)(Vn.Spinner,{});if(m.length===0)return null;let p=m.find(g=>g.value===c);return(0,ll.jsx)(g1,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(s,i),__next40pxDefaultSize:!0,isBlock:!0,label:e.label,help:p?.description||e.description,onChange:f,value:c,hideLabelFromVision:o,children:m.map(g=>(0,ll.jsx)(Vn.__experimentalToggleGroupControlOption,{label:g.label,value:g.value},g.value))})}var ul=u(G(),1),cl=u(j(),1);var ji=u(V(),1),{ValidatedFormTokenField:h1}=Z(ul.privateApis);function Vv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,getValue:s,setValue:c,isValid:f}=e,m=s({item:t}),{elements:d,isLoading:p}=Qe({elements:e.elements,getElements:e.getElements}),g=(0,cl.useMemo)(()=>Array.isArray(m)?m.map(v=>d?.find(S=>S.value===v)||{value:v,label:v}):[],[m,d]),w=(0,cl.useCallback)(v=>{let b=v.map(S=>typeof S=="object"&&"value"in S?S.value:S);r(c({item:t,value:b}))},[r,c,t]);return p?(0,ji.jsx)(ul.Spinner,{}):(0,ji.jsx)(h1,{required:!!f?.required,markWhenOptional:n,customValidity:ve(f,i),label:o?void 0:a,value:g,onChange:w,placeholder:l,suggestions:d?.map(v=>v.value),__experimentalValidateInput:v=>e.isValid?.elements&&d?d.some(b=>b.value===v||b.label===v):!0,__experimentalExpandOnFocus:d&&d.length>0,__experimentalShowHowTo:!e.isValid?.elements,displayTransform:v=>typeof v=="object"&&"label"in v?v.label:typeof v=="string"&&d&&d.find(S=>S.value===v)?.label||v,__experimentalRenderItem:({item:v})=>{if(typeof v=="string"&&d){let b=d.find(S=>S.value===v);return(0,ji.jsx)("span",{children:b?.label||v})}return(0,ji.jsx)("span",{children:v})}})}var v1={grad:.9,turn:360,rad:360/(2*Math.PI)},zr=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},Je=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},Kt=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},Hv=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},kv=function(t){return{r:Kt(t.r,0,255),g:Kt(t.g,0,255),b:Kt(t.b,0,255),a:Kt(t.a)}},Id=function(t){return{r:Je(t.r),g:Je(t.g),b:Je(t.b),a:Je(t.a,3)}},b1=/^#([0-9a-f]{3,8})$/i,dl=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},zv=function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=Math.max(e,r,o),a=i-Math.min(e,r,o),l=a?i===e?(r-o)/a:i===r?2+(o-e)/a:4+(e-r)/a:0;return{h:60*(l<0?l+6:l),s:i?a/i*100:0,v:i/255*100,a:n}},Wv=function(t){var e=t.h,r=t.s,o=t.v,n=t.a;e=e/360*6,r/=100,o/=100;var i=Math.floor(e),a=o*(1-r),l=o*(1-(e-i)*r),s=o*(1-(1-e+i)*r),c=i%6;return{r:255*[o,l,a,a,s,o][c],g:255*[s,o,o,l,a,a][c],b:255*[a,a,s,o,o,l][c],a:n}},Dv=function(t){return{h:Hv(t.h),s:Kt(t.s,0,100),l:Kt(t.l,0,100),a:Kt(t.a)}},Nv=function(t){return{h:Je(t.h),s:Je(t.s),l:Je(t.l),a:Je(t.a,3)}},Mv=function(t){return Wv((r=(e=t).s,{h:e.h,s:(r*=((o=e.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:e.a}));var e,r,o},Hi=function(t){return{h:(e=zv(t)).h,s:(n=(200-(r=e.s))*(o=e.v)/100)>0&&n<200?r*o/100/(n<=100?n:200-n)*100:0,l:n/2,a:e.a};var e,r,o,n},_1=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,x1=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,y1=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,w1=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Lv={string:[[function(t){var e=b1.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?Je(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?Je(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=y1.exec(t)||w1.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:kv({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=_1.exec(t)||x1.exec(t);if(!e)return null;var r,o,n=Dv({h:(r=e[1],o=e[2],o===void 0&&(o="deg"),Number(r)*(v1[o]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return Mv(n)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=n===void 0?1:n;return zr(e)&&zr(r)&&zr(o)?kv({r:Number(e),g:Number(r),b:Number(o),a:Number(i)}):null},"rgb"],[function(t){var e=t.h,r=t.s,o=t.l,n=t.a,i=n===void 0?1:n;if(!zr(e)||!zr(r)||!zr(o))return null;var a=Dv({h:Number(e),s:Number(r),l:Number(o),a:Number(i)});return Mv(a)},"hsl"],[function(t){var e=t.h,r=t.s,o=t.v,n=t.a,i=n===void 0?1:n;if(!zr(e)||!zr(r)||!zr(o))return null;var a=(function(l){return{h:Hv(l.h),s:Kt(l.s,0,100),v:Kt(l.v,0,100),a:Kt(l.a)}})({h:Number(e),s:Number(r),v:Number(o),a:Number(i)});return Wv(a)},"hsv"]]},Fv=function(t,e){for(var r=0;r=.5},t.prototype.toHex=function(){return e=Id(this.rgba),r=e.r,o=e.g,n=e.b,a=(i=e.a)<1?dl(Je(255*i)):"","#"+dl(r)+dl(o)+dl(n)+a;var e,r,o,n,i,a},t.prototype.toRgb=function(){return Id(this.rgba)},t.prototype.toRgbString=function(){return e=Id(this.rgba),r=e.r,o=e.g,n=e.b,(i=e.a)<1?"rgba("+r+", "+o+", "+n+", "+i+")":"rgb("+r+", "+o+", "+n+")";var e,r,o,n,i},t.prototype.toHsl=function(){return Nv(Hi(this.rgba))},t.prototype.toHslString=function(){return e=Nv(Hi(this.rgba)),r=e.h,o=e.s,n=e.l,(i=e.a)<1?"hsla("+r+", "+o+"%, "+n+"%, "+i+")":"hsl("+r+", "+o+"%, "+n+"%)";var e,r,o,n,i},t.prototype.toHsv=function(){return e=zv(this.rgba),{h:Je(e.h),s:Je(e.s),v:Je(e.v),a:Je(e.a,3)};var e},t.prototype.invert=function(){return ft({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),ft(Od(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),ft(Od(this.rgba,-e))},t.prototype.grayscale=function(){return ft(Od(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),ft(Bv(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),ft(Bv(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?ft({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):Je(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=Hi(this.rgba);return typeof e=="number"?ft({h:e,s:r.s,l:r.l,a:r.a}):Je(r.h)},t.prototype.isEqual=function(e){return this.toHex()===ft(e).toHex()},t})(),ft=function(t){return t instanceof jv?t:new jv(t)};var kt=u(G(),1),Vd=u(j(),1),Gv=u(W(),1);var Wr=u(V(),1),{ValidatedInputControl:C1}=Z(kt.privateApis),T1=({color:t,onColorChange:e})=>{let r=t&&ft(t).isValid()?t:"#ffffff";return(0,Wr.jsx)(kt.Dropdown,{className:"dataviews-controls__color-picker-dropdown",popoverProps:{resize:!1},renderToggle:({onToggle:o})=>(0,Wr.jsx)(kt.Button,{onClick:o,"aria-label":(0,Gv.__)("Open color picker"),size:"small",icon:()=>(0,Wr.jsx)(kt.ColorIndicator,{colorValue:r})}),renderContent:()=>(0,Wr.jsx)(kt.__experimentalDropdownContentWrapper,{paddingSize:"none",children:(0,Wr.jsx)(kt.ColorPicker,{color:r,onChange:e,enableAlpha:!0})})})};function qv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,description:s,setValue:c,isValid:f}=e,m=e.getValue({item:t})||"",d=(0,Vd.useCallback)(g=>{r(c({item:t,value:g}))},[t,r,c]),p=(0,Vd.useCallback)(g=>{r(c({item:t,value:g||""}))},[t,r,c]);return(0,Wr.jsx)(C1,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(f,i),label:a,placeholder:l,value:m,help:s,onChange:p,hideLabelFromVision:o,type:"text",prefix:(0,Wr.jsx)(kt.__experimentalInputControlPrefixWrapper,{variant:"control",children:(0,Wr.jsx)(T1,{color:m,onColorChange:d})})})}var fl=u(G(),1),pl=u(j(),1),kd=u(W(),1);var ml=u(V(),1);function Uv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let[a,l]=(0,pl.useState)(!1),s=(0,pl.useCallback)(()=>{l(c=>!c)},[]);return(0,ml.jsx)(br,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:a?"text":"password",suffix:(0,ml.jsx)(fl.__experimentalInputControlSuffixWrapper,{variant:"control",children:(0,ml.jsx)(fl.Button,{icon:a?si:$u,onClick:s,size:"small",label:a?(0,kd.__)("Hide password"):(0,kd.__)("Show password")})})})}function gl(t){return Array.isArray(t.elements)&&t.elements.length>0||typeof t.getElements=="function"}var $v=u(V(),1),Yv={adaptiveSelect:av,array:Vv,checkbox:Jh,color:qv,combobox:Us,datetime:rv,date:nv,email:cv,telephone:dv,url:mv,integer:gv,number:vv,password:Uv,radio:_v,select:Qs,text:yv,toggle:Tv,textarea:Iv,toggleGroup:Rv};function E1(t){return t&&typeof t=="object"&&typeof t.control=="string"}function P1(t){let{control:e,...r}=t,o=hl(e);return o===null?null:function(i){return(0,$v.jsx)(o,{...i,config:r})}}function Kv(t,e){return typeof t.Edit=="function"?t.Edit:typeof t.Edit=="string"?hl(t.Edit):E1(t.Edit)?P1(t.Edit):gl(t)&&t.type!=="array"?hl("adaptiveSelect"):e===null?null:hl(e)}function hl(t){return Object.keys(Yv).includes(t)?Yv[t]:null}function A1(t,e,r){if(t.filterBy===!1)return!1;let o=t.filterBy?.operators?.filter(n=>r.includes(n))??e;return o.length===0?!1:{isPrimary:!!t.filterBy?.isPrimary,operators:o}}var Zv=A1;var I1=t=>({item:e})=>{let r=t.split("."),o=e;for(let n of r)o.hasOwnProperty(n)?o=o[n]:o=void 0;return o},Xv=I1;var O1=t=>({value:e})=>{let r=t.split("."),o={},n=o;for(let i of r.slice(0,-1))n[i]={},n=n[i];return n[r.at(-1)]=e,o},Qv=O1;var eb=u(W(),1);function vl({item:t,field:e}){let{elements:r,isLoading:o}=Qe({elements:e.elements,getElements:e.getElements}),n=e.getValue({item:t});return o||r.length===0?n:r?.find(i=>i.value===n)?.label||e.getValue({item:t})}var Jv=u(V(),1);function De({item:t,field:e}){return e.hasElements?(0,Jv.jsx)(vl,{item:t,field:e}):e.getValueFormatted({item:t,field:e})}var _r=(t,e,r)=>r==="asc"?t.localeCompare(e):e.localeCompare(t);function Ne(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)}function xr(t,e){if(typeof e.isValid.minLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length>=e.isValid.minLength.constraint}function yr(t,e){if(typeof e.isValid.maxLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length<=e.isValid.maxLength.constraint}function wr(t,e){if(e.isValid.pattern?.constraint===void 0)return!0;try{let r=new RegExp(e.isValid.pattern.constraint),o=e.getValue({item:t});return[void 0,"",null].includes(o)?!0:r.test(String(o))}catch{return!1}}function Se(t,e){let o=(e.elements??[]).map(i=>i.value);if(o.length===0)return!0;let n=e.getValue({item:t});return[].concat(n).every(i=>o.includes(i))}function R1({item:t,field:e}){return e.getValue({item:t})}var St=R1;var V1=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function k1(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!V1.test(r)?(0,eb.__)("Value must be a valid email address."):null}var tb={type:"email",render:De,Edit:"email",sort:_r,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ae,Ie,nr,ir,ar,Ee,Pe,lt,$e],format:{},getValueFormatted:St,validate:{required:Ne,pattern:wr,minLength:xr,maxLength:yr,elements:Se,custom:k1}};var rb=u(W(),1);var kn=(t,e,r)=>r==="asc"?t-e:e-t;function bl(t,e){if(typeof e.isValid.min?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)>=e.isValid.min.constraint}function _l(t,e){if(typeof e.isValid.max?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)<=e.isValid.max.constraint}var ob={separatorThousand:","};function D1({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="integer"?o=ob:o=e.format;let{separatorThousand:n}=o,i=Math.trunc(r);return n?String(i).replace(/\B(?=(\d{3})+(?!\d))/g,n):String(i)}function N1(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Number.isInteger(r)?(0,rb.__)("Value must be an integer."):null}var nb={type:"integer",render:De,Edit:"integer",sort:kn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ae,Ie,Kr,Zr,Xr,Qr,vt],validOperators:[Ae,Ie,Kr,Zr,Xr,Qr,vt,Ee,Pe,lt,$e],format:ob,getValueFormatted:D1,validate:{required:Ne,min:bl,max:_l,elements:Se,custom:N1}};var ib=u(W(),1);var ab={separatorThousand:",",separatorDecimal:".",decimals:2};function M1({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="number"?o=ab:o=e.format;let{separatorThousand:n,separatorDecimal:i,decimals:a}=o,l=r.toFixed(a),[s,c]=l.split("."),f=n?s.replace(/\B(?=(\d{3})+(?!\d))/g,n):s;return a===0?f:f+i+c}function L1(t){return t===""||t===void 0||t===null}function F1(t,e){let r=e.getValue({item:t});return!L1(r)&&!Number.isFinite(r)?(0,ib.__)("Value must be a number."):null}var sb={type:"number",render:De,Edit:"number",sort:kn,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ae,Ie,Kr,Zr,Xr,Qr,vt],validOperators:[Ae,Ie,Kr,Zr,Xr,Qr,vt,Ee,Pe,lt,$e],format:ab,getValueFormatted:M1,validate:{required:Ne,min:bl,max:_l,elements:Se,custom:F1}};var lb={type:"text",render:De,Edit:"text",sort:_r,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ae,Ie,nr,ir,ar,Ee,Pe,lt,$e],format:{},getValueFormatted:St,validate:{required:Ne,pattern:wr,minLength:xr,maxLength:yr,elements:Se}};var Uo=u(Go(),1);var ub={datetime:(0,Uo.getSettings)().formats.datetime,weekStartsOn:(0,Uo.getSettings)().l10n.startOfWeek};function B1({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="datetime"?o=ub:o=e.format,(0,Uo.dateI18n)(o.datetime,(0,Uo.getDate)(r))}var j1=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},cb={type:"datetime",render:De,Edit:"datetime",sort:j1,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[oo,no,Jr,eo,to,ro,bt,At],validOperators:[oo,no,Jr,eo,to,ro,bt,At],format:ub,getValueFormatted:B1,validate:{required:Ne,elements:Se}};var Yo=u(Go(),1);var db={date:(0,Yo.getSettings)().formats.date,weekStartsOn:(0,Yo.getSettings)().l10n.startOfWeek};function H1({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="date"?o=db:o=e.format,(0,Yo.dateI18n)(o.date,(0,Yo.getDate)(r))}var z1=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},mb={type:"date",render:De,Edit:"date",sort:z1,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[oo,no,Jr,eo,to,ro,bt,At,vt],validOperators:[oo,no,Jr,eo,to,ro,bt,At,vt],format:db,getValueFormatted:H1,validate:{required:Ne,elements:Se}};var xl=u(W(),1);function fb(t,e){return e.getValue({item:t})===!0}function W1({item:t,field:e}){let r=e.getValue({item:t});return r===!0?(0,xl.__)("True"):r===!1?(0,xl.__)("False"):""}function G1(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&![!0,!1].includes(r)?(0,xl.__)("Value must be true, false, or undefined"):null}var q1=(t,e,r)=>{let o=!!t;return o===!!e?0:r==="asc"?o?1:-1:o?-1:1},pb={type:"boolean",render:De,Edit:"checkbox",sort:q1,validate:{required:fb,elements:Se,custom:G1},enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ae,Ie],validOperators:[Ae,Ie],format:{},getValueFormatted:W1};var gb={type:"media",render:()=>null,Edit:null,sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:St,validate:{}};var Dd=u(W(),1);function hb(t,e){let r=e.getValue({item:t});return Array.isArray(r)&&r.length>0&&r.every(o=>![void 0,"",null].includes(o))}function vb({item:t,field:e}){let r=e.getValue({item:t});return(Array.isArray(r)?r:[]).join(", ")}function U1({item:t,field:e}){return vb({item:t,field:e})}function Y1(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Array.isArray(r)?(0,Dd.__)("Value must be an array."):r.every(o=>typeof o=="string")?null:(0,Dd.__)("Every value must be a string.")}var $1=(t,e,r)=>{let o=Array.isArray(t)?t:[],n=Array.isArray(e)?e:[];if(o.length!==n.length)return r==="asc"?o.length-n.length:n.length-o.length;let i=o.join(","),a=n.join(",");return r==="asc"?i.localeCompare(a):a.localeCompare(i)},bb={type:"array",render:U1,Edit:"array",sort:$1,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ee,Pe,lt,$e],format:{},getValueFormatted:vb,validate:{required:hb,elements:Se,custom:Y1}};function K1({item:t,field:e}){return e.getValue({item:t})?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":""}var _b={type:"password",render:De,Edit:"password",sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:K1,validate:{required:Ne,pattern:wr,minLength:xr,maxLength:yr,elements:Se}};var xb={type:"telephone",render:De,Edit:"telephone",sort:_r,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ae,Ie,nr,ir,ar,Ee,Pe,lt,$e],format:{},getValueFormatted:St,validate:{required:Ne,pattern:wr,minLength:xr,maxLength:yr,elements:Se}};var yb=u(W(),1);var Dn=u(V(),1);function Z1({item:t,field:e}){if(e.hasElements)return(0,Dn.jsx)(vl,{item:t,field:e});let r=St({item:t,field:e});return!r||!ft(r).isValid()?r:(0,Dn.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,Dn.jsx)("div",{style:{width:"16px",height:"16px",borderRadius:"50%",backgroundColor:r,border:"1px solid #ddd",flexShrink:0}}),(0,Dn.jsx)("span",{children:r})]})}function X1(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!ft(r).isValid()?(0,yb.__)("Value must be a valid color."):null}var Q1=(t,e,r)=>{let o=ft(t),n=ft(e);if(!o.isValid()&&!n.isValid())return 0;if(!o.isValid())return r==="asc"?1:-1;if(!n.isValid())return r==="asc"?-1:1;let i=o.toHsl(),a=n.toHsl();return i.h!==a.h?r==="asc"?i.h-a.h:a.h-i.h:i.s!==a.s?r==="asc"?i.s-a.s:a.s-i.s:r==="asc"?i.l-a.l:a.l-i.l},wb={type:"color",render:Z1,Edit:"color",sort:Q1,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ae,Ie,Ee,Pe],format:{},getValueFormatted:St,validate:{required:Ne,elements:Se,custom:X1}};var Sb={type:"url",render:De,Edit:"url",sort:_r,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ae,Ie,nr,ir,ar,Ee,Pe,lt,$e],format:{},getValueFormatted:St,validate:{required:Ne,pattern:wr,minLength:xr,maxLength:yr,elements:Se}};var J1=(t,e,r)=>typeof t=="number"&&typeof e=="number"?kn(t,e,r):_r(t,e,r),Cb={render:De,Edit:null,sort:J1,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ae,Ie],validOperators:_h(),format:{},getValueFormatted:St,validate:{required:Ne,elements:Se}};function Tb(t,e){let r;t.isValid?.required===!0&&e.validate.required!==void 0&&(r={constraint:!0,validate:e.validate.required});let o;(t.isValid?.elements===!0||t.isValid?.elements===void 0&&(t.elements||t.getElements))&&e.validate.elements!==void 0&&(o={constraint:!0,validate:e.validate.elements});let n;typeof t.isValid?.min=="number"&&e.validate.min!==void 0&&(n={constraint:t.isValid.min,validate:e.validate.min});let i;typeof t.isValid?.max=="number"&&e.validate.max!==void 0&&(i={constraint:t.isValid.max,validate:e.validate.max});let a;typeof t.isValid?.minLength=="number"&&e.validate.minLength!==void 0&&(a={constraint:t.isValid.minLength,validate:e.validate.minLength});let l;typeof t.isValid?.maxLength=="number"&&e.validate.maxLength!==void 0&&(l={constraint:t.isValid.maxLength,validate:e.validate.maxLength});let s;t.isValid?.pattern!==void 0&&e.validate.pattern!==void 0&&(s={constraint:t.isValid?.pattern,validate:e.validate.pattern});let c=t.isValid?.custom??e.validate.custom;return{required:r,elements:o,min:n,max:i,minLength:a,maxLength:l,pattern:s,custom:c}}function Eb(t){return t.validOperators.reduce((e,r)=>{let o=qo(r);return o?.filter&&(e[r]=o.filter),e},{})}function e2(t,e){return{...e.format,...t.format}}var Pb=e2;function t2(t){let e=[tb,nb,sb,lb,cb,mb,pb,gb,bb,_b,xb,wb,Sb].find(r=>r?.type===t);return e||Cb}function yl(t){return t.map(e=>{let r=t2(e.type),o=e.getValue||Xv(e.id),n=function(i,a,l){let s=o({item:i}),c=o({item:a});return e.sort?e.sort(s,c,l):r.sort(s,c,l)};return{id:e.id,label:e.label||e.id,header:e.header||e.label||e.id,description:e.description,placeholder:e.placeholder,getValue:o,setValue:e.setValue||Qv(e.id),elements:e.elements,getElements:e.getElements,hasElements:gl(e),isVisible:e.isVisible,enableHiding:e.enableHiding??!0,readOnly:e.readOnly??!1,type:r.type,render:e.render??r.render,Edit:Kv(e,r.Edit),sort:n,enableSorting:e.enableSorting??r.enableSorting,enableGlobalSearch:e.enableGlobalSearch??r.enableGlobalSearch,isValid:Tb(e,r),filterBy:Zv(e,r.defaultOperators,r.validOperators),filter:Eb(r),format:Pb(e,r),getValueFormatted:e.getValueFormatted??r.getValueFormatted}})}var $o=u(j(),1);function Ab(t,e,r){let o=(0,$o.useRef)(t),n=(0,$o.useRef)(r),[i,a]=(0,$o.useState)(!e);return(0,$o.useEffect)(()=>{e||(o.current=t,n.current=r,a(!0))},[t,e,r]),{data:e&&o.current?.length?o.current:t,paginationInfo:e&&o.current?.length?n.current:r,hasInitiallyLoaded:i}}var nt=u(V(),1),r2=t=>t.id,o2=()=>!0,n2=[],i2=co.filter(t=>!t.isPicker);function a2({header:t,search:e=!0,searchLabel:r=void 0}){return(0,nt.jsxs)(nt.Fragment,{children:[(0,nt.jsxs)(F,{direction:"row",align:"top",justify:"space-between",className:"dataviews__view-actions",gap:"xs",children:[(0,nt.jsxs)(F,{direction:"row",justify:"start",gap:"sm",className:"dataviews__search",children:[e&&(0,nt.jsx)(vd,{label:r}),(0,nt.jsx)(Ws,{})]}),(0,nt.jsxs)(F,{direction:"row",gap:"xs",style:{flexShrink:0},children:[(0,nt.jsx)(Kh,{}),t]})]}),(0,nt.jsx)(Gs,{className:"dataviews-filters__container"}),(0,nt.jsx)(gd,{}),(0,nt.jsx)(hd,{})]})}function s2({view:t,onChangeView:e,fields:r,search:o=!0,searchLabel:n=void 0,actions:i=n2,data:a,getItemId:l=r2,getItemLevel:s,isLoading:c=!1,paginationInfo:f,defaultLayouts:m,selection:d,onChangeSelection:p,onClickItem:g,renderItemLink:w,isItemClickable:v=o2,header:b,children:S,config:P={perPageSizes:[10,20,50,100]},empty:R,onReset:I}){let{infiniteScrollHandler:k}=f,D=(0,Ct.useRef)(null),[T,O]=(0,Ct.useState)(0),N=(0,wl.useResizeObserver)(J=>{O(J[0].borderBoxSize[0].inlineSize)},{box:"border-box"}),[_,y]=(0,Ct.useState)([]),E=d===void 0||p===void 0,x=E?_:d,[A,h]=(0,Ct.useState)(null);function C(J){let _e=typeof J=="function"?J(x):J;E&&y(_e),p&&p(_e)}let M=(0,Ct.useMemo)(()=>yl(r),[r]),L=(0,Ct.useMemo)(()=>x.filter(J=>a.some(_e=>l(_e)===J)),[x,a,l]),ne=Ni(M,t),Te=(0,Ct.useMemo)(()=>(ne||[]).some(J=>J.isPrimary||J.isLocked),[ne]),[Me,ze]=(0,Ct.useState)(Te);(0,Ct.useEffect)(()=>{Te&&!Me&&ze(!0)},[Te,Me]),(0,Ct.useEffect)(()=>{if(!t.infiniteScrollEnabled||!D.current)return;let J=(0,wl.throttle)(Cr=>{let Tr=Cr.target,Co=Tr.scrollTop,To=Tr.scrollHeight,Zo=Tr.clientHeight;Co+Zo>=To-100&&k?.()},100),_e=D.current;return _e.addEventListener("scroll",J),()=>{_e.removeEventListener("scroll",J),J.cancel()}},[k,t.infiniteScrollEnabled]);let at=(0,Ct.useMemo)(()=>Object.fromEntries(Object.entries(m).filter(([J])=>i2.some(_e=>_e.type===J))),[m]),{data:or,paginationInfo:Sr,hasInitiallyLoaded:Y}=Ab(a,c,f);return at[t.type]?(0,nt.jsx)(U.Provider,{value:{view:t,onChangeView:e,fields:M,actions:i,data:or,isLoading:c,paginationInfo:Sr,selection:L,onChangeSelection:C,openedFilter:A,setOpenedFilter:h,getItemId:l,getItemLevel:s,isItemClickable:v,onClickItem:g,renderItemLink:w,containerWidth:T,containerRef:D,resizeObserverRef:N,defaultLayouts:at,filters:ne,isShowingFilter:Me,setIsShowingFilter:ze,config:P,empty:R,hasInitiallyLoaded:Y,hasInfiniteScrollHandler:!!k,onReset:I},children:(0,nt.jsx)("div",{className:"dataviews-wrapper",ref:D,children:S??(0,nt.jsx)(a2,{header:b,search:o,searchLabel:n})})}):null}var er=s2;er.BulkActionToolbar=$a;er.Filters=Li;er.FiltersToggled=Gs;er.FiltersToggle=Ws;er.Layout=gd;er.LayoutSwitcher=xd;er.Pagination=hc;er.Search=vd;er.ViewConfig=yd;er.Footer=hd;var zi=er;var Vb=u(od(),1),kb=u(Ob(),1);function Rb(t=""){return(0,Vb.default)(t.trim().toLowerCase())}var l2=[];function Wi(t,e,r){if(!t)return{data:l2,paginationInfo:{totalItems:0,totalPages:0}};let o=yl(r),n=[...t];if(e.search){let c=Rb(e.search);n=n.filter(f=>o.filter(m=>m.enableGlobalSearch).some(m=>{let d=m.getValue({item:f});return(Array.isArray(d)?d:[d]).some(g=>Rb(String(g)).includes(c))}))}e.filters&&e.filters?.length>0&&e.filters.forEach(c=>{let f=o.find(m=>m.id===c.field);if(f){c.operator===$e&&(0,kb.default)("The 'isNotAll' filter operator",{since:"7.0",alternative:"'isNone'"});let m=f.filter[c.operator];m&&(n=n.filter(d=>m(d,f,c.value)))}});let i=e.sort?.field?o.find(c=>c.enableSorting!==!1&&c.id===e.sort?.field):null,a=e.groupBy?.field?o.find(c=>c.enableSorting!==!1&&c.id===e.groupBy?.field):null;(i||a)&&n.sort((c,f)=>{if(a){let m=a.sort(c,f,e.groupBy?.direction??"asc");if(m!==0)return m}return i?i.sort(c,f,e.sort?.direction??"desc"):0});let l=n.length,s=1;if(e.page!==void 0&&e.perPage!==void 0){let c=(e.page-1)*e.perPage;l=n?.length||0,s=Math.ceil(l/e.perPage),n=n?.slice(c,c+e.perPage)}return{data:n,paginationInfo:{totalItems:l,totalPages:s}}}var Db=u(j(),1),Nb=u(V(),1),Mb=(0,Db.forwardRef)(({children:t,className:e,ariaLabel:r,as:o="div",...n},i)=>(0,Nb.jsx)(o,{ref:i,className:z("admin-ui-navigable-region",e),"aria-label":r,role:"region",tabIndex:"-1",...n,children:t}));Mb.displayName="NavigableRegion";var Lb=Mb;var wo=u(G(),1);var Fb=u(G(),1),{Fill:Bb,Slot:jb}=(0,Fb.createSlotFill)("SidebarToggle");var Gr=u(V(),1);function Hb({breadcrumbs:t,badges:e,title:r,subTitle:o,actions:n,showSidebarToggle:i=!0}){return(0,Gr.jsxs)(wo.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,Gr.jsxs)(wo.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,Gr.jsxs)(wo.__experimentalHStack,{spacing:2,justify:"left",children:[i&&(0,Gr.jsx)(jb,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),r&&(0,Gr.jsx)(wo.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:r}),t,e]}),(0,Gr.jsx)(wo.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:n})]}),o&&(0,Gr.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var Gi=u(V(),1);function zb({breadcrumbs:t,badges:e,title:r,subTitle:o,children:n,className:i,actions:a,hasPadding:l=!1,showSidebarToggle:s=!0}){let c=z("admin-ui-page",i);return(0,Gi.jsxs)(Lb,{className:c,ariaLabel:r,children:[(r||t||e)&&(0,Gi.jsx)(Hb,{breadcrumbs:t,badges:e,title:r,subTitle:o,actions:a,showSidebarToggle:s}),l?(0,Gi.jsx)("div",{className:"admin-ui-page__content has-padding",children:n}):n]})}zb.SidebarToggleFill=Bb;var qi=zb;var Yd=u(Zt()),kl=u(G()),$d=u(gt()),Ht=u(j()),z0=u(Nd()),Zi=u(W());var qb=u(ec()),{lock:iF,unlock:pt}=(0,qb.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var Md={type:"grid",perPage:20,sort:{field:"title",direction:"asc"},fields:["author","active","slug"],titleField:"title",descriptionField:"description",mediaField:"preview",filters:[]},Ub={...Md,fields:["author"]},Sl={table:{showMedia:!1},grid:{showMedia:!0},list:{showMedia:!1}};function Yb(t){return t==="user"?{sort:{field:"date",direction:"desc"}}:t==="active"?{}:{filters:[{field:"author",operator:"isAny",value:[t]}]}}function $b(t){return t==="all"?{}:{filters:[{field:"author",operator:"isAny",value:[t]}]}}var Kb=u(W());import{Preview as u2}from"@wordpress/lazy-editor";function c2({item:t}){let e=t.description;return React.createElement(u2,{content:t?.content?.raw,blocks:t?.blocks,description:e})}var Cl={label:(0,Kb.__)("Preview"),id:"preview",render:c2,enableSorting:!1};var Tl=u(G()),Ld=u(W()),El=u(j()),Zb=u(Zt()),Xb=u(gt());function d2(t,e){let{author:r,authorText:o}=(0,Xb.useSelect)(n=>{let{getUser:i,getEditedEntityRecord:a}=n(Zb.store),l=a("postType",t,e);return{author:l?.author?i(l.author):null,authorText:l?.author_text}},[t,e]);return(0,El.useMemo)(()=>o?{text:o,icon:"admin-plugins"}:r?{text:r.name,icon:"admin-users",imageUrl:r.avatar_urls?.[48]}:{text:(0,Ld.__)("Unknown"),icon:"admin-users"},[r,o])}function m2({item:t}){let[e,r]=(0,El.useState)(!1),{text:o,icon:n,imageUrl:i}=d2(t.type,t.id);return React.createElement(Tl.__experimentalHStack,{alignment:"left",spacing:0},i&&React.createElement("div",{className:z("routes-template-list-author-field__avatar",{"is-loaded":e})},React.createElement("img",{onLoad:()=>r(!0),alt:"",src:i})),!i&&React.createElement("div",{className:"routes-template-list-author-field__icon"},React.createElement(Tl.Icon,{icon:n})),React.createElement("span",{className:"routes-template-list-author-field__name"},o))}var Pl={label:(0,Ld.__)("Author"),id:"author",getValue:({item:t})=>t.author_text??t.author,render:m2};var Jb=u(W()),e0=u(Ui()),t0=u(Zt());var{useEntityRecordsWithPermissions:f2}=pt(t0.privateApis);function p2(){let{records:t}=f2("root","registeredTemplate");return t?.filter(e=>!e.is_custom).map(e=>({slug:e.slug,title:e.title.rendered,description:e.description}))}var Al={label:(0,Jb.__)("Description"),id:"description",render:function({item:e}){let o=p2()?.find(n=>n.slug===e.slug);return e.description?(0,e0.decodeEntities)(e.description):o?.description},enableSorting:!1,enableGlobalSearch:!0};var Nn=u(W()),r0=u(G());var{Badge:g2}=pt(r0.privateApis),o0={label:(0,Nn.__)("Status"),id:"active",type:"boolean",getValue:({item:t})=>t._isActive,render:function({item:e}){let r=e._isCustom?(0,Nn._x)("Active when used","template"):(0,Nn._x)("Active","template"),o=e._isCustom?"info":"success",n=e._isActive;return React.createElement(g2,{intent:n?o:"default"},n?r:(0,Nn._x)("Inactive","template"))}};var Il=u(W()),n0=u(Zt());var{useEntityRecordsWithPermissions:h2}=pt(n0.privateApis);function v2(){let{records:t}=h2("root","registeredTemplate");return t?.filter(e=>!e.is_custom).map(e=>({slug:e.slug,title:e.title.rendered,description:e.description}))}var i0={label:(0,Il.__)("Template Type"),id:"slug",getValue:({item:t})=>t.slug,render:function({item:e}){return v2()?.find(n=>n.slug===e.slug)?.title||(0,Il._x)("Custom","template type")}};var Fd=u(j()),s0=u(gt()),Yi=u(Zt());var{useEntityRecordsWithPermissions:a0}=pt(Yi.privateApis);function l0(t="active"){let{activeTemplatesOption:e,activeTheme:r,defaultTemplateTypes:o}=(0,s0.useSelect)(f=>{let{getEntityRecord:m,getCurrentTheme:d}=f(Yi.store);return{activeTemplatesOption:m("root","site")?.active_templates,activeTheme:d(),defaultTemplateTypes:f(Yi.store).getCurrentTheme()?.default_template_types}},[]),{records:n,isResolving:i}=a0("postType","wp_template",{per_page:-1,combinedTemplates:!1}),{records:a,isResolving:l}=a0("root","registeredTemplate",{per_page:-1}),s=(0,Fd.useMemo)(()=>{let f=[...a];if(e)for(let m in e){let d=e[m],p=n.find(g=>g.id===d&&g.theme===r.stylesheet);if(p){let g=f.findIndex(({slug:w})=>w===p.slug);g!==-1?f[g]=p:f.push(p)}}return f},[n,a,e,r]);return{records:(0,Fd.useMemo)(()=>{function f(d){return d.is_custom??(!d.meta?.is_wp_suggestion&&!o.some(p=>p.slug===d.slug))}let m;return t==="active"?m=s.filter(d=>!f(d)):t==="user"?m=n:m=a,m.map(d=>({...d,_isActive:s.some(p=>p.id===d.id),_isCustom:f(d)}))},[s,o,n,a,t]),isLoading:i||l,staticRecords:a,userRecords:n,activeTemplates:s}}var Bd=u(W());var u0=u(j()),$i=u(gt()),Ol=u(Zt());function c0(){let t=(0,$i.useSelect)(n=>n(Ol.store).getCurrentTheme()),{getEntityRecord:e}=(0,$i.useSelect)(Ol.store),{editEntityRecord:r,saveEditedEntityRecord:o}=(0,$i.useDispatch)(Ol.store);return(0,u0.useMemo)(()=>({id:"set-active-template",label(n){return n.some(i=>i._isActive)?(0,Bd.__)("Deactivate"):(0,Bd.__)("Activate")},isPrimary:!0,icon:ii,isEligible(n){return!t||n.theme!==t.stylesheet?!1:typeof n.id!="number"?n._isActive===!1:!0},async callback(n){let i=n.some(l=>l._isActive),a={...(await e("root","site"))?.active_templates??{}};for(let l of n)i?delete a[l.slug]:a[l.slug]=l.id;await r("root","site",void 0,{active_templates:a}),await o("root","site")}}),[r,o,e,t])}var it=u(G()),L0=u(Ui()),tr=u(j()),jn=u(gt()),Rl=u(Zt()),F0=u(ht());var Pt=u(W()),B0=u(m0()),j0=u(jd());import{useNavigate as R2,useInvalidate as V2}from"@wordpress/route";var qr=u(j()),So=u(W()),ae=u(G()),C0=u(Zt()),T0=u(Ui()),E0=u(ht()),P0=u(jd()),A0=u(Hd());var Mn=u(gt()),Ln=u(Zt()),g0=u(Ui()),Tt=u(j()),ce=u(W());var h0=u(Hd()),b2="wp_template",_2={},x2=(t,e)=>{let r=t;return e.split(".").forEach(o=>{r=r?.[o]}),r};function zd(t,e){return`${t}-${(0,h0.safeDecodeURI)(e)}`}function v0(t,e){return(t||[]).map(r=>({...r,name:(0,g0.decodeEntities)(x2(r,e))}))}var Wd=()=>(0,Mn.useSelect)(t=>t(Ln.store).getEntityRecords("postType",b2,{per_page:-1}),[]),Ki=()=>(0,Mn.useSelect)(t=>t(Ln.store).getCurrentTheme()?.default_template_types||[],[]),b0=()=>{let t=(0,Mn.useSelect)(e=>e(Ln.store).getPostTypes({per_page:-1}),[]);return(0,Tt.useMemo)(()=>{let e=["attachment"];return t?.filter(({viewable:r,slug:o})=>r&&!e.includes(o)).sort((r,o)=>r.slug==="post"||o.slug==="post"?0:r.name.localeCompare(o.name))},[t])},y2=()=>{let t=(0,Mn.useSelect)(e=>e(Ln.store).getTaxonomies({per_page:-1}),[]);return(0,Tt.useMemo)(()=>t?.filter(({visibility:e})=>e?.publicly_queryable),[t])};function _0(){let t=b0(),e=(0,Tt.useMemo)(()=>t?.filter(i=>i.has_archive),[t]),r=Wd(),o=(0,Tt.useMemo)(()=>t?.reduce((i,{labels:a})=>{let l=a.singular_name.toLowerCase();return i[l]=(i[l]||0)+1,i},{}),[t]),n=(0,Tt.useCallback)(({labels:i,slug:a})=>{let l=i.singular_name.toLowerCase();return o[l]>1&&l!==a},[o]);return(0,Tt.useMemo)(()=>e?.filter(i=>!(r||[]).some(a=>a.slug==="archive-"+i.slug)).map(i=>{let a;return n(i)?a=(0,ce.sprintf)((0,ce.__)("Archive: %1$s (%2$s)"),i.labels.singular_name,i.slug):a=(0,ce.sprintf)((0,ce.__)("Archive: %s"),i.labels.singular_name),{slug:"archive-"+i.slug,description:(0,ce.sprintf)((0,ce.__)("Displays an archive with the latest posts of type: %s."),i.labels.singular_name),title:a,icon:typeof i.icon=="string"&&i.icon.startsWith("dashicons-")?i.icon.slice(10):Yn,templatePrefix:"archive"}})||[],[e,r,n])}var x0=t=>{let e=b0(),r=Ki(),o=(0,Tt.useMemo)(()=>e?.reduce((c,{labels:f})=>{let m=(f.template_name||f.singular_name).toLowerCase();return c[m]=(c[m]||0)+1,c},{}),[e]),n=(0,Tt.useCallback)(({labels:c,slug:f})=>{let m=(c.template_name||c.singular_name).toLowerCase();return o[m]>1&&m!==f},[o]),i=(0,Tt.useMemo)(()=>e?.reduce((c,{slug:f})=>{let m=f;return f!=="page"&&(m=`single-${m}`),c[f]=m,c},{}),[e]),a=Gd("postType",i),l=(e||[]).reduce((c,f)=>{let{slug:m,labels:d,icon:p}=f,g=i[m],w=r?.find(({slug:R})=>R===g),v=n(f),b=d.template_name||(0,ce.sprintf)((0,ce.__)("Single item: %s"),d.singular_name);v&&(b=d.template_name?(0,ce.sprintf)((0,ce._x)("%1$s (%2$s)","post type menu label"),d.template_name,m):(0,ce.sprintf)((0,ce._x)("Single item: %1$s (%2$s)","post type menu label"),d.singular_name,m));let S=w?{...w,templatePrefix:i[m]}:{slug:g,title:b,description:(0,ce.sprintf)((0,ce.__)("Displays a single item: %s."),d.singular_name),icon:typeof p=="string"&&p.startsWith("dashicons-")?p.slice(10):ju,templatePrefix:i[m]},P=a?.[m]?.hasEntities;return P&&(S.onClick=R=>{t({type:"postType",slug:m,config:{recordNamePath:"title.rendered",queryArgs:({search:I})=>({_fields:"id,title,slug,link",orderBy:I?"relevance":"modified",exclude:a[m].existingEntitiesIds}),getSpecificTemplate:I=>{let k=zd(i[m],I.slug);return{title:k,slug:k,templatePrefix:i[m]}}},labels:d,template:R})}),P&&c.push(S),c},[]);return(0,Tt.useMemo)(()=>l.reduce((c,f)=>{let{slug:m}=f,d="postTypesMenuItems";return m==="page"&&(d="defaultPostTypesMenuItems"),c[d].push(f),c},{defaultPostTypesMenuItems:[],postTypesMenuItems:[]}),[l])},y0=t=>{let e=y2(),r=Wd(),o=Ki(),n=(0,Tt.useMemo)(()=>e?.reduce((m,{slug:d})=>{let p=d;return["category","post_tag"].includes(d)||(p=`taxonomy-${p}`),d==="post_tag"&&(p="tag"),m[d]=p,m},{}),[e]),i=e?.reduce((m,{labels:d})=>{let p=(d.template_name||d.singular_name).toLowerCase();return m[p]=(m[p]||0)+1,m},{}),a=(m,d)=>{if(["category","post_tag"].includes(d))return!1;let p=(m.template_name||m.singular_name).toLowerCase();return i[p]>1&&p!==d},l=Gd("taxonomy",n),s=(r||[]).map(({slug:m})=>m),c=(e||[]).reduce((m,d)=>{let{slug:p,labels:g}=d,w=n[p],v=o?.find(({slug:k})=>k===w),b=s?.includes(w),S=a(g,p),P=g.template_name||g.singular_name;S&&(P=g.template_name?(0,ce.sprintf)((0,ce._x)("%1$s (%2$s)","taxonomy template menu label"),g.template_name,p):(0,ce.sprintf)((0,ce._x)("%1$s (%2$s)","taxonomy menu label"),g.singular_name,p));let R=v?{...v,templatePrefix:n[p]}:{slug:w,title:P,description:(0,ce.sprintf)((0,ce.__)("Displays taxonomy: %s."),g.singular_name),icon:$n,templatePrefix:n[p]},I=l?.[p]?.hasEntities;return I&&(R.onClick=k=>{t({type:"taxonomy",slug:p,config:{queryArgs:({search:D})=>({_fields:"id,name,slug,link",orderBy:D?"name":"count",exclude:l[p].existingEntitiesIds}),getSpecificTemplate:D=>{let T=zd(n[p],D.slug);return{title:T,slug:T,templatePrefix:n[p]}}},labels:g,hasGeneralTemplate:b,template:k})}),(!b||I)&&m.push(R),m},[]);return(0,Tt.useMemo)(()=>c.reduce((m,d)=>{let{slug:p}=d,g="taxonomiesMenuItems";return["category","tag"].includes(p)&&(g="defaultTaxonomiesMenuItems"),m[g].push(d),m},{defaultTaxonomiesMenuItems:[],taxonomiesMenuItems:[]}),[c])},w2={user:"author"},S2={user:{who:"authors"}};function w0(t){let e=Wd(),r=Ki(),o=Gd("root",w2,S2),n=r?.find(({slug:a})=>a==="author");n||(n={description:(0,ce.__)("Displays latest posts written by a single author."),slug:"author",title:"Author"});let i=!!e?.find(({slug:a})=>a==="author");if(o.user?.hasEntities&&(n={...n,templatePrefix:"author"},n.onClick=a=>{t({type:"root",slug:"user",config:{queryArgs:({search:l})=>({_fields:"id,name,slug,link",orderBy:l?"name":"registered_date",exclude:o.user.existingEntitiesIds,who:"authors"}),getSpecificTemplate:l=>{let s=zd("author",l.slug);return{title:(0,ce.sprintf)((0,ce.__)("Author: %s"),l.name),slug:s,templatePrefix:"author"}}},labels:{singular_name:(0,ce.__)("Author"),search_items:(0,ce.__)("Search Authors"),not_found:(0,ce.__)("No authors found."),all_items:(0,ce.__)("All Authors")},hasGeneralTemplate:i,template:a})}),!i||o.user?.hasEntities)return n}var Gd=(t,e,r=_2)=>{let o=(0,Mn.useSelect)(i=>Object.keys(e||{}).reduce((a,l)=>(a[l]=!!i(Ln.store).getEntityRecords(t,l,{per_page:1,_fields:"id",context:"view",...r[l]})?.length,a),{}),[e,t,r]);return(0,Tt.useMemo)(()=>Object.keys(e||{}).reduce((i,a)=>(i[a]={hasEntities:o[a]},i),{}),[e,o])};var S0=[];function C2({suggestion:t,search:e,onSelect:r,entityForSuggestions:o}){let n="template-list-custom-template-modal__suggestions_list__list-item";return React.createElement(ae.Composite.Item,{render:React.createElement(ae.Button,{__next40pxDefaultSize:!0,role:"option",className:n,onClick:()=>r(o.config.getSpecificTemplate(t))})},React.createElement(ae.__experimentalText,{size:"body",lineHeight:1.53846153846,weight:500,className:`${n}__title`},React.createElement(ae.TextHighlight,{text:(0,T0.decodeEntities)(t.name),highlight:e})),t.link&&React.createElement(ae.__experimentalText,{size:"body",lineHeight:1.53846153846,className:`${n}__info`},(0,A0.safeDecodeURI)(t.link)))}function T2(t,e){let{config:r}=t,o=(0,qr.useMemo)(()=>({order:"asc",context:"view",search:e,per_page:e?20:10,...r.queryArgs({search:e})}),[e,r]),{records:n,hasResolved:i}=(0,C0.useEntityRecords)(t.type,t.slug,o),[a,l]=(0,qr.useState)(S0);return(0,qr.useEffect)(()=>{if(!i)return;let s=S0;n?.length&&(s=n,r.recordNamePath&&(s=v0(s,r.recordNamePath))),l(s)},[n,i,r.recordNamePath]),a}function E2({entityForSuggestions:t,onSelect:e}){let[r,o,n]=(0,E0.useDebouncedInput)(),i=T2(t,n),{labels:a}=t,[l,s]=(0,qr.useState)(!1);return!l&&i?.length>9&&s(!0),React.createElement(React.Fragment,null,l&&React.createElement(ae.SearchControl,{onChange:o,value:r,label:a.search_items,placeholder:a.search_items}),!!i?.length&&React.createElement(ae.Composite,{orientation:"vertical",role:"listbox",className:"template-list-custom-template-modal__suggestions_list","aria-label":(0,So.__)("Suggestions list")},i.map(c=>React.createElement(C2,{key:c.slug,suggestion:c,search:n,onSelect:e,entityForSuggestions:t}))),n&&!i?.length&&React.createElement(ae.__experimentalText,{as:"p",className:"template-list-custom-template-modal__no-results"},a.not_found))}function P2({onSelect:t,entityForSuggestions:e,onBack:r,containerRef:o}){let[n,i]=(0,qr.useState)(!1);return(0,qr.useEffect)(()=>{if(o.current){let[a]=P0.focus.focusable.find(o.current);a?.focus()}},[n,o]),React.createElement(ae.__experimentalVStack,{spacing:4,className:"template-list-custom-template-modal__contents-wrapper",alignment:"left"},!n&&React.createElement(React.Fragment,null,React.createElement(ae.__experimentalText,{as:"p"},(0,So.__)("Select whether to create a single template for all items or a specific one.")),React.createElement(ae.Flex,{className:"template-list-custom-template-modal__contents",gap:"4",align:"initial"},React.createElement(ae.FlexItem,{isBlock:!0,as:ae.Button,onClick:()=>{let{slug:a,title:l,description:s,templatePrefix:c}=e.template;t({slug:a,title:l,description:s,templatePrefix:c})}},React.createElement(ae.__experimentalText,{as:"span",weight:500,lineHeight:1.53846153846},e.labels.all_items),React.createElement(ae.__experimentalText,{as:"span",lineHeight:1.53846153846},(0,So.__)("For all items"))),React.createElement(ae.FlexItem,{isBlock:!0,as:ae.Button,onClick:()=>{i(!0)}},React.createElement(ae.__experimentalText,{as:"span",weight:500,lineHeight:1.53846153846},e.labels.singular_name),React.createElement(ae.__experimentalText,{as:"span",lineHeight:1.53846153846},(0,So.__)("For a specific item")))),React.createElement(ae.Flex,{justify:"right"},React.createElement(ae.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:r},(0,So.__)("Back")))),n&&React.createElement(React.Fragment,null,React.createElement(ae.__experimentalText,{as:"p"},(0,So.__)("This template will be used only for the specific item chosen.")),React.createElement(E2,{entityForSuggestions:e,onSelect:t}),React.createElement(ae.Flex,{justify:"right"},React.createElement(ae.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{e.hasGeneralTemplate?r():i(!1)}},(0,So.__)("Back")))))}var I0=P2;var Fn=function(){return Fn=Object.assign||function(e){for(var r,o=1,n=arguments.length;o{l.current&&l.current.focus()},[]);async function s(c){if(c.preventDefault(),!i){a(!0);try{await t({slug:D0(r||n)||"wp-custom-template",title:r||n},!1)}finally{a(!1)}}}return React.createElement("form",{onSubmit:s},React.createElement(Ur.__experimentalVStack,{spacing:6},React.createElement(Ur.TextControl,{__next40pxDefaultSize:!0,label:(0,Bn.__)("Name"),value:r,onChange:o,placeholder:n,disabled:i,ref:l,help:(0,Bn.__)('Describe the template, e.g. "Post with sidebar". A custom template can be manually applied to any post or page.')}),React.createElement(Ur.__experimentalHStack,{className:"template-list-custom-generic-template__modal-actions",justify:"right"},React.createElement(Ur.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:e},(0,Bn.__)("Back")),React.createElement(Ur.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",isBusy:i,"aria-disabled":i},(0,Bn.__)("Create")))))}var N0=O2;var H0="wp_template",qd=["front-page","home","single","page","index","archive","author","category","date","tag","search","404"],k2={"front-page":wu,home:Ju,single:Fu,page:Nu,archive:Yn,search:ai,404:Du,index:Pu,category:Qo,author:Xn,taxonomy:$n,date:iu,tag:Zu,attachment:Au};function M0({title:t,direction:e,className:r,description:o,icon:n,onClick:i,children:a}){return React.createElement(it.Button,{__next40pxDefaultSize:!0,className:r,onClick:i,label:o,showTooltip:!!o},React.createElement(it.Flex,{as:"span",align:"center",justify:"center",style:{width:"100%"},direction:e},React.createElement("div",{className:"template-list-add-new-template__template-icon"},React.createElement(it.Icon,{icon:n})),React.createElement(it.__experimentalVStack,{className:"template-list-add-new-template__template-name",alignment:"center",spacing:0},React.createElement(it.__experimentalText,{align:"center",weight:500,lineHeight:1.53846153846},t),a)))}var Et={templatesList:1,customTemplate:2,customGenericTemplate:3};function D2({onClose:t}){let[e,r]=(0,tr.useState)(Et.templatesList),[o,n]=(0,tr.useState)(),[i,a]=(0,tr.useState)(!1),l=M2(n,()=>r(Et.customTemplate)),s=R2(),c=V2(),{saveEntityRecord:f}=(0,jn.useDispatch)(Rl.store),{createErrorNotice:m,createSuccessNotice:d}=(0,jn.useDispatch)(B0.store),p=(0,tr.useRef)(null),g=(0,F0.useViewportMatch)("medium","<"),w=(0,jn.useSelect)(R=>R(Rl.store).getEntityRecord("root","__unstableBase")?.home,[]),v={"front-page":w,date:(0,Pt.sprintf)((0,Pt.__)("E.g. %s"),w+"/"+new Date().getFullYear())};(0,tr.useEffect)(()=>{if(p.current&&e===Et.templatesList){let[R]=j0.focus.focusable.find(p.current);R?.focus()}},[e]);async function b(R,I=!0){if(!i){a(!0);try{let{title:k,description:D,slug:T}=R,O=await f("postType",H0,{description:D,slug:T.toString(),status:"publish",title:k,meta:{is_wp_suggestion:I,is_inactive_by_default:!0}},{throwOnError:!0});s({to:`/types/wp_template/edit/${encodeURIComponent(String(O.id))}`}),c(),d((0,Pt.sprintf)((0,Pt.__)('"%s" successfully created.'),(0,L0.decodeEntities)(O.title?.rendered||k)||(0,Pt.__)("(no title)")),{type:"snackbar"})}catch(k){let D=k.message&&k.code!=="unknown_error"?k.message:(0,Pt.__)("An error occurred while creating the template.");m(D,{type:"snackbar"})}finally{a(!1)}}}let S=()=>{t(),r(Et.templatesList)},P=(0,Pt.__)("Add template");return e===Et.customTemplate&&o?P=(0,Pt.sprintf)((0,Pt.__)("Add template: %s"),o.labels.singular_name):e===Et.customGenericTemplate&&(P=(0,Pt.__)("Create custom template")),React.createElement(it.Modal,{title:P,className:z("template-list-add-new-template__modal",{"template-list-add-new-template__modal_template_list":e===Et.templatesList,"template-list-custom-template-modal":e===Et.customTemplate}),onRequestClose:S,overlayClassName:e===Et.customGenericTemplate?"template-list-custom-generic-template__modal":void 0,ref:p},e===Et.templatesList&&React.createElement(it.__experimentalGrid,{columns:g?2:3,gap:4,align:"flex-start",justify:"center",className:"template-list-add-new-template__template-list__contents"},React.createElement(it.Flex,{className:"template-list-add-new-template__template-list__prompt"},(0,Pt.__)("Select what the new template should apply to:")),l.map(R=>{let{title:I,slug:k,onClick:D}=R;return React.createElement(M0,{key:k,title:I,direction:"column",className:"template-list-add-new-template__template-button",description:v[k],icon:k2[k]||Jn,onClick:()=>D?D(R):b(R)})}),React.createElement(M0,{title:(0,Pt.__)("Custom template"),direction:"row",className:"template-list-add-new-template__custom-template-button",icon:ii,onClick:()=>r(Et.customGenericTemplate)},React.createElement(it.__experimentalText,{lineHeight:1.53846153846},(0,Pt.__)("A custom template can be manually applied to any post or page.")))),e===Et.customTemplate&&o&&React.createElement(I0,{onSelect:b,entityForSuggestions:o,onBack:()=>r(Et.templatesList),containerRef:p}),e===Et.customGenericTemplate&&React.createElement(N0,{createTemplate:b,onBack:()=>r(Et.templatesList)}))}function N2(){let[t,e]=(0,tr.useState)(!1),{postType:r}=(0,jn.useSelect)(o=>{let{getPostType:n}=o(Rl.store);return{postType:n(H0)}},[]);return r?React.createElement(React.Fragment,null,React.createElement(it.Button,{variant:"primary",onClick:()=>e(!0),label:r.labels.add_new_item,size:"compact"},r.labels.add_new_item),t&&React.createElement(D2,{onClose:()=>e(!1)})):null}function M2(t,e){let o=(Ki()||[]).filter(d=>qd.includes(d.slug)),n=d=>{e?.(),t(d)},i=[...o],{defaultTaxonomiesMenuItems:a,taxonomiesMenuItems:l}=y0(n),{defaultPostTypesMenuItems:s,postTypesMenuItems:c}=x0(n),f=w0(n);return[...a,...s,f].forEach(d=>{if(!d)return;let p=i.findIndex(g=>g.slug===d.slug);p>-1?i[p]=d:i.push(d)}),i?.sort((d,p)=>qd.indexOf(d.slug)-qd.indexOf(p.slug)),[...i,..._0(),...c,...l]}var Vl=(0,tr.memo)(N2);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='bfa9b6f0e8']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","bfa9b6f0e8"),t.appendChild(document.createTextNode(':root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-fieldset{border:0;margin:0;padding:0}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{grid-gap:4px 8px;align-items:center;color:#1e1e1e;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{text-wrap:pretty;color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}fieldset.fields__media-edit{border:0;margin:0;padding:0;width:100%}fieldset.fields__media-edit .components-base-control__label{color:#1e1e1e}fieldset.fields__media-edit{container-type:inline-size}fieldset.fields__media-edit .fields__media-edit-compact-group{border:1px dashed #949494;border-radius:4px;overflow:hidden}fieldset.fields__media-edit .fields__media-edit-compact-group.is-single{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button{border:0;border-radius:0}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-compact:not(:last-child){border-bottom:1px solid #f0f0f0}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-compact{min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-compact:focus-within .fields__media-edit-compact-movers,fieldset.fields__media-edit .fields__media-edit-compact:hover .fields__media-edit-compact-movers{opacity:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers{background:#fff;border-radius:2px;opacity:0;pointer-events:none;position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-picker-button{align-items:center;border:1px dashed #949494;border-radius:2px;cursor:pointer;display:flex;gap:8px;min-height:40px;min-width:0;padding:4px 8px;position:relative}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment){border-color:var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment):hover{background-color:color-mix(in srgb,var(--wp-admin-theme-color,#3858e9) 4%,#0000);border-color:var(--wp-admin-theme-color-darker-20);color:var(--wp-admin-theme-color-darker-20)}fieldset.fields__media-edit .fields__media-edit-picker-button:hover{color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}fieldset.fields__media-edit .fields__media-edit-picker-button[aria-disabled=true]{cursor:default;opacity:.6}fieldset.fields__media-edit .fields__media-edit-picker-button .fields__media-edit-picker-button-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-filename,fieldset.fields__media-edit .fields__media-edit-placeholder{flex:1;min-width:0;width:100%}fieldset.fields__media-edit .fields__media-edit-placeholder{text-align:center}fieldset.fields__media-edit .fields__media-edit-thumbnail{aspect-ratio:1/1;border-radius:2px;flex-shrink:0;width:24px}fieldset.fields__media-edit .fields__media-edit-expanded{display:grid;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview{align-items:center;aspect-ratio:3/2;border-radius:2px;display:flex;justify-content:center;overflow:hidden;padding:4px;position:relative;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview .fields__media-edit-expanded-preview-stack{height:100%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-actions{background:#fff;border-radius:2px;position:absolute;right:4px;top:4px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item{border-radius:4px;min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:focus-within .fields__media-edit-expanded-overlay,fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:hover .fields__media-edit-expanded-overlay{opacity:1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:not(.has-preview-image) .fields__media-edit-expanded-preview-stack{padding:8px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-thumbnail{height:100%;object-fit:cover;object-position:50% 50%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-filename{flex:none;text-align:center}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button-spinner svg{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded.is-single{grid-template-columns:1fr}fieldset.fields__media-edit .fields__media-edit-expanded.is-single .fields__media-edit-expanded-preview{aspect-ratio:2/1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button{border-radius:4px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .fields__media-edit-picker-button{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(3,1fr)}@container (max-width: 768px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(2,1fr)}}@container (max-width: 280px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:1fr}}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-picker-button{padding:0}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-placeholder{align-items:center;aspect-ratio:3/2;display:flex;justify-content:center}.fields-controls__slug{border:0;margin:0;padding:0}.fields-controls__slug .fields-controls__slug-external-icon{margin-left:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-image,.fields-controls__featured-image-placeholder{border-radius:4px;display:block;height:100%;width:100%}.fields-controls__featured-image-placeholder{background:#f0f0f0;box-shadow:none}.fields-controls__parent,.fields-controls__password{border:0;margin:0;padding:0}.fields-field__title>span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.routes-template-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}.routes-template-list-author-field__avatar{border-radius:50%;height:24px;margin-right:8px;opacity:0;overflow:hidden;transition:opacity .1s ease-in;width:24px}.routes-template-list-author-field__avatar.is-loaded{opacity:1}.routes-template-list-author-field__avatar img{height:100%;object-fit:cover;width:100%}.routes-template-list-author-field__icon{align-items:center;color:#757575;display:flex;height:24px;justify-content:center;margin-right:8px;width:24px}.routes-template-list-author-field__name{color:#1e1e1e}')),document.head.appendChild(t)}if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='0ccc4ccc5c']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","0ccc4ccc5c"),t.appendChild(document.createTextNode(".template-list-custom-template-modal__contents-wrapper{height:100%;justify-content:flex-start!important}.template-list-custom-template-modal__contents-wrapper>*{width:100%}.template-list-custom-template-modal__contents-wrapper__suggestions_list{margin-left:-12px;margin-right:-12px;width:calc(100% + 24px)}.template-list-custom-template-modal__contents>.components-button{height:auto;justify-content:center}@media (min-width:782px){.template-list-custom-template-modal{width:456px}}@media (min-width:600px){.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list{max-height:224px;overflow-y:auto}}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item{display:block;height:auto;overflow-wrap:break-word;padding:8px 12px;text-align:left;white-space:pre-wrap;width:100%}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item mark{background:none;font-weight:700}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:hover *,.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:hover mark{color:var(--wp-admin-theme-color)}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:focus{background-color:#f0f0f0}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color) inset}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item__info,.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item__title{display:block;overflow:hidden;text-overflow:ellipsis}.template-list-custom-template-modal .template-list-custom-template-modal__suggestions_list__list-item__info{color:#757575;word-break:break-all}.template-list-custom-template-modal__no-results{border:1px solid #ccc;border-radius:2px;padding:16px}.template-list-custom-generic-template__modal .components-modal__header{border-bottom:none}.template-list-custom-generic-template__modal .components-modal__content:before{margin-bottom:4px}@media (min-width:960px){.template-list-add-new-template__modal{margin-top:64px;max-height:calc(100% - 128px);max-width:832px;width:calc(100% - 128px)}}.template-list-add-new-template__modal .template-list-add-new-template__custom-template-button svg,.template-list-add-new-template__modal .template-list-add-new-template__template-button svg{fill:var(--wp-admin-theme-color)}.template-list-add-new-template__modal .template-list-add-new-template__custom-template-button .template-list-add-new-template__template-name{align-items:flex-start;flex-grow:1}.template-list-add-new-template__modal .template-list-add-new-template__template-icon{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:100%;max-height:40px;max-width:40px;padding:8px}.template-list-add-new-template__template-list__contents>.components-button,.template-list-custom-template-modal__contents>.components-button{border:1px solid #ddd;display:flex;flex-direction:column;justify-content:center;outline:1px solid #0000;padding:32px}.template-list-add-new-template__template-list__contents>.components-button span:first-child,.template-list-custom-template-modal__contents>.components-button span:first-child{color:#1e1e1e}.template-list-add-new-template__template-list__contents>.components-button span,.template-list-custom-template-modal__contents>.components-button span{color:#757575}.template-list-add-new-template__template-list__contents>.components-button:hover,.template-list-custom-template-modal__contents>.components-button:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-color:#0000;color:var(--wp-admin-theme-color-darker-10)}.template-list-add-new-template__template-list__contents>.components-button:hover span,.template-list-custom-template-modal__contents>.components-button:hover span{color:var(--wp-admin-theme-color)}.template-list-add-new-template__template-list__contents>.components-button:focus,.template-list-custom-template-modal__contents>.components-button:focus{border-color:#0000;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:3px solid #0000}.template-list-add-new-template__template-list__contents>.components-button:focus span:first-child,.template-list-custom-template-modal__contents>.components-button:focus span:first-child{color:var(--wp-admin-theme-color)}.template-list-add-new-template__template-list__contents .template-list-add-new-template__custom-template-button,.template-list-add-new-template__template-list__contents .template-list-add-new-template__template-list__prompt,.template-list-custom-template-modal__contents .template-list-add-new-template__custom-template-button,.template-list-custom-template-modal__contents .template-list-add-new-template__template-list__prompt{grid-column:1/-1}.template-list-add-new-template__template-list__contents>.components-button{align-items:flex-start;height:100%;text-align:start}")),document.head.appendChild(t)}var{usePostActions:H2,templateTitleField:z2}=pt(z0.privateApis),{Tabs:Ud}=pt(kl.privateApis);function W2(t){return t.id.toString()}function G2(){let t=j2(),{activeView:e="active"}=L2({from:"/templates/list/$activeView"}),r=F2(),o=B2({from:"/templates/list/$activeView"}),n=(0,$d.useSelect)(h=>h(Yd.store).getPostType("wp_template"),[]),[i,a]=(0,Ht.useState)(null),l=Md,s=(0,Ht.useMemo)(()=>Yb(e),[e]),c=(0,Ht.useCallback)(h=>{r({search:{...o,...h}})},[o,r]),{view:f,isModified:m,updateView:d,resetToDefault:p}=Wn({kind:"postType",name:"wp_template",slug:"default-new",defaultView:l,activeViewOverrides:s,queryParams:o,onChangeQueryParams:c}),g=()=>{p(),t()},w=h=>{d(h),h.type!==f.type&&t()},{records:v,isLoading:b,staticRecords:S}=l0(e),P=(0,$d.useSelect)(h=>{let{getUser:C}=h(Yd.store);return v.reduce((M,L)=>(L.author_text?M[L.author_text]||(M[L.author_text]=L.author_text):L.author&&(M[L.author]||(M[L.author]=C(L.author))),M),{})},[v]),R=(0,Ht.useMemo)(()=>{let h=[];for(let C in P)h.push({value:P[C]?.id??C,label:P[C]?.name??C});return[Cl,z2,Al,o0,i0,{...Pl,elements:h}]},[P]),{data:I,paginationInfo:k}=(0,Ht.useMemo)(()=>Wi(v,f,R),[v,f,R]),D=(0,Ht.useCallback)(h=>{let C=h.map(ne=>ne.id.toString()),M=o.postIds||[],L=M.filter(ne=>!C.includes(ne));L.length!==M.length?r({search:{...o,postIds:L.length>0?L:void 0}}):t()},[t,o,r]),T=(0,Ht.useCallback)((h,C)=>{(h==="move-to-trash"||h==="permanently-delete")&&D(C),h==="duplicate-post"&&r({to:"/templates/list/user"})},[D,r]),O=c0(),N=H2({postType:"wp_template",context:"list",onActionPerformed:T}),_=(0,Ht.useMemo)(()=>[O,...N?.flatMap(h=>h.id==="view-post-revisions"?[]:[h])],[O,N]),y=(0,Ht.useMemo)(()=>{let h=[{slug:"active",label:(0,Zi.__)("Active"),icon:Wu},{slug:"user",label:(0,Zi.__)("Created templates"),icon:Xn}],C=new Map;S.forEach(L=>{L.author_text&&!C.has(L.author_text)&&C.set(L.author_text,{slug:L.author_text,label:L.author_text})});let M=Array.from(C.values());return[...h,...M]},[S]),E=(0,Ht.useCallback)(h=>{r({to:`/templates/list/${h}`})},[r]);if(!n)return null;let x=o.postIds??[];f.type==="list"&&x.length===0&&I?.length>0&&x.push(I[0].id.toString()),f.type==="list"&&x.splice(1);let A=_.find(h=>h.id==="duplicate-post");if(A&&!("RenderModal"in A))throw new Error("Expected duplicate action to have a RenderModal component");return React.createElement(qi,{title:(0,Zi.__)("Templates"),className:"template-page",actions:React.createElement(Vl,null),hasPadding:!1},y.length>1&&React.createElement("div",{className:"routes-template-list__tabs-wrapper"},React.createElement(Ud,{onSelect:E,selectedTabId:e??"active"},React.createElement(Ud.TabList,null,y.map(h=>React.createElement(Ud.Tab,{tabId:h.slug,key:h.slug},h.label))))),React.createElement(zi,{data:I,fields:R,view:f,onChangeView:w,actions:_,isLoading:b,paginationInfo:k,defaultLayouts:Sl,getItemId:W2,selection:x,onReset:m?g:!1,onChangeSelection:h=>{r({search:{...o,postIds:h.length>0?h:void 0,edit:h.length===0?void 0:o.edit}})},isItemClickable:()=>!0,onClickItem:h=>{typeof h.id=="string"?a(h):r({to:`/types/wp_template/edit/${encodeURIComponent(h.id)}`})}}),i&&A&&React.createElement(kl.Modal,{title:(0,Zi.__)("Duplicate"),onRequestClose:()=>a(null),size:"small"},React.createElement(A.RenderModal,{items:[i],closeModal:()=>a(null)})))}var W0=G2;import{useParams as U2,useNavigate as Y2,useSearch as $2,useInvalidate as K2}from"@wordpress/route";var Zd=u(Zt()),Y0=u(G()),Xd=u(gt()),rr=u(j()),$0=u(Nd()),Qd=u(W());var G0=u(j()),q0=u(Zt());var{useEntityRecordsWithPermissions:q2}=pt(q0.privateApis);function U0(t="all"){let{records:e,isResolving:r}=q2("postType","wp_template",{per_page:-1});return{records:(0,G0.useMemo)(()=>e?t==="all"?e:e.filter(n=>n.author_text===t):[],[e,t]),isLoading:r,allRecords:e||[]}}var{usePostActions:Z2,templateTitleField:X2}=pt($0.privateApis),{Tabs:Kd}=pt(Y0.privateApis);function Q2(t){return t.id.toString()}function J2(){let t=K2(),{activeView:e="all"}=U2({from:"/templates/list/$activeView"}),r=Y2(),o=$2({from:"/templates/list/$activeView"}),n=(0,Xd.useSelect)(y=>y(Zd.store).getPostType("wp_template"),[]),i=Ub,a=(0,rr.useMemo)(()=>$b(e),[e]),l=(0,rr.useCallback)(y=>{r({search:{...o,...y}})},[o,r]),{view:s,isModified:c,updateView:f,resetToDefault:m}=Wn({kind:"postType",name:"wp_template",slug:"default-new",defaultView:i,activeViewOverrides:a,queryParams:o,onChangeQueryParams:l}),d=()=>{m(),t()},p=y=>{f(y),y.type!==s.type&&t()},{records:g,isLoading:w,allRecords:v}=U0(e),b=(0,Xd.useSelect)(y=>{let{getUser:E}=y(Zd.store);return g.reduce((x,A)=>(A.author_text?x[A.author_text]||(x[A.author_text]=A.author_text):A.author&&(x[A.author]||(x[A.author]=E(A.author))),x),{})},[g]),S=(0,rr.useMemo)(()=>{let y=[];for(let E in b)y.push({value:b[E]?.id??E,label:b[E]?.name??E});return[Cl,X2,Al,{...Pl,elements:y}]},[b]),{data:P,paginationInfo:R}=(0,rr.useMemo)(()=>Wi(g,s,S),[g,s,S]),I=(0,rr.useCallback)(y=>{let E=y.map(h=>h.id.toString()),x=o.postIds||[],A=x.filter(h=>!E.includes(h));A.length!==x.length?r({search:{...o,postIds:A.length>0?A:void 0}}):t()},[t,o,r]),k=(0,rr.useCallback)((y,E)=>{(y==="move-to-trash"||y==="permanently-delete")&&I(E),y==="duplicate-post"&&r({to:"/templates/list/all"})},[I,r]),D=Z2({postType:"wp_template",context:"list",onActionPerformed:k}),T=(0,rr.useMemo)(()=>D?.flatMap(y=>y.id==="view-post-revisions"?[]:[y]),[D]),O=(0,rr.useMemo)(()=>{let y=[{slug:"all",label:(0,Qd.__)("All templates"),icon:Jn}],E=new Map;v.forEach(A=>{A.author_text&&!E.has(A.author_text)&&E.set(A.author_text,{slug:A.author_text,label:A.author_text})});let x=Array.from(E.values());return[...y,...x]},[v]),N=(0,rr.useCallback)(y=>{r({to:`/templates/list/${y}`})},[r]);if(!n)return null;let _=o.postIds??[];return s.type==="list"&&_.length===0&&P?.length>0&&_.push(P[0].id.toString()),s.type==="list"&&_.splice(1),React.createElement(qi,{title:(0,Qd.__)("Templates"),className:"template-page",actions:React.createElement(Vl,null),hasPadding:!1},O.length>1&&React.createElement("div",{className:"routes-template-list__tabs-wrapper"},React.createElement(Kd,{onSelect:N,selectedTabId:e??"all"},React.createElement(Kd.TabList,null,O.map(y=>React.createElement(Kd.Tab,{tabId:y.slug,key:y.slug},y.label))))),React.createElement(zi,{data:P,fields:S,view:s,onChangeView:p,actions:T,isLoading:w,paginationInfo:R,defaultLayouts:Sl,getItemId:Q2,selection:_,onReset:c?d:!1,onChangeSelection:y=>{r({search:{...o,postIds:y.length>0?y:void 0,edit:y.length===0?void 0:o.edit}})},isItemClickable:()=>!0,onClickItem:y=>{r({to:`/types/wp_template/edit/${encodeURIComponent(y.id)}`})}}))}var K0=J2;function eS(){return typeof window<"u"&&window.__experimentalTemplateActivate?React.createElement(W0,null):React.createElement(K0,null)}var tS=eS;export{tS as stage}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.production.js: + (** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/template-list/route.js b/src/wp-includes/build/routes/template-list/route.js new file mode 100644 index 0000000000000..daa9de0121192 --- /dev/null +++ b/src/wp-includes/build/routes/template-list/route.js @@ -0,0 +1,275 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// routes/template-list/route.ts +var import_data3 = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var import_i18n = __toESM(require_i18n()); + +// packages/views/build-module/use-view.mjs +var import_element = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f) => f.field) + ); + const preserved = (view.filters ?? []).filter( + (f) => !activeFields.has(f.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); +async function loadView(config) { + const { kind, name, slug, defaultView, activeViewOverrides, queryParams } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data2.select)(import_preferences2.store).get( + "core/views", + preferenceKey + ); + const baseView = persistedView ?? defaultView; + const page = queryParams?.page ?? 1; + const search = queryParams?.search ?? ""; + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); +} + +// routes/template-list/view-utils.ts +var DEFAULT_VIEW = { + type: "grid", + perPage: 20, + sort: { + field: "title", + direction: "asc" + }, + fields: ["author", "active", "slug"], + titleField: "title", + descriptionField: "description", + mediaField: "preview", + filters: [] +}; +var DEFAULT_VIEW_LEGACY = { + ...DEFAULT_VIEW, + fields: ["author"] +}; +function getActiveViewOverridesForTab(activeView) { + if (activeView === "user") { + return { + sort: { field: "date", direction: "desc" } + }; + } + if (activeView === "active") { + return {}; + } + return { + filters: [ + { + field: "author", + operator: "isAny", + value: [activeView] + } + ] + }; +} +async function ensureView(activeView, search) { + return loadView({ + kind: "postType", + name: "wp_template", + slug: "default-new", + defaultView: DEFAULT_VIEW, + activeViewOverrides: getActiveViewOverridesForTab( + activeView ?? "active" + ), + queryParams: search + }); +} +function viewToQuery(view) { + const result = {}; + if (void 0 !== view.perPage) { + result.per_page = view.perPage; + } + if (void 0 !== view.page) { + result.page = view.page; + } + if (![void 0, ""].includes(view.search)) { + result.search = view.search; + } + if (void 0 !== view.sort?.field) { + result.orderby = view.sort.field; + } + if (void 0 !== view.sort?.direction) { + result.order = view.sort.direction; + } + return result; +} + +// routes/template-list/route.ts +var route = { + title: () => (0, import_i18n.__)("Templates"), + async canvas(context) { + const { params, search } = context; + const view = await ensureView(params.activeView, { + page: search.page, + search: search.search + }); + if (view.type !== "list") { + return void 0; + } + if (search.postIds && search.postIds.length > 0) { + const postId = search.postIds[0].toString(); + return { + postType: "wp_template", + postId, + isPreview: true, + editLink: `/types/wp_template/edit/${encodeURIComponent( + postId + )}` + }; + } + const query = viewToQuery(view); + const posts = await (0, import_data3.resolveSelect)(import_core_data.store).getEntityRecords( + "postType", + "wp_template", + { ...query, per_page: 1 } + ); + if (posts && posts.length > 0) { + const postId = posts[0].id.toString(); + return { + postType: "wp_template", + postId, + isPreview: true, + editLink: `/types/wp_template/edit/${encodeURIComponent( + postId + )}` + }; + } + return void 0; + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/template-list/route.min.asset.php b/src/wp-includes/build/routes/template-list/route.min.asset.php new file mode 100644 index 0000000000000..285b188e93353 --- /dev/null +++ b/src/wp-includes/build/routes/template-list/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-preferences'), 'version' => 'ae2d0d6e3f6654a31efa'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/template-list/route.min.js b/src/wp-includes/build/routes/template-list/route.min.js new file mode 100644 index 0000000000000..579336829328c --- /dev/null +++ b/src/wp-includes/build/routes/template-list/route.min.js @@ -0,0 +1 @@ +var C=Object.create;var g=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var a=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Q=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of K(e))!z.call(t,i)&&i!==s&&g(t,i,{get:()=>e[i],enumerable:!(r=R(e,i))||r.enumerable});return t};var o=(t,e,s)=>(s=t!=null?C($(t)):{},Q(e||!t||!t.__esModule?g(s,"default",{value:t,enumerable:!0}):s,t));var p=a((H,m)=>{m.exports=window.wp.data});var w=a((J,y)=>{y.exports=window.wp.coreData});var A=a((X,h)=>{h.exports=window.wp.i18n});var S=a((O,x)=>{x.exports=window.wp.element});var l=a((v,T)=>{T.exports=window.wp.preferences});var I=o(p()),E=o(w()),B=o(A());var V=o(S(),1),_=o(p(),1),Y=o(l(),1);function u(t,e,s){return`dataviews-${t}-${e}-${s}`}var W=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function c(t,e,s){if(!e)return t;let r=t;for(let i of W)i in e&&(r={...r,[i]:e[i]});if(e.filters&&e.filters.length>0){let i=new Set(e.filters.map(n=>n.field)),f=(t.filters??[]).filter(n=>!i.has(n.field));r={...r,filters:[...f,...e.filters]}}return e.sort&&s&&t.sort?.field===s.sort?.field&&t.sort?.direction===s.sort?.direction&&(r={...r,sort:e.sort}),e.layout&&(r={...r,layout:{...r.layout,...e.layout}}),e.groupBy&&(r={...r,groupBy:e.groupBy}),r}var L=o(p(),1),F=o(l(),1);async function d(t){let{kind:e,name:s,slug:r,defaultView:i,activeViewOverrides:f,queryParams:n}=t,U=u(e,s,r),j=(0,L.select)(F.store).get("core/views",U)??i,q=n?.page??1,M=n?.search??"";return c({...j,page:q,search:M},f,i)}var P={type:"grid",perPage:20,sort:{field:"title",direction:"asc"},fields:["author","active","slug"],titleField:"title",descriptionField:"description",mediaField:"preview",filters:[]},ye={...P,fields:["author"]};function b(t){return t==="user"?{sort:{field:"date",direction:"desc"}}:t==="active"?{}:{filters:[{field:"author",operator:"isAny",value:[t]}]}}async function k(t,e){return d({kind:"postType",name:"wp_template",slug:"default-new",defaultView:P,activeViewOverrides:b(t??"active"),queryParams:e})}function D(t){let e={};return t.perPage!==void 0&&(e.per_page=t.perPage),t.page!==void 0&&(e.page=t.page),[void 0,""].includes(t.search)||(e.search=t.search),t.sort?.field!==void 0&&(e.orderby=t.sort.field),t.sort?.direction!==void 0&&(e.order=t.sort.direction),e}var Ae={title:()=>(0,B.__)("Templates"),async canvas(t){let{params:e,search:s}=t,r=await k(e.activeView,{page:s.page,search:s.search});if(r.type!=="list")return;if(s.postIds&&s.postIds.length>0){let n=s.postIds[0].toString();return{postType:"wp_template",postId:n,isPreview:!0,editLink:`/types/wp_template/edit/${encodeURIComponent(n)}`}}let i=D(r),f=await(0,I.resolveSelect)(E.store).getEntityRecords("postType","wp_template",{...i,per_page:1});if(f&&f.length>0){let n=f[0].id.toString();return{postType:"wp_template",postId:n,isPreview:!0,editLink:`/types/wp_template/edit/${encodeURIComponent(n)}`}}}};export{Ae as route}; diff --git a/src/wp-includes/build/routes/template-part-list/content.js b/src/wp-includes/build/routes/template-part-list/content.js new file mode 100644 index 0000000000000..f786e7cc94e88 --- /dev/null +++ b/src/wp-includes/build/routes/template-part-list/content.js @@ -0,0 +1,17602 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// package-external:@wordpress/compose +var require_compose = __commonJS({ + "package-external:@wordpress/compose"(exports, module) { + module.exports = window.wp.compose; + } +}); + +// vendor-external:react +var require_react = __commonJS({ + "vendor-external:react"(exports, module) { + module.exports = window.React; + } +}); + +// vendor-external:react/jsx-runtime +var require_jsx_runtime = __commonJS({ + "vendor-external:react/jsx-runtime"(exports, module) { + module.exports = window.ReactJSXRuntime; + } +}); + +// vendor-external:react-dom +var require_react_dom = __commonJS({ + "vendor-external:react-dom"(exports, module) { + module.exports = window.ReactDOM; + } +}); + +// node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +var require_use_sync_external_store_shim_development = __commonJS({ + "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { + "use strict"; + (function() { + function is(x2, y2) { + return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; + } + function useSyncExternalStore$2(subscribe2, getSnapshot) { + didWarnOld18Alpha || void 0 === React9.startTransition || (didWarnOld18Alpha = true, console.error( + "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." + )); + var value = getSnapshot(); + if (!didWarnUncachedGetSnapshot) { + var cachedValue = getSnapshot(); + objectIs(value, cachedValue) || (console.error( + "The result of getSnapshot should be cached to avoid an infinite loop" + ), didWarnUncachedGetSnapshot = true); + } + cachedValue = useState26({ + inst: { value, getSnapshot } + }); + var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; + useLayoutEffect2( + function() { + inst.value = value; + inst.getSnapshot = getSnapshot; + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }, + [subscribe2, value, getSnapshot] + ); + useEffect19( + function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + return subscribe2(function() { + checkIfSnapshotChanged(inst) && forceUpdate({ inst }); + }); + }, + [subscribe2] + ); + useDebugValue(value); + return value; + } + function checkIfSnapshotChanged(inst) { + var latestGetSnapshot = inst.getSnapshot; + inst = inst.value; + try { + var nextValue = latestGetSnapshot(); + return !objectIs(inst, nextValue); + } catch (error) { + return true; + } + } + function useSyncExternalStore$1(subscribe2, getSnapshot) { + return getSnapshot(); + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var React9 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState26 = React9.useState, useEffect19 = React9.useEffect, useLayoutEffect2 = React9.useLayoutEffect, useDebugValue = React9.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; + exports.useSyncExternalStore = void 0 !== React9.useSyncExternalStore ? React9.useSyncExternalStore : shim; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); + } +}); + +// node_modules/use-sync-external-store/shim/index.js +var require_shim = __commonJS({ + "node_modules/use-sync-external-store/shim/index.js"(exports, module) { + "use strict"; + if (false) { + module.exports = null; + } else { + module.exports = require_use_sync_external_store_shim_development(); + } + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + +// package-external:@wordpress/private-apis +var require_private_apis = __commonJS({ + "package-external:@wordpress/private-apis"(exports, module) { + module.exports = window.wp.privateApis; + } +}); + +// package-external:@wordpress/components +var require_components = __commonJS({ + "package-external:@wordpress/components"(exports, module) { + module.exports = window.wp.components; + } +}); + +// package-external:@wordpress/keycodes +var require_keycodes = __commonJS({ + "package-external:@wordpress/keycodes"(exports, module) { + module.exports = window.wp.keycodes; + } +}); + +// node_modules/remove-accents/index.js +var require_remove_accents = __commonJS({ + "node_modules/remove-accents/index.js"(exports, module) { + var characterMap = { + "\xC0": "A", + "\xC1": "A", + "\xC2": "A", + "\xC3": "A", + "\xC4": "A", + "\xC5": "A", + "\u1EA4": "A", + "\u1EAE": "A", + "\u1EB2": "A", + "\u1EB4": "A", + "\u1EB6": "A", + "\xC6": "AE", + "\u1EA6": "A", + "\u1EB0": "A", + "\u0202": "A", + "\u1EA2": "A", + "\u1EA0": "A", + "\u1EA8": "A", + "\u1EAA": "A", + "\u1EAC": "A", + "\xC7": "C", + "\u1E08": "C", + "\xC8": "E", + "\xC9": "E", + "\xCA": "E", + "\xCB": "E", + "\u1EBE": "E", + "\u1E16": "E", + "\u1EC0": "E", + "\u1E14": "E", + "\u1E1C": "E", + "\u0206": "E", + "\u1EBA": "E", + "\u1EBC": "E", + "\u1EB8": "E", + "\u1EC2": "E", + "\u1EC4": "E", + "\u1EC6": "E", + "\xCC": "I", + "\xCD": "I", + "\xCE": "I", + "\xCF": "I", + "\u1E2E": "I", + "\u020A": "I", + "\u1EC8": "I", + "\u1ECA": "I", + "\xD0": "D", + "\xD1": "N", + "\xD2": "O", + "\xD3": "O", + "\xD4": "O", + "\xD5": "O", + "\xD6": "O", + "\xD8": "O", + "\u1ED0": "O", + "\u1E4C": "O", + "\u1E52": "O", + "\u020E": "O", + "\u1ECE": "O", + "\u1ECC": "O", + "\u1ED4": "O", + "\u1ED6": "O", + "\u1ED8": "O", + "\u1EDC": "O", + "\u1EDE": "O", + "\u1EE0": "O", + "\u1EDA": "O", + "\u1EE2": "O", + "\xD9": "U", + "\xDA": "U", + "\xDB": "U", + "\xDC": "U", + "\u1EE6": "U", + "\u1EE4": "U", + "\u1EEC": "U", + "\u1EEE": "U", + "\u1EF0": "U", + "\xDD": "Y", + "\xE0": "a", + "\xE1": "a", + "\xE2": "a", + "\xE3": "a", + "\xE4": "a", + "\xE5": "a", + "\u1EA5": "a", + "\u1EAF": "a", + "\u1EB3": "a", + "\u1EB5": "a", + "\u1EB7": "a", + "\xE6": "ae", + "\u1EA7": "a", + "\u1EB1": "a", + "\u0203": "a", + "\u1EA3": "a", + "\u1EA1": "a", + "\u1EA9": "a", + "\u1EAB": "a", + "\u1EAD": "a", + "\xE7": "c", + "\u1E09": "c", + "\xE8": "e", + "\xE9": "e", + "\xEA": "e", + "\xEB": "e", + "\u1EBF": "e", + "\u1E17": "e", + "\u1EC1": "e", + "\u1E15": "e", + "\u1E1D": "e", + "\u0207": "e", + "\u1EBB": "e", + "\u1EBD": "e", + "\u1EB9": "e", + "\u1EC3": "e", + "\u1EC5": "e", + "\u1EC7": "e", + "\xEC": "i", + "\xED": "i", + "\xEE": "i", + "\xEF": "i", + "\u1E2F": "i", + "\u020B": "i", + "\u1EC9": "i", + "\u1ECB": "i", + "\xF0": "d", + "\xF1": "n", + "\xF2": "o", + "\xF3": "o", + "\xF4": "o", + "\xF5": "o", + "\xF6": "o", + "\xF8": "o", + "\u1ED1": "o", + "\u1E4D": "o", + "\u1E53": "o", + "\u020F": "o", + "\u1ECF": "o", + "\u1ECD": "o", + "\u1ED5": "o", + "\u1ED7": "o", + "\u1ED9": "o", + "\u1EDD": "o", + "\u1EDF": "o", + "\u1EE1": "o", + "\u1EDB": "o", + "\u1EE3": "o", + "\xF9": "u", + "\xFA": "u", + "\xFB": "u", + "\xFC": "u", + "\u1EE7": "u", + "\u1EE5": "u", + "\u1EED": "u", + "\u1EEF": "u", + "\u1EF1": "u", + "\xFD": "y", + "\xFF": "y", + "\u0100": "A", + "\u0101": "a", + "\u0102": "A", + "\u0103": "a", + "\u0104": "A", + "\u0105": "a", + "\u0106": "C", + "\u0107": "c", + "\u0108": "C", + "\u0109": "c", + "\u010A": "C", + "\u010B": "c", + "\u010C": "C", + "\u010D": "c", + "C\u0306": "C", + "c\u0306": "c", + "\u010E": "D", + "\u010F": "d", + "\u0110": "D", + "\u0111": "d", + "\u0112": "E", + "\u0113": "e", + "\u0114": "E", + "\u0115": "e", + "\u0116": "E", + "\u0117": "e", + "\u0118": "E", + "\u0119": "e", + "\u011A": "E", + "\u011B": "e", + "\u011C": "G", + "\u01F4": "G", + "\u011D": "g", + "\u01F5": "g", + "\u011E": "G", + "\u011F": "g", + "\u0120": "G", + "\u0121": "g", + "\u0122": "G", + "\u0123": "g", + "\u0124": "H", + "\u0125": "h", + "\u0126": "H", + "\u0127": "h", + "\u1E2A": "H", + "\u1E2B": "h", + "\u0128": "I", + "\u0129": "i", + "\u012A": "I", + "\u012B": "i", + "\u012C": "I", + "\u012D": "i", + "\u012E": "I", + "\u012F": "i", + "\u0130": "I", + "\u0131": "i", + "\u0132": "IJ", + "\u0133": "ij", + "\u0134": "J", + "\u0135": "j", + "\u0136": "K", + "\u0137": "k", + "\u1E30": "K", + "\u1E31": "k", + "K\u0306": "K", + "k\u0306": "k", + "\u0139": "L", + "\u013A": "l", + "\u013B": "L", + "\u013C": "l", + "\u013D": "L", + "\u013E": "l", + "\u013F": "L", + "\u0140": "l", + "\u0141": "l", + "\u0142": "l", + "\u1E3E": "M", + "\u1E3F": "m", + "M\u0306": "M", + "m\u0306": "m", + "\u0143": "N", + "\u0144": "n", + "\u0145": "N", + "\u0146": "n", + "\u0147": "N", + "\u0148": "n", + "\u0149": "n", + "N\u0306": "N", + "n\u0306": "n", + "\u014C": "O", + "\u014D": "o", + "\u014E": "O", + "\u014F": "o", + "\u0150": "O", + "\u0151": "o", + "\u0152": "OE", + "\u0153": "oe", + "P\u0306": "P", + "p\u0306": "p", + "\u0154": "R", + "\u0155": "r", + "\u0156": "R", + "\u0157": "r", + "\u0158": "R", + "\u0159": "r", + "R\u0306": "R", + "r\u0306": "r", + "\u0212": "R", + "\u0213": "r", + "\u015A": "S", + "\u015B": "s", + "\u015C": "S", + "\u015D": "s", + "\u015E": "S", + "\u0218": "S", + "\u0219": "s", + "\u015F": "s", + "\u0160": "S", + "\u0161": "s", + "\u0162": "T", + "\u0163": "t", + "\u021B": "t", + "\u021A": "T", + "\u0164": "T", + "\u0165": "t", + "\u0166": "T", + "\u0167": "t", + "T\u0306": "T", + "t\u0306": "t", + "\u0168": "U", + "\u0169": "u", + "\u016A": "U", + "\u016B": "u", + "\u016C": "U", + "\u016D": "u", + "\u016E": "U", + "\u016F": "u", + "\u0170": "U", + "\u0171": "u", + "\u0172": "U", + "\u0173": "u", + "\u0216": "U", + "\u0217": "u", + "V\u0306": "V", + "v\u0306": "v", + "\u0174": "W", + "\u0175": "w", + "\u1E82": "W", + "\u1E83": "w", + "X\u0306": "X", + "x\u0306": "x", + "\u0176": "Y", + "\u0177": "y", + "\u0178": "Y", + "Y\u0306": "Y", + "y\u0306": "y", + "\u0179": "Z", + "\u017A": "z", + "\u017B": "Z", + "\u017C": "z", + "\u017D": "Z", + "\u017E": "z", + "\u017F": "s", + "\u0192": "f", + "\u01A0": "O", + "\u01A1": "o", + "\u01AF": "U", + "\u01B0": "u", + "\u01CD": "A", + "\u01CE": "a", + "\u01CF": "I", + "\u01D0": "i", + "\u01D1": "O", + "\u01D2": "o", + "\u01D3": "U", + "\u01D4": "u", + "\u01D5": "U", + "\u01D6": "u", + "\u01D7": "U", + "\u01D8": "u", + "\u01D9": "U", + "\u01DA": "u", + "\u01DB": "U", + "\u01DC": "u", + "\u1EE8": "U", + "\u1EE9": "u", + "\u1E78": "U", + "\u1E79": "u", + "\u01FA": "A", + "\u01FB": "a", + "\u01FC": "AE", + "\u01FD": "ae", + "\u01FE": "O", + "\u01FF": "o", + "\xDE": "TH", + "\xFE": "th", + "\u1E54": "P", + "\u1E55": "p", + "\u1E64": "S", + "\u1E65": "s", + "X\u0301": "X", + "x\u0301": "x", + "\u0403": "\u0413", + "\u0453": "\u0433", + "\u040C": "\u041A", + "\u045C": "\u043A", + "A\u030B": "A", + "a\u030B": "a", + "E\u030B": "E", + "e\u030B": "e", + "I\u030B": "I", + "i\u030B": "i", + "\u01F8": "N", + "\u01F9": "n", + "\u1ED2": "O", + "\u1ED3": "o", + "\u1E50": "O", + "\u1E51": "o", + "\u1EEA": "U", + "\u1EEB": "u", + "\u1E80": "W", + "\u1E81": "w", + "\u1EF2": "Y", + "\u1EF3": "y", + "\u0200": "A", + "\u0201": "a", + "\u0204": "E", + "\u0205": "e", + "\u0208": "I", + "\u0209": "i", + "\u020C": "O", + "\u020D": "o", + "\u0210": "R", + "\u0211": "r", + "\u0214": "U", + "\u0215": "u", + "B\u030C": "B", + "b\u030C": "b", + "\u010C\u0323": "C", + "\u010D\u0323": "c", + "\xCA\u030C": "E", + "\xEA\u030C": "e", + "F\u030C": "F", + "f\u030C": "f", + "\u01E6": "G", + "\u01E7": "g", + "\u021E": "H", + "\u021F": "h", + "J\u030C": "J", + "\u01F0": "j", + "\u01E8": "K", + "\u01E9": "k", + "M\u030C": "M", + "m\u030C": "m", + "P\u030C": "P", + "p\u030C": "p", + "Q\u030C": "Q", + "q\u030C": "q", + "\u0158\u0329": "R", + "\u0159\u0329": "r", + "\u1E66": "S", + "\u1E67": "s", + "V\u030C": "V", + "v\u030C": "v", + "W\u030C": "W", + "w\u030C": "w", + "X\u030C": "X", + "x\u030C": "x", + "Y\u030C": "Y", + "y\u030C": "y", + "A\u0327": "A", + "a\u0327": "a", + "B\u0327": "B", + "b\u0327": "b", + "\u1E10": "D", + "\u1E11": "d", + "\u0228": "E", + "\u0229": "e", + "\u0190\u0327": "E", + "\u025B\u0327": "e", + "\u1E28": "H", + "\u1E29": "h", + "I\u0327": "I", + "i\u0327": "i", + "\u0197\u0327": "I", + "\u0268\u0327": "i", + "M\u0327": "M", + "m\u0327": "m", + "O\u0327": "O", + "o\u0327": "o", + "Q\u0327": "Q", + "q\u0327": "q", + "U\u0327": "U", + "u\u0327": "u", + "X\u0327": "X", + "x\u0327": "x", + "Z\u0327": "Z", + "z\u0327": "z", + "\u0439": "\u0438", + "\u0419": "\u0418", + "\u0451": "\u0435", + "\u0401": "\u0415" + }; + var chars = Object.keys(characterMap).join("|"); + var allAccents = new RegExp(chars, "g"); + var firstAccent = new RegExp(chars, ""); + function matcher(match2) { + return characterMap[match2]; + } + var removeAccents2 = function(string) { + return string.replace(allAccents, matcher); + }; + var hasAccents = function(string) { + return !!string.match(firstAccent); + }; + module.exports = removeAccents2; + module.exports.has = hasAccents; + module.exports.remove = removeAccents2; + } +}); + +// node_modules/fast-deep-equal/es6/index.js +var require_es6 = __commonJS({ + "node_modules/fast-deep-equal/es6/index.js"(exports, module) { + "use strict"; + module.exports = function equal(a2, b2) { + if (a2 === b2) return true; + if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { + if (a2.constructor !== b2.constructor) return false; + var length, i2, keys; + if (Array.isArray(a2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (!equal(a2[i2], b2[i2])) return false; + return true; + } + if (a2 instanceof Map && b2 instanceof Map) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + for (i2 of a2.entries()) + if (!equal(i2[1], b2.get(i2[0]))) return false; + return true; + } + if (a2 instanceof Set && b2 instanceof Set) { + if (a2.size !== b2.size) return false; + for (i2 of a2.entries()) + if (!b2.has(i2[0])) return false; + return true; + } + if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { + length = a2.length; + if (length != b2.length) return false; + for (i2 = length; i2-- !== 0; ) + if (a2[i2] !== b2[i2]) return false; + return true; + } + if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; + if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); + if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); + keys = Object.keys(a2); + length = keys.length; + if (length !== Object.keys(b2).length) return false; + for (i2 = length; i2-- !== 0; ) + if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; + for (i2 = length; i2-- !== 0; ) { + var key = keys[i2]; + if (!equal(a2[key], b2[key])) return false; + } + return true; + } + return a2 !== a2 && b2 !== b2; + }; + } +}); + +// package-external:@wordpress/date +var require_date = __commonJS({ + "package-external:@wordpress/date"(exports, module) { + module.exports = window.wp.date; + } +}); + +// package-external:@wordpress/warning +var require_warning = __commonJS({ + "package-external:@wordpress/warning"(exports, module) { + module.exports = window.wp.warning; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/editor +var require_editor = __commonJS({ + "package-external:@wordpress/editor"(exports, module) { + module.exports = window.wp.editor; + } +}); + +// package-external:@wordpress/notices +var require_notices = __commonJS({ + "package-external:@wordpress/notices"(exports, module) { + module.exports = window.wp.notices; + } +}); + +// package-external:@wordpress/blocks +var require_blocks = __commonJS({ + "package-external:@wordpress/blocks"(exports, module) { + module.exports = window.wp.blocks; + } +}); + +// routes/template-part-list/stage.tsx +import { + useParams, + useNavigate, + useSearch, + Link, + useInvalidate +} from "@wordpress/route"; + +// node_modules/dequal/dist/index.mjs +var has = Object.prototype.hasOwnProperty; +function find(iter, tar, key) { + for (key of iter.keys()) { + if (dequal(key, tar)) return key; + } +} +function dequal(foo, bar) { + var ctor, len, tmp; + if (foo === bar) return true; + if (foo && bar && (ctor = foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + if (ctor === Array) { + if ((len = foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])) ; + } + return len === -1; + } + if (ctor === Set) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!bar.has(tmp)) return false; + } + return true; + } + if (ctor === Map) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len[0]; + if (tmp && typeof tmp === "object") { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!dequal(len[1], bar.get(tmp))) { + return false; + } + } + return true; + } + if (ctor === ArrayBuffer) { + foo = new Uint8Array(foo); + bar = new Uint8Array(bar); + } else if (ctor === DataView) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo.getInt8(len) === bar.getInt8(len)) ; + } + return len === -1; + } + if (ArrayBuffer.isView(foo)) { + if ((len = foo.byteLength) === bar.byteLength) { + while (len-- && foo[len] === bar[len]) ; + } + return len === -1; + } + if (!ctor || typeof foo === "object") { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + return foo !== foo && bar !== bar; +} + +// packages/views/build-module/use-view.mjs +var import_element = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + const preserved = (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} +function stripActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + const { [key]: _, ...rest } = result; + result = rest; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f2) => f2.field) + ); + result = { + ...result, + filters: (view.filters ?? []).filter( + (f2) => !activeFields.has(f2.field) + ) + }; + } + if (activeViewOverrides.sort && view.sort?.field === activeViewOverrides.sort.field && view.sort?.direction === activeViewOverrides.sort.direction) { + result = { + ...result, + sort: defaultView?.sort + }; + } + if (activeViewOverrides.layout && "layout" in result && result.layout) { + const layout = { ...result.layout }; + for (const key of Object.keys(activeViewOverrides.layout)) { + delete layout[key]; + } + result = { + ...result, + layout: Object.keys(layout).length > 0 ? layout : void 0 + }; + } + if (activeViewOverrides.groupBy && "groupBy" in result) { + const { groupBy: _, ...rest } = result; + result = rest; + } + return result; +} + +// packages/views/build-module/use-view.mjs +function omit(obj, keys) { + const result = { ...obj }; + for (const key of keys) { + delete result[key]; + } + return result; +} +function useView(config) { + const { + kind, + name, + slug, + defaultView, + activeViewOverrides, + queryParams, + onChangeQueryParams + } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data.useSelect)( + (select2) => { + return select2(import_preferences.store).get( + "core/views", + preferenceKey + ); + }, + [preferenceKey] + ); + const { set } = (0, import_data.useDispatch)(import_preferences.store); + const baseView = persistedView ?? defaultView; + const page = Number(queryParams?.page ?? baseView.page ?? 1); + const search = queryParams?.search ?? baseView.search ?? ""; + const view = (0, import_element.useMemo)(() => { + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); + }, [baseView, page, search, activeViewOverrides, defaultView]); + const isModified = !!persistedView; + const updateView = (0, import_element.useCallback)( + (newView) => { + const urlParams = { + page: newView?.page, + search: newView?.search + }; + const preferenceView = stripActiveViewOverrides( + omit(newView, ["page", "search"]), + activeViewOverrides, + defaultView + ); + if (onChangeQueryParams && !dequal(urlParams, { page, search })) { + onChangeQueryParams(urlParams); + } + const comparableBaseView = stripActiveViewOverrides( + baseView, + activeViewOverrides, + defaultView + ); + const comparableDefaultView = stripActiveViewOverrides( + defaultView, + activeViewOverrides, + defaultView + ); + if (!dequal(comparableBaseView, preferenceView)) { + if (dequal(preferenceView, comparableDefaultView)) { + set("core/views", preferenceKey, void 0); + } else { + set("core/views", preferenceKey, preferenceView); + } + } + }, + [ + onChangeQueryParams, + page, + search, + baseView, + defaultView, + activeViewOverrides, + set, + preferenceKey + ] + ); + const resetToDefault = (0, import_element.useCallback)(() => { + set("core/views", preferenceKey, void 0); + }, [preferenceKey, set]); + return { + view, + isModified, + updateView, + resetToDefault + }; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); + +// packages/dataviews/build-module/dataviews/index.mjs +var import_element56 = __toESM(require_element(), 1); +var import_compose12 = __toESM(require_compose(), 1); + +// node_modules/@base-ui/utils/esm/useRefWithInit.js +var React2 = __toESM(require_react(), 1); +var UNINITIALIZED = {}; +function useRefWithInit(init2, initArg) { + const ref = React2.useRef(UNINITIALIZED); + if (ref.current === UNINITIALIZED) { + ref.current = init2(initArg); + } + return ref; +} + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var React5 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/useMergedRefs.js +function useMergedRefs(a2, b2, c2, d2) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChange(forkRef, a2, b2, c2, d2)) { + update(forkRef, [a2, b2, c2, d2]); + } + return forkRef.callback; +} +function useMergedRefsN(refs) { + const forkRef = useRefWithInit(createForkRef).current; + if (didChangeN(forkRef, refs)) { + update(forkRef, refs); + } + return forkRef.callback; +} +function createForkRef() { + return { + callback: null, + cleanup: null, + refs: [] + }; +} +function didChange(forkRef, a2, b2, c2, d2) { + return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; +} +function didChangeN(forkRef, newRefs) { + return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]); +} +function update(forkRef, refs) { + forkRef.refs = refs; + if (refs.every((ref) => ref == null)) { + forkRef.callback = null; + return; + } + forkRef.callback = (instance) => { + if (forkRef.cleanup) { + forkRef.cleanup(); + forkRef.cleanup = null; + } + if (instance != null) { + const cleanupCallbacks = Array(refs.length).fill(null); + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const refCleanup = ref(instance); + if (typeof refCleanup === "function") { + cleanupCallbacks[i2] = refCleanup; + } + break; + } + case "object": { + ref.current = instance; + break; + } + default: + } + } + forkRef.cleanup = () => { + for (let i2 = 0; i2 < refs.length; i2 += 1) { + const ref = refs[i2]; + if (ref == null) { + continue; + } + switch (typeof ref) { + case "function": { + const cleanupCallback = cleanupCallbacks[i2]; + if (typeof cleanupCallback === "function") { + cleanupCallback(); + } else { + ref(null); + } + break; + } + case "object": { + ref.current = null; + break; + } + default: + } + } + }; + } + }; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +var React4 = __toESM(require_react(), 1); + +// node_modules/@base-ui/utils/esm/reactVersion.js +var React3 = __toESM(require_react(), 1); +var majorVersion = parseInt(React3.version, 10); +function isReactVersionAtLeast(reactVersionToCheck) { + return majorVersion >= reactVersionToCheck; +} + +// node_modules/@base-ui/utils/esm/getReactElementRef.js +function getReactElementRef(element) { + if (!/* @__PURE__ */ React4.isValidElement(element)) { + return null; + } + const reactElement = element; + const propsWithRef = reactElement.props; + return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; +} + +// node_modules/@base-ui/utils/esm/mergeObjects.js +function mergeObjects(a2, b2) { + if (a2 && !b2) { + return a2; + } + if (!a2 && b2) { + return b2; + } + if (a2 || b2) { + return { + ...a2, + ...b2 + }; + } + return void 0; +} + +// node_modules/@base-ui/react/esm/utils/getStateAttributesProps.js +function getStateAttributesProps(state, customMapping) { + const props = {}; + for (const key in state) { + const value = state[key]; + if (customMapping?.hasOwnProperty(key)) { + const customProps = customMapping[key](value); + if (customProps != null) { + Object.assign(props, customProps); + } + continue; + } + if (value === true) { + props[`data-${key.toLowerCase()}`] = ""; + } else if (value) { + props[`data-${key.toLowerCase()}`] = value.toString(); + } + } + return props; +} + +// node_modules/@base-ui/react/esm/utils/resolveClassName.js +function resolveClassName(className, state) { + return typeof className === "function" ? className(state) : className; +} + +// node_modules/@base-ui/react/esm/utils/resolveStyle.js +function resolveStyle(style, state) { + return typeof style === "function" ? style(state) : style; +} + +// node_modules/@base-ui/react/esm/merge-props/mergeProps.js +var EMPTY_PROPS = {}; +function mergeProps(a2, b2, c2, d2, e2) { + let merged = { + ...resolvePropsGetter(a2, EMPTY_PROPS) + }; + if (b2) { + merged = mergeOne(merged, b2); + } + if (c2) { + merged = mergeOne(merged, c2); + } + if (d2) { + merged = mergeOne(merged, d2); + } + if (e2) { + merged = mergeOne(merged, e2); + } + return merged; +} +function mergePropsN(props) { + if (props.length === 0) { + return EMPTY_PROPS; + } + if (props.length === 1) { + return resolvePropsGetter(props[0], EMPTY_PROPS); + } + let merged = { + ...resolvePropsGetter(props[0], EMPTY_PROPS) + }; + for (let i2 = 1; i2 < props.length; i2 += 1) { + merged = mergeOne(merged, props[i2]); + } + return merged; +} +function mergeOne(merged, inputProps) { + if (isPropsGetter(inputProps)) { + return inputProps(merged); + } + return mutablyMergeInto(merged, inputProps); +} +function mutablyMergeInto(mergedProps, externalProps) { + if (!externalProps) { + return mergedProps; + } + for (const propName in externalProps) { + const externalPropValue = externalProps[propName]; + switch (propName) { + case "style": { + mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); + break; + } + case "className": { + mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); + break; + } + default: { + if (isEventHandler(propName, externalPropValue)) { + mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); + } else { + mergedProps[propName] = externalPropValue; + } + } + } + } + return mergedProps; +} +function isEventHandler(key, value) { + const code0 = key.charCodeAt(0); + const code1 = key.charCodeAt(1); + const code2 = key.charCodeAt(2); + return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); +} +function isPropsGetter(inputProps) { + return typeof inputProps === "function"; +} +function resolvePropsGetter(inputProps, previousProps) { + if (isPropsGetter(inputProps)) { + return inputProps(previousProps); + } + return inputProps ?? EMPTY_PROPS; +} +function mergeEventHandlers(ourHandler, theirHandler) { + if (!theirHandler) { + return ourHandler; + } + if (!ourHandler) { + return theirHandler; + } + return (event) => { + if (isSyntheticEvent(event)) { + const baseUIEvent = event; + makeEventPreventable(baseUIEvent); + const result2 = theirHandler(baseUIEvent); + if (!baseUIEvent.baseUIHandlerPrevented) { + ourHandler?.(baseUIEvent); + } + return result2; + } + const result = theirHandler(event); + ourHandler?.(event); + return result; + }; +} +function makeEventPreventable(event) { + event.preventBaseUIHandler = () => { + event.baseUIHandlerPrevented = true; + }; + return event; +} +function mergeClassNames(ourClassName, theirClassName) { + if (theirClassName) { + if (ourClassName) { + return theirClassName + " " + ourClassName; + } + return theirClassName; + } + return ourClassName; +} +function isSyntheticEvent(event) { + return event != null && typeof event === "object" && "nativeEvent" in event; +} + +// node_modules/@base-ui/utils/esm/empty.js +var EMPTY_ARRAY = Object.freeze([]); +var EMPTY_OBJECT = Object.freeze({}); + +// node_modules/@base-ui/react/esm/utils/useRenderElement.js +var import_react = __toESM(require_react(), 1); +function useRenderElement(element, componentProps, params = {}) { + const renderProp = componentProps.render; + const outProps = useRenderElementProps(componentProps, params); + if (params.enabled === false) { + return null; + } + const state = params.state ?? EMPTY_OBJECT; + return evaluateRenderProp(element, renderProp, outProps, state); +} +function useRenderElementProps(componentProps, params = {}) { + const { + className: classNameProp, + style: styleProp, + render: renderProp + } = componentProps; + const { + state = EMPTY_OBJECT, + ref, + props, + stateAttributesMapping, + enabled = true + } = params; + const className = enabled ? resolveClassName(classNameProp, state) : void 0; + const style = enabled ? resolveStyle(styleProp, state) : void 0; + const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; + const outProps = enabled ? mergeObjects(stateProps, Array.isArray(props) ? mergePropsN(props) : props) ?? EMPTY_OBJECT : EMPTY_OBJECT; + if (typeof document !== "undefined") { + if (!enabled) { + useMergedRefs(null, null); + } else if (Array.isArray(ref)) { + outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); + } else { + outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); + } + } + if (!enabled) { + return EMPTY_OBJECT; + } + if (className !== void 0) { + outProps.className = mergeClassNames(outProps.className, className); + } + if (style !== void 0) { + outProps.style = mergeObjects(outProps.style, style); + } + return outProps; +} +function evaluateRenderProp(element, render4, props, state) { + if (render4) { + if (typeof render4 === "function") { + return render4(props, state); + } + const mergedProps = mergeProps(props, render4.props); + mergedProps.ref = props.ref; + return /* @__PURE__ */ React5.cloneElement(render4, mergedProps); + } + if (element) { + if (typeof element === "string") { + return renderTag(element, props); + } + } + throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage(8)); +} +function renderTag(Tag, props) { + if (Tag === "button") { + return /* @__PURE__ */ (0, import_react.createElement)("button", { + type: "button", + ...props, + key: props.key + }); + } + if (Tag === "img") { + return /* @__PURE__ */ (0, import_react.createElement)("img", { + alt: "", + ...props, + key: props.key + }); + } + return /* @__PURE__ */ React5.createElement(Tag, props); +} + +// node_modules/@base-ui/react/esm/use-render/useRender.js +function useRender(params) { + return useRenderElement(params.defaultTagName ?? "div", params, params); +} + +// node_modules/clsx/dist/clsx.mjs +function r(e2) { + var t2, f2, n2 = ""; + if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; + else if ("object" == typeof e2) if (Array.isArray(e2)) { + var o2 = e2.length; + for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2); + } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); + return n2; +} +function clsx() { + for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); + return n2; +} +var clsx_default = clsx; + +// packages/icons/build-module/library/arrow-down.mjs +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) }); + +// packages/icons/build-module/library/arrow-left.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) }); + +// packages/icons/build-module/library/arrow-right.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) }); + +// packages/icons/build-module/library/arrow-up.mjs +var import_primitives4 = __toESM(require_primitives(), 1); +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) }); + +// packages/icons/build-module/library/block-table.mjs +var import_primitives5 = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) }); + +// packages/icons/build-module/library/category.mjs +var import_primitives6 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var category_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z" }) }); + +// packages/icons/build-module/library/check.mjs +var import_primitives7 = __toESM(require_primitives(), 1); +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +var check_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) }); + +// packages/icons/build-module/library/close-small.mjs +var import_primitives8 = __toESM(require_primitives(), 1); +var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); +var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) }); + +// packages/icons/build-module/library/cog.mjs +var import_primitives9 = __toESM(require_primitives(), 1); +var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); +var cog_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z" }) }); + +// packages/icons/build-module/library/envelope.mjs +var import_primitives10 = __toESM(require_primitives(), 1); +var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); +var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z" }) }); + +// packages/icons/build-module/library/error.mjs +var import_primitives11 = __toESM(require_primitives(), 1); +var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); +var error_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z" }) }); + +// packages/icons/build-module/library/footer.mjs +var import_primitives12 = __toESM(require_primitives(), 1); +var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); +var footer_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { fillRule: "evenodd", d: "M18 5.5h-8v8h8.5V6a.5.5 0 00-.5-.5zm-9.5 8h-3V6a.5.5 0 01.5-.5h2.5v8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" }) }); + +// packages/icons/build-module/library/format-list-bullets-rtl.mjs +var import_primitives13 = __toESM(require_primitives(), 1); +var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) }); + +// packages/icons/build-module/library/format-list-bullets.mjs +var import_primitives14 = __toESM(require_primitives(), 1); +var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); +var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) }); + +// packages/icons/build-module/library/funnel.mjs +var import_primitives15 = __toESM(require_primitives(), 1); +var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); +var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) }); + +// packages/icons/build-module/library/header.mjs +var import_primitives16 = __toESM(require_primitives(), 1); +var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); +var header_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M18.5 10.5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" }) }); + +// packages/icons/build-module/library/link.mjs +var import_primitives17 = __toESM(require_primitives(), 1); +var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); +var link_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) }); + +// packages/icons/build-module/library/mobile.mjs +var import_primitives18 = __toESM(require_primitives(), 1); +var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); +var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) }); + +// packages/icons/build-module/library/more-vertical.mjs +var import_primitives19 = __toESM(require_primitives(), 1); +var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); +var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); + +// packages/icons/build-module/library/navigation-overlay.mjs +var import_primitives20 = __toESM(require_primitives(), 1); +var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); +var navigation_overlay_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.Path, { d: "M18.5 10a1.5 1.5 0 0 1 1.5 1.5v7a1.5 1.5 0 0 1-1.5 1.5h-7a1.5 1.5 0 0 1-1.5-1.5v-7a1.5 1.5 0 0 1 1.5-1.5zM16 4a2 2 0 0 1 2 2v2h-1.5V6a.5.5 0 0 0-.5-.5H6a.5.5 0 0 0-.5.5v3H8v1.5H5.5V16a.5.5 0 0 0 .5.5h2V18H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z" }) }); + +// packages/icons/build-module/library/next.mjs +var import_primitives21 = __toESM(require_primitives(), 1); +var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); +var next_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); + +// packages/icons/build-module/library/previous.mjs +var import_primitives22 = __toESM(require_primitives(), 1); +var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); +var previous_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); + +// packages/icons/build-module/library/scheduled.mjs +var import_primitives23 = __toESM(require_primitives(), 1); +var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); +var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z" }) }); + +// packages/icons/build-module/library/search.mjs +var import_primitives24 = __toESM(require_primitives(), 1); +var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); +var search_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) }); + +// packages/icons/build-module/library/seen.mjs +var import_primitives25 = __toESM(require_primitives(), 1); +var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); +var seen_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) }); + +// packages/icons/build-module/library/sidebar.mjs +var import_primitives26 = __toESM(require_primitives(), 1); +var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); +var sidebar_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.Path, { d: "M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" }) }); + +// packages/icons/build-module/library/symbol-filled.mjs +var import_primitives27 = __toESM(require_primitives(), 1); +var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); +var symbol_filled_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.Path, { d: "M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-17.6 1L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z" }) }); + +// packages/icons/build-module/library/unseen.mjs +var import_primitives28 = __toESM(require_primitives(), 1); +var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); +var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) }); + +// packages/ui/build-module/stack/stack.mjs +var import_element2 = __toESM(require_element(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='71d20935c2']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "71d20935c2"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")); + document.head.appendChild(style); +} +var style_default = { "stack": "_19ce0419607e1896__stack" }; +var gapTokens = { + xs: "var(--wpds-dimension-gap-xs, 4px)", + sm: "var(--wpds-dimension-gap-sm, 8px)", + md: "var(--wpds-dimension-gap-md, 12px)", + lg: "var(--wpds-dimension-gap-lg, 16px)", + xl: "var(--wpds-dimension-gap-xl, 24px)", + "2xl": "var(--wpds-dimension-gap-2xl, 32px)", + "3xl": "var(--wpds-dimension-gap-3xl, 40px)" +}; +var Stack = (0, import_element2.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) { + const style = { + gap: gap && gapTokens[gap], + alignItems: align, + justifyContent: justify, + flexDirection: direction, + flexWrap: wrap + }; + const element = useRender({ + render: render4, + ref, + props: mergeProps(props, { style, className: style_default.stack }) + }); + return element; +}); + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var import_element3 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/constants.mjs +var import_i18n = __toESM(require_i18n(), 1); +var OPERATOR_IS_ANY = "isAny"; +var OPERATOR_IS_NONE = "isNone"; +var OPERATOR_IS_ALL = "isAll"; +var OPERATOR_IS_NOT_ALL = "isNotAll"; +var OPERATOR_BETWEEN = "between"; +var OPERATOR_IN_THE_PAST = "inThePast"; +var OPERATOR_OVER = "over"; +var OPERATOR_IS = "is"; +var OPERATOR_IS_NOT = "isNot"; +var OPERATOR_LESS_THAN = "lessThan"; +var OPERATOR_GREATER_THAN = "greaterThan"; +var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual"; +var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual"; +var OPERATOR_BEFORE = "before"; +var OPERATOR_AFTER = "after"; +var OPERATOR_BEFORE_INC = "beforeInc"; +var OPERATOR_AFTER_INC = "afterInc"; +var OPERATOR_CONTAINS = "contains"; +var OPERATOR_NOT_CONTAINS = "notContains"; +var OPERATOR_STARTS_WITH = "startsWith"; +var OPERATOR_ON = "on"; +var OPERATOR_NOT_ON = "notOn"; +var SORTING_DIRECTIONS = ["asc", "desc"]; +var sortArrows = { asc: "\u2191", desc: "\u2193" }; +var sortValues = { asc: "ascending", desc: "descending" }; +var sortLabels = { + asc: (0, import_i18n.__)("Sort ascending"), + desc: (0, import_i18n.__)("Sort descending") +}; +var sortIcons = { + asc: arrow_up_default, + desc: arrow_down_default +}; +var LAYOUT_TABLE = "table"; +var LAYOUT_GRID = "grid"; +var LAYOUT_LIST = "list"; +var LAYOUT_ACTIVITY = "activity"; +var LAYOUT_PICKER_GRID = "pickerGrid"; +var LAYOUT_PICKER_TABLE = "pickerTable"; + +// packages/dataviews/build-module/components/dataviews-context/index.mjs +var DataViewsContext = (0, import_element3.createContext)({ + view: { type: LAYOUT_TABLE }, + onChangeView: () => { + }, + fields: [], + data: [], + paginationInfo: { + totalItems: 0, + totalPages: 0 + }, + selection: [], + onChangeSelection: () => { + }, + setOpenedFilter: () => { + }, + openedFilter: null, + getItemId: (item) => item.id, + isItemClickable: () => true, + renderItemLink: void 0, + containerWidth: 0, + containerRef: (0, import_element3.createRef)(), + resizeObserverRef: () => { + }, + defaultLayouts: { list: {}, grid: {}, table: {} }, + filters: [], + isShowingFilter: false, + setIsShowingFilter: () => { + }, + hasInitiallyLoaded: false, + hasInfiniteScrollHandler: false, + config: { + perPageSizes: [] + } +}); +DataViewsContext.displayName = "DataViewsContext"; +var dataviews_context_default = DataViewsContext; + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var import_i18n21 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_i18n9 = __toESM(require_i18n(), 1); +var import_components6 = __toESM(require_components(), 1); +var import_element11 = __toESM(require_element(), 1); +var import_keycodes = __toESM(require_keycodes(), 1); + +// packages/dataviews/build-module/components/dataviews-selection-checkbox/index.mjs +var import_components = __toESM(require_components(), 1); +var import_i18n2 = __toESM(require_i18n(), 1); +var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); +function DataViewsSelectionCheckbox({ + selection, + onChangeSelection, + item, + getItemId: getItemId2, + titleField, + disabled, + ...extraProps +}) { + const id = getItemId2(item); + const checked = !disabled && selection.includes(id); + const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n2.__)("(no title)"); + return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( + import_components.CheckboxControl, + { + className: "dataviews-selection-checkbox", + "aria-label": selectionLabel, + "aria-disabled": disabled, + checked, + onChange: () => { + if (disabled) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + }, + ...extraProps + } + ); +} + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_components2 = __toESM(require_components(), 1); +var import_i18n3 = __toESM(require_i18n(), 1); +var import_element4 = __toESM(require_element(), 1); +var import_data3 = __toESM(require_data(), 1); +var import_compose = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/lock-unlock.mjs +var import_private_apis = __toESM(require_private_apis(), 1); +var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/dataviews" +); + +// packages/dataviews/build-module/components/dataviews-item-actions/index.mjs +var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); +var { Menu, kebabCase } = unlock(import_components2.privateApis); +function ButtonTrigger({ + action, + onClick, + items, + variant +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components2.Button, + { + disabled: !!action.disabled, + accessibleWhenDisabled: true, + size: "compact", + variant, + onClick, + children: label + } + ); +} +function MenuItemTrigger({ + action, + onClick, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.ItemLabel, { children: label }) }); +} +function ActionModal({ + action, + items, + closeModal +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader; + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components2.Modal, + { + title: modalHeader || label, + __experimentalHideHeader: !!action.hideModalHeader, + onRequestClose: closeModal, + focusOnMount: action.modalFocusOnMount ?? true, + size: action.modalSize || "medium", + overlayClassName: `dataviews-action-modal dataviews-action-modal__${kebabCase( + action.id + )}`, + children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(action.RenderModal, { items, closeModal }) + } + ); +} +function ActionsMenuGroup({ + actions, + item, + registry, + setActiveModalAction +}) { + const { primaryActions, regularActions } = (0, import_element4.useMemo)(() => { + return actions.reduce( + (acc, action) => { + (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action); + return acc; + }, + { + primaryActions: [], + regularActions: [] + } + ); + }, [actions]); + const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + MenuItemTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item] + }, + action.id + )); + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Menu.Group, { children: [ + renderActionGroup(primaryActions), + renderActionGroup(regularActions) + ] }); +} +function ItemActions({ + item, + actions, + isCompact +}) { + const registry = (0, import_data3.useRegistry)(); + const { primaryActions, eligibleActions } = (0, import_element4.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isCompact) { + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + isSmall: true, + registry + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)( + Stack, + { + direction: "row", + justify: "flex-end", + className: "dataviews-item-actions", + style: { + flexShrink: 0, + width: "auto" + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport) && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + CompactItemActions, + { + item, + actions: eligibleActions, + registry + } + ) + ] + } + ); +} +function CompactItemActions({ + item, + actions, + isSmall, + registry +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)( + null + ); + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Menu, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + Menu.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + import_components2.Button, + { + size: isSmall ? "small" : "compact", + icon: more_vertical_default, + label: (0, import_i18n3.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + className: "dataviews-all-actions-button" + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ActionsMenuGroup, + { + actions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} +function PrimaryActions({ + item, + actions, + registry, + buttonVariant +}) { + const [activeModalAction, setActiveModalAction] = (0, import_element4.useState)(null); + const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); + if (isMobileViewport) { + return null; + } + if (!Array.isArray(actions) || actions.length === 0) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [ + actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ButtonTrigger, + { + action, + onClick: () => { + if ("RenderModal" in action) { + setActiveModalAction(action); + return; + } + action.callback([item], { registry }); + }, + items: [item], + variant: buttonVariant + }, + action.id + )), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_components3 = __toESM(require_components(), 1); +var import_i18n5 = __toESM(require_i18n(), 1); +var import_element5 = __toESM(require_element(), 1); +var import_data4 = __toESM(require_data(), 1); +var import_compose2 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/utils/get-footer-message.mjs +var import_i18n4 = __toESM(require_i18n(), 1); +function getFooterMessage(selectionCount, itemsCount, totalItems) { + if (selectionCount > 0) { + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item selected", "%d Items selected", selectionCount), + selectionCount + ); + } + if (totalItems > itemsCount) { + return (0, import_i18n4.sprintf)( + /* translators: %1$d: number of items. %2$d: total number of items. */ + (0, import_i18n4._n)("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems), + itemsCount, + totalItems + ); + } + return (0, import_i18n4.sprintf)( + /* translators: %d: number of items. */ + (0, import_i18n4._n)("%d Item", "%d Items", itemsCount), + itemsCount + ); +} + +// packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs +var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); +function ActionWithModal({ + action, + items, + ActionTriggerComponent +}) { + const [isModalOpen, setIsModalOpen] = (0, import_element5.useState)(false); + const actionTriggerProps = { + action, + onClick: () => { + setIsModalOpen(true); + }, + items + }; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ActionTriggerComponent, { ...actionTriggerProps }), + isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + ActionModal, + { + action, + items, + closeModal: () => setIsModalOpen(false) + } + ) + ] }); +} +function useHasAPossibleBulkAction(actions, item) { + return (0, import_element5.useMemo)(() => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }, [actions, item]); +} +function useSomeItemHasAPossibleBulkAction(actions, data) { + return (0, import_element5.useMemo)(() => { + return data.some((item) => { + return actions.some((action) => { + return action.supportsBulk && (!action.isEligible || action.isEligible(item)); + }); + }); + }, [actions, data]); +} +function BulkSelectionCheckbox({ + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 +}) { + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return actions.some( + (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) + ); + }); + }, [data, actions]); + const selectedItems = data.filter( + (item) => selection.includes(getItemId2(item)) && selectableItems.includes(item) + ); + const areAllSelected = selectedItems.length === selectableItems.length; + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components3.CheckboxControl, + { + className: "dataviews-view-table-selection-checkbox", + checked: areAllSelected, + indeterminate: !areAllSelected && !!selectedItems.length, + onChange: () => { + if (areAllSelected) { + onChangeSelection([]); + } else { + onChangeSelection( + selectableItems.map((item) => getItemId2(item)) + ); + } + }, + "aria-label": areAllSelected ? (0, import_i18n5.__)("Deselect all") : (0, import_i18n5.__)("Select all") + } + ); +} +function ActionTrigger({ + action, + onClick, + isBusy, + items +}) { + const label = typeof action.label === "string" ? action.label : action.label(items); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + if (isMobile) { + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + label, + icon: action.icon, + size: "compact", + onClick, + isBusy + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components3.Button, + { + disabled: isBusy, + accessibleWhenDisabled: true, + size: "compact", + onClick, + isBusy, + children: label + } + ); +} +var EMPTY_ARRAY2 = []; +function ActionButton({ + action, + selectedItems, + actionInProgress, + setActionInProgress +}) { + const registry = (0, import_data4.useRegistry)(); + const selectedEligibleItems = (0, import_element5.useMemo)(() => { + return selectedItems.filter((item) => { + return !action.isEligible || action.isEligible(item); + }); + }, [action, selectedItems]); + if ("RenderModal" in action) { + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + ActionWithModal, + { + action, + items: selectedEligibleItems, + ActionTriggerComponent: ActionTrigger + }, + action.id + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + ActionTrigger, + { + action, + onClick: async () => { + setActionInProgress(action.id); + await action.callback(selectedItems, { + registry + }); + setActionInProgress(null); + }, + items: selectedEligibleItems, + isBusy: actionInProgress === action.id + }, + action.id + ); +} +function renderFooterContent(data, actions, getItemId2, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) { + const message2 = getFooterMessage( + selection.length, + data.length, + paginationInfo.totalItems + ); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__container", + gap: "md", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ), + /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }), + /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-bulk-actions-footer__action-buttons", + gap: "xs", + children: [ + actionsToShow.map((action) => { + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + ActionButton, + { + action, + selectedItems, + actionInProgress, + setActionInProgress + }, + action.id + ); + }), + selectedItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + import_components3.Button, + { + icon: close_small_default, + showTooltip: true, + tooltipPosition: "top", + size: "compact", + label: (0, import_i18n5.__)("Cancel"), + disabled: !!actionInProgress, + accessibleWhenDisabled: false, + onClick: () => { + onChangeSelection(EMPTY_ARRAY2); + } + } + ) + ] + } + ) + ] + } + ); +} +function FooterContent({ + selection, + actions, + onChangeSelection, + data, + getItemId: getItemId2, + paginationInfo +}) { + const [actionInProgress, setActionInProgress] = (0, import_element5.useState)( + null + ); + const footerContentRef = (0, import_element5.useRef)(void 0); + const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); + const bulkActions = (0, import_element5.useMemo)( + () => actions.filter((action) => action.supportsBulk), + [actions] + ); + const selectableItems = (0, import_element5.useMemo)(() => { + return data.filter((item) => { + return bulkActions.some( + (action) => !action.isEligible || action.isEligible(item) + ); + }); + }, [data, bulkActions]); + const selectedItems = (0, import_element5.useMemo)(() => { + return data.filter( + (item) => selection.includes(getItemId2(item)) && selectableItems.includes(item) + ); + }, [selection, data, getItemId2, selectableItems]); + const actionsToShow = (0, import_element5.useMemo)( + () => actions.filter((action) => { + return action.supportsBulk && (!isMobile || action.icon) && selectedItems.some( + (item) => !action.isEligible || action.isEligible(item) + ); + }), + [actions, selectedItems, isMobile] + ); + if (!actionInProgress) { + if (footerContentRef.current) { + footerContentRef.current = void 0; + } + return renderFooterContent( + data, + actions, + getItemId2, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } else if (!footerContentRef.current) { + footerContentRef.current = renderFooterContent( + data, + actions, + getItemId2, + selection, + actionsToShow, + selectedItems, + actionInProgress, + setActionInProgress, + onChangeSelection, + paginationInfo + ); + } + return footerContentRef.current; +} +function BulkActionsFooter() { + const { + data, + selection, + actions = EMPTY_ARRAY2, + onChangeSelection, + getItemId: getItemId2, + paginationInfo + } = (0, import_element5.useContext)(dataviews_context_default); + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( + FooterContent, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2, + paginationInfo + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_i18n6 = __toESM(require_i18n(), 1); +var import_components4 = __toESM(require_components(), 1); +var import_element6 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/utils/get-hideable-fields.mjs +function getHideableFields(view, fields) { + const togglableFields = [ + view?.titleField, + view?.mediaField, + view?.descriptionField + ].filter(Boolean); + return fields.filter( + (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs +var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu2 } = unlock(import_components4.privateApis); +function WithMenuSeparators({ children }) { + return import_element6.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_element6.Fragment, { children: [ + i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Separator, {}), + child + ] }, i2)); +} +var _HeaderMenu = (0, import_element6.forwardRef)(function HeaderMenu({ + fieldId, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove = true, + canInsertLeft = true, + canInsertRight = true +}, ref) { + const visibleFieldIds = view.fields ?? []; + const index = visibleFieldIds?.indexOf(fieldId); + const isSorted = view.sort?.field === fieldId; + let isHidable = false; + let isSortable = false; + let canAddFilter = false; + let operators = []; + const field = fields.find((f2) => f2.id === fieldId); + const { setIsShowingFilter } = (0, import_element6.useContext)(dataviews_context_default); + if (!field) { + return null; + } + isHidable = field.enableHiding !== false; + isSortable = field.enableSorting !== false; + const header = field.header; + operators = !!field.filterBy && field.filterBy?.operators || []; + canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary; + if (!isSortable && !canMove && !isHidable && !canAddFilter) { + return header; + } + const hiddenFields = getHideableFields(view, fields).filter( + (f2) => !visibleFieldIds.includes(f2.id) + ); + const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length; + const isRtl = (0, import_i18n6.isRTL)(); + return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)( + Menu2.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + import_components4.Button, + { + size: "compact", + className: "dataviews-view-table-header-button", + ref, + variant: "tertiary" + } + ), + children: [ + header, + view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(WithMenuSeparators, { children: [ + isSortable && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map( + (direction) => { + const isChecked = view.sort && isSorted && view.sort.direction === direction; + const value = `${fieldId}-${direction}`; + return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + Menu2.RadioItem, + { + name: "view-table-sorting", + value, + checked: isChecked, + onChange: () => { + onChangeView({ + ...view, + sort: { + field: fieldId, + direction + }, + showLevels: false + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] }) + }, + value + ); + } + ) }), + canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: funnel_default }), + onClick: () => { + setOpenedFilter(fieldId); + setIsShowingFilter(true); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: fieldId, + value: void 0, + operator: operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Add filter") }) + } + ) }), + (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2.Group, { children: [ + canMove && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: arrow_left_default }), + disabled: isRtl ? index >= visibleFieldIds.length - 1 : index < 1, + onClick: () => { + const targetIndex = isRtl ? index + 1 : index - 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move left") }) + } + ), + canMove && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: arrow_right_default }), + disabled: isRtl ? index < 1 : index >= visibleFieldIds.length - 1, + onClick: () => { + const targetIndex = isRtl ? index - 1 : index + 1; + const newFields = [ + ...visibleFieldIds + ]; + newFields.splice(index, 1); + newFields.splice( + targetIndex, + 0, + fieldId + ); + onChangeView({ + ...view, + fields: newFields + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Move right") }) + } + ), + canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert left") }) }), + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index + 1 : index; + return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Insert right") }) }), + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { + const insertIndex = isRtl ? index : index + 1; + return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + Menu2.Item, + { + onClick: () => { + onChangeView({ + ...view, + fields: [ + ...visibleFieldIds.slice( + 0, + insertIndex + ), + hiddenField.id, + ...visibleFieldIds.slice( + insertIndex + ) + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) + }, + hiddenField.id + ); + }) }) + ] }), + isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( + Menu2.Item, + { + prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: unseen_default }), + onClick: () => { + onHide(field); + onChangeView({ + ...view, + fields: visibleFieldIds.filter( + (id) => id !== fieldId + ) + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n6.__)("Hide column") }) + } + ) + ] }) + ] }) }) + ] }); +}); +var ColumnHeaderMenu = _HeaderMenu; +var column_header_menu_default = ColumnHeaderMenu; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs +var import_element7 = __toESM(require_element(), 1); +var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); +function getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className +}) { + if (!isItemClickable(item) || !onClickItem) { + return { className }; + } + return { + className: className ? `${className} ${className}--clickable` : void 0, + role: "button", + tabIndex: 0, + onClick: (event) => { + event.stopPropagation(); + onClickItem(item); + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + onClickItem(item); + } + } + }; +} +function ItemClickWrapper({ + item, + isItemClickable, + onClickItem, + renderItemLink, + className, + children, + ...extraProps +}) { + if (!isItemClickable(item)) { + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className, ...extraProps, children }); + } + if (renderItemLink) { + const renderedElement = renderItemLink({ + item, + className: `${className} ${className}--clickable`, + ...extraProps, + children + }); + return (0, import_element7.cloneElement)(renderedElement, { + onClick: (event) => { + event.stopPropagation(); + if (renderedElement.props.onClick) { + renderedElement.props.onClick(event); + } + }, + onKeyDown: (event) => { + if (event.key === "Enter" || event.key === "" || event.key === " ") { + event.stopPropagation(); + if (renderedElement.props.onKeyDown) { + renderedElement.props.onKeyDown(event); + } + } + } + }); + } + const clickProps = getClickableItemProps({ + item, + isItemClickable, + onClickItem, + className + }); + return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { ...clickProps, ...extraProps, children }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/column-primary.mjs +var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); +function ColumnPrimary({ + item, + level, + titleField, + mediaField, + descriptionField, + onClickItem, + renderItemLink, + isItemClickable +}) { + return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Stack, { direction: "row", gap: "md", align: "flex-start", justify: "flex-start", children: [ + mediaField && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media", + "aria-label": isItemClickable(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "32px" } + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)( + Stack, + { + direction: "column", + align: "flex-start", + className: "dataviews-view-table__primary-column-content", + children: [ + titleField && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-table__cell-content-wrapper dataviews-title-field", + children: [ + level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "dataviews-view-table__level", children: [ + Array(level).fill("\u2014").join(" "), + "\xA0" + ] }), + /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(titleField.render, { item, field: titleField }) + ] + } + ), + descriptionField && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) + ] + } + ) + ] }); +} +var column_primary_default = ColumnPrimary; + +// packages/dataviews/build-module/components/dataviews-layouts/table/use-is-horizontal-scroll-end.mjs +var import_compose3 = __toESM(require_compose(), 1); +var import_element8 = __toESM(require_element(), 1); +var import_i18n7 = __toESM(require_i18n(), 1); +var isScrolledToEnd = (element) => { + if ((0, import_i18n7.isRTL)()) { + const scrollLeft = Math.abs(element.scrollLeft); + return scrollLeft <= 1; + } + return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1; +}; +function useIsHorizontalScrollEnd({ + scrollContainerRef, + enabled = false +}) { + const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element8.useState)(false); + const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)( + (0, import_element8.useCallback)(() => { + const scrollContainer = scrollContainerRef.current; + if (scrollContainer) { + setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer)); + } + }, [scrollContainerRef, setIsHorizontalScrollEnd]), + 200 + ); + (0, import_element8.useEffect)(() => { + if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) { + return () => { + }; + } + handleIsHorizontalScrollEnd(); + scrollContainerRef.current.addEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.addEventListener("resize", handleIsHorizontalScrollEnd); + return () => { + scrollContainerRef.current?.removeEventListener( + "scroll", + handleIsHorizontalScrollEnd + ); + window.removeEventListener("resize", handleIsHorizontalScrollEnd); + }; + }, [scrollContainerRef, enabled]); + return isHorizontalScrollEnd; +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/get-data-by-group.mjs +function getDataByGroup(data, groupByField) { + return data.reduce((groups, item) => { + const groupName = groupByField.getValue({ item }); + if (!groups.has(groupName)) { + groups.set(groupName, []); + } + groups.get(groupName)?.push(item); + return groups; + }, /* @__PURE__ */ new Map()); +} + +// packages/dataviews/build-module/components/dataviews-view-config/properties-section.mjs +var import_components5 = __toESM(require_components(), 1); +var import_i18n8 = __toESM(require_i18n(), 1); +var import_element9 = __toESM(require_element(), 1); +var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); +function FieldItem({ + field, + isVisible: isVisible2, + onToggleVisibility +}) { + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components5.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Stack, { direction: "row", gap: "sm", justify: "flex-start", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components5.Icon, { icon: check_default }) }), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "dataviews-view-config__label", children: field.label }) + ] }) }); +} +function isDefined(item) { + return !!item; +} +function PropertiesSection({ + showLabel = true +}) { + const { view, fields, onChangeView } = (0, import_element9.useContext)(dataviews_context_default); + const regularFields = getHideableFields(view, fields); + if (!regularFields?.length) { + return null; + } + const titleField = fields.find((f2) => f2.id === view.titleField); + const previewField2 = fields.find((f2) => f2.id === view.mediaField); + const descriptionField = fields.find( + (f2) => f2.id === view.descriptionField + ); + const lockedFields = [ + { + field: titleField, + isVisibleFlag: "showTitle" + }, + { + field: previewField2, + isVisibleFlag: "showMedia" + }, + { + field: descriptionField, + isVisibleFlag: "showDescription" + } + ].filter(({ field }) => isDefined(field)); + const visibleFieldIds = view.fields ?? []; + const visibleRegularFieldsCount = regularFields.filter( + (f2) => visibleFieldIds.includes(f2.id) + ).length; + const visibleLockedFields = lockedFields.filter( + ({ isVisibleFlag }) => ( + // @ts-expect-error + view[isVisibleFlag] ?? true + ) + ); + const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount; + const isSingleVisibleLockedField = totalVisibleFields === 1 && visibleLockedFields.length === 1; + return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Stack, { direction: "column", className: "dataviews-field-control", children: [ + showLabel && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components5.BaseControl.VisualLabel, { children: (0, import_i18n8.__)("Properties") }), + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-config__properties", + children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components5.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [ + lockedFields.map(({ field, isVisibleFlag }) => { + const isVisible2 = view[isVisibleFlag] ?? true; + const fieldToRender = isSingleVisibleLockedField && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + [isVisibleFlag]: !isVisible2 + }); + } + }, + field.id + ); + }), + regularFields.map((field) => { + const isVisible2 = visibleFieldIds.includes(field.id); + const fieldToRender = totalVisibleFields === 1 && isVisible2 ? { ...field, enableHiding: false } : field; + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( + FieldItem, + { + field: fieldToRender, + isVisible: isVisible2, + onToggleVisibility: () => { + onChangeView({ + ...view, + fields: isVisible2 ? visibleFieldIds.filter( + (fieldId) => fieldId !== field.id + ) : [...visibleFieldIds, field.id] + }); + } + }, + field.id + ); + }) + ] }) + } + ) + ] }); +} + +// packages/dataviews/build-module/hooks/use-delayed-loading.mjs +var import_element10 = __toESM(require_element(), 1); +function useDelayedLoading(isLoading, options = { delay: 400 }) { + const [showLoader, setShowLoader] = (0, import_element10.useState)(false); + (0, import_element10.useEffect)(() => { + if (!isLoading) { + return; + } + const timeout = setTimeout(() => { + setShowLoader(true); + }, options.delay); + return () => { + clearTimeout(timeout); + setShowLoader(false); + }; + }, [isLoading, options.delay]); + return showLoader; +} + +// packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs +var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); +function getEffectiveAlign(explicitAlign, fieldType) { + if (explicitAlign) { + return explicitAlign; + } + if (fieldType === "integer" || fieldType === "number") { + return "end"; + } + return void 0; +} +function TableColumnField({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(field.render, { item, field }) }); +} +function TableRow({ + hasBulkActions, + item, + level, + actions, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + isItemClickable, + onClickItem, + renderItemLink, + onChangeSelection, + isActionsColumnSticky, + posinset +}) { + const { paginationInfo } = (0, import_element11.useContext)(dataviews_context_default); + const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item); + const isSelected2 = hasPossibleBulkAction && selection.includes(id); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const isTouchDeviceRef = (0, import_element11.useRef)(false); + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": hasPossibleBulkAction && isSelected2, + "has-bulk-actions": hasPossibleBulkAction + }), + onTouchStart: () => { + isTouchDeviceRef.current = true; + }, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : void 0, + onMouseDown: (event) => { + const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) { + event?.preventDefault(); + } + }, + onClick: (event) => { + if (!hasPossibleBulkAction) { + return; + } + const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; + if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") { + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: !hasPossibleBulkAction + } + ) }) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + column_primary_default, + { + item, + level, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable, + onClickItem, + renderItemLink + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find((f2) => f2.id === column); + const effectiveAlign = getEffectiveAlign(align, field?.type); + return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + TableColumnField, + { + fields, + item, + column, + align: effectiveAlign + } + ) + }, + column + ); + }), + !!actions?.length && // Disable reason: we are not making the element interactive, + // but preventing any click events from bubbling up to the + // table row. This allows us to add a click handler to the row + // itself (to toggle row selection) without erroneously + // intercepting click events from ItemActions. + /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "td", + { + className: clsx_default("dataviews-view-table__actions-column", { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": isActionsColumnSticky + }), + onClick: (e2) => e2.stopPropagation(), + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ItemActions, { item, actions }) + } + ) + ] + } + ); +} +function ViewTable({ + actions, + data, + fields, + getItemId: getItemId2, + getItemLevel, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + view, + className, + empty +}) { + const { containerRef } = (0, import_element11.useContext)(dataviews_context_default); + const isDelayedLoading = useDelayedLoading(isLoading); + const headerMenuRefs = (0, import_element11.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element11.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element11.useState)(); + const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element11.useState)(null); + (0, import_element11.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element11.useId)(); + const isHorizontalScrollEnd = useIsHorizontalScrollEnd({ + scrollContainerRef: containerRef, + enabled: !!actions?.length + }); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const handleHeaderContextMenu = (event) => { + event.preventDefault(); + event.stopPropagation(); + const virtualAnchor = { + getBoundingClientRect: () => ({ + x: event.clientX, + y: event.clientY, + top: event.clientY, + left: event.clientX, + right: event.clientX, + bottom: event.clientY, + width: 0, + height: 0, + toJSON: () => ({}) + }) + }; + window.requestAnimationFrame(() => { + setContextMenuAnchor(virtualAnchor); + }); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const isRtl = (0, import_i18n9.isRTL)(); + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + id: tableNoticeId, + children: empty + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( + "table", + { + className: clsx_default("dataviews-view-table", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "has-bulk-actions": hasBulkActions, + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : void 0, + inert: !isInfiniteScroll && isLoading ? "true" : void 0, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("colgroup", { children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-checkbox" }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-first-data" }), + columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "col", + { + className: clsx_default( + `dataviews-view-table__col-${column}`, + { + "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0 + } + ) + }, + `col-${column}` + )), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-actions" }) + ] }), + contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + import_components6.Popover, + { + anchor: contextMenuAnchor, + onClose: () => setContextMenuAnchor(null), + placement: "bottom-start", + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(PropertiesSection, { showLabel: false }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("tr", { className: "dataviews-view-table__row", children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "th", + { + className: "dataviews-view-table__checkbox-column", + scope: "col", + onContextMenu: handleHeaderContextMenu, + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false, + canInsertLeft: isRtl ? view.layout?.enableMoving ?? true : false, + canInsertRight: isRtl ? false : view.layout?.enableMoving ?? true + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + const field = fields.find( + (f2) => f2.id === column + ); + const effectiveAlign = getEffectiveAlign( + align, + field?.type + ); + const canInsertOrMove = view.layout?.enableMoving ?? true; + return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: effectiveAlign + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: canInsertOrMove, + canInsertLeft: canInsertOrMove, + canInsertRight: canInsertOrMove + } + ) + }, + column + ); + }), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "th", + { + className: clsx_default( + "dataviews-view-table__actions-column", + { + "dataviews-view-table__actions-column--sticky": true, + "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd + } + ), + children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n9.__)("Actions") }) + } + ) + ] }) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("tbody", { children: [ + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0), + className: "dataviews-view-table__group-header-cell", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n9.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n9.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) }), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd + }, + getItemId2(item) + )) + ] }, `group-${groupName}`) + ) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( + TableRow, + { + item, + level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, + hasBulkActions, + actions, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable, + isActionsColumnSticky: !isHorizontalScrollEnd, + posinset: isInfiniteScroll ? index + 1 : void 0 + }, + getItemId2(item) + )) }) + ] + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "dataviews-loading", id: tableNoticeId, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components6.Spinner, {}) }) }) + ] }); +} +var table_default = ViewTable; + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_components9 = __toESM(require_components(), 1); +var import_i18n12 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_components8 = __toESM(require_components(), 1); +var import_i18n11 = __toESM(require_i18n(), 1); +var import_compose4 = __toESM(require_compose(), 1); +var import_keycodes2 = __toESM(require_keycodes(), 1); +var import_element13 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/grid/preview-size-picker.mjs +var import_components7 = __toESM(require_components(), 1); +var import_i18n10 = __toESM(require_i18n(), 1); +var import_element12 = __toESM(require_element(), 1); +var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); +var imageSizes = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +var DEFAULT_PREVIEW_SIZE = imageSizes[2].value; +function useGridColumns() { + const context = (0, import_element12.useContext)(dataviews_context_default); + const view = context.view; + return (0, import_element12.useMemo)(() => { + const containerWidth = context.containerWidth; + const gap = 32; + const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE; + const columns = Math.floor( + (containerWidth + gap) / (previewSize + gap) + ); + return Math.max(1, columns); + }, [context.containerWidth, view.layout?.previewSize]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs +var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); +var { Badge } = unlock(import_components8.privateApis); +function chunk(array, size) { + const chunks = []; + for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) { + chunks.push(array.slice(i2, i2 + size)); + } + return chunks; +} +var GridItem = (0, import_element13.forwardRef)(function GridItem2({ + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config, + ...props +}, ref) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasBulkAction = useHasAPossibleBulkAction(actions, item); + const id = getItemId2(item); + const instanceId = (0, import_compose4.useInstanceId)(GridItem2); + const isSelected2 = selection.includes(id); + const mediaPlaceholder = /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "dataviews-view-grid__media-placeholder" }); + const rendersMediaField = showMedia && mediaField?.render; + const renderedMediaField = rendersMediaField ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : mediaPlaceholder; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(titleField.render, { item, field: titleField }) : null; + let mediaA11yProps; + let titleA11yProps; + if (isItemClickable(item) && onClickItem) { + if (renderedTitleField) { + mediaA11yProps = { + "aria-labelledby": `dataviews-view-grid__title-field-${instanceId}` + }; + titleA11yProps = { + id: `dataviews-view-grid__title-field-${instanceId}` + }; + } else { + mediaA11yProps = { + "aria-label": (0, import_i18n11.__)("Navigate to item") + }; + } + } + return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)( + Stack, + { + direction: "column", + ...props, + ref, + className: clsx_default( + props.className, + "dataviews-view-grid__row__gridcell", + "dataviews-view-grid__card", + { + "is-selected": hasBulkAction && isSelected2 + } + ), + onClickCapture: (event) => { + props.onClickCapture?.(event); + if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) { + event.stopPropagation(); + event.preventDefault(); + if (!hasBulkAction) { + return; + } + onChangeSelection( + selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] + ); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: clsx_default("dataviews-view-grid__media", { + "dataviews-view-grid__media--placeholder": !rendersMediaField + }), + ...mediaA11yProps, + children: renderedMediaField + } + ), + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: !hasBulkAction + } + ), + !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ItemActions, { item, actions, isCompact: true }) }), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "dataviews-view-grid__title", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-grid__title-field dataviews-title-field", + ...titleA11yProps, + title: titleField?.getValueFormatted({ + item, + field: titleField + }) || void 0, + children: renderedTitleField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + Badge, + { + className: "dataviews-view-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + import_components8.Flex, + { + className: "dataviews-view-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components8.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components8.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }), + /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + import_components8.FlexItem, + { + className: "dataviews-view-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + } + ); +}); +function CompositeGrid({ + data, + isInfiniteScroll, + className, + inert, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + actions +}) { + const { paginationInfo, resizeObserverRef } = (0, import_element13.useContext)(dataviews_context_default); + const gridColumns = useGridColumns(); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const size = "900px"; + const totalRows = Math.ceil(data.length / gridColumns); + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + import_components8.Composite, + { + role: isInfiniteScroll ? "feed" : "grid", + className: clsx_default("dataviews-view-grid", className), + focusWrap: true, + "aria-busy": isLoading, + "aria-rowcount": isInfiniteScroll ? void 0 : totalRows, + ref: resizeObserverRef, + inert, + children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + import_components8.Composite.Row, + { + render: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + "div", + { + role: "row", + "aria-rowindex": i2 + 1, + "aria-label": (0, import_i18n11.sprintf)( + /* translators: %d: The row number in the grid */ + (0, import_i18n11.__)("Row %d"), + i2 + 1 + ), + className: "dataviews-view-grid__row", + style: { + gridTemplateColumns: `repeat( ${gridColumns}, minmax(0, 1fr) )` + } + } + ), + children: row.map((item, indexInRow) => { + const index = i2 * gridColumns + indexInRow; + return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + import_components8.Composite.Item, + { + render: (props) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( + GridItem, + { + ...props, + role: isInfiniteScroll ? "article" : "gridcell", + "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0, + "aria-posinset": isInfiniteScroll ? index + 1 : void 0, + view, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + item, + actions, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + hasBulkActions, + config: { + sizes: size + } + } + ) + }, + getItemId2(item) + ); + }) + }, + i2 + )) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs +var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); +function ViewGrid({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + selection, + view, + className, + empty +}) { + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const gridProps = { + className: clsx_default(className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + isLoading, + view, + fields, + selection, + onChangeSelection, + onClickItem, + isItemClickable, + renderItemLink, + getItemId: getItemId2, + actions + }; + return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Stack, { direction: "column", gap: "lg", children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h3", { className: "dataviews-view-grid__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n12.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n12.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + CompositeGrid, + { + ...gridProps, + data: groupItems, + isInfiniteScroll: false + } + ) + ] + }, + groupName + ) + ) }), + // Render a single grid with all data. + !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( + CompositeGrid, + { + ...gridProps, + data, + isInfiniteScroll: !!isInfiniteScroll + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components9.Spinner, {}) }) + ] + }); +} +var grid_default = ViewGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/list/index.mjs +var import_compose5 = __toESM(require_compose(), 1); +var import_components10 = __toESM(require_components(), 1); +var import_element14 = __toESM(require_element(), 1); +var import_i18n13 = __toESM(require_i18n(), 1); +var import_data5 = __toESM(require_data(), 1); +var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu3 } = unlock(import_components10.privateApis); +function generateItemWrapperCompositeId(idPrefix) { + return `${idPrefix}-item-wrapper`; +} +function generatePrimaryActionCompositeId(idPrefix, primaryActionId) { + return `${idPrefix}-primary-action-${primaryActionId}`; +} +function generateDropdownTriggerCompositeId(idPrefix) { + return `${idPrefix}-dropdown`; +} +function PrimaryActionGridCell({ + idPrefix, + primaryAction, + item +}) { + const registry = (0, import_data5.useRegistry)(); + const [isModalOpen, setIsModalOpen] = (0, import_element14.useState)(false); + const compositeItemId = generatePrimaryActionCompositeId( + idPrefix, + primaryAction.id + ); + const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]); + return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + text: label, + size: "small", + onClick: () => setIsModalOpen(true) + } + ), + children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + ActionModal, + { + action: primaryAction, + items: [item], + closeModal: () => setIsModalOpen(false) + } + ) + } + ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Composite.Item, + { + id: compositeItemId, + render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Button, + { + disabled: !!primaryAction.disabled, + accessibleWhenDisabled: true, + size: "small", + onClick: () => { + primaryAction.callback([item], { registry }); + }, + children: label + } + ) + } + ) }, primaryAction.id); +} +function ListItem({ + view, + actions, + idPrefix, + isSelected: isSelected2, + item, + titleField, + mediaField, + descriptionField, + onSelect, + otherFields, + onDropdownTriggerKeyDown, + posinset +}) { + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element14.useRef)(null); + const labelId = `${idPrefix}-label`; + const descriptionId = `${idPrefix}-description`; + const registry = (0, import_data5.useRegistry)(); + const [isHovered, setIsHovered] = (0, import_element14.useState)(false); + const [activeModalAction, setActiveModalAction] = (0, import_element14.useState)( + null + ); + const handleHover = ({ type }) => { + const isHover = type === "mouseenter"; + setIsHovered(isHover); + }; + const { paginationInfo } = (0, import_element14.useContext)(dataviews_context_default); + (0, import_element14.useEffect)(() => { + if (isSelected2) { + itemRef.current?.scrollIntoView({ + behavior: "auto", + block: "nearest", + inline: "nearest" + }); + } + }, [isSelected2]); + const { primaryAction, eligibleActions } = (0, import_element14.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryAction: _primaryActions[0], + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1; + const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { sizes: "52px" } + } + ) }) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(titleField.render, { item, field: titleField }) : null; + const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)( + Stack, + { + direction: "row", + gap: "md", + className: "dataviews-view-list__item-actions", + children: [ + primaryAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + PrimaryActionGridCell, + { + idPrefix, + primaryAction, + item + } + ), + !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { role: "gridcell", children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Menu3, { placement: "bottom-end", children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + Menu3.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Composite.Item, + { + id: generateDropdownTriggerCompositeId( + idPrefix + ), + render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Button, + { + size: "small", + icon: more_vertical_default, + label: (0, import_i18n13.__)("Actions"), + accessibleWhenDisabled: true, + disabled: !actions.length, + onKeyDown: onDropdownTriggerKeyDown + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + ActionsMenuGroup, + { + actions: eligibleActions, + item, + registry, + setActiveModalAction + } + ) }) + ] }), + !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + ActionModal, + { + action: activeModalAction, + items: [item], + closeModal: () => setActiveModalAction(null) + } + ) + ] }) + ] + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Composite.Row, + { + ref: itemRef, + render: ( + /* aria-posinset breaks Composite.Row if passed to it directly. */ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + "div", + { + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0 + } + ) + ), + role: infiniteScrollEnabled ? "article" : "row", + className: clsx_default({ + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleHover, + onMouseLeave: handleHover, + children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-view-list__item-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Composite.Item, + { + id: generateItemWrapperCompositeId(idPrefix), + "aria-pressed": isSelected2, + "aria-labelledby": labelId, + "aria-describedby": descriptionId, + className: "dataviews-view-list__item", + onClick: () => onSelect(item) + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)( + Stack, + { + direction: "row", + gap: "md", + justify: "start", + align: "flex-start", + style: { flex: 1, minWidth: 0 }, + children: [ + renderedMediaField, + /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)( + Stack, + { + direction: "column", + gap: "xs", + className: "dataviews-view-list__field-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Stack, { direction: "row", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + "div", + { + className: "dataviews-title-field dataviews-view-list__title-field", + id: labelId, + children: renderedTitleField + } + ), + usedActions + ] }), + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + "div", + { + className: "dataviews-view-list__fields", + id: descriptionId, + children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)( + "div", + { + className: "dataviews-view-list__field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.VisuallyHidden, + { + as: "span", + className: "dataviews-view-list__field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) + } + ) + ] + } + ) + ] + } + ) + ] + } + ) + } + ); +} +function isDefined2(item) { + return !!item; +} +function ViewList(props) { + const { + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + selection, + view, + className, + empty + } = props; + const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list"); + const isDelayedLoading = useDelayedLoading(!!isLoading); + const selectedItem = data?.findLast( + (item) => selection.includes(getItemId2(item)) + ); + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2); + const onSelect = (item) => onChangeSelection([getItemId2(item)]); + const generateCompositeItemIdPrefix = (0, import_element14.useCallback)( + (item) => `${baseId}-${getItemId2(item)}`, + [baseId, getItemId2] + ); + const isActiveCompositeItem = (0, import_element14.useCallback)( + (item, idToCheck) => { + return idToCheck.startsWith( + generateCompositeItemIdPrefix(item) + ); + }, + [generateCompositeItemIdPrefix] + ); + const [activeCompositeId, setActiveCompositeId] = (0, import_element14.useState)(void 0); + (0, import_element14.useEffect)(() => { + if (selectedItem) { + setActiveCompositeId( + generateItemWrapperCompositeId( + generateCompositeItemIdPrefix(selectedItem) + ) + ); + } + }, [selectedItem, generateCompositeItemIdPrefix]); + const activeItemIndex = data.findIndex( + (item) => isActiveCompositeItem(item, activeCompositeId ?? "") + ); + const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex); + const isActiveIdInList = activeItemIndex !== -1; + const selectCompositeItem = (0, import_element14.useCallback)( + (targetIndex, generateCompositeId) => { + const clampedIndex = Math.min( + data.length - 1, + Math.max(0, targetIndex) + ); + if (!data[clampedIndex]) { + return; + } + const itemIdPrefix = generateCompositeItemIdPrefix( + data[clampedIndex] + ); + const targetCompositeItemId = generateCompositeId(itemIdPrefix); + setActiveCompositeId(targetCompositeItemId); + document.getElementById(targetCompositeItemId)?.focus(); + }, + [data, generateCompositeItemIdPrefix] + ); + (0, import_element14.useEffect)(() => { + const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1; + if (!isActiveIdInList && wasActiveIdInList) { + selectCompositeItem( + previousActiveItemIndex, + generateItemWrapperCompositeId + ); + } + }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]); + const onDropdownTriggerKeyDown = (0, import_element14.useCallback)( + (event) => { + if (event.key === "ArrowDown") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex + 1, + generateDropdownTriggerCompositeId + ); + } + if (event.key === "ArrowUp") { + event.preventDefault(); + selectCompositeItem( + activeItemIndex - 1, + generateDropdownTriggerCompositeId + ); + } + }, + [selectCompositeItem, activeItemIndex] + ); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Composite, + { + id: `${baseId}`, + render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {}), + className: "dataviews-view-list__group", + role: "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + Stack, + { + direction: "column", + gap: "lg", + className: clsx_default("dataviews-view-list", className), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h3", { className: "dataviews-view-list__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n13.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n13.__)("%1$s: %2$s"), + groupField.label, + groupName + ) }), + groupItems.map((item) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown + }, + id + ); + }) + ] + }, + groupName + ) + ) + } + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + import_components10.Composite, + { + id: baseId, + render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {}), + className: clsx_default("dataviews-view-list", className, { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ), + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }), + role: view.infiniteScrollEnabled ? "feed" : "grid", + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, + children: data.map((item, index) => { + const id = generateCompositeItemIdPrefix(item); + return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( + ListItem, + { + view, + idPrefix: id, + actions, + item, + isSelected: item === selectedItem, + onSelect, + mediaField, + titleField, + descriptionField, + otherFields, + onDropdownTriggerKeyDown, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + }, + id + ); + }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_components10.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_components12 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-group.mjs +var import_i18n14 = __toESM(require_i18n(), 1); +var import_element15 = __toESM(require_element(), 1); +var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); +function ActivityGroup({ + groupName, + groupData, + groupField, + showLabel = true, + children +}) { + const groupHeader = showLabel ? (0, import_element15.createInterpolateElement)( + // translators: %s: The label of the field e.g. "Status". + (0, import_i18n14.sprintf)((0, import_i18n14.__)("%s: "), groupField.label).trim(), + { + groupName: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( + groupField.render, + { + item: groupData[0], + field: groupField + } + ) + } + ) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(groupField.render, { item: groupData[0], field: groupField }); + return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-activity__group", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }), + children + ] + }, + groupName + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-item.mjs +var import_components11 = __toESM(require_components(), 1); +var import_element16 = __toESM(require_element(), 1); +var import_data6 = __toESM(require_data(), 1); +var import_compose6 = __toESM(require_compose(), 1); +var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); +function ActivityItem(props) { + const { + view, + actions, + item, + titleField, + mediaField, + descriptionField, + otherFields, + posinset, + onClickItem, + renderItemLink, + isItemClickable + } = props; + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const itemRef = (0, import_element16.useRef)(null); + const registry = (0, import_data6.useRegistry)(); + const { paginationInfo } = (0, import_element16.useContext)(dataviews_context_default); + const { primaryActions, eligibleActions } = (0, import_element16.useMemo)(() => { + const _eligibleActions = actions.filter( + (action) => !action.isEligible || action.isEligible(item) + ); + const _primaryActions = _eligibleActions.filter( + (action) => action.isPrimary + ); + return { + primaryActions: _primaryActions, + eligibleActions: _eligibleActions + }; + }, [actions, item]); + const isMobileViewport = (0, import_compose6.useViewportMatch)("medium", "<"); + const density = view.layout?.density ?? "balanced"; + const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + mediaField.render, + { + item, + field: mediaField, + config: { + sizes: density === "comfortable" ? "32px" : "24px" + } + } + ) : null; + const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "span", + { + className: "dataviews-view-activity__item-bullet", + "aria-hidden": "true" + } + ) }); + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(titleField.render, { item, field: titleField }) : null; + const verticalGap = (0, import_element16.useMemo)(() => { + switch (density) { + case "comfortable": + return "md"; + default: + return "sm"; + } + }, [density]); + return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + "div", + { + ref: itemRef, + role: infiniteScrollEnabled ? "article" : void 0, + "aria-posinset": posinset, + "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, + className: clsx_default( + "dataviews-view-activity__item", + density === "compact" && "is-compact", + density === "balanced" && "is-balanced", + density === "comfortable" && "is-comfortable" + ), + children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + Stack, + { + direction: "column", + gap: "xs", + align: "center", + className: "dataviews-view-activity__item-type", + children: renderedMediaField + } + ), + /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + Stack, + { + direction: "column", + gap: verticalGap, + align: "flex-start", + className: "dataviews-view-activity__item-content", + children: [ + renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ItemClickWrapper, + { + item, + isItemClickable, + onClickItem, + renderItemLink, + className: "dataviews-view-activity__item-title", + children: renderedTitleField + } + ), + showDescription && descriptionField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ) }), + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( + "div", + { + className: "dataviews-view-activity__item-field", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + import_components11.VisuallyHidden, + { + as: "span", + className: "dataviews-view-activity__item-field-label", + children: field.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + field.render, + { + item, + field + } + ) }) + ] + }, + field.id + )) }), + !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + PrimaryActions, + { + item, + actions: primaryActions, + registry, + buttonVariant: "secondary" + } + ) + ] + } + ), + (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu + // there if there are any actions at all. + isMobileViewport && // At the same time, only show the menu if there are actions to show. + eligibleActions.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( + ItemActions, + { + item, + actions: eligibleActions, + isCompact: true + } + ) }) + ] }) + } + ); +} +var activity_item_default = ActivityItem; + +// packages/dataviews/build-module/components/dataviews-layouts/activity/activity-items.mjs +var import_react3 = __toESM(require_react(), 1); +function isDefined3(item) { + return !!item; +} +function ActivityItems(props) { + const { data, fields, getItemId: getItemId2, view } = props; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3); + return data.map((item, index) => { + return /* @__PURE__ */ (0, import_react3.createElement)( + activity_item_default, + { + ...props, + key: getItemId2(item), + item, + mediaField, + titleField, + descriptionField, + otherFields, + posinset: view.infiniteScrollEnabled ? index + 1 : void 0 + } + ); + }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs +var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); +function ViewActivity(props) { + const { empty, data, fields, isLoading, view, className } = props; + const isDelayedLoading = useDelayedLoading(!!isLoading); + const hasData = !!data?.length; + const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; + const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + if (!hasData) { + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "div", + { + className: clsx_default("dataviews-no-results", { + "is-refreshing": isDelayedLoading + }), + children: empty + } + ); + } + const isInert = !isInfiniteScroll && !!isLoading; + const wrapperClassName = clsx_default("dataviews-view-activity", className, { + "is-refreshing": !isInfiniteScroll && isDelayedLoading + }); + const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : []; + if (hasData && groupField && dataByGroup) { + return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + Stack, + { + direction: "column", + gap: "sm", + className: wrapperClassName, + inert: isInert ? "true" : void 0, + children: groupedEntries.map( + ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + ActivityGroup, + { + groupName, + groupData, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + ActivityItems, + { + ...props, + data: groupData + } + ) + }, + groupName + ) + ) + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( + "div", + { + className: wrapperClassName, + role: view.infiniteScrollEnabled ? "feed" : void 0, + inert: isInert ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ActivityItems, { ...props }) + } + ), + isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components12.Spinner, {}) }) + ] }); +} + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_components15 = __toESM(require_components(), 1); +var import_i18n17 = __toESM(require_i18n(), 1); +var import_compose7 = __toESM(require_compose(), 1); +var import_element20 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_components14 = __toESM(require_components(), 1); +var import_data7 = __toESM(require_data(), 1); +var import_element18 = __toESM(require_element(), 1); +var import_i18n16 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/components/dataviews-pagination/index.mjs +var import_components13 = __toESM(require_components(), 1); +var import_element17 = __toESM(require_element(), 1); +var import_i18n15 = __toESM(require_i18n(), 1); +var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); +function DataViewsPagination() { + const { + view, + onChangeView, + paginationInfo: { totalItems = 0, totalPages } + } = (0, import_element17.useContext)(dataviews_context_default); + if (!totalItems || !totalPages || view.infiniteScrollEnabled) { + return null; + } + const currentPage = view.page ?? 1; + const pageSelectOptions = Array.from(Array(totalPages)).map( + (_, i2) => { + const page = i2 + 1; + return { + value: page.toString(), + label: page.toString(), + "aria-label": currentPage === page ? (0, import_i18n15.sprintf)( + // translators: 1: current page number. 2: total number of pages. + (0, import_i18n15.__)("Page %1$d of %2$d"), + currentPage, + totalPages + ) : page.toString() + }; + } + ); + return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)( + Stack, + { + direction: "row", + className: "dataviews-pagination", + justify: "end", + align: "center", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime44.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + align: "center", + gap: "xs", + className: "dataviews-pagination__page-select", + children: (0, import_element17.createInterpolateElement)( + (0, import_i18n15.sprintf)( + // translators: 1: Current page number, 2: Total number of pages. + (0, import_i18n15._x)( + "
      Page
      %1$s
      of %2$d
      ", + "paging" + ), + "", + totalPages + ), + { + div: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { "aria-hidden": true }), + CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)( + import_components13.SelectControl, + { + "aria-label": (0, import_i18n15.__)("Current page"), + value: currentPage.toString(), + options: pageSelectOptions, + onChange: (newValue) => { + onChangeView({ + ...view, + page: +newValue + }); + }, + size: "small", + variant: "minimal" + } + ) + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Stack, { direction: "row", gap: "xs", align: "center", children: [ + /* @__PURE__ */ (0, import_jsx_runtime44.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ + ...view, + page: currentPage - 1 + }), + disabled: currentPage === 1, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Previous page"), + icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime44.jsx)( + import_components13.Button, + { + onClick: () => onChangeView({ ...view, page: currentPage + 1 }), + disabled: currentPage >= totalPages, + accessibleWhenDisabled: true, + label: (0, import_i18n15.__)("Next page"), + icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, + showTooltip: true, + size: "compact", + tooltipPosition: "top" + } + ) + ] }) + ] + } + ); +} +var dataviews_pagination_default = (0, import_element17.memo)(DataViewsPagination); + +// packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs +var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); +function useIsMultiselectPicker(actions) { + return (0, import_element18.useMemo)(() => { + return actions?.every((action) => action.supportsBulk); + }, [actions]); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/grid-items.mjs +var import_element19 = __toESM(require_element(), 1); +var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); +var GridItems = (0, import_element19.forwardRef)(({ className, previewSize, ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( + "div", + { + ref, + className: clsx_default("dataviews-view-grid-items", className), + style: { + gridTemplateColumns: previewSize && `repeat(auto-fill, minmax(${previewSize}px, 1fr))` + }, + ...props + } + ); +}); + +// packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs +var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); +var { Badge: Badge2 } = unlock(import_components15.privateApis); +function GridItem3({ + view, + multiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config, + posinset, + setsize +}) { + const { showTitle = true, showMedia = true, showDescription = true } = view; + const id = getItemId2(item); + const isSelected2 = selection.includes(id); + const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + mediaField.render, + { + item, + field: mediaField, + config + } + ) : null; + const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(titleField.render, { item, field: titleField }) : null; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + import_components15.Composite.Item, + { + "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n17.__)("(no title)") : void 0, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Stack, { direction: "column", children, ...props }), + role: "option", + "aria-posinset": posinset, + "aria-setsize": setsize, + className: clsx_default("dataviews-view-picker-grid__card", { + "is-selected": isSelected2 + }), + "aria-selected": isSelected2, + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }), + showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ), + showTitle && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + Stack, + { + direction: "row", + justify: "space-between", + className: "dataviews-view-picker-grid__title-actions", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField }) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Stack, { direction: "column", gap: "xs", children: [ + showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + descriptionField.render, + { + item, + field: descriptionField + } + ), + !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + Stack, + { + direction: "row", + className: "dataviews-view-picker-grid__badge-fields", + gap: "sm", + wrap: "wrap", + align: "top", + justify: "flex-start", + children: badgeFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + Badge2, + { + className: "dataviews-view-picker-grid__field-value", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + field.render, + { + item, + field + } + ) + }, + field.id + ); + }) + } + ), + !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + Stack, + { + direction: "column", + className: "dataviews-view-picker-grid__fields", + gap: "xs", + children: regularFields.map((field) => { + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + import_components15.Flex, + { + className: "dataviews-view-picker-grid__field", + gap: 1, + justify: "flex-start", + expanded: true, + style: { height: "auto" }, + direction: "row", + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components15.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }), + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + import_components15.FlexItem, + { + className: "dataviews-view-picker-grid__field-value", + style: { maxHeight: "none" }, + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + field.render, + { + item, + field + } + ) + } + ) + ] }) + }, + field.id + ); + }) + } + ) + ] }) + ] + }, + id + ); +} +function GridGroup({ + groupName, + groupField, + showLabel = true, + children +}) { + const headerId = (0, import_compose7.useInstanceId)( + GridGroup, + "dataviews-view-picker-grid-group__header" + ); + return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)( + Stack, + { + direction: "column", + gap: "sm", + role: "group", + "aria-labelledby": headerId, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "h3", + { + className: "dataviews-view-picker-grid-group__header", + id: headerId, + children: showLabel ? (0, import_i18n17.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n17.__)("%1$s: %2$s"), + groupField.label, + groupName + ) : groupName + } + ), + children + ] + }, + groupName + ); +} +function ViewPickerGrid({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading, + onChangeSelection, + selection, + view, + className, + empty +}) { + const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element20.useContext)(dataviews_context_default); + const titleField = fields.find( + (field) => field.id === view?.titleField + ); + const mediaField = fields.find( + (field) => field.id === view?.mediaField + ); + const descriptionField = fields.find( + (field) => field.id === view?.descriptionField + ); + const otherFields = view.fields ?? []; + const { regularFields, badgeFields } = otherFields.reduce( + (accumulator, fieldId) => { + const field = fields.find((f2) => f2.id === fieldId); + if (!field) { + return accumulator; + } + const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; + accumulator[key].push(field); + return accumulator; + }, + { regularFields: [], badgeFields: [] } + ); + const hasData = !!data?.length; + const usedPreviewSize = view.layout?.previewSize; + const isMultiselect = useIsMultiselectPicker(actions); + const size = "900px"; + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + const currentPage = view?.page ?? 1; + const perPage = view?.perPage ?? 0; + const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { + // Render multiple groups. + children: [ + hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + import_components15.Composite, + { + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + "aria-label": itemListLabel, + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + Stack, + { + direction: "column", + gap: "lg", + children, + ...props + } + ), + children: Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + GridGroup, + { + groupName, + groupField, + showLabel: view.groupBy?.showLabel !== false, + children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + GridItems, + { + previewSize: usedPreviewSize, + style: { + gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax(${usedPreviewSize}px, 1fr))` + }, + "aria-busy": isLoading, + ref: resizeObserverRef, + children: groupItems.map((item) => { + const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1; + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset: posInSet, + setsize: setSize + }, + getItemId2(item) + ); + }) + } + ) + }, + groupName + ) + ) + } + ), + // Render a single grid with all data. + hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + import_components15.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + GridItems, + { + className: clsx_default( + "dataviews-view-picker-grid", + className + ), + previewSize: usedPreviewSize, + "aria-busy": isLoading, + ref: resizeObserverRef + } + ), + virtualFocus: true, + orientation: "horizontal", + role: "listbox", + "aria-multiselectable": isMultiselect, + "aria-label": itemListLabel, + children: data.map((item, index) => { + let posinset = isInfiniteScroll ? index + 1 : void 0; + if (!isInfiniteScroll) { + posinset = (currentPage - 1) * perPage + index + 1; + } + return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + GridItem3, + { + view, + multiselect: isMultiselect, + selection, + onChangeSelection, + getItemId: getItemId2, + item, + mediaField, + titleField, + descriptionField, + regularFields, + badgeFields, + config: { + sizes: size + }, + posinset, + setsize: setSize + }, + getItemId2(item) + ); + }) + } + ), + // Render empty state. + !hasData && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !isLoading + }), + children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components15.Spinner, {}) }) : empty + } + ), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components15.Spinner, {}) }) + ] + }); +} +var picker_grid_default = ViewPickerGrid; + +// packages/dataviews/build-module/components/dataviews-layouts/picker-table/index.mjs +var import_i18n18 = __toESM(require_i18n(), 1); +var import_components16 = __toESM(require_components(), 1); +var import_element21 = __toESM(require_element(), 1); +var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); +function TableColumnField2({ + item, + fields, + column, + align +}) { + const field = fields.find((f2) => f2.id === column); + if (!field) { + return null; + } + const className = clsx_default("dataviews-view-table__cell-content-wrapper", { + "dataviews-view-table__cell-align-end": align === "end", + "dataviews-view-table__cell-align-center": align === "center" + }); + return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(field.render, { item, field }) }); +} +function TableRow2({ + item, + fields, + id, + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect, + posinset +}) { + const { paginationInfo } = (0, import_element21.useContext)(dataviews_context_default); + const isSelected2 = selection.includes(id); + const [isHovered, setIsHovered] = (0, import_element21.useState)(false); + const { + showTitle = true, + showMedia = true, + showDescription = true, + infiniteScrollEnabled + } = view; + const handleMouseEnter = () => { + setIsHovered(true); + }; + const handleMouseLeave = () => { + setIsHovered(false); + }; + const columns = view.fields ?? []; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)( + import_components16.Composite.Item, + { + render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + "tr", + { + className: clsx_default("dataviews-view-table__row", { + "is-selected": isSelected2, + "is-hovered": isHovered + }), + onMouseEnter: handleMouseEnter, + onMouseLeave: handleMouseLeave, + children, + ...props + } + ), + "aria-selected": isSelected2, + "aria-setsize": paginationInfo.totalItems || void 0, + "aria-posinset": posinset, + role: infiniteScrollEnabled ? "article" : "option", + onClick: () => { + if (isSelected2) { + onChangeSelection( + selection.filter((itemId) => id !== itemId) + ); + } else { + const newSelection = multiselect ? [...selection, id] : [id]; + onChangeSelection(newSelection); + } + }, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + "td", + { + className: "dataviews-view-table__checkbox-column", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + DataViewsSelectionCheckbox, + { + item, + selection, + onChangeSelection, + getItemId: getItemId2, + titleField, + disabled: false, + "aria-hidden": true, + tabIndex: -1 + } + ) }) + } + ), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + column_primary_default, + { + item, + titleField: showTitle ? titleField : void 0, + mediaField: showMedia ? mediaField : void 0, + descriptionField: showDescription ? descriptionField : void 0, + isItemClickable: () => false + } + ) }), + columns.map((column) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + "td", + { + style: { + width, + maxWidth, + minWidth + }, + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + TableColumnField2, + { + fields, + item, + column, + align + } + ) + }, + column + ); + }) + ] + }, + id + ); +} +function ViewPickerTable({ + actions, + data, + fields, + getItemId: getItemId2, + isLoading = false, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + view, + className, + empty +}) { + const headerMenuRefs = (0, import_element21.useRef)(/* @__PURE__ */ new Map()); + const headerMenuToFocusRef = (0, import_element21.useRef)(void 0); + const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element21.useState)(); + const isMultiselect = useIsMultiselectPicker(actions) ?? false; + (0, import_element21.useEffect)(() => { + if (headerMenuToFocusRef.current) { + headerMenuToFocusRef.current.focus(); + headerMenuToFocusRef.current = void 0; + } + }); + const tableNoticeId = (0, import_element21.useId)(); + if (nextHeaderMenuToFocus) { + headerMenuToFocusRef.current = nextHeaderMenuToFocus; + setNextHeaderMenuToFocus(void 0); + return; + } + const onHide = (field) => { + const hidden = headerMenuRefs.current.get(field.id); + const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; + setNextHeaderMenuToFocus(fallback?.node); + }; + const hasData = !!data?.length; + const titleField = fields.find((field) => field.id === view.titleField); + const mediaField = fields.find((field) => field.id === view.mediaField); + const descriptionField = fields.find( + (field) => field.id === view.descriptionField + ); + const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; + const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; + const { showTitle = true, showMedia = true, showDescription = true } = view; + const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; + const columns = view.fields ?? []; + const headerMenuRef = (column, index) => (node) => { + if (node) { + headerMenuRefs.current.set(column, { + node, + fallback: columns[index > 0 ? index - 1 : 1] + }); + } else { + headerMenuRefs.current.delete(column); + } + }; + const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; + return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)( + "table", + { + className: clsx_default( + "dataviews-view-table", + "dataviews-view-picker-table", + className, + { + [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( + view.layout.density + ) + } + ), + "aria-busy": isLoading, + "aria-describedby": tableNoticeId, + role: isInfiniteScroll ? "feed" : "listbox", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)( + "tr", + { + className: "dataviews-view-table__row", + role: "presentation", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + BulkSelectionCheckbox, + { + selection, + onChangeSelection, + data, + actions, + getItemId: getItemId2 + } + ) }), + hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + column_header_menu_default, + { + ref: headerMenuRef( + titleField.id, + 0 + ), + fieldId: titleField.id, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: false + } + ) }), + columns.map((column, index) => { + const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; + return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + "th", + { + style: { + width, + maxWidth, + minWidth, + textAlign: align + }, + "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, + scope: "col", + children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + column_header_menu_default, + { + ref: headerMenuRef(column, index), + fieldId: column, + view, + fields, + onChangeView, + onHide, + setOpenedFilter, + canMove: view.layout?.enableMoving ?? true + } + ) + }, + column + ); + }) + ] + } + ) }), + hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( + ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)( + import_components16.Composite, + { + virtualFocus: true, + orientation: "vertical", + render: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tbody", { role: "group" }), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + "tr", + { + className: "dataviews-view-table__group-header-row", + role: "presentation", + children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + "td", + { + colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1, + className: "dataviews-view-table__group-header-cell", + role: "presentation", + children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n18.sprintf)( + // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". + (0, import_i18n18.__)("%1$s: %2$s"), + groupField.label, + groupName + ) + } + ) + } + ), + groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + TableRow2, + { + item, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect: isMultiselect + }, + getItemId2(item) + )) + ] + }, + `group-${groupName}` + ) + ) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + import_components16.Composite, + { + render: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tbody", { role: "presentation" }), + virtualFocus: true, + orientation: "vertical", + children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)( + TableRow2, + { + item, + fields, + id: getItemId2(item) || index.toString(), + view, + titleField, + mediaField, + descriptionField, + selection, + getItemId: getItemId2, + onChangeSelection, + multiselect: isMultiselect, + posinset: index + 1 + }, + getItemId2(item) + )) + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)( + "div", + { + className: clsx_default({ + "dataviews-loading": isLoading, + "dataviews-no-results": !hasData && !isLoading + }), + id: tableNoticeId, + children: [ + !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_components16.Spinner, {}) }) : empty), + hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_components16.Spinner, {}) }) + ] + } + ) + ] }); +} +var picker_table_default = ViewPickerTable; + +// packages/dataviews/build-module/components/dataviews-layouts/utils/preview-size-picker.mjs +var import_components17 = __toESM(require_components(), 1); +var import_i18n19 = __toESM(require_i18n(), 1); +var import_element22 = __toESM(require_element(), 1); +var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); +var imageSizes2 = [ + { + value: 120, + breakpoint: 1 + }, + { + value: 170, + breakpoint: 1 + }, + { + value: 230, + breakpoint: 1 + }, + { + value: 290, + breakpoint: 1112 + // at minimum image width, 4 images display at this container size + }, + { + value: 350, + breakpoint: 1636 + // at minimum image width, 6 images display at this container size + }, + { + value: 430, + breakpoint: 588 + // at minimum image width, 2 images display at this container size + } +]; +function PreviewSizePicker() { + const context = (0, import_element22.useContext)(dataviews_context_default); + const view = context.view; + const breakValues = imageSizes2.filter((size) => { + return context.containerWidth >= size.breakpoint; + }); + const layoutPreviewSize = view.layout?.previewSize ?? 230; + const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0; + const marks = breakValues.map((size, index) => { + return { + value: index + }; + }); + return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( + import_components17.RangeControl, + { + __next40pxDefaultSize: true, + showTooltip: false, + label: (0, import_i18n19.__)("Preview size"), + value: previewSizeToUse, + min: 0, + max: breakValues.length - 1, + withInputField: false, + onChange: (value = 0) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + previewSize: breakValues[value].value + } + }); + }, + step: 1, + marks + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/utils/density-picker.mjs +var import_components18 = __toESM(require_components(), 1); +var import_i18n20 = __toESM(require_i18n(), 1); +var import_element23 = __toESM(require_element(), 1); +var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); +function DensityPicker() { + const context = (0, import_element23.useContext)(dataviews_context_default); + const view = context.view; + return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)( + import_components18.__experimentalToggleGroupControl, + { + size: "__unstable-large", + label: (0, import_i18n20.__)("Density"), + value: view.layout?.density || "balanced", + onChange: (value) => { + context.onChangeView({ + ...view, + layout: { + ...view.layout, + density: value + } + }); + }, + isBlock: true, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "comfortable", + label: (0, import_i18n20._x)( + "Comfortable", + "Density option for DataView layout" + ) + }, + "comfortable" + ), + /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "balanced", + label: (0, import_i18n20._x)("Balanced", "Density option for DataView layout") + }, + "balanced" + ), + /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( + import_components18.__experimentalToggleGroupControlOption, + { + value: "compact", + label: (0, import_i18n20._x)("Compact", "Density option for DataView layout") + }, + "compact" + ) + ] + } + ); +} + +// packages/dataviews/build-module/components/dataviews-layouts/index.mjs +var VIEW_LAYOUTS = [ + { + type: LAYOUT_TABLE, + label: (0, import_i18n21.__)("Table"), + component: table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_GRID, + label: (0, import_i18n21.__)("Grid"), + component: grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker + }, + { + type: LAYOUT_LIST, + label: (0, import_i18n21.__)("List"), + component: ViewList, + icon: (0, import_i18n21.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_ACTIVITY, + label: (0, import_i18n21.__)("Activity"), + component: ViewActivity, + icon: scheduled_default, + viewConfigOptions: DensityPicker + }, + { + type: LAYOUT_PICKER_GRID, + label: (0, import_i18n21.__)("Grid"), + component: picker_grid_default, + icon: category_default, + viewConfigOptions: PreviewSizePicker, + isPicker: true + }, + { + type: LAYOUT_PICKER_TABLE, + label: (0, import_i18n21.__)("Table"), + component: picker_table_default, + icon: block_table_default, + viewConfigOptions: DensityPicker, + isPicker: true + } +]; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_element31 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_components21 = __toESM(require_components(), 1); +var import_i18n24 = __toESM(require_i18n(), 1); +var import_element28 = __toESM(require_element(), 1); + +// node_modules/@ariakit/core/esm/__chunks/XMCVU3LR.js +function noop(..._) { +} +function applyState(argument, currentValue) { + if (isUpdater(argument)) { + const value = isLazyValue(currentValue) ? currentValue() : currentValue; + return argument(value); + } + return argument; +} +function isUpdater(argument) { + return typeof argument === "function"; +} +function isLazyValue(value) { + return typeof value === "function"; +} +function hasOwnProperty(object, prop) { + if (typeof Object.hasOwn === "function") { + return Object.hasOwn(object, prop); + } + return Object.prototype.hasOwnProperty.call(object, prop); +} +function chain(...fns) { + return (...args) => { + for (const fn of fns) { + if (typeof fn === "function") { + fn(...args); + } + } + }; +} +function normalizeString(str) { + return str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); +} +function omit2(object, keys) { + const result = { ...object }; + for (const key of keys) { + if (hasOwnProperty(result, key)) { + delete result[key]; + } + } + return result; +} +function pick(object, paths) { + const result = {}; + for (const key of paths) { + if (hasOwnProperty(object, key)) { + result[key] = object[key]; + } + } + return result; +} +function identity(value) { + return value; +} +function invariant(condition, message2) { + if (condition) return; + if (typeof message2 !== "string") throw new Error("Invariant failed"); + throw new Error(message2); +} +function getKeys(obj) { + return Object.keys(obj); +} +function isFalsyBooleanCallback(booleanOrCallback, ...args) { + const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback; + if (result == null) return false; + return !result; +} +function disabledFromProps(props) { + return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true"; +} +function removeUndefinedValues(obj) { + const result = {}; + for (const key in obj) { + if (obj[key] !== void 0) { + result[key] = obj[key]; + } + } + return result; +} +function defaultValue(...values) { + for (const value of values) { + if (value !== void 0) return value; + } + return void 0; +} + +// node_modules/@ariakit/react-core/esm/__chunks/YXGXYGQX.js +var import_react4 = __toESM(require_react(), 1); +function setRef(ref, value) { + if (typeof ref === "function") { + ref(value); + } else if (ref) { + ref.current = value; + } +} +function isValidElementWithRef(element) { + if (!element) return false; + if (!(0, import_react4.isValidElement)(element)) return false; + if ("ref" in element.props) return true; + if ("ref" in element) return true; + return false; +} +function getRefProperty(element) { + if (!isValidElementWithRef(element)) return null; + const props = { ...element.props }; + return props.ref || element.ref; +} +function mergeProps2(base, overrides) { + const props = { ...base }; + for (const key in overrides) { + if (!hasOwnProperty(overrides, key)) continue; + if (key === "className") { + const prop = "className"; + props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop]; + continue; + } + if (key === "style") { + const prop = "style"; + props[prop] = base[prop] ? { ...base[prop], ...overrides[prop] } : overrides[prop]; + continue; + } + const overrideValue = overrides[key]; + if (typeof overrideValue === "function" && key.startsWith("on")) { + const baseValue = base[key]; + if (typeof baseValue === "function") { + props[key] = (...args) => { + overrideValue(...args); + baseValue(...args); + }; + continue; + } + } + props[key] = overrideValue; + } + return props; +} + +// node_modules/@ariakit/core/esm/__chunks/3DNM6L6E.js +var canUseDOM = checkIsBrowser(); +function checkIsBrowser() { + var _a; + return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement); +} +function getDocument(node) { + if (!node) return document; + if ("self" in node) return node.document; + return node.ownerDocument || document; +} +function getActiveElement(node, activeDescendant = false) { + var _a; + const { activeElement } = getDocument(node); + if (!(activeElement == null ? void 0 : activeElement.nodeName)) { + return null; + } + if (isFrame(activeElement) && ((_a = activeElement.contentDocument) == null ? void 0 : _a.body)) { + return getActiveElement( + activeElement.contentDocument.body, + activeDescendant + ); + } + if (activeDescendant) { + const id = activeElement.getAttribute("aria-activedescendant"); + if (id) { + const element = getDocument(activeElement).getElementById(id); + if (element) { + return element; + } + } + } + return activeElement; +} +function contains(parent, child) { + return parent === child || parent.contains(child); +} +function isFrame(element) { + return element.tagName === "IFRAME"; +} +function isButton(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "button") return true; + if (tagName === "input" && element.type) { + return buttonInputTypes.indexOf(element.type) !== -1; + } + return false; +} +var buttonInputTypes = [ + "button", + "color", + "file", + "image", + "reset", + "submit" +]; +function isVisible(element) { + if (typeof element.checkVisibility === "function") { + return element.checkVisibility(); + } + const htmlElement = element; + return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0; +} +function isTextField(element) { + try { + const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null; + const isTextArea = element.tagName === "TEXTAREA"; + return isTextInput || isTextArea || false; + } catch (_error) { + return false; + } +} +function isTextbox(element) { + return element.isContentEditable || isTextField(element); +} +function getTextboxValue(element) { + if (isTextField(element)) { + return element.value; + } + if (element.isContentEditable) { + const range = getDocument(element).createRange(); + range.selectNodeContents(element); + return range.toString(); + } + return ""; +} +function getTextboxSelection(element) { + let start = 0; + let end = 0; + if (isTextField(element)) { + start = element.selectionStart || 0; + end = element.selectionEnd || 0; + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) { + const range = selection.getRangeAt(0); + const nextRange = range.cloneRange(); + nextRange.selectNodeContents(element); + nextRange.setEnd(range.startContainer, range.startOffset); + start = nextRange.toString().length; + nextRange.setEnd(range.endContainer, range.endOffset); + end = nextRange.toString().length; + } + } + return { start, end }; +} +function getPopupRole(element, fallback) { + const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"]; + const role = element == null ? void 0 : element.getAttribute("role"); + if (role && allowedPopupRoles.indexOf(role) !== -1) { + return role; + } + return fallback; +} +function getScrollingElement(element) { + if (!element) return null; + const isScrollableOverflow = (overflow) => { + if (overflow === "auto") return true; + if (overflow === "scroll") return true; + return false; + }; + if (element.clientHeight && element.scrollHeight > element.clientHeight) { + const { overflowY } = getComputedStyle(element); + if (isScrollableOverflow(overflowY)) return element; + } else if (element.clientWidth && element.scrollWidth > element.clientWidth) { + const { overflowX } = getComputedStyle(element); + if (isScrollableOverflow(overflowX)) return element; + } + return getScrollingElement(element.parentElement) || document.scrollingElement || document.body; +} +function setSelectionRange(element, ...args) { + if (/text|search|password|tel|url/i.test(element.type)) { + element.setSelectionRange(...args); + } +} +function sortBasedOnDOMPosition(items, getElement) { + const pairs = items.map((item, index) => [index, item]); + let isOrderDifferent = false; + pairs.sort(([indexA, a2], [indexB, b2]) => { + const elementA = getElement(a2); + const elementB = getElement(b2); + if (elementA === elementB) return 0; + if (!elementA || !elementB) return 0; + if (isElementPreceding(elementA, elementB)) { + if (indexA > indexB) { + isOrderDifferent = true; + } + return -1; + } + if (indexA < indexB) { + isOrderDifferent = true; + } + return 1; + }); + if (isOrderDifferent) { + return pairs.map(([_, item]) => item); + } + return items; +} +function isElementPreceding(a2, b2) { + return Boolean( + b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING + ); +} + +// node_modules/@ariakit/core/esm/__chunks/SNHYQNEZ.js +function isTouchDevice() { + return canUseDOM && !!navigator.maxTouchPoints; +} +function isApple() { + if (!canUseDOM) return false; + return /mac|iphone|ipad|ipod/i.test(navigator.platform); +} +function isSafari() { + return canUseDOM && isApple() && /apple/i.test(navigator.vendor); +} +function isFirefox() { + return canUseDOM && /firefox\//i.test(navigator.userAgent); +} + +// node_modules/@ariakit/core/esm/utils/events.js +function isPortalEvent(event) { + return Boolean( + event.currentTarget && !contains(event.currentTarget, event.target) + ); +} +function isSelfTarget(event) { + return event.target === event.currentTarget; +} +function isOpeningInNewTab(event) { + const element = event.currentTarget; + if (!element) return false; + const isAppleDevice = isApple(); + if (isAppleDevice && !event.metaKey) return false; + if (!isAppleDevice && !event.ctrlKey) return false; + const tagName = element.tagName.toLowerCase(); + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function isDownloading(event) { + const element = event.currentTarget; + if (!element) return false; + const tagName = element.tagName.toLowerCase(); + if (!event.altKey) return false; + if (tagName === "a") return true; + if (tagName === "button" && element.type === "submit") return true; + if (tagName === "input" && element.type === "submit") return true; + return false; +} +function fireBlurEvent(element, eventInit) { + const event = new FocusEvent("blur", eventInit); + const defaultAllowed = element.dispatchEvent(event); + const bubbleInit = { ...eventInit, bubbles: true }; + element.dispatchEvent(new FocusEvent("focusout", bubbleInit)); + return defaultAllowed; +} +function fireKeyboardEvent(element, type, eventInit) { + const event = new KeyboardEvent(type, eventInit); + return element.dispatchEvent(event); +} +function fireClickEvent(element, eventInit) { + const event = new MouseEvent("click", eventInit); + return element.dispatchEvent(event); +} +function isFocusEventOutside(event, container) { + const containerElement = container || event.currentTarget; + const relatedTarget = event.relatedTarget; + return !relatedTarget || !contains(containerElement, relatedTarget); +} +function queueBeforeEvent(element, type, callback, timeout) { + const createTimer = (callback2) => { + if (timeout) { + const timerId2 = setTimeout(callback2, timeout); + return () => clearTimeout(timerId2); + } + const timerId = requestAnimationFrame(callback2); + return () => cancelAnimationFrame(timerId); + }; + const cancelTimer = createTimer(() => { + element.removeEventListener(type, callSync, true); + callback(); + }); + const callSync = () => { + cancelTimer(); + callback(); + }; + element.addEventListener(type, callSync, { once: true, capture: true }); + return cancelTimer; +} +function addGlobalEventListener(type, listener, options, scope = window) { + const children = []; + try { + scope.document.addEventListener(type, listener, options); + for (const frame of Array.from(scope.frames)) { + children.push(addGlobalEventListener(type, listener, options, frame)); + } + } catch (e2) { + } + const removeEventListener = () => { + try { + scope.document.removeEventListener(type, listener, options); + } catch (e2) { + } + for (const remove of children) { + remove(); + } + }; + return removeEventListener; +} + +// node_modules/@ariakit/react-core/esm/__chunks/KPHZR4MB.js +var React6 = __toESM(require_react(), 1); +var import_react5 = __toESM(require_react(), 1); +var _React = { ...React6 }; +var useReactId = _React.useId; +var useReactDeferredValue = _React.useDeferredValue; +var useReactInsertionEffect = _React.useInsertionEffect; +var useSafeLayoutEffect = canUseDOM ? import_react5.useLayoutEffect : import_react5.useEffect; +function useInitialValue(value) { + const [initialValue] = (0, import_react5.useState)(value); + return initialValue; +} +function useLiveRef(value) { + const ref = (0, import_react5.useRef)(value); + useSafeLayoutEffect(() => { + ref.current = value; + }); + return ref; +} +function useEvent(callback) { + const ref = (0, import_react5.useRef)(() => { + throw new Error("Cannot call an event handler while rendering."); + }); + if (useReactInsertionEffect) { + useReactInsertionEffect(() => { + ref.current = callback; + }); + } else { + ref.current = callback; + } + return (0, import_react5.useCallback)((...args) => { + var _a; + return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args); + }, []); +} +function useTransactionState(callback) { + const [state, setState] = (0, import_react5.useState)(null); + useSafeLayoutEffect(() => { + if (state == null) return; + if (!callback) return; + let prevState = null; + callback((prev) => { + prevState = prev; + return state; + }); + return () => { + callback(prevState); + }; + }, [state, callback]); + return [state, setState]; +} +function useMergeRefs(...refs) { + return (0, import_react5.useMemo)(() => { + if (!refs.some(Boolean)) return; + return (value) => { + for (const ref of refs) { + setRef(ref, value); + } + }; + }, refs); +} +function useId3(defaultId) { + if (useReactId) { + const reactId = useReactId(); + if (defaultId) return defaultId; + return reactId; + } + const [id, setId] = (0, import_react5.useState)(defaultId); + useSafeLayoutEffect(() => { + if (defaultId || id) return; + const random = Math.random().toString(36).slice(2, 8); + setId(`id-${random}`); + }, [defaultId, id]); + return defaultId || id; +} +function useTagName(refOrElement, type) { + const stringOrUndefined = (type2) => { + if (typeof type2 !== "string") return; + return type2; + }; + const [tagName, setTagName] = (0, import_react5.useState)(() => stringOrUndefined(type)); + useSafeLayoutEffect(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type)); + }, [refOrElement, type]); + return tagName; +} +function useAttribute(refOrElement, attributeName, defaultValue2) { + const initialValue = useInitialValue(defaultValue2); + const [attribute, setAttribute] = (0, import_react5.useState)(initialValue); + (0, import_react5.useEffect)(() => { + const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; + if (!element) return; + const callback = () => { + const value = element.getAttribute(attributeName); + setAttribute(value == null ? initialValue : value); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { attributeFilter: [attributeName] }); + callback(); + return () => observer.disconnect(); + }, [refOrElement, attributeName, initialValue]); + return attribute; +} +function useUpdateEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + (0, import_react5.useEffect)(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + (0, import_react5.useEffect)( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useUpdateLayoutEffect(effect, deps) { + const mounted = (0, import_react5.useRef)(false); + useSafeLayoutEffect(() => { + if (mounted.current) { + return effect(); + } + mounted.current = true; + }, deps); + useSafeLayoutEffect( + () => () => { + mounted.current = false; + }, + [] + ); +} +function useForceUpdate() { + return (0, import_react5.useReducer)(() => [], []); +} +function useBooleanEvent(booleanOrCallback) { + return useEvent( + typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback + ); +} +function useWrapElement(props, callback, deps = []) { + const wrapElement = (0, import_react5.useCallback)( + (element) => { + if (props.wrapElement) { + element = props.wrapElement(element); + } + return callback(element); + }, + [...deps, props.wrapElement] + ); + return { ...props, wrapElement }; +} +function useMetadataProps(props, key, value) { + const parent = props.onLoadedMetadataCapture; + const onLoadedMetadataCapture = (0, import_react5.useMemo)(() => { + return Object.assign(() => { + }, { ...parent, [key]: value }); + }, [parent, key, value]); + return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }]; +} +var hasInstalledGlobalEventListeners = false; +function useIsMouseMoving() { + (0, import_react5.useEffect)(() => { + if (hasInstalledGlobalEventListeners) return; + addGlobalEventListener("mousemove", setMouseMoving, true); + addGlobalEventListener("mousedown", resetMouseMoving, true); + addGlobalEventListener("mouseup", resetMouseMoving, true); + addGlobalEventListener("keydown", resetMouseMoving, true); + addGlobalEventListener("scroll", resetMouseMoving, true); + hasInstalledGlobalEventListeners = true; + }, []); + const isMouseMoving = useEvent(() => mouseMoving); + return isMouseMoving; +} +var mouseMoving = false; +var previousScreenX = 0; +var previousScreenY = 0; +function hasMouseMovement(event) { + const movementX = event.movementX || event.screenX - previousScreenX; + const movementY = event.movementY || event.screenY - previousScreenY; + previousScreenX = event.screenX; + previousScreenY = event.screenY; + return movementX || movementY || false; +} +function setMouseMoving(event) { + if (!hasMouseMovement(event)) return; + mouseMoving = true; +} +function resetMouseMoving() { + mouseMoving = false; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GWSL6KNJ.js +var React7 = __toESM(require_react(), 1); +var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); +function forwardRef22(render4) { + const Role = React7.forwardRef( + // @ts-ignore Incompatible with React 19 types. Ignore for now. + (props, ref) => render4({ ...props, ref }) + ); + Role.displayName = render4.displayName || render4.name; + return Role; +} +function memo22(Component, propsAreEqual) { + return React7.memo(Component, propsAreEqual); +} +function createElement3(Type, props) { + const { wrapElement, render: render4, ...rest } = props; + const mergedRef = useMergeRefs(props.ref, getRefProperty(render4)); + let element; + if (React7.isValidElement(render4)) { + const renderProps = { + // @ts-ignore Incompatible with React 19 types. Ignore for now. + ...render4.props, + ref: mergedRef + }; + element = React7.cloneElement(render4, mergeProps2(rest, renderProps)); + } else if (render4) { + element = render4(rest); + } else { + element = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Type, { ...rest }); + } + if (wrapElement) { + return wrapElement(element); + } + return element; +} +function createHook(useProps) { + const useRole = (props = {}) => { + return useProps(props); + }; + useRole.displayName = useProps.name; + return useRole; +} +function createStoreContext(providers = [], scopedProviders = []) { + const context = React7.createContext(void 0); + const scopedContext = React7.createContext(void 0); + const useContext28 = () => React7.useContext(context); + const useScopedContext = (onlyScoped = false) => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (onlyScoped) return scoped; + return scoped || store; + }; + const useProviderContext = () => { + const scoped = React7.useContext(scopedContext); + const store = useContext28(); + if (scoped && scoped === store) return; + return store; + }; + const ContextProvider = (props) => { + return providers.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(context.Provider, { ...props }) + ); + }; + const ScopedContextProvider = (props) => { + return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ContextProvider, { ...props, children: scopedProviders.reduceRight( + (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Provider, { ...props, children }), + /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(scopedContext.Provider, { ...props }) + ) }); + }; + return { + context, + scopedContext, + useContext: useContext28, + useScopedContext, + useProviderContext, + ContextProvider, + ScopedContextProvider + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SMPCIMZM.js +var ctx = createStoreContext(); +var useCollectionContext = ctx.useContext; +var useCollectionScopedContext = ctx.useScopedContext; +var useCollectionProviderContext = ctx.useProviderContext; +var CollectionContextProvider = ctx.ContextProvider; +var CollectionScopedContextProvider = ctx.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/AVVXDJMZ.js +var import_react6 = __toESM(require_react(), 1); +var ctx2 = createStoreContext( + [CollectionContextProvider], + [CollectionScopedContextProvider] +); +var useCompositeContext = ctx2.useContext; +var useCompositeScopedContext = ctx2.useScopedContext; +var useCompositeProviderContext = ctx2.useProviderContext; +var CompositeContextProvider = ctx2.ContextProvider; +var CompositeScopedContextProvider = ctx2.ScopedContextProvider; +var CompositeItemContext = (0, import_react6.createContext)( + void 0 +); +var CompositeRowContext = (0, import_react6.createContext)( + void 0 +); + +// node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js +function findFirstEnabledItem(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItem(store, id) { + if (!id) return null; + return store.item(id) || null; +} +function groupItemsByRows(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function selectTextField(element, collapseToEnd = false) { + if (isTextField(element)) { + element.setSelectionRange( + collapseToEnd ? element.value.length : 0, + element.value.length + ); + } else if (element.isContentEditable) { + const selection = getDocument(element).getSelection(); + selection == null ? void 0 : selection.selectAllChildren(element); + if (collapseToEnd) { + selection == null ? void 0 : selection.collapseToEnd(); + } + } +} +var FOCUS_SILENTLY = /* @__PURE__ */ Symbol("FOCUS_SILENTLY"); +function focusSilently(element) { + element[FOCUS_SILENTLY] = true; + element.focus({ preventScroll: true }); +} +function silentlyFocused(element) { + const isSilentlyFocused = element[FOCUS_SILENTLY]; + delete element[FOCUS_SILENTLY]; + return isSilentlyFocused; +} +function isItem(store, element, exclude) { + if (!element) return false; + if (element === exclude) return false; + const item = store.item(element.id); + if (!item) return false; + if (exclude && item.element === exclude) return false; + return true; +} + +// node_modules/@ariakit/react-core/esm/__chunks/Z2O3VLAQ.js +var import_react7 = __toESM(require_react(), 1); +var TagName = "div"; +var useCollectionItem = createHook( + function useCollectionItem2({ + store, + shouldRegisterItem = true, + getItem = identity, + // @ts-expect-error This prop may come from a collection renderer. + element, + ...props + }) { + const context = useCollectionContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react7.useRef)(element); + (0, import_react7.useEffect)(() => { + const element2 = ref.current; + if (!id) return; + if (!element2) return; + if (!shouldRegisterItem) return; + const item = getItem({ id, element: element2 }); + return store == null ? void 0 : store.renderItem(item); + }, [id, shouldRegisterItem, getItem, store]); + props = { + ...props, + ref: useMergeRefs(ref, props.ref) + }; + return removeUndefinedValues(props); + } +); +var CollectionItem = forwardRef22(function CollectionItem2(props) { + const htmlProps = useCollectionItem(props); + return createElement3(TagName, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js +var import_react8 = __toESM(require_react(), 1); +var FocusableContext = (0, import_react8.createContext)(true); + +// node_modules/@ariakit/core/esm/utils/focus.js +var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])"; +function isFocusable(element) { + if (!element.matches(selector)) return false; + if (!isVisible(element)) return false; + if (element.closest("[inert]")) return false; + return true; +} +function getClosestFocusable(element) { + while (element && !isFocusable(element)) { + element = element.closest(selector); + } + return element || null; +} +function hasFocus(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (activeElement === element) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + return activeDescendant === element.id; +} +function hasFocusWithin(element) { + const activeElement = getActiveElement(element); + if (!activeElement) return false; + if (contains(element, activeElement)) return true; + const activeDescendant = activeElement.getAttribute("aria-activedescendant"); + if (!activeDescendant) return false; + if (!("id" in element)) return false; + if (activeDescendant === element.id) return true; + return !!element.querySelector(`#${CSS.escape(activeDescendant)}`); +} +function focusIfNeeded(element) { + if (!hasFocusWithin(element) && isFocusable(element)) { + element.focus(); + } +} +function focusIntoView(element, options) { + if (!("scrollIntoView" in element)) { + element.focus(); + } else { + element.focus({ preventScroll: true }); + element.scrollIntoView({ block: "nearest", inline: "nearest", ...options }); + } +} + +// node_modules/@ariakit/react-core/esm/__chunks/U6HHPQDW.js +var import_react9 = __toESM(require_react(), 1); +var TagName2 = "div"; +var isSafariBrowser = isSafari(); +var alwaysFocusVisibleInputTypes = [ + "text", + "search", + "url", + "tel", + "email", + "password", + "number", + "date", + "month", + "week", + "time", + "datetime", + "datetime-local" +]; +var safariFocusAncestorSymbol = /* @__PURE__ */ Symbol("safariFocusAncestor"); +function markSafariFocusAncestor(element, value) { + if (!element) return; + element[safariFocusAncestorSymbol] = value; +} +function isAlwaysFocusVisible(element) { + const { tagName, readOnly, type } = element; + if (tagName === "TEXTAREA" && !readOnly) return true; + if (tagName === "SELECT" && !readOnly) return true; + if (tagName === "INPUT" && !readOnly) { + return alwaysFocusVisibleInputTypes.includes(type); + } + if (element.isContentEditable) return true; + const role = element.getAttribute("role"); + if (role === "combobox" && element.dataset.name) { + return true; + } + return false; +} +function getLabels(element) { + if ("labels" in element) { + return element.labels; + } + return null; +} +function isNativeCheckboxOrRadio(element) { + const tagName = element.tagName.toLowerCase(); + if (tagName === "input" && element.type) { + return element.type === "radio" || element.type === "checkbox"; + } + return false; +} +function isNativeTabbable(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a"; +} +function supportsDisabledAttribute(tagName) { + if (!tagName) return true; + return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea"; +} +function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) { + if (!focusable) { + return tabIndexProp; + } + if (trulyDisabled) { + if (nativeTabbable && !supportsDisabled) { + return -1; + } + return; + } + if (nativeTabbable) { + return tabIndexProp; + } + return tabIndexProp || 0; +} +function useDisableEvent(onEvent, disabled) { + return useEvent((event) => { + onEvent == null ? void 0 : onEvent(event); + if (event.defaultPrevented) return; + if (disabled) { + event.stopPropagation(); + event.preventDefault(); + } + }); +} +var hasInstalledGlobalEventListeners2 = false; +var isKeyboardModality = true; +function onGlobalMouseDown(event) { + const target = event.target; + if (target && "hasAttribute" in target) { + if (!target.hasAttribute("data-focus-visible")) { + isKeyboardModality = false; + } + } +} +function onGlobalKeyDown(event) { + if (event.metaKey) return; + if (event.ctrlKey) return; + if (event.altKey) return; + isKeyboardModality = true; +} +var useFocusable = createHook( + function useFocusable2({ + focusable = true, + accessibleWhenDisabled, + autoFocus, + onFocusVisible, + ...props + }) { + const ref = (0, import_react9.useRef)(null); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (hasInstalledGlobalEventListeners2) return; + addGlobalEventListener("mousedown", onGlobalMouseDown, true); + addGlobalEventListener("keydown", onGlobalKeyDown, true); + hasInstalledGlobalEventListeners2 = true; + }, [focusable]); + if (isSafariBrowser) { + (0, import_react9.useEffect)(() => { + if (!focusable) return; + const element = ref.current; + if (!element) return; + if (!isNativeCheckboxOrRadio(element)) return; + const labels = getLabels(element); + if (!labels) return; + const onMouseUp = () => queueMicrotask(() => element.focus()); + for (const label of labels) { + label.addEventListener("mouseup", onMouseUp); + } + return () => { + for (const label of labels) { + label.removeEventListener("mouseup", onMouseUp); + } + }; + }, [focusable]); + } + const disabled = focusable && disabledFromProps(props); + const trulyDisabled = !!disabled && !accessibleWhenDisabled; + const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (trulyDisabled && focusVisible) { + setFocusVisible(false); + } + }, [focusable, trulyDisabled, focusVisible]); + (0, import_react9.useEffect)(() => { + if (!focusable) return; + if (!focusVisible) return; + const element = ref.current; + if (!element) return; + if (typeof IntersectionObserver === "undefined") return; + const observer = new IntersectionObserver(() => { + if (!isFocusable(element)) { + setFocusVisible(false); + } + }); + observer.observe(element); + return () => observer.disconnect(); + }, [focusable, focusVisible]); + const onKeyPressCapture = useDisableEvent( + props.onKeyPressCapture, + disabled + ); + const onMouseDownCapture = useDisableEvent( + props.onMouseDownCapture, + disabled + ); + const onClickCapture = useDisableEvent(props.onClickCapture, disabled); + const onMouseDownProp = props.onMouseDown; + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + const element = event.currentTarget; + if (!isSafariBrowser) return; + if (isPortalEvent(event)) return; + if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return; + let receivedFocus = false; + const onFocus = () => { + receivedFocus = true; + }; + const options = { capture: true, once: true }; + element.addEventListener("focusin", onFocus, options); + const focusableContainer = getClosestFocusable(element.parentElement); + markSafariFocusAncestor(focusableContainer, true); + queueBeforeEvent(element, "mouseup", () => { + element.removeEventListener("focusin", onFocus, true); + markSafariFocusAncestor(focusableContainer, false); + if (receivedFocus) return; + focusIfNeeded(element); + }); + }); + const handleFocusVisible = (event, currentTarget) => { + if (currentTarget) { + event.currentTarget = currentTarget; + } + if (!focusable) return; + const element = event.currentTarget; + if (!element) return; + if (!hasFocus(element)) return; + onFocusVisible == null ? void 0 : onFocusVisible(event); + if (event.defaultPrevented) return; + element.dataset.focusVisible = "true"; + setFocusVisible(true); + }; + const onKeyDownCaptureProp = props.onKeyDownCapture; + const onKeyDownCapture = useEvent((event) => { + onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (focusVisible) return; + if (event.metaKey) return; + if (event.altKey) return; + if (event.ctrlKey) return; + if (!isSelfTarget(event)) return; + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + queueBeforeEvent(element, "focusout", applyFocusVisible); + }); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!focusable) return; + if (!isSelfTarget(event)) { + setFocusVisible(false); + return; + } + const element = event.currentTarget; + const applyFocusVisible = () => handleFocusVisible(event, element); + if (isKeyboardModality || isAlwaysFocusVisible(event.target)) { + queueBeforeEvent(event.target, "focusout", applyFocusVisible); + } else { + setFocusVisible(false); + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + onBlurProp == null ? void 0 : onBlurProp(event); + if (!focusable) return; + if (!isFocusEventOutside(event)) return; + event.currentTarget.removeAttribute("data-focus-visible"); + setFocusVisible(false); + }); + const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext); + const autoFocusRef = useEvent((element) => { + if (!focusable) return; + if (!autoFocus) return; + if (!element) return; + if (!autoFocusOnShow) return; + queueMicrotask(() => { + if (hasFocus(element)) return; + if (!isFocusable(element)) return; + element.focus(); + }); + }); + const tagName = useTagName(ref); + const nativeTabbable = focusable && isNativeTabbable(tagName); + const supportsDisabled = focusable && supportsDisabledAttribute(tagName); + const styleProp = props.style; + const style = (0, import_react9.useMemo)(() => { + if (trulyDisabled) { + return { pointerEvents: "none", ...styleProp }; + } + return styleProp; + }, [trulyDisabled, styleProp]); + props = { + "data-focus-visible": focusable && focusVisible || void 0, + "data-autofocus": autoFocus || void 0, + "aria-disabled": disabled || void 0, + ...props, + ref: useMergeRefs(ref, autoFocusRef, props.ref), + style, + tabIndex: getTabIndex( + focusable, + trulyDisabled, + nativeTabbable, + supportsDisabled, + props.tabIndex + ), + disabled: supportsDisabled && trulyDisabled ? true : void 0, + // TODO: Test Focusable contentEditable. + contentEditable: disabled ? void 0 : props.contentEditable, + onKeyPressCapture, + onClickCapture, + onMouseDownCapture, + onMouseDown, + onKeyDownCapture, + onFocusCapture, + onBlur + }; + return removeUndefinedValues(props); + } +); +var Focusable = forwardRef22(function Focusable2(props) { + const htmlProps = useFocusable(props); + return createElement3(TagName2, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/PZ3OL7I2.js +var import_react10 = __toESM(require_react(), 1); +var TagName3 = "button"; +function isNativeClick(event) { + if (!event.isTrusted) return false; + const element = event.currentTarget; + if (event.key === "Enter") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A"; + } + if (event.key === " ") { + return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT"; + } + return false; +} +var symbol = /* @__PURE__ */ Symbol("command"); +var useCommand = createHook( + function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { + const ref = (0, import_react10.useRef)(null); + const [isNativeButton, setIsNativeButton] = (0, import_react10.useState)(false); + (0, import_react10.useEffect)(() => { + if (!ref.current) return; + setIsNativeButton(isButton(ref.current)); + }, []); + const [active, setActive] = (0, import_react10.useState)(false); + const activeRef = (0, import_react10.useRef)(false); + const disabled = disabledFromProps(props); + const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + const element = event.currentTarget; + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (!isSelfTarget(event)) return; + if (isTextField(element)) return; + if (element.isContentEditable) return; + const isEnter = clickOnEnter && event.key === "Enter"; + const isSpace = clickOnSpace && event.key === " "; + const shouldPreventEnter = event.key === "Enter" && !clickOnEnter; + const shouldPreventSpace = event.key === " " && !clickOnSpace; + if (shouldPreventEnter || shouldPreventSpace) { + event.preventDefault(); + return; + } + if (isEnter || isSpace) { + const nativeClick = isNativeClick(event); + if (isEnter) { + if (!nativeClick) { + event.preventDefault(); + const { view, ...eventInit } = event; + const click = () => fireClickEvent(element, eventInit); + if (isFirefox()) { + queueBeforeEvent(element, "keyup", click); + } else { + queueMicrotask(click); + } + } + } else if (isSpace) { + activeRef.current = true; + if (!nativeClick) { + event.preventDefault(); + setActive(true); + } + } + } + }); + const onKeyUpProp = props.onKeyUp; + const onKeyUp = useEvent((event) => { + onKeyUpProp == null ? void 0 : onKeyUpProp(event); + if (event.defaultPrevented) return; + if (isDuplicate) return; + if (disabled) return; + if (event.metaKey) return; + const isSpace = clickOnSpace && event.key === " "; + if (activeRef.current && isSpace) { + activeRef.current = false; + if (!isNativeClick(event)) { + event.preventDefault(); + setActive(false); + const element = event.currentTarget; + const { view, ...eventInit } = event; + queueMicrotask(() => fireClickEvent(element, eventInit)); + } + } + }); + props = { + "data-active": active || void 0, + type: isNativeButton ? "button" : void 0, + ...metadataProps, + ...props, + ref: useMergeRefs(ref, props.ref), + onKeyDown, + onKeyUp + }; + props = useFocusable(props); + return props; + } +); +var Command = forwardRef22(function Command2(props) { + const htmlProps = useCommand(props); + return createElement3(TagName3, htmlProps); +}); + +// node_modules/@ariakit/core/esm/__chunks/SXKM4CGU.js +function getInternal(store, key) { + const internals = store.__unstableInternals; + invariant(internals, "Invalid store"); + return internals[key]; +} +function createStore(initialState, ...stores) { + let state = initialState; + let prevStateBatch = state; + let lastUpdate = /* @__PURE__ */ Symbol(); + let destroy = noop; + const instances = /* @__PURE__ */ new Set(); + const updatedKeys = /* @__PURE__ */ new Set(); + const setups = /* @__PURE__ */ new Set(); + const listeners = /* @__PURE__ */ new Set(); + const batchListeners = /* @__PURE__ */ new Set(); + const disposables = /* @__PURE__ */ new WeakMap(); + const listenerKeys = /* @__PURE__ */ new WeakMap(); + const storeSetup = (callback) => { + setups.add(callback); + return () => setups.delete(callback); + }; + const storeInit = () => { + const initialized = instances.size; + const instance = /* @__PURE__ */ Symbol(); + instances.add(instance); + const maybeDestroy = () => { + instances.delete(instance); + if (instances.size) return; + destroy(); + }; + if (initialized) return maybeDestroy; + const desyncs = getKeys(state).map( + (key) => chain( + ...stores.map((store) => { + var _a; + const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store); + if (!storeState) return; + if (!hasOwnProperty(storeState, key)) return; + return sync(store, [key], (state2) => { + setState( + key, + state2[key], + // @ts-expect-error - Not public API. This is just to prevent + // infinite loops. + true + ); + }); + }) + ) + ); + const teardowns = []; + for (const setup2 of setups) { + teardowns.push(setup2()); + } + const cleanups = stores.map(init); + destroy = chain(...desyncs, ...teardowns, ...cleanups); + return maybeDestroy; + }; + const sub = (keys, listener, set = listeners) => { + set.add(listener); + listenerKeys.set(listener, keys); + return () => { + var _a; + (_a = disposables.get(listener)) == null ? void 0 : _a(); + disposables.delete(listener); + listenerKeys.delete(listener); + set.delete(listener); + }; + }; + const storeSubscribe = (keys, listener) => sub(keys, listener); + const storeSync = (keys, listener) => { + disposables.set(listener, listener(state, state)); + return sub(keys, listener); + }; + const storeBatch = (keys, listener) => { + disposables.set(listener, listener(state, prevStateBatch)); + return sub(keys, listener, batchListeners); + }; + const storePick = (keys) => createStore(pick(state, keys), finalStore); + const storeOmit = (keys) => createStore(omit2(state, keys), finalStore); + const getState = () => state; + const setState = (key, value, fromStores = false) => { + var _a; + if (!hasOwnProperty(state, key)) return; + const nextValue = applyState(value, state[key]); + if (nextValue === state[key]) return; + if (!fromStores) { + for (const store of stores) { + (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue); + } + } + const prevState = state; + state = { ...state, [key]: nextValue }; + const thisUpdate = /* @__PURE__ */ Symbol(); + lastUpdate = thisUpdate; + updatedKeys.add(key); + const run = (listener, prev, uKeys) => { + var _a2; + const keys = listenerKeys.get(listener); + const updated = (k) => uKeys ? uKeys.has(k) : k === key; + if (!keys || keys.some(updated)) { + (_a2 = disposables.get(listener)) == null ? void 0 : _a2(); + disposables.set(listener, listener(state, prev)); + } + }; + for (const listener of listeners) { + run(listener, prevState); + } + queueMicrotask(() => { + if (lastUpdate !== thisUpdate) return; + const snapshot = state; + for (const listener of batchListeners) { + run(listener, prevStateBatch, updatedKeys); + } + prevStateBatch = snapshot; + updatedKeys.clear(); + }); + }; + const finalStore = { + getState, + setState, + __unstableInternals: { + setup: storeSetup, + init: storeInit, + subscribe: storeSubscribe, + sync: storeSync, + batch: storeBatch, + pick: storePick, + omit: storeOmit + } + }; + return finalStore; +} +function setup(store, ...args) { + if (!store) return; + return getInternal(store, "setup")(...args); +} +function init(store, ...args) { + if (!store) return; + return getInternal(store, "init")(...args); +} +function subscribe(store, ...args) { + if (!store) return; + return getInternal(store, "subscribe")(...args); +} +function sync(store, ...args) { + if (!store) return; + return getInternal(store, "sync")(...args); +} +function batch(store, ...args) { + if (!store) return; + return getInternal(store, "batch")(...args); +} +function omit22(store, ...args) { + if (!store) return; + return getInternal(store, "omit")(...args); +} +function pick2(store, ...args) { + if (!store) return; + return getInternal(store, "pick")(...args); +} +function mergeStore(...stores) { + var _a; + const initialState = {}; + for (const store2 of stores) { + const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2); + if (nextState) { + Object.assign(initialState, nextState); + } + } + const store = createStore(initialState, ...stores); + return Object.assign({}, ...stores, store); +} +function throwOnConflictingProps(props, store) { + if (false) return; + if (!store) return; + const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => { + var _a; + const stateKey = key.replace("default", ""); + return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}${stateKey.slice(1)}`; + }); + if (!defaultKeys.length) return; + const storeState = store.getState(); + const conflictingProps = defaultKeys.filter( + (key) => hasOwnProperty(storeState, key) + ); + if (!conflictingProps.length) return; + throw new Error( + `Passing a store prop in conjunction with a default state is not supported. + +const store = useSelectStore(); + + ^ ^ + +Instead, pass the default state to the topmost store: + +const store = useSelectStore({ defaultValue: "Apple" }); + + +See https://github.com/ariakit/ariakit/pull/2745 for more details. + +If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit +` + ); +} + +// node_modules/@ariakit/react-core/esm/__chunks/Q5W46E73.js +var React8 = __toESM(require_react(), 1); +var import_shim = __toESM(require_shim(), 1); +var { useSyncExternalStore } = import_shim.default; +var noopSubscribe = () => () => { +}; +function useStoreState(store, keyOrSelector = identity) { + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const key = typeof keyOrSelector === "string" ? keyOrSelector : null; + const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null; + const state = store == null ? void 0 : store.getState(); + if (selector2) return selector2(state); + if (!state) return; + if (!key) return; + if (!hasOwnProperty(state, key)) return; + return state[key]; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreStateObject(store, object) { + const objRef = React8.useRef( + {} + ); + const storeSubscribe = React8.useCallback( + (callback) => { + if (!store) return noopSubscribe(); + return subscribe(store, null, callback); + }, + [store] + ); + const getSnapshot = () => { + const state = store == null ? void 0 : store.getState(); + let updated = false; + const obj = objRef.current; + for (const prop in object) { + const keyOrSelector = object[prop]; + if (typeof keyOrSelector === "function") { + const value = keyOrSelector(state); + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + if (typeof keyOrSelector === "string") { + if (!state) continue; + if (!hasOwnProperty(state, keyOrSelector)) continue; + const value = state[keyOrSelector]; + if (value !== obj[prop]) { + obj[prop] = value; + updated = true; + } + } + } + if (updated) { + objRef.current = { ...obj }; + } + return objRef.current; + }; + return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot); +} +function useStoreProps(store, props, key, setKey) { + const value = hasOwnProperty(props, key) ? props[key] : void 0; + const setValue = setKey ? props[setKey] : void 0; + const propsRef = useLiveRef({ value, setValue }); + useSafeLayoutEffect(() => { + return sync(store, [key], (state, prev) => { + const { value: value2, setValue: setValue2 } = propsRef.current; + if (!setValue2) return; + if (state[key] === prev[key]) return; + if (state[key] === value2) return; + setValue2(state[key]); + }); + }, [store, key]); + useSafeLayoutEffect(() => { + if (value === void 0) return; + store.setState(key, value); + return batch(store, [key], () => { + if (value === void 0) return; + store.setState(key, value); + }); + }); +} +function useStore(createStore2, props) { + const [store, setStore] = React8.useState(() => createStore2(props)); + useSafeLayoutEffect(() => init(store), [store]); + const useState26 = React8.useCallback( + (keyOrSelector) => useStoreState(store, keyOrSelector), + [store] + ); + const memoizedStore = React8.useMemo( + () => ({ ...store, useState: useState26 }), + [store, useState26] + ); + const updateStore = useEvent(() => { + setStore((store2) => createStore2({ ...props, ...store2.getState() })); + }); + return [memoizedStore, updateStore]; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WZWDIE3S.js +var import_react11 = __toESM(require_react(), 1); +var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); +var TagName4 = "button"; +function isEditableElement(element) { + if (isTextbox(element)) return true; + return element.tagName === "INPUT" && !isButton(element); +} +function getNextPageOffset(scrollingElement, pageUp = false) { + const height = scrollingElement.clientHeight; + const { top } = scrollingElement.getBoundingClientRect(); + const pageSize = Math.max(height * 0.875, height - 40) * 1.5; + const pageOffset = pageUp ? height - pageSize + top : pageSize + top; + if (scrollingElement.tagName === "HTML") { + return pageOffset + scrollingElement.scrollTop; + } + return pageOffset; +} +function getItemOffset(itemElement, pageUp = false) { + const { top } = itemElement.getBoundingClientRect(); + if (pageUp) { + return top + itemElement.clientHeight; + } + return top; +} +function findNextPageItemId(element, store, next, pageUp = false) { + var _a; + if (!store) return; + if (!next) return; + const { renderedItems } = store.getState(); + const scrollingElement = getScrollingElement(element); + if (!scrollingElement) return; + const nextPageOffset = getNextPageOffset(scrollingElement, pageUp); + let id; + let prevDifference; + for (let i2 = 0; i2 < renderedItems.length; i2 += 1) { + const previousId = id; + id = next(i2); + if (!id) break; + if (id === previousId) continue; + const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element; + if (!itemElement) continue; + const itemOffset = getItemOffset(itemElement, pageUp); + const difference = itemOffset - nextPageOffset; + const absDifference = Math.abs(difference); + if (pageUp && difference <= 0 || !pageUp && difference >= 0) { + if (prevDifference !== void 0 && prevDifference < absDifference) { + id = previousId; + } + break; + } + prevDifference = absDifference; + } + return id; +} +function targetIsAnotherItem(event, store) { + if (isSelfTarget(event)) return false; + return isItem(store, event.target); +} +var useCompositeItem = createHook( + function useCompositeItem2({ + store, + rowId: rowIdProp, + preventScrollOnKeyDown = false, + moveOnKeyPress = true, + tabbable = false, + getItem: getItemProp, + "aria-setsize": ariaSetSizeProp, + "aria-posinset": ariaPosInSetProp, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + const id = useId3(props.id); + const ref = (0, import_react11.useRef)(null); + const row = (0, import_react11.useContext)(CompositeRowContext); + const disabled = disabledFromProps(props); + const trulyDisabled = disabled && !props.accessibleWhenDisabled; + const { + rowId, + baseElement, + isActiveItem, + ariaSetSize, + ariaPosInSet, + isTabbable + } = useStoreStateObject(store, { + rowId(state) { + if (rowIdProp) return rowIdProp; + if (!state) return; + if (!(row == null ? void 0 : row.baseElement)) return; + if (row.baseElement !== state.baseElement) return; + return row.id; + }, + baseElement(state) { + return (state == null ? void 0 : state.baseElement) || void 0; + }, + isActiveItem(state) { + return !!state && state.activeId === id; + }, + ariaSetSize(state) { + if (ariaSetSizeProp != null) return ariaSetSizeProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaSetSize)) return; + if (row.baseElement !== state.baseElement) return; + return row.ariaSetSize; + }, + ariaPosInSet(state) { + if (ariaPosInSetProp != null) return ariaPosInSetProp; + if (!state) return; + if (!(row == null ? void 0 : row.ariaPosInSet)) return; + if (row.baseElement !== state.baseElement) return; + const itemsInRow = state.renderedItems.filter( + (item) => item.rowId === rowId + ); + return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id); + }, + isTabbable(state) { + if (!(state == null ? void 0 : state.renderedItems.length)) return true; + if (state.virtualFocus) return false; + if (tabbable) return true; + if (state.activeId === null) return false; + const item = store == null ? void 0 : store.item(state.activeId); + if (item == null ? void 0 : item.disabled) return true; + if (!(item == null ? void 0 : item.element)) return true; + return state.activeId === id; + } + }); + const getItem = (0, import_react11.useCallback)( + (item) => { + var _a; + const nextItem = { + ...item, + id: id || item.id, + rowId, + disabled: !!trulyDisabled, + children: (_a = item.element) == null ? void 0 : _a.textContent + }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [id, rowId, trulyDisabled, getItemProp] + ); + const onFocusProp = props.onFocus; + const hasFocusedComposite = (0, import_react11.useRef)(false); + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (isPortalEvent(event)) return; + if (!id) return; + if (!store) return; + if (targetIsAnotherItem(event, store)) return; + const { virtualFocus, baseElement: baseElement2 } = store.getState(); + store.setActiveId(id); + if (isTextbox(event.currentTarget)) { + selectTextField(event.currentTarget); + } + if (!virtualFocus) return; + if (!isSelfTarget(event)) return; + if (isEditableElement(event.currentTarget)) return; + if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return; + if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) { + event.currentTarget.scrollIntoView({ + block: "nearest", + inline: "nearest" + }); + } + hasFocusedComposite.current = true; + const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget); + if (fromComposite) { + focusSilently(baseElement2); + } else { + baseElement2.focus(); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + const state = store == null ? void 0 : store.getState(); + if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) { + hasFocusedComposite.current = false; + event.preventDefault(); + event.stopPropagation(); + } + }); + const onKeyDownProp = props.onKeyDown; + const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown); + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + if (!isSelfTarget(event)) return; + if (!store) return; + const { currentTarget } = event; + const state = store.getState(); + const item = store.item(id); + const isGrid2 = !!(item == null ? void 0 : item.rowId); + const isVertical = state.orientation !== "horizontal"; + const isHorizontal = state.orientation !== "vertical"; + const canHomeEnd = () => { + if (isGrid2) return true; + if (isHorizontal) return true; + if (!state.baseElement) return true; + if (!isTextField(state.baseElement)) return true; + return false; + }; + const keyMap = { + ArrowUp: (isGrid2 || isVertical) && store.up, + ArrowRight: (isGrid2 || isHorizontal) && store.next, + ArrowDown: (isGrid2 || isVertical) && store.down, + ArrowLeft: (isGrid2 || isHorizontal) && store.previous, + Home: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.first(); + } + return store == null ? void 0 : store.previous(-1); + }, + End: () => { + if (!canHomeEnd()) return; + if (!isGrid2 || event.ctrlKey) { + return store == null ? void 0 : store.last(); + } + return store == null ? void 0 : store.next(-1); + }, + PageUp: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true); + }, + PageDown: () => { + return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down); + } + }; + const action = keyMap[event.key]; + if (action) { + if (isTextbox(currentTarget)) { + const selection = getTextboxSelection(currentTarget); + const isLeft = isHorizontal && event.key === "ArrowLeft"; + const isRight = isHorizontal && event.key === "ArrowRight"; + const isUp = isVertical && event.key === "ArrowUp"; + const isDown = isVertical && event.key === "ArrowDown"; + if (isRight || isDown) { + const { length: valueLength } = getTextboxValue(currentTarget); + if (selection.end !== valueLength) return; + } else if ((isLeft || isUp) && selection.start !== 0) return; + } + const nextId = action(); + if (preventScrollOnKeyDownProp(event) || nextId !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(nextId); + } + } + }); + const providerValue = (0, import_react11.useMemo)( + () => ({ id, baseElement }), + [id, baseElement] + ); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }), + [providerValue] + ); + props = { + id, + "data-active-item": isActiveItem || void 0, + ...props, + ref: useMergeRefs(ref, props.ref), + tabIndex: isTabbable ? props.tabIndex : -1, + onFocus, + onBlurCapture, + onKeyDown + }; + props = useCommand(props); + props = useCollectionItem({ + store, + ...props, + getItem, + shouldRegisterItem: id ? props.shouldRegisterItem : false + }); + return removeUndefinedValues({ + ...props, + "aria-setsize": ariaSetSize, + "aria-posinset": ariaPosInSet + }); + } +); +var CompositeItem = memo22( + forwardRef22(function CompositeItem2(props) { + const htmlProps = useCompositeItem(props); + return createElement3(TagName4, htmlProps); + }) +); + +// node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js +function toArray(arg) { + if (Array.isArray(arg)) { + return arg; + } + return typeof arg !== "undefined" ? [arg] : []; +} +function flatten2DArray(array) { + const flattened = []; + for (const row of array) { + flattened.push(...row); + } + return flattened; +} +function reverseArray(array) { + return array.slice().reverse(); +} + +// node_modules/@ariakit/react-core/esm/__chunks/ZMWF7ASR.js +var import_react12 = __toESM(require_react(), 1); +var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); +var TagName5 = "div"; +function isGrid(items) { + return items.some((item) => !!item.rowId); +} +function isPrintableKey(event) { + const target = event.target; + if (target && !isTextField(target)) return false; + return event.key.length === 1 && !event.ctrlKey && !event.metaKey; +} +function isModifierKey(event) { + return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta"; +} +function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) { + return useEvent((event) => { + var _a; + onKeyboardEvent == null ? void 0 : onKeyboardEvent(event); + if (event.defaultPrevented) return; + if (event.isPropagationStopped()) return; + if (!isSelfTarget(event)) return; + if (isModifierKey(event)) return; + if (isPrintableKey(event)) return; + const state = store.getState(); + const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element; + if (!activeElement) return; + const { view, ...eventInit } = event; + const previousElement = previousElementRef == null ? void 0 : previousElementRef.current; + if (activeElement !== previousElement) { + activeElement.focus(); + } + if (!fireKeyboardEvent(activeElement, event.type, eventInit)) { + event.preventDefault(); + } + if (event.currentTarget.contains(activeElement)) { + event.stopPropagation(); + } + }); +} +function findFirstEnabledItemInTheLastRow(items) { + return findFirstEnabledItem( + flatten2DArray(reverseArray(groupItemsByRows(items))) + ); +} +function useScheduleFocus(store) { + const [scheduled, setScheduled] = (0, import_react12.useState)(false); + const schedule = (0, import_react12.useCallback)(() => setScheduled(true), []); + const activeItem = store.useState( + (state) => getEnabledItem(store, state.activeId) + ); + (0, import_react12.useEffect)(() => { + const activeElement = activeItem == null ? void 0 : activeItem.element; + if (!scheduled) return; + if (!activeElement) return; + setScheduled(false); + activeElement.focus({ preventScroll: true }); + }, [activeItem, scheduled]); + return schedule; +} +var useComposite = createHook( + function useComposite2({ + store, + composite = true, + focusOnMove = composite, + moveOnKeyPress = true, + ...props + }) { + const context = useCompositeProviderContext(); + store = store || context; + invariant( + store, + "Composite must receive a `store` prop or be wrapped in a CompositeProvider component." + ); + const ref = (0, import_react12.useRef)(null); + const previousElementRef = (0, import_react12.useRef)(null); + const scheduleFocus = useScheduleFocus(store); + const moves = store.useState("moves"); + const [, setBaseElement] = useTransactionState( + composite ? store.setBaseElement : null + ); + (0, import_react12.useEffect)(() => { + var _a; + if (!store) return; + if (!moves) return; + if (!composite) return; + if (!focusOnMove) return; + const { activeId: activeId2 } = store.getState(); + const itemElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + if (!itemElement) return; + focusIntoView(itemElement); + }, [store, moves, composite, focusOnMove]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!moves) return; + if (!composite) return; + const { baseElement, activeId: activeId2 } = store.getState(); + const isSelfAcive = activeId2 === null; + if (!isSelfAcive) return; + if (!baseElement) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (previousElement) { + fireBlurEvent(previousElement, { relatedTarget: baseElement }); + } + if (!hasFocus(baseElement)) { + baseElement.focus(); + } + }, [store, moves, composite]); + const activeId = store.useState("activeId"); + const virtualFocus = store.useState("virtualFocus"); + useSafeLayoutEffect(() => { + var _a; + if (!store) return; + if (!composite) return; + if (!virtualFocus) return; + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (!previousElement) return; + const activeElement = (_a = getEnabledItem(store, activeId)) == null ? void 0 : _a.element; + const relatedTarget = activeElement || getActiveElement(previousElement); + if (relatedTarget === previousElement) return; + fireBlurEvent(previousElement, { relatedTarget }); + }, [store, activeId, virtualFocus, composite]); + const onKeyDownCapture = useKeyboardEventProxy( + store, + props.onKeyDownCapture, + previousElementRef + ); + const onKeyUpCapture = useKeyboardEventProxy( + store, + props.onKeyUpCapture, + previousElementRef + ); + const onFocusCaptureProp = props.onFocusCapture; + const onFocusCapture = useEvent((event) => { + onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (!virtualFocus2) return; + const previousActiveElement = event.relatedTarget; + const isSilentlyFocused = silentlyFocused(event.currentTarget); + if (isSelfTarget(event) && isSilentlyFocused) { + event.stopPropagation(); + previousElementRef.current = previousActiveElement; + } + }); + const onFocusProp = props.onFocus; + const onFocus = useEvent((event) => { + onFocusProp == null ? void 0 : onFocusProp(event); + if (event.defaultPrevented) return; + if (!composite) return; + if (!store) return; + const { relatedTarget } = event; + const { virtualFocus: virtualFocus2 } = store.getState(); + if (virtualFocus2) { + if (isSelfTarget(event) && !isItem(store, relatedTarget)) { + queueMicrotask(scheduleFocus); + } + } else if (isSelfTarget(event)) { + store.setActiveId(null); + } + }); + const onBlurCaptureProp = props.onBlurCapture; + const onBlurCapture = useEvent((event) => { + var _a; + onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState(); + if (!virtualFocus2) return; + const activeElement = (_a = getEnabledItem(store, activeId2)) == null ? void 0 : _a.element; + const nextActiveElement = event.relatedTarget; + const nextActiveElementIsItem = isItem(store, nextActiveElement); + const previousElement = previousElementRef.current; + previousElementRef.current = null; + if (isSelfTarget(event) && nextActiveElementIsItem) { + if (nextActiveElement === activeElement) { + if (previousElement && previousElement !== nextActiveElement) { + fireBlurEvent(previousElement, event); + } + } else if (activeElement) { + fireBlurEvent(activeElement, event); + } else if (previousElement) { + fireBlurEvent(previousElement, event); + } + event.stopPropagation(); + } else { + const targetIsItem = isItem(store, event.target); + if (!targetIsItem && activeElement) { + fireBlurEvent(activeElement, event); + } + } + }); + const onKeyDownProp = props.onKeyDown; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + const onKeyDown = useEvent((event) => { + var _a; + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.nativeEvent.isComposing) return; + if (event.defaultPrevented) return; + if (!store) return; + if (!isSelfTarget(event)) return; + const { orientation, renderedItems, activeId: activeId2 } = store.getState(); + const activeItem = getEnabledItem(store, activeId2); + if ((_a = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a.isConnected) return; + const isVertical = orientation !== "horizontal"; + const isHorizontal = orientation !== "vertical"; + const grid = isGrid(renderedItems); + const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End"; + if (isHorizontalKey && isTextField(event.currentTarget)) return; + const up = () => { + if (grid) { + const item = findFirstEnabledItemInTheLastRow(renderedItems); + return item == null ? void 0 : item.id; + } + return store == null ? void 0 : store.last(); + }; + const keyMap = { + ArrowUp: (grid || isVertical) && up, + ArrowRight: (grid || isHorizontal) && store.first, + ArrowDown: (grid || isVertical) && store.first, + ArrowLeft: (grid || isHorizontal) && store.last, + Home: store.first, + End: store.last, + PageUp: store.first, + PageDown: store.last + }; + const action = keyMap[event.key]; + if (action) { + const id = action(); + if (id !== void 0) { + if (!moveOnKeyPressProp(event)) return; + event.preventDefault(); + store.move(id); + } + } + }); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CompositeContextProvider, { value: store, children: element }), + [store] + ); + const activeDescendant = store.useState((state) => { + var _a; + if (!store) return; + if (!composite) return; + if (!state.virtualFocus) return; + return (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.id; + }); + props = { + "aria-activedescendant": activeDescendant, + ...props, + ref: useMergeRefs(ref, setBaseElement, props.ref), + onKeyDownCapture, + onKeyUpCapture, + onFocusCapture, + onFocus, + onBlurCapture, + onKeyDown + }; + const focusable = store.useState( + (state) => composite && (state.virtualFocus || state.activeId === null) + ); + props = useFocusable({ focusable, ...props }); + return props; + } +); +var Composite5 = forwardRef22(function Composite22(props) { + const htmlProps = useComposite(props); + return createElement3(TagName5, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/LVDQFHCH.js +var ctx3 = createStoreContext(); +var useDisclosureContext = ctx3.useContext; +var useDisclosureScopedContext = ctx3.useScopedContext; +var useDisclosureProviderContext = ctx3.useProviderContext; +var DisclosureContextProvider = ctx3.ContextProvider; +var DisclosureScopedContextProvider = ctx3.ScopedContextProvider; + +// node_modules/@ariakit/react-core/esm/__chunks/A62MDFCW.js +var import_react13 = __toESM(require_react(), 1); +var ctx4 = createStoreContext( + [DisclosureContextProvider], + [DisclosureScopedContextProvider] +); +var useDialogContext = ctx4.useContext; +var useDialogScopedContext = ctx4.useScopedContext; +var useDialogProviderContext = ctx4.useProviderContext; +var DialogContextProvider = ctx4.ContextProvider; +var DialogScopedContextProvider = ctx4.ScopedContextProvider; +var DialogHeadingContext = (0, import_react13.createContext)(void 0); +var DialogDescriptionContext = (0, import_react13.createContext)(void 0); + +// node_modules/@ariakit/react-core/esm/__chunks/6B3RXHKP.js +var import_react14 = __toESM(require_react(), 1); +var import_react_dom = __toESM(require_react_dom(), 1); +var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); +var TagName6 = "div"; +function afterTimeout(timeoutMs, cb) { + const timeoutId = setTimeout(cb, timeoutMs); + return () => clearTimeout(timeoutId); +} +function afterPaint2(cb) { + let raf = requestAnimationFrame(() => { + raf = requestAnimationFrame(cb); + }); + return () => cancelAnimationFrame(raf); +} +function parseCSSTime(...times) { + return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => { + const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3; + const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier; + if (currentTime > longestTime) return currentTime; + return longestTime; + }, 0); +} +function isHidden(mounted, hidden, alwaysVisible) { + return !alwaysVisible && hidden !== false && (!mounted || !!hidden); +} +var useDisclosureContent = createHook(function useDisclosureContent2({ store, alwaysVisible, ...props }) { + const context = useDisclosureProviderContext(); + store = store || context; + invariant( + store, + "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component." + ); + const ref = (0, import_react14.useRef)(null); + const id = useId3(props.id); + const [transition, setTransition] = (0, import_react14.useState)(null); + const open = store.useState("open"); + const mounted = store.useState("mounted"); + const animated = store.useState("animated"); + const contentElement = store.useState("contentElement"); + const otherElement = useStoreState(store.disclosure, "contentElement"); + useSafeLayoutEffect(() => { + if (!ref.current) return; + store == null ? void 0 : store.setContentElement(ref.current); + }, [store]); + useSafeLayoutEffect(() => { + let previousAnimated; + store == null ? void 0 : store.setState("animated", (animated2) => { + previousAnimated = animated2; + return true; + }); + return () => { + if (previousAnimated === void 0) return; + store == null ? void 0 : store.setState("animated", previousAnimated); + }; + }, [store]); + useSafeLayoutEffect(() => { + if (!animated) return; + if (!(contentElement == null ? void 0 : contentElement.isConnected)) { + setTransition(null); + return; + } + return afterPaint2(() => { + setTransition(open ? "enter" : mounted ? "leave" : null); + }); + }, [animated, contentElement, open, mounted]); + useSafeLayoutEffect(() => { + if (!store) return; + if (!animated) return; + if (!transition) return; + if (!contentElement) return; + const stopAnimation = () => store == null ? void 0 : store.setState("animating", false); + const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation); + if (transition === "leave" && open) return; + if (transition === "enter" && !open) return; + if (typeof animated === "number") { + const timeout2 = animated; + return afterTimeout(timeout2, stopAnimationSync); + } + const { + transitionDuration, + animationDuration, + transitionDelay, + animationDelay + } = getComputedStyle(contentElement); + const { + transitionDuration: transitionDuration2 = "0", + animationDuration: animationDuration2 = "0", + transitionDelay: transitionDelay2 = "0", + animationDelay: animationDelay2 = "0" + } = otherElement ? getComputedStyle(otherElement) : {}; + const delay = parseCSSTime( + transitionDelay, + animationDelay, + transitionDelay2, + animationDelay2 + ); + const duration = parseCSSTime( + transitionDuration, + animationDuration, + transitionDuration2, + animationDuration2 + ); + const timeout = delay + duration; + if (!timeout) { + if (transition === "enter") { + store.setState("animated", false); + } + stopAnimation(); + return; + } + const frameRate = 1e3 / 60; + const maxTimeout = Math.max(timeout - frameRate, 0); + return afterTimeout(maxTimeout, stopAnimationSync); + }, [store, animated, contentElement, otherElement, open, transition]); + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(DialogScopedContextProvider, { value: store, children: element }), + [store] + ); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const styleProp = props.style; + const style = (0, import_react14.useMemo)(() => { + if (hidden) { + return { ...styleProp, display: "none" }; + } + return styleProp; + }, [hidden, styleProp]); + props = { + id, + "data-open": open || void 0, + "data-enter": transition === "enter" || void 0, + "data-leave": transition === "leave" || void 0, + hidden, + ...props, + ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref), + style + }; + return removeUndefinedValues(props); +}); +var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) { + const htmlProps = useDisclosureContent(props); + return createElement3(TagName6, htmlProps); +}); +var DisclosureContent = forwardRef22(function DisclosureContent2({ + unmountOnHide, + ...props +}) { + const context = useDisclosureProviderContext(); + const store = props.store || context; + const mounted = useStoreState( + store, + (state) => !unmountOnHide || (state == null ? void 0 : state.mounted) + ); + if (mounted === false) return null; + return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(DisclosureContentImpl, { ...props }); +}); + +// node_modules/@ariakit/core/esm/__chunks/75BJEVSH.js +function createDisclosureStore(props = {}) { + const store = mergeStore( + props.store, + omit22(props.disclosure, ["contentElement", "disclosureElement"]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const open = defaultValue( + props.open, + syncState == null ? void 0 : syncState.open, + props.defaultOpen, + false + ); + const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false); + const initialState = { + open, + animated, + animating: !!animated && open, + mounted: open, + contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null), + disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null) + }; + const disclosure = createStore(initialState, store); + setup( + disclosure, + () => sync(disclosure, ["animated", "animating"], (state) => { + if (state.animated) return; + disclosure.setState("animating", false); + }) + ); + setup( + disclosure, + () => subscribe(disclosure, ["open"], () => { + if (!disclosure.getState().animated) return; + disclosure.setState("animating", true); + }) + ); + setup( + disclosure, + () => sync(disclosure, ["open", "animating"], (state) => { + disclosure.setState("mounted", state.open || state.animating); + }) + ); + return { + ...disclosure, + disclosure: props.disclosure, + setOpen: (value) => disclosure.setState("open", value), + show: () => disclosure.setState("open", true), + hide: () => disclosure.setState("open", false), + toggle: () => disclosure.setState("open", (open2) => !open2), + stopAnimation: () => disclosure.setState("animating", false), + setContentElement: (value) => disclosure.setState("contentElement", value), + setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/WLZ6H5FH.js +function useDisclosureStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store, props.disclosure]); + useStoreProps(store, props, "open", "setOpen"); + useStoreProps(store, props, "mounted", "setMounted"); + useStoreProps(store, props, "animated"); + return Object.assign(store, { disclosure: props.disclosure }); +} + +// node_modules/@ariakit/react-core/esm/__chunks/JMU4N4M5.js +var ctx5 = createStoreContext( + [DialogContextProvider], + [DialogScopedContextProvider] +); +var usePopoverContext = ctx5.useContext; +var usePopoverScopedContext = ctx5.useScopedContext; +var usePopoverProviderContext = ctx5.useProviderContext; +var PopoverContextProvider = ctx5.ContextProvider; +var PopoverScopedContextProvider = ctx5.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/__chunks/N5XGANPW.js +function getCommonParent(items) { + var _a; + const firstItem = items.find((item) => !!item.element); + const lastItem = [...items].reverse().find((item) => !!item.element); + let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement; + while (parentElement && (lastItem == null ? void 0 : lastItem.element)) { + const parent = parentElement; + if (lastItem && parent.contains(lastItem.element)) { + return parentElement; + } + parentElement = parentElement.parentElement; + } + return getDocument(parentElement).body; +} +function getPrivateStore(store) { + return store == null ? void 0 : store.__unstablePrivateStore; +} +function createCollectionStore(props = {}) { + var _a; + throwOnConflictingProps(props, props.store); + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const items = defaultValue( + props.items, + syncState == null ? void 0 : syncState.items, + props.defaultItems, + [] + ); + const itemsMap = new Map(items.map((item) => [item.id, item])); + const initialState = { + items, + renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, []) + }; + const syncPrivateStore = getPrivateStore(props.store); + const privateStore = createStore( + { items, renderedItems: initialState.renderedItems }, + syncPrivateStore + ); + const collection = createStore(initialState, props.store); + const sortItems = (renderedItems) => { + const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element); + privateStore.setState("renderedItems", sortedItems); + collection.setState("renderedItems", sortedItems); + }; + setup(collection, () => init(privateStore)); + setup(privateStore, () => { + return batch(privateStore, ["items"], (state) => { + collection.setState("items", state.items); + }); + }); + setup(privateStore, () => { + return batch(privateStore, ["renderedItems"], (state) => { + let firstRun = true; + let raf = requestAnimationFrame(() => { + const { renderedItems } = collection.getState(); + if (state.renderedItems === renderedItems) return; + sortItems(state.renderedItems); + }); + if (typeof IntersectionObserver !== "function") { + return () => cancelAnimationFrame(raf); + } + const ioCallback = () => { + if (firstRun) { + firstRun = false; + return; + } + cancelAnimationFrame(raf); + raf = requestAnimationFrame(() => sortItems(state.renderedItems)); + }; + const root = getCommonParent(state.renderedItems); + const observer = new IntersectionObserver(ioCallback, { root }); + for (const item of state.renderedItems) { + if (!item.element) continue; + observer.observe(item.element); + } + return () => { + cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + }); + const mergeItem = (item, setItems, canDeleteFromMap = false) => { + let prevItem; + setItems((items2) => { + const index = items2.findIndex(({ id }) => id === item.id); + const nextItems = items2.slice(); + if (index !== -1) { + prevItem = items2[index]; + const nextItem = { ...prevItem, ...item }; + nextItems[index] = nextItem; + itemsMap.set(item.id, nextItem); + } else { + nextItems.push(item); + itemsMap.set(item.id, item); + } + return nextItems; + }); + const unmergeItem = () => { + setItems((items2) => { + if (!prevItem) { + if (canDeleteFromMap) { + itemsMap.delete(item.id); + } + return items2.filter(({ id }) => id !== item.id); + } + const index = items2.findIndex(({ id }) => id === item.id); + if (index === -1) return items2; + const nextItems = items2.slice(); + nextItems[index] = prevItem; + itemsMap.set(item.id, prevItem); + return nextItems; + }); + }; + return unmergeItem; + }; + const registerItem = (item) => mergeItem( + item, + (getItems) => privateStore.setState("items", getItems), + true + ); + return { + ...collection, + registerItem, + renderItem: (item) => chain( + registerItem(item), + mergeItem( + item, + (getItems) => privateStore.setState("renderedItems", getItems) + ) + ), + item: (id) => { + if (!id) return null; + let item = itemsMap.get(id); + if (!item) { + const { items: items2 } = privateStore.getState(); + item = items2.find((item2) => item2.id === id); + if (item) { + itemsMap.set(id, item); + } + } + return item || null; + }, + // @ts-expect-error Internal + __unstablePrivateStore: privateStore + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/GVAFFF2B.js +function useCollectionStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.store]); + useStoreProps(store, props, "items", "setItems"); + return store; +} + +// node_modules/@ariakit/core/esm/__chunks/RVTIKFRL.js +var NULL_ITEM = { id: null }; +function findFirstEnabledItem2(items, excludeId) { + return items.find((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getEnabledItems(items, excludeId) { + return items.filter((item) => { + if (excludeId) { + return !item.disabled && item.id !== excludeId; + } + return !item.disabled; + }); +} +function getItemsInRow(items, rowId) { + return items.filter((item) => item.rowId === rowId); +} +function flipItems(items, activeId, shouldInsertNullItem = false) { + const index = items.findIndex((item) => item.id === activeId); + return [ + ...items.slice(index + 1), + ...shouldInsertNullItem ? [NULL_ITEM] : [], + ...items.slice(0, index) + ]; +} +function groupItemsByRows2(items) { + const rows = []; + for (const item of items) { + const row = rows.find((currentRow) => { + var _a; + return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId; + }); + if (row) { + row.push(item); + } else { + rows.push([item]); + } + } + return rows; +} +function getMaxRowLength(array) { + let maxLength = 0; + for (const { length } of array) { + if (length > maxLength) { + maxLength = length; + } + } + return maxLength; +} +function createEmptyItem(rowId) { + return { + id: "__EMPTY_ITEM__", + disabled: true, + rowId + }; +} +function normalizeRows(rows, activeId, focusShift) { + const maxLength = getMaxRowLength(rows); + for (const row of rows) { + for (let i2 = 0; i2 < maxLength; i2 += 1) { + const item = row[i2]; + if (!item || focusShift && item.disabled) { + const isFirst = i2 === 0; + const previousItem = isFirst && focusShift ? findFirstEnabledItem2(row) : row[i2 - 1]; + row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId); + } + } + } + return rows; +} +function verticalizeItems(items) { + const rows = groupItemsByRows2(items); + const maxLength = getMaxRowLength(rows); + const verticalized = []; + for (let i2 = 0; i2 < maxLength; i2 += 1) { + for (const row of rows) { + const item = row[i2]; + if (item) { + verticalized.push({ + ...item, + // If there's no rowId, it means that it's not a grid composite, but + // a single row instead. So, instead of verticalizing it, that is, + // assigning a different rowId based on the column index, we keep it + // undefined so they will be part of the same row. This is useful + // when using up/down on one-dimensional composites. + rowId: item.rowId ? `${i2}` : void 0 + }); + } + } + } + return verticalized; +} +function createCompositeStore(props = {}) { + var _a; + const syncState = (_a = props.store) == null ? void 0 : _a.getState(); + const collection = createCollectionStore(props); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId + ); + const initialState = { + ...collection.getState(), + id: defaultValue( + props.id, + syncState == null ? void 0 : syncState.id, + `id-${Math.random().toString(36).slice(2, 8)}` + ), + activeId, + baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null), + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + activeId === null + ), + moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "both" + ), + rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + false + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false), + focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false) + }; + const composite = createStore(initialState, collection, props.store); + setup( + composite, + () => sync(composite, ["renderedItems", "activeId"], (state) => { + composite.setState("activeId", (activeId2) => { + var _a2; + if (activeId2 !== void 0) return activeId2; + return (_a2 = findFirstEnabledItem2(state.renderedItems)) == null ? void 0 : _a2.id; + }); + }) + ); + const getNextId = (direction = "next", options = {}) => { + var _a2, _b; + const defaultState = composite.getState(); + const { + skip = 0, + activeId: activeId2 = defaultState.activeId, + focusShift = defaultState.focusShift, + focusLoop = defaultState.focusLoop, + focusWrap = defaultState.focusWrap, + includesBaseElement = defaultState.includesBaseElement, + renderedItems = defaultState.renderedItems, + rtl = defaultState.rtl + } = options; + const isVerticalDirection = direction === "up" || direction === "down"; + const isNextDirection = direction === "next" || direction === "down"; + const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection; + const canShift = focusShift && !skip; + let items = !isVerticalDirection ? renderedItems : flatten2DArray( + normalizeRows(groupItemsByRows2(renderedItems), activeId2, canShift) + ); + items = canReverse ? reverseArray(items) : items; + items = isVerticalDirection ? verticalizeItems(items) : items; + if (activeId2 == null) { + return (_a2 = findFirstEnabledItem2(items)) == null ? void 0 : _a2.id; + } + const activeItem = items.find((item) => item.id === activeId2); + if (!activeItem) { + return (_b = findFirstEnabledItem2(items)) == null ? void 0 : _b.id; + } + const isGrid2 = items.some((item) => item.rowId); + const activeIndex = items.indexOf(activeItem); + const nextItems = items.slice(activeIndex + 1); + const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId); + if (skip) { + const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2); + const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one. + nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1]; + return nextItem2 == null ? void 0 : nextItem2.id; + } + const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"); + const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical"); + const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false; + if (canLoop) { + const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId); + const sortedItems = flipItems(loopItems, activeId2, hasNullItem); + const nextItem2 = findFirstEnabledItem2(sortedItems, activeId2); + return nextItem2 == null ? void 0 : nextItem2.id; + } + if (canWrap) { + const nextItem2 = findFirstEnabledItem2( + // We can use nextItems, which contains all the next items, including + // items from other rows, to wrap between rows. However, if there is a + // null item (the composite container), we'll only use the next items in + // the row. So moving next from the last item will focus on the + // composite container. On grid composites, horizontal navigation never + // focuses on the composite container, only vertical. + hasNullItem ? nextItemsInRow : nextItems, + activeId2 + ); + const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id; + return nextId; + } + const nextItem = findFirstEnabledItem2(nextItemsInRow, activeId2); + if (!nextItem && hasNullItem) { + return null; + } + return nextItem == null ? void 0 : nextItem.id; + }; + return { + ...collection, + ...composite, + setBaseElement: (element) => composite.setState("baseElement", element), + setActiveId: (id) => composite.setState("activeId", id), + move: (id) => { + if (id === void 0) return; + composite.setState("activeId", id); + composite.setState("moves", (moves) => moves + 1); + }, + first: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(composite.getState().renderedItems)) == null ? void 0 : _a2.id; + }, + last: () => { + var _a2; + return (_a2 = findFirstEnabledItem2(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id; + }, + next: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("next", options); + }, + previous: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("previous", options); + }, + down: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("down", options); + }, + up: (options) => { + if (options !== void 0 && typeof options === "number") { + options = { skip: options }; + } + return getNextId("up", options); + } + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/IQYAUKXT.js +function useCompositeStoreOptions(props) { + const id = useId3(props.id); + return { id, ...props }; +} +function useCompositeStoreProps(store, update2, props) { + store = useCollectionStoreProps(store, update2, props); + useStoreProps(store, props, "activeId", "setActiveId"); + useStoreProps(store, props, "includesBaseElement"); + useStoreProps(store, props, "virtualFocus"); + useStoreProps(store, props, "orientation"); + useStoreProps(store, props, "rtl"); + useStoreProps(store, props, "focusLoop"); + useStoreProps(store, props, "focusWrap"); + useStoreProps(store, props, "focusShift"); + return store; +} + +// node_modules/@ariakit/react-core/esm/__chunks/CVCFNOHX.js +var import_react15 = __toESM(require_react(), 1); +var ComboboxListRoleContext = (0, import_react15.createContext)( + void 0 +); +var ctx6 = createStoreContext( + [PopoverContextProvider, CompositeContextProvider], + [PopoverScopedContextProvider, CompositeScopedContextProvider] +); +var useComboboxContext = ctx6.useContext; +var useComboboxScopedContext = ctx6.useScopedContext; +var useComboboxProviderContext = ctx6.useProviderContext; +var ComboboxContextProvider = ctx6.ContextProvider; +var ComboboxScopedContextProvider = ctx6.ScopedContextProvider; +var ComboboxItemValueContext = (0, import_react15.createContext)( + void 0 +); +var ComboboxItemCheckedContext = (0, import_react15.createContext)(false); + +// node_modules/@ariakit/core/esm/__chunks/KMAUV3TY.js +function createDialogStore(props = {}) { + return createDisclosureStore(props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4NYSH4UO.js +function useDialogStoreProps(store, update2, props) { + return useDisclosureStoreProps(store, update2, props); +} + +// node_modules/@ariakit/core/esm/__chunks/BFGNM53A.js +function createPopoverStore({ + popover: otherPopover, + ...props +} = {}) { + const store = mergeStore( + props.store, + omit22(otherPopover, [ + "arrowElement", + "anchorElement", + "contentElement", + "popoverElement", + "disclosureElement" + ]) + ); + throwOnConflictingProps(props, store); + const syncState = store == null ? void 0 : store.getState(); + const dialog = createDialogStore({ ...props, store }); + const placement = defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom" + ); + const initialState = { + ...dialog.getState(), + placement, + currentPlacement: placement, + anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null), + popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null), + arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null), + rendered: /* @__PURE__ */ Symbol("rendered") + }; + const popover = createStore(initialState, dialog, store); + return { + ...dialog, + ...popover, + setAnchorElement: (element) => popover.setState("anchorElement", element), + setPopoverElement: (element) => popover.setState("popoverElement", element), + setArrowElement: (element) => popover.setState("arrowElement", element), + render: () => popover.setState("rendered", /* @__PURE__ */ Symbol("rendered")) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/B6FLPFJM.js +function usePopoverStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.popover]); + useStoreProps(store, props, "placement"); + return useDialogStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/__chunks/4POTBZ2J.js +var TagName7 = "div"; +var usePopoverAnchor = createHook( + function usePopoverAnchor2({ store, ...props }) { + const context = usePopoverProviderContext(); + store = store || context; + props = { + ...props, + ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref) + }; + return props; + } +); +var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) { + const htmlProps = usePopoverAnchor(props); + return createElement3(TagName7, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/X6LNAU2F.js +var import_react16 = __toESM(require_react(), 1); +var TagName8 = "div"; +function getMouseDestination(event) { + const relatedTarget = event.relatedTarget; + if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) { + return relatedTarget; + } + return null; +} +function hoveringInside(event) { + const nextElement = getMouseDestination(event); + if (!nextElement) return false; + return contains(event.currentTarget, nextElement); +} +var symbol2 = /* @__PURE__ */ Symbol("composite-hover"); +function movingToAnotherItem(event) { + let dest = getMouseDestination(event); + if (!dest) return false; + do { + if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true; + dest = dest.parentElement; + } while (dest); + return false; +} +var useCompositeHover = createHook( + function useCompositeHover2({ + store, + focusOnHover = true, + blurOnHoverEnd = !!focusOnHover, + ...props + }) { + const context = useCompositeContext(); + store = store || context; + invariant( + store, + "CompositeHover must be wrapped in a Composite component." + ); + const isMouseMoving = useIsMouseMoving(); + const onMouseMoveProp = props.onMouseMove; + const focusOnHoverProp = useBooleanEvent(focusOnHover); + const onMouseMove = useEvent((event) => { + onMouseMoveProp == null ? void 0 : onMouseMoveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (!focusOnHoverProp(event)) return; + if (!hasFocusWithin(event.currentTarget)) { + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (baseElement && !hasFocus(baseElement)) { + baseElement.focus(); + } + } + store == null ? void 0 : store.setActiveId(event.currentTarget.id); + }); + const onMouseLeaveProp = props.onMouseLeave; + const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd); + const onMouseLeave = useEvent((event) => { + var _a; + onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event); + if (event.defaultPrevented) return; + if (!isMouseMoving()) return; + if (hoveringInside(event)) return; + if (movingToAnotherItem(event)) return; + if (!focusOnHoverProp(event)) return; + if (!blurOnHoverEndProp(event)) return; + store == null ? void 0 : store.setActiveId(null); + (_a = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a.focus(); + }); + const ref = (0, import_react16.useCallback)((element) => { + if (!element) return; + element[symbol2] = true; + }, []); + props = { + ...props, + ref: useMergeRefs(ref, props.ref), + onMouseMove, + onMouseLeave + }; + return removeUndefinedValues(props); + } +); +var CompositeHover = memo22( + forwardRef22(function CompositeHover2(props) { + const htmlProps = useCompositeHover(props); + return createElement3(TagName8, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox.js +var import_react17 = __toESM(require_react(), 1); +var TagName9 = "input"; +function isFirstItemAutoSelected(items, activeValue, autoSelect) { + if (!autoSelect) return false; + const firstItem = items.find((item) => !item.disabled && item.value); + return (firstItem == null ? void 0 : firstItem.value) === activeValue; +} +function hasCompletionString(value, activeValue) { + if (!activeValue) return false; + if (value == null) return false; + value = normalizeString(value); + return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0; +} +function isInputEvent(event) { + return event.type === "input"; +} +function isAriaAutoCompleteValue(value) { + return value === "inline" || value === "list" || value === "both" || value === "none"; +} +function getDefaultAutoSelectId(items) { + const item = items.find((item2) => { + var _a; + if (item2.disabled) return false; + return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab"; + }); + return item == null ? void 0 : item.id; +} +var useCombobox = createHook( + function useCombobox2({ + store, + focusable = true, + autoSelect: autoSelectProp = false, + getAutoSelectId, + setValueOnChange, + showMinLength = 0, + showOnChange, + showOnMouseDown, + showOnClick = showOnMouseDown, + showOnKeyDown, + showOnKeyPress = showOnKeyDown, + blurActiveItemOnClick, + setValueOnClick = true, + moveOnKeyPress = true, + autoComplete = "list", + ...props + }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react17.useRef)(null); + const [valueUpdated, forceValueUpdate] = useForceUpdate(); + const canAutoSelectRef = (0, import_react17.useRef)(false); + const composingRef = (0, import_react17.useRef)(false); + const autoSelect = store.useState( + (state) => state.virtualFocus && autoSelectProp + ); + const inline = autoComplete === "inline" || autoComplete === "both"; + const [canInline, setCanInline] = (0, import_react17.useState)(inline); + useUpdateLayoutEffect(() => { + if (!inline) return; + setCanInline(true); + }, [inline]); + const storeValue = store.useState("value"); + const prevSelectedValueRef = (0, import_react17.useRef)(void 0); + (0, import_react17.useEffect)(() => { + return sync(store, ["selectedValue", "activeId"], (_, prev) => { + prevSelectedValueRef.current = prev.selectedValue; + }); + }, []); + const inlineActiveValue = store.useState((state) => { + var _a; + if (!inline) return; + if (!canInline) return; + if (state.activeValue && Array.isArray(state.selectedValue)) { + if (state.selectedValue.includes(state.activeValue)) return; + if ((_a = prevSelectedValueRef.current) == null ? void 0 : _a.includes(state.activeValue)) return; + } + return state.activeValue; + }); + const items = store.useState("renderedItems"); + const open = store.useState("open"); + const contentElement = store.useState("contentElement"); + const value = (0, import_react17.useMemo)(() => { + if (!inline) return storeValue; + if (!canInline) return storeValue; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (firstItemAutoSelected) { + if (hasCompletionString(storeValue, inlineActiveValue)) { + const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || ""; + return storeValue + slice; + } + return storeValue; + } + return inlineActiveValue || storeValue; + }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]); + (0, import_react17.useEffect)(() => { + const element = ref.current; + if (!element) return; + const onCompositeItemMove = () => setCanInline(true); + element.addEventListener("combobox-item-move", onCompositeItemMove); + return () => { + element.removeEventListener("combobox-item-move", onCompositeItemMove); + }; + }, []); + (0, import_react17.useEffect)(() => { + if (!inline) return; + if (!canInline) return; + if (!inlineActiveValue) return; + const firstItemAutoSelected = isFirstItemAutoSelected( + items, + inlineActiveValue, + autoSelect + ); + if (!firstItemAutoSelected) return; + if (!hasCompletionString(storeValue, inlineActiveValue)) return; + let cleanup = noop; + queueMicrotask(() => { + const element = ref.current; + if (!element) return; + const { start: prevStart, end: prevEnd } = getTextboxSelection(element); + const nextStart = storeValue.length; + const nextEnd = inlineActiveValue.length; + setSelectionRange(element, nextStart, nextEnd); + cleanup = () => { + if (!hasFocus(element)) return; + const { start, end } = getTextboxSelection(element); + if (start !== nextStart) return; + if (end !== nextEnd) return; + setSelectionRange(element, prevStart, prevEnd); + }; + }); + return () => cleanup(); + }, [ + valueUpdated, + inline, + canInline, + inlineActiveValue, + items, + autoSelect, + storeValue + ]); + const scrollingElementRef = (0, import_react17.useRef)(null); + const getAutoSelectIdProp = useEvent(getAutoSelectId); + const autoSelectIdRef = (0, import_react17.useRef)(null); + (0, import_react17.useEffect)(() => { + if (!open) return; + if (!contentElement) return; + const scrollingElement = getScrollingElement(contentElement); + if (!scrollingElement) return; + scrollingElementRef.current = scrollingElement; + const onUserScroll = () => { + canAutoSelectRef.current = false; + }; + const onScroll = () => { + if (!store) return; + if (!canAutoSelectRef.current) return; + const { activeId } = store.getState(); + if (activeId === null) return; + if (activeId === autoSelectIdRef.current) return; + canAutoSelectRef.current = false; + }; + const options = { passive: true, capture: true }; + scrollingElement.addEventListener("wheel", onUserScroll, options); + scrollingElement.addEventListener("touchmove", onUserScroll, options); + scrollingElement.addEventListener("scroll", onScroll, options); + return () => { + scrollingElement.removeEventListener("wheel", onUserScroll, true); + scrollingElement.removeEventListener("touchmove", onUserScroll, true); + scrollingElement.removeEventListener("scroll", onScroll, true); + }; + }, [open, contentElement, store]); + useSafeLayoutEffect(() => { + if (!storeValue) return; + if (composingRef.current) return; + canAutoSelectRef.current = true; + }, [storeValue]); + useSafeLayoutEffect(() => { + if (autoSelect !== "always" && open) return; + canAutoSelectRef.current = open; + }, [autoSelect, open]); + const resetValueOnSelect = store.useState("resetValueOnSelect"); + useUpdateEffect(() => { + var _a, _b; + const canAutoSelect = canAutoSelectRef.current; + if (!store) return; + if (!open) return; + if (!canAutoSelect && !resetValueOnSelect) return; + const { baseElement, contentElement: contentElement2, activeId } = store.getState(); + if (baseElement && !hasFocus(baseElement)) return; + if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) { + const observer = new MutationObserver(forceValueUpdate); + observer.observe(contentElement2, { attributeFilter: ["data-placing"] }); + return () => observer.disconnect(); + } + if (autoSelect && canAutoSelect) { + const userAutoSelectId = getAutoSelectIdProp(items); + const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a = getDefaultAutoSelectId(items)) != null ? _a : store.first(); + autoSelectIdRef.current = autoSelectId; + store.move(autoSelectId != null ? autoSelectId : null); + } else { + const element = (_b = store.item(activeId || store.first())) == null ? void 0 : _b.element; + if (element && "scrollIntoView" in element) { + element.scrollIntoView({ block: "nearest", inline: "nearest" }); + } + } + return; + }, [ + store, + open, + valueUpdated, + storeValue, + autoSelect, + resetValueOnSelect, + getAutoSelectIdProp, + items + ]); + (0, import_react17.useEffect)(() => { + if (!inline) return; + const combobox = ref.current; + if (!combobox) return; + const elements = [combobox, contentElement].filter( + (value2) => !!value2 + ); + const onBlur2 = (event) => { + if (elements.every((el) => isFocusEventOutside(event, el))) { + store == null ? void 0 : store.setValue(value); + } + }; + for (const element of elements) { + element.addEventListener("focusout", onBlur2); + } + return () => { + for (const element of elements) { + element.removeEventListener("focusout", onBlur2); + } + }; + }, [inline, contentElement, store, value]); + const canShow = (event) => { + const currentTarget = event.currentTarget; + return currentTarget.value.length >= showMinLength; + }; + const onChangeProp = props.onChange; + const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow); + const setValueOnChangeProp = useBooleanEvent( + // If the combobox is combined with tags, the value will be set by the tag + // input component. + setValueOnChange != null ? setValueOnChange : !store.tag + ); + const onChange = useEvent((event) => { + onChangeProp == null ? void 0 : onChangeProp(event); + if (event.defaultPrevented) return; + if (!store) return; + const currentTarget = event.currentTarget; + const { value: value2, selectionStart, selectionEnd } = currentTarget; + const nativeEvent = event.nativeEvent; + canAutoSelectRef.current = true; + if (isInputEvent(nativeEvent)) { + if (nativeEvent.isComposing) { + canAutoSelectRef.current = false; + composingRef.current = true; + } + if (inline) { + const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText"; + const caretAtEnd = selectionStart === value2.length; + setCanInline(textInserted && caretAtEnd); + } + } + if (setValueOnChangeProp(event)) { + const isSameValue = value2 === store.getState().value; + store.setValue(value2); + queueMicrotask(() => { + setSelectionRange(currentTarget, selectionStart, selectionEnd); + }); + if (inline && autoSelect && isSameValue) { + forceValueUpdate(); + } + } + if (showOnChangeProp(event)) { + store.show(); + } + if (!autoSelect || !canAutoSelectRef.current) { + store.setActiveId(null); + } + }); + const onCompositionEndProp = props.onCompositionEnd; + const onCompositionEnd = useEvent((event) => { + canAutoSelectRef.current = true; + composingRef.current = false; + onCompositionEndProp == null ? void 0 : onCompositionEndProp(event); + if (event.defaultPrevented) return; + if (!autoSelect) return; + forceValueUpdate(); + }); + const onMouseDownProp = props.onMouseDown; + const blurActiveItemOnClickProp = useBooleanEvent( + blurActiveItemOnClick != null ? blurActiveItemOnClick : (() => !!(store == null ? void 0 : store.getState().includesBaseElement)) + ); + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow); + const onMouseDown = useEvent((event) => { + onMouseDownProp == null ? void 0 : onMouseDownProp(event); + if (event.defaultPrevented) return; + if (event.button) return; + if (event.ctrlKey) return; + if (!store) return; + if (blurActiveItemOnClickProp(event)) { + store.setActiveId(null); + } + if (setValueOnClickProp(event)) { + store.setValue(value); + } + if (showOnClickProp(event)) { + queueBeforeEvent(event.currentTarget, "mouseup", store.show); + } + }); + const onKeyDownProp = props.onKeyDown; + const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow); + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (!event.repeat) { + canAutoSelectRef.current = false; + } + if (event.defaultPrevented) return; + if (event.ctrlKey) return; + if (event.altKey) return; + if (event.shiftKey) return; + if (event.metaKey) return; + if (!store) return; + const { open: open2 } = store.getState(); + if (open2) return; + if (event.key === "ArrowUp" || event.key === "ArrowDown") { + if (showOnKeyPressProp(event)) { + event.preventDefault(); + store.show(); + } + } + }); + const onBlurProp = props.onBlur; + const onBlur = useEvent((event) => { + canAutoSelectRef.current = false; + onBlurProp == null ? void 0 : onBlurProp(event); + if (event.defaultPrevented) return; + }); + const id = useId3(props.id); + const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0; + const isActiveItem = store.useState((state) => state.activeId === null); + props = { + id, + role: "combobox", + "aria-autocomplete": ariaAutoComplete, + "aria-haspopup": getPopupRole(contentElement, "listbox"), + "aria-expanded": open, + "aria-controls": contentElement == null ? void 0 : contentElement.id, + "data-active-item": isActiveItem || void 0, + value, + ...props, + ref: useMergeRefs(ref, props.ref), + onChange, + onCompositionEnd, + onMouseDown, + onKeyDown, + onBlur + }; + props = useComposite({ + store, + focusable, + ...props, + // Enable inline autocomplete when the user moves from the combobox input + // to an item. + moveOnKeyPress: (event) => { + if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false; + if (inline) setCanInline(true); + return true; + } + }); + props = usePopoverAnchor({ store, ...props }); + return { autoComplete: "off", ...props }; + } +); +var Combobox = forwardRef22(function Combobox2(props) { + const htmlProps = useCombobox(props); + return createElement3(TagName9, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/IBXZ2LQC.js +var import_react18 = __toESM(require_react(), 1); +var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); +var TagName10 = "div"; +function isSelected(storeValue, itemValue) { + if (itemValue == null) return; + if (storeValue == null) return false; + if (Array.isArray(storeValue)) { + return storeValue.includes(itemValue); + } + return storeValue === itemValue; +} +function getItemRole(popupRole) { + var _a; + const itemRoleByPopupRole = { + menu: "menuitem", + listbox: "option", + tree: "treeitem" + }; + const key = popupRole; + return (_a = itemRoleByPopupRole[key]) != null ? _a : "option"; +} +var useComboboxItem = createHook( + function useComboboxItem2({ + store, + value, + hideOnClick, + setValueOnClick, + selectValueOnClick = true, + resetValueOnSelect, + focusOnHover = false, + moveOnKeyPress = true, + getItem: getItemProp, + ...props + }) { + var _a; + const context = useComboboxScopedContext(); + store = store || context; + invariant( + store, + "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component." + ); + const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, { + resetValueOnSelectState: "resetValueOnSelect", + multiSelectable(state) { + return Array.isArray(state.selectedValue); + }, + selected(state) { + return isSelected(state.selectedValue, value); + } + }); + const getItem = (0, import_react18.useCallback)( + (item) => { + const nextItem = { ...item, value }; + if (getItemProp) { + return getItemProp(nextItem); + } + return nextItem; + }, + [value, getItemProp] + ); + setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable; + hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable; + const onClickProp = props.onClick; + const setValueOnClickProp = useBooleanEvent(setValueOnClick); + const selectValueOnClickProp = useBooleanEvent(selectValueOnClick); + const resetValueOnSelectProp = useBooleanEvent( + (_a = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a : multiSelectable + ); + const hideOnClickProp = useBooleanEvent(hideOnClick); + const onClick = useEvent((event) => { + onClickProp == null ? void 0 : onClickProp(event); + if (event.defaultPrevented) return; + if (isDownloading(event)) return; + if (isOpeningInNewTab(event)) return; + if (value != null) { + if (selectValueOnClickProp(event)) { + if (resetValueOnSelectProp(event)) { + store == null ? void 0 : store.resetValue(); + } + store == null ? void 0 : store.setSelectedValue((prevValue) => { + if (!Array.isArray(prevValue)) return value; + if (prevValue.includes(value)) { + return prevValue.filter((v2) => v2 !== value); + } + return [...prevValue, value]; + }); + } + if (setValueOnClickProp(event)) { + store == null ? void 0 : store.setValue(value); + } + } + if (hideOnClickProp(event)) { + store == null ? void 0 : store.hide(); + } + }); + const onKeyDownProp = props.onKeyDown; + const onKeyDown = useEvent((event) => { + onKeyDownProp == null ? void 0 : onKeyDownProp(event); + if (event.defaultPrevented) return; + const baseElement = store == null ? void 0 : store.getState().baseElement; + if (!baseElement) return; + if (hasFocus(baseElement)) return; + const printable = event.key.length === 1; + if (printable || event.key === "Backspace" || event.key === "Delete") { + queueMicrotask(() => baseElement.focus()); + if (isTextField(baseElement)) { + store == null ? void 0 : store.setValue(baseElement.value); + } + } + }); + if (multiSelectable && selected != null) { + props = { + "aria-selected": selected, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }), + [value, selected] + ); + const popupRole = (0, import_react18.useContext)(ComboboxListRoleContext); + props = { + role: getItemRole(popupRole), + children: value, + ...props, + onClick, + onKeyDown + }; + const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); + props = useCompositeItem({ + store, + ...props, + getItem, + // Dispatch a custom event on the combobox input when moving to an item + // with the keyboard so the Combobox component can enable inline + // autocompletion. + moveOnKeyPress: (event) => { + if (!moveOnKeyPressProp(event)) return false; + const moveEvent = new Event("combobox-item-move"); + const baseElement = store == null ? void 0 : store.getState().baseElement; + baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent); + return true; + } + }); + props = useCompositeHover({ store, focusOnHover, ...props }); + return props; + } +); +var ComboboxItem = memo22( + forwardRef22(function ComboboxItem2(props) { + const htmlProps = useComboboxItem(props); + return createElement3(TagName10, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js +var import_react19 = __toESM(require_react(), 1); +var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); +var TagName11 = "span"; +function normalizeValue(value) { + return normalizeString(value).toLowerCase(); +} +function getOffsets(string, values) { + const offsets = []; + for (const value of values) { + let pos = 0; + const length = value.length; + while (string.indexOf(value, pos) !== -1) { + const index = string.indexOf(value, pos); + if (index !== -1) { + offsets.push([index, length]); + } + pos = index + 1; + } + } + return offsets; +} +function filterOverlappingOffsets(offsets) { + return offsets.filter(([offset, length], i2, arr) => { + return !arr.some( + ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length + ); + }); +} +function sortOffsets(offsets) { + return offsets.sort(([a2], [b2]) => a2 - b2); +} +function splitValue(itemValue, userValue) { + if (!itemValue) return itemValue; + if (!userValue) return itemValue; + const userValues = toArray(userValue).filter(Boolean).map(normalizeValue); + const parts = []; + const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)( + "span", + { + "data-autocomplete-value": autocomplete ? "" : void 0, + "data-user-value": autocomplete ? void 0 : "", + children: value + }, + parts.length + ); + const offsets = sortOffsets( + filterOverlappingOffsets( + // Convert userValues into a set to avoid duplicates + getOffsets(normalizeValue(itemValue), new Set(userValues)) + ) + ); + if (!offsets.length) { + parts.push(span(itemValue, true)); + return parts; + } + const [firstOffset] = offsets[0]; + const values = [ + itemValue.slice(0, firstOffset), + ...offsets.flatMap(([offset, length], i2) => { + var _a; + const value = itemValue.slice(offset, offset + length); + const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0]; + const nextValue = itemValue.slice(offset + length, nextOffset); + return [value, nextValue]; + }) + ]; + values.forEach((value, i2) => { + if (!value) return; + parts.push(span(value, i2 % 2 === 0)); + }); + return parts; +} +var useComboboxItemValue = createHook(function useComboboxItemValue2({ store, value, userValue, ...props }) { + const context = useComboboxScopedContext(); + store = store || context; + const itemContext = (0, import_react19.useContext)(ComboboxItemValueContext); + const itemValue = value != null ? value : itemContext; + const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value); + const children = (0, import_react19.useMemo)(() => { + if (!itemValue) return; + if (!inputValue) return itemValue; + return splitValue(itemValue, inputValue); + }, [itemValue, inputValue]); + props = { + children, + ...props + }; + return removeUndefinedValues(props); +}); +var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) { + const htmlProps = useComboboxItemValue(props); + return createElement3(TagName11, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/combobox/combobox-label.js +var TagName12 = "label"; +var useComboboxLabel = createHook( + function useComboboxLabel2({ store, ...props }) { + const context = useComboboxProviderContext(); + store = store || context; + invariant( + store, + "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const comboboxId = store.useState((state) => { + var _a; + return (_a = state.baseElement) == null ? void 0 : _a.id; + }); + props = { + htmlFor: comboboxId, + ...props + }; + return removeUndefinedValues(props); + } +); +var ComboboxLabel = memo22( + forwardRef22(function ComboboxLabel2(props) { + const htmlProps = useComboboxLabel(props); + return createElement3(TagName12, htmlProps); + }) +); + +// node_modules/@ariakit/react-core/esm/__chunks/2G6YEJT4.js +var import_react20 = __toESM(require_react(), 1); +var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); +var TagName13 = "div"; +var useComboboxList = createHook( + function useComboboxList2({ store, alwaysVisible, ...props }) { + const scopedContext = useComboboxScopedContext(true); + const context = useComboboxContext(); + store = store || context; + const scopedContextSameStore = !!store && store === scopedContext; + invariant( + store, + "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component." + ); + const ref = (0, import_react20.useRef)(null); + const id = useId3(props.id); + const mounted = store.useState("mounted"); + const hidden = isHidden(mounted, props.hidden, alwaysVisible); + const style = hidden ? { ...props.style, display: "none" } : props.style; + const multiSelectable = store.useState( + (state) => Array.isArray(state.selectedValue) + ); + const role = useAttribute(ref, "role", props.role); + const isCompositeRole = role === "listbox" || role === "tree" || role === "grid"; + const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0; + const [hasListboxInside, setHasListboxInside] = (0, import_react20.useState)(false); + const contentElement = store.useState("contentElement"); + useSafeLayoutEffect(() => { + if (!mounted) return; + const element = ref.current; + if (!element) return; + if (contentElement !== element) return; + const callback = () => { + setHasListboxInside(!!element.querySelector("[role='listbox']")); + }; + const observer = new MutationObserver(callback); + observer.observe(element, { + subtree: true, + childList: true, + attributeFilter: ["role"] + }); + callback(); + return () => observer.disconnect(); + }, [mounted, contentElement]); + if (!hasListboxInside) { + props = { + role: "listbox", + "aria-multiselectable": ariaMultiSelectable, + ...props + }; + } + props = useWrapElement( + props, + (element) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }), + [store, role] + ); + const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null; + props = { + id, + hidden, + ...props, + ref: useMergeRefs(setContentElement, ref, props.ref), + style + }; + return removeUndefinedValues(props); + } +); +var ComboboxList = forwardRef22(function ComboboxList2(props) { + const htmlProps = useComboboxList(props); + return createElement3(TagName13, htmlProps); +}); + +// node_modules/@ariakit/react-core/esm/__chunks/XSIEPKGA.js +var import_react21 = __toESM(require_react(), 1); +var TagValueContext = (0, import_react21.createContext)(null); +var TagRemoveIdContext = (0, import_react21.createContext)( + null +); +var ctx7 = createStoreContext( + [CompositeContextProvider], + [CompositeScopedContextProvider] +); +var useTagContext = ctx7.useContext; +var useTagScopedContext = ctx7.useScopedContext; +var useTagProviderContext = ctx7.useProviderContext; +var TagContextProvider = ctx7.ContextProvider; +var TagScopedContextProvider = ctx7.ScopedContextProvider; + +// node_modules/@ariakit/core/esm/combobox/combobox-store.js +var isTouchSafari = isSafari() && isTouchDevice(); +function createComboboxStore({ + tag, + ...props +} = {}) { + const store = mergeStore(props.store, pick2(tag, ["value", "rtl"])); + throwOnConflictingProps(props, store); + const tagState = tag == null ? void 0 : tag.getState(); + const syncState = store == null ? void 0 : store.getState(); + const activeId = defaultValue( + props.activeId, + syncState == null ? void 0 : syncState.activeId, + props.defaultActiveId, + null + ); + const composite = createCompositeStore({ + ...props, + activeId, + includesBaseElement: defaultValue( + props.includesBaseElement, + syncState == null ? void 0 : syncState.includesBaseElement, + true + ), + orientation: defaultValue( + props.orientation, + syncState == null ? void 0 : syncState.orientation, + "vertical" + ), + focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true), + focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true), + virtualFocus: defaultValue( + props.virtualFocus, + syncState == null ? void 0 : syncState.virtualFocus, + true + ) + }); + const popover = createPopoverStore({ + ...props, + placement: defaultValue( + props.placement, + syncState == null ? void 0 : syncState.placement, + "bottom-start" + ) + }); + const value = defaultValue( + props.value, + syncState == null ? void 0 : syncState.value, + props.defaultValue, + "" + ); + const selectedValue = defaultValue( + props.selectedValue, + syncState == null ? void 0 : syncState.selectedValue, + tagState == null ? void 0 : tagState.values, + props.defaultSelectedValue, + "" + ); + const multiSelectable = Array.isArray(selectedValue); + const initialState = { + ...composite.getState(), + ...popover.getState(), + value, + selectedValue, + resetValueOnSelect: defaultValue( + props.resetValueOnSelect, + syncState == null ? void 0 : syncState.resetValueOnSelect, + multiSelectable + ), + resetValueOnHide: defaultValue( + props.resetValueOnHide, + syncState == null ? void 0 : syncState.resetValueOnHide, + multiSelectable && !tag + ), + activeValue: syncState == null ? void 0 : syncState.activeValue + }; + const combobox = createStore(initialState, composite, popover, store); + if (isTouchSafari) { + setup( + combobox, + () => sync(combobox, ["virtualFocus"], () => { + combobox.setState("virtualFocus", false); + }) + ); + } + setup(combobox, () => { + if (!tag) return; + return chain( + sync(combobox, ["selectedValue"], (state) => { + if (!Array.isArray(state.selectedValue)) return; + tag.setValues(state.selectedValue); + }), + sync(tag, ["values"], (state) => { + combobox.setState("selectedValue", state.values); + }) + ); + }); + setup( + combobox, + () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => { + if (!state.resetValueOnHide) return; + if (state.mounted) return; + combobox.setState("value", value); + }) + ); + setup( + combobox, + () => sync(combobox, ["open"], (state) => { + if (state.open) return; + combobox.setState("activeId", activeId); + combobox.setState("moves", 0); + }) + ); + setup( + combobox, + () => sync(combobox, ["moves", "activeId"], (state, prevState) => { + if (state.moves === prevState.moves) { + combobox.setState("activeValue", void 0); + } + }) + ); + setup( + combobox, + () => batch(combobox, ["moves", "renderedItems"], (state, prev) => { + if (state.moves === prev.moves) return; + const { activeId: activeId2 } = combobox.getState(); + const activeItem = composite.item(activeId2); + combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value); + }) + ); + return { + ...popover, + ...composite, + ...combobox, + tag, + setValue: (value2) => combobox.setState("value", value2), + resetValue: () => combobox.setState("value", initialState.value), + setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2) + }; +} + +// node_modules/@ariakit/react-core/esm/__chunks/SVN33SY6.js +function useComboboxStoreOptions(props) { + const tag = useTagContext(); + props = { + ...props, + tag: props.tag !== void 0 ? props.tag : tag + }; + return useCompositeStoreOptions(props); +} +function useComboboxStoreProps(store, update2, props) { + useUpdateEffect(update2, [props.tag]); + useStoreProps(store, props, "value", "setValue"); + useStoreProps(store, props, "selectedValue", "setSelectedValue"); + useStoreProps(store, props, "resetValueOnHide"); + useStoreProps(store, props, "resetValueOnSelect"); + return Object.assign( + useCompositeStoreProps( + usePopoverStoreProps(store, update2, props), + update2, + props + ), + { tag: props.tag } + ); +} +function useComboboxStore(props = {}) { + props = useComboboxStoreOptions(props); + const [store, update2] = useStore(createComboboxStore, props); + return useComboboxStoreProps(store, update2, props); +} + +// node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js +var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); +function ComboboxProvider(props = {}) { + const store = useComboboxStore(props); + return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ComboboxContextProvider, { value: store, children: props.children }); +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_remove_accents = __toESM(require_remove_accents(), 1); +var import_compose8 = __toESM(require_compose(), 1); +var import_i18n22 = __toESM(require_i18n(), 1); +var import_element25 = __toESM(require_element(), 1); +var import_components19 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataviews-filters/utils.mjs +var EMPTY_ARRAY3 = []; +var getCurrentValue = (filterDefinition, currentFilter) => { + if (filterDefinition.singleSelection) { + return currentFilter?.value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value; + } + if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) { + return [currentFilter.value]; + } + return EMPTY_ARRAY3; +}; + +// packages/dataviews/build-module/hooks/use-elements.mjs +var import_element24 = __toESM(require_element(), 1); +var EMPTY_ARRAY4 = []; +function useElements({ + elements, + getElements +}) { + const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY4; + const [records, setRecords] = (0, import_element24.useState)(staticElements); + const [isLoading, setIsLoading] = (0, import_element24.useState)(false); + (0, import_element24.useEffect)(() => { + if (!getElements) { + setRecords(staticElements); + return; + } + let cancelled = false; + setIsLoading(true); + getElements().then((fetchedElements) => { + if (!cancelled) { + const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements; + setRecords(dynamicElements); + } + }).catch(() => { + if (!cancelled) { + setRecords(staticElements); + } + }).finally(() => { + if (!cancelled) { + setIsLoading(false); + } + }); + return () => { + cancelled = true; + }; + }, [getElements, staticElements]); + return { + elements: records, + isLoading + }; +} + +// packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs +var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); +function normalizeSearchInput(input = "") { + return (0, import_remove_accents.default)(input.trim().toLowerCase()); +} +var getNewValue = (filterDefinition, currentFilter, value) => { + if (filterDefinition.singleSelection) { + return value; + } + if (Array.isArray(currentFilter?.value)) { + return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value]; + } + return [value]; +}; +function generateFilterElementCompositeItemId(prefix, filterElementValue) { + return `${prefix}-${filterElementValue}`; +} +var MultiSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-multi-selection", + { "is-selected": selected } + ), + children: selected && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components19.Icon, { icon: check_default }) + } + ); +}; +var SingleSelectionOption = ({ selected }) => { + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "span", + { + className: clsx_default( + "dataviews-filters__search-widget-listitem-single-selection", + { "is-selected": selected } + ) + } + ); +}; +function ListBox({ view, filter, onChangeView }) { + const baseId = (0, import_compose8.useInstanceId)(ListBox, "dataviews-filter-list-box"); + const [activeCompositeId, setActiveCompositeId] = (0, import_element25.useState)( + // When there are one or less operators, the first item is set as active + // (by setting the initial `activeId` to `undefined`). + // With 2 or more operators, the focus is moved on the operators control + // (by setting the initial `activeId` to `null`), meaning that there won't + // be an active item initially. Focus is then managed via the + // `onFocusVisible` callback. + filter.operators?.length === 1 ? void 0 : null + ); + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + import_components19.Composite, + { + virtualFocus: true, + focusLoop: true, + activeId: activeCompositeId, + setActiveId: setActiveCompositeId, + role: "listbox", + className: "dataviews-filters__search-widget-listbox", + "aria-label": (0, import_i18n22.sprintf)( + /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */ + (0, import_i18n22.__)("List of: %1$s"), + filter.name + ), + onFocusVisible: () => { + if (!activeCompositeId && filter.elements.length) { + setActiveCompositeId( + generateFilterElementCompositeItemId( + baseId, + filter.elements[0].value + ) + ); + } + }, + render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components19.Composite.Typeahead, {}), + children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + import_components19.Composite.Hover, + { + render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + import_components19.Composite.Item, + { + id: generateFilterElementCompositeItemId( + baseId, + element.value + ), + render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "div", + { + "aria-label": element.label, + role: "option", + className: "dataviews-filters__search-widget-listitem" + } + ), + onClick: () => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value: getNewValue( + filter, + currentFilter, + element.value + ) + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + } + } + ), + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes(element.value) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: element.label + } + ) + ] + }, + element.value + )) + } + ); +} +function ComboboxList22({ view, filter, onChangeView }) { + const [searchValue, setSearchValue] = (0, import_element25.useState)(""); + const deferredSearchValue = (0, import_element25.useDeferredValue)(searchValue); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const matches = (0, import_element25.useMemo)(() => { + const normalizedSearch = normalizeSearchInput(deferredSearchValue); + return filter.elements.filter( + (item) => normalizeSearchInput(item.label).includes(normalizedSearch) + ); + }, [filter.elements, deferredSearchValue]); + return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + ComboboxProvider, + { + selectedValue: currentValue, + setSelectedValue: (value) => { + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map((_filter) => { + if (_filter.field === filter.field) { + return { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + value + }; + } + return _filter; + }) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: filter.operators[0], + value + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + setValue: setSearchValue, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + ComboboxLabel, + { + render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components19.VisuallyHidden, { children: (0, import_i18n22.__)("Search items") }), + children: (0, import_i18n22.__)("Search items") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + Combobox, + { + autoSelect: "always", + placeholder: (0, import_i18n22.__)("Search"), + className: "dataviews-filters__search-widget-filter-combobox__input" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components19.Icon, { icon: search_default }) }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + ComboboxList, + { + className: "dataviews-filters__search-widget-filter-combobox-list", + alwaysVisible: true, + children: [ + matches.map((element) => { + return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + ComboboxItem, + { + resetValueOnSelect: false, + value: element.value, + className: "dataviews-filters__search-widget-listitem", + hideOnClick: false, + setValueOnClick: false, + focusOnHover: true, + children: [ + filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + SingleSelectionOption, + { + selected: currentValue === element.value + } + ), + !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + MultiSelectionOption, + { + selected: currentValue.includes( + element.value + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)( + "span", + { + className: "dataviews-filters__search-widget-listitem-value", + title: element.label, + children: [ + /* @__PURE__ */ (0, import_jsx_runtime59.jsx)( + ComboboxItemValue, + { + className: "dataviews-filters__search-widget-filter-combobox-item-value", + value: element.label + } + ), + !!element.description && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description }) + ] + } + ) + ] + }, + element.value + ); + }), + !matches.length && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { children: (0, import_i18n22.__)("No results found") }) + ] + } + ) + ] + } + ); +} +function SearchWidget(props) { + const { elements, isLoading } = useElements({ + elements: props.filter.elements, + getElements: props.filter.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components19.Spinner, {}) }); + } + if (elements.length === 0) { + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n22.__)("No elements found") }); + } + const Widget = elements.length > 10 ? ComboboxList22 : ListBox; + return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Widget, { ...props, filter: { ...props.filter, elements } }); +} + +// packages/dataviews/build-module/components/dataviews-filters/input-widget.mjs +var import_es6 = __toESM(require_es6(), 1); +var import_compose9 = __toESM(require_compose(), 1); +var import_element26 = __toESM(require_element(), 1); +var import_components20 = __toESM(require_components(), 1); +var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); +function InputWidget({ + filter, + view, + onChangeView, + fields +}) { + const currentFilter = view.filters?.find( + (f2) => f2.field === filter.field + ); + const currentValue = getCurrentValue(filter, currentFilter); + const field = (0, import_element26.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Deactivate validation for filters. + isValid: {}, + // Configure getValue/setValue as if Item was a plain object. + getValue: ({ item }) => item[currentField.id], + setValue: ({ value }) => ({ + [currentField.id]: value + }) + }; + } + return currentField; + }, [fields, filter.field]); + const data = (0, import_element26.useMemo)(() => { + return (view.filters ?? []).reduce( + (acc, activeFilter) => { + acc[activeFilter.field] = activeFilter.value; + return acc; + }, + {} + ); + }, [view.filters]); + const handleChange = (0, import_compose9.useEvent)((updatedData) => { + if (!field || !currentFilter) { + return; + } + const nextValue = field.getValue({ item: updatedData }); + if ((0, import_es6.default)(nextValue, currentValue)) { + return; + } + onChangeView({ + ...view, + filters: (view.filters ?? []).map( + (_filter) => _filter.field === filter.field ? { + ..._filter, + operator: currentFilter.operator || filter.operators[0], + // Consider empty strings as undefined: + // + // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records + // - empty string as value means "search empty string": returns only the records that have an empty string as value + // + // In practice, this means the filter will not be able to find an empty string as the value. + value: nextValue === "" ? void 0 : nextValue + } : _filter + ) + }); + }); + if (!field || !field.Edit || !currentFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + import_components20.Flex, + { + className: "dataviews-filters__user-input-widget", + gap: 2.5, + direction: "column", + children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)( + field.Edit, + { + hideLabelFromVision: true, + data, + field, + operator: currentFilter.operator, + onChange: handleChange + } + ) + } + ); +} + +// packages/dataviews/node_modules/date-fns/constants.js +var daysInYear = 365.2425; +var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3; +var minTime = -maxTime; +var millisecondsInWeek = 6048e5; +var millisecondsInDay = 864e5; +var secondsInHour = 3600; +var secondsInDay = secondsInHour * 24; +var secondsInWeek = secondsInDay * 7; +var secondsInYear = secondsInDay * daysInYear; +var secondsInMonth = secondsInYear / 12; +var secondsInQuarter = secondsInMonth * 3; +var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom"); + +// packages/dataviews/node_modules/date-fns/constructFrom.js +function constructFrom(date, value) { + if (typeof date === "function") return date(value); + if (date && typeof date === "object" && constructFromSymbol in date) + return date[constructFromSymbol](value); + if (date instanceof Date) return new date.constructor(value); + return new Date(value); +} + +// packages/dataviews/node_modules/date-fns/toDate.js +function toDate(argument, context) { + return constructFrom(context || argument, argument); +} + +// packages/dataviews/node_modules/date-fns/addDays.js +function addDays(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) return _date; + _date.setDate(_date.getDate() + amount); + return _date; +} + +// packages/dataviews/node_modules/date-fns/addMonths.js +function addMonths(date, amount, options) { + const _date = toDate(date, options?.in); + if (isNaN(amount)) return constructFrom(options?.in || date, NaN); + if (!amount) { + return _date; + } + const dayOfMonth = _date.getDate(); + const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime()); + endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); + const daysInMonth = endOfDesiredMonth.getDate(); + if (dayOfMonth >= daysInMonth) { + return endOfDesiredMonth; + } else { + _date.setFullYear( + endOfDesiredMonth.getFullYear(), + endOfDesiredMonth.getMonth(), + dayOfMonth + ); + return _date; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js +var defaultOptions = {}; +function getDefaultOptions() { + return defaultOptions; +} + +// packages/dataviews/node_modules/date-fns/startOfWeek.js +function startOfWeek(date, options) { + const defaultOptions2 = getDefaultOptions(); + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const _date = toDate(date, options?.in); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + _date.setDate(_date.getDate() - diff); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeek.js +function startOfISOWeek(date, options) { + return startOfWeek(date, { ...options, weekStartsOn: 1 }); +} + +// packages/dataviews/node_modules/date-fns/getISOWeekYear.js +function getISOWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const fourthOfJanuaryOfNextYear = constructFrom(_date, 0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); + const fourthOfJanuaryOfThisYear = constructFrom(_date, 0); + fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); + if (_date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (_date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +function getTimezoneOffsetInMilliseconds(date) { + const _date = toDate(date); + const utcDate = new Date( + Date.UTC( + _date.getFullYear(), + _date.getMonth(), + _date.getDate(), + _date.getHours(), + _date.getMinutes(), + _date.getSeconds(), + _date.getMilliseconds() + ) + ); + utcDate.setUTCFullYear(_date.getFullYear()); + return +date - +utcDate; +} + +// packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js +function normalizeDates(context, ...dates) { + const normalize = constructFrom.bind( + null, + context || dates.find((date) => typeof date === "object") + ); + return dates.map(normalize); +} + +// packages/dataviews/node_modules/date-fns/startOfDay.js +function startOfDay(date, options) { + const _date = toDate(date, options?.in); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js +function differenceInCalendarDays(laterDate, earlierDate, options) { + const [laterDate_, earlierDate_] = normalizeDates( + options?.in, + laterDate, + earlierDate + ); + const laterStartOfDay = startOfDay(laterDate_); + const earlierStartOfDay = startOfDay(earlierDate_); + const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay); + const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); + return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay); +} + +// packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js +function startOfISOWeekYear(date, options) { + const year = getISOWeekYear(date, options); + const fourthOfJanuary = constructFrom(options?.in || date, 0); + fourthOfJanuary.setFullYear(year, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + return startOfISOWeek(fourthOfJanuary); +} + +// packages/dataviews/node_modules/date-fns/addWeeks.js +function addWeeks(date, amount, options) { + return addDays(date, amount * 7, options); +} + +// packages/dataviews/node_modules/date-fns/addYears.js +function addYears(date, amount, options) { + return addMonths(date, amount * 12, options); +} + +// packages/dataviews/node_modules/date-fns/isDate.js +function isDate(value) { + return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"; +} + +// packages/dataviews/node_modules/date-fns/isValid.js +function isValid(date) { + return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date))); +} + +// packages/dataviews/node_modules/date-fns/startOfMonth.js +function startOfMonth(date, options) { + const _date = toDate(date, options?.in); + _date.setDate(1); + _date.setHours(0, 0, 0, 0); + return _date; +} + +// packages/dataviews/node_modules/date-fns/startOfYear.js +function startOfYear(date, options) { + const date_ = toDate(date, options?.in); + date_.setFullYear(date_.getFullYear(), 0, 1); + date_.setHours(0, 0, 0, 0); + return date_; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +var formatDistanceLocale = { + lessThanXSeconds: { + one: "less than a second", + other: "less than {{count}} seconds" + }, + xSeconds: { + one: "1 second", + other: "{{count}} seconds" + }, + halfAMinute: "half a minute", + lessThanXMinutes: { + one: "less than a minute", + other: "less than {{count}} minutes" + }, + xMinutes: { + one: "1 minute", + other: "{{count}} minutes" + }, + aboutXHours: { + one: "about 1 hour", + other: "about {{count}} hours" + }, + xHours: { + one: "1 hour", + other: "{{count}} hours" + }, + xDays: { + one: "1 day", + other: "{{count}} days" + }, + aboutXWeeks: { + one: "about 1 week", + other: "about {{count}} weeks" + }, + xWeeks: { + one: "1 week", + other: "{{count}} weeks" + }, + aboutXMonths: { + one: "about 1 month", + other: "about {{count}} months" + }, + xMonths: { + one: "1 month", + other: "{{count}} months" + }, + aboutXYears: { + one: "about 1 year", + other: "about {{count}} years" + }, + xYears: { + one: "1 year", + other: "{{count}} years" + }, + overXYears: { + one: "over 1 year", + other: "over {{count}} years" + }, + almostXYears: { + one: "almost 1 year", + other: "almost {{count}} years" + } +}; +var formatDistance = (token, count, options) => { + let result; + const tokenValue = formatDistanceLocale[token]; + if (typeof tokenValue === "string") { + result = tokenValue; + } else if (count === 1) { + result = tokenValue.one; + } else { + result = tokenValue.other.replace("{{count}}", count.toString()); + } + if (options?.addSuffix) { + if (options.comparison && options.comparison > 0) { + return "in " + result; + } else { + return result + " ago"; + } + } + return result; +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +function buildFormatLongFn(args) { + return (options = {}) => { + const width = options.width ? String(options.width) : args.defaultWidth; + const format6 = args.formats[width] || args.formats[args.defaultWidth]; + return format6; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js +var dateFormats = { + full: "EEEE, MMMM do, y", + long: "MMMM do, y", + medium: "MMM d, y", + short: "MM/dd/yyyy" +}; +var timeFormats = { + full: "h:mm:ss a zzzz", + long: "h:mm:ss a z", + medium: "h:mm:ss a", + short: "h:mm a" +}; +var dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: "{{date}}, {{time}}", + short: "{{date}}, {{time}}" +}; +var formatLong = { + date: buildFormatLongFn({ + formats: dateFormats, + defaultWidth: "full" + }), + time: buildFormatLongFn({ + formats: timeFormats, + defaultWidth: "full" + }), + dateTime: buildFormatLongFn({ + formats: dateTimeFormats, + defaultWidth: "full" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +var formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: "P" +}; +var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +function buildLocalizeFn(args) { + return (value, options) => { + const context = options?.context ? String(options.context) : "standalone"; + let valuesArray; + if (context === "formatting" && args.formattingValues) { + const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + const width = options?.width ? String(options.width) : defaultWidth; + valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + const defaultWidth = args.defaultWidth; + const width = options?.width ? String(options.width) : args.defaultWidth; + valuesArray = args.values[width] || args.values[defaultWidth]; + } + const index = args.argumentCallback ? args.argumentCallback(value) : value; + return valuesArray[index]; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js +var eraValues = { + narrow: ["B", "A"], + abbreviated: ["BC", "AD"], + wide: ["Before Christ", "Anno Domini"] +}; +var quarterValues = { + narrow: ["1", "2", "3", "4"], + abbreviated: ["Q1", "Q2", "Q3", "Q4"], + wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] +}; +var monthValues = { + narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], + abbreviated: [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + wide: [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] +}; +var dayValues = { + narrow: ["S", "M", "T", "W", "T", "F", "S"], + short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + wide: [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] +}; +var dayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + } +}; +var formattingDayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + } +}; +var ordinalNumber = (dirtyNumber, _options) => { + const number = Number(dirtyNumber); + const rem100 = number % 100; + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + "st"; + case 2: + return number + "nd"; + case 3: + return number + "rd"; + } + } + return number + "th"; +}; +var localize = { + ordinalNumber, + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: "wide" + }), + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: "wide", + argumentCallback: (quarter) => quarter - 1 + }), + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: "wide" + }), + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: "wide" + }), + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: "wide", + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: "wide" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js +function buildMatchFn(args) { + return (string, options = {}) => { + const width = options.width; + const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; + const matchResult = string.match(matchPattern); + if (!matchResult) { + return null; + } + const matchedString = matchResult[0]; + const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; + const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : ( + // [TODO] -- I challenge you to fix the type + findKey(parsePatterns, (pattern) => pattern.test(matchedString)) + ); + let value; + value = args.valueCallback ? args.valueCallback(key) : key; + value = options.valueCallback ? ( + // [TODO] -- I challenge you to fix the type + options.valueCallback(value) + ) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} +function findKey(object, predicate) { + for (const key in object) { + if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) { + return key; + } + } + return void 0; +} +function findIndex(array, predicate) { + for (let key = 0; key < array.length; key++) { + if (predicate(array[key])) { + return key; + } + } + return void 0; +} + +// packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +function buildMatchPatternFn(args) { + return (string, options = {}) => { + const matchResult = string.match(args.matchPattern); + if (!matchResult) return null; + const matchedString = matchResult[0]; + const parseResult = string.match(args.parsePattern); + if (!parseResult) return null; + let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; + value = options.valueCallback ? options.valueCallback(value) : value; + const rest = string.slice(matchedString.length); + return { value, rest }; + }; +} + +// packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js +var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +var parseOrdinalNumberPattern = /\d+/i; +var matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i +}; +var parseEraPatterns = { + any: [/^b/i, /^(a|c)/i] +}; +var matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i +}; +var parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i] +}; +var matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i +}; +var parseMonthPatterns = { + narrow: [ + /^j/i, + /^f/i, + /^m/i, + /^a/i, + /^m/i, + /^j/i, + /^j/i, + /^a/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ], + any: [ + /^ja/i, + /^f/i, + /^mar/i, + /^ap/i, + /^may/i, + /^jun/i, + /^jul/i, + /^au/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i + ] +}; +var matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i +}; +var parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] +}; +var matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i +}; +var parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i + } +}; +var match = { + ordinalNumber: buildMatchPatternFn({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: (value) => parseInt(value, 10) + }), + era: buildMatchFn({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseEraPatterns, + defaultParseWidth: "any" + }), + quarter: buildMatchFn({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseQuarterPatterns, + defaultParseWidth: "any", + valueCallback: (index) => index + 1 + }), + month: buildMatchFn({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseMonthPatterns, + defaultParseWidth: "any" + }), + day: buildMatchFn({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseDayPatterns, + defaultParseWidth: "any" + }), + dayPeriod: buildMatchFn({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: "any", + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: "any" + }) +}; + +// packages/dataviews/node_modules/date-fns/locale/en-US.js +var enUS = { + code: "en-US", + formatDistance, + formatLong, + formatRelative, + localize, + match, + options: { + weekStartsOn: 0, + firstWeekContainsDate: 1 + } +}; + +// packages/dataviews/node_modules/date-fns/getDayOfYear.js +function getDayOfYear(date, options) { + const _date = toDate(date, options?.in); + const diff = differenceInCalendarDays(_date, startOfYear(_date)); + const dayOfYear = diff + 1; + return dayOfYear; +} + +// packages/dataviews/node_modules/date-fns/getISOWeek.js +function getISOWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/getWeekYear.js +function getWeekYear(date, options) { + const _date = toDate(date, options?.in); + const year = _date.getFullYear(); + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const firstWeekOfNextYear = constructFrom(options?.in || date, 0); + firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = startOfWeek(firstWeekOfNextYear, options); + const firstWeekOfThisYear = constructFrom(options?.in || date, 0); + firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = startOfWeek(firstWeekOfThisYear, options); + if (+_date >= +startOfNextYear) { + return year + 1; + } else if (+_date >= +startOfThisYear) { + return year; + } else { + return year - 1; + } +} + +// packages/dataviews/node_modules/date-fns/startOfWeekYear.js +function startOfWeekYear(date, options) { + const defaultOptions2 = getDefaultOptions(); + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const year = getWeekYear(date, options); + const firstWeek = constructFrom(options?.in || date, 0); + firstWeek.setFullYear(year, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + const _date = startOfWeek(firstWeek, options); + return _date; +} + +// packages/dataviews/node_modules/date-fns/getWeek.js +function getWeek(date, options) { + const _date = toDate(date, options?.in); + const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); + return Math.round(diff / millisecondsInWeek) + 1; +} + +// packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js +function addLeadingZeros(number, targetLength) { + const sign = number < 0 ? "-" : ""; + const output = Math.abs(number).toString().padStart(targetLength, "0"); + return sign + output; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js +var lightFormatters = { + // Year + y(date, token) { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); + }, + // Month + M(date, token) { + const month = date.getMonth(); + return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); + }, + // Day of the month + d(date, token) { + return addLeadingZeros(date.getDate(), token.length); + }, + // AM or PM + a(date, token) { + const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return dayPeriodEnumValue.toUpperCase(); + case "aaa": + return dayPeriodEnumValue; + case "aaaaa": + return dayPeriodEnumValue[0]; + case "aaaa": + default: + return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; + } + }, + // Hour [1-12] + h(date, token) { + return addLeadingZeros(date.getHours() % 12 || 12, token.length); + }, + // Hour [0-23] + H(date, token) { + return addLeadingZeros(date.getHours(), token.length); + }, + // Minute + m(date, token) { + return addLeadingZeros(date.getMinutes(), token.length); + }, + // Second + s(date, token) { + return addLeadingZeros(date.getSeconds(), token.length); + }, + // Fraction of second + S(date, token) { + const numberOfDigits = token.length; + const milliseconds = date.getMilliseconds(); + const fractionalSeconds = Math.trunc( + milliseconds * Math.pow(10, numberOfDigits - 3) + ); + return addLeadingZeros(fractionalSeconds, token.length); + } +}; + +// packages/dataviews/node_modules/date-fns/_lib/format/formatters.js +var dayPeriodEnum = { + am: "am", + pm: "pm", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" +}; +var formatters = { + // Era + G: function(date, token, localize2) { + const era = date.getFullYear() > 0 ? 1 : 0; + switch (token) { + // AD, BC + case "G": + case "GG": + case "GGG": + return localize2.era(era, { width: "abbreviated" }); + // A, B + case "GGGGG": + return localize2.era(era, { width: "narrow" }); + // Anno Domini, Before Christ + case "GGGG": + default: + return localize2.era(era, { width: "wide" }); + } + }, + // Year + y: function(date, token, localize2) { + if (token === "yo") { + const signedYear = date.getFullYear(); + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize2.ordinalNumber(year, { unit: "year" }); + } + return lightFormatters.y(date, token); + }, + // Local week-numbering year + Y: function(date, token, localize2, options) { + const signedWeekYear = getWeekYear(date, options); + const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; + if (token === "YY") { + const twoDigitYear = weekYear % 100; + return addLeadingZeros(twoDigitYear, 2); + } + if (token === "Yo") { + return localize2.ordinalNumber(weekYear, { unit: "year" }); + } + return addLeadingZeros(weekYear, token.length); + }, + // ISO week-numbering year + R: function(date, token) { + const isoWeekYear = getISOWeekYear(date); + return addLeadingZeros(isoWeekYear, token.length); + }, + // Extended year. This is a single number designating the year of this calendar system. + // The main difference between `y` and `u` localizers are B.C. years: + // | Year | `y` | `u` | + // |------|-----|-----| + // | AC 1 | 1 | 1 | + // | BC 1 | 1 | 0 | + // | BC 2 | 2 | -1 | + // Also `yy` always returns the last two digits of a year, + // while `uu` pads single digit years to 2 characters and returns other years unchanged. + u: function(date, token) { + const year = date.getFullYear(); + return addLeadingZeros(year, token.length); + }, + // Quarter + Q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "Q": + return String(quarter); + // 01, 02, 03, 04 + case "QQ": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "Qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "QQQ": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "formatting" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "QQQQQ": + return localize2.quarter(quarter, { + width: "narrow", + context: "formatting" + }); + // 1st quarter, 2nd quarter, ... + case "QQQQ": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone quarter + q: function(date, token, localize2) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); + switch (token) { + // 1, 2, 3, 4 + case "q": + return String(quarter); + // 01, 02, 03, 04 + case "qq": + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + case "qo": + return localize2.ordinalNumber(quarter, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "qqq": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "standalone" + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "qqqqq": + return localize2.quarter(quarter, { + width: "narrow", + context: "standalone" + }); + // 1st quarter, 2nd quarter, ... + case "qqqq": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "standalone" + }); + } + }, + // Month + M: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + case "M": + case "MM": + return lightFormatters.M(date, token); + // 1st, 2nd, ..., 12th + case "Mo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "MMM": + return localize2.month(month, { + width: "abbreviated", + context: "formatting" + }); + // J, F, ..., D + case "MMMMM": + return localize2.month(month, { + width: "narrow", + context: "formatting" + }); + // January, February, ..., December + case "MMMM": + default: + return localize2.month(month, { width: "wide", context: "formatting" }); + } + }, + // Stand-alone month + L: function(date, token, localize2) { + const month = date.getMonth(); + switch (token) { + // 1, 2, ..., 12 + case "L": + return String(month + 1); + // 01, 02, ..., 12 + case "LL": + return addLeadingZeros(month + 1, 2); + // 1st, 2nd, ..., 12th + case "Lo": + return localize2.ordinalNumber(month + 1, { unit: "month" }); + // Jan, Feb, ..., Dec + case "LLL": + return localize2.month(month, { + width: "abbreviated", + context: "standalone" + }); + // J, F, ..., D + case "LLLLL": + return localize2.month(month, { + width: "narrow", + context: "standalone" + }); + // January, February, ..., December + case "LLLL": + default: + return localize2.month(month, { width: "wide", context: "standalone" }); + } + }, + // Local week of year + w: function(date, token, localize2, options) { + const week = getWeek(date, options); + if (token === "wo") { + return localize2.ordinalNumber(week, { unit: "week" }); + } + return addLeadingZeros(week, token.length); + }, + // ISO week of year + I: function(date, token, localize2) { + const isoWeek = getISOWeek(date); + if (token === "Io") { + return localize2.ordinalNumber(isoWeek, { unit: "week" }); + } + return addLeadingZeros(isoWeek, token.length); + }, + // Day of the month + d: function(date, token, localize2) { + if (token === "do") { + return localize2.ordinalNumber(date.getDate(), { unit: "date" }); + } + return lightFormatters.d(date, token); + }, + // Day of year + D: function(date, token, localize2) { + const dayOfYear = getDayOfYear(date); + if (token === "Do") { + return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); + } + return addLeadingZeros(dayOfYear, token.length); + }, + // Day of week + E: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + switch (token) { + // Tue + case "E": + case "EE": + case "EEE": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "EEEEE": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "EEEEEE": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "EEEE": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Local day of week + e: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (Nth day of week with current locale or weekStartsOn) + case "e": + return String(localDayOfWeek); + // Padded numerical value + case "ee": + return addLeadingZeros(localDayOfWeek, 2); + // 1st, 2nd, ..., 7th + case "eo": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "eee": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "eeeee": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "eeeeee": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "eeee": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // Stand-alone local day of week + c: function(date, token, localize2, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + // Numerical value (same as in `e`) + case "c": + return String(localDayOfWeek); + // Padded numerical value + case "cc": + return addLeadingZeros(localDayOfWeek, token.length); + // 1st, 2nd, ..., 7th + case "co": + return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "ccc": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "standalone" + }); + // T + case "ccccc": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "standalone" + }); + // Tu + case "cccccc": + return localize2.day(dayOfWeek, { + width: "short", + context: "standalone" + }); + // Tuesday + case "cccc": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "standalone" + }); + } + }, + // ISO day of week + i: function(date, token, localize2) { + const dayOfWeek = date.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + switch (token) { + // 2 + case "i": + return String(isoDayOfWeek); + // 02 + case "ii": + return addLeadingZeros(isoDayOfWeek, token.length); + // 2nd + case "io": + return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); + // Tue + case "iii": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + // T + case "iiiii": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + // Tu + case "iiiiii": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + // Tuesday + case "iiii": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); + } + }, + // AM or PM + a: function(date, token, localize2) { + const hours = date.getHours(); + const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "aaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "aaaaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "aaaa": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // AM, PM, midnight, noon + b: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours === 12) { + dayPeriodEnumValue = dayPeriodEnum.noon; + } else if (hours === 0) { + dayPeriodEnumValue = dayPeriodEnum.midnight; + } else { + dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + } + switch (token) { + case "b": + case "bb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "bbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "bbbbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "bbbb": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // in the morning, in the afternoon, in the evening, at night + B: function(date, token, localize2) { + const hours = date.getHours(); + let dayPeriodEnumValue; + if (hours >= 17) { + dayPeriodEnumValue = dayPeriodEnum.evening; + } else if (hours >= 12) { + dayPeriodEnumValue = dayPeriodEnum.afternoon; + } else if (hours >= 4) { + dayPeriodEnumValue = dayPeriodEnum.morning; + } else { + dayPeriodEnumValue = dayPeriodEnum.night; + } + switch (token) { + case "B": + case "BB": + case "BBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "BBBBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "BBBB": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); + } + }, + // Hour [1-12] + h: function(date, token, localize2) { + if (token === "ho") { + let hours = date.getHours() % 12; + if (hours === 0) hours = 12; + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return lightFormatters.h(date, token); + }, + // Hour [0-23] + H: function(date, token, localize2) { + if (token === "Ho") { + return localize2.ordinalNumber(date.getHours(), { unit: "hour" }); + } + return lightFormatters.H(date, token); + }, + // Hour [0-11] + K: function(date, token, localize2) { + const hours = date.getHours() % 12; + if (token === "Ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Hour [1-24] + k: function(date, token, localize2) { + let hours = date.getHours(); + if (hours === 0) hours = 24; + if (token === "ko") { + return localize2.ordinalNumber(hours, { unit: "hour" }); + } + return addLeadingZeros(hours, token.length); + }, + // Minute + m: function(date, token, localize2) { + if (token === "mo") { + return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" }); + } + return lightFormatters.m(date, token); + }, + // Second + s: function(date, token, localize2) { + if (token === "so") { + return localize2.ordinalNumber(date.getSeconds(), { unit: "second" }); + } + return lightFormatters.s(date, token); + }, + // Fraction of second + S: function(date, token) { + return lightFormatters.S(date, token); + }, + // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) + X: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + if (timezoneOffset === 0) { + return "Z"; + } + switch (token) { + // Hours and optional minutes + case "X": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XX` + case "XXXX": + case "XX": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XXX` + case "XXXXX": + case "XXX": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) + x: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Hours and optional minutes + case "x": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xx` + case "xxxx": + case "xx": + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xxx` + case "xxxxx": + case "xxx": + // Hours and minutes with `:` delimiter + default: + return formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (GMT) + O: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "O": + case "OO": + case "OOO": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "OOOO": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Timezone (specific non-location) + z: function(date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); + switch (token) { + // Short + case "z": + case "zz": + case "zzz": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + // Long + case "zzzz": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + // Seconds timestamp + t: function(date, token, _localize) { + const timestamp = Math.trunc(+date / 1e3); + return addLeadingZeros(timestamp, token.length); + }, + // Milliseconds timestamp + T: function(date, token, _localize) { + return addLeadingZeros(+date, token.length); + } +}; +function formatTimezoneShort(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = Math.trunc(absOffset / 60); + const minutes = absOffset % 60; + if (minutes === 0) { + return sign + String(hours); + } + return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); +} +function formatTimezoneWithOptionalMinutes(offset, delimiter) { + if (offset % 60 === 0) { + const sign = offset > 0 ? "-" : "+"; + return sign + addLeadingZeros(Math.abs(offset) / 60, 2); + } + return formatTimezone(offset, delimiter); +} +function formatTimezone(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); + const minutes = addLeadingZeros(absOffset % 60, 2); + return sign + hours + delimiter + minutes; +} + +// packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js +var dateLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "P": + return formatLong2.date({ width: "short" }); + case "PP": + return formatLong2.date({ width: "medium" }); + case "PPP": + return formatLong2.date({ width: "long" }); + case "PPPP": + default: + return formatLong2.date({ width: "full" }); + } +}; +var timeLongFormatter = (pattern, formatLong2) => { + switch (pattern) { + case "p": + return formatLong2.time({ width: "short" }); + case "pp": + return formatLong2.time({ width: "medium" }); + case "ppp": + return formatLong2.time({ width: "long" }); + case "pppp": + default: + return formatLong2.time({ width: "full" }); + } +}; +var dateTimeLongFormatter = (pattern, formatLong2) => { + const matchResult = pattern.match(/(P+)(p+)?/) || []; + const datePattern = matchResult[1]; + const timePattern = matchResult[2]; + if (!timePattern) { + return dateLongFormatter(pattern, formatLong2); + } + let dateTimeFormat; + switch (datePattern) { + case "P": + dateTimeFormat = formatLong2.dateTime({ width: "short" }); + break; + case "PP": + dateTimeFormat = formatLong2.dateTime({ width: "medium" }); + break; + case "PPP": + dateTimeFormat = formatLong2.dateTime({ width: "long" }); + break; + case "PPPP": + default: + dateTimeFormat = formatLong2.dateTime({ width: "full" }); + break; + } + return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); +}; +var longFormatters = { + p: timeLongFormatter, + P: dateTimeLongFormatter +}; + +// packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js +var dayOfYearTokenRE = /^D+$/; +var weekYearTokenRE = /^Y+$/; +var throwTokens = ["D", "DD", "YY", "YYYY"]; +function isProtectedDayOfYearToken(token) { + return dayOfYearTokenRE.test(token); +} +function isProtectedWeekYearToken(token) { + return weekYearTokenRE.test(token); +} +function warnOrThrowProtectedError(token, format6, input) { + const _message = message(token, format6, input); + console.warn(_message); + if (throwTokens.includes(token)) throw new RangeError(_message); +} +function message(token, format6, input) { + const subject = token[0] === "Y" ? "years" : "days of the month"; + return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format6}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; +} + +// packages/dataviews/node_modules/date-fns/format.js +var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; +var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp = /^'([^]*?)'?$/; +var doubleQuoteRegExp = /''/g; +var unescapedLatinCharacterRegExp = /[a-zA-Z]/; +function format(date, formatStr, options) { + const defaultOptions2 = getDefaultOptions(); + const locale = options?.locale ?? defaultOptions2.locale ?? enUS; + const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; + const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; + const originalDate = toDate(date, options?.in); + if (!isValid(originalDate)) { + throw new RangeError("Invalid time value"); + } + let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => { + const firstCharacter = substring[0]; + if (firstCharacter === "p" || firstCharacter === "P") { + const longFormatter = longFormatters[firstCharacter]; + return longFormatter(substring, locale.formatLong); + } + return substring; + }).join("").match(formattingTokensRegExp).map((substring) => { + if (substring === "''") { + return { isToken: false, value: "'" }; + } + const firstCharacter = substring[0]; + if (firstCharacter === "'") { + return { isToken: false, value: cleanEscapedString(substring) }; + } + if (formatters[firstCharacter]) { + return { isToken: true, value: substring }; + } + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" + ); + } + return { isToken: false, value: substring }; + }); + if (locale.localize.preprocessor) { + parts = locale.localize.preprocessor(originalDate, parts); + } + const formatterOptions = { + firstWeekContainsDate, + weekStartsOn, + locale + }; + return parts.map((part) => { + if (!part.isToken) return part.value; + const token = part.value; + if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { + warnOrThrowProtectedError(token, formatStr, String(date)); + } + const formatter = formatters[token[0]]; + return formatter(originalDate, token, locale.localize, formatterOptions); + }).join(""); +} +function cleanEscapedString(input) { + const matched = input.match(escapedStringRegExp); + if (!matched) { + return input; + } + return matched[1].replace(doubleQuoteRegExp, "'"); +} + +// packages/dataviews/node_modules/date-fns/subDays.js +function subDays(date, amount, options) { + return addDays(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subMonths.js +function subMonths(date, amount, options) { + return addMonths(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subWeeks.js +function subWeeks(date, amount, options) { + return addWeeks(date, -amount, options); +} + +// packages/dataviews/node_modules/date-fns/subYears.js +function subYears(date, amount, options) { + return addYears(date, -amount, options); +} + +// packages/dataviews/build-module/utils/operators.mjs +var import_i18n23 = __toESM(require_i18n(), 1); +var import_element27 = __toESM(require_element(), 1); +var import_date = __toESM(require_date(), 1); +var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); +var filterTextWrappers = { + Name: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }), + Value: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" }) +}; +function getRelativeDate(value, unit) { + switch (unit) { + case "days": + return subDays(/* @__PURE__ */ new Date(), value); + case "weeks": + return subWeeks(/* @__PURE__ */ new Date(), value); + case "months": + return subMonths(/* @__PURE__ */ new Date(), value); + case "years": + return subYears(/* @__PURE__ */ new Date(), value); + default: + return /* @__PURE__ */ new Date(); + } +} +var isNoneOperatorDefinition = { + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is none of"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */ + (0, import_i18n23.__)("%1$s is none of: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter: ((item, field, filterValue) => { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return !filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return !filterValue.includes(fieldValue); + } + return false; + }), + selection: "multi" +}; +var OPERATORS = [ + { + name: OPERATOR_IS_ANY, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + const fieldValue = field.getValue({ item }); + if (Array.isArray(fieldValue)) { + return filterValue.some( + (fv) => fieldValue.includes(fv) + ); + } else if (typeof fieldValue === "string") { + return filterValue.includes(fieldValue); + } + return false; + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NONE, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_IS_ALL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Includes all"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */ + (0, import_i18n23.__)("%1$s includes all: %2$s"), + filter.name, + activeElements.map((element) => element.label).join(", ") + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!filterValue?.length) { + return true; + } + return filterValue.every((value) => { + return field.getValue({ item })?.includes(value); + }); + }, + selection: "multi" + }, + { + name: OPERATOR_IS_NOT_ALL, + ...isNoneOperatorDefinition + }, + { + name: OPERATOR_BETWEEN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Between (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Item count"). 2: Filter value min. 3: Filter value max. e.g.: "Item count between (inc): 10 and 180". */ + (0, import_i18n23.__)( + "%1$s between (inc): %2$s and %3$s" + ), + filter.name, + activeElements[0].label[0], + activeElements[0].label[1] + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (!Array.isArray(filterValue) || filterValue.length !== 2 || filterValue[0] === void 0 || filterValue[1] === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") { + return fieldValue >= filterValue[0] && fieldValue <= filterValue[1]; + } + return false; + }, + selection: "custom" + }, + { + name: OPERATOR_IN_THE_PAST, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("In the past"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */ + (0, import_i18n23.__)( + "%1$s is in the past: %2$s" + ), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date(); + }, + selection: "custom" + }, + { + name: OPERATOR_OVER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Over"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */ + (0, import_i18n23.__)("%1$s is over: %2$s"), + filter.name, + `${activeElements[0].value.value} ${activeElements[0].value.unit}` + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue?.value === void 0 || filterValue?.unit === void 0) { + return true; + } + const targetDate = getRelativeDate( + filterValue.value, + filterValue.unit + ); + const fieldValue = (0, import_date.getDate)(field.getValue({ item })); + return fieldValue < targetDate; + }, + selection: "custom" + }, + { + name: OPERATOR_IS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue === field.getValue({ item }) || filterValue === void 0; + }, + selection: "single" + }, + { + name: OPERATOR_IS_NOT, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Is not"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + return filterValue !== field.getValue({ item }); + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */ + (0, import_i18n23.__)("%1$s is less than: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue < filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue > filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_LESS_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Less than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is less than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue <= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_GREATER_THAN_OR_EQUAL, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Greater than or equal"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */ + (0, import_i18n23.__)( + "%1$s is greater than or equal to: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return fieldValue >= filterValue; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is before: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate < filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is after: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate > filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_BEFORE_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Before (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or before: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate <= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_AFTER_INC, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("After (inc)"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */ + (0, import_i18n23.__)( + "%1$s is on or after: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return fieldDate >= filterDate; + }, + selection: "single" + }, + { + name: OPERATOR_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Contains"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */ + (0, import_i18n23.__)("%1$s contains: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_CONTAINS, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Doesn't contain"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */ + (0, import_i18n23.__)( + "%1$s doesn't contain: %2$s" + ), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_STARTS_WITH, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Starts with"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */ + (0, import_i18n23.__)("%1$s starts with: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const fieldValue = field.getValue({ item }); + return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase()); + }, + selection: "single" + }, + { + name: OPERATOR_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("On"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() === fieldDate.getTime(); + }, + selection: "single" + }, + { + name: OPERATOR_NOT_ON, + /* translators: DataViews operator name */ + label: (0, import_i18n23.__)("Not on"), + filterText: (filter, activeElements) => (0, import_element27.createInterpolateElement)( + (0, import_i18n23.sprintf)( + /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */ + (0, import_i18n23.__)("%1$s is not: %2$s"), + filter.name, + activeElements[0].label + ), + filterTextWrappers + ), + filter(item, field, filterValue) { + if (filterValue === void 0) { + return true; + } + const filterDate = (0, import_date.getDate)(filterValue); + const fieldDate = (0, import_date.getDate)(field.getValue({ item })); + return filterDate.getTime() !== fieldDate.getTime(); + }, + selection: "single" + } +]; +var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name); +var getAllOperatorNames = () => OPERATORS.map((op) => op.name); +var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some( + (op) => op.name === name +); +var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name); + +// packages/dataviews/build-module/components/dataviews-filters/filter.mjs +var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); +var ENTER = "Enter"; +var SPACE = " "; +var FilterText = ({ + activeElements, + filterInView, + filter +}) => { + if (activeElements === void 0 || activeElements.length === 0) { + return filter.name; + } + const operator = getOperatorByName(filterInView?.operator); + if (operator !== void 0) { + return operator.filterText(filter, activeElements); + } + return (0, import_i18n24.sprintf)( + /* translators: 1: Filter name e.g.: "Unknown status for Author". */ + (0, import_i18n24.__)("Unknown status for %1$s"), + filter.name + ); +}; +function OperatorSelector({ + filter, + view, + onChangeView +}) { + const operatorOptions = filter.operators?.map((operator) => ({ + value: operator, + label: getOperatorByName(operator)?.label || operator + })); + const currentFilter = view.filters?.find( + (_filter) => _filter.field === filter.field + ); + const value = currentFilter?.operator || filter.operators[0]; + return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "flex-start", + className: "dataviews-filters__summary-operators-container", + align: "center", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_components21.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }), + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + import_components21.SelectControl, + { + className: "dataviews-filters__summary-operators-filter-select", + label: (0, import_i18n24.__)("Conditions"), + value, + options: operatorOptions, + onChange: (newValue) => { + const newOperator = newValue; + const currentOperator = currentFilter?.operator; + const newFilters = currentFilter ? [ + ...(view.filters ?? []).map( + (_filter) => { + if (_filter.field === filter.field) { + const currentOpSelectionModel = getOperatorByName( + currentOperator + )?.selection; + const newOpSelectionModel = getOperatorByName( + newOperator + )?.selection; + const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [ + currentOpSelectionModel, + newOpSelectionModel + ].includes("custom"); + return { + ..._filter, + value: shouldResetValue ? void 0 : _filter.value, + operator: newOperator + }; + } + return _filter; + } + ) + ] : [ + ...view.filters ?? [], + { + field: filter.field, + operator: newOperator, + value: void 0 + } + ]; + onChangeView({ + ...view, + page: 1, + filters: newFilters + }); + }, + size: "small", + variant: "minimal", + hideLabelFromVision: true + } + ) + ] + } + ); +} +function Filter({ + addFilterRef, + openedFilter, + fields, + ...commonProps +}) { + const toggleRef = (0, import_element28.useRef)(null); + const { filter, view, onChangeView } = commonProps; + const filterInView = view.filters?.find( + (f2) => f2.field === filter.field + ); + let activeElements = []; + const field = (0, import_element28.useMemo)(() => { + const currentField = fields.find((f2) => f2.id === filter.field); + if (currentField) { + return { + ...currentField, + // Configure getValue as if Item was a plain object. + // See related input-widget.tsx + getValue: ({ item }) => item[currentField.id] + }; + } + return currentField; + }, [fields, filter.field]); + const { elements } = useElements({ + elements: filter.elements, + getElements: filter.getElements + }); + if (elements.length > 0) { + activeElements = elements.filter((element) => { + if (filter.singleSelection) { + return element.value === filterInView?.value; + } + return filterInView?.value?.includes(element.value); + }); + } else if (Array.isArray(filterInView?.value)) { + const label = filterInView.value.map((v2) => { + const formattedValue = field?.getValueFormatted({ + item: { [field.id]: v2 }, + field + }); + return formattedValue || String(v2); + }); + activeElements = [ + { + value: filterInView.value, + // @ts-ignore + label + } + ]; + } else if (typeof filterInView?.value === "object") { + activeElements = [ + { value: filterInView.value, label: filterInView.value } + ]; + } else if (filterInView?.value !== void 0) { + const label = field !== void 0 ? field.getValueFormatted({ + item: { [field.id]: filterInView.value }, + field + }) : String(filterInView.value); + activeElements = [ + { + value: filterInView.value, + label + } + ]; + } + const isPrimary = filter.isPrimary; + const isLocked = filterInView?.isLocked; + const hasValues = !isLocked && filterInView?.value !== void 0; + const canResetOrRemove = !isLocked && (!isPrimary || hasValues); + return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + import_components21.Dropdown, + { + defaultOpen: openedFilter === filter.field, + contentClassName: "dataviews-filters__summary-popover", + popoverProps: { placement: "bottom-start", role: "dialog" }, + onClose: () => { + toggleRef.current?.focus(); + }, + renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [ + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + import_components21.Tooltip, + { + text: (0, import_i18n24.sprintf)( + /* translators: 1: Filter name. */ + (0, import_i18n24.__)("Filter by: %1$s"), + filter.name.toLowerCase() + ), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + "div", + { + className: clsx_default( + "dataviews-filters__summary-chip", + { + "has-reset": canResetOrRemove, + "has-values": hasValues, + "is-not-clickable": isLocked + } + ), + role: "button", + tabIndex: isLocked ? -1 : 0, + onClick: () => { + if (!isLocked) { + onToggle(); + } + }, + onKeyDown: (event) => { + if (!isLocked && [ENTER, SPACE].includes(event.key)) { + onToggle(); + event.preventDefault(); + } + }, + "aria-disabled": isLocked, + "aria-pressed": isOpen, + "aria-expanded": isOpen, + ref: toggleRef, + children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + FilterText, + { + activeElements, + filterInView, + filter + } + ) + } + ) + } + ), + canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + import_components21.Tooltip, + { + text: isPrimary ? (0, import_i18n24.__)("Reset") : (0, import_i18n24.__)("Remove"), + placement: "top", + children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + "button", + { + className: clsx_default( + "dataviews-filters__summary-chip-remove", + { "has-values": hasValues } + ), + onClick: () => { + onChangeView({ + ...view, + page: 1, + filters: view.filters?.filter( + (_filter) => _filter.field !== filter.field + ) + }); + if (!isPrimary) { + addFilterRef.current?.focus(); + } else { + toggleRef.current?.focus(); + } + }, + children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_components21.Icon, { icon: close_small_default }) + } + ) + } + ) + ] }), + renderContent: () => { + return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(Stack, { direction: "column", justify: "flex-start", children: [ + /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(OperatorSelector, { ...commonProps }), + commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( + SearchWidget, + { + ...commonProps, + filter: { + ...commonProps.filter, + elements + } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(InputWidget, { ...commonProps, fields }) + ] }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/add-filter.mjs +var import_components22 = __toESM(require_components(), 1); +var import_i18n25 = __toESM(require_i18n(), 1); +var import_element29 = __toESM(require_element(), 1); +var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu4 } = unlock(import_components22.privateApis); +function AddFilterMenu({ + filters, + view, + onChangeView, + setOpenedFilter, + triggerProps +}) { + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(Menu4, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Menu4.TriggerButton, { ...triggerProps }), + /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + Menu4.Item, + { + onClick: () => { + setOpenedFilter(filter.field); + onChangeView({ + ...view, + page: 1, + filters: [ + ...view.filters || [], + { + field: filter.field, + value: void 0, + operator: filter.operators[0] + } + ] + }); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Menu4.ItemLabel, { children: filter.name }) + }, + filter.field + ); + }) }) + ] }); +} +function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) { + if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) { + return null; + } + const inactiveFilters = filters.filter((filter) => !filter.isVisible); + return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + AddFilterMenu, + { + triggerProps: { + render: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( + import_components22.Button, + { + accessibleWhenDisabled: true, + size: "compact", + className: "dataviews-filters-button", + variant: "tertiary", + disabled: !inactiveFilters.length, + ref + } + ), + children: (0, import_i18n25.__)("Add filter") + }, + ...{ filters, view, onChangeView, setOpenedFilter } + } + ); +} +var add_filter_default = (0, import_element29.forwardRef)(AddFilter); + +// packages/dataviews/build-module/components/dataviews-filters/reset-filters.mjs +var import_components23 = __toESM(require_components(), 1); +var import_i18n26 = __toESM(require_i18n(), 1); +var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); +function ResetFilter({ + filters, + view, + onChangeView +}) { + const isPrimary = (field) => filters.some( + (_filter) => _filter.field === field && _filter.isPrimary + ); + const isDisabled = !view.search && !view.filters?.some( + (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field)) + ); + return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( + import_components23.Button, + { + disabled: isDisabled, + accessibleWhenDisabled: true, + size: "compact", + variant: "tertiary", + className: "dataviews-filters__reset-button", + onClick: () => { + onChangeView({ + ...view, + page: 1, + search: "", + filters: view.filters?.filter((f2) => !!f2.isLocked) || [] + }); + }, + children: (0, import_i18n26.__)("Reset") + } + ); +} + +// packages/dataviews/build-module/components/dataviews-filters/use-filters.mjs +var import_element30 = __toESM(require_element(), 1); +function useFilters(fields, view) { + return (0, import_element30.useMemo)(() => { + const filters = []; + fields.forEach((field) => { + if (field.filterBy === false || !field.hasElements && !field.Edit) { + return; + } + const operators = field.filterBy.operators; + const isPrimary = !!field.filterBy?.isPrimary; + const isLocked = view.filters?.some( + (f2) => f2.field === field.id && !!f2.isLocked + ) ?? false; + filters.push({ + field: field.id, + name: field.label, + elements: field.elements, + getElements: field.getElements, + hasElements: field.hasElements, + singleSelection: operators.some( + (op) => isSingleSelectionOperator(op) + ), + operators, + isVisible: isLocked || isPrimary || !!view.filters?.some( + (f2) => f2.field === field.id && isRegisteredOperator(f2.operator) + ), + isPrimary, + isLocked + }); + }); + filters.sort((a2, b2) => { + if (a2.isLocked && !b2.isLocked) { + return -1; + } + if (!a2.isLocked && b2.isLocked) { + return 1; + } + if (a2.isPrimary && !b2.isPrimary) { + return -1; + } + if (!a2.isPrimary && b2.isPrimary) { + return 1; + } + return a2.name.localeCompare(b2.name); + }); + return filters; + }, [fields, view]); +} +var use_filters_default = useFilters; + +// packages/dataviews/build-module/components/dataviews-filters/filters.mjs +var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); +function Filters({ className }) { + const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element31.useContext)(dataviews_context_default); + const addFilterRef = (0, import_element31.useRef)(null); + const filters = use_filters_default(fields, view); + const addFilter = /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + add_filter_default, + { + filters, + view, + onChangeView, + ref: addFilterRef, + setOpenedFilter + }, + "add-filter" + ); + const visibleFilters = filters.filter((filter) => filter.isVisible); + if (visibleFilters.length === 0) { + return null; + } + const filterComponents = [ + ...visibleFilters.map((filter) => { + return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + Filter, + { + filter, + view, + fields, + onChangeView, + addFilterRef, + openedFilter + }, + filter.field + ); + }), + addFilter + ]; + filterComponents.push( + /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + ResetFilter, + { + filters, + view, + onChangeView + }, + "reset-filters" + ) + ); + return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( + Stack, + { + direction: "row", + justify: "flex-start", + gap: "sm", + style: { width: "fit-content" }, + wrap: "wrap", + className, + children: filterComponents + } + ); +} +var filters_default = (0, import_element31.memo)(Filters); + +// packages/dataviews/build-module/components/dataviews-filters/toggle.mjs +var import_element32 = __toESM(require_element(), 1); +var import_components24 = __toESM(require_components(), 1); +var import_i18n27 = __toESM(require_i18n(), 1); +var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); +function FiltersToggle() { + const { + filters, + view, + onChangeView, + setOpenedFilter, + isShowingFilter, + setIsShowingFilter + } = (0, import_element32.useContext)(dataviews_context_default); + const buttonRef = (0, import_element32.useRef)(null); + const onChangeViewWithFilterVisibility = (0, import_element32.useCallback)( + (_view) => { + onChangeView(_view); + setIsShowingFilter(true); + }, + [onChangeView, setIsShowingFilter] + ); + if (filters.length === 0) { + return null; + } + const hasVisibleFilters = filters.some((filter) => filter.isVisible); + const addFilterButtonProps = { + label: (0, import_i18n27.__)("Add filter"), + "aria-expanded": false, + isPressed: false + }; + const toggleFiltersButtonProps = { + label: (0, import_i18n27._x)("Filter", "verb"), + "aria-expanded": isShowingFilter, + isPressed: isShowingFilter, + onClick: () => { + if (!isShowingFilter) { + setOpenedFilter(null); + } + setIsShowingFilter(!isShowingFilter); + } + }; + const hasPrimaryOrLockedFilters = filters.some( + (filter) => filter.isPrimary || filter.isLocked + ); + const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime66.jsx)( + import_components24.Button, + { + ref: buttonRef, + className: "dataviews-filters__visibility-toggle", + size: "compact", + icon: funnel_default, + disabled: hasPrimaryOrLockedFilters, + accessibleWhenDisabled: true, + ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps + } + ); + return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)( + AddFilterMenu, + { + filters, + view, + onChangeView: onChangeViewWithFilterVisibility, + setOpenedFilter, + triggerProps: { render: buttonComponent } + } + ) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)( + FilterVisibilityToggle, + { + buttonRef, + filtersCount: view.filters?.length, + children: buttonComponent + } + ) }); +} +function FilterVisibilityToggle({ + buttonRef, + filtersCount, + children +}) { + (0, import_element32.useEffect)( + () => () => { + buttonRef.current?.focus(); + }, + [buttonRef] + ); + return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [ + children, + !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount }) + ] }); +} +var toggle_default = FiltersToggle; + +// packages/dataviews/build-module/components/dataviews-filters/filters-toggled.mjs +var import_element33 = __toESM(require_element(), 1); +var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); +function FiltersToggled(props) { + const { isShowingFilter } = (0, import_element33.useContext)(dataviews_context_default); + if (!isShowingFilter) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(filters_default, { ...props }); +} +var filters_toggled_default = FiltersToggled; + +// packages/dataviews/build-module/components/dataviews-layout/index.mjs +var import_element34 = __toESM(require_element(), 1); +var import_i18n28 = __toESM(require_i18n(), 1); +var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); +function DataViewsLayout({ className }) { + const { + actions = [], + data, + fields, + getItemId: getItemId2, + getItemLevel, + hasInitiallyLoaded, + isLoading, + view, + onChangeView, + selection, + onChangeSelection, + setOpenedFilter, + onClickItem, + isItemClickable, + renderItemLink, + defaultLayouts, + empty = /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { children: (0, import_i18n28.__)("No results") }) + } = (0, import_element34.useContext)(dataviews_context_default); + if (!hasInitiallyLoaded) { + return null; + } + const ViewComponent = VIEW_LAYOUTS.find( + (v2) => v2.type === view.type && defaultLayouts[v2.type] + )?.component; + return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)( + ViewComponent, + { + className, + actions, + data, + fields, + getItemId: getItemId2, + getItemLevel, + isLoading, + onChangeView, + onChangeSelection, + selection, + setOpenedFilter, + onClickItem, + renderItemLink, + isItemClickable, + view, + empty + } + ); +} + +// packages/dataviews/build-module/components/dataviews-footer/index.mjs +var import_element35 = __toESM(require_element(), 1); +var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); +var EMPTY_ARRAY5 = []; +function DataViewsFooter() { + const { + view, + paginationInfo: { totalItems = 0, totalPages }, + data, + actions = EMPTY_ARRAY5, + isLoading, + hasInitiallyLoaded, + hasInfiniteScrollHandler + } = (0, import_element35.useContext)(dataviews_context_default); + const isRefreshing = !!isLoading && hasInitiallyLoaded && !hasInfiniteScrollHandler && !!data?.length; + const isDelayedRefreshing = useDelayedLoading(!!isRefreshing); + const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type); + if (!isRefreshing && (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions)) { + return null; + } + return (!!totalItems || isRefreshing) && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)( + "div", + { + className: "dataviews-footer", + inert: isRefreshing ? "true" : void 0, + children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)( + Stack, + { + direction: "row", + justify: "end", + align: "center", + className: clsx_default("dataviews-footer__content", { + "is-refreshing": isDelayedRefreshing + }), + gap: "sm", + children: [ + hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(BulkActionsFooter, {}), + /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(dataviews_pagination_default, {}) + ] + } + ) + } + ); +} + +// packages/dataviews/build-module/components/dataviews-search/index.mjs +var import_i18n29 = __toESM(require_i18n(), 1); +var import_element36 = __toESM(require_element(), 1); +var import_components25 = __toESM(require_components(), 1); +var import_compose10 = __toESM(require_compose(), 1); +var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); +var DataViewsSearch = (0, import_element36.memo)(function Search({ label }) { + const { view, onChangeView } = (0, import_element36.useContext)(dataviews_context_default); + const [search, setSearch, debouncedSearch] = (0, import_compose10.useDebouncedInput)( + view.search + ); + (0, import_element36.useEffect)(() => { + setSearch(view.search ?? ""); + }, [view.search, setSearch]); + const onChangeViewRef = (0, import_element36.useRef)(onChangeView); + const viewRef = (0, import_element36.useRef)(view); + (0, import_element36.useEffect)(() => { + onChangeViewRef.current = onChangeView; + viewRef.current = view; + }, [onChangeView, view]); + (0, import_element36.useEffect)(() => { + if (debouncedSearch !== viewRef.current?.search) { + onChangeViewRef.current({ + ...viewRef.current, + page: 1, + search: debouncedSearch + }); + } + }, [debouncedSearch]); + const searchLabel = label || (0, import_i18n29.__)("Search"); + return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)( + import_components25.SearchControl, + { + className: "dataviews-search", + onChange: setSearch, + value: search, + label: searchLabel, + placeholder: searchLabel, + size: "compact" + } + ); +}); +var dataviews_search_default = DataViewsSearch; + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_components27 = __toESM(require_components(), 1); +var import_i18n31 = __toESM(require_i18n(), 1); +var import_element38 = __toESM(require_element(), 1); +var import_warning = __toESM(require_warning(), 1); +var import_compose11 = __toESM(require_compose(), 1); + +// packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +var import_components26 = __toESM(require_components(), 1); +var import_i18n30 = __toESM(require_i18n(), 1); +var import_element37 = __toESM(require_element(), 1); +var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); +function InfiniteScrollToggle() { + const context = (0, import_element37.useContext)(dataviews_context_default); + const { view, onChangeView } = context; + const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false; + if (!context.hasInfiniteScrollHandler) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( + import_components26.ToggleControl, + { + label: (0, import_i18n30.__)("Enable infinite scroll"), + help: (0, import_i18n30.__)( + "Automatically load more content as you scroll, instead of showing pagination links." + ), + checked: infiniteScrollEnabled, + onChange: (newValue) => { + onChangeView({ + ...view, + infiniteScrollEnabled: newValue + }); + } + } + ); +} + +// packages/dataviews/build-module/components/dataviews-view-config/index.mjs +var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); +var { Menu: Menu5 } = unlock(import_components27.privateApis); +var DATAVIEWS_CONFIG_POPOVER_PROPS = { + className: "dataviews-config__popover", + placement: "bottom-end", + offset: 9 +}; +function ViewTypeMenu() { + const { view, onChangeView, defaultLayouts } = (0, import_element38.useContext)(dataviews_context_default); + const availableLayouts = Object.keys(defaultLayouts); + if (availableLayouts.length <= 1) { + return null; + } + const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type); + return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Menu5, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + Menu5.TriggerButton, + { + render: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.Button, + { + size: "compact", + icon: activeView?.icon, + label: (0, import_i18n31.__)("Layout") + } + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => { + const config = VIEW_LAYOUTS.find( + (v2) => v2.type === layout + ); + if (!config) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + Menu5.RadioItem, + { + value: layout, + name: "view-actions-available-view", + checked: layout === view.type, + hideOnClick: true, + onChange: (e2) => { + switch (e2.target.value) { + case "list": + case "grid": + case "table": + case "pickerGrid": + case "pickerTable": + case "activity": + const viewWithoutLayout = { ...view }; + if ("layout" in viewWithoutLayout) { + delete viewWithoutLayout.layout; + } + return onChangeView({ + ...viewWithoutLayout, + type: e2.target.value, + ...defaultLayouts[e2.target.value] + }); + } + (0, import_warning.default)("Invalid dataview"); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Menu5.ItemLabel, { children: config.label }) + }, + layout + ); + }) }) + ] }); +} +function SortFieldControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const orderOptions = (0, import_element38.useMemo)(() => { + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + return sortableFields.map((field) => { + return { + label: field.label, + value: field.id + }; + }); + }, [fields]); + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.SelectControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n31.__)("Sort by"), + value: view.sort?.field, + options: orderOptions, + onChange: (value) => { + onChangeView({ + ...view, + sort: { + direction: view?.sort?.direction || "desc", + field: value + }, + showLevels: false + }); + } + } + ); +} +function SortDirectionControl() { + const { view, fields, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const sortableFields = fields.filter( + (field) => field.enableSorting !== false + ); + if (sortableFields.length === 0) { + return null; + } + let value = view.sort?.direction; + if (!value && view.sort?.field) { + value = "desc"; + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.__experimentalToggleGroupControl, + { + className: "dataviews-view-config__sort-direction", + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Order"), + value, + onChange: (newDirection) => { + if (newDirection === "asc" || newDirection === "desc") { + onChangeView({ + ...view, + sort: { + direction: newDirection, + field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field. + fields.find( + (field) => field.enableSorting !== false + )?.id || "" + }, + showLevels: false + }); + return; + } + (0, import_warning.default)("Invalid direction"); + }, + children: SORTING_DIRECTIONS.map((direction) => { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.__experimentalToggleGroupControlOptionIcon, + { + value: direction, + icon: sortIcons[direction], + label: sortLabels[direction] + }, + direction + ); + }) + } + ); +} +function ItemsPerPageControl() { + const { view, config, onChangeView } = (0, import_element38.useContext)(dataviews_context_default); + const { infiniteScrollEnabled } = view; + if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.__experimentalToggleGroupControl, + { + __next40pxDefaultSize: true, + isBlock: true, + label: (0, import_i18n31.__)("Items per page"), + value: view.perPage || 10, + disabled: !view?.sort?.field, + onChange: (newItemsPerPage) => { + const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10); + onChangeView({ + ...view, + perPage: newItemsPerPageNumber, + page: 1 + }); + }, + children: config.perPageSizes.map((value) => { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.__experimentalToggleGroupControlOption, + { + value, + label: value.toString() + }, + value + ); + }) + } + ); +} +function ResetViewButton() { + const { onReset } = (0, import_element38.useContext)(dataviews_context_default); + if (onReset === void 0) { + return null; + } + const isDisabled = onReset === false; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.Button, + { + variant: "tertiary", + size: "compact", + disabled: isDisabled, + accessibleWhenDisabled: true, + className: "dataviews-view-config__reset-button", + onClick: () => { + if (typeof onReset === "function") { + onReset(); + } + }, + children: (0, import_i18n31.__)("Reset view") + } + ); +} +function DataviewsViewConfigDropdown() { + const { view, onReset } = (0, import_element38.useContext)(dataviews_context_default); + const popoverId = (0, import_compose11.useInstanceId)( + _DataViewsViewConfig, + "dataviews-view-config-dropdown" + ); + const activeLayout = VIEW_LAYOUTS.find( + (layout) => layout.type === view.type + ); + const isModified = typeof onReset === "function"; + return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.Dropdown, + { + expandOnMobile: true, + popoverProps: { + ...DATAVIEWS_CONFIG_POPOVER_PROPS, + id: popoverId + }, + renderToggle: ({ onToggle, isOpen }) => { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "dataviews-view-config__toggle-wrapper", children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.Button, + { + size: "compact", + icon: cog_default, + label: (0, import_i18n31._x)( + "View options", + "View is used as a noun" + ), + onClick: onToggle, + "aria-expanded": isOpen ? "true" : "false", + "aria-controls": popoverId + } + ), + isModified && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "dataviews-view-config__modified-indicator" }) + ] }); + }, + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.__experimentalDropdownContentWrapper, + { + paddingSize: "medium", + className: "dataviews-config__popover-content-wrapper", + children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "column", + className: "dataviews-view-config", + gap: "xl", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + justify: "space-between", + align: "center", + className: "dataviews-view-config__header", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( + import_components27.__experimentalHeading, + { + level: 2, + className: "dataviews-settings-section__title", + children: (0, import_i18n31.__)("Appearance") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(ResetViewButton, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + className: "dataviews-view-config__sort-controls", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(SortFieldControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(SortDirectionControl, {}) + ] + } + ), + !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(activeLayout.viewConfigOptions, {}), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(InfiniteScrollToggle, {}), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(ItemsPerPageControl, {}), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(PropertiesSection, {}) + ] }) + ] + } + ) + } + ) + } + ); +} +function _DataViewsViewConfig() { + return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(ViewTypeMenu, {}), + /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(DataviewsViewConfigDropdown, {}) + ] }); +} +var DataViewsViewConfig = (0, import_element38.memo)(_DataViewsViewConfig); +var dataviews_view_config_default = DataViewsViewConfig; + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_components28 = __toESM(require_components(), 1); +var import_element39 = __toESM(require_element(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs +function getCustomValidity(isValid2, validity) { + let customValidity; + if (isValid2?.required && validity?.required) { + customValidity = validity?.required?.message ? validity.required : void 0; + } else if (isValid2?.pattern && validity?.pattern) { + customValidity = validity.pattern; + } else if (isValid2?.min && validity?.min) { + customValidity = validity.min; + } else if (isValid2?.max && validity?.max) { + customValidity = validity.max; + } else if (isValid2?.minLength && validity?.minLength) { + customValidity = validity.minLength; + } else if (isValid2?.maxLength && validity?.maxLength) { + customValidity = validity.maxLength; + } else if (isValid2?.elements && validity?.elements) { + customValidity = validity.elements; + } else if (validity?.custom) { + customValidity = validity.custom; + } + return customValidity; +} + +// packages/dataviews/build-module/components/dataform-controls/checkbox.mjs +var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); +var { ValidatedCheckboxControl } = unlock(import_components28.privateApis); +function Checkbox({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, label, description, isValid: isValid2 } = field; + const onChangeControl = (0, import_element39.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [data, getValue, onChange, setValue]); + return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( + ValidatedCheckboxControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/combobox.mjs +var import_components29 = __toESM(require_components(), 1); +var import_element40 = __toESM(require_element(), 1); +var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); +var { ValidatedComboboxControl } = unlock(import_components29.privateApis); +function Combobox3({ + data, + field, + onChange, + hideLabelFromVision, + validity +}) { + const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element40.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_components29.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( + ValidatedComboboxControl, + { + required: !!field.isValid?.required, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + placeholder, + options: elements, + onChange: onChangeControl, + hideLabelFromVision, + allowReset: true, + expandOnFocus: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_components31 = __toESM(require_components(), 1); +var import_element42 = __toESM(require_element(), 1); +var import_i18n33 = __toESM(require_i18n(), 1); +var import_date3 = __toESM(require_date(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs +var import_components30 = __toESM(require_components(), 1); +var import_element41 = __toESM(require_element(), 1); +var import_i18n32 = __toESM(require_i18n(), 1); +var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); +var TIME_UNITS_OPTIONS = { + [OPERATOR_IN_THE_PAST]: [ + { value: "days", label: (0, import_i18n32.__)("Days") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks") }, + { value: "months", label: (0, import_i18n32.__)("Months") }, + { value: "years", label: (0, import_i18n32.__)("Years") } + ], + [OPERATOR_OVER]: [ + { value: "days", label: (0, import_i18n32.__)("Days ago") }, + { value: "weeks", label: (0, import_i18n32.__)("Weeks ago") }, + { value: "months", label: (0, import_i18n32.__)("Months ago") }, + { value: "years", label: (0, import_i18n32.__)("Years ago") } + ] +}; +function RelativeDateControl({ + className, + data, + field, + onChange, + hideLabelFromVision, + operator +}) { + const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"]; + const { id, label, getValue, setValue } = field; + const fieldValue = getValue({ item: data }); + const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {}; + const onChangeValue = (0, import_element41.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: { value: Number(newValue), unit } + }) + ), + [onChange, setValue, data, unit] + ); + const onChangeUnit = (0, import_element41.useCallback)( + (newUnit) => onChange( + setValue({ + item: data, + value: { value: relValue, unit: newUnit } + }) + ), + [onChange, setValue, data, relValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + import_components30.BaseControl, + { + id, + className: clsx_default(className, "dataviews-controls__relative-date"), + label, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Stack, { direction: "row", gap: "sm", children: [ + /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + import_components30.__experimentalNumberControl, + { + __next40pxDefaultSize: true, + className: "dataviews-controls__relative-date-number", + spinControls: "none", + min: 1, + step: 1, + value: relValue, + onChange: onChangeValue + } + ), + /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( + import_components30.SelectControl, + { + className: "dataviews-controls__relative-date-unit", + __next40pxDefaultSize: true, + label: (0, import_i18n32.__)("Unit"), + value: unit, + options, + onChange: onChangeUnit, + hideLabelFromVision: true + } + ) + ] }) + } + ); +} + +// packages/dataviews/build-module/field-types/utils/parse-date-time.mjs +var import_date2 = __toESM(require_date(), 1); +function parseDateTime(dateTimeString) { + if (!dateTimeString) { + return null; + } + const parsed = (0, import_date2.getDate)(dateTimeString); + return parsed && isValid(parsed) ? parsed : null; +} + +// packages/dataviews/build-module/components/dataform-controls/datetime.mjs +var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar, ValidatedInputControl } = unlock(import_components31.privateApis); +var formatDateTime = (value) => { + if (!value) { + return ""; + } + return (0, import_date3.dateI18n)("Y-m-d\\TH:i", (0, import_date3.getDate)(value)); +}; +function CalendarDateTimeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, description, setValue, getValue, isValid: isValid2 } = field; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element42.useState)(() => { + const parsedDate = parseDateTime(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const inputControlRef = (0, import_element42.useRef)(null); + const validationTimeoutRef = (0, import_element42.useRef)(void 0); + const previousFocusRef = (0, import_element42.useRef)(null); + const onChangeCallback = (0, import_element42.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + (0, import_element42.useEffect)(() => { + return () => { + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + }; + }, []); + const onSelectDate = (0, import_element42.useCallback)( + (newDate) => { + let dateTimeValue; + if (newDate) { + const wpDate = (0, import_date3.dateI18n)("Y-m-d", newDate); + let wpTime; + if (value) { + wpTime = (0, import_date3.dateI18n)("H:i", (0, import_date3.getDate)(value)); + } else { + wpTime = (0, import_date3.dateI18n)("H:i", newDate); + } + const finalDateTime = (0, import_date3.getDate)(`${wpDate}T${wpTime}`); + dateTimeValue = finalDateTime.toISOString(); + onChangeCallback(dateTimeValue); + if (validationTimeoutRef.current) { + clearTimeout(validationTimeoutRef.current); + } + } else { + onChangeCallback(void 0); + } + previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement; + validationTimeoutRef.current = setTimeout(() => { + if (inputControlRef.current) { + inputControlRef.current.focus(); + inputControlRef.current.blur(); + onChangeCallback(dateTimeValue); + if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) { + previousFocusRef.current.focus(); + } + } + }, 0); + }, + [onChangeCallback, value] + ); + const handleManualDateTimeChange = (0, import_element42.useCallback)( + (newValue) => { + if (newValue) { + const dateTime = (0, import_date3.getDate)(newValue); + onChangeCallback(dateTime.toISOString()); + const parsedDate = parseDateTime(dateTime.toISOString()); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } else { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const { format: fieldFormat } = field; + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek; + const { + timezone: { string: timezoneString } + } = (0, import_date3.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) { + displayLabel = `${label} (${(0, import_i18n33.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + import_components31.BaseControl, + { + id, + label: displayLabel, + help: description, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + DateCalendar, + { + style: { width: "100%" }, + selected: value ? parseDateTime(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ), + /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + ValidatedInputControl, + { + ref: inputControlRef, + __next40pxDefaultSize: true, + required: !!isValid2?.required, + customValidity: getCustomValidity(isValid2, validity), + type: "datetime-local", + label: (0, import_i18n33.__)("Date time"), + hideLabelFromVision: true, + value: formatDateTime(value), + onChange: handleManualDateTimeChange + } + ) + ] }) + } + ); +} +function DateTime({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__datetime", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( + CalendarDateTimeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/date.mjs +var import_components32 = __toESM(require_components(), 1); +var import_element43 = __toESM(require_element(), 1); +var import_i18n34 = __toESM(require_i18n(), 1); +var import_date4 = __toESM(require_date(), 1); +var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); +var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components32.privateApis); +var DATE_PRESETS = [ + { + id: "today", + label: (0, import_i18n34.__)("Today"), + getValue: () => (0, import_date4.getDate)(null) + }, + { + id: "yesterday", + label: (0, import_i18n34.__)("Yesterday"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 1); + } + }, + { + id: "past-week", + label: (0, import_i18n34.__)("Past week"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subDays(today, 7); + } + }, + { + id: "past-month", + label: (0, import_i18n34.__)("Past month"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return subMonths(today, 1); + } + } +]; +var DATE_RANGE_PRESETS = [ + { + id: "last-7-days", + label: (0, import_i18n34.__)("Last 7 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 7), today]; + } + }, + { + id: "last-30-days", + label: (0, import_i18n34.__)("Last 30 days"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subDays(today, 30), today]; + } + }, + { + id: "month-to-date", + label: (0, import_i18n34.__)("Month to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfMonth(today), today]; + } + }, + { + id: "last-year", + label: (0, import_i18n34.__)("Last year"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [subYears(today, 1), today]; + } + }, + { + id: "year-to-date", + label: (0, import_i18n34.__)("Year to date"), + getValue: () => { + const today = (0, import_date4.getDate)(null); + return [startOfYear(today), today]; + } + } +]; +var parseDate = (dateString) => { + if (!dateString) { + return null; + } + const parsed = (0, import_date4.getDate)(dateString); + return parsed && isValid(parsed) ? parsed : null; +}; +var formatDate = (date) => { + if (!date) { + return ""; + } + return typeof date === "string" ? date : format(date, "yyyy-MM-dd"); +}; +function ValidatedDateControl({ + field, + validity, + inputRefs, + isTouched, + setIsTouched, + children +}) { + const { isValid: isValid2 } = field; + const [customValidity, setCustomValidity] = (0, import_element43.useState)(void 0); + const validateRefs = (0, import_element43.useCallback)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + for (const ref of refs) { + const input = ref.current; + if (input && !input.validity.valid) { + setCustomValidity({ + type: "invalid", + message: input.validationMessage + }); + return; + } + } + setCustomValidity(void 0); + }, [inputRefs]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + for (const ref of refs) { + const input = ref.current; + if (input) { + input.setCustomValidity( + result?.type === "invalid" && result.message ? result.message : "" + ); + } + } + }, [inputRefs, isValid2, validity]); + (0, import_element43.useEffect)(() => { + const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; + const handleInvalid = (event) => { + event.preventDefault(); + setIsTouched(true); + }; + for (const ref of refs) { + ref.current?.addEventListener("invalid", handleInvalid); + } + return () => { + for (const ref of refs) { + ref.current?.removeEventListener("invalid", handleInvalid); + } + }; + }, [inputRefs, setIsTouched]); + (0, import_element43.useEffect)(() => { + if (!isTouched) { + return; + } + const result = validity ? getCustomValidity(isValid2, validity) : void 0; + if (result) { + setCustomValidity(result); + } else { + validateRefs(); + } + }, [isTouched, isValid2, validity, validateRefs]); + const onBlur = (event) => { + if (isTouched) { + return; + } + if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) { + setIsTouched(true); + } + }; + return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { onBlur, children: [ + children, + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)( + "p", + { + className: clsx_default( + "components-validated-control__indicator", + customValidity.type === "invalid" ? "is-invalid" : void 0 + ), + children: [ + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.Icon, + { + className: "components-validated-control__indicator-icon", + icon: error_default, + size: 16, + fill: "currentColor" + } + ), + customValidity.message + ] + } + ) }) + ] }); +} +function CalendarDateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { + id, + label, + setValue, + getValue, + isValid: isValid2, + format: fieldFormat + } = field; + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const fieldValue = getValue({ item: data }); + const value = typeof fieldValue === "string" ? fieldValue : void 0; + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + const parsedDate = parseDate(value); + return parsedDate || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const validityTargetRef = (0, import_element43.useRef)(null); + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const onSelectDate = (0, import_element43.useCallback)( + (newDate) => { + const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0; + onChangeCallback(dateValue); + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const presetDate = preset.getValue(); + const dateValue = formatDate(presetDate); + setCalendarMonth(presetDate); + onChangeCallback(dateValue); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [onChangeCallback] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (newValue) => { + onChangeCallback(newValue); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [onChangeCallback] + ); + const { + timezone: { string: timezoneString } + } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (isValid2?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!isValid2?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: validityTargetRef, + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + disabled: !!selectedPresetId, + accessibleWhenDisabled: false, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: validityTargetRef, + type: "date", + label: (0, import_i18n34.__)("Date"), + hideLabelFromVision: true, + value, + onChange: handleManualDateChange, + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + DateCalendar2, + { + style: { width: "100%" }, + selected: value ? parseDate(value) || void 0 : void 0, + onSelect: onSelectDate, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezoneString || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function CalendarDateRangeControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { id, label, getValue, setValue, format: fieldFormat } = field; + let value; + const fieldValue = getValue({ item: data }); + if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) { + value = fieldValue; + } + const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; + const onChangeCallback = (0, import_element43.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + const [selectedPresetId, setSelectedPresetId] = (0, import_element43.useState)( + null + ); + const selectedRange = (0, import_element43.useMemo)(() => { + if (!value) { + return { from: void 0, to: void 0 }; + } + const [from, to] = value; + return { + from: parseDate(from) || void 0, + to: parseDate(to) || void 0 + }; + }, [value]); + const [calendarMonth, setCalendarMonth] = (0, import_element43.useState)(() => { + return selectedRange.from || /* @__PURE__ */ new Date(); + }); + const [isTouched, setIsTouched] = (0, import_element43.useState)(false); + const fromInputRef = (0, import_element43.useRef)(null); + const toInputRef = (0, import_element43.useRef)(null); + const updateDateRange = (0, import_element43.useCallback)( + (fromDate, toDate2) => { + if (fromDate && toDate2) { + onChangeCallback([ + formatDate(fromDate), + formatDate(toDate2) + ]); + } else if (!fromDate && !toDate2) { + onChangeCallback(void 0); + } + }, + [onChangeCallback] + ); + const onSelectCalendarRange = (0, import_element43.useCallback)( + (newRange) => { + updateDateRange(newRange?.from, newRange?.to); + setSelectedPresetId(null); + setIsTouched(true); + }, + [updateDateRange] + ); + const handlePresetClick = (0, import_element43.useCallback)( + (preset) => { + const [startDate, endDate] = preset.getValue(); + setCalendarMonth(startDate); + updateDateRange(startDate, endDate); + setSelectedPresetId(preset.id); + setIsTouched(true); + }, + [updateDateRange] + ); + const handleManualDateChange = (0, import_element43.useCallback)( + (fromOrTo, newValue) => { + const [currentFrom, currentTo] = value || [ + void 0, + void 0 + ]; + const updatedFrom = fromOrTo === "from" ? newValue : currentFrom; + const updatedTo = fromOrTo === "to" ? newValue : currentTo; + updateDateRange(updatedFrom, updatedTo); + if (newValue) { + const parsedDate = parseDate(newValue); + if (parsedDate) { + setCalendarMonth(parsedDate); + } + } + setSelectedPresetId(null); + setIsTouched(true); + }, + [value, updateDateRange] + ); + const { timezone } = (0, import_date4.getSettings)(); + let displayLabel = label; + if (field.isValid?.required && !markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Required")})`; + } else if (!field.isValid?.required && markWhenOptional) { + displayLabel = `${label} (${(0, import_i18n34.__)("Optional")})`; + } + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + ValidatedDateControl, + { + field, + validity, + inputRefs: [fromInputRef, toInputRef], + isTouched, + setIsTouched, + children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.BaseControl, + { + id, + className: "dataviews-controls__date", + label: displayLabel, + hideLabelFromVision, + children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(Stack, { direction: "column", gap: "lg", children: [ + /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + wrap: "wrap", + justify: "flex-start", + children: [ + DATE_RANGE_PRESETS.map((preset) => { + const isSelected2 = selectedPresetId === preset.id; + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: isSelected2, + size: "small", + onClick: () => handlePresetClick(preset), + children: preset.label + }, + preset.id + ); + }), + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.Button, + { + className: "dataviews-controls__date-preset", + variant: "tertiary", + isPressed: !selectedPresetId, + size: "small", + accessibleWhenDisabled: false, + disabled: !!selectedPresetId, + children: (0, import_i18n34.__)("Custom") + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)( + Stack, + { + direction: "row", + gap: "sm", + justify: "space-between", + className: "dataviews-controls__date-range-inputs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: fromInputRef, + type: "date", + label: (0, import_i18n34.__)("From"), + hideLabelFromVision: true, + value: value?.[0], + onChange: (newValue) => handleManualDateChange("from", newValue), + required: !!field.isValid?.required + } + ), + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + import_components32.__experimentalInputControl, + { + __next40pxDefaultSize: true, + ref: toInputRef, + type: "date", + label: (0, import_i18n34.__)("To"), + hideLabelFromVision: true, + value: value?.[1], + onChange: (newValue) => handleManualDateChange("to", newValue), + required: !!field.isValid?.required + } + ) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + DateRangeCalendar, + { + style: { width: "100%" }, + selected: selectedRange, + onSelect: onSelectCalendarRange, + month: calendarMonth, + onMonthChange: setCalendarMonth, + timeZone: timezone.string || void 0, + weekStartsOn + } + ) + ] }) + } + ) + } + ); +} +function DateControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + RelativeDateControl, + { + className: "dataviews-controls__date", + data, + field, + onChange, + hideLabelFromVision, + operator + } + ); + } + if (operator === OPERATOR_BETWEEN) { + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + CalendarDateRangeControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( + CalendarDateControl, + { + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/select.mjs +var import_components33 = __toESM(require_components(), 1); +var import_element44 = __toESM(require_element(), 1); +var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); +var { ValidatedSelectControl } = unlock(import_components33.privateApis); +function Select({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { type, label, description, getValue, setValue, isValid: isValid2 } = field; + const isMultiple = type === "array"; + const value = getValue({ item: data }) ?? (isMultiple ? [] : ""); + const onChangeControl = (0, import_element44.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_components33.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( + ValidatedSelectControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + value, + help: description, + options: elements, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + multiple: isMultiple + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs +var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); +var ELEMENTS_THRESHOLD = 10; +function AdaptiveSelect(props) { + const { field } = props; + const { elements } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (elements.length >= ELEMENTS_THRESHOLD) { + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Combobox3, { ...props }); + } + return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Select, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_components35 = __toESM(require_components(), 1); + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs +var import_components34 = __toESM(require_components(), 1); +var import_element45 = __toESM(require_element(), 1); +var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components34.privateApis); +function ValidatedText({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + type, + prefix, + suffix, + validity +}) { + const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element45.useCallback)( + (newValue) => onChange( + setValue({ + item: data, + value: newValue + }) + ), + [data, setValue, onChange] + ); + return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)( + ValidatedInputControl2, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + hideLabelFromVision, + type, + prefix, + suffix, + pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/email.mjs +var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1); +function Email({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "email", + prefix: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_components35.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_components35.Icon, { icon: envelope_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/telephone.mjs +var import_components36 = __toESM(require_components(), 1); +var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1); +function Telephone({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "tel", + prefix: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_components36.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_components36.Icon, { icon: mobile_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/url.mjs +var import_components37 = __toESM(require_components(), 1); +var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1); +function Url({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: "url", + prefix: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_components37.Icon, { icon: link_default }) }) + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs +var import_components38 = __toESM(require_components(), 1); +var import_element46 = __toESM(require_element(), 1); +var import_i18n35 = __toESM(require_i18n(), 1); +var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1); +var { ValidatedNumberControl } = unlock(import_components38.privateApis); +function toNumberOrEmpty(value) { + if (value === "" || value === void 0) { + return ""; + } + const number = Number(value); + return Number.isFinite(number) ? number : ""; +} +function BetweenControls({ + value, + onChange, + hideLabelFromVision, + step +}) { + const [min = "", max = ""] = value; + const onChangeMin = (0, import_element46.useCallback)( + (newValue) => onChange([toNumberOrEmpty(newValue), max]), + [onChange, max] + ); + const onChangeMax = (0, import_element46.useCallback)( + (newValue) => onChange([min, toNumberOrEmpty(newValue)]), + [onChange, min] + ); + return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + import_components38.BaseControl, + { + help: (0, import_i18n35.__)("The max. value must be greater than the min. value."), + children: /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_components38.Flex, { direction: "row", gap: 4, children: [ + /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Min."), + value: min, + max: max ? Number(max) - step : void 0, + onChange: onChangeMin, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ), + /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + import_components38.__experimentalNumberControl, + { + label: (0, import_i18n35.__)("Max."), + value: max, + min: min ? Number(min) + step : void 0, + onChange: onChangeMax, + __next40pxDefaultSize: true, + hideLabelFromVision, + step + } + ) + ] }) + } + ); +} +function ValidatedNumber({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + operator, + validity +}) { + const decimals = field.format?.decimals ?? 0; + const step = Math.pow(10, Math.abs(decimals) * -1); + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }) ?? ""; + const onChangeControl = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + // Do not convert an empty string or undefined to a number, + // otherwise there's a mismatch between the UI control (empty) + // and the data relied by onChange (0). + value: ["", void 0].includes(newValue) ? void 0 : Number(newValue) + }) + ); + }, + [data, onChange, setValue] + ); + const onChangeBetweenControls = (0, import_element46.useCallback)( + (newValue) => { + onChange( + setValue({ + item: data, + value: newValue + }) + ); + }, + [data, onChange, setValue] + ); + if (operator === OPERATOR_BETWEEN) { + let valueBetween = ["", ""]; + if (Array.isArray(value) && value.length === 2 && value.every( + (element) => typeof element === "number" || element === "" + )) { + valueBetween = value; + } + return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + BetweenControls, + { + value: valueBetween, + onChange: onChangeBetweenControls, + hideLabelFromVision, + step + } + ); + } + return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( + ValidatedNumberControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + value, + onChange: onChangeControl, + __next40pxDefaultSize: true, + hideLabelFromVision, + step, + min: isValid2.min ? isValid2.min.constraint : void 0, + max: isValid2.max ? isValid2.max.constraint : void 0 + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/integer.mjs +var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1); +function Integer(props) { + return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/number.mjs +var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1); +function Number2(props) { + return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ValidatedNumber, { ...props }); +} + +// packages/dataviews/build-module/components/dataform-controls/radio.mjs +var import_components39 = __toESM(require_components(), 1); +var import_element47 = __toESM(require_element(), 1); +var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1); +var { ValidatedRadioControl } = unlock(import_components39.privateApis); +function Radio({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = getValue({ item: data }); + const onChangeControl = (0, import_element47.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(import_components39.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( + ValidatedRadioControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + help: description, + onChange: onChangeControl, + options: elements, + selected: value, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/text.mjs +var import_element48 = __toESM(require_element(), 1); +var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1); +function Text({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { prefix, suffix } = config || {}; + return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + prefix: prefix ? (0, import_element48.createElement)(prefix) : void 0, + suffix: suffix ? (0, import_element48.createElement)(suffix) : void 0 + } + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle.mjs +var import_components40 = __toESM(require_components(), 1); +var import_element49 = __toESM(require_element(), 1); +var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleControl } = unlock(import_components40.privateApis); +function Toggle({ + field, + onChange, + data, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, description, getValue, setValue, isValid: isValid2 } = field; + const onChangeControl = (0, import_element49.useCallback)(() => { + onChange( + setValue({ item: data, value: !getValue({ item: data }) }) + ); + }, [onChange, setValue, data, getValue]); + return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( + ValidatedToggleControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + hidden: hideLabelFromVision, + label, + help: description, + checked: getValue({ item: data }), + onChange: onChangeControl + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/textarea.mjs +var import_components41 = __toESM(require_components(), 1); +var import_element50 = __toESM(require_element(), 1); +var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1); +var { ValidatedTextareaControl } = unlock(import_components41.privateApis); +function Textarea({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + config, + validity +}) { + const { rows = 4 } = config || {}; + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }); + const onChangeControl = (0, import_element50.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)( + ValidatedTextareaControl, + { + required: !!isValid2.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value: value ?? "", + help: description, + onChange: onChangeControl, + rows, + minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, + maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, + __next40pxDefaultSize: true, + hideLabelFromVision + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs +var import_components42 = __toESM(require_components(), 1); +var import_element51 = __toESM(require_element(), 1); +var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1); +var { ValidatedToggleGroupControl } = unlock(import_components42.privateApis); +function ToggleGroup({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const onChangeControl = (0, import_element51.useCallback)( + (newValue) => onChange(setValue({ item: data, value: newValue })), + [data, onChange, setValue] + ); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_components42.Spinner, {}); + } + if (elements.length === 0) { + return null; + } + const selectedOption = elements.find((el) => el.value === value); + return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)( + ValidatedToggleGroupControl, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + __next40pxDefaultSize: true, + isBlock: true, + label: field.label, + help: selectedOption?.description || field.description, + onChange: onChangeControl, + value, + hideLabelFromVision, + children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime91.jsx)( + import_components42.__experimentalToggleGroupControlOption, + { + label: el.label, + value: el.value + }, + el.value + )) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/array.mjs +var import_components43 = __toESM(require_components(), 1); +var import_element52 = __toESM(require_element(), 1); +var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1); +var { ValidatedFormTokenField } = unlock(import_components43.privateApis); +function ArrayControl({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, getValue, setValue, isValid: isValid2 } = field; + const value = getValue({ item: data }); + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const arrayValueAsElements = (0, import_element52.useMemo)( + () => Array.isArray(value) ? value.map((token) => { + const element = elements?.find( + (suggestion) => suggestion.value === token + ); + return element || { value: token, label: token }; + }) : [], + [value, elements] + ); + const onChangeControl = (0, import_element52.useCallback)( + (tokens) => { + const valueTokens = tokens.map((token) => { + if (typeof token === "object" && "value" in token) { + return token.value; + } + return token; + }); + onChange(setValue({ item: data, value: valueTokens })); + }, + [onChange, setValue, data] + ); + if (isLoading) { + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_components43.Spinner, {}); + } + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( + ValidatedFormTokenField, + { + required: !!isValid2?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label: hideLabelFromVision ? void 0 : label, + value: arrayValueAsElements, + onChange: onChangeControl, + placeholder, + suggestions: elements?.map((element) => element.value), + __experimentalValidateInput: (token) => { + if (field.isValid?.elements && elements) { + return elements.some( + (element) => element.value === token || element.label === token + ); + } + return true; + }, + __experimentalExpandOnFocus: elements && elements.length > 0, + __experimentalShowHowTo: !field.isValid?.elements, + displayTransform: (token) => { + if (typeof token === "object" && "label" in token) { + return token.label; + } + if (typeof token === "string" && elements) { + const element = elements.find( + (el) => el.value === token + ); + return element?.label || token; + } + return token; + }, + __experimentalRenderItem: ({ item }) => { + if (typeof item === "string" && elements) { + const element = elements.find( + (el) => el.value === item + ); + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { children: element?.label || item }); + } + return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { children: item }); + } + } + ); +} + +// node_modules/colord/index.mjs +var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; +var t = function(r3) { + return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; +}; +var n = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0; +}; +var e = function(r3, t2, n2) { + return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2; +}; +var u = function(r3) { + return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; +}; +var a = function(r3) { + return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; +}; +var o = function(r3) { + return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; +}; +var i = /^#([0-9a-f]{3,8})$/i; +var s = function(r3) { + var t2 = r3.toString(16); + return t2.length < 2 ? "0" + t2 : t2; +}; +var h = function(r3) { + var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0; + return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; +}; +var b = function(r3) { + var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; + t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100; + var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6; + return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 }; +}; +var g = function(r3) { + return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; +}; +var d = function(r3) { + return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; +}; +var f = function(r3) { + return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a })); + var t2, n2, e2; +}; +var c = function(r3) { + return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a }; + var t2, n2, e2, u2; +}; +var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; +var y = { string: [[function(r3) { + var t2 = i.exec(r3); + return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; +}, "hex"], [function(r3) { + var t2 = v.exec(r3) || m.exec(r3); + return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null; +}, "rgb"], [function(t2) { + var n2 = l.exec(t2) || p.exec(t2); + if (!n2) return null; + var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); + return f(a2); +}, "hsl"]], object: [[function(r3) { + var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2; + return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; +}, "rgb"], [function(r3) { + var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2; + if (!t(n2) || !t(e2) || !t(u2)) return null; + var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) }); + return f(i2); +}, "hsl"], [function(r3) { + var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; + if (!t(n2) || !t(a2) || !t(o2)) return null; + var h2 = (function(r4) { + return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; + })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) }); + return b(h2); +}, "hsv"]] }; +var N = function(r3, t2) { + for (var n2 = 0; n2 < t2.length; n2++) { + var e2 = t2[n2][0](r3); + if (e2) return [e2, t2[n2][1]]; + } + return [null, void 0]; +}; +var x = function(r3) { + return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; +}; +var M = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a }; +}; +var H = function(r3) { + return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; +}; +var $ = function(r3, t2) { + var n2 = c(r3); + return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a }; +}; +var j = (function() { + function r3(r4) { + this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; + } + return r3.prototype.isValid = function() { + return null !== this.parsed; + }, r3.prototype.brightness = function() { + return n(H(this.rgba), 2); + }, r3.prototype.isDark = function() { + return H(this.rgba) < 0.5; + }, r3.prototype.isLight = function() { + return H(this.rgba) >= 0.5; + }, r3.prototype.toHex = function() { + return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2; + var r4, t2, e2, u2, a2, i2; + }, r3.prototype.toRgb = function() { + return o(this.rgba); + }, r3.prototype.toRgbString = function() { + return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsl = function() { + return d(c(this.rgba)); + }, r3.prototype.toHslString = function() { + return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)"; + var r4, t2, n2, e2, u2; + }, r3.prototype.toHsv = function() { + return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; + var r4; + }, r3.prototype.invert = function() { + return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); + var r4; + }, r3.prototype.saturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); + }, r3.prototype.desaturate = function(r4) { + return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); + }, r3.prototype.grayscale = function() { + return w(M(this.rgba, -1)); + }, r3.prototype.lighten = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); + }, r3.prototype.darken = function(r4) { + return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); + }, r3.prototype.rotate = function(r4) { + return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); + }, r3.prototype.alpha = function(r4) { + return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3); + var t2; + }, r3.prototype.hue = function(r4) { + var t2 = c(this.rgba); + return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h); + }, r3.prototype.isEqual = function(r4) { + return this.toHex() === w(r4).toHex(); + }, r3; +})(); +var w = function(r3) { + return r3 instanceof j ? r3 : new j(r3); +}; + +// packages/dataviews/build-module/components/dataform-controls/color.mjs +var import_components44 = __toESM(require_components(), 1); +var import_element53 = __toESM(require_element(), 1); +var import_i18n36 = __toESM(require_i18n(), 1); +var import_jsx_runtime93 = __toESM(require_jsx_runtime(), 1); +var { ValidatedInputControl: ValidatedInputControl3 } = unlock(import_components44.privateApis); +var ColorPickerDropdown = ({ + color, + onColorChange +}) => { + const validColor = color && w(color).isValid() ? color : "#ffffff"; + return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + import_components44.Dropdown, + { + className: "dataviews-controls__color-picker-dropdown", + popoverProps: { resize: false }, + renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + import_components44.Button, + { + onClick: onToggle, + "aria-label": (0, import_i18n36.__)("Open color picker"), + size: "small", + icon: () => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components44.ColorIndicator, { colorValue: validColor }) + } + ), + renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components44.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + import_components44.ColorPicker, + { + color: validColor, + onChange: onColorChange, + enableAlpha: true + } + ) }) + } + ); +}; +function Color({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const { label, placeholder, description, setValue, isValid: isValid2 } = field; + const value = field.getValue({ item: data }) || ""; + const handleColorChange = (0, import_element53.useCallback)( + (newColor) => { + onChange(setValue({ item: data, value: newColor })); + }, + [data, onChange, setValue] + ); + const handleInputChange = (0, import_element53.useCallback)( + (newValue) => { + onChange(setValue({ item: data, value: newValue || "" })); + }, + [data, onChange, setValue] + ); + return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + ValidatedInputControl3, + { + required: !!field.isValid?.required, + markWhenOptional, + customValidity: getCustomValidity(isValid2, validity), + label, + placeholder, + value, + help: description, + onChange: handleInputChange, + hideLabelFromVision, + type: "text", + prefix: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components44.__experimentalInputControlPrefixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)( + ColorPickerDropdown, + { + color: value, + onColorChange: handleColorChange + } + ) }) + } + ); +} + +// packages/dataviews/build-module/components/dataform-controls/password.mjs +var import_components45 = __toESM(require_components(), 1); +var import_element54 = __toESM(require_element(), 1); +var import_i18n37 = __toESM(require_i18n(), 1); +var import_jsx_runtime94 = __toESM(require_jsx_runtime(), 1); +function Password({ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity +}) { + const [isVisible2, setIsVisible] = (0, import_element54.useState)(false); + const toggleVisibility = (0, import_element54.useCallback)(() => { + setIsVisible((prev) => !prev); + }, []); + return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)( + ValidatedText, + { + ...{ + data, + field, + onChange, + hideLabelFromVision, + markWhenOptional, + validity, + type: isVisible2 ? "text" : "password", + suffix: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_components45.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)( + import_components45.Button, + { + icon: isVisible2 ? unseen_default : seen_default, + onClick: toggleVisibility, + size: "small", + label: isVisible2 ? (0, import_i18n37.__)("Hide password") : (0, import_i18n37.__)("Show password") + } + ) }) + } + } + ); +} + +// packages/dataviews/build-module/field-types/utils/has-elements.mjs +function hasElements(field) { + return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function"; +} + +// packages/dataviews/build-module/components/dataform-controls/index.mjs +var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1); +var FORM_CONTROLS = { + adaptiveSelect: AdaptiveSelect, + array: ArrayControl, + checkbox: Checkbox, + color: Color, + combobox: Combobox3, + datetime: DateTime, + date: DateControl, + email: Email, + telephone: Telephone, + url: Url, + integer: Integer, + number: Number2, + password: Password, + radio: Radio, + select: Select, + text: Text, + toggle: Toggle, + textarea: Textarea, + toggleGroup: ToggleGroup +}; +function isEditConfig(value) { + return value && typeof value === "object" && typeof value.control === "string"; +} +function createConfiguredControl(config) { + const { control, ...controlConfig } = config; + const BaseControlType = getControlByType(control); + if (BaseControlType === null) { + return null; + } + return function ConfiguredControl(props) { + return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(BaseControlType, { ...props, config: controlConfig }); + }; +} +function getControl(field, fallback) { + if (typeof field.Edit === "function") { + return field.Edit; + } + if (typeof field.Edit === "string") { + return getControlByType(field.Edit); + } + if (isEditConfig(field.Edit)) { + return createConfiguredControl(field.Edit); + } + if (hasElements(field) && field.type !== "array") { + return getControlByType("adaptiveSelect"); + } + if (fallback === null) { + return null; + } + return getControlByType(fallback); +} +function getControlByType(type) { + if (Object.keys(FORM_CONTROLS).includes(type)) { + return FORM_CONTROLS[type]; + } + return null; +} + +// packages/dataviews/build-module/field-types/utils/get-filter-by.mjs +function getFilterBy(field, defaultOperators, validOperators) { + if (field.filterBy === false) { + return false; + } + const operators = field.filterBy?.operators?.filter( + (op) => validOperators.includes(op) + ) ?? defaultOperators; + if (operators.length === 0) { + return false; + } + return { + isPrimary: !!field.filterBy?.isPrimary, + operators + }; +} +var get_filter_by_default = getFilterBy; + +// packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs +var getValueFromId = (id) => ({ item }) => { + const path = id.split("."); + let value = item; + for (const segment of path) { + if (value.hasOwnProperty(segment)) { + value = value[segment]; + } else { + value = void 0; + } + } + return value; +}; +var get_value_from_id_default = getValueFromId; + +// packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs +var setValueFromId = (id) => ({ value }) => { + const path = id.split("."); + const result = {}; + let current = result; + for (const segment of path.slice(0, -1)) { + current[segment] = {}; + current = current[segment]; + } + current[path.at(-1)] = value; + return result; +}; +var set_value_from_id_default = setValueFromId; + +// packages/dataviews/build-module/field-types/email.mjs +var import_i18n38 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/render-from-elements.mjs +function RenderFromElements({ + item, + field +}) { + const { elements, isLoading } = useElements({ + elements: field.elements, + getElements: field.getElements + }); + const value = field.getValue({ item }); + if (isLoading) { + return value; + } + if (elements.length === 0) { + return value; + } + return elements?.find((element) => element.value === value)?.label || field.getValue({ item }); +} + +// packages/dataviews/build-module/field-types/utils/render-default.mjs +var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1); +function render({ + item, + field +}) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RenderFromElements, { item, field }); + } + return field.getValueFormatted({ item, field }); +} + +// packages/dataviews/build-module/field-types/utils/sort-text.mjs +var sort_text_default = (a2, b2, direction) => { + return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2); +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-required.mjs +function isValidRequired(item, field) { + const value = field.getValue({ item }); + return ![void 0, "", null].includes(value); +} + +// packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs +function isValidMinLength(item, field) { + if (typeof field.isValid.minLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length >= field.isValid.minLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs +function isValidMaxLength(item, field) { + if (typeof field.isValid.maxLength?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return String(value).length <= field.isValid.maxLength.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs +function isValidPattern(item, field) { + if (field.isValid.pattern?.constraint === void 0) { + return true; + } + try { + const regexp = new RegExp(field.isValid.pattern.constraint); + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return regexp.test(String(value)); + } catch { + return false; + } +} + +// packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs +function isValidElements(item, field) { + const elements = field.elements ?? []; + const validValues = elements.map((el) => el.value); + if (validValues.length === 0) { + return true; + } + const value = field.getValue({ item }); + return [].concat(value).every((v2) => validValues.includes(v2)); +} + +// packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs +function getValueFormatted({ + item, + field +}) { + return field.getValue({ item }); +} +var get_value_formatted_default_default = getValueFormatted; + +// packages/dataviews/build-module/field-types/email.mjs +var emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; +function isValidCustom(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !emailRegex.test(value)) { + return (0, import_i18n38.__)("Value must be a valid email address."); + } + return null; +} +var email_default = { + type: "email", + render, + Edit: "email", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements, + custom: isValidCustom + } +}; + +// packages/dataviews/build-module/field-types/integer.mjs +var import_i18n39 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/sort-number.mjs +var sort_number_default = (a2, b2, direction) => { + return direction === "asc" ? a2 - b2 : b2 - a2; +}; + +// packages/dataviews/build-module/field-types/utils/is-valid-min.mjs +function isValidMin(item, field) { + if (typeof field.isValid.min?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) >= field.isValid.min.constraint; +} + +// packages/dataviews/build-module/field-types/utils/is-valid-max.mjs +function isValidMax(item, field) { + if (typeof field.isValid.max?.constraint !== "number") { + return false; + } + const value = field.getValue({ item }); + if ([void 0, "", null].includes(value)) { + return true; + } + return Number(value) <= field.isValid.max.constraint; +} + +// packages/dataviews/build-module/field-types/integer.mjs +var format2 = { + separatorThousand: "," +}; +function getValueFormatted2({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatInteger; + if (field.type !== "integer") { + formatInteger = format2; + } else { + formatInteger = field.format; + } + const { separatorThousand } = formatInteger; + const integerValue = Math.trunc(value); + if (!separatorThousand) { + return String(integerValue); + } + return String(integerValue).replace( + /\B(?=(\d{3})+(?!\d))/g, + separatorThousand + ); +} +function isValidCustom2(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Number.isInteger(value)) { + return (0, import_i18n39.__)("Value must be an integer."); + } + return null; +} +var integer_default = { + type: "integer", + render, + Edit: "integer", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format2, + getValueFormatted: getValueFormatted2, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom2 + } +}; + +// packages/dataviews/build-module/field-types/number.mjs +var import_i18n40 = __toESM(require_i18n(), 1); +var format3 = { + separatorThousand: ",", + separatorDecimal: ".", + decimals: 2 +}; +function getValueFormatted3({ + item, + field +}) { + let value = field.getValue({ item }); + if (value === null || value === void 0) { + return ""; + } + value = Number(value); + if (!Number.isFinite(value)) { + return String(value); + } + let formatNumber; + if (field.type !== "number") { + formatNumber = format3; + } else { + formatNumber = field.format; + } + const { separatorThousand, separatorDecimal, decimals } = formatNumber; + const fixedValue = value.toFixed(decimals); + const [integerPart, decimalPart] = fixedValue.split("."); + const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart; + return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart; +} +function isEmpty2(value) { + return value === "" || value === void 0 || value === null; +} +function isValidCustom3(item, field) { + const value = field.getValue({ item }); + if (!isEmpty2(value) && !Number.isFinite(value)) { + return (0, import_i18n40.__)("Value must be a number."); + } + return null; +} +var number_default = { + type: "number", + render, + Edit: "number", + sort: sort_number_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN + ], + validOperators: [ + // Single-selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_LESS_THAN, + OPERATOR_GREATER_THAN, + OPERATOR_LESS_THAN_OR_EQUAL, + OPERATOR_GREATER_THAN_OR_EQUAL, + OPERATOR_BETWEEN, + // Multiple-selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: format3, + getValueFormatted: getValueFormatted3, + validate: { + required: isValidRequired, + min: isValidMin, + max: isValidMax, + elements: isValidElements, + custom: isValidCustom3 + } +}; + +// packages/dataviews/build-module/field-types/text.mjs +var text_default = { + type: "text", + render, + Edit: "text", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + // Single selection + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/datetime.mjs +var import_date6 = __toESM(require_date(), 1); +var format4 = { + datetime: (0, import_date6.getSettings)().formats.datetime, + weekStartsOn: (0, import_date6.getSettings)().l10n.startOfWeek +}; +function getValueFormatted4({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDatetime; + if (field.type !== "datetime") { + formatDatetime = format4; + } else { + formatDatetime = field.format; + } + return (0, import_date6.dateI18n)(formatDatetime.datetime, (0, import_date6.getDate)(value)); +} +var sort = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var datetime_default = { + type: "datetime", + render, + Edit: "datetime", + sort, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER + ], + format: format4, + getValueFormatted: getValueFormatted4, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/date.mjs +var import_date7 = __toESM(require_date(), 1); +var format5 = { + date: (0, import_date7.getSettings)().formats.date, + weekStartsOn: (0, import_date7.getSettings)().l10n.startOfWeek +}; +function getValueFormatted5({ + item, + field +}) { + const value = field.getValue({ item }); + if (["", void 0, null].includes(value)) { + return ""; + } + let formatDate2; + if (field.type !== "date") { + formatDate2 = format5; + } else { + formatDate2 = field.format; + } + return (0, import_date7.dateI18n)(formatDate2.date, (0, import_date7.getDate)(value)); +} +var sort2 = (a2, b2, direction) => { + const timeA = new Date(a2).getTime(); + const timeB = new Date(b2).getTime(); + return direction === "asc" ? timeA - timeB : timeB - timeA; +}; +var date_default = { + type: "date", + render, + Edit: "date", + sort: sort2, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + validOperators: [ + OPERATOR_ON, + OPERATOR_NOT_ON, + OPERATOR_BEFORE, + OPERATOR_AFTER, + OPERATOR_BEFORE_INC, + OPERATOR_AFTER_INC, + OPERATOR_IN_THE_PAST, + OPERATOR_OVER, + OPERATOR_BETWEEN + ], + format: format5, + getValueFormatted: getValueFormatted5, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/boolean.mjs +var import_i18n41 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs +function isValidRequiredForBool(item, field) { + const value = field.getValue({ item }); + return value === true; +} + +// packages/dataviews/build-module/field-types/boolean.mjs +function getValueFormatted6({ + item, + field +}) { + const value = field.getValue({ item }); + if (value === true) { + return (0, import_i18n41.__)("True"); + } + if (value === false) { + return (0, import_i18n41.__)("False"); + } + return ""; +} +function isValidCustom4(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && ![true, false].includes(value)) { + return (0, import_i18n41.__)("Value must be true, false, or undefined"); + } + return null; +} +var sort3 = (a2, b2, direction) => { + const boolA = Boolean(a2); + const boolB = Boolean(b2); + if (boolA === boolB) { + return 0; + } + if (direction === "asc") { + return boolA ? 1 : -1; + } + return boolA ? -1 : 1; +}; +var boolean_default = { + type: "boolean", + render, + Edit: "checkbox", + sort: sort3, + validate: { + required: isValidRequiredForBool, + elements: isValidElements, + custom: isValidCustom4 + }, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + format: {}, + getValueFormatted: getValueFormatted6 +}; + +// packages/dataviews/build-module/field-types/media.mjs +var media_default = { + type: "media", + render: () => null, + Edit: null, + sort: () => 0, + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: get_value_formatted_default_default, + // cannot validate any constraint, so + // the only available validation for the field author + // would be providing a custom validator. + validate: {} +}; + +// packages/dataviews/build-module/field-types/array.mjs +var import_i18n42 = __toESM(require_i18n(), 1); + +// packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs +function isValidRequiredForArray(item, field) { + const value = field.getValue({ item }); + return Array.isArray(value) && value.length > 0 && value.every( + (element) => ![void 0, "", null].includes(element) + ); +} + +// packages/dataviews/build-module/field-types/array.mjs +function getValueFormatted7({ + item, + field +}) { + const value = field.getValue({ item }); + const arr = Array.isArray(value) ? value : []; + return arr.join(", "); +} +function render2({ item, field }) { + return getValueFormatted7({ item, field }); +} +function isValidCustom5(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !Array.isArray(value)) { + return (0, import_i18n42.__)("Value must be an array."); + } + if (!value.every((v2) => typeof v2 === "string")) { + return (0, import_i18n42.__)("Every value must be a string."); + } + return null; +} +var sort4 = (a2, b2, direction) => { + const arrA = Array.isArray(a2) ? a2 : []; + const arrB = Array.isArray(b2) ? b2 : []; + if (arrA.length !== arrB.length) { + return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length; + } + const joinedA = arrA.join(","); + const joinedB = arrB.join(","); + return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA); +}; +var array_default = { + type: "array", + render: render2, + Edit: "array", + sort: sort4, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: getValueFormatted7, + validate: { + required: isValidRequiredForArray, + elements: isValidElements, + custom: isValidCustom5 + } +}; + +// packages/dataviews/build-module/field-types/password.mjs +function getValueFormatted8({ + item, + field +}) { + return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : ""; +} +var password_default = { + type: "password", + render, + Edit: "password", + sort: () => 0, + // Passwords should not be sortable for security reasons + enableSorting: false, + enableGlobalSearch: false, + defaultOperators: [], + validOperators: [], + format: {}, + getValueFormatted: getValueFormatted8, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/telephone.mjs +var telephone_default = { + type: "telephone", + render, + Edit: "telephone", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/color.mjs +var import_i18n43 = __toESM(require_i18n(), 1); +var import_jsx_runtime97 = __toESM(require_jsx_runtime(), 1); +function render3({ item, field }) { + if (field.hasElements) { + return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(RenderFromElements, { item, field }); + } + const value = get_value_formatted_default_default({ item, field }); + if (!value || !w(value).isValid()) { + return value; + } + return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime97.jsx)( + "div", + { + style: { + width: "16px", + height: "16px", + borderRadius: "50%", + backgroundColor: value, + border: "1px solid #ddd", + flexShrink: 0 + } + } + ), + /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { children: value }) + ] }); +} +function isValidCustom6(item, field) { + const value = field.getValue({ item }); + if (![void 0, "", null].includes(value) && !w(value).isValid()) { + return (0, import_i18n43.__)("Value must be a valid color."); + } + return null; +} +var sort5 = (a2, b2, direction) => { + const colorA = w(a2); + const colorB = w(b2); + if (!colorA.isValid() && !colorB.isValid()) { + return 0; + } + if (!colorA.isValid()) { + return direction === "asc" ? 1 : -1; + } + if (!colorB.isValid()) { + return direction === "asc" ? -1 : 1; + } + const hslA = colorA.toHsl(); + const hslB = colorB.toHsl(); + if (hslA.h !== hslB.h) { + return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h; + } + if (hslA.s !== hslB.s) { + return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s; + } + return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l; +}; +var color_default = { + type: "color", + render: render3, + Edit: "color", + sort: sort5, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_IS_ANY, + OPERATOR_IS_NONE + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements, + custom: isValidCustom6 + } +}; + +// packages/dataviews/build-module/field-types/url.mjs +var url_default = { + type: "url", + render, + Edit: "url", + sort: sort_text_default, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], + validOperators: [ + OPERATOR_IS, + OPERATOR_IS_NOT, + OPERATOR_CONTAINS, + OPERATOR_NOT_CONTAINS, + OPERATOR_STARTS_WITH, + // Multiple selection + OPERATOR_IS_ANY, + OPERATOR_IS_NONE, + OPERATOR_IS_ALL, + OPERATOR_IS_NOT_ALL + ], + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + pattern: isValidPattern, + minLength: isValidMinLength, + maxLength: isValidMaxLength, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/no-type.mjs +var sort6 = (a2, b2, direction) => { + if (typeof a2 === "number" && typeof b2 === "number") { + return sort_number_default(a2, b2, direction); + } + return sort_text_default(a2, b2, direction); +}; +var no_type_default = { + // type: no type for this one + render, + Edit: null, + sort: sort6, + enableSorting: true, + enableGlobalSearch: false, + defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], + validOperators: getAllOperatorNames(), + format: {}, + getValueFormatted: get_value_formatted_default_default, + validate: { + required: isValidRequired, + elements: isValidElements + } +}; + +// packages/dataviews/build-module/field-types/utils/get-is-valid.mjs +function getIsValid(field, fieldType) { + let required; + if (field.isValid?.required === true && fieldType.validate.required !== void 0) { + required = { + constraint: true, + validate: fieldType.validate.required + }; + } + let elements; + if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out + field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) { + elements = { + constraint: true, + validate: fieldType.validate.elements + }; + } + let min; + if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) { + min = { + constraint: field.isValid.min, + validate: fieldType.validate.min + }; + } + let max; + if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) { + max = { + constraint: field.isValid.max, + validate: fieldType.validate.max + }; + } + let minLength; + if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) { + minLength = { + constraint: field.isValid.minLength, + validate: fieldType.validate.minLength + }; + } + let maxLength; + if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) { + maxLength = { + constraint: field.isValid.maxLength, + validate: fieldType.validate.maxLength + }; + } + let pattern; + if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) { + pattern = { + constraint: field.isValid?.pattern, + validate: fieldType.validate.pattern + }; + } + const custom = field.isValid?.custom ?? fieldType.validate.custom; + return { + required, + elements, + min, + max, + minLength, + maxLength, + pattern, + custom + }; +} + +// packages/dataviews/build-module/field-types/utils/get-filter.mjs +function getFilter(fieldType) { + return fieldType.validOperators.reduce((accumulator, operator) => { + const operatorObj = getOperatorByName(operator); + if (operatorObj?.filter) { + accumulator[operator] = operatorObj.filter; + } + return accumulator; + }, {}); +} + +// packages/dataviews/build-module/field-types/utils/get-format.mjs +function getFormat(field, fieldType) { + return { + ...fieldType.format, + ...field.format + }; +} +var get_format_default = getFormat; + +// packages/dataviews/build-module/field-types/index.mjs +function getFieldTypeByName(type) { + const found = [ + email_default, + integer_default, + number_default, + text_default, + datetime_default, + date_default, + boolean_default, + media_default, + array_default, + password_default, + telephone_default, + color_default, + url_default + ].find((fieldType) => fieldType?.type === type); + if (!!found) { + return found; + } + return no_type_default; +} +function normalizeFields(fields) { + return fields.map((field) => { + const fieldType = getFieldTypeByName(field.type); + const getValue = field.getValue || get_value_from_id_default(field.id); + const sort7 = function(a2, b2, direction) { + const aValue = getValue({ item: a2 }); + const bValue = getValue({ item: b2 }); + return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction); + }; + return { + id: field.id, + label: field.label || field.id, + header: field.header || field.label || field.id, + description: field.description, + placeholder: field.placeholder, + getValue, + setValue: field.setValue || set_value_from_id_default(field.id), + elements: field.elements, + getElements: field.getElements, + hasElements: hasElements(field), + isVisible: field.isVisible, + enableHiding: field.enableHiding ?? true, + readOnly: field.readOnly ?? false, + // The type provides defaults for the following props + type: fieldType.type, + render: field.render ?? fieldType.render, + Edit: getControl(field, fieldType.Edit), + sort: sort7, + enableSorting: field.enableSorting ?? fieldType.enableSorting, + enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch, + isValid: getIsValid(field, fieldType), + filterBy: get_filter_by_default( + field, + fieldType.defaultOperators, + fieldType.validOperators + ), + filter: getFilter(fieldType), + format: get_format_default(field, fieldType), + getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted + }; + }); +} + +// packages/dataviews/build-module/hooks/use-data.mjs +var import_element55 = __toESM(require_element(), 1); +function useData(data, isLoading, paginationInfo) { + const previousDataRef = (0, import_element55.useRef)(data); + const previousPaginationInfoRef = (0, import_element55.useRef)(paginationInfo); + const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element55.useState)( + !isLoading + ); + (0, import_element55.useEffect)(() => { + if (!isLoading) { + previousDataRef.current = data; + previousPaginationInfoRef.current = paginationInfo; + setHasInitiallyLoaded(true); + } + }, [data, isLoading, paginationInfo]); + return { + data: isLoading && previousDataRef.current?.length ? previousDataRef.current : data, + paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo, + hasInitiallyLoaded + }; +} + +// packages/dataviews/build-module/dataviews/index.mjs +var import_jsx_runtime98 = __toESM(require_jsx_runtime(), 1); +var defaultGetItemId = (item) => item.id; +var defaultIsItemClickable = () => true; +var EMPTY_ARRAY6 = []; +var dataViewsLayouts = VIEW_LAYOUTS.filter( + (viewLayout) => !viewLayout.isPicker +); +function DefaultUI({ + header, + search = true, + searchLabel = void 0 +}) { + return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment, { children: [ + /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)( + Stack, + { + direction: "row", + align: "top", + justify: "space-between", + className: "dataviews__view-actions", + gap: "xs", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)( + Stack, + { + direction: "row", + justify: "start", + gap: "sm", + className: "dataviews__search", + children: [ + search && /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(dataviews_search_default, { label: searchLabel }), + /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(toggle_default, {}) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: [ + /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(dataviews_view_config_default, {}), + header + ] }) + ] + } + ), + /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }), + /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(DataViewsLayout, {}), + /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(DataViewsFooter, {}) + ] }); +} +function DataViews({ + view, + onChangeView, + fields, + search = true, + searchLabel = void 0, + actions = EMPTY_ARRAY6, + data, + getItemId: getItemId2 = defaultGetItemId, + getItemLevel, + isLoading = false, + paginationInfo, + defaultLayouts: defaultLayoutsProperty, + selection: selectionProperty, + onChangeSelection, + onClickItem, + renderItemLink, + isItemClickable = defaultIsItemClickable, + header, + children, + config = { perPageSizes: [10, 20, 50, 100] }, + empty, + onReset +}) { + const { infiniteScrollHandler } = paginationInfo; + const containerRef = (0, import_element56.useRef)(null); + const [containerWidth, setContainerWidth] = (0, import_element56.useState)(0); + const resizeObserverRef = (0, import_compose12.useResizeObserver)( + (resizeObserverEntries) => { + setContainerWidth( + resizeObserverEntries[0].borderBoxSize[0].inlineSize + ); + }, + { box: "border-box" } + ); + const [selectionState, setSelectionState] = (0, import_element56.useState)([]); + const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0; + const selection = isUncontrolled ? selectionState : selectionProperty; + const [openedFilter, setOpenedFilter] = (0, import_element56.useState)(null); + function setSelectionWithChange(value) { + const newValue = typeof value === "function" ? value(selection) : value; + if (isUncontrolled) { + setSelectionState(newValue); + } + if (onChangeSelection) { + onChangeSelection(newValue); + } + } + const _fields = (0, import_element56.useMemo)(() => normalizeFields(fields), [fields]); + const _selection = (0, import_element56.useMemo)(() => { + return selection.filter( + (id) => data.some((item) => getItemId2(item) === id) + ); + }, [selection, data, getItemId2]); + const filters = use_filters_default(_fields, view); + const hasPrimaryOrLockedFilters = (0, import_element56.useMemo)( + () => (filters || []).some( + (filter) => filter.isPrimary || filter.isLocked + ), + [filters] + ); + const [isShowingFilter, setIsShowingFilter] = (0, import_element56.useState)( + hasPrimaryOrLockedFilters + ); + (0, import_element56.useEffect)(() => { + if (hasPrimaryOrLockedFilters && !isShowingFilter) { + setIsShowingFilter(true); + } + }, [hasPrimaryOrLockedFilters, isShowingFilter]); + (0, import_element56.useEffect)(() => { + if (!view.infiniteScrollEnabled || !containerRef.current) { + return; + } + const handleScroll = (0, import_compose12.throttle)((event) => { + const target = event.target; + const scrollTop = target.scrollTop; + const scrollHeight = target.scrollHeight; + const clientHeight = target.clientHeight; + if (scrollTop + clientHeight >= scrollHeight - 100) { + infiniteScrollHandler?.(); + } + }, 100); + const container = containerRef.current; + container.addEventListener("scroll", handleScroll); + return () => { + container.removeEventListener("scroll", handleScroll); + handleScroll.cancel(); + }; + }, [infiniteScrollHandler, view.infiniteScrollEnabled]); + const defaultLayouts = (0, import_element56.useMemo)( + () => Object.fromEntries( + Object.entries(defaultLayoutsProperty).filter( + ([layoutType]) => { + return dataViewsLayouts.some( + (viewLayout) => viewLayout.type === layoutType + ); + } + ) + ), + [defaultLayoutsProperty] + ); + const { + data: displayData, + paginationInfo: displayPaginationInfo, + hasInitiallyLoaded + } = useData(data, isLoading, paginationInfo); + if (!defaultLayouts[view.type]) { + return null; + } + return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)( + dataviews_context_default.Provider, + { + value: { + view, + onChangeView, + fields: _fields, + actions, + data: displayData, + isLoading, + paginationInfo: displayPaginationInfo, + selection: _selection, + onChangeSelection: setSelectionWithChange, + openedFilter, + setOpenedFilter, + getItemId: getItemId2, + getItemLevel, + isItemClickable, + onClickItem, + renderItemLink, + containerWidth, + containerRef, + resizeObserverRef, + defaultLayouts, + filters, + isShowingFilter, + setIsShowingFilter, + config, + empty, + hasInitiallyLoaded, + hasInfiniteScrollHandler: !!infiniteScrollHandler, + onReset + }, + children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "dataviews-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime98.jsx)( + DefaultUI, + { + header, + search, + searchLabel + } + ) }) + } + ); +} +var DataViewsSubComponents = DataViews; +DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter; +DataViewsSubComponents.Filters = filters_default; +DataViewsSubComponents.FiltersToggled = filters_toggled_default; +DataViewsSubComponents.FiltersToggle = toggle_default; +DataViewsSubComponents.Layout = DataViewsLayout; +DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu; +DataViewsSubComponents.Pagination = DataViewsPagination; +DataViewsSubComponents.Search = dataviews_search_default; +DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown; +DataViewsSubComponents.Footer = DataViewsFooter; +var dataviews_default = DataViewsSubComponents; + +// packages/admin-ui/build-module/navigable-region/index.mjs +var import_element57 = __toESM(require_element(), 1); +var import_jsx_runtime99 = __toESM(require_jsx_runtime(), 1); +var NavigableRegion = (0, import_element57.forwardRef)( + ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { + return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)( + Tag, + { + ref, + className: clsx_default("admin-ui-navigable-region", className), + "aria-label": ariaLabel, + role: "region", + tabIndex: "-1", + ...props, + children + } + ); + } +); +NavigableRegion.displayName = "NavigableRegion"; +var navigable_region_default = NavigableRegion; + +// packages/admin-ui/build-module/page/header.mjs +var import_components47 = __toESM(require_components(), 1); + +// packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs +var import_components46 = __toESM(require_components(), 1); +var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components46.createSlotFill)("SidebarToggle"); + +// packages/admin-ui/build-module/page/header.mjs +var import_jsx_runtime100 = __toESM(require_jsx_runtime(), 1); +function Header({ + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle = true +}) { + return /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)(import_components47.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)(import_components47.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ + /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)(import_components47.__experimentalHStack, { spacing: 2, justify: "left", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_components47.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime100.jsx)( + import_components47.__experimentalHStack, + { + style: { width: "auto", flexShrink: 0 }, + spacing: 2, + className: "admin-ui-page__header-actions", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); +} + +// packages/admin-ui/build-module/page/index.mjs +var import_jsx_runtime101 = __toESM(require_jsx_runtime(), 1); +function Page({ + breadcrumbs, + badges, + title, + subTitle, + children, + className, + actions, + hasPadding = false, + showSidebarToggle = true +}) { + const classes = clsx_default("admin-ui-page", className); + return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( + Header, + { + breadcrumbs, + badges, + title, + subTitle, + actions, + showSidebarToggle + } + ), + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + ] }); +} +Page.SidebarToggleFill = SidebarToggleFill; +var page_default = Page; + +// routes/template-part-list/stage.tsx +var import_core_data3 = __toESM(require_core_data()); +var import_components49 = __toESM(require_components()); +var import_data10 = __toESM(require_data()); +var import_element59 = __toESM(require_element()); +var import_editor = __toESM(require_editor()); + +// node_modules/tslib/tslib.es6.mjs +var __assign = function() { + __assign = Object.assign || function __assign2(t2) { + for (var s2, i2 = 1, n2 = arguments.length; i2 < n2; i2++) { + s2 = arguments[i2]; + for (var p2 in s2) if (Object.prototype.hasOwnProperty.call(s2, p2)) t2[p2] = s2[p2]; + } + return t2; + }; + return __assign.apply(this, arguments); +}; + +// node_modules/lower-case/dist.es2015/index.js +function lowerCase(str) { + return str.toLowerCase(); +} + +// node_modules/no-case/dist.es2015/index.js +var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g]; +var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi; +function noCase(input, options) { + if (options === void 0) { + options = {}; + } + var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d; + var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0"); + var start = 0; + var end = result.length; + while (result.charAt(start) === "\0") + start++; + while (result.charAt(end - 1) === "\0") + end--; + return result.slice(start, end).split("\0").map(transform).join(delimiter); +} +function replace(input, re, value) { + if (re instanceof RegExp) + return input.replace(re, value); + return re.reduce(function(input2, re2) { + return input2.replace(re2, value); + }, input); +} + +// node_modules/dot-case/dist.es2015/index.js +function dotCase(input, options) { + if (options === void 0) { + options = {}; + } + return noCase(input, __assign({ delimiter: "." }, options)); +} + +// node_modules/param-case/dist.es2015/index.js +function paramCase(input, options) { + if (options === void 0) { + options = {}; + } + return dotCase(input, __assign({ delimiter: "-" }, options)); +} + +// packages/fields/build-module/components/create-template-part-modal/index.mjs +var import_components48 = __toESM(require_components(), 1); +var import_compose13 = __toESM(require_compose(), 1); +var import_core_data2 = __toESM(require_core_data(), 1); +var import_data9 = __toESM(require_data(), 1); +var import_element58 = __toESM(require_element(), 1); +var import_i18n44 = __toESM(require_i18n(), 1); +var import_notices = __toESM(require_notices(), 1); +var import_blocks = __toESM(require_blocks(), 1); + +// packages/fields/build-module/components/create-template-part-modal/utils.mjs +var import_data8 = __toESM(require_data(), 1); +var import_core_data = __toESM(require_core_data(), 1); +var useExistingTemplateParts = () => { + return (0, import_data8.useSelect)( + (select2) => select2(import_core_data.store).getEntityRecords( + "postType", + "wp_template_part", + { + per_page: -1 + } + ), + [] + ) ?? []; +}; +var getUniqueTemplatePartTitle = (title, templateParts) => { + const lowercaseTitle = title.toLowerCase(); + const existingTitles = templateParts.map( + (templatePart) => templatePart.title.rendered.toLowerCase() + ); + if (!existingTitles.includes(lowercaseTitle)) { + return title; + } + let suffix = 2; + while (existingTitles.includes(`${lowercaseTitle} ${suffix}`)) { + suffix++; + } + return `${title} ${suffix}`; +}; +var getCleanTemplatePartSlug = (title) => { + return paramCase(title).replace(/[^\w-]+/g, "") || "wp-custom-part"; +}; + +// packages/fields/build-module/components/create-template-part-modal/index.mjs +var import_jsx_runtime102 = __toESM(require_jsx_runtime(), 1); +function getAreaRadioId(value, instanceId) { + return `fields-create-template-part-modal__area-option-${value}-${instanceId}`; +} +function getAreaRadioDescriptionId(value, instanceId) { + return `fields-create-template-part-modal__area-option-description-${value}-${instanceId}`; +} +function CreateTemplatePartModal({ + modalTitle, + ...restProps +}) { + const defaultModalTitle = (0, import_data9.useSelect)( + (select2) => select2(import_core_data2.store).getPostType("wp_template_part")?.labels?.add_new_item, + [] + ); + return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + import_components48.Modal, + { + title: modalTitle || defaultModalTitle, + onRequestClose: restProps.closeModal, + overlayClassName: "fields-create-template-part-modal", + focusOnMount: "firstContentElement", + size: "medium", + children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(CreateTemplatePartModalContents, { ...restProps }) + } + ); +} +var getTemplatePartIcon = (areaOrIconName) => { + if ("header" === areaOrIconName) { + return header_default; + } else if ("footer" === areaOrIconName) { + return footer_default; + } else if ("sidebar" === areaOrIconName) { + return sidebar_default; + } else if ("navigation-overlay" === areaOrIconName) { + return navigation_overlay_default; + } + return symbol_filled_default; +}; +function CreateTemplatePartModalContents({ + defaultArea = "uncategorized", + blocks = [], + confirmLabel = (0, import_i18n44.__)("Add"), + closeModal, + onCreate, + onError, + defaultTitle = "" +}) { + const { createErrorNotice } = (0, import_data9.useDispatch)(import_notices.store); + const { saveEntityRecord } = (0, import_data9.useDispatch)(import_core_data2.store); + const existingTemplateParts = useExistingTemplateParts(); + const [title, setTitle] = (0, import_element58.useState)(defaultTitle); + const [area, setArea] = (0, import_element58.useState)(defaultArea); + const [isSubmitting, setIsSubmitting] = (0, import_element58.useState)(false); + const instanceId = (0, import_compose13.useInstanceId)(CreateTemplatePartModal); + const defaultTemplatePartAreas = (0, import_data9.useSelect)( + (select2) => select2(import_core_data2.store).getCurrentTheme()?.default_template_part_areas, + [] + ); + async function createTemplatePart() { + if (!title || isSubmitting) { + return; + } + try { + setIsSubmitting(true); + const uniqueTitle = getUniqueTemplatePartTitle( + title, + existingTemplateParts + ); + const cleanSlug = getCleanTemplatePartSlug(uniqueTitle); + const templatePart = await saveEntityRecord( + "postType", + "wp_template_part", + { + slug: cleanSlug, + title: uniqueTitle, + content: (0, import_blocks.serialize)(blocks), + area + }, + { throwOnError: true } + ); + await onCreate(templatePart); + } catch (error) { + const errorMessage = error instanceof Error && "code" in error && error.message && error.code !== "unknown_error" ? error.message : (0, import_i18n44.__)( + "An error occurred while creating the template part." + ); + createErrorNotice(errorMessage, { type: "snackbar" }); + onError?.(); + } finally { + setIsSubmitting(false); + } + } + return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + "form", + { + onSubmit: async (event) => { + event.preventDefault(); + await createTemplatePart(); + }, + children: /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(import_components48.__experimentalVStack, { spacing: "4", children: [ + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + import_components48.TextControl, + { + __next40pxDefaultSize: true, + label: (0, import_i18n44.__)("Name"), + value: title, + onChange: setTitle, + required: true + } + ), + /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("fieldset", { className: "fields-create-template-part-modal__area-fieldset", children: [ + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(import_components48.BaseControl.VisualLabel, { as: "legend", children: (0, import_i18n44.__)("Area") }), + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { className: "fields-create-template-part-modal__area-radio-group", children: (defaultTemplatePartAreas ?? []).map( + (item) => { + const icon = getTemplatePartIcon(item.icon); + return /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)( + "div", + { + className: "fields-create-template-part-modal__area-radio-wrapper", + children: [ + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + "input", + { + type: "radio", + id: getAreaRadioId( + item.area, + instanceId + ), + name: `fields-create-template-part-modal__area-${instanceId}`, + value: item.area, + checked: area === item.area, + onChange: () => { + setArea(item.area); + }, + "aria-describedby": getAreaRadioDescriptionId( + item.area, + instanceId + ) + } + ), + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + import_components48.Icon, + { + icon, + className: "fields-create-template-part-modal__area-radio-icon" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + "label", + { + htmlFor: getAreaRadioId( + item.area, + instanceId + ), + className: "fields-create-template-part-modal__area-radio-label", + children: item.label + } + ), + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + import_components48.Icon, + { + icon: check_default, + className: "fields-create-template-part-modal__area-radio-checkmark" + } + ), + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + "p", + { + className: "fields-create-template-part-modal__area-radio-description", + id: getAreaRadioDescriptionId( + item.area, + instanceId + ), + children: item.description + } + ) + ] + }, + item.area + ); + } + ) }) + ] }), + /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(import_components48.__experimentalHStack, { justify: "right", children: [ + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + import_components48.Button, + { + __next40pxDefaultSize: true, + variant: "tertiary", + onClick: () => { + closeModal(); + }, + children: (0, import_i18n44.__)("Cancel") + } + ), + /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( + import_components48.Button, + { + __next40pxDefaultSize: true, + variant: "primary", + type: "submit", + "aria-disabled": !title || isSubmitting, + isBusy: isSubmitting, + children: confirmLabel + } + ) + ] }) + ] }) + } + ); +} + +// routes/lock-unlock.ts +var import_private_apis2 = __toESM(require_private_apis()); +var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", + "@wordpress/routes" +); + +// routes/template-part-list/view-utils.ts +var NAVIGATION_OVERLAY_TEMPLATE_PART_AREA = "navigation-overlay"; +var DEFAULT_VIEW = { + type: "grid", + sort: { + field: "date", + direction: "desc" + }, + fields: [], + titleField: "title", + mediaField: "preview" +}; +var DEFAULT_LAYOUTS = { + table: {}, + grid: {}, + list: {} +}; +var DEFAULT_VIEWS = [ + { + slug: "all", + label: "All Template Parts" + }, + { + slug: "header", + label: "Headers" + }, + { + slug: "footer", + label: "Footers" + }, + { + slug: "sidebar", + label: "Sidebars" + }, + { + slug: NAVIGATION_OVERLAY_TEMPLATE_PART_AREA, + label: "Overlays" + }, + { + slug: "uncategorized", + label: "General" + } +]; +function getActiveViewOverridesForTab(area) { + if (area === "all") { + return {}; + } + return { + filters: [ + { + field: "area", + operator: "is", + value: area + } + ] + }; +} +function viewToQuery(view) { + const result = {}; + if (void 0 !== view.perPage) { + result.per_page = view.perPage; + } + if (void 0 !== view.page) { + result.page = view.page; + } + if (![void 0, ""].includes(view.search)) { + result.search = view.search; + } + if (void 0 !== view.sort?.field) { + result.orderby = view.sort.field; + } + if (void 0 !== view.sort?.direction) { + result.order = view.sort.direction; + } + const areaFilter = view.filters?.find( + (filter) => filter.field === "area" + ); + if (areaFilter) { + result.area = areaFilter.value; + } + return result; +} + +// routes/template-part-list/fields/preview.tsx +var import_i18n45 = __toESM(require_i18n()); +import { Preview } from "@wordpress/lazy-editor"; +function PreviewField({ item }) { + const description = item.description; + return /* @__PURE__ */ React.createElement( + Preview, + { + content: item?.content?.raw, + blocks: item?.blocks, + description + } + ); +} +var previewField = { + label: (0, import_i18n45.__)("Preview"), + id: "preview", + render: PreviewField, + enableSorting: false +}; + +// routes/template-part-list/style.scss +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='c58d328215']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "c58d328215"); + style.appendChild(document.createTextNode(':root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-fieldset{border:0;margin:0;padding:0}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{grid-gap:4px 8px;align-items:center;color:#1e1e1e;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{text-wrap:pretty;color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}fieldset.fields__media-edit{border:0;margin:0;padding:0;width:100%}fieldset.fields__media-edit .components-base-control__label{color:#1e1e1e}fieldset.fields__media-edit{container-type:inline-size}fieldset.fields__media-edit .fields__media-edit-compact-group{border:1px dashed #949494;border-radius:4px;overflow:hidden}fieldset.fields__media-edit .fields__media-edit-compact-group.is-single{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button{border:0;border-radius:0}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-compact:not(:last-child){border-bottom:1px solid #f0f0f0}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-compact{min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-compact:focus-within .fields__media-edit-compact-movers,fieldset.fields__media-edit .fields__media-edit-compact:hover .fields__media-edit-compact-movers{opacity:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers{background:#fff;border-radius:2px;opacity:0;pointer-events:none;position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-picker-button{align-items:center;border:1px dashed #949494;border-radius:2px;cursor:pointer;display:flex;gap:8px;min-height:40px;min-width:0;padding:4px 8px;position:relative}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment){border-color:var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment):hover{background-color:color-mix(in srgb,var(--wp-admin-theme-color,#3858e9) 4%,#0000);border-color:var(--wp-admin-theme-color-darker-20);color:var(--wp-admin-theme-color-darker-20)}fieldset.fields__media-edit .fields__media-edit-picker-button:hover{color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}fieldset.fields__media-edit .fields__media-edit-picker-button[aria-disabled=true]{cursor:default;opacity:.6}fieldset.fields__media-edit .fields__media-edit-picker-button .fields__media-edit-picker-button-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-filename,fieldset.fields__media-edit .fields__media-edit-placeholder{flex:1;min-width:0;width:100%}fieldset.fields__media-edit .fields__media-edit-placeholder{text-align:center}fieldset.fields__media-edit .fields__media-edit-thumbnail{aspect-ratio:1/1;border-radius:2px;flex-shrink:0;width:24px}fieldset.fields__media-edit .fields__media-edit-expanded{display:grid;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview{align-items:center;aspect-ratio:3/2;border-radius:2px;display:flex;justify-content:center;overflow:hidden;padding:4px;position:relative;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview .fields__media-edit-expanded-preview-stack{height:100%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-actions{background:#fff;border-radius:2px;position:absolute;right:4px;top:4px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item{border-radius:4px;min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:focus-within .fields__media-edit-expanded-overlay,fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:hover .fields__media-edit-expanded-overlay{opacity:1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:not(.has-preview-image) .fields__media-edit-expanded-preview-stack{padding:8px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-thumbnail{height:100%;object-fit:cover;object-position:50% 50%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-filename{flex:none;text-align:center}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button-spinner svg{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded.is-single{grid-template-columns:1fr}fieldset.fields__media-edit .fields__media-edit-expanded.is-single .fields__media-edit-expanded-preview{aspect-ratio:2/1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button{border-radius:4px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .fields__media-edit-picker-button{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(3,1fr)}@container (max-width: 768px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(2,1fr)}}@container (max-width: 280px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:1fr}}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-picker-button{padding:0}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-placeholder{align-items:center;aspect-ratio:3/2;display:flex;justify-content:center}.fields-controls__slug{border:0;margin:0;padding:0}.fields-controls__slug .fields-controls__slug-external-icon{margin-left:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-image,.fields-controls__featured-image-placeholder{border-radius:4px;display:block;height:100%;width:100%}.fields-controls__featured-image-placeholder{background:#f0f0f0;box-shadow:none}.fields-controls__parent,.fields-controls__password{border:0;margin:0;padding:0}.fields-field__title>span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.routes-template-part-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}')); + document.head.appendChild(style); +} + +// routes/template-part-list/stage.tsx +var { useEntityRecordsWithPermissions } = unlock2(import_core_data3.privateApis); +var { usePostActions, usePostFields } = unlock2(import_editor.privateApis); +var { Tabs } = unlock2(import_components49.privateApis); +function getItemId(item) { + return item.id.toString(); +} +function TemplatePartList() { + const invalidate = useInvalidate(); + const { area = "all" } = useParams({ + from: "/template-parts/list/$area" + }); + const navigate = useNavigate(); + const searchParams = useSearch({ from: "/template-parts/list/$area" }); + const postTypeObject = (0, import_data10.useSelect)( + (select2) => select2(import_core_data3.store).getPostType("wp_template_part"), + [] + ); + const labels = postTypeObject?.labels; + const canCreateRecord = (0, import_data10.useSelect)( + (select2) => select2(import_core_data3.store).canUser("create", { + kind: "postType", + name: "wp_template_part" + }), + [] + ); + const [showTemplatePartModal, setShowTemplatePartModal] = (0, import_element59.useState)(false); + const defaultView = DEFAULT_VIEW; + const activeViewOverrides = (0, import_element59.useMemo)( + () => getActiveViewOverridesForTab(area), + [area] + ); + const handleQueryParamsChange = (0, import_element59.useCallback)( + (params) => { + navigate({ + search: { + ...searchParams, + ...params + } + }); + }, + [searchParams, navigate] + ); + const { view, isModified, updateView, resetToDefault } = useView({ + kind: "postType", + name: "wp_template_part", + slug: "default-new", + defaultView, + activeViewOverrides, + queryParams: searchParams, + onChangeQueryParams: handleQueryParamsChange + }); + const onReset = () => { + resetToDefault(); + invalidate(); + }; + const onChangeView = (newView) => { + updateView(newView); + if (newView.type !== view.type) { + invalidate(); + } + }; + const postTypeQuery = (0, import_element59.useMemo)(() => viewToQuery(view), [view]); + const { + records: posts, + totalItems, + totalPages, + isResolving + } = useEntityRecordsWithPermissions( + "postType", + "wp_template_part", + postTypeQuery + ); + const allFields = usePostFields({ + postType: "wp_template_part" + }); + const fields = (0, import_element59.useMemo)(() => { + return [previewField].concat( + allFields.filter((field) => { + if (field.id === "area" && area !== "all") { + return false; + } + if (field.id === "status") { + return false; + } + return true; + }).map((field) => { + if (field.id === "area") { + return { ...field, filterBy: false }; + } + return field; + }) + ); + }, [allFields, area]); + const cleanupDeletedPostIdsFromUrl = (0, import_element59.useCallback)( + (deletedItems) => { + const deletedIds = deletedItems.map( + (item) => item.id.toString() + ); + const currentPostIds = searchParams.postIds || []; + const remainingPostIds = currentPostIds.filter( + (id) => !deletedIds.includes(id) + ); + if (remainingPostIds.length !== currentPostIds.length) { + navigate({ + search: { + ...searchParams, + postIds: remainingPostIds.length > 0 ? remainingPostIds : void 0 + } + }); + } else { + invalidate(); + } + }, + [invalidate, searchParams, navigate] + ); + const postTypeActions = usePostActions({ + postType: "wp_template_part", + context: "list", + onActionPerformed: (actionId, items) => { + if (actionId === "move-to-trash" || actionId === "permanently-delete") { + cleanupDeletedPostIdsFromUrl(items); + } + } + }); + const actions = (0, import_element59.useMemo)(() => { + return [ + ...postTypeActions?.flatMap( + (action) => { + if (action.id === "view-post-revisions") { + return []; + } + return [action]; + } + ) + ]; + }, [postTypeActions]); + const handleTabChange = (0, import_element59.useCallback)( + (areaSlug) => { + navigate({ + to: `/template-parts/list/${areaSlug}` + }); + }, + [navigate] + ); + if (!postTypeObject) { + return null; + } + const selection = searchParams.postIds ?? []; + if (view.type === "list" && selection.length === 0 && posts?.length > 0) { + selection.push(posts[0].id.toString()); + } + if (view.type === "list") { + selection.splice(1); + } + return /* @__PURE__ */ React.createElement( + page_default, + { + title: postTypeObject.labels?.name, + subTitle: postTypeObject.labels?.description, + className: "template-part-page", + actions: labels?.add_new_item && canCreateRecord && /* @__PURE__ */ React.createElement( + import_components49.Button, + { + variant: "primary", + onClick: () => setShowTemplatePartModal(true), + size: "compact" + }, + labels.add_new_item + ), + hasPadding: false + }, + DEFAULT_VIEWS.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "routes-template-part-list__tabs-wrapper" }, /* @__PURE__ */ React.createElement( + Tabs, + { + onSelect: handleTabChange, + selectedTabId: area ?? "all" + }, + /* @__PURE__ */ React.createElement(Tabs.TabList, null, DEFAULT_VIEWS.map( + (filter) => /* @__PURE__ */ React.createElement( + Tabs.Tab, + { + tabId: filter.slug, + key: filter.slug + }, + filter.label + ) + )) + )), + /* @__PURE__ */ React.createElement( + dataviews_default, + { + data: posts, + fields, + view, + onChangeView, + actions, + isLoading: isResolving, + paginationInfo: { + totalItems, + totalPages + }, + defaultLayouts: DEFAULT_LAYOUTS, + getItemId, + selection, + onReset: isModified ? onReset : false, + onChangeSelection: (items) => { + navigate({ + search: { + ...searchParams, + postIds: items.length > 0 ? items : void 0, + edit: items.length === 0 ? void 0 : searchParams.edit + } + }); + }, + renderItemLink: ({ + item, + ...props + }) => /* @__PURE__ */ React.createElement( + Link, + { + to: `/types/wp_template_part/edit/${encodeURIComponent( + item.id + )}`, + ...props, + onClick: (event) => { + event.stopPropagation(); + } + } + ) + } + ), + showTemplatePartModal && /* @__PURE__ */ React.createElement( + CreateTemplatePartModal, + { + closeModal: () => setShowTemplatePartModal(false), + blocks: [], + onCreate: (templatePart) => { + setShowTemplatePartModal(false); + navigate({ + to: `/types/wp_template_part/edit/${encodeURIComponent( + templatePart.id + )}` + }); + }, + onError: () => setShowTemplatePartModal(false), + defaultArea: area !== "all" ? area : "uncategorized" + } + ) + ); +} +var stage = TemplatePartList; +export { + stage +}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.development.js: + (** + * @license React + * use-sync-external-store-shim.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/template-part-list/content.min.asset.php b/src/wp-includes/build/routes/template-part-list/content.min.asset.php new file mode 100644 index 0000000000000..cfa41d70c78eb --- /dev/null +++ b/src/wp-includes/build/routes/template-part-list/content.min.asset.php @@ -0,0 +1 @@ + array('react', 'react-dom', 'react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-url', 'wp-warning'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/lazy-editor', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '3bad6904d103ece172b4'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/template-part-list/content.min.js b/src/wp-includes/build/routes/template-part-list/content.min.js new file mode 100644 index 0000000000000..de5b7d76bf425 --- /dev/null +++ b/src/wp-includes/build/routes/template-part-list/content.min.js @@ -0,0 +1,14 @@ +var eb=Object.create;var kc=Object.defineProperty;var tb=Object.getOwnPropertyDescriptor;var rb=Object.getOwnPropertyNames;var ob=Object.getPrototypeOf,nb=Object.prototype.hasOwnProperty;var Ae=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var ib=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of rb(e))!nb.call(t,n)&&n!==r&&kc(t,n,{get:()=>e[n],enumerable:!(o=tb(e,n))||o.enumerable});return t};var c=(t,e,r)=>(r=t!=null?eb(ob(t)):{},ib(e||!t||!t.__esModule?kc(r,"default",{value:t,enumerable:!0}):r,t));var H=Ae((Ty,Mc)=>{Mc.exports=window.wp.element});var Wt=Ae((Ay,Fc)=>{Fc.exports=window.wp.data});var Hs=Ae((Oy,Lc)=>{Lc.exports=window.wp.preferences});var _t=Ae((zy,jc)=>{jc.exports=window.wp.compose});var le=Ae((Wy,Hc)=>{Hc.exports=window.React});var R=Ae((qy,Gc)=>{Gc.exports=window.ReactJSXRuntime});var nd=Ae((h1,od)=>{od.exports=window.ReactDOM});var ad=Ae(id=>{"use strict";var jo=le();function yb(t,e){return t===e&&(t!==0||1/t===1/e)||t!==t&&e!==e}var Sb=typeof Object.is=="function"?Object.is:yb,Cb=jo.useState,Eb=jo.useEffect,Pb=jo.useLayoutEffect,Tb=jo.useDebugValue;function Ab(t,e){var r=e(),o=Cb({inst:{value:r,getSnapshot:e}}),n=o[0].inst,i=o[1];return Pb(function(){n.value=r,n.getSnapshot=e,Js(n)&&i({inst:n})},[t,r,e]),Eb(function(){return Js(n)&&i({inst:n}),t(function(){Js(n)&&i({inst:n})})},[t]),Tb(r),r}function Js(t){var e=t.getSnapshot;t=t.value;try{var r=e();return!Sb(t,r)}catch{return!0}}function Ob(t,e){return e()}var Ib=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Ob:Ab;id.useSyncExternalStore=jo.useSyncExternalStore!==void 0?jo.useSyncExternalStore:Ib});var ld=Ae((x1,sd)=>{"use strict";sd.exports=ad()});var U=Ae((S1,dd)=>{dd.exports=window.wp.i18n});var ue=Ae((C1,fd)=>{fd.exports=window.wp.primitives});var Ul=Ae((AS,md)=>{md.exports=window.wp.privateApis});var q=Ae((FS,yd)=>{yd.exports=window.wp.components});var Kl=Ae((LS,Sd)=>{Sd.exports=window.wp.keycodes});var ap=Ae((aI,Ha)=>{var op={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u1EA4:"A",\u1EAE:"A",\u1EB2:"A",\u1EB4:"A",\u1EB6:"A",\u00C6:"AE",\u1EA6:"A",\u1EB0:"A",\u0202:"A",\u1EA2:"A",\u1EA0:"A",\u1EA8:"A",\u1EAA:"A",\u1EAC:"A",\u00C7:"C",\u1E08:"C",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u1EBE:"E",\u1E16:"E",\u1EC0:"E",\u1E14:"E",\u1E1C:"E",\u0206:"E",\u1EBA:"E",\u1EBC:"E",\u1EB8:"E",\u1EC2:"E",\u1EC4:"E",\u1EC6:"E",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u1E2E:"I",\u020A:"I",\u1EC8:"I",\u1ECA:"I",\u00D0:"D",\u00D1:"N",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u1ED0:"O",\u1E4C:"O",\u1E52:"O",\u020E:"O",\u1ECE:"O",\u1ECC:"O",\u1ED4:"O",\u1ED6:"O",\u1ED8:"O",\u1EDC:"O",\u1EDE:"O",\u1EE0:"O",\u1EDA:"O",\u1EE2:"O",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u1EE6:"U",\u1EE4:"U",\u1EEC:"U",\u1EEE:"U",\u1EF0:"U",\u00DD:"Y",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u1EA5:"a",\u1EAF:"a",\u1EB3:"a",\u1EB5:"a",\u1EB7:"a",\u00E6:"ae",\u1EA7:"a",\u1EB1:"a",\u0203:"a",\u1EA3:"a",\u1EA1:"a",\u1EA9:"a",\u1EAB:"a",\u1EAD:"a",\u00E7:"c",\u1E09:"c",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u1EBF:"e",\u1E17:"e",\u1EC1:"e",\u1E15:"e",\u1E1D:"e",\u0207:"e",\u1EBB:"e",\u1EBD:"e",\u1EB9:"e",\u1EC3:"e",\u1EC5:"e",\u1EC7:"e",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u1E2F:"i",\u020B:"i",\u1EC9:"i",\u1ECB:"i",\u00F0:"d",\u00F1:"n",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u1ED1:"o",\u1E4D:"o",\u1E53:"o",\u020F:"o",\u1ECF:"o",\u1ECD:"o",\u1ED5:"o",\u1ED7:"o",\u1ED9:"o",\u1EDD:"o",\u1EDF:"o",\u1EE1:"o",\u1EDB:"o",\u1EE3:"o",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u1EE7:"u",\u1EE5:"u",\u1EED:"u",\u1EEF:"u",\u1EF1:"u",\u00FD:"y",\u00FF:"y",\u0100:"A",\u0101:"a",\u0102:"A",\u0103:"a",\u0104:"A",\u0105:"a",\u0106:"C",\u0107:"c",\u0108:"C",\u0109:"c",\u010A:"C",\u010B:"c",\u010C:"C",\u010D:"c",C\u0306:"C",c\u0306:"c",\u010E:"D",\u010F:"d",\u0110:"D",\u0111:"d",\u0112:"E",\u0113:"e",\u0114:"E",\u0115:"e",\u0116:"E",\u0117:"e",\u0118:"E",\u0119:"e",\u011A:"E",\u011B:"e",\u011C:"G",\u01F4:"G",\u011D:"g",\u01F5:"g",\u011E:"G",\u011F:"g",\u0120:"G",\u0121:"g",\u0122:"G",\u0123:"g",\u0124:"H",\u0125:"h",\u0126:"H",\u0127:"h",\u1E2A:"H",\u1E2B:"h",\u0128:"I",\u0129:"i",\u012A:"I",\u012B:"i",\u012C:"I",\u012D:"i",\u012E:"I",\u012F:"i",\u0130:"I",\u0131:"i",\u0132:"IJ",\u0133:"ij",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u1E30:"K",\u1E31:"k",K\u0306:"K",k\u0306:"k",\u0139:"L",\u013A:"l",\u013B:"L",\u013C:"l",\u013D:"L",\u013E:"l",\u013F:"L",\u0140:"l",\u0141:"l",\u0142:"l",\u1E3E:"M",\u1E3F:"m",M\u0306:"M",m\u0306:"m",\u0143:"N",\u0144:"n",\u0145:"N",\u0146:"n",\u0147:"N",\u0148:"n",\u0149:"n",N\u0306:"N",n\u0306:"n",\u014C:"O",\u014D:"o",\u014E:"O",\u014F:"o",\u0150:"O",\u0151:"o",\u0152:"OE",\u0153:"oe",P\u0306:"P",p\u0306:"p",\u0154:"R",\u0155:"r",\u0156:"R",\u0157:"r",\u0158:"R",\u0159:"r",R\u0306:"R",r\u0306:"r",\u0212:"R",\u0213:"r",\u015A:"S",\u015B:"s",\u015C:"S",\u015D:"s",\u015E:"S",\u0218:"S",\u0219:"s",\u015F:"s",\u0160:"S",\u0161:"s",\u0162:"T",\u0163:"t",\u021B:"t",\u021A:"T",\u0164:"T",\u0165:"t",\u0166:"T",\u0167:"t",T\u0306:"T",t\u0306:"t",\u0168:"U",\u0169:"u",\u016A:"U",\u016B:"u",\u016C:"U",\u016D:"u",\u016E:"U",\u016F:"u",\u0170:"U",\u0171:"u",\u0172:"U",\u0173:"u",\u0216:"U",\u0217:"u",V\u0306:"V",v\u0306:"v",\u0174:"W",\u0175:"w",\u1E82:"W",\u1E83:"w",X\u0306:"X",x\u0306:"x",\u0176:"Y",\u0177:"y",\u0178:"Y",Y\u0306:"Y",y\u0306:"y",\u0179:"Z",\u017A:"z",\u017B:"Z",\u017C:"z",\u017D:"Z",\u017E:"z",\u017F:"s",\u0192:"f",\u01A0:"O",\u01A1:"o",\u01AF:"U",\u01B0:"u",\u01CD:"A",\u01CE:"a",\u01CF:"I",\u01D0:"i",\u01D1:"O",\u01D2:"o",\u01D3:"U",\u01D4:"u",\u01D5:"U",\u01D6:"u",\u01D7:"U",\u01D8:"u",\u01D9:"U",\u01DA:"u",\u01DB:"U",\u01DC:"u",\u1EE8:"U",\u1EE9:"u",\u1E78:"U",\u1E79:"u",\u01FA:"A",\u01FB:"a",\u01FC:"AE",\u01FD:"ae",\u01FE:"O",\u01FF:"o",\u00DE:"TH",\u00FE:"th",\u1E54:"P",\u1E55:"p",\u1E64:"S",\u1E65:"s",X\u0301:"X",x\u0301:"x",\u0403:"\u0413",\u0453:"\u0433",\u040C:"\u041A",\u045C:"\u043A",A\u030B:"A",a\u030B:"a",E\u030B:"E",e\u030B:"e",I\u030B:"I",i\u030B:"i",\u01F8:"N",\u01F9:"n",\u1ED2:"O",\u1ED3:"o",\u1E50:"O",\u1E51:"o",\u1EEA:"U",\u1EEB:"u",\u1E80:"W",\u1E81:"w",\u1EF2:"Y",\u1EF3:"y",\u0200:"A",\u0201:"a",\u0204:"E",\u0205:"e",\u0208:"I",\u0209:"i",\u020C:"O",\u020D:"o",\u0210:"R",\u0211:"r",\u0214:"U",\u0215:"u",B\u030C:"B",b\u030C:"b",\u010C\u0323:"C",\u010D\u0323:"c",\u00CA\u030C:"E",\u00EA\u030C:"e",F\u030C:"F",f\u030C:"f",\u01E6:"G",\u01E7:"g",\u021E:"H",\u021F:"h",J\u030C:"J",\u01F0:"j",\u01E8:"K",\u01E9:"k",M\u030C:"M",m\u030C:"m",P\u030C:"P",p\u030C:"p",Q\u030C:"Q",q\u030C:"q",\u0158\u0329:"R",\u0159\u0329:"r",\u1E66:"S",\u1E67:"s",V\u030C:"V",v\u030C:"v",W\u030C:"W",w\u030C:"w",X\u030C:"X",x\u030C:"x",Y\u030C:"Y",y\u030C:"y",A\u0327:"A",a\u0327:"a",B\u0327:"B",b\u0327:"b",\u1E10:"D",\u1E11:"d",\u0228:"E",\u0229:"e",\u0190\u0327:"E",\u025B\u0327:"e",\u1E28:"H",\u1E29:"h",I\u0327:"I",i\u0327:"i",\u0197\u0327:"I",\u0268\u0327:"i",M\u0327:"M",m\u0327:"m",O\u0327:"O",o\u0327:"o",Q\u0327:"Q",q\u0327:"q",U\u0327:"U",u\u0327:"u",X\u0327:"X",x\u0327:"x",Z\u0327:"Z",z\u0327:"z",\u0439:"\u0438",\u0419:"\u0418",\u0451:"\u0435",\u0401:"\u0415"},np=Object.keys(op).join("|"),Dx=new RegExp(np,"g"),Nx=new RegExp(np,"");function Mx(t){return op[t]}var ip=function(t){return t.replace(Dx,Mx)},Fx=function(t){return!!t.match(Nx)};Ha.exports=ip;Ha.exports.has=Fx;Ha.exports.remove=ip});var hp=Ae((pI,gp)=>{"use strict";gp.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var o,n,i;if(Array.isArray(e)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(!t(e[n],r[n]))return!1;return!0}if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;for(n of e.entries())if(!t(n[1],r.get(n[0])))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(n of e.entries())if(!r.has(n[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if(o=e.length,o!=r.length)return!1;for(n=o;n--!==0;)if(e[n]!==r[n])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(i=Object.keys(e),o=i.length,o!==Object.keys(r).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=o;n--!==0;){var a=i[n];if(!t(e[a],r[a]))return!1}return!0}return e!==e&&r!==r}});var Do=Ae((DV,Zp)=>{Zp.exports=window.wp.date});var yv=Ae((Ok,_v)=>{_v.exports=window.wp.warning});var Ds=Ae((JM,xh)=>{xh.exports=window.wp.coreData});var _h=Ae((eF,wh)=>{wh.exports=window.wp.editor});var Sh=Ae((tF,yh)=>{yh.exports=window.wp.notices});var Eh=Ae((rF,Ch)=>{Ch.exports=window.wp.blocks});import{useParams as py,useNavigate as vy,useSearch as gy,Link as hy,useInvalidate as by}from"@wordpress/route";var Dc=Object.prototype.hasOwnProperty;function Nc(t,e,r){for(r of t.keys())if(Fr(r,e))return r}function Fr(t,e){var r,o,n;if(t===e)return!0;if(t&&e&&(r=t.constructor)===e.constructor){if(r===Date)return t.getTime()===e.getTime();if(r===RegExp)return t.toString()===e.toString();if(r===Array){if((o=t.length)===e.length)for(;o--&&Fr(t[o],e[o]););return o===-1}if(r===Set){if(t.size!==e.size)return!1;for(o of t)if(n=o,n&&typeof n=="object"&&(n=Nc(e,n),!n)||!e.has(n))return!1;return!0}if(r===Map){if(t.size!==e.size)return!1;for(o of t)if(n=o[0],n&&typeof n=="object"&&(n=Nc(e,n),!n)||!Fr(o[1],e.get(n)))return!1;return!0}if(r===ArrayBuffer)t=new Uint8Array(t),e=new Uint8Array(e);else if(r===DataView){if((o=t.byteLength)===e.byteLength)for(;o--&&t.getInt8(o)===e.getInt8(o););return o===-1}if(ArrayBuffer.isView(t)){if((o=t.byteLength)===e.byteLength)for(;o--&&t[o]===e[o];);return o===-1}if(!r||typeof t=="object"){o=0;for(r in t)if(Dc.call(t,r)&&++o&&!Dc.call(e,r)||!(r in e)||!Fr(t[r],e[r]))return!1;return Object.keys(e).length===o}}return t!==t&&e!==e}var Tn=c(H(),1),bi=c(Wt(),1),Gs=c(Hs(),1);function zs(t,e,r){return`dataviews-${t}-${e}-${r}`}var Bc=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function Ws(t,e,r){if(!e)return t;let o=t;for(let n of Bc)n in e&&(o={...o,[n]:e[n]});if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(a=>a.field)),i=(t.filters??[]).filter(a=>!n.has(a.field));o={...o,filters:[...i,...e.filters]}}return e.sort&&r&&t.sort?.field===r.sort?.field&&t.sort?.direction===r.sort?.direction&&(o={...o,sort:e.sort}),e.layout&&(o={...o,layout:{...o.layout,...e.layout}}),e.groupBy&&(o={...o,groupBy:e.groupBy}),o}function hi(t,e,r){if(!e)return t;let o=t;for(let n of Bc)if(n in e){let{[n]:i,...a}=o;o=a}if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(i=>i.field));o={...o,filters:(t.filters??[]).filter(i=>!n.has(i.field))}}if(e.sort&&t.sort?.field===e.sort.field&&t.sort?.direction===e.sort.direction&&(o={...o,sort:r?.sort}),e.layout&&"layout"in o&&o.layout){let n={...o.layout};for(let i of Object.keys(e.layout))delete n[i];o={...o,layout:Object.keys(n).length>0?n:void 0}}if(e.groupBy&&"groupBy"in o){let{groupBy:n,...i}=o;o=i}return o}function ab(t,e){let r={...t};for(let o of e)delete r[o];return r}function qs(t){let{kind:e,name:r,slug:o,defaultView:n,activeViewOverrides:i,queryParams:a,onChangeQueryParams:l}=t,s=zs(e,r,o),u=(0,bi.useSelect)(y=>y(Gs.store).get("core/views",s),[s]),{set:d}=(0,bi.useDispatch)(Gs.store),p=u??n,f=Number(a?.page??p.page??1),m=a?.search??p.search??"",v=(0,Tn.useMemo)(()=>Ws({...p,page:f,search:m},i,n),[p,f,m,i,n]),_=!!u,h=(0,Tn.useCallback)(y=>{let S={page:y?.page,search:y?.search},V=hi(ab(y,["page","search"]),i,n);l&&!Fr(S,{page:f,search:m})&&l(S);let O=hi(p,i,n),N=hi(n,i,n);Fr(O,V)||(Fr(V,N)?d("core/views",s,void 0):d("core/views",s,V))},[l,f,m,p,n,i,d,s]),x=(0,Tn.useCallback)(()=>{d("core/views",s,void 0)},[s,d]);return{view:v,isModified:_,updateView:h,resetToDefault:x}}var sb=c(Wt(),1),lb=c(Hs(),1);var wt=c(H(),1),ks=c(_t(),1);var Wc=c(le(),1),zc={};function Ys(t,e){let r=Wc.useRef(zc);return r.current===zc&&(r.current=t(e)),r}function Us(t,...e){let r=new URL(`https://base-ui.com/production-error/${t}`);return e.forEach(o=>r.searchParams.append("args[]",o)),`Base UI error #${t}; visit ${r} for the full message.`}var wi=c(le(),1);function $s(t,e,r,o){let n=Ys(Yc).current;return cb(n,t,e,r,o)&&Uc(n,[t,e,r,o]),n.callback}function qc(t){let e=Ys(Yc).current;return db(e,t)&&Uc(e,t),e.callback}function Yc(){return{callback:null,cleanup:null,refs:[]}}function cb(t,e,r,o,n){return t.refs[0]!==e||t.refs[1]!==r||t.refs[2]!==o||t.refs[3]!==n}function db(t,e){return t.refs.length!==e.length||t.refs.some((r,o)=>r!==e[o])}function Uc(t,e){if(t.refs=e,e.every(r=>r==null)){t.callback=null;return}t.callback=r=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),r!=null){let o=Array(e.length).fill(null);for(let n=0;n{for(let n=0;n=t}function Ks(t){if(!Zc.isValidElement(t))return null;let e=t,r=e.props;return(Kc(19)?r?.ref:e.ref)??null}function An(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Xc(t,e){let r={};for(let o in t){let n=t[o];if(e?.hasOwnProperty(o)){let i=e[o](n);i!=null&&Object.assign(r,i);continue}n===!0?r[`data-${o.toLowerCase()}`]="":n&&(r[`data-${o.toLowerCase()}`]=n.toString())}return r}function Qc(t,e){return typeof t=="function"?t(e):t}function Jc(t,e){return typeof t=="function"?t(e):t}var In={};function xi(t,e,r,o,n){let i={...Zs(t,In)};return e&&(i=On(i,e)),r&&(i=On(i,r)),o&&(i=On(i,o)),n&&(i=On(i,n)),i}function ed(t){if(t.length===0)return In;if(t.length===1)return Zs(t[0],In);let e={...Zs(t[0],In)};for(let r=1;r=65&&n<=90&&(typeof e=="function"||typeof e>"u")}function td(t){return typeof t=="function"}function Zs(t,e){return td(t)?t(e):t??In}function vb(t,e){return e?t?r=>{if(hb(r)){let n=r;gb(n);let i=e(n);return n.baseUIHandlerPrevented||t?.(n),i}let o=e(r);return t?.(r),o}:e:t}function gb(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Xs(t,e){return e?t?e+" "+t:e:t}function hb(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}var bb=Object.freeze([]),Lr=Object.freeze({});var Qs=c(le(),1);function rd(t,e,r={}){let o=e.render,n=xb(e,r);if(r.enabled===!1)return null;let i=r.state??Lr;return wb(t,o,n,i)}function xb(t,e={}){let{className:r,style:o,render:n}=t,{state:i=Lr,ref:a,props:l,stateAttributesMapping:s,enabled:u=!0}=e,d=u?Qc(r,i):void 0,p=u?Jc(o,i):void 0,f=u?Xc(i,s):Lr,m=u?An(f,Array.isArray(l)?ed(l):l)??Lr:Lr;return typeof document<"u"&&(u?Array.isArray(a)?m.ref=qc([m.ref,Ks(n),...a]):m.ref=$s(m.ref,Ks(n),a):$s(null,null)),u?(d!==void 0&&(m.className=Xs(m.className,d)),p!==void 0&&(m.style=An(m.style,p)),m):Lr}function wb(t,e,r,o){if(e){if(typeof e=="function")return e(r,o);let n=xi(r,e.props);return n.ref=r.ref,wi.cloneElement(e,n)}if(t&&typeof t=="string")return _b(t,r);throw new Error(Us(8))}function _b(t,e){return t==="button"?(0,Qs.createElement)("button",{type:"button",...e,key:e.key}):t==="img"?(0,Qs.createElement)("img",{alt:"",...e,key:e.key}):wi.createElement(t,e)}function ud(t){return rd(t.defaultTagName??"div",t,t)}function cd(t){var e,r,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e{},fields:[],data:[],paginationInfo:{totalItems:0,totalPages:0},selection:[],onChangeSelection:()=>{},setOpenedFilter:()=>{},openedFilter:null,getItemId:t=>t.id,isItemClickable:()=>!0,renderItemLink:void 0,containerWidth:0,containerRef:(0,oa.createRef)(),resizeObserverRef:()=>{},defaultLayouts:{list:{},grid:{},table:{}},filters:[],isShowingFilter:!1,setIsShowingFilter:()=>{},hasInitiallyLoaded:!1,hasInfiniteScrollHandler:!1,config:{perPageSizes:[]}});_d.displayName="DataViewsContext";var G=_d;var yr=c(U(),1);var xo=c(U(),1),da=c(q(),1),St=c(H(),1),tu=c(Kl(),1);var Cd=c(q(),1),Ed=c(U(),1),Pd=c(R(),1);function Kr({selection:t,onChangeSelection:e,item:r,getItemId:o,titleField:n,disabled:i,...a}){let l=o(r),s=!i&&t.includes(l),u=n?.getValue?.({item:r})||(0,Ed.__)("(no title)");return(0,Pd.jsx)(Cd.CheckboxControl,{className:"dataviews-selection-checkbox","aria-label":u,"aria-disabled":i,checked:s,onChange:()=>{i||e(t.includes(l)?t.filter(d=>l!==d):[...t,l])},...a})}var ho=c(q(),1),Od=c(U(),1),Wo=c(H(),1);var Id=c(Wt(),1),Zl=c(_t(),1);var Td=c(Ul(),1),{lock:jS,unlock:K}=(0,Td.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/dataviews");var be=c(R(),1),{Menu:zo,kebabCase:Db}=K(ho.privateApis);function Nb({action:t,onClick:e,items:r,variant:o}){let n=typeof t.label=="string"?t.label:t.label(r);return(0,be.jsx)(ho.Button,{disabled:!!t.disabled,accessibleWhenDisabled:!0,size:"compact",variant:o,onClick:e,children:n})}function Mb({action:t,onClick:e,items:r}){let o=typeof t.label=="string"?t.label:t.label(r);return(0,be.jsx)(zo.Item,{disabled:t.disabled,onClick:e,children:(0,be.jsx)(zo.ItemLabel,{children:o})})}function bo({action:t,items:e,closeModal:r}){let o=typeof t.label=="string"?t.label:t.label(e),n=typeof t.modalHeader=="function"?t.modalHeader(e):t.modalHeader;return(0,be.jsx)(ho.Modal,{title:n||o,__experimentalHideHeader:!!t.hideModalHeader,onRequestClose:r,focusOnMount:t.modalFocusOnMount??!0,size:t.modalSize||"medium",overlayClassName:`dataviews-action-modal dataviews-action-modal__${Db(t.id)}`,children:(0,be.jsx)(t.RenderModal,{items:e,closeModal:r})})}function Xl({actions:t,item:e,registry:r,setActiveModalAction:o}){let{primaryActions:n,regularActions:i}=(0,Wo.useMemo)(()=>t.reduce((l,s)=>((s.isPrimary?l.primaryActions:l.regularActions).push(s),l),{primaryActions:[],regularActions:[]}),[t]),a=l=>l.map(s=>(0,be.jsx)(Mb,{action:s,onClick:()=>{if("RenderModal"in s){o(s);return}s.callback([e],{registry:r})},items:[e]},s.id));return(0,be.jsxs)(zo.Group,{children:[a(n),a(i)]})}function Go({item:t,actions:e,isCompact:r}){let o=(0,Id.useRegistry)(),{primaryActions:n,eligibleActions:i}=(0,Wo.useMemo)(()=>{let l=e.filter(u=>!u.isEligible||u.isEligible(t));return{primaryActions:l.filter(u=>u.isPrimary),eligibleActions:l}},[e,t]),a=(0,Zl.useViewportMatch)("medium","<");return r?(0,be.jsx)(Ad,{item:t,actions:i,isSmall:!0,registry:o}):(0,be.jsxs)(F,{direction:"row",justify:"flex-end",className:"dataviews-item-actions",style:{flexShrink:0,width:"auto"},children:[(0,be.jsx)(Ql,{item:t,actions:n,registry:o}),(n.lengthi(null)})]})}function Ql({item:t,actions:e,registry:r,buttonVariant:o}){let[n,i]=(0,Wo.useState)(null);return(0,Zl.useViewportMatch)("medium","<")||!Array.isArray(e)||e.length===0?null:(0,be.jsxs)(be.Fragment,{children:[e.map(l=>(0,be.jsx)(Nb,{action:l,onClick:()=>{if("RenderModal"in l){i(l);return}l.callback([t],{registry:r})},items:[t],variant:o},l.id)),!!n&&(0,be.jsx)(bo,{action:n,items:[t],closeModal:()=>i(null)})]})}var qo=c(q(),1),na=c(U(),1),st=c(H(),1),Dd=c(Wt(),1);var Jl=c(_t(),1);var Zr=c(U(),1);function Rd(t,e,r){return t>0?(0,Zr.sprintf)((0,Zr._n)("%d Item selected","%d Items selected",t),t):r>e?(0,Zr.sprintf)((0,Zr._n)("%1$d of %2$d Item","%1$d of %2$d Items",r),e,r):(0,Zr.sprintf)((0,Zr._n)("%d Item","%d Items",e),e)}var We=c(R(),1);function Fb({action:t,items:e,ActionTriggerComponent:r}){let[o,n]=(0,st.useState)(!1);return(0,We.jsxs)(We.Fragment,{children:[(0,We.jsx)(r,{...{action:t,onClick:()=>{n(!0)},items:e}}),o&&(0,We.jsx)(bo,{action:t,items:e,closeModal:()=>n(!1)})]})}function ia(t,e){return(0,st.useMemo)(()=>t.some(r=>r.supportsBulk&&(!r.isEligible||r.isEligible(e))),[t,e])}function Yo(t,e){return(0,st.useMemo)(()=>e.some(r=>t.some(o=>o.supportsBulk&&(!o.isEligible||o.isEligible(r)))),[t,e])}function Nn({selection:t,onChangeSelection:e,data:r,actions:o,getItemId:n}){let i=(0,st.useMemo)(()=>r.filter(s=>o.some(u=>u.supportsBulk&&(!u.isEligible||u.isEligible(s)))),[r,o]),a=r.filter(s=>t.includes(n(s))&&i.includes(s)),l=a.length===i.length;return(0,We.jsx)(qo.CheckboxControl,{className:"dataviews-view-table-selection-checkbox",checked:l,indeterminate:!l&&!!a.length,onChange:()=>{e(l?[]:i.map(s=>n(s)))},"aria-label":l?(0,na.__)("Deselect all"):(0,na.__)("Select all")})}function Vd({action:t,onClick:e,isBusy:r,items:o}){let n=typeof t.label=="string"?t.label:t.label(o);return(0,Jl.useViewportMatch)("medium","<")?(0,We.jsx)(qo.Button,{disabled:r,accessibleWhenDisabled:!0,label:n,icon:t.icon,size:"compact",onClick:e,isBusy:r}):(0,We.jsx)(qo.Button,{disabled:r,accessibleWhenDisabled:!0,size:"compact",onClick:e,isBusy:r,children:n})}var Nd=[];function Lb({action:t,selectedItems:e,actionInProgress:r,setActionInProgress:o}){let n=(0,Dd.useRegistry)(),i=(0,st.useMemo)(()=>e.filter(a=>!t.isEligible||t.isEligible(a)),[t,e]);return"RenderModal"in t?(0,We.jsx)(Fb,{action:t,items:i,ActionTriggerComponent:Vd},t.id):(0,We.jsx)(Vd,{action:t,onClick:async()=>{o(t.id),await t.callback(e,{registry:n}),o(null)},items:i,isBusy:r===t.id},t.id)}function kd(t,e,r,o,n,i,a,l,s,u){let d=Rd(o.length,t.length,u.totalItems);return(0,We.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__container",gap:"md",align:"center",children:[(0,We.jsx)(Nn,{selection:o,onChangeSelection:s,data:t,actions:e,getItemId:r}),(0,We.jsx)("span",{className:"dataviews-bulk-actions-footer__item-count",children:d}),(0,We.jsxs)(F,{direction:"row",className:"dataviews-bulk-actions-footer__action-buttons",gap:"xs",children:[n.map(p=>(0,We.jsx)(Lb,{action:p,selectedItems:i,actionInProgress:a,setActionInProgress:l},p.id)),i.length>0&&(0,We.jsx)(qo.Button,{icon:Rn,showTooltip:!0,tooltipPosition:"top",size:"compact",label:(0,na.__)("Cancel"),disabled:!!a,accessibleWhenDisabled:!1,onClick:()=>{s(Nd)}})]})]})}function Bb({selection:t,actions:e,onChangeSelection:r,data:o,getItemId:n,paginationInfo:i}){let[a,l]=(0,st.useState)(null),s=(0,st.useRef)(void 0),u=(0,Jl.useViewportMatch)("medium","<"),d=(0,st.useMemo)(()=>e.filter(v=>v.supportsBulk),[e]),p=(0,st.useMemo)(()=>o.filter(v=>d.some(_=>!_.isEligible||_.isEligible(v))),[o,d]),f=(0,st.useMemo)(()=>o.filter(v=>t.includes(n(v))&&p.includes(v)),[t,o,n,p]),m=(0,st.useMemo)(()=>e.filter(v=>v.supportsBulk&&(!u||v.icon)&&f.some(_=>!v.isEligible||v.isEligible(_))),[e,f,u]);if(a)s.current||(s.current=kd(o,e,n,t,m,f,a,l,r,i));else return s.current&&(s.current=void 0),kd(o,e,n,t,m,f,a,l,r,i);return s.current}function aa(){let{data:t,selection:e,actions:r=Nd,onChangeSelection:o,getItemId:n,paginationInfo:i}=(0,st.useContext)(G);return(0,We.jsx)(Bb,{selection:e,onChangeSelection:o,data:t,actions:r,getItemId:n,paginationInfo:i})}var xr=c(U(),1);var wr=c(q(),1),Xr=c(H(),1);function sa(t,e){let r=[t?.titleField,t?.mediaField,t?.descriptionField].filter(Boolean);return e.filter(o=>!r.includes(o.id)&&o.type!=="media"&&o.enableHiding!==!1)}var X=c(R(),1),{Menu:ce}=K(wr.privateApis);function jb({children:t}){return Xr.Children.toArray(t).filter(Boolean).map((e,r)=>(0,X.jsxs)(Xr.Fragment,{children:[r>0&&(0,X.jsx)(ce.Separator,{}),e]},r))}var Hb=(0,Xr.forwardRef)(function({fieldId:e,view:r,fields:o,onChangeView:n,onHide:i,setOpenedFilter:a,canMove:l=!0,canInsertLeft:s=!0,canInsertRight:u=!0},d){let p=r.fields??[],f=p?.indexOf(e),m=r.sort?.field===e,v=!1,_=!1,h=!1,x=[],y=o.find(E=>E.id===e),{setIsShowingFilter:S}=(0,Xr.useContext)(G);if(!y)return null;v=y.enableHiding!==!1,_=y.enableSorting!==!1;let V=y.header;if(x=!!y.filterBy&&y.filterBy?.operators||[],h=!r.filters?.some(E=>e===E.field)&&!!(y.hasElements||y.Edit)&&y.filterBy!==!1&&!y.filterBy?.isPrimary,!_&&!l&&!v&&!h)return V;let O=sa(r,o).filter(E=>!p.includes(E.id)),N=(s||u)&&!!O.length,D=(0,xr.isRTL)();return(0,X.jsxs)(ce,{children:[(0,X.jsxs)(ce.TriggerButton,{render:(0,X.jsx)(wr.Button,{size:"compact",className:"dataviews-view-table-header-button",ref:d,variant:"tertiary"}),children:[V,r.sort&&m&&(0,X.jsx)("span",{"aria-hidden":"true",children:vd[r.sort.direction]})]}),(0,X.jsx)(ce.Popover,{style:{minWidth:"240px"},children:(0,X.jsxs)(jb,{children:[_&&(0,X.jsx)(ce.Group,{children:Ji.map(E=>{let A=r.sort&&m&&r.sort.direction===E,k=`${e}-${E}`;return(0,X.jsx)(ce.RadioItem,{name:"view-table-sorting",value:k,checked:A,onChange:()=>{n({...r,sort:{field:e,direction:E},showLevels:!1})},children:(0,X.jsx)(ce.ItemLabel,{children:ta[E]})},k)})}),h&&(0,X.jsx)(ce.Group,{children:(0,X.jsx)(ce.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:Vn}),onClick:()=>{a(e),S(!0),n({...r,page:1,filters:[...r.filters||[],{field:e,value:void 0,operator:x[0]}]})},children:(0,X.jsx)(ce.ItemLabel,{children:(0,xr.__)("Add filter")})})}),(l||v||N)&&y&&(0,X.jsxs)(ce.Group,{children:[l&&(0,X.jsx)(ce.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:ol}),disabled:D?f>=p.length-1:f<1,onClick:()=>{let E=D?f+1:f-1,A=[...p];A.splice(f,1),A.splice(E,0,e),n({...r,fields:A})},children:(0,X.jsx)(ce.ItemLabel,{children:(0,xr.__)("Move left")})}),l&&(0,X.jsx)(ce.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:il}),disabled:D?f<1:f>=p.length-1,onClick:()=>{let E=D?f-1:f+1,A=[...p];A.splice(f,1),A.splice(E,0,e),n({...r,fields:A})},children:(0,X.jsx)(ce.ItemLabel,{children:(0,xr.__)("Move right")})}),s&&!!O.length&&(0,X.jsxs)(ce,{children:[(0,X.jsx)(ce.SubmenuTriggerItem,{children:(0,X.jsx)(ce.ItemLabel,{children:(0,xr.__)("Insert left")})}),(0,X.jsx)(ce.Popover,{children:O.map(E=>{let A=D?f+1:f;return(0,X.jsx)(ce.Item,{onClick:()=>{n({...r,fields:[...p.slice(0,A),E.id,...p.slice(A)]})},children:(0,X.jsx)(ce.ItemLabel,{children:E.label})},E.id)})})]}),u&&!!O.length&&(0,X.jsxs)(ce,{children:[(0,X.jsx)(ce.SubmenuTriggerItem,{children:(0,X.jsx)(ce.ItemLabel,{children:(0,xr.__)("Insert right")})}),(0,X.jsx)(ce.Popover,{children:O.map(E=>{let A=D?f:f+1;return(0,X.jsx)(ce.Item,{onClick:()=>{n({...r,fields:[...p.slice(0,A),E.id,...p.slice(A)]})},children:(0,X.jsx)(ce.ItemLabel,{children:E.label})},E.id)})})]}),v&&y&&(0,X.jsx)(ce.Item,{prefix:(0,X.jsx)(wr.Icon,{icon:Dn}),onClick:()=>{i(y),n({...r,fields:p.filter(E=>E!==e)})},children:(0,X.jsx)(ce.ItemLabel,{children:(0,xr.__)("Hide column")})})]})]})})]})}),zb=Hb,Uo=zb;var Md=c(H(),1),eu=c(R(),1);function Wb({item:t,isItemClickable:e,onClickItem:r,className:o}){return!e(t)||!r?{className:o}:{className:o?`${o} ${o}--clickable`:void 0,role:"button",tabIndex:0,onClick:n=>{n.stopPropagation(),r(t)},onKeyDown:n=>{(n.key==="Enter"||n.key===""||n.key===" ")&&(n.stopPropagation(),r(t))}}}function Qr({item:t,isItemClickable:e,onClickItem:r,renderItemLink:o,className:n,children:i,...a}){if(!e(t))return(0,eu.jsx)("div",{className:n,...a,children:i});if(o){let s=o({item:t,className:`${n} ${n}--clickable`,...a,children:i});return(0,Md.cloneElement)(s,{onClick:u=>{u.stopPropagation(),s.props.onClick&&s.props.onClick(u)},onKeyDown:u=>{(u.key==="Enter"||u.key===""||u.key===" ")&&(u.stopPropagation(),s.props.onKeyDown&&s.props.onKeyDown(u))}})}let l=Wb({item:t,isItemClickable:e,onClickItem:r,className:n});return(0,eu.jsx)("div",{...l,...a,children:i})}var Jt=c(R(),1);function Gb({item:t,level:e,titleField:r,mediaField:o,descriptionField:n,onClickItem:i,renderItemLink:a,isItemClickable:l}){return(0,Jt.jsxs)(F,{direction:"row",gap:"md",align:"flex-start",justify:"flex-start",children:[o&&(0,Jt.jsx)(Qr,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-column-primary__media","aria-label":l(t)&&(i||a)&&r?r.getValue?.({item:t}):void 0,children:(0,Jt.jsx)(o.render,{item:t,field:o,config:{sizes:"32px"}})}),(0,Jt.jsxs)(F,{direction:"column",align:"flex-start",className:"dataviews-view-table__primary-column-content",children:[r&&(0,Jt.jsxs)(Qr,{item:t,isItemClickable:l,onClickItem:i,renderItemLink:a,className:"dataviews-view-table__cell-content-wrapper dataviews-title-field",children:[e!==void 0&&e>0&&(0,Jt.jsxs)("span",{className:"dataviews-view-table__level",children:[Array(e).fill("\u2014").join(" "),"\xA0"]}),(0,Jt.jsx)(r.render,{item:t,field:r})]}),n&&(0,Jt.jsx)(n.render,{item:t,field:n})]})]})}var la=Gb;var Fd=c(_t(),1),$o=c(H(),1),Ld=c(U(),1),qb=t=>(0,Ld.isRTL)()?Math.abs(t.scrollLeft)<=1:t.scrollLeft+t.clientWidth>=t.scrollWidth-1;function Bd({scrollContainerRef:t,enabled:e=!1}){let[r,o]=(0,$o.useState)(!1),n=(0,Fd.useDebounce)((0,$o.useCallback)(()=>{let i=t.current;i&&o(qb(i))},[t,o]),200);return(0,$o.useEffect)(()=>typeof window>"u"||!e||!t.current?()=>{}:(n(),t.current.addEventListener("scroll",n),window.addEventListener("resize",n),()=>{t.current?.removeEventListener("scroll",n),window.removeEventListener("resize",n)}),[t,e]),r}function Mt(t,e){return t.reduce((r,o)=>{let n=e.getValue({item:o});return r.has(n)||r.set(n,[]),r.get(n)?.push(o),r},new Map)}var Jr=c(q(),1),Hd=c(U(),1),zd=c(H(),1);var At=c(R(),1);function jd({field:t,isVisible:e,onToggleVisibility:r}){return(0,At.jsx)(Jr.__experimentalItem,{onClick:t.enableHiding?r:void 0,children:(0,At.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",align:"center",children:[(0,At.jsx)("div",{style:{height:24,width:24},children:e&&(0,At.jsx)(Jr.Icon,{icon:go})}),(0,At.jsx)("span",{className:"dataviews-view-config__label",children:t.label})]})})}function Yb(t){return!!t}function ua({showLabel:t=!0}){let{view:e,fields:r,onChangeView:o}=(0,zd.useContext)(G),n=sa(e,r);if(!n?.length)return null;let i=r.find(v=>v.id===e.titleField),a=r.find(v=>v.id===e.mediaField),l=r.find(v=>v.id===e.descriptionField),s=[{field:i,isVisibleFlag:"showTitle"},{field:a,isVisibleFlag:"showMedia"},{field:l,isVisibleFlag:"showDescription"}].filter(({field:v})=>Yb(v)),u=e.fields??[],d=n.filter(v=>u.includes(v.id)).length,p=s.filter(({isVisibleFlag:v})=>e[v]??!0),f=p.length+d,m=f===1&&p.length===1;return(0,At.jsxs)(F,{direction:"column",className:"dataviews-field-control",children:[t&&(0,At.jsx)(Jr.BaseControl.VisualLabel,{children:(0,Hd.__)("Properties")}),(0,At.jsx)(F,{direction:"column",className:"dataviews-view-config__properties",children:(0,At.jsxs)(Jr.__experimentalItemGroup,{isBordered:!0,isSeparated:!0,size:"medium",children:[s.map(({field:v,isVisibleFlag:_})=>{let h=e[_]??!0,x=m&&h?{...v,enableHiding:!1}:v;return(0,At.jsx)(jd,{field:x,isVisible:h,onToggleVisibility:()=>{o({...e,[_]:!h})}},v.id)}),n.map(v=>{let _=u.includes(v.id),h=f===1&&_?{...v,enableHiding:!1}:v;return(0,At.jsx)(jd,{field:h,isVisible:_,onToggleVisibility:()=>{o({...e,fields:_?u.filter(x=>x!==v.id):[...u,v.id]})}},v.id)})]})})]})}var ca=c(H(),1);function er(t,e={delay:400}){let[r,o]=(0,ca.useState)(!1);return(0,ca.useEffect)(()=>{if(!t)return;let n=setTimeout(()=>{o(!0)},e.delay);return()=>{clearTimeout(n),o(!1)}},[t,e.delay]),r}var $=c(R(),1);function Gd(t,e){if(t)return t;if(e==="integer"||e==="number")return"end"}function Ub({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=z("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,$.jsx)("div",{className:i,children:(0,$.jsx)(n.render,{item:t,field:n})})}function Wd({hasBulkActions:t,item:e,level:r,actions:o,fields:n,id:i,view:a,titleField:l,mediaField:s,descriptionField:u,selection:d,getItemId:p,isItemClickable:f,onClickItem:m,renderItemLink:v,onChangeSelection:_,isActionsColumnSticky:h,posinset:x}){let{paginationInfo:y}=(0,St.useContext)(G),S=ia(o,e),V=S&&d.includes(i),{showTitle:O=!0,showMedia:N=!0,showDescription:D=!0,infiniteScrollEnabled:E}=a,A=(0,St.useRef)(!1),k=a.fields??[],b=l&&O||s&&N||u&&D;return(0,$.jsxs)("tr",{className:z("dataviews-view-table__row",{"is-selected":S&&V,"has-bulk-actions":S}),onTouchStart:()=>{A.current=!0},"aria-setsize":E?y.totalItems:void 0,"aria-posinset":x,role:E?"article":void 0,onMouseDown:P=>{let T=(0,tu.isAppleOS)()?P.metaKey:P.ctrlKey;P.button===0&&T&&window.navigator.userAgent.toLowerCase().includes("firefox")&&P?.preventDefault()},onClick:P=>{if(!S)return;((0,tu.isAppleOS)()?P.metaKey:P.ctrlKey)&&!A.current&&document.getSelection()?.type!=="Range"&&_(d.includes(i)?d.filter(g=>i!==g):[...d,i])},children:[t&&(0,$.jsx)("td",{className:"dataviews-view-table__checkbox-column",children:(0,$.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,$.jsx)(Kr,{item:e,selection:d,onChangeSelection:_,getItemId:p,titleField:l,disabled:!S})})}),b&&(0,$.jsx)("td",{children:(0,$.jsx)(la,{item:e,level:r,titleField:O?l:void 0,mediaField:N?s:void 0,descriptionField:D?u:void 0,isItemClickable:f,onClickItem:m,renderItemLink:v})}),k.map(P=>{let{width:T,maxWidth:g,minWidth:I,align:w}=a.layout?.styles?.[P]??{},C=n.find(j=>j.id===P),M=Gd(w,C?.type);return(0,$.jsx)("td",{style:{width:T,maxWidth:g,minWidth:I},children:(0,$.jsx)(Ub,{fields:n,item:e,column:P,align:M})},P)}),!!o?.length&&(0,$.jsx)("td",{className:z("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":h}),onClick:P=>P.stopPropagation(),children:(0,$.jsx)(Go,{item:e,actions:o})})]})}function $b({actions:t,data:e,fields:r,getItemId:o,getItemLevel:n,isLoading:i=!1,onChangeView:a,onChangeSelection:l,selection:s,setOpenedFilter:u,onClickItem:d,isItemClickable:p,renderItemLink:f,view:m,className:v,empty:_}){let{containerRef:h}=(0,St.useContext)(G),x=er(i),y=(0,St.useRef)(new Map),S=(0,St.useRef)(void 0),[V,O]=(0,St.useState)(),[N,D]=(0,St.useState)(null);(0,St.useEffect)(()=>{S.current&&(S.current.focus(),S.current=void 0)});let E=(0,St.useId)(),A=Bd({scrollContainerRef:h,enabled:!!t?.length}),k=Yo(t,e);if(V){S.current=V,O(void 0);return}let b=Y=>{let Q=y.current.get(Y.id),he=Q?y.current.get(Q.fallback):void 0;O(he?.node)},P=Y=>{Y.preventDefault(),Y.stopPropagation();let Q={getBoundingClientRect:()=>({x:Y.clientX,y:Y.clientY,top:Y.clientY,left:Y.clientX,right:Y.clientX,bottom:Y.clientY,width:0,height:0,toJSON:()=>({})})};window.requestAnimationFrame(()=>{D(Q)})},T=!!e?.length,g=r.find(Y=>Y.id===m.titleField),I=r.find(Y=>Y.id===m.mediaField),w=r.find(Y=>Y.id===m.descriptionField),C=m.groupBy?.field?r.find(Y=>Y.id===m.groupBy?.field):null,M=C?Mt(e,C):null,{showTitle:j=!0,showMedia:ae=!0,showDescription:ye=!0}=m,De=g&&j||I&&ae||w&&ye,je=m.fields??[],ot=(Y,Q)=>he=>{he?y.current.set(Y,{node:he,fallback:je[Q>0?Q-1:1]}):y.current.delete(Y)},Kt=m.infiniteScrollEnabled&&!M,vr=(0,xo.isRTL)();return T?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("table",{className:z("dataviews-view-table",v,{[`has-${m.layout?.density}-density`]:m.layout?.density&&["compact","comfortable"].includes(m.layout.density),"has-bulk-actions":k,"is-refreshing":!Kt&&x}),"aria-busy":i,"aria-describedby":E,role:Kt?"feed":void 0,inert:!Kt&&i?"true":void 0,children:[(0,$.jsxs)("colgroup",{children:[k&&(0,$.jsx)("col",{className:"dataviews-view-table__col-checkbox"}),De&&(0,$.jsx)("col",{className:"dataviews-view-table__col-first-data"}),je.map((Y,Q)=>(0,$.jsx)("col",{className:z(`dataviews-view-table__col-${Y}`,{"dataviews-view-table__col-first-data":!De&&Q===0})},`col-${Y}`)),!!t?.length&&(0,$.jsx)("col",{className:"dataviews-view-table__col-actions"})]}),N&&(0,$.jsx)(da.Popover,{anchor:N,onClose:()=>D(null),placement:"bottom-start",children:(0,$.jsx)(ua,{showLabel:!1})}),(0,$.jsx)("thead",{onContextMenu:P,children:(0,$.jsxs)("tr",{className:"dataviews-view-table__row",children:[k&&(0,$.jsx)("th",{className:"dataviews-view-table__checkbox-column",scope:"col",onContextMenu:P,children:(0,$.jsx)(Nn,{selection:s,onChangeSelection:l,data:e,actions:t,getItemId:o})}),De&&(0,$.jsx)("th",{scope:"col",children:g&&(0,$.jsx)(Uo,{ref:ot(g.id,0),fieldId:g.id,view:m,fields:r,onChangeView:a,onHide:b,setOpenedFilter:u,canMove:!1,canInsertLeft:vr?m.layout?.enableMoving??!0:!1,canInsertRight:vr?!1:m.layout?.enableMoving??!0})}),je.map((Y,Q)=>{let{width:he,maxWidth:gr,minWidth:hr,align:mo}=m.layout?.styles?.[Y]??{},po=r.find(js=>js.id===Y),Bo=Gd(mo,po?.type),Pn=m.layout?.enableMoving??!0;return(0,$.jsx)("th",{style:{width:he,maxWidth:gr,minWidth:hr,textAlign:Bo},"aria-sort":m.sort?.direction&&m.sort?.field===Y?ea[m.sort.direction]:void 0,scope:"col",children:(0,$.jsx)(Uo,{ref:ot(Y,Q),fieldId:Y,view:m,fields:r,onChangeView:a,onHide:b,setOpenedFilter:u,canMove:Pn,canInsertLeft:Pn,canInsertRight:Pn})},Y)}),!!t?.length&&(0,$.jsx)("th",{className:z("dataviews-view-table__actions-column",{"dataviews-view-table__actions-column--sticky":!0,"dataviews-view-table__actions-column--stuck":!A}),children:(0,$.jsx)("span",{className:"dataviews-view-table-header",children:(0,xo.__)("Actions")})})]})}),T&&C&&M?Array.from(M.entries()).map(([Y,Q])=>(0,$.jsxs)("tbody",{children:[(0,$.jsx)("tr",{className:"dataviews-view-table__group-header-row",children:(0,$.jsx)("td",{colSpan:je.length+(De?1:0)+(k?1:0)+(t?.length?1:0),className:"dataviews-view-table__group-header-cell",children:m.groupBy?.showLabel===!1?Y:(0,xo.sprintf)((0,xo.__)("%1$s: %2$s"),C.label,Y)})}),Q.map((he,gr)=>(0,$.jsx)(Wd,{item:he,level:m.showLevels&&typeof n=="function"?n(he):void 0,hasBulkActions:k,actions:t,fields:r,id:o(he)||gr.toString(),view:m,titleField:g,mediaField:I,descriptionField:w,selection:s,getItemId:o,onChangeSelection:l,onClickItem:d,renderItemLink:f,isItemClickable:p,isActionsColumnSticky:!A},o(he)))]},`group-${Y}`)):(0,$.jsx)("tbody",{children:T&&e.map((Y,Q)=>(0,$.jsx)(Wd,{item:Y,level:m.showLevels&&typeof n=="function"?n(Y):void 0,hasBulkActions:k,actions:t,fields:r,id:o(Y)||Q.toString(),view:m,titleField:g,mediaField:I,descriptionField:w,selection:s,getItemId:o,onChangeSelection:l,onClickItem:d,renderItemLink:f,isItemClickable:p,isActionsColumnSticky:!A,posinset:Kt?Q+1:void 0},o(Y)))})]}),Kt&&i&&(0,$.jsx)("div",{className:"dataviews-loading",id:E,children:(0,$.jsx)("p",{className:"dataviews-loading-more",children:(0,$.jsx)(da.Spinner,{})})})]}):(0,$.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":x}),id:E,children:_})}var qd=$b;var Kd=c(q(),1),pa=c(U(),1);var Ot=c(q(),1);var Mn=c(U(),1),Ud=c(_t(),1),$d=c(Kl(),1),ma=c(H(),1);var Kb=c(q(),1),Zb=c(U(),1),fa=c(H(),1);var Xb=c(R(),1),Qb=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}],Jb=Qb[2].value;function Yd(){let t=(0,fa.useContext)(G),e=t.view;return(0,fa.useMemo)(()=>{let r=t.containerWidth,o=32,n=e.layout?.previewSize??Jb,i=Math.floor((r+o)/(n+o));return Math.max(1,i)},[t.containerWidth,e.layout?.previewSize])}var ne=c(R(),1),{Badge:e0}=K(Ot.privateApis);function t0(t,e){let r=[];for(let o=0,n=t.length;o{if(x.onClickCapture?.(w),(0,$d.isAppleOS)()?w.metaKey:w.ctrlKey){if(w.stopPropagation(),w.preventDefault(),!N)return;o(r.includes(D)?r.filter(C=>D!==C):[...r,D])}},children:[(0,ne.jsx)(Qr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:z("dataviews-view-grid__media",{"dataviews-view-grid__media--placeholder":!b}),...g,children:P}),_&&(0,ne.jsx)(Kr,{item:s,selection:r,onChangeSelection:o,getItemId:l,titleField:p,disabled:!N}),!!u?.length&&(0,ne.jsx)("div",{className:"dataviews-view-grid__media-actions",children:(0,ne.jsx)(Go,{item:s,actions:u,isCompact:!0})}),S&&(0,ne.jsx)("div",{className:"dataviews-view-grid__title",children:(0,ne.jsx)(Qr,{item:s,isItemClickable:i,onClickItem:n,renderItemLink:a,className:"dataviews-view-grid__title-field dataviews-title-field",...I,title:p?.getValueFormatted({item:s,field:p})||void 0,children:T})}),(0,ne.jsxs)(F,{direction:"column",gap:"xs",children:[O&&f?.render&&(0,ne.jsx)(f.render,{item:s,field:f}),!!v?.length&&(0,ne.jsx)(F,{direction:"row",className:"dataviews-view-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:v.map(w=>(0,ne.jsx)(e0,{className:"dataviews-view-grid__field-value",children:(0,ne.jsx)(w.render,{item:s,field:w})},w.id))}),!!m?.length&&(0,ne.jsx)(F,{direction:"column",className:"dataviews-view-grid__fields",gap:"xs",children:m.map(w=>(0,ne.jsx)(Ot.Flex,{className:"dataviews-view-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)(Ot.Tooltip,{text:w.label,children:(0,ne.jsx)(Ot.FlexItem,{className:"dataviews-view-grid__field-name",children:w.header})}),(0,ne.jsx)(Ot.FlexItem,{className:"dataviews-view-grid__field-value",style:{maxHeight:"none"},children:(0,ne.jsx)(w.render,{item:s,field:w})})]})},w.id))})]})]})});function ru({data:t,isInfiniteScroll:e,className:r,inert:o,isLoading:n,view:i,fields:a,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:d,renderItemLink:p,getItemId:f,actions:m}){let{paginationInfo:v,resizeObserverRef:_}=(0,ma.useContext)(G),h=Yd(),x=Yo(m,t),y=a.find(k=>k.id===i?.titleField),S=a.find(k=>k.id===i?.mediaField),V=a.find(k=>k.id===i?.descriptionField),O=i.fields??[],{regularFields:N,badgeFields:D}=O.reduce((k,b)=>{let P=a.find(g=>g.id===b);if(!P)return k;let T=i.layout?.badgeFields?.includes(b)?"badgeFields":"regularFields";return k[T].push(P),k},{regularFields:[],badgeFields:[]}),E="900px",A=Math.ceil(t.length/h);return(0,ne.jsx)(Ot.Composite,{role:e?"feed":"grid",className:z("dataviews-view-grid",r),focusWrap:!0,"aria-busy":n,"aria-rowcount":e?void 0:A,ref:_,inert:o,children:t0(t,h).map((k,b)=>(0,ne.jsx)(Ot.Composite.Row,{render:(0,ne.jsx)("div",{role:"row","aria-rowindex":b+1,"aria-label":(0,Mn.sprintf)((0,Mn.__)("Row %d"),b+1),className:"dataviews-view-grid__row",style:{gridTemplateColumns:`repeat( ${h}, minmax(0, 1fr) )`}}),children:k.map((P,T)=>{let g=b*h+T;return(0,ne.jsx)(Ot.Composite.Item,{render:I=>(0,ne.jsx)(r0,{...I,role:e?"article":"gridcell","aria-setsize":e?v.totalItems:void 0,"aria-posinset":e?g+1:void 0,view:i,selection:l,onChangeSelection:s,onClickItem:u,isItemClickable:d,renderItemLink:p,getItemId:f,item:P,actions:m,mediaField:S,titleField:y,descriptionField:V,regularFields:N,badgeFields:D,hasBulkActions:x,config:{sizes:E}})},f(P))})},b))})}var It=c(R(),1);function o0({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,selection:u,view:d,className:p,empty:f}){let m=er(!!n),v=!!e?.length,_=d.groupBy?.field?r.find(S=>S.id===d.groupBy?.field):null,h=_?Mt(e,_):null,x=d.infiniteScrollEnabled&&!h;if(!v)return(0,It.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":m}),children:f});let y={className:z(p,{"is-refreshing":!x&&m}),inert:!x&&n?"true":void 0,isLoading:n,view:d,fields:r,selection:u,onChangeSelection:i,onClickItem:a,isItemClickable:l,renderItemLink:s,getItemId:o,actions:t};return(0,It.jsxs)(It.Fragment,{children:[v&&_&&h&&(0,It.jsx)(F,{direction:"column",gap:"lg",children:Array.from(h.entries()).map(([S,V])=>(0,It.jsxs)(F,{direction:"column",gap:"sm",children:[(0,It.jsx)("h3",{className:"dataviews-view-grid__group-header",children:d.groupBy?.showLabel===!1?S:(0,pa.sprintf)((0,pa.__)("%1$s: %2$s"),_.label,S)}),(0,It.jsx)(ru,{...y,data:V,isInfiniteScroll:!1})]},S))}),!h&&(0,It.jsx)(ru,{...y,data:e,isInfiniteScroll:!!x}),x&&n&&(0,It.jsx)("p",{className:"dataviews-loading-more",children:(0,It.jsx)(Kd.Spinner,{})})]})}var Zd=o0;var va=c(_t(),1),Ue=c(q(),1),Be=c(H(),1),Fn=c(U(),1);var au=c(Wt(),1);var W=c(R(),1),{Menu:ou}=K(Ue.privateApis);function nu(t){return`${t}-item-wrapper`}function n0(t,e){return`${t}-primary-action-${e}`}function iu(t){return`${t}-dropdown`}function i0({idPrefix:t,primaryAction:e,item:r}){let o=(0,au.useRegistry)(),[n,i]=(0,Be.useState)(!1),a=n0(t,e.id),l=typeof e.label=="string"?e.label:e.label([r]);return"RenderModal"in e?(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(Ue.Composite.Item,{id:a,render:(0,W.jsx)(Ue.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,text:l,size:"small",onClick:()=>i(!0)}),children:n&&(0,W.jsx)(bo,{action:e,items:[r],closeModal:()=>i(!1)})})},e.id):(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(Ue.Composite.Item,{id:a,render:(0,W.jsx)(Ue.Button,{disabled:!!e.disabled,accessibleWhenDisabled:!0,size:"small",onClick:()=>{e.callback([r],{registry:o})},children:l})})},e.id)}function Xd({view:t,actions:e,idPrefix:r,isSelected:o,item:n,titleField:i,mediaField:a,descriptionField:l,onSelect:s,otherFields:u,onDropdownTriggerKeyDown:d,posinset:p}){let{showTitle:f=!0,showMedia:m=!0,showDescription:v=!0,infiniteScrollEnabled:_}=t,h=(0,Be.useRef)(null),x=`${r}-label`,y=`${r}-description`,S=(0,au.useRegistry)(),[V,O]=(0,Be.useState)(!1),[N,D]=(0,Be.useState)(null),E=({type:w})=>{O(w==="mouseenter")},{paginationInfo:A}=(0,Be.useContext)(G);(0,Be.useEffect)(()=>{o&&h.current?.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})},[o]);let{primaryAction:k,eligibleActions:b}=(0,Be.useMemo)(()=>{let w=e.filter(M=>!M.isEligible||M.isEligible(n));return{primaryAction:w.filter(M=>M.isPrimary)[0],eligibleActions:w}},[e,n]),P=k&&e.length===1,T=m&&a?.render?(0,W.jsx)("div",{className:"dataviews-view-list__media-wrapper",children:(0,W.jsx)(a.render,{item:n,field:a,config:{sizes:"52px"}})}):null,g=f&&i?.render?(0,W.jsx)(i.render,{item:n,field:i}):null,I=b?.length>0&&(0,W.jsxs)(F,{direction:"row",gap:"md",className:"dataviews-view-list__item-actions",children:[k&&(0,W.jsx)(i0,{idPrefix:r,primaryAction:k,item:n}),!P&&(0,W.jsxs)("div",{role:"gridcell",children:[(0,W.jsxs)(ou,{placement:"bottom-end",children:[(0,W.jsx)(ou.TriggerButton,{render:(0,W.jsx)(Ue.Composite.Item,{id:iu(r),render:(0,W.jsx)(Ue.Button,{size:"small",icon:kn,label:(0,Fn.__)("Actions"),accessibleWhenDisabled:!0,disabled:!e.length,onKeyDown:d})})}),(0,W.jsx)(ou.Popover,{children:(0,W.jsx)(Xl,{actions:b,item:n,registry:S,setActiveModalAction:D})})]}),!!N&&(0,W.jsx)(bo,{action:N,items:[n],closeModal:()=>D(null)})]})]});return(0,W.jsx)(Ue.Composite.Row,{ref:h,render:(0,W.jsx)("div",{"aria-posinset":p,"aria-setsize":_?A.totalItems:void 0}),role:_?"article":"row",className:z({"is-selected":o,"is-hovered":V}),onMouseEnter:E,onMouseLeave:E,children:(0,W.jsxs)(F,{direction:"row",className:"dataviews-view-list__item-wrapper",children:[(0,W.jsx)("div",{role:"gridcell",children:(0,W.jsx)(Ue.Composite.Item,{id:nu(r),"aria-pressed":o,"aria-labelledby":x,"aria-describedby":y,className:"dataviews-view-list__item",onClick:()=>s(n)})}),(0,W.jsxs)(F,{direction:"row",gap:"md",justify:"start",align:"flex-start",style:{flex:1,minWidth:0},children:[T,(0,W.jsxs)(F,{direction:"column",gap:"xs",className:"dataviews-view-list__field-wrapper",children:[(0,W.jsxs)(F,{direction:"row",align:"center",children:[(0,W.jsx)("div",{className:"dataviews-title-field dataviews-view-list__title-field",id:x,children:g}),I]}),v&&l?.render&&(0,W.jsx)("div",{className:"dataviews-view-list__field",children:(0,W.jsx)(l.render,{item:n,field:l})}),(0,W.jsx)("div",{className:"dataviews-view-list__fields",id:y,children:u.map(w=>(0,W.jsxs)("div",{className:"dataviews-view-list__field",children:[(0,W.jsx)(Ue.VisuallyHidden,{as:"span",className:"dataviews-view-list__field-label",children:w.label}),(0,W.jsx)("span",{className:"dataviews-view-list__field-value",children:(0,W.jsx)(w.render,{item:n,field:w})})]},w.id))})]})]})]})})}function a0(t){return!!t}function su(t){let{actions:e,data:r,fields:o,getItemId:n,isLoading:i,onChangeSelection:a,selection:l,view:s,className:u,empty:d}=t,p=(0,va.useInstanceId)(su,"view-list"),f=er(!!i),m=r?.findLast(w=>l.includes(n(w))),v=o.find(w=>w.id===s.titleField),_=o.find(w=>w.id===s.mediaField),h=o.find(w=>w.id===s.descriptionField),x=(s?.fields??[]).map(w=>o.find(C=>w===C.id)).filter(a0),y=w=>a([n(w)]),S=(0,Be.useCallback)(w=>`${p}-${n(w)}`,[p,n]),V=(0,Be.useCallback)((w,C)=>C.startsWith(S(w)),[S]),[O,N]=(0,Be.useState)(void 0);(0,Be.useEffect)(()=>{m&&N(nu(S(m)))},[m,S]);let D=r.findIndex(w=>V(w,O??"")),E=(0,va.usePrevious)(D),A=D!==-1,k=(0,Be.useCallback)((w,C)=>{let M=Math.min(r.length-1,Math.max(0,w));if(!r[M])return;let j=S(r[M]),ae=C(j);N(ae),document.getElementById(ae)?.focus()},[r,S]);(0,Be.useEffect)(()=>{!A&&(E!==void 0&&E!==-1)&&k(E,nu)},[A,k,E]);let b=(0,Be.useCallback)(w=>{w.key==="ArrowDown"&&(w.preventDefault(),k(D+1,iu)),w.key==="ArrowUp"&&(w.preventDefault(),k(D-1,iu))},[k,D]),P=!!r?.length,T=s.groupBy?.field?o.find(w=>w.id===s.groupBy?.field):null,g=P&&T?Mt(r,T):null,I=s.infiniteScrollEnabled&&!g;return P?P&&T&&g?(0,W.jsx)(Ue.Composite,{id:`${p}`,render:(0,W.jsx)("div",{}),className:"dataviews-view-list__group",role:"grid",activeId:O,setActiveId:N,children:(0,W.jsx)(F,{direction:"column",gap:"lg",className:z("dataviews-view-list",u),children:Array.from(g.entries()).map(([w,C])=>(0,W.jsxs)(F,{direction:"column",gap:"sm",children:[(0,W.jsx)("h3",{className:"dataviews-view-list__group-header",children:s.groupBy?.showLabel===!1?w:(0,Fn.sprintf)((0,Fn.__)("%1$s: %2$s"),T.label,w)}),C.map(M=>{let j=S(M);return(0,W.jsx)(Xd,{view:s,idPrefix:j,actions:e,item:M,isSelected:M===m,onSelect:y,mediaField:_,titleField:v,descriptionField:h,otherFields:x,onDropdownTriggerKeyDown:b},j)})]},w))})}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Ue.Composite,{id:p,render:(0,W.jsx)("div",{}),className:z("dataviews-view-list",u,{[`has-${s.layout?.density}-density`]:s.layout?.density&&["compact","comfortable"].includes(s.layout.density),"is-refreshing":!I&&f}),role:s.infiniteScrollEnabled?"feed":"grid",activeId:O,setActiveId:N,inert:!I&&i?"true":void 0,children:r.map((w,C)=>{let M=S(w);return(0,W.jsx)(Xd,{view:s,idPrefix:M,actions:e,item:w,isSelected:w===m,onSelect:y,mediaField:_,titleField:v,descriptionField:h,otherFields:x,onDropdownTriggerKeyDown:b,posinset:s.infiniteScrollEnabled?C+1:void 0},M)})}),I&&i&&(0,W.jsx)("p",{className:"dataviews-loading-more",children:(0,W.jsx)(Ue.Spinner,{})})]}):(0,W.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":f}),children:d})}var af=c(q(),1);var ga=c(U(),1),Qd=c(H(),1);var Ko=c(R(),1);function Jd({groupName:t,groupData:e,groupField:r,showLabel:o=!0,children:n}){let i=o?(0,Qd.createInterpolateElement)((0,ga.sprintf)((0,ga.__)("%s: "),r.label).trim(),{groupName:(0,Ko.jsx)(r.render,{item:e[0],field:r})}):(0,Ko.jsx)(r.render,{item:e[0],field:r});return(0,Ko.jsxs)(F,{direction:"column",className:"dataviews-view-activity__group",children:[(0,Ko.jsx)("h3",{className:"dataviews-view-activity__group-header",children:i}),n]},t)}var ef=c(q(),1),wo=c(H(),1),tf=c(Wt(),1),rf=c(_t(),1);var Ne=c(R(),1);function s0(t){let{view:e,actions:r,item:o,titleField:n,mediaField:i,descriptionField:a,otherFields:l,posinset:s,onClickItem:u,renderItemLink:d,isItemClickable:p}=t,{showTitle:f=!0,showMedia:m=!0,showDescription:v=!0,infiniteScrollEnabled:_}=e,h=(0,wo.useRef)(null),x=(0,tf.useRegistry)(),{paginationInfo:y}=(0,wo.useContext)(G),{primaryActions:S,eligibleActions:V}=(0,wo.useMemo)(()=>{let b=r.filter(T=>!T.isEligible||T.isEligible(o));return{primaryActions:b.filter(T=>T.isPrimary),eligibleActions:b}},[r,o]),O=(0,rf.useViewportMatch)("medium","<"),N=e.layout?.density??"balanced",D=m&&N!=="compact"&&i?.render?(0,Ne.jsx)(i.render,{item:o,field:i,config:{sizes:N==="comfortable"?"32px":"24px"}}):null,E=(0,Ne.jsx)("div",{className:"dataviews-view-activity__item-type-icon",children:D||(0,Ne.jsx)("span",{className:"dataviews-view-activity__item-bullet","aria-hidden":"true"})}),A=f&&n?.render?(0,Ne.jsx)(n.render,{item:o,field:n}):null,k=(0,wo.useMemo)(()=>N==="comfortable"?"md":"sm",[N]);return(0,Ne.jsx)("div",{ref:h,role:_?"article":void 0,"aria-posinset":s,"aria-setsize":_?y.totalItems:void 0,className:z("dataviews-view-activity__item",N==="compact"&&"is-compact",N==="balanced"&&"is-balanced",N==="comfortable"&&"is-comfortable"),children:(0,Ne.jsxs)(F,{direction:"row",gap:"lg",justify:"start",align:"flex-start",children:[(0,Ne.jsx)(F,{direction:"column",gap:"xs",align:"center",className:"dataviews-view-activity__item-type",children:E}),(0,Ne.jsxs)(F,{direction:"column",gap:k,align:"flex-start",className:"dataviews-view-activity__item-content",children:[A&&(0,Ne.jsx)(Qr,{item:o,isItemClickable:p,onClickItem:u,renderItemLink:d,className:"dataviews-view-activity__item-title",children:A}),v&&a&&(0,Ne.jsx)("div",{className:"dataviews-view-activity__item-description",children:(0,Ne.jsx)(a.render,{item:o,field:a})}),(0,Ne.jsx)("div",{className:"dataviews-view-activity__item-fields",children:l.map(b=>(0,Ne.jsxs)("div",{className:"dataviews-view-activity__item-field",children:[(0,Ne.jsx)(ef.VisuallyHidden,{as:"span",className:"dataviews-view-activity__item-field-label",children:b.label}),(0,Ne.jsx)("span",{className:"dataviews-view-activity__item-field-value",children:(0,Ne.jsx)(b.render,{item:o,field:b})})]},b.id))}),!!S?.length&&(0,Ne.jsx)(Ql,{item:o,actions:S,registry:x,buttonVariant:"secondary"})]}),(S.length0)&&(0,Ne.jsx)("div",{className:"dataviews-view-activity__item-actions",children:(0,Ne.jsx)(Go,{item:o,actions:V,isCompact:!0})})]})})}var of=s0;var nf=c(le(),1);function l0(t){return!!t}function lu(t){let{data:e,fields:r,getItemId:o,view:n}=t,i=r.find(u=>u.id===n.titleField),a=r.find(u=>u.id===n.mediaField),l=r.find(u=>u.id===n.descriptionField),s=(n?.fields??[]).map(u=>r.find(d=>u===d.id)).filter(l0);return e.map((u,d)=>(0,nf.createElement)(of,{...t,key:o(u),item:u,mediaField:a,titleField:i,descriptionField:l,otherFields:s,posinset:n.infiniteScrollEnabled?d+1:void 0}))}var Rt=c(R(),1);function sf(t){let{empty:e,data:r,fields:o,isLoading:n,view:i,className:a}=t,l=er(!!n),s=!!r?.length,u=i.groupBy?.field?o.find(_=>_.id===i.groupBy?.field):null,d=s&&u?Mt(r,u):null,p=i.infiniteScrollEnabled&&!d;if(!s)return(0,Rt.jsx)("div",{className:z("dataviews-no-results",{"is-refreshing":l}),children:e});let f=!p&&!!n,m=z("dataviews-view-activity",a,{"is-refreshing":!p&&l}),v=d?Array.from(d.entries()):[];return s&&u&&d?(0,Rt.jsx)(F,{direction:"column",gap:"sm",className:m,inert:f?"true":void 0,children:v.map(([_,h])=>(0,Rt.jsx)(Jd,{groupName:_,groupData:h,groupField:u,showLabel:i.groupBy?.showLabel!==!1,children:(0,Rt.jsx)(lu,{...t,data:h})},_))}):(0,Rt.jsxs)(Rt.Fragment,{children:[(0,Rt.jsx)("div",{className:m,role:i.infiniteScrollEnabled?"feed":void 0,inert:f?"true":void 0,children:(0,Rt.jsx)(lu,{...t})}),p&&n&&(0,Rt.jsx)("p",{className:"dataviews-loading-more",children:(0,Rt.jsx)(af.Spinner,{})})]})}var Ct=c(q(),1),Bn=c(U(),1),pf=c(_t(),1),vf=c(H(),1);var uf=c(q(),1),u0=c(Wt(),1),ha=c(H(),1);var c0=c(U(),1);var Ln=c(q(),1),Zo=c(H(),1),Vt=c(U(),1);var _r=c(R(),1);function uu(){let{view:t,onChangeView:e,paginationInfo:{totalItems:r=0,totalPages:o}}=(0,Zo.useContext)(G);if(!r||!o||t.infiniteScrollEnabled)return null;let n=t.page??1,i=Array.from(Array(o)).map((a,l)=>{let s=l+1;return{value:s.toString(),label:s.toString(),"aria-label":n===s?(0,Vt.sprintf)((0,Vt.__)("Page %1$d of %2$d"),n,o):s.toString()}});return!!r&&o!==1&&(0,_r.jsxs)(F,{direction:"row",className:"dataviews-pagination",justify:"end",align:"center",gap:"xl",children:[(0,_r.jsx)(F,{direction:"row",justify:"flex-start",align:"center",gap:"xs",className:"dataviews-pagination__page-select",children:(0,Zo.createInterpolateElement)((0,Vt.sprintf)((0,Vt._x)("
      Page
      %1$s
      of %2$d
      ","paging"),"",o),{div:(0,_r.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,_r.jsx)(Ln.SelectControl,{"aria-label":(0,Vt.__)("Current page"),value:n.toString(),options:i,onChange:a=>{e({...t,page:+a})},size:"small",variant:"minimal"})})}),(0,_r.jsxs)(F,{direction:"row",gap:"xs",align:"center",children:[(0,_r.jsx)(Ln.Button,{onClick:()=>e({...t,page:n-1}),disabled:n===1,accessibleWhenDisabled:!0,label:(0,Vt.__)("Previous page"),icon:(0,Vt.isRTL)()?Gi:Yi,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,_r.jsx)(Ln.Button,{onClick:()=>e({...t,page:n+1}),disabled:n>=o,accessibleWhenDisabled:!0,label:(0,Vt.__)("Next page"),icon:(0,Vt.isRTL)()?Yi:Gi,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})}var lf=(0,Zo.memo)(uu);var cf=c(R(),1);function ba(t){return(0,ha.useMemo)(()=>t?.every(e=>e.supportsBulk),[t])}var df=c(H(),1);var ff=c(R(),1),cu=(0,df.forwardRef)(({className:t,previewSize:e,...r},o)=>(0,ff.jsx)("div",{ref:o,className:z("dataviews-view-grid-items",t),style:{gridTemplateColumns:e&&`repeat(auto-fill, minmax(${e}px, 1fr))`},...r}));var Z=c(R(),1),{Badge:d0}=K(Ct.privateApis);function mf({view:t,multiselect:e,selection:r,onChangeSelection:o,getItemId:n,item:i,mediaField:a,titleField:l,descriptionField:s,regularFields:u,badgeFields:d,config:p,posinset:f,setsize:m}){let{showTitle:v=!0,showMedia:_=!0,showDescription:h=!0}=t,x=n(i),y=r.includes(x),S=a?.render?(0,Z.jsx)(a.render,{item:i,field:a,config:p}):null,V=v&&l?.render?(0,Z.jsx)(l.render,{item:i,field:l}):null;return(0,Z.jsxs)(Ct.Composite.Item,{"aria-label":l?l.getValue({item:i})||(0,Bn.__)("(no title)"):void 0,render:({children:O,...N})=>(0,Z.jsx)(F,{direction:"column",children:O,...N}),role:"option","aria-posinset":f,"aria-setsize":m,className:z("dataviews-view-picker-grid__card",{"is-selected":y}),"aria-selected":y,onClick:()=>{if(y)o(r.filter(O=>x!==O));else{let O=e?[...r,x]:[x];o(O)}},children:[_&&S&&(0,Z.jsx)("div",{className:"dataviews-view-picker-grid__media",children:S}),_&&S&&(0,Z.jsx)(Kr,{item:i,selection:r,onChangeSelection:o,getItemId:n,titleField:l,disabled:!1,"aria-hidden":!0,tabIndex:-1}),v&&(0,Z.jsx)(F,{direction:"row",justify:"space-between",className:"dataviews-view-picker-grid__title-actions",children:(0,Z.jsx)("div",{className:"dataviews-view-picker-grid__title-field dataviews-title-field",children:V})}),(0,Z.jsxs)(F,{direction:"column",gap:"xs",children:[h&&s?.render&&(0,Z.jsx)(s.render,{item:i,field:s}),!!d?.length&&(0,Z.jsx)(F,{direction:"row",className:"dataviews-view-picker-grid__badge-fields",gap:"sm",wrap:"wrap",align:"top",justify:"flex-start",children:d.map(O=>(0,Z.jsx)(d0,{className:"dataviews-view-picker-grid__field-value",children:(0,Z.jsx)(O.render,{item:i,field:O})},O.id))}),!!u?.length&&(0,Z.jsx)(F,{direction:"column",className:"dataviews-view-picker-grid__fields",gap:"xs",children:u.map(O=>(0,Z.jsx)(Ct.Flex,{className:"dataviews-view-picker-grid__field",gap:1,justify:"flex-start",expanded:!0,style:{height:"auto"},direction:"row",children:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(Ct.FlexItem,{className:"dataviews-view-picker-grid__field-name",children:O.header}),(0,Z.jsx)(Ct.FlexItem,{className:"dataviews-view-picker-grid__field-value",style:{maxHeight:"none"},children:(0,Z.jsx)(O.render,{item:i,field:O})})]})},O.id))})]})]},x)}function gf({groupName:t,groupField:e,showLabel:r=!0,children:o}){let n=(0,pf.useInstanceId)(gf,"dataviews-view-picker-grid-group__header");return(0,Z.jsxs)(F,{direction:"column",gap:"sm",role:"group","aria-labelledby":n,children:[(0,Z.jsx)("h3",{className:"dataviews-view-picker-grid-group__header",id:n,children:r?(0,Bn.sprintf)((0,Bn.__)("%1$s: %2$s"),e.label,t):t}),o]},t)}function f0({actions:t,data:e,fields:r,getItemId:o,isLoading:n,onChangeSelection:i,selection:a,view:l,className:s,empty:u}){let{resizeObserverRef:d,paginationInfo:p,itemListLabel:f}=(0,vf.useContext)(G),m=r.find(T=>T.id===l?.titleField),v=r.find(T=>T.id===l?.mediaField),_=r.find(T=>T.id===l?.descriptionField),h=l.fields??[],{regularFields:x,badgeFields:y}=h.reduce((T,g)=>{let I=r.find(C=>C.id===g);if(!I)return T;let w=l.layout?.badgeFields?.includes(g)?"badgeFields":"regularFields";return T[w].push(I),T},{regularFields:[],badgeFields:[]}),S=!!e?.length,V=l.layout?.previewSize,O=ba(t),N="900px",D=l.groupBy?.field?r.find(T=>T.id===l.groupBy?.field):null,E=D?Mt(e,D):null,A=l.infiniteScrollEnabled&&!E,k=l?.page??1,b=l?.perPage??0,P=A?p?.totalItems:void 0;return(0,Z.jsxs)(Z.Fragment,{children:[S&&D&&E&&(0,Z.jsx)(Ct.Composite,{virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":O,className:z("dataviews-view-picker-grid",s),"aria-label":f,render:({children:T,...g})=>(0,Z.jsx)(F,{direction:"column",gap:"lg",children:T,...g}),children:Array.from(E.entries()).map(([T,g])=>(0,Z.jsx)(gf,{groupName:T,groupField:D,showLabel:l.groupBy?.showLabel!==!1,children:(0,Z.jsx)(cu,{previewSize:V,style:{gridTemplateColumns:V&&`repeat(auto-fill, minmax(${V}px, 1fr))`},"aria-busy":n,ref:d,children:g.map(I=>{let w=(k-1)*b+e.indexOf(I)+1;return(0,Z.jsx)(mf,{view:l,multiselect:O,selection:a,onChangeSelection:i,getItemId:o,item:I,mediaField:v,titleField:m,descriptionField:_,regularFields:x,badgeFields:y,config:{sizes:N},posinset:w,setsize:P},o(I))})})},T))}),S&&!E&&(0,Z.jsx)(Ct.Composite,{render:(0,Z.jsx)(cu,{className:z("dataviews-view-picker-grid",s),previewSize:V,"aria-busy":n,ref:d}),virtualFocus:!0,orientation:"horizontal",role:"listbox","aria-multiselectable":O,"aria-label":f,children:e.map((T,g)=>{let I=A?g+1:void 0;return A||(I=(k-1)*b+g+1),(0,Z.jsx)(mf,{view:l,multiselect:O,selection:a,onChangeSelection:i,getItemId:o,item:T,mediaField:v,titleField:m,descriptionField:_,regularFields:x,badgeFields:y,config:{sizes:N},posinset:I,setsize:P},o(T))})}),!S&&(0,Z.jsx)("div",{className:z({"dataviews-loading":n,"dataviews-no-results":!n}),children:n?(0,Z.jsx)("p",{children:(0,Z.jsx)(Ct.Spinner,{})}):u}),S&&n&&(0,Z.jsx)("p",{className:"dataviews-loading-more",children:(0,Z.jsx)(Ct.Spinner,{})})]})}var hf=f0;var xa=c(U(),1),_o=c(q(),1),Ft=c(H(),1);var J=c(R(),1);function m0({item:t,fields:e,column:r,align:o}){let n=e.find(a=>a.id===r);if(!n)return null;let i=z("dataviews-view-table__cell-content-wrapper",{"dataviews-view-table__cell-align-end":o==="end","dataviews-view-table__cell-align-center":o==="center"});return(0,J.jsx)("div",{className:i,children:(0,J.jsx)(n.render,{item:t,field:n})})}function bf({item:t,fields:e,id:r,view:o,titleField:n,mediaField:i,descriptionField:a,selection:l,getItemId:s,onChangeSelection:u,multiselect:d,posinset:p}){let{paginationInfo:f}=(0,Ft.useContext)(G),m=l.includes(r),[v,_]=(0,Ft.useState)(!1),{showTitle:h=!0,showMedia:x=!0,showDescription:y=!0,infiniteScrollEnabled:S}=o,V=()=>{_(!0)},O=()=>{_(!1)},N=o.fields??[],D=n&&h||i&&x||a&&y;return(0,J.jsxs)(_o.Composite.Item,{render:({children:E,...A})=>(0,J.jsx)("tr",{className:z("dataviews-view-table__row",{"is-selected":m,"is-hovered":v}),onMouseEnter:V,onMouseLeave:O,children:E,...A}),"aria-selected":m,"aria-setsize":f.totalItems||void 0,"aria-posinset":p,role:S?"article":"option",onClick:()=>{if(m)u(l.filter(E=>r!==E));else{let E=d?[...l,r]:[r];u(E)}},children:[(0,J.jsx)("td",{className:"dataviews-view-table__checkbox-column",role:"presentation",children:(0,J.jsx)("div",{className:"dataviews-view-table__cell-content-wrapper",children:(0,J.jsx)(Kr,{item:t,selection:l,onChangeSelection:u,getItemId:s,titleField:n,disabled:!1,"aria-hidden":!0,tabIndex:-1})})}),D&&(0,J.jsx)("td",{role:"presentation",children:(0,J.jsx)(la,{item:t,titleField:h?n:void 0,mediaField:x?i:void 0,descriptionField:y?a:void 0,isItemClickable:()=>!1})}),N.map(E=>{let{width:A,maxWidth:k,minWidth:b,align:P}=o.layout?.styles?.[E]??{};return(0,J.jsx)("td",{style:{width:A,maxWidth:k,minWidth:b},role:"presentation",children:(0,J.jsx)(m0,{fields:e,item:t,column:E,align:P})},E)})]},r)}function p0({actions:t,data:e,fields:r,getItemId:o,isLoading:n=!1,onChangeView:i,onChangeSelection:a,selection:l,setOpenedFilter:s,view:u,className:d,empty:p}){let f=(0,Ft.useRef)(new Map),m=(0,Ft.useRef)(void 0),[v,_]=(0,Ft.useState)(),h=ba(t)??!1;(0,Ft.useEffect)(()=>{m.current&&(m.current.focus(),m.current=void 0)});let x=(0,Ft.useId)();if(v){m.current=v,_(void 0);return}let y=w=>{let C=f.current.get(w.id),M=C?f.current.get(C.fallback):void 0;_(M?.node)},S=!!e?.length,V=r.find(w=>w.id===u.titleField),O=r.find(w=>w.id===u.mediaField),N=r.find(w=>w.id===u.descriptionField),D=u.groupBy?.field?r.find(w=>w.id===u.groupBy?.field):null,E=D?Mt(e,D):null,{showTitle:A=!0,showMedia:k=!0,showDescription:b=!0}=u,P=V&&A||O&&k||N&&b,T=u.fields??[],g=(w,C)=>M=>{M?f.current.set(w,{node:M,fallback:T[C>0?C-1:1]}):f.current.delete(w)},I=u.infiniteScrollEnabled&&!E;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)("table",{className:z("dataviews-view-table","dataviews-view-picker-table",d,{[`has-${u.layout?.density}-density`]:u.layout?.density&&["compact","comfortable"].includes(u.layout.density)}),"aria-busy":n,"aria-describedby":x,role:I?"feed":"listbox",children:[(0,J.jsx)("thead",{role:"presentation",children:(0,J.jsxs)("tr",{className:"dataviews-view-table__row",role:"presentation",children:[(0,J.jsx)("th",{className:"dataviews-view-table__checkbox-column",children:h&&(0,J.jsx)(Nn,{selection:l,onChangeSelection:a,data:e,actions:t,getItemId:o})}),P&&(0,J.jsx)("th",{children:V&&(0,J.jsx)(Uo,{ref:g(V.id,0),fieldId:V.id,view:u,fields:r,onChangeView:i,onHide:y,setOpenedFilter:s,canMove:!1})}),T.map((w,C)=>{let{width:M,maxWidth:j,minWidth:ae,align:ye}=u.layout?.styles?.[w]??{};return(0,J.jsx)("th",{style:{width:M,maxWidth:j,minWidth:ae,textAlign:ye},"aria-sort":u.sort?.direction&&u.sort?.field===w?ea[u.sort.direction]:void 0,scope:"col",children:(0,J.jsx)(Uo,{ref:g(w,C),fieldId:w,view:u,fields:r,onChangeView:i,onHide:y,setOpenedFilter:s,canMove:u.layout?.enableMoving??!0})},w)})]})}),S&&D&&E?Array.from(E.entries()).map(([w,C])=>(0,J.jsxs)(_o.Composite,{virtualFocus:!0,orientation:"vertical",render:(0,J.jsx)("tbody",{role:"group"}),children:[(0,J.jsx)("tr",{className:"dataviews-view-table__group-header-row",role:"presentation",children:(0,J.jsx)("td",{colSpan:T.length+(P?1:0)+1,className:"dataviews-view-table__group-header-cell",role:"presentation",children:u.groupBy?.showLabel===!1?w:(0,xa.sprintf)((0,xa.__)("%1$s: %2$s"),D.label,w)})}),C.map((M,j)=>(0,J.jsx)(bf,{item:M,fields:r,id:o(M)||j.toString(),view:u,titleField:V,mediaField:O,descriptionField:N,selection:l,getItemId:o,onChangeSelection:a,multiselect:h},o(M)))]},`group-${w}`)):(0,J.jsx)(_o.Composite,{render:(0,J.jsx)("tbody",{role:"presentation"}),virtualFocus:!0,orientation:"vertical",children:S&&e.map((w,C)=>(0,J.jsx)(bf,{item:w,fields:r,id:o(w)||C.toString(),view:u,titleField:V,mediaField:O,descriptionField:N,selection:l,getItemId:o,onChangeSelection:a,multiselect:h,posinset:C+1},o(w)))})]}),(0,J.jsxs)("div",{className:z({"dataviews-loading":n,"dataviews-no-results":!S&&!n}),id:x,children:[!S&&(n?(0,J.jsx)("p",{children:(0,J.jsx)(_o.Spinner,{})}):p),S&&n&&(0,J.jsx)("p",{className:"dataviews-loading-more",children:(0,J.jsx)(_o.Spinner,{})})]})]})}var xf=p0;var wf=c(q(),1),_f=c(U(),1),yf=c(H(),1);var Sf=c(R(),1),v0=[{value:120,breakpoint:1},{value:170,breakpoint:1},{value:230,breakpoint:1},{value:290,breakpoint:1112},{value:350,breakpoint:1636},{value:430,breakpoint:588}];function du(){let t=(0,yf.useContext)(G),e=t.view,r=v0.filter(a=>t.containerWidth>=a.breakpoint),o=e.layout?.previewSize??230,n=r.map((a,l)=>({...a,index:l})).filter(a=>a.value<=o).sort((a,l)=>l.value-a.value)[0]?.index??0,i=r.map((a,l)=>({value:l}));return(0,Sf.jsx)(wf.RangeControl,{__next40pxDefaultSize:!0,showTooltip:!1,label:(0,_f.__)("Preview size"),value:n,min:0,max:r.length-1,withInputField:!1,onChange:(a=0)=>{t.onChangeView({...e,layout:{...e.layout,previewSize:r[a].value}})},step:1,marks:i})}var Xo=c(q(),1),Qo=c(U(),1),Cf=c(H(),1);var Jo=c(R(),1);function jn(){let t=(0,Cf.useContext)(G),e=t.view;return(0,Jo.jsxs)(Xo.__experimentalToggleGroupControl,{size:"__unstable-large",label:(0,Qo.__)("Density"),value:e.layout?.density||"balanced",onChange:r=>{t.onChangeView({...e,layout:{...e.layout,density:r}})},isBlock:!0,children:[(0,Jo.jsx)(Xo.__experimentalToggleGroupControlOption,{value:"comfortable",label:(0,Qo._x)("Comfortable","Density option for DataView layout")},"comfortable"),(0,Jo.jsx)(Xo.__experimentalToggleGroupControlOption,{value:"balanced",label:(0,Qo._x)("Balanced","Density option for DataView layout")},"balanced"),(0,Jo.jsx)(Xo.__experimentalToggleGroupControlOption,{value:"compact",label:(0,Qo._x)("Compact","Density option for DataView layout")},"compact")]})}var eo=[{type:Ho,label:(0,yr.__)("Table"),component:qd,icon:Pi,viewConfigOptions:jn},{type:ra,label:(0,yr.__)("Grid"),component:Zd,icon:Ai,viewConfigOptions:du},{type:hd,label:(0,yr.__)("List"),component:su,icon:(0,yr.isRTL)()?_l:Sl,viewConfigOptions:jn},{type:bd,label:(0,yr.__)("Activity"),component:sf,icon:Fl,viewConfigOptions:jn},{type:xd,label:(0,yr.__)("Grid"),component:hf,icon:Ai,viewConfigOptions:du,isPicker:!0},{type:wd,label:(0,yr.__)("Table"),component:xf,icon:Pi,viewConfigOptions:jn,isPicker:!0}];var vn=c(H(),1);var Gt=c(q(),1),Ir=c(U(),1),Qa=c(H(),1);function Hn(...t){}function fu(t,e){if(g0(t)){let r=h0(e)?e():e;return t(r)}return t}function g0(t){return typeof t=="function"}function h0(t){return typeof t=="function"}function Et(t,e){return typeof Object.hasOwn=="function"?Object.hasOwn(t,e):Object.prototype.hasOwnProperty.call(t,e)}function to(...t){return(...e)=>{for(let r of t)typeof r=="function"&&r(...e)}}function zn(t){return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function mu(t,e){let r={...t};for(let o of e)Et(r,o)&&delete r[o];return r}function pu(t,e){let r={};for(let o of e)Et(t,o)&&(r[o]=t[o]);return r}function Wn(t){return t}function Qe(t,e){if(!t)throw typeof e!="string"?new Error("Invariant failed"):new Error(e)}function vu(t){return Object.keys(t)}function gu(t,...e){let r=typeof t=="function"?t(...e):t;return r==null?!1:!r}function yo(t){return t.disabled||t["aria-disabled"]===!0||t["aria-disabled"]==="true"}function Je(t){let e={};for(let r in t)t[r]!==void 0&&(e[r]=t[r]);return e}function ee(...t){for(let e of t)if(e!==void 0)return e}var Ef=c(le(),1);function Pf(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function b0(t){return!t||!(0,Ef.isValidElement)(t)?!1:"ref"in t.props||"ref"in t}function Tf(t){return b0(t)?{...t.props}.ref||t.ref:null}function Af(t,e){let r={...t};for(let o in e){if(!Et(e,o))continue;if(o==="className"){let i="className";r[i]=t[i]?`${t[i]} ${e[i]}`:e[i];continue}if(o==="style"){let i="style";r[i]=t[i]?{...t[i],...e[i]}:e[i];continue}let n=e[o];if(typeof n=="function"&&o.startsWith("on")){let i=t[o];if(typeof i=="function"){r[o]=(...a)=>{n(...a),i(...a)};continue}}r[o]=n}return r}var ro=x0();function x0(){var t;return typeof window<"u"&&!!((t=window.document)!=null&&t.createElement)}function Sr(t){return t?"self"in t?t.document:t.ownerDocument||document:document}function So(t,e=!1){var r;let{activeElement:o}=Sr(t);if(!o?.nodeName)return null;if(hu(o)&&((r=o.contentDocument)!=null&&r.body))return So(o.contentDocument.body,e);if(e){let n=o.getAttribute("aria-activedescendant");if(n){let i=Sr(o).getElementById(n);if(i)return i}}return o}function tr(t,e){return t===e||t.contains(e)}function hu(t){return t.tagName==="IFRAME"}function Cr(t){let e=t.tagName.toLowerCase();return e==="button"?!0:e==="input"&&t.type?w0.indexOf(t.type)!==-1:!1}var w0=["button","color","file","image","reset","submit"];function bu(t){if(typeof t.checkVisibility=="function")return t.checkVisibility();let e=t;return e.offsetWidth>0||e.offsetHeight>0||t.getClientRects().length>0}function vt(t){try{let e=t instanceof HTMLInputElement&&t.selectionStart!==null,r=t.tagName==="TEXTAREA";return e||r||!1}catch{return!1}}function Gn(t){return t.isContentEditable||vt(t)}function xu(t){if(vt(t))return t.value;if(t.isContentEditable){let e=Sr(t).createRange();return e.selectNodeContents(t),e.toString()}return""}function en(t){let e=0,r=0;if(vt(t))e=t.selectionStart||0,r=t.selectionEnd||0;else if(t.isContentEditable){let o=Sr(t).getSelection();if(o?.rangeCount&&o.anchorNode&&tr(t,o.anchorNode)&&o.focusNode&&tr(t,o.focusNode)){let n=o.getRangeAt(0),i=n.cloneRange();i.selectNodeContents(t),i.setEnd(n.startContainer,n.startOffset),e=i.toString().length,i.setEnd(n.endContainer,n.endOffset),r=i.toString().length}}return{start:e,end:r}}function wu(t,e){let r=["dialog","menu","listbox","tree","grid"],o=t?.getAttribute("role");return o&&r.indexOf(o)!==-1?o:e}function tn(t){if(!t)return null;let e=r=>r==="auto"||r==="scroll";if(t.clientHeight&&t.scrollHeight>t.clientHeight){let{overflowY:r}=getComputedStyle(t);if(e(r))return t}else if(t.clientWidth&&t.scrollWidth>t.clientWidth){let{overflowX:r}=getComputedStyle(t);if(e(r))return t}return tn(t.parentElement)||document.scrollingElement||document.body}function qn(t,...e){/text|search|password|tel|url/i.test(t.type)&&t.setSelectionRange(...e)}function _u(t,e){let r=t.map((n,i)=>[i,n]),o=!1;return r.sort(([n,i],[a,l])=>{let s=e(i),u=e(l);return s===u||!s||!u?0:_0(s,u)?(n>a&&(o=!0),-1):(ni):t}function _0(t,e){return!!(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_PRECEDING)}function yu(){return ro&&!!navigator.maxTouchPoints}function wa(){return ro?/mac|iphone|ipad|ipod/i.test(navigator.platform):!1}function Co(){return ro&&wa()&&/apple/i.test(navigator.vendor)}function Su(){return ro&&/firefox\//i.test(navigator.userAgent)}function _a(t){return!!(t.currentTarget&&!tr(t.currentTarget,t.target))}function lt(t){return t.target===t.currentTarget}function Of(t){let e=t.currentTarget;if(!e)return!1;let r=wa();if(r&&!t.metaKey||!r&&!t.ctrlKey)return!1;let o=e.tagName.toLowerCase();return o==="a"||o==="button"&&e.type==="submit"||o==="input"&&e.type==="submit"}function If(t){let e=t.currentTarget;if(!e)return!1;let r=e.tagName.toLowerCase();return t.altKey?r==="a"||r==="button"&&e.type==="submit"||r==="input"&&e.type==="submit":!1}function Eo(t,e){let r=new FocusEvent("blur",e),o=t.dispatchEvent(r),n={...e,bubbles:!0};return t.dispatchEvent(new FocusEvent("focusout",n)),o}function Rf(t,e,r){let o=new KeyboardEvent(e,r);return t.dispatchEvent(o)}function Cu(t,e){let r=new MouseEvent("click",e);return t.dispatchEvent(r)}function ya(t,e){let r=e||t.currentTarget,o=t.relatedTarget;return!o||!tr(r,o)}function oo(t,e,r,o){let i=(l=>{if(o){let u=setTimeout(l,o);return()=>clearTimeout(u)}let s=requestAnimationFrame(l);return()=>cancelAnimationFrame(s)})(()=>{t.removeEventListener(e,a,!0),r()}),a=()=>{i(),r()};return t.addEventListener(e,a,{once:!0,capture:!0}),i}function rr(t,e,r,o=window){let n=[];try{o.document.addEventListener(t,e,r);for(let a of Array.from(o.frames))n.push(rr(t,e,r,a))}catch{}return()=>{try{o.document.removeEventListener(t,e,r)}catch{}for(let a of n)a()}}var y0=c(le(),1),me=c(le(),1),Eu={...y0},Vf=Eu.useId,NE=Eu.useDeferredValue,kf=Eu.useInsertionEffect,Te=ro?me.useLayoutEffect:me.useEffect;function S0(t){let[e]=(0,me.useState)(t);return e}function Ff(t){let e=(0,me.useRef)(t);return Te(()=>{e.current=t}),e}function te(t){let e=(0,me.useRef)(()=>{throw new Error("Cannot call an event handler while rendering.")});return kf?kf(()=>{e.current=t}):e.current=t,(0,me.useCallback)((...r)=>{var o;return(o=e.current)==null?void 0:o.call(e,...r)},[])}function Lf(t){let[e,r]=(0,me.useState)(null);return Te(()=>{if(e==null||!t)return;let o=null;return t(n=>(o=n,e)),()=>{t(o)}},[e,t]),[e,r]}function Oe(...t){return(0,me.useMemo)(()=>{if(t.some(Boolean))return e=>{for(let r of t)Pf(r,e)}},t)}function Lt(t){if(Vf){let o=Vf();return t||o}let[e,r]=(0,me.useState)(t);return Te(()=>{if(t||e)return;let o=Math.random().toString(36).slice(2,8);r(`id-${o}`)},[t,e]),t||e}function Bf(t,e){let r=i=>{if(typeof i=="string")return i},[o,n]=(0,me.useState)(()=>r(e));return Te(()=>{let i=t&&"current"in t?t.current:t;n(i?.tagName.toLowerCase()||r(e))},[t,e]),o}function jf(t,e,r){let o=S0(r),[n,i]=(0,me.useState)(o);return(0,me.useEffect)(()=>{let a=t&&"current"in t?t.current:t;if(!a)return;let l=()=>{let u=a.getAttribute(e);i(u??o)},s=new MutationObserver(l);return s.observe(a,{attributeFilter:[e]}),l(),()=>s.disconnect()},[t,e,o]),n}function or(t,e){let r=(0,me.useRef)(!1);(0,me.useEffect)(()=>{if(r.current)return t();r.current=!0},e),(0,me.useEffect)(()=>()=>{r.current=!1},[])}function Hf(t,e){let r=(0,me.useRef)(!1);Te(()=>{if(r.current)return t();r.current=!0},e),Te(()=>()=>{r.current=!1},[])}function zf(){return(0,me.useReducer)(()=>[],[])}function Me(t){return te(typeof t=="function"?t:()=>t)}function nr(t,e,r=[]){let o=(0,me.useCallback)(n=>(t.wrapElement&&(n=t.wrapElement(n)),e(n)),[...r,t.wrapElement]);return{...t,wrapElement:o}}function Wf(t,e,r){let o=t.onLoadedMetadataCapture,n=(0,me.useMemo)(()=>Object.assign(()=>{},{...o,[e]:r}),[o,e,r]);return[o?.[e],{onLoadedMetadataCapture:n}]}var Df=!1;function Gf(){return(0,me.useEffect)(()=>{Df||(rr("mousemove",E0,!0),rr("mousedown",Sa,!0),rr("mouseup",Sa,!0),rr("keydown",Sa,!0),rr("scroll",Sa,!0),Df=!0)},[]),te(()=>Pu)}var Pu=!1,Nf=0,Mf=0;function C0(t){let e=t.movementX||t.screenX-Nf,r=t.movementY||t.screenY-Mf;return Nf=t.screenX,Mf=t.screenY,e||r||!1}function E0(t){C0(t)&&(Pu=!0)}function Sa(){Pu=!1}var gt=c(le(),1),Po=c(R(),1);function pe(t){let e=gt.forwardRef((r,o)=>t({...r,ref:o}));return e.displayName=t.displayName||t.name,e}function no(t,e){return gt.memo(t,e)}function xe(t,e){let{wrapElement:r,render:o,...n}=e,i=Oe(e.ref,Tf(o)),a;if(gt.isValidElement(o)){let l={...o.props,ref:i};a=gt.cloneElement(o,Af(n,l))}else o?a=o(n):a=(0,Po.jsx)(t,{...n});return r?r(a):a}function we(t){let e=(r={})=>t(r);return e.displayName=t.name,e}function Pt(t=[],e=[]){let r=gt.createContext(void 0),o=gt.createContext(void 0),n=()=>gt.useContext(r),i=(u=!1)=>{let d=gt.useContext(o),p=n();return u?d:d||p},a=()=>{let u=gt.useContext(o),d=n();if(!(u&&u===d))return d},l=u=>t.reduceRight((d,p)=>(0,Po.jsx)(p,{...u,children:d}),(0,Po.jsx)(r.Provider,{...u}));return{context:r,scopedContext:o,useContext:n,useScopedContext:i,useProviderContext:a,ContextProvider:l,ScopedContextProvider:u=>(0,Po.jsx)(l,{...u,children:e.reduceRight((d,p)=>(0,Po.jsx)(p,{...u,children:d}),(0,Po.jsx)(o.Provider,{...u}))})}}var Yn=Pt(),qf=Yn.useContext,HE=Yn.useScopedContext,zE=Yn.useProviderContext,Yf=Yn.ContextProvider,Uf=Yn.ScopedContextProvider;var Tu=c(le(),1),Un=Pt([Yf],[Uf]),Ca=Un.useContext,YE=Un.useScopedContext,$f=Un.useProviderContext,rn=Un.ContextProvider,Ea=Un.ScopedContextProvider,Kf=(0,Tu.createContext)(void 0),Zf=(0,Tu.createContext)(void 0);function Xf(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function ir(t,e){return e&&t.item(e)||null}function Qf(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function Jf(t,e=!1){if(vt(t))t.setSelectionRange(e?t.value.length:0,t.value.length);else if(t.isContentEditable){let r=Sr(t).getSelection();r?.selectAllChildren(t),e&&r?.collapseToEnd()}}var Au=Symbol("FOCUS_SILENTLY");function em(t){t[Au]=!0,t.focus({preventScroll:!0})}function tm(t){let e=t[Au];return delete t[Au],e}function To(t,e,r){if(!e||e===r)return!1;let o=t.item(e.id);return!(!o||r&&o.element===r)}var Pa=c(le(),1),P0="div",Ou=we(function({store:e,shouldRegisterItem:r=!0,getItem:o=Wn,element:n,...i}){let a=qf();e=e||a;let l=Lt(i.id),s=(0,Pa.useRef)(n);return(0,Pa.useEffect)(()=>{let u=s.current;if(!l||!u||!r)return;let d=o({id:l,element:u});return e?.renderItem(d)},[l,r,o,e]),i={...i,ref:Oe(s,i.ref)},Je(i)}),eP=pe(function(e){let r=Ou(e);return xe(P0,r)});var rm=c(le(),1),om=(0,rm.createContext)(!0);var nm="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function $n(t){return!(!t.matches(nm)||!bu(t)||t.closest("[inert]"))}function im(t){for(;t&&!$n(t);)t=t.closest(nm);return t||null}function Bt(t){let e=So(t);if(!e)return!1;if(e===t)return!0;let r=e.getAttribute("aria-activedescendant");return r?r===t.id:!1}function Iu(t){let e=So(t);if(!e)return!1;if(tr(t,e))return!0;let r=e.getAttribute("aria-activedescendant");return!r||!("id"in t)?!1:r===t.id?!0:!!t.querySelector(`#${CSS.escape(r)}`)}function am(t){!Iu(t)&&$n(t)&&t.focus()}function sm(t,e){"scrollIntoView"in t?(t.focus({preventScroll:!0}),t.scrollIntoView({block:"nearest",inline:"nearest",...e})):t.focus()}var kt=c(le(),1),T0="div",lm=Co(),A0=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"],O0=Symbol("safariFocusAncestor");function um(t,e){t&&(t[O0]=e)}function I0(t){let{tagName:e,readOnly:r,type:o}=t;return e==="TEXTAREA"&&!r||e==="SELECT"&&!r?!0:e==="INPUT"&&!r?A0.includes(o):!!(t.isContentEditable||t.getAttribute("role")==="combobox"&&t.dataset.name)}function R0(t){return"labels"in t?t.labels:null}function cm(t){return t.tagName.toLowerCase()==="input"&&t.type?t.type==="radio"||t.type==="checkbox":!1}function V0(t){return t?t==="button"||t==="summary"||t==="input"||t==="select"||t==="textarea"||t==="a":!0}function k0(t){return t?t==="button"||t==="input"||t==="select"||t==="textarea":!0}function D0(t,e,r,o,n){return t?e?r&&!o?-1:void 0:r?n:n||0:n}function Ru(t,e){return te(r=>{t?.(r),!r.defaultPrevented&&e&&(r.stopPropagation(),r.preventDefault())})}var dm=!1,Vu=!0;function N0(t){let e=t.target;e&&"hasAttribute"in e&&(e.hasAttribute("data-focus-visible")||(Vu=!1))}function M0(t){t.metaKey||t.ctrlKey||t.altKey||(Vu=!0)}var Kn=we(function({focusable:e=!0,accessibleWhenDisabled:r,autoFocus:o,onFocusVisible:n,...i}){let a=(0,kt.useRef)(null);(0,kt.useEffect)(()=>{e&&(dm||(rr("mousedown",N0,!0),rr("keydown",M0,!0),dm=!0))},[e]),lm&&(0,kt.useEffect)(()=>{if(!e)return;let g=a.current;if(!g||!cm(g))return;let I=R0(g);if(!I)return;let w=()=>queueMicrotask(()=>g.focus());for(let C of I)C.addEventListener("mouseup",w);return()=>{for(let C of I)C.removeEventListener("mouseup",w)}},[e]);let l=e&&yo(i),s=!!l&&!r,[u,d]=(0,kt.useState)(!1);(0,kt.useEffect)(()=>{e&&s&&u&&d(!1)},[e,s,u]),(0,kt.useEffect)(()=>{if(!e||!u)return;let g=a.current;if(!g||typeof IntersectionObserver>"u")return;let I=new IntersectionObserver(()=>{$n(g)||d(!1)});return I.observe(g),()=>I.disconnect()},[e,u]);let p=Ru(i.onKeyPressCapture,l),f=Ru(i.onMouseDownCapture,l),m=Ru(i.onClickCapture,l),v=i.onMouseDown,_=te(g=>{if(v?.(g),g.defaultPrevented||!e)return;let I=g.currentTarget;if(!lm||_a(g)||!Cr(I)&&!cm(I))return;let w=!1,C=()=>{w=!0},M={capture:!0,once:!0};I.addEventListener("focusin",C,M);let j=im(I.parentElement);um(j,!0),oo(I,"mouseup",()=>{I.removeEventListener("focusin",C,!0),um(j,!1),!w&&am(I)})}),h=(g,I)=>{if(I&&(g.currentTarget=I),!e)return;let w=g.currentTarget;w&&Bt(w)&&(n?.(g),!g.defaultPrevented&&(w.dataset.focusVisible="true",d(!0)))},x=i.onKeyDownCapture,y=te(g=>{if(x?.(g),g.defaultPrevented||!e||u||g.metaKey||g.altKey||g.ctrlKey||!lt(g))return;let I=g.currentTarget;oo(I,"focusout",()=>h(g,I))}),S=i.onFocusCapture,V=te(g=>{if(S?.(g),g.defaultPrevented||!e)return;if(!lt(g)){d(!1);return}let I=g.currentTarget,w=()=>h(g,I);Vu||I0(g.target)?oo(g.target,"focusout",w):d(!1)}),O=i.onBlur,N=te(g=>{O?.(g),e&&ya(g)&&(g.currentTarget.removeAttribute("data-focus-visible"),d(!1))}),D=(0,kt.useContext)(om),E=te(g=>{e&&o&&g&&D&&queueMicrotask(()=>{Bt(g)||$n(g)&&g.focus()})}),A=Bf(a),k=e&&V0(A),b=e&&k0(A),P=i.style,T=(0,kt.useMemo)(()=>s?{pointerEvents:"none",...P}:P,[s,P]);return i={"data-focus-visible":e&&u||void 0,"data-autofocus":o||void 0,"aria-disabled":l||void 0,...i,ref:Oe(a,E,i.ref),style:T,tabIndex:D0(e,s,k,b,i.tabIndex),disabled:b&&s?!0:void 0,contentEditable:l?void 0:i.contentEditable,onKeyPressCapture:p,onClickCapture:m,onMouseDownCapture:f,onMouseDown:_,onKeyDownCapture:y,onFocusCapture:V,onBlur:N},Je(i)}),gP=pe(function(e){let r=Kn(e);return xe(T0,r)});var io=c(le(),1),F0="button";function fm(t){if(!t.isTrusted)return!1;let e=t.currentTarget;return t.key==="Enter"?Cr(e)||e.tagName==="SUMMARY"||e.tagName==="A":t.key===" "?Cr(e)||e.tagName==="SUMMARY"||e.tagName==="INPUT"||e.tagName==="SELECT":!1}var L0=Symbol("command"),ku=we(function({clickOnEnter:e=!0,clickOnSpace:r=!0,...o}){let n=(0,io.useRef)(null),[i,a]=(0,io.useState)(!1);(0,io.useEffect)(()=>{n.current&&a(Cr(n.current))},[]);let[l,s]=(0,io.useState)(!1),u=(0,io.useRef)(!1),d=yo(o),[p,f]=Wf(o,L0,!0),m=o.onKeyDown,v=te(x=>{m?.(x);let y=x.currentTarget;if(x.defaultPrevented||p||d||!lt(x)||vt(y)||y.isContentEditable)return;let S=e&&x.key==="Enter",V=r&&x.key===" ",O=x.key==="Enter"&&!e,N=x.key===" "&&!r;if(O||N){x.preventDefault();return}if(S||V){let D=fm(x);if(S){if(!D){x.preventDefault();let{view:E,...A}=x,k=()=>Cu(y,A);Su()?oo(y,"keyup",k):queueMicrotask(k)}}else V&&(u.current=!0,D||(x.preventDefault(),s(!0)))}}),_=o.onKeyUp,h=te(x=>{if(_?.(x),x.defaultPrevented||p||d||x.metaKey)return;let y=r&&x.key===" ";if(u.current&&y&&(u.current=!1,!fm(x))){x.preventDefault(),s(!1);let S=x.currentTarget,{view:V,...O}=x;queueMicrotask(()=>Cu(S,O))}});return o={"data-active":l||void 0,type:i?"button":void 0,...f,...o,ref:Oe(n,o.ref),onKeyDown:v,onKeyUp:h},o=Kn(o),o}),EP=pe(function(e){let r=ku(e);return xe(F0,r)});function Ao(t,e){let r=t.__unstableInternals;return Qe(r,"Invalid store"),r[e]}function ht(t,...e){let r=t,o=r,n=Symbol(),i=Hn,a=new Set,l=new Set,s=new Set,u=new Set,d=new Set,p=new WeakMap,f=new WeakMap,m=E=>(s.add(E),()=>s.delete(E)),v=()=>{let E=a.size,A=Symbol();a.add(A);let k=()=>{a.delete(A),!a.size&&i()};if(E)return k;let b=vu(r).map(g=>to(...e.map(I=>{var w;let C=(w=I?.getState)==null?void 0:w.call(I);if(C&&Et(C,g))return Ke(I,[g],M=>{N(g,M[g],!0)})}))),P=[];for(let g of s)P.push(g());let T=e.map(on);return i=to(...b,...P,...T),k},_=(E,A,k=u)=>(k.add(A),f.set(A,E),()=>{var b;(b=p.get(A))==null||b(),p.delete(A),f.delete(A),k.delete(A)}),h=(E,A)=>_(E,A),x=(E,A)=>(p.set(A,A(r,r)),_(E,A)),y=(E,A)=>(p.set(A,A(r,o)),_(E,A,d)),S=E=>ht(pu(r,E),D),V=E=>ht(mu(r,E),D),O=()=>r,N=(E,A,k=!1)=>{var b;if(!Et(r,E))return;let P=fu(A,r[E]);if(P===r[E])return;if(!k)for(let w of e)(b=w?.setState)==null||b.call(w,E,P);let T=r;r={...r,[E]:P};let g=Symbol();n=g,l.add(E);let I=(w,C,M)=>{var j;let ae=f.get(w),ye=De=>M?M.has(De):De===E;(!ae||ae.some(ye))&&((j=p.get(w))==null||j(),p.set(w,w(r,C)))};for(let w of u)I(w,T);queueMicrotask(()=>{if(n!==g)return;let w=r;for(let C of d)I(C,o,l);o=w,l.clear()})},D={getState:O,setState:N,__unstableInternals:{setup:m,init:v,subscribe:h,sync:x,batch:y,pick:S,omit:V}};return D}function $e(t,...e){if(t)return Ao(t,"setup")(...e)}function on(t,...e){if(t)return Ao(t,"init")(...e)}function nn(t,...e){if(t)return Ao(t,"subscribe")(...e)}function Ke(t,...e){if(t)return Ao(t,"sync")(...e)}function ao(t,...e){if(t)return Ao(t,"batch")(...e)}function Zn(t,...e){if(t)return Ao(t,"omit")(...e)}function Du(t,...e){if(t)return Ao(t,"pick")(...e)}function Oo(...t){var e;let r={};for(let n of t){let i=(e=n?.getState)==null?void 0:e.call(n);i&&Object.assign(r,i)}let o=ht(r,...t);return Object.assign({},...t,o)}var ar=c(le(),1),mm=c(ld(),1),{useSyncExternalStore:pm}=mm.default,vm=()=>()=>{};function an(t,e=Wn){let r=ar.useCallback(n=>t?nn(t,null,n):vm(),[t]),o=()=>{let n=typeof e=="string"?e:null,i=typeof e=="function"?e:null,a=t?.getState();if(i)return i(a);if(a&&n&&Et(a,n))return a[n]};return pm(r,o,o)}function Aa(t,e){let r=ar.useRef({}),o=ar.useCallback(i=>t?nn(t,null,i):vm(),[t]),n=()=>{let i=t?.getState(),a=!1,l=r.current;for(let s in e){let u=e[s];if(typeof u=="function"){let d=u(i);d!==l[s]&&(l[s]=d,a=!0)}if(typeof u=="string"){if(!i||!Et(i,u))continue;let d=i[u];d!==l[s]&&(l[s]=d,a=!0)}}return a&&(r.current={...l}),r.current};return pm(o,n,n)}function Ie(t,e,r,o){let n=Et(e,r)?e[r]:void 0,i=o?e[o]:void 0,a=Ff({value:n,setValue:i});Te(()=>Ke(t,[r],(l,s)=>{let{value:u,setValue:d}=a.current;d&&l[r]!==s[r]&&l[r]!==u&&d(l[r])}),[t,r]),Te(()=>{if(n!==void 0)return t.setState(r,n),ao(t,[r],()=>{n!==void 0&&t.setState(r,n)})})}function sn(t,e){let[r,o]=ar.useState(()=>t(e));Te(()=>on(r),[r]);let n=ar.useCallback(l=>an(r,l),[r]),i=ar.useMemo(()=>({...r,useState:n}),[r,n]),a=te(()=>{o(l=>t({...e,...l.getState()}))});return[i,a]}var Er=c(le(),1),hm=c(R(),1),B0="button";function j0(t){return Gn(t)?!0:t.tagName==="INPUT"&&!Cr(t)}function H0(t,e=!1){let r=t.clientHeight,{top:o}=t.getBoundingClientRect(),n=Math.max(r*.875,r-40)*1.5,i=e?r-n+o:n+o;return t.tagName==="HTML"?i+t.scrollTop:i}function z0(t,e=!1){let{top:r}=t.getBoundingClientRect();return e?r+t.clientHeight:r}function gm(t,e,r,o=!1){var n;if(!e||!r)return;let{renderedItems:i}=e.getState(),a=tn(t);if(!a)return;let l=H0(a,o),s,u;for(let d=0;d=0){u!==void 0&&u<_&&(s=p);break}u=_}return s}function W0(t,e){return lt(t)?!1:To(e,t.target)}var Nu=we(function({store:e,rowId:r,preventScrollOnKeyDown:o=!1,moveOnKeyPress:n=!0,tabbable:i=!1,getItem:a,"aria-setsize":l,"aria-posinset":s,...u}){let d=Ca();e=e||d;let p=Lt(u.id),f=(0,Er.useRef)(null),m=(0,Er.useContext)(Zf),_=yo(u)&&!u.accessibleWhenDisabled,{rowId:h,baseElement:x,isActiveItem:y,ariaSetSize:S,ariaPosInSet:V,isTabbable:O}=Aa(e,{rowId(C){if(r)return r;if(C&&m?.baseElement&&m.baseElement===C.baseElement)return m.id},baseElement(C){return C?.baseElement||void 0},isActiveItem(C){return!!C&&C.activeId===p},ariaSetSize(C){if(l!=null)return l;if(C&&m?.ariaSetSize&&m.baseElement===C.baseElement)return m.ariaSetSize},ariaPosInSet(C){if(s!=null)return s;if(!C||!m?.ariaPosInSet||m.baseElement!==C.baseElement)return;let M=C.renderedItems.filter(j=>j.rowId===h);return m.ariaPosInSet+M.findIndex(j=>j.id===p)},isTabbable(C){if(!C?.renderedItems.length)return!0;if(C.virtualFocus)return!1;if(i)return!0;if(C.activeId===null)return!1;let M=e?.item(C.activeId);return M?.disabled||!M?.element?!0:C.activeId===p}}),N=(0,Er.useCallback)(C=>{var M;let j={...C,id:p||C.id,rowId:h,disabled:!!_,children:(M=C.element)==null?void 0:M.textContent};return a?a(j):j},[p,h,_,a]),D=u.onFocus,E=(0,Er.useRef)(!1),A=te(C=>{if(D?.(C),C.defaultPrevented||_a(C)||!p||!e||W0(C,e))return;let{virtualFocus:M,baseElement:j}=e.getState();if(e.setActiveId(p),Gn(C.currentTarget)&&Jf(C.currentTarget),!M||!lt(C)||j0(C.currentTarget)||!j?.isConnected)return;Co()&&C.currentTarget.hasAttribute("data-autofocus")&&C.currentTarget.scrollIntoView({block:"nearest",inline:"nearest"}),E.current=!0,C.relatedTarget===j||To(e,C.relatedTarget)?em(j):j.focus()}),k=u.onBlurCapture,b=te(C=>{if(k?.(C),C.defaultPrevented)return;let M=e?.getState();M?.virtualFocus&&E.current&&(E.current=!1,C.preventDefault(),C.stopPropagation())}),P=u.onKeyDown,T=Me(o),g=Me(n),I=te(C=>{if(P?.(C),C.defaultPrevented||!lt(C)||!e)return;let{currentTarget:M}=C,j=e.getState(),ae=e.item(p),ye=!!ae?.rowId,De=j.orientation!=="horizontal",je=j.orientation!=="vertical",ot=()=>!!(ye||je||!j.baseElement||!vt(j.baseElement)),vr={ArrowUp:(ye||De)&&e.up,ArrowRight:(ye||je)&&e.next,ArrowDown:(ye||De)&&e.down,ArrowLeft:(ye||je)&&e.previous,Home:()=>{if(ot())return!ye||C.ctrlKey?e?.first():e?.previous(-1)},End:()=>{if(ot())return!ye||C.ctrlKey?e?.last():e?.next(-1)},PageUp:()=>gm(M,e,e?.up,!0),PageDown:()=>gm(M,e,e?.down)}[C.key];if(vr){if(Gn(M)){let Q=en(M),he=je&&C.key==="ArrowLeft",gr=je&&C.key==="ArrowRight",hr=De&&C.key==="ArrowUp",mo=De&&C.key==="ArrowDown";if(gr||mo){let{length:po}=xu(M);if(Q.end!==po)return}else if((he||hr)&&Q.start!==0)return}let Y=vr();if(T(C)||Y!==void 0){if(!g(C))return;C.preventDefault(),e.move(Y)}}}),w=(0,Er.useMemo)(()=>({id:p,baseElement:x}),[p,x]);return u=nr(u,C=>(0,hm.jsx)(Kf.Provider,{value:w,children:C}),[w]),u={id:p,"data-active-item":y||void 0,...u,ref:Oe(f,u.ref),tabIndex:O?u.tabIndex:-1,onFocus:A,onBlurCapture:b,onKeyDown:I},u=ku(u),u=Ou({store:e,...u,getItem:N,shouldRegisterItem:p?u.shouldRegisterItem:!1}),Je({...u,"aria-setsize":S,"aria-posinset":V})}),YP=no(pe(function(e){let r=Nu(e);return xe(B0,r)}));function Mu(t){return Array.isArray(t)?t:typeof t<"u"?[t]:[]}function Xn(t){let e=[];for(let r of t)e.push(...r);return e}function ln(t){return t.slice().reverse()}var sr=c(le(),1),xm=c(R(),1),G0="div";function q0(t){return t.some(e=>!!e.rowId)}function Y0(t){let e=t.target;return e&&!vt(e)?!1:t.key.length===1&&!t.ctrlKey&&!t.metaKey}function U0(t){return t.key==="Shift"||t.key==="Control"||t.key==="Alt"||t.key==="Meta"}function bm(t,e,r){return te(o=>{var n;if(e?.(o),o.defaultPrevented||o.isPropagationStopped()||!lt(o)||U0(o)||Y0(o))return;let i=t.getState(),a=(n=ir(t,i.activeId))==null?void 0:n.element;if(!a)return;let{view:l,...s}=o,u=r?.current;a!==u&&a.focus(),Rf(a,o.type,s)||o.preventDefault(),o.currentTarget.contains(a)&&o.stopPropagation()})}function $0(t){return Xf(Xn(ln(Qf(t))))}function K0(t){let[e,r]=(0,sr.useState)(!1),o=(0,sr.useCallback)(()=>r(!0),[]),n=t.useState(i=>ir(t,i.activeId));return(0,sr.useEffect)(()=>{let i=n?.element;e&&i&&(r(!1),i.focus({preventScroll:!0}))},[n,e]),o}var Fu=we(function({store:e,composite:r=!0,focusOnMove:o=r,moveOnKeyPress:n=!0,...i}){let a=$f();e=e||a,Qe(e,!1);let l=(0,sr.useRef)(null),s=(0,sr.useRef)(null),u=K0(e),d=e.useState("moves"),[,p]=Lf(r?e.setBaseElement:null);(0,sr.useEffect)(()=>{var b;if(!e||!d||!r||!o)return;let{activeId:P}=e.getState(),T=(b=ir(e,P))==null?void 0:b.element;T&&sm(T)},[e,d,r,o]),Te(()=>{if(!e||!d||!r)return;let{baseElement:b,activeId:P}=e.getState();if(!(P===null)||!b)return;let g=s.current;s.current=null,g&&Eo(g,{relatedTarget:b}),Bt(b)||b.focus()},[e,d,r]);let f=e.useState("activeId"),m=e.useState("virtualFocus");Te(()=>{var b;if(!e||!r||!m)return;let P=s.current;if(s.current=null,!P)return;let g=((b=ir(e,f))==null?void 0:b.element)||So(P);g!==P&&Eo(P,{relatedTarget:g})},[e,f,m,r]);let v=bm(e,i.onKeyDownCapture,s),_=bm(e,i.onKeyUpCapture,s),h=i.onFocusCapture,x=te(b=>{if(h?.(b),b.defaultPrevented||!e)return;let{virtualFocus:P}=e.getState();if(!P)return;let T=b.relatedTarget,g=tm(b.currentTarget);lt(b)&&g&&(b.stopPropagation(),s.current=T)}),y=i.onFocus,S=te(b=>{if(y?.(b),b.defaultPrevented||!r||!e)return;let{relatedTarget:P}=b,{virtualFocus:T}=e.getState();T?lt(b)&&!To(e,P)&&queueMicrotask(u):lt(b)&&e.setActiveId(null)}),V=i.onBlurCapture,O=te(b=>{var P;if(V?.(b),b.defaultPrevented||!e)return;let{virtualFocus:T,activeId:g}=e.getState();if(!T)return;let I=(P=ir(e,g))==null?void 0:P.element,w=b.relatedTarget,C=To(e,w),M=s.current;s.current=null,lt(b)&&C?(w===I?M&&M!==w&&Eo(M,b):I?Eo(I,b):M&&Eo(M,b),b.stopPropagation()):!To(e,b.target)&&I&&Eo(I,b)}),N=i.onKeyDown,D=Me(n),E=te(b=>{var P;if(N?.(b),b.nativeEvent.isComposing||b.defaultPrevented||!e||!lt(b))return;let{orientation:T,renderedItems:g,activeId:I}=e.getState(),w=ir(e,I);if((P=w?.element)!=null&&P.isConnected)return;let C=T!=="horizontal",M=T!=="vertical",j=q0(g);if((b.key==="ArrowLeft"||b.key==="ArrowRight"||b.key==="Home"||b.key==="End")&&vt(b.currentTarget))return;let je={ArrowUp:(j||C)&&(()=>{if(j){let ot=$0(g);return ot?.id}return e?.last()}),ArrowRight:(j||M)&&e.first,ArrowDown:(j||C)&&e.first,ArrowLeft:(j||M)&&e.last,Home:e.first,End:e.last,PageUp:e.first,PageDown:e.last}[b.key];if(je){let ot=je();if(ot!==void 0){if(!D(b))return;b.preventDefault(),e.move(ot)}}});i=nr(i,b=>(0,xm.jsx)(rn,{value:e,children:b}),[e]),i={"aria-activedescendant":e.useState(b=>{var P;if(e&&r&&b.virtualFocus)return(P=ir(e,b.activeId))==null?void 0:P.id}),...i,ref:Oe(l,p,i.ref),onKeyDownCapture:v,onKeyUpCapture:_,onFocusCapture:x,onFocus:S,onBlurCapture:O,onKeyDown:E};let k=e.useState(b=>r&&(b.virtualFocus||b.activeId===null));return i=Kn({focusable:k,...i}),i}),lT=pe(function(e){let r=Fu(e);return xe(G0,r)});var Qn=Pt(),dT=Qn.useContext,fT=Qn.useScopedContext,Lu=Qn.useProviderContext,wm=Qn.ContextProvider,_m=Qn.ScopedContextProvider;var Bu=c(le(),1),Jn=Pt([wm],[_m]),gT=Jn.useContext,hT=Jn.useScopedContext,bT=Jn.useProviderContext,ym=Jn.ContextProvider,Oa=Jn.ScopedContextProvider,xT=(0,Bu.createContext)(void 0),wT=(0,Bu.createContext)(void 0);var un=c(le(),1),Em=c(nd(),1),ju=c(R(),1),Z0="div";function Sm(t,e){let r=setTimeout(e,t);return()=>clearTimeout(r)}function X0(t){let e=requestAnimationFrame(()=>{e=requestAnimationFrame(t)});return()=>cancelAnimationFrame(e)}function Cm(...t){return t.join(", ").split(", ").reduce((e,r)=>{let o=r.endsWith("ms")?1:1e3,n=Number.parseFloat(r||"0s")*o;return n>e?n:e},0)}function Hu(t,e,r){return!r&&e!==!1&&(!t||!!e)}var Q0=we(function({store:e,alwaysVisible:r,...o}){let n=Lu();e=e||n,Qe(e,!1);let i=(0,un.useRef)(null),a=Lt(o.id),[l,s]=(0,un.useState)(null),u=e.useState("open"),d=e.useState("mounted"),p=e.useState("animated"),f=e.useState("contentElement"),m=an(e.disclosure,"contentElement");Te(()=>{i.current&&e?.setContentElement(i.current)},[e]),Te(()=>{let x;return e?.setState("animated",y=>(x=y,!0)),()=>{x!==void 0&&e?.setState("animated",x)}},[e]),Te(()=>{if(p){if(!f?.isConnected){s(null);return}return X0(()=>{s(u?"enter":d?"leave":null)})}},[p,f,u,d]),Te(()=>{if(!e||!p||!l||!f)return;let x=()=>e?.setState("animating",!1),y=()=>(0,Em.flushSync)(x);if(l==="leave"&&u||l==="enter"&&!u)return;if(typeof p=="number")return Sm(p,y);let{transitionDuration:S,animationDuration:V,transitionDelay:O,animationDelay:N}=getComputedStyle(f),{transitionDuration:D="0",animationDuration:E="0",transitionDelay:A="0",animationDelay:k="0"}=m?getComputedStyle(m):{},b=Cm(O,N,A,k),P=Cm(S,V,D,E),T=b+P;if(!T){l==="enter"&&e.setState("animated",!1),x();return}let g=1e3/60,I=Math.max(T-g,0);return Sm(I,y)},[e,p,f,m,u,l]),o=nr(o,x=>(0,ju.jsx)(Oa,{value:e,children:x}),[e]);let v=Hu(d,o.hidden,r),_=o.style,h=(0,un.useMemo)(()=>v?{..._,display:"none"}:_,[v,_]);return o={id:a,"data-open":u||void 0,"data-enter":l==="enter"||void 0,"data-leave":l==="leave"||void 0,hidden:v,...o,ref:Oe(a?e.setContentElement:null,i,o.ref),style:h},Je(o)}),J0=pe(function(e){let r=Q0(e);return xe(Z0,r)}),AT=pe(function({unmountOnHide:e,...r}){let o=Lu(),n=r.store||o;return an(n,a=>!e||a?.mounted)===!1?null:(0,ju.jsx)(J0,{...r})});function Pm(t={}){let e=Oo(t.store,Zn(t.disclosure,["contentElement","disclosureElement"]));let r=e?.getState(),o=ee(t.open,r?.open,t.defaultOpen,!1),n=ee(t.animated,r?.animated,!1),i={open:o,animated:n,animating:!!n&&o,mounted:o,contentElement:ee(r?.contentElement,null),disclosureElement:ee(r?.disclosureElement,null)},a=ht(i,e);return $e(a,()=>Ke(a,["animated","animating"],l=>{l.animated||a.setState("animating",!1)})),$e(a,()=>nn(a,["open"],()=>{a.getState().animated&&a.setState("animating",!0)})),$e(a,()=>Ke(a,["open","animating"],l=>{a.setState("mounted",l.open||l.animating)})),{...a,disclosure:t.disclosure,setOpen:l=>a.setState("open",l),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",l=>!l),stopAnimation:()=>a.setState("animating",!1),setContentElement:l=>a.setState("contentElement",l),setDisclosureElement:l=>a.setState("disclosureElement",l)}}function Tm(t,e,r){return or(e,[r.store,r.disclosure]),Ie(t,r,"open","setOpen"),Ie(t,r,"mounted","setMounted"),Ie(t,r,"animated"),Object.assign(t,{disclosure:r.disclosure})}var ei=Pt([ym],[Oa]),LT=ei.useContext,BT=ei.useScopedContext,Am=ei.useProviderContext,Om=ei.ContextProvider,Im=ei.ScopedContextProvider;function ex(t){var e;let r=t.find(i=>!!i.element),o=[...t].reverse().find(i=>!!i.element),n=(e=r?.element)==null?void 0:e.parentElement;for(;n&&o?.element;){if(o&&n.contains(o.element))return n;n=n.parentElement}return Sr(n).body}function tx(t){return t?.__unstablePrivateStore}function Rm(t={}){var e;t.store;let r=(e=t.store)==null?void 0:e.getState(),o=ee(t.items,r?.items,t.defaultItems,[]),n=new Map(o.map(f=>[f.id,f])),i={items:o,renderedItems:ee(r?.renderedItems,[])},a=tx(t.store),l=ht({items:o,renderedItems:i.renderedItems},a),s=ht(i,t.store),u=f=>{let m=_u(f,v=>v.element);l.setState("renderedItems",m),s.setState("renderedItems",m)};$e(s,()=>on(l)),$e(l,()=>ao(l,["items"],f=>{s.setState("items",f.items)})),$e(l,()=>ao(l,["renderedItems"],f=>{let m=!0,v=requestAnimationFrame(()=>{let{renderedItems:y}=s.getState();f.renderedItems!==y&&u(f.renderedItems)});if(typeof IntersectionObserver!="function")return()=>cancelAnimationFrame(v);let _=()=>{if(m){m=!1;return}cancelAnimationFrame(v),v=requestAnimationFrame(()=>u(f.renderedItems))},h=ex(f.renderedItems),x=new IntersectionObserver(_,{root:h});for(let y of f.renderedItems)y.element&&x.observe(y.element);return()=>{cancelAnimationFrame(v),x.disconnect()}}));let d=(f,m,v=!1)=>{let _;return m(x=>{let y=x.findIndex(({id:V})=>V===f.id),S=x.slice();if(y!==-1){_=x[y];let V={..._,...f};S[y]=V,n.set(f.id,V)}else S.push(f),n.set(f.id,f);return S}),()=>{m(x=>{if(!_)return v&&n.delete(f.id),x.filter(({id:V})=>V!==f.id);let y=x.findIndex(({id:V})=>V===f.id);if(y===-1)return x;let S=x.slice();return S[y]=_,n.set(f.id,_),S})}},p=f=>d(f,m=>l.setState("items",m),!0);return{...s,registerItem:p,renderItem:f=>to(p(f),d(f,m=>l.setState("renderedItems",m))),item:f=>{if(!f)return null;let m=n.get(f);if(!m){let{items:v}=l.getState();m=v.find(_=>_.id===f),m&&n.set(f,m)}return m||null},__unstablePrivateStore:l}}function Vm(t,e,r){return or(e,[r.store]),Ie(t,r,"items","setItems"),t}var rx={id:null};function Pr(t,e){return t.find(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function ox(t,e){return t.filter(r=>e?!r.disabled&&r.id!==e:!r.disabled)}function km(t,e){return t.filter(r=>r.rowId===e)}function nx(t,e,r=!1){let o=t.findIndex(n=>n.id===e);return[...t.slice(o+1),...r?[rx]:[],...t.slice(0,o)]}function Dm(t){let e=[];for(let r of t){let o=e.find(n=>{var i;return((i=n[0])==null?void 0:i.rowId)===r.rowId});o?o.push(r):e.push([r])}return e}function Nm(t){let e=0;for(let{length:r}of t)r>e&&(e=r);return e}function ix(t){return{id:"__EMPTY_ITEM__",disabled:!0,rowId:t}}function ax(t,e,r){let o=Nm(t);for(let n of t)for(let i=0;iKe(a,["renderedItems","activeId"],s=>{a.setState("activeId",u=>{var d;return u!==void 0?u:(d=Pr(s.renderedItems))==null?void 0:d.id})}));let l=(s="next",u={})=>{var d,p;let f=a.getState(),{skip:m=0,activeId:v=f.activeId,focusShift:_=f.focusShift,focusLoop:h=f.focusLoop,focusWrap:x=f.focusWrap,includesBaseElement:y=f.includesBaseElement,renderedItems:S=f.renderedItems,rtl:V=f.rtl}=u,O=s==="up"||s==="down",N=s==="next"||s==="down",D=N?V&&!O:!V||O,E=_&&!m,A=O?Xn(ax(Dm(S),v,E)):S;if(A=D?ln(A):A,A=O?sx(A):A,v==null)return(d=Pr(A))==null?void 0:d.id;let k=A.find(j=>j.id===v);if(!k)return(p=Pr(A))==null?void 0:p.id;let b=A.some(j=>j.rowId),P=A.indexOf(k),T=A.slice(P+1),g=km(T,k.rowId);if(m){let j=ox(g,v),ae=j.slice(m)[0]||j[j.length-1];return ae?.id}let I=h&&(O?h!=="horizontal":h!=="vertical"),w=b&&x&&(O?x!=="horizontal":x!=="vertical"),C=N?(!b||O)&&I&&y:O?y:!1;if(I){let j=w&&!C?A:km(A,k.rowId),ae=nx(j,v,C),ye=Pr(ae,v);return ye?.id}if(w){let j=Pr(C?g:T,v);return C?j?.id||null:j?.id}let M=Pr(g,v);return!M&&C?null:M?.id};return{...o,...a,setBaseElement:s=>a.setState("baseElement",s),setActiveId:s=>a.setState("activeId",s),move:s=>{s!==void 0&&(a.setState("activeId",s),a.setState("moves",u=>u+1))},first:()=>{var s;return(s=Pr(a.getState().renderedItems))==null?void 0:s.id},last:()=>{var s;return(s=Pr(ln(a.getState().renderedItems)))==null?void 0:s.id},next:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("next",s)),previous:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("previous",s)),down:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("down",s)),up:s=>(s!==void 0&&typeof s=="number"&&(s={skip:s}),l("up",s))}}function Fm(t){return{id:Lt(t.id),...t}}function Lm(t,e,r){return t=Vm(t,e,r),Ie(t,r,"activeId","setActiveId"),Ie(t,r,"includesBaseElement"),Ie(t,r,"virtualFocus"),Ie(t,r,"orientation"),Ie(t,r,"rtl"),Ie(t,r,"focusLoop"),Ie(t,r,"focusWrap"),Ie(t,r,"focusShift"),t}var Ia=c(le(),1),Ra=(0,Ia.createContext)(void 0),ti=Pt([Om,rn],[Im,Ea]),zu=ti.useContext,cn=ti.useScopedContext,Va=ti.useProviderContext,Bm=ti.ContextProvider,jm=ti.ScopedContextProvider,ka=(0,Ia.createContext)(void 0),Hm=(0,Ia.createContext)(!1);function zm(t={}){return Pm(t)}function Wm(t,e,r){return Tm(t,e,r)}function Gm({popover:t,...e}={}){let r=Oo(e.store,Zn(t,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"]));let o=r?.getState(),n=zm({...e,store:r}),i=ee(e.placement,o?.placement,"bottom"),a={...n.getState(),placement:i,currentPlacement:i,anchorElement:ee(o?.anchorElement,null),popoverElement:ee(o?.popoverElement,null),arrowElement:ee(o?.arrowElement,null),rendered:Symbol("rendered")},l=ht(a,n,r);return{...n,...l,setAnchorElement:s=>l.setState("anchorElement",s),setPopoverElement:s=>l.setState("popoverElement",s),setArrowElement:s=>l.setState("arrowElement",s),render:()=>l.setState("rendered",Symbol("rendered"))}}function qm(t,e,r){return or(e,[r.popover]),Ie(t,r,"placement"),Wm(t,e,r)}var lx="div",Wu=we(function({store:e,...r}){let o=Am();return e=e||o,r={...r,ref:Oe(e?.setAnchorElement,r.ref)},r}),yA=pe(function(e){let r=Wu(e);return xe(lx,r)});var Ym=c(le(),1),ux="div";function Um(t){let e=t.relatedTarget;return e?.nodeType===Node.ELEMENT_NODE?e:null}function cx(t){let e=Um(t);return e?tr(t.currentTarget,e):!1}var Gu=Symbol("composite-hover");function dx(t){let e=Um(t);if(!e)return!1;do{if(Et(e,Gu)&&e[Gu])return!0;e=e.parentElement}while(e);return!1}var qu=we(function({store:e,focusOnHover:r=!0,blurOnHoverEnd:o=!!r,...n}){let i=Ca();e=e||i,Qe(e,!1);let a=Gf(),l=n.onMouseMove,s=Me(r),u=te(v=>{if(l?.(v),!v.defaultPrevented&&a()&&s(v)){if(!Iu(v.currentTarget)){let _=e?.getState().baseElement;_&&!Bt(_)&&_.focus()}e?.setActiveId(v.currentTarget.id)}}),d=n.onMouseLeave,p=Me(o),f=te(v=>{var _;d?.(v),!v.defaultPrevented&&a()&&(cx(v)||dx(v)||s(v)&&p(v)&&(e?.setActiveId(null),(_=e?.getState().baseElement)==null||_.focus()))}),m=(0,Ym.useCallback)(v=>{v&&(v[Gu]=!0)},[]);return n={...n,ref:Oe(m,n.ref),onMouseMove:u,onMouseLeave:f},Je(n)}),IA=no(pe(function(e){let r=qu(e);return xe(ux,r)}));var et=c(le(),1),fx="input";function $m(t,e,r){if(!r)return!1;let o=t.find(n=>!n.disabled&&n.value);return o?.value===e}function Km(t,e){return!e||t==null?!1:(t=zn(t),e.length>t.length&&e.toLowerCase().indexOf(t.toLowerCase())===0)}function mx(t){return t.type==="input"}function px(t){return t==="inline"||t==="list"||t==="both"||t==="none"}function vx(t){let e=t.find(r=>{var o;return r.disabled?!1:((o=r.element)==null?void 0:o.getAttribute("role"))!=="tab"});return e?.id}var gx=we(function({store:e,focusable:r=!0,autoSelect:o=!1,getAutoSelectId:n,setValueOnChange:i,showMinLength:a=0,showOnChange:l,showOnMouseDown:s,showOnClick:u=s,showOnKeyDown:d,showOnKeyPress:p=d,blurActiveItemOnClick:f,setValueOnClick:m=!0,moveOnKeyPress:v=!0,autoComplete:_="list",...h}){let x=Va();e=e||x,Qe(e,!1);let y=(0,et.useRef)(null),[S,V]=zf(),O=(0,et.useRef)(!1),N=(0,et.useRef)(!1),D=e.useState(L=>L.virtualFocus&&o),E=_==="inline"||_==="both",[A,k]=(0,et.useState)(E);Hf(()=>{E&&k(!0)},[E]);let b=e.useState("value"),P=(0,et.useRef)(void 0);(0,et.useEffect)(()=>Ke(e,["selectedValue","activeId"],(L,se)=>{P.current=se.selectedValue}),[]);let T=e.useState(L=>{var se;if(E&&A&&!(L.activeValue&&Array.isArray(L.selectedValue)&&(L.selectedValue.includes(L.activeValue)||(se=P.current)!=null&&se.includes(L.activeValue))))return L.activeValue}),g=e.useState("renderedItems"),I=e.useState("open"),w=e.useState("contentElement"),C=(0,et.useMemo)(()=>{if(!E||!A)return b;if($m(g,T,D)){if(Km(b,T)){let se=T?.slice(b.length)||"";return b+se}return b}return T||b},[E,A,g,T,D,b]);(0,et.useEffect)(()=>{let L=y.current;if(!L)return;let se=()=>k(!0);return L.addEventListener("combobox-item-move",se),()=>{L.removeEventListener("combobox-item-move",se)}},[]),(0,et.useEffect)(()=>{if(!E||!A||!T||!$m(g,T,D)||!Km(b,T))return;let se=Hn;return queueMicrotask(()=>{let He=y.current;if(!He)return;let{start:ze,end:Nt}=en(He),br=b.length,nt=T.length;qn(He,br,nt),se=()=>{if(!Bt(He))return;let{start:vo,end:Jh}=en(He);vo===br&&Jh===nt&&qn(He,ze,Nt)}}),()=>se()},[S,E,A,T,g,D,b]);let M=(0,et.useRef)(null),j=te(n),ae=(0,et.useRef)(null);(0,et.useEffect)(()=>{if(!I||!w)return;let L=tn(w);if(!L)return;M.current=L;let se=()=>{O.current=!1},He=()=>{if(!e||!O.current)return;let{activeId:Nt}=e.getState();Nt!==null&&Nt!==ae.current&&(O.current=!1)},ze={passive:!0,capture:!0};return L.addEventListener("wheel",se,ze),L.addEventListener("touchmove",se,ze),L.addEventListener("scroll",He,ze),()=>{L.removeEventListener("wheel",se,!0),L.removeEventListener("touchmove",se,!0),L.removeEventListener("scroll",He,!0)}},[I,w,e]),Te(()=>{b&&(N.current||(O.current=!0))},[b]),Te(()=>{D!=="always"&&I||(O.current=I)},[D,I]);let ye=e.useState("resetValueOnSelect");or(()=>{var L,se;let He=O.current;if(!e||!I||!He&&!ye)return;let{baseElement:ze,contentElement:Nt,activeId:br}=e.getState();if(!(ze&&!Bt(ze))){if(Nt?.hasAttribute("data-placing")){let nt=new MutationObserver(V);return nt.observe(Nt,{attributeFilter:["data-placing"]}),()=>nt.disconnect()}if(D&&He){let nt=j(g),vo=nt!==void 0?nt:(L=vx(g))!=null?L:e.first();ae.current=vo,e.move(vo??null)}else{let nt=(se=e.item(br||e.first()))==null?void 0:se.element;nt&&"scrollIntoView"in nt&&nt.scrollIntoView({block:"nearest",inline:"nearest"})}}},[e,I,S,b,D,ye,j,g]),(0,et.useEffect)(()=>{if(!E)return;let L=y.current;if(!L)return;let se=[L,w].filter(ze=>!!ze),He=ze=>{se.every(Nt=>ya(ze,Nt))&&e?.setValue(C)};for(let ze of se)ze.addEventListener("focusout",He);return()=>{for(let ze of se)ze.removeEventListener("focusout",He)}},[E,w,e,C]);let De=L=>L.currentTarget.value.length>=a,je=h.onChange,ot=Me(l??De),Kt=Me(i??!e.tag),vr=te(L=>{if(je?.(L),L.defaultPrevented||!e)return;let se=L.currentTarget,{value:He,selectionStart:ze,selectionEnd:Nt}=se,br=L.nativeEvent;if(O.current=!0,mx(br)&&(br.isComposing&&(O.current=!1,N.current=!0),E)){let nt=br.inputType==="insertText"||br.inputType==="insertCompositionText",vo=ze===He.length;k(nt&&vo)}if(Kt(L)){let nt=He===e.getState().value;e.setValue(He),queueMicrotask(()=>{qn(se,ze,Nt)}),E&&D&&nt&&V()}ot(L)&&e.show(),(!D||!O.current)&&e.setActiveId(null)}),Y=h.onCompositionEnd,Q=te(L=>{O.current=!0,N.current=!1,Y?.(L),!L.defaultPrevented&&D&&V()}),he=h.onMouseDown,gr=Me(f??(()=>!!e?.getState().includesBaseElement)),hr=Me(m),mo=Me(u??De),po=te(L=>{he?.(L),!L.defaultPrevented&&(L.button||L.ctrlKey||e&&(gr(L)&&e.setActiveId(null),hr(L)&&e.setValue(C),mo(L)&&oo(L.currentTarget,"mouseup",e.show)))}),Bo=h.onKeyDown,Pn=Me(p??De),js=te(L=>{if(Bo?.(L),L.repeat||(O.current=!1),L.defaultPrevented||L.ctrlKey||L.altKey||L.shiftKey||L.metaKey||!e)return;let{open:se}=e.getState();se||(L.key==="ArrowUp"||L.key==="ArrowDown")&&Pn(L)&&(L.preventDefault(),e.show())}),Vc=h.onBlur,Kh=te(L=>{O.current=!1,Vc?.(L),L.defaultPrevented}),Zh=Lt(h.id),Xh=px(_)?_:void 0,Qh=e.useState(L=>L.activeId===null);return h={id:Zh,role:"combobox","aria-autocomplete":Xh,"aria-haspopup":wu(w,"listbox"),"aria-expanded":I,"aria-controls":w?.id,"data-active-item":Qh||void 0,value:C,...h,ref:Oe(y,h.ref),onChange:vr,onCompositionEnd:Q,onMouseDown:po,onKeyDown:js,onBlur:Kh},h=Fu({store:e,focusable:r,...h,moveOnKeyPress:L=>gu(v,L)?!1:(E&&k(!0),!0)}),h=Wu({store:e,...h}),{autoComplete:"off",...h}}),Da=pe(function(e){let r=gx(e);return xe(fx,r)});var Na=c(le(),1),Yu=c(R(),1),hx="div";function bx(t,e){if(e!=null)return t==null?!1:Array.isArray(t)?t.includes(e):t===e}function xx(t){var e;return(e={menu:"menuitem",listbox:"option",tree:"treeitem"}[t])!=null?e:"option"}var Zm=we(function({store:e,value:r,hideOnClick:o,setValueOnClick:n,selectValueOnClick:i=!0,resetValueOnSelect:a,focusOnHover:l=!1,moveOnKeyPress:s=!0,getItem:u,...d}){var p;let f=cn();e=e||f,Qe(e,!1);let{resetValueOnSelectState:m,multiSelectable:v,selected:_}=Aa(e,{resetValueOnSelectState:"resetValueOnSelect",multiSelectable(b){return Array.isArray(b.selectedValue)},selected(b){return bx(b.selectedValue,r)}}),h=(0,Na.useCallback)(b=>{let P={...b,value:r};return u?u(P):P},[r,u]);n=n??!v,o=o??(r!=null&&!v);let x=d.onClick,y=Me(n),S=Me(i),V=Me((p=a??m)!=null?p:v),O=Me(o),N=te(b=>{x?.(b),!b.defaultPrevented&&(If(b)||Of(b)||(r!=null&&(S(b)&&(V(b)&&e?.resetValue(),e?.setSelectedValue(P=>Array.isArray(P)?P.includes(r)?P.filter(T=>T!==r):[...P,r]:r)),y(b)&&e?.setValue(r)),O(b)&&e?.hide()))}),D=d.onKeyDown,E=te(b=>{if(D?.(b),b.defaultPrevented)return;let P=e?.getState().baseElement;if(!P||Bt(P))return;(b.key.length===1||b.key==="Backspace"||b.key==="Delete")&&(queueMicrotask(()=>P.focus()),vt(P)&&e?.setValue(P.value))});v&&_!=null&&(d={"aria-selected":_,...d}),d=nr(d,b=>(0,Yu.jsx)(ka.Provider,{value:r,children:(0,Yu.jsx)(Hm.Provider,{value:_??!1,children:b})}),[r,_]);let A=(0,Na.useContext)(Ra);d={role:xx(A),children:r,...d,onClick:N,onKeyDown:E};let k=Me(s);return d=Nu({store:e,...d,getItem:h,moveOnKeyPress:b=>{if(!k(b))return!1;let P=new Event("combobox-item-move"),T=e?.getState().baseElement;return T?.dispatchEvent(P),!0}}),d=qu({store:e,focusOnHover:l,...d}),d}),ri=no(pe(function(e){let r=Zm(e);return xe(hx,r)}));var Ma=c(le(),1),Qm=c(R(),1),wx="span";function Xm(t){return zn(t).toLowerCase()}function _x(t,e){let r=[];for(let o of e){let n=0,i=o.length;for(;t.indexOf(o,n)!==-1;){let a=t.indexOf(o,n);a!==-1&&r.push([a,i]),n=a+1}}return r}function yx(t){return t.filter(([e,r],o,n)=>!n.some(([i,a],l)=>l!==o&&i<=e&&i+a>=e+r))}function Sx(t){return t.sort(([e],[r])=>e-r)}function Cx(t,e){if(!t||!e)return t;let r=Mu(e).filter(Boolean).map(Xm),o=[],n=(s,u=!1)=>(0,Qm.jsx)("span",{"data-autocomplete-value":u?"":void 0,"data-user-value":u?void 0:"",children:s},o.length),i=Sx(yx(_x(Xm(t),new Set(r))));if(!i.length)return o.push(n(t,!0)),o;let[a]=i[0];return[t.slice(0,a),...i.flatMap(([s,u],d)=>{var p;let f=t.slice(s,s+u),m=(p=i[d+1])==null?void 0:p[0],v=t.slice(s+u,m);return[f,v]})].forEach((s,u)=>{s&&o.push(n(s,u%2===0))}),o}var Ex=we(function({store:e,value:r,userValue:o,...n}){let i=cn();e=e||i;let a=(0,Ma.useContext)(ka),l=r??a,s=an(e,d=>o??d?.value);return n={children:(0,Ma.useMemo)(()=>{if(l)return s?Cx(l,s):l},[l,s]),...n},Je(n)}),Fa=pe(function(e){let r=Ex(e);return xe(wx,r)});var Px="label",Tx=we(function({store:e,...r}){let o=Va();return e=e||o,Qe(e,!1),r={htmlFor:e.useState(i=>{var a;return(a=i.baseElement)==null?void 0:a.id}),...r},Je(r)}),La=no(pe(function(e){let r=Tx(e);return xe(Px,r)}));var Ba=c(le(),1),Uu=c(R(),1),Ax="div",Jm=we(function({store:e,alwaysVisible:r,...o}){let n=cn(!0),i=zu();e=e||i;let a=!!e&&e===n;Qe(e,!1);let l=(0,Ba.useRef)(null),s=Lt(o.id),u=e.useState("mounted"),d=Hu(u,o.hidden,r),p=d?{...o.style,display:"none"}:o.style,f=e.useState(V=>Array.isArray(V.selectedValue)),m=jf(l,"role",o.role),_=(m==="listbox"||m==="tree"||m==="grid")&&f||void 0,[h,x]=(0,Ba.useState)(!1),y=e.useState("contentElement");Te(()=>{if(!u)return;let V=l.current;if(!V||y!==V)return;let O=()=>{x(!!V.querySelector("[role='listbox']"))},N=new MutationObserver(O);return N.observe(V,{subtree:!0,childList:!0,attributeFilter:["role"]}),O(),()=>N.disconnect()},[u,y]),h||(o={role:"listbox","aria-multiselectable":_,...o}),o=nr(o,V=>(0,Uu.jsx)(jm,{value:e,children:(0,Uu.jsx)(Ra.Provider,{value:m,children:V})}),[e,m]);let S=s&&(!n||!a)?e.setContentElement:null;return o={id:s,hidden:d,...o,ref:Oe(S,l,o.ref),style:p},Je(o)}),oi=pe(function(e){let r=Jm(e);return xe(Ax,r)});var $u=c(le(),1),yO=(0,$u.createContext)(null),SO=(0,$u.createContext)(null),ni=Pt([rn],[Ea]),ep=ni.useContext,CO=ni.useScopedContext,EO=ni.useProviderContext,PO=ni.ContextProvider,TO=ni.ScopedContextProvider;var Ox=Co()&&yu();function tp({tag:t,...e}={}){let r=Oo(e.store,Du(t,["value","rtl"]));let o=t?.getState(),n=r?.getState(),i=ee(e.activeId,n?.activeId,e.defaultActiveId,null),a=Mm({...e,activeId:i,includesBaseElement:ee(e.includesBaseElement,n?.includesBaseElement,!0),orientation:ee(e.orientation,n?.orientation,"vertical"),focusLoop:ee(e.focusLoop,n?.focusLoop,!0),focusWrap:ee(e.focusWrap,n?.focusWrap,!0),virtualFocus:ee(e.virtualFocus,n?.virtualFocus,!0)}),l=Gm({...e,placement:ee(e.placement,n?.placement,"bottom-start")}),s=ee(e.value,n?.value,e.defaultValue,""),u=ee(e.selectedValue,n?.selectedValue,o?.values,e.defaultSelectedValue,""),d=Array.isArray(u),p={...a.getState(),...l.getState(),value:s,selectedValue:u,resetValueOnSelect:ee(e.resetValueOnSelect,n?.resetValueOnSelect,d),resetValueOnHide:ee(e.resetValueOnHide,n?.resetValueOnHide,d&&!t),activeValue:n?.activeValue},f=ht(p,a,l,r);return Ox&&$e(f,()=>Ke(f,["virtualFocus"],()=>{f.setState("virtualFocus",!1)})),$e(f,()=>{if(t)return to(Ke(f,["selectedValue"],m=>{Array.isArray(m.selectedValue)&&t.setValues(m.selectedValue)}),Ke(t,["values"],m=>{f.setState("selectedValue",m.values)}))}),$e(f,()=>Ke(f,["resetValueOnHide","mounted"],m=>{m.resetValueOnHide&&(m.mounted||f.setState("value",s))})),$e(f,()=>Ke(f,["open"],m=>{m.open||(f.setState("activeId",i),f.setState("moves",0))})),$e(f,()=>Ke(f,["moves","activeId"],(m,v)=>{m.moves===v.moves&&f.setState("activeValue",void 0)})),$e(f,()=>ao(f,["moves","renderedItems"],(m,v)=>{if(m.moves===v.moves)return;let{activeId:_}=f.getState(),h=a.item(_);f.setState("activeValue",h?.value)})),{...l,...a,...f,tag:t,setValue:m=>f.setState("value",m),resetValue:()=>f.setState("value",p.value),setSelectedValue:m=>f.setState("selectedValue",m)}}function Rx(t){let e=ep();return t={...t,tag:t.tag!==void 0?t.tag:e},Fm(t)}function Vx(t,e,r){return or(e,[r.tag]),Ie(t,r,"value","setValue"),Ie(t,r,"selectedValue","setSelectedValue"),Ie(t,r,"resetValueOnHide"),Ie(t,r,"resetValueOnSelect"),Object.assign(Lm(qm(t,e,r),e,r),{tag:r.tag})}function Ku(t={}){t=Rx(t);let[e,r]=sn(tp,t);return Vx(e,r,t)}var rp=c(R(),1);function ja(t={}){let e=Ku(t);return(0,rp.jsx)(Bm,{value:e,children:t.children})}var cp=c(ap(),1);var dp=c(_t(),1),Tr=c(U(),1),Io=c(H(),1),jt=c(q(),1);var Lx=[],ii=(t,e)=>t.singleSelection?e?.value:Array.isArray(e?.value)?e.value:!Array.isArray(e?.value)&&e?.value?[e.value]:Lx;var ai=c(H(),1),Bx=[];function Ze({elements:t,getElements:e}){let r=Array.isArray(t)&&t.length>0?t:Bx,[o,n]=(0,ai.useState)(r),[i,a]=(0,ai.useState)(!1);return(0,ai.useEffect)(()=>{if(!e){n(r);return}let l=!1;return a(!0),e().then(s=>{if(!l){let u=Array.isArray(s)&&s.length>0?s:r;n(u)}}).catch(()=>{l||n(r)}).finally(()=>{l||a(!1)}),()=>{l=!0}},[e,r]),{elements:o,isLoading:i}}var oe=c(R(),1);function sp(t=""){return(0,cp.default)(t.trim().toLowerCase())}var lp=(t,e,r)=>t.singleSelection?r:Array.isArray(e?.value)?e.value.includes(r)?e.value.filter(o=>o!==r):[...e.value,r]:[r];function up(t,e){return`${t}-${e}`}var fp=({selected:t})=>(0,oe.jsx)("span",{className:z("dataviews-filters__search-widget-listitem-multi-selection",{"is-selected":t}),children:t&&(0,oe.jsx)(jt.Icon,{icon:go})}),mp=({selected:t})=>(0,oe.jsx)("span",{className:z("dataviews-filters__search-widget-listitem-single-selection",{"is-selected":t})});function pp({view:t,filter:e,onChangeView:r}){let o=(0,dp.useInstanceId)(pp,"dataviews-filter-list-box"),[n,i]=(0,Io.useState)(e.operators?.length===1?void 0:null),a=t.filters?.find(s=>s.field===e.field),l=ii(e,a);return(0,oe.jsx)(jt.Composite,{virtualFocus:!0,focusLoop:!0,activeId:n,setActiveId:i,role:"listbox",className:"dataviews-filters__search-widget-listbox","aria-label":(0,Tr.sprintf)((0,Tr.__)("List of: %1$s"),e.name),onFocusVisible:()=>{!n&&e.elements.length&&i(up(o,e.elements[0].value))},render:(0,oe.jsx)(jt.Composite.Typeahead,{}),children:e.elements.map(s=>(0,oe.jsxs)(jt.Composite.Hover,{render:(0,oe.jsx)(jt.Composite.Item,{id:up(o,s.value),render:(0,oe.jsx)("div",{"aria-label":s.label,role:"option",className:"dataviews-filters__search-widget-listitem"}),onClick:()=>{let u=a?[...(t.filters??[]).map(d=>d.field===e.field?{...d,operator:a.operator||e.operators[0],value:lp(e,a,s.value)}:d)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:lp(e,a,s.value)}];r({...t,page:1,filters:u})}}),children:[e.singleSelection&&(0,oe.jsx)(mp,{selected:l===s.value}),!e.singleSelection&&(0,oe.jsx)(fp,{selected:l.includes(s.value)}),(0,oe.jsx)("span",{className:"dataviews-filters__search-widget-listitem-value",title:s.label,children:s.label})]},s.value))})}function jx({view:t,filter:e,onChangeView:r}){let[o,n]=(0,Io.useState)(""),i=(0,Io.useDeferredValue)(o),a=t.filters?.find(u=>u.field===e.field),l=ii(e,a),s=(0,Io.useMemo)(()=>{let u=sp(i);return e.elements.filter(d=>sp(d.label).includes(u))},[e.elements,i]);return(0,oe.jsxs)(ja,{selectedValue:l,setSelectedValue:u=>{let d=a?[...(t.filters??[]).map(p=>p.field===e.field?{...p,operator:a.operator||e.operators[0],value:u}:p)]:[...t.filters??[],{field:e.field,operator:e.operators[0],value:u}];r({...t,page:1,filters:d})},setValue:n,children:[(0,oe.jsxs)("div",{className:"dataviews-filters__search-widget-filter-combobox__wrapper",children:[(0,oe.jsx)(La,{render:(0,oe.jsx)(jt.VisuallyHidden,{children:(0,Tr.__)("Search items")}),children:(0,Tr.__)("Search items")}),(0,oe.jsx)(Da,{autoSelect:"always",placeholder:(0,Tr.__)("Search"),className:"dataviews-filters__search-widget-filter-combobox__input"}),(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-filter-combobox__icon",children:(0,oe.jsx)(jt.Icon,{icon:Bl})})]}),(0,oe.jsxs)(oi,{className:"dataviews-filters__search-widget-filter-combobox-list",alwaysVisible:!0,children:[s.map(u=>(0,oe.jsxs)(ri,{resetValueOnSelect:!1,value:u.value,className:"dataviews-filters__search-widget-listitem",hideOnClick:!1,setValueOnClick:!1,focusOnHover:!0,children:[e.singleSelection&&(0,oe.jsx)(mp,{selected:l===u.value}),!e.singleSelection&&(0,oe.jsx)(fp,{selected:l.includes(u.value)}),(0,oe.jsxs)("span",{className:"dataviews-filters__search-widget-listitem-value",title:u.label,children:[(0,oe.jsx)(Fa,{className:"dataviews-filters__search-widget-filter-combobox-item-value",value:u.label}),!!u.description&&(0,oe.jsx)("span",{className:"dataviews-filters__search-widget-listitem-description",children:u.description})]})]},u.value)),!s.length&&(0,oe.jsx)("p",{children:(0,Tr.__)("No results found")})]})]})}function vp(t){let{elements:e,isLoading:r}=Ze({elements:t.filter.elements,getElements:t.filter.getElements});if(r)return(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,oe.jsx)(jt.Spinner,{})});if(e.length===0)return(0,oe.jsx)("div",{className:"dataviews-filters__search-widget-no-elements",children:(0,Tr.__)("No elements found")});let o=e.length>10?jx:pp;return(0,oe.jsx)(o,{...t,filter:{...t.filter,elements:e}})}var bp=c(hp(),1),xp=c(_t(),1),Zu=c(H(),1),wp=c(q(),1);var Xu=c(R(),1);function _p({filter:t,view:e,onChangeView:r,fields:o}){let n=e.filters?.find(u=>u.field===t.field),i=ii(t,n),a=(0,Zu.useMemo)(()=>{let u=o.find(d=>d.id===t.field);return u&&{...u,isValid:{},getValue:({item:d})=>d[u.id],setValue:({value:d})=>({[u.id]:d})}},[o,t.field]),l=(0,Zu.useMemo)(()=>(e.filters??[]).reduce((u,d)=>(u[d.field]=d.value,u),{}),[e.filters]),s=(0,xp.useEvent)(u=>{if(!a||!n)return;let d=a.getValue({item:u});(0,bp.default)(d,i)||r({...e,filters:(e.filters??[]).map(p=>p.field===t.field?{...p,operator:n.operator||t.operators[0],value:d===""?void 0:d}:p)})});return!a||!a.Edit||!n?null:(0,Xu.jsx)(wp.Flex,{className:"dataviews-filters__user-input-widget",gap:2.5,direction:"column",children:(0,Xu.jsx)(a.Edit,{hideLabelFromVision:!0,data:l,field:a,operator:n.operator,onChange:s})})}var Hx=Math.pow(10,8)*24*60*60*1e3,hI=-Hx,za=6048e5,yp=864e5;var zx=3600;var Sp=zx*24,bI=Sp*7,Wx=Sp*365.2425,Gx=Wx/12,xI=Gx*3,Qu=Symbol.for("constructDateFrom");function Ge(t,e){return typeof t=="function"?t(e):t&&typeof t=="object"&&Qu in t?t[Qu](e):t instanceof Date?new t.constructor(e):new Date(e)}function fe(t,e){return Ge(e||t,t)}function Wa(t,e,r){let o=fe(t,r?.in);return isNaN(e)?Ge(r?.in||t,NaN):(e&&o.setDate(o.getDate()+e),o)}function Ga(t,e,r){let o=fe(t,r?.in);if(isNaN(e))return Ge(r?.in||t,NaN);if(!e)return o;let n=o.getDate(),i=Ge(r?.in||t,o.getTime());i.setMonth(o.getMonth()+e+1,0);let a=i.getDate();return n>=a?i:(o.setFullYear(i.getFullYear(),i.getMonth(),n),o)}var qx={};function so(){return qx}function Ar(t,e){let r=so(),o=e?.weekStartsOn??e?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,n=fe(t,e?.in),i=n.getDay(),a=(i=i.getTime()?o+1:r.getTime()>=l.getTime()?o:o-1}function Ju(t){let e=fe(t),r=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return r.setUTCFullYear(e.getFullYear()),+t-+r}function Cp(t,...e){let r=Ge.bind(null,t||e.find(o=>typeof o=="object"));return e.map(r)}function ec(t,e){let r=fe(t,e?.in);return r.setHours(0,0,0,0),r}function Ep(t,e,r){let[o,n]=Cp(r?.in,t,e),i=ec(o),a=ec(n),l=+i-Ju(i),s=+a-Ju(a);return Math.round((l-s)/yp)}function Pp(t,e){let r=qa(t,e),o=Ge(e?.in||t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),Ro(o)}function Tp(t,e,r){return Wa(t,e*7,r)}function Ap(t,e,r){return Ga(t,e*12,r)}function Op(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function dn(t){return!(!Op(t)&&typeof t!="number"||isNaN(+fe(t)))}function Ip(t,e){let r=fe(t,e?.in);return r.setDate(1),r.setHours(0,0,0,0),r}function Ya(t,e){let r=fe(t,e?.in);return r.setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r}var Yx={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Rp=(t,e,r)=>{let o,n=Yx[t];return typeof n=="string"?o=n:e===1?o=n.one:o=n.other.replace("{{count}}",e.toString()),r?.addSuffix?r.comparison&&r.comparison>0?"in "+o:o+" ago":o};function Ua(t){return(e={})=>{let r=e.width?String(e.width):t.defaultWidth;return t.formats[r]||t.formats[t.defaultWidth]}}var Ux={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},$x={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Kx={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Vp={date:Ua({formats:Ux,defaultWidth:"full"}),time:Ua({formats:$x,defaultWidth:"full"}),dateTime:Ua({formats:Kx,defaultWidth:"full"})};var Zx={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},kp=(t,e,r,o)=>Zx[t];function fn(t){return(e,r)=>{let o=r?.context?String(r.context):"standalone",n;if(o==="formatting"&&t.formattingValues){let a=t.defaultFormattingWidth||t.defaultWidth,l=r?.width?String(r.width):a;n=t.formattingValues[l]||t.formattingValues[a]}else{let a=t.defaultWidth,l=r?.width?String(r.width):t.defaultWidth;n=t.values[l]||t.values[a]}let i=t.argumentCallback?t.argumentCallback(e):e;return n[i]}}var Xx={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Qx={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Jx={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},ew={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},tw={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},rw={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ow=(t,e)=>{let r=Number(t),o=r%100;if(o>20||o<10)switch(o%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},Dp={ordinalNumber:ow,era:fn({values:Xx,defaultWidth:"wide"}),quarter:fn({values:Qx,defaultWidth:"wide",argumentCallback:t=>t-1}),month:fn({values:Jx,defaultWidth:"wide"}),day:fn({values:ew,defaultWidth:"wide"}),dayPeriod:fn({values:tw,defaultWidth:"wide",formattingValues:rw,defaultFormattingWidth:"wide"})};function mn(t){return(e,r={})=>{let o=r.width,n=o&&t.matchPatterns[o]||t.matchPatterns[t.defaultMatchWidth],i=e.match(n);if(!i)return null;let a=i[0],l=o&&t.parsePatterns[o]||t.parsePatterns[t.defaultParseWidth],s=Array.isArray(l)?iw(l,p=>p.test(a)):nw(l,p=>p.test(a)),u;u=t.valueCallback?t.valueCallback(s):s,u=r.valueCallback?r.valueCallback(u):u;let d=e.slice(a.length);return{value:u,rest:d}}}function nw(t,e){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&e(t[r]))return r}function iw(t,e){for(let r=0;r{let o=e.match(t.matchPattern);if(!o)return null;let n=o[0],i=e.match(t.parsePattern);if(!i)return null;let a=t.valueCallback?t.valueCallback(i[0]):i[0];a=r.valueCallback?r.valueCallback(a):a;let l=e.slice(n.length);return{value:a,rest:l}}}var aw=/^(\d+)(th|st|nd|rd)?/i,sw=/\d+/i,lw={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},uw={any:[/^b/i,/^(a|c)/i]},cw={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},dw={any:[/1/i,/2/i,/3/i,/4/i]},fw={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},mw={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},pw={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},vw={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},gw={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},hw={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Mp={ordinalNumber:Np({matchPattern:aw,parsePattern:sw,valueCallback:t=>parseInt(t,10)}),era:mn({matchPatterns:lw,defaultMatchWidth:"wide",parsePatterns:uw,defaultParseWidth:"any"}),quarter:mn({matchPatterns:cw,defaultMatchWidth:"wide",parsePatterns:dw,defaultParseWidth:"any",valueCallback:t=>t+1}),month:mn({matchPatterns:fw,defaultMatchWidth:"wide",parsePatterns:mw,defaultParseWidth:"any"}),day:mn({matchPatterns:pw,defaultMatchWidth:"wide",parsePatterns:vw,defaultParseWidth:"any"}),dayPeriod:mn({matchPatterns:gw,defaultMatchWidth:"any",parsePatterns:hw,defaultParseWidth:"any"})};var tc={code:"en-US",formatDistance:Rp,formatLong:Vp,formatRelative:kp,localize:Dp,match:Mp,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Fp(t,e){let r=fe(t,e?.in);return Ep(r,Ya(r))+1}function Lp(t,e){let r=fe(t,e?.in),o=+Ro(r)-+Pp(r);return Math.round(o/za)+1}function $a(t,e){let r=fe(t,e?.in),o=r.getFullYear(),n=so(),i=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,a=Ge(e?.in||t,0);a.setFullYear(o+1,0,i),a.setHours(0,0,0,0);let l=Ar(a,e),s=Ge(e?.in||t,0);s.setFullYear(o,0,i),s.setHours(0,0,0,0);let u=Ar(s,e);return+r>=+l?o+1:+r>=+u?o:o-1}function Bp(t,e){let r=so(),o=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,n=$a(t,e),i=Ge(e?.in||t,0);return i.setFullYear(n,0,o),i.setHours(0,0,0,0),Ar(i,e)}function jp(t,e){let r=fe(t,e?.in),o=+Ar(r,e)-+Bp(r,e);return Math.round(o/za)+1}function ie(t,e){let r=t<0?"-":"",o=Math.abs(t).toString().padStart(e,"0");return r+o}var Or={y(t,e){let r=t.getFullYear(),o=r>0?r:1-r;return ie(e==="yy"?o%100:o,e.length)},M(t,e){let r=t.getMonth();return e==="M"?String(r+1):ie(r+1,2)},d(t,e){return ie(t.getDate(),e.length)},a(t,e){let r=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return r==="am"?"a.m.":"p.m."}},h(t,e){return ie(t.getHours()%12||12,e.length)},H(t,e){return ie(t.getHours(),e.length)},m(t,e){return ie(t.getMinutes(),e.length)},s(t,e){return ie(t.getSeconds(),e.length)},S(t,e){let r=e.length,o=t.getMilliseconds(),n=Math.trunc(o*Math.pow(10,r-3));return ie(n,e.length)}};var pn={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},rc={G:function(t,e,r){let o=t.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return r.era(o,{width:"abbreviated"});case"GGGGG":return r.era(o,{width:"narrow"});default:return r.era(o,{width:"wide"})}},y:function(t,e,r){if(e==="yo"){let o=t.getFullYear(),n=o>0?o:1-o;return r.ordinalNumber(n,{unit:"year"})}return Or.y(t,e)},Y:function(t,e,r,o){let n=$a(t,o),i=n>0?n:1-n;if(e==="YY"){let a=i%100;return ie(a,2)}return e==="Yo"?r.ordinalNumber(i,{unit:"year"}):ie(i,e.length)},R:function(t,e){let r=qa(t);return ie(r,e.length)},u:function(t,e){let r=t.getFullYear();return ie(r,e.length)},Q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"Q":return String(o);case"QQ":return ie(o,2);case"Qo":return r.ordinalNumber(o,{unit:"quarter"});case"QQQ":return r.quarter(o,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(o,{width:"narrow",context:"formatting"});default:return r.quarter(o,{width:"wide",context:"formatting"})}},q:function(t,e,r){let o=Math.ceil((t.getMonth()+1)/3);switch(e){case"q":return String(o);case"qq":return ie(o,2);case"qo":return r.ordinalNumber(o,{unit:"quarter"});case"qqq":return r.quarter(o,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(o,{width:"narrow",context:"standalone"});default:return r.quarter(o,{width:"wide",context:"standalone"})}},M:function(t,e,r){let o=t.getMonth();switch(e){case"M":case"MM":return Or.M(t,e);case"Mo":return r.ordinalNumber(o+1,{unit:"month"});case"MMM":return r.month(o,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(o,{width:"narrow",context:"formatting"});default:return r.month(o,{width:"wide",context:"formatting"})}},L:function(t,e,r){let o=t.getMonth();switch(e){case"L":return String(o+1);case"LL":return ie(o+1,2);case"Lo":return r.ordinalNumber(o+1,{unit:"month"});case"LLL":return r.month(o,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(o,{width:"narrow",context:"standalone"});default:return r.month(o,{width:"wide",context:"standalone"})}},w:function(t,e,r,o){let n=jp(t,o);return e==="wo"?r.ordinalNumber(n,{unit:"week"}):ie(n,e.length)},I:function(t,e,r){let o=Lp(t);return e==="Io"?r.ordinalNumber(o,{unit:"week"}):ie(o,e.length)},d:function(t,e,r){return e==="do"?r.ordinalNumber(t.getDate(),{unit:"date"}):Or.d(t,e)},D:function(t,e,r){let o=Fp(t);return e==="Do"?r.ordinalNumber(o,{unit:"dayOfYear"}):ie(o,e.length)},E:function(t,e,r){let o=t.getDay();switch(e){case"E":case"EE":case"EEE":return r.day(o,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(o,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},e:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return ie(i,2);case"eo":return r.ordinalNumber(i,{unit:"day"});case"eee":return r.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},c:function(t,e,r,o){let n=t.getDay(),i=(n-o.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return ie(i,e.length);case"co":return r.ordinalNumber(i,{unit:"day"});case"ccc":return r.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(n,{width:"narrow",context:"standalone"});case"cccccc":return r.day(n,{width:"short",context:"standalone"});default:return r.day(n,{width:"wide",context:"standalone"})}},i:function(t,e,r){let o=t.getDay(),n=o===0?7:o;switch(e){case"i":return String(n);case"ii":return ie(n,e.length);case"io":return r.ordinalNumber(n,{unit:"day"});case"iii":return r.day(o,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(o,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(o,{width:"short",context:"formatting"});default:return r.day(o,{width:"wide",context:"formatting"})}},a:function(t,e,r){let n=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(t,e,r){let o=t.getHours(),n;switch(o===12?n=pn.noon:o===0?n=pn.midnight:n=o/12>=1?"pm":"am",e){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(t,e,r){let o=t.getHours(),n;switch(o>=17?n=pn.evening:o>=12?n=pn.afternoon:o>=4?n=pn.morning:n=pn.night,e){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(t,e,r){if(e==="ho"){let o=t.getHours()%12;return o===0&&(o=12),r.ordinalNumber(o,{unit:"hour"})}return Or.h(t,e)},H:function(t,e,r){return e==="Ho"?r.ordinalNumber(t.getHours(),{unit:"hour"}):Or.H(t,e)},K:function(t,e,r){let o=t.getHours()%12;return e==="Ko"?r.ordinalNumber(o,{unit:"hour"}):ie(o,e.length)},k:function(t,e,r){let o=t.getHours();return o===0&&(o=24),e==="ko"?r.ordinalNumber(o,{unit:"hour"}):ie(o,e.length)},m:function(t,e,r){return e==="mo"?r.ordinalNumber(t.getMinutes(),{unit:"minute"}):Or.m(t,e)},s:function(t,e,r){return e==="so"?r.ordinalNumber(t.getSeconds(),{unit:"second"}):Or.s(t,e)},S:function(t,e){return Or.S(t,e)},X:function(t,e,r){let o=t.getTimezoneOffset();if(o===0)return"Z";switch(e){case"X":return zp(o);case"XXXX":case"XX":return Vo(o);default:return Vo(o,":")}},x:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"x":return zp(o);case"xxxx":case"xx":return Vo(o);default:return Vo(o,":")}},O:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+Hp(o,":");default:return"GMT"+Vo(o,":")}},z:function(t,e,r){let o=t.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+Hp(o,":");default:return"GMT"+Vo(o,":")}},t:function(t,e,r){let o=Math.trunc(+t/1e3);return ie(o,e.length)},T:function(t,e,r){return ie(+t,e.length)}};function Hp(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=Math.trunc(o/60),i=o%60;return i===0?r+String(n):r+String(n)+e+ie(i,2)}function zp(t,e){return t%60===0?(t>0?"-":"+")+ie(Math.abs(t)/60,2):Vo(t,e)}function Vo(t,e=""){let r=t>0?"-":"+",o=Math.abs(t),n=ie(Math.trunc(o/60),2),i=ie(o%60,2);return r+n+e+i}var Wp=(t,e)=>{switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}},Gp=(t,e)=>{switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}},bw=(t,e)=>{let r=t.match(/(P+)(p+)?/)||[],o=r[1],n=r[2];if(!n)return Wp(t,e);let i;switch(o){case"P":i=e.dateTime({width:"short"});break;case"PP":i=e.dateTime({width:"medium"});break;case"PPP":i=e.dateTime({width:"long"});break;default:i=e.dateTime({width:"full"});break}return i.replace("{{date}}",Wp(o,e)).replace("{{time}}",Gp(n,e))},qp={p:Gp,P:bw};var xw=/^D+$/,ww=/^Y+$/,_w=["D","DD","YY","YYYY"];function Yp(t){return xw.test(t)}function Up(t){return ww.test(t)}function $p(t,e,r){let o=yw(t,e,r);if(console.warn(o),_w.includes(t))throw new RangeError(o)}function yw(t,e,r){let o=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${e}\`) for formatting ${o} to the input \`${r}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var Sw=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Cw=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Ew=/^'([^]*?)'?$/,Pw=/''/g,Tw=/[a-zA-Z]/;function oc(t,e,r){let o=so(),n=r?.locale??o.locale??tc,i=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??o.firstWeekContainsDate??o.locale?.options?.firstWeekContainsDate??1,a=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??o.weekStartsOn??o.locale?.options?.weekStartsOn??0,l=fe(t,r?.in);if(!dn(l))throw new RangeError("Invalid time value");let s=e.match(Cw).map(d=>{let p=d[0];if(p==="p"||p==="P"){let f=qp[p];return f(d,n.formatLong)}return d}).join("").match(Sw).map(d=>{if(d==="''")return{isToken:!1,value:"'"};let p=d[0];if(p==="'")return{isToken:!1,value:Aw(d)};if(rc[p])return{isToken:!0,value:d};if(p.match(Tw))throw new RangeError("Format string contains an unescaped latin alphabet character `"+p+"`");return{isToken:!1,value:d}});n.localize.preprocessor&&(s=n.localize.preprocessor(l,s));let u={firstWeekContainsDate:i,weekStartsOn:a,locale:n};return s.map(d=>{if(!d.isToken)return d.value;let p=d.value;(!r?.useAdditionalWeekYearTokens&&Up(p)||!r?.useAdditionalDayOfYearTokens&&Yp(p))&&$p(p,e,String(t));let f=rc[p[0]];return f(l,p,n.localize,u)}).join("")}function Aw(t){let e=t.match(Ew);return e?e[1].replace(Pw,"'"):t}function ko(t,e,r){return Wa(t,-e,r)}function Ka(t,e,r){return Ga(t,-e,r)}function Kp(t,e,r){return Tp(t,-e,r)}function Za(t,e,r){return Ap(t,-e,r)}var B=c(U(),1),Re=c(H(),1),bt=c(Do(),1);var nc=c(R(),1),Fe={Name:(0,nc.jsx)("span",{className:"dataviews-filters__summary-filter-text-name"}),Value:(0,nc.jsx)("span",{className:"dataviews-filters__summary-filter-text-value"})};function Xp(t,e){switch(e){case"days":return ko(new Date,t);case"weeks":return Kp(new Date,t);case"months":return Ka(new Date,t);case"years":return Za(new Date,t);default:return new Date}}var Qp={label:(0,B.__)("Is none of"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is none of: %2$s"),t.name,e.map(r=>r.label).join(", ")),Fe),filter:((t,e,r)=>{if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?!r.some(n=>o.includes(n)):typeof o=="string"?!r.includes(o):!1}),selection:"multi"},Xa=[{name:Se,label:(0,B.__)("Includes"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s includes: %2$s"),t.name,e.map(r=>r.label).join(", ")),Fe),filter(t,e,r){if(!r?.length)return!0;let o=e.getValue({item:t});return Array.isArray(o)?r.some(n=>o.includes(n)):typeof o=="string"?r.includes(o):!1},selection:"multi"},{name:Ce,...Qp},{name:it,label:(0,B.__)("Includes all"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s includes all: %2$s"),t.name,e.map(r=>r.label).join(", ")),Fe),filter(t,e,r){return r?.length?r.every(o=>e.getValue({item:t})?.includes(o)):!0},selection:"multi"},{name:at,...Qp},{name:mt,label:(0,B.__)("Between (inc)"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s between (inc): %2$s and %3$s"),t.name,e[0].label[0],e[0].label[1]),Fe),filter(t,e,r){if(!Array.isArray(r)||r.length!==2||r[0]===void 0||r[1]===void 0)return!0;let o=e.getValue({item:t});return typeof o=="number"||o instanceof Date||typeof o=="string"?o>=r[0]&&o<=r[1]:!1},selection:"custom"},{name:pt,label:(0,B.__)("In the past"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is in the past: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Fe),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Xp(r.value,r.unit),n=(0,bt.getDate)(e.getValue({item:t}));return n>=o&&n<=new Date},selection:"custom"},{name:yt,label:(0,B.__)("Over"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is over: %2$s"),t.name,`${e[0].value.value} ${e[0].value.unit}`),Fe),filter(t,e,r){if(r?.value===void 0||r?.unit===void 0)return!0;let o=Xp(r.value,r.unit);return(0,bt.getDate)(e.getValue({item:t}))(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===e.getValue({item:t})||r===void 0},selection:"single"},{name:Pe,label:(0,B.__)("Is not"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is not: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r!==e.getValue({item:t})},selection:"single"},{name:Br,label:(0,B.__)("Less than"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is less than: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is greater than: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>r},selection:"single"},{name:Hr,label:(0,B.__)("Less than or equal"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is less than or equal to: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})<=r},selection:"single"},{name:zr,label:(0,B.__)("Greater than or equal"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is greater than or equal to: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){return r===void 0?!0:e.getValue({item:t})>=r},selection:"single"},{name:Wr,label:(0,B.__)("Before"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is before: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,bt.getDate)(r);return(0,bt.getDate)(e.getValue({item:t}))(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is after: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,bt.getDate)(r);return(0,bt.getDate)(e.getValue({item:t}))>o},selection:"single"},{name:qr,label:(0,B.__)("Before (inc)"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is on or before: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,bt.getDate)(r);return(0,bt.getDate)(e.getValue({item:t}))<=o},selection:"single"},{name:Yr,label:(0,B.__)("After (inc)"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is on or after: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,bt.getDate)(r);return(0,bt.getDate)(e.getValue({item:t}))>=o},selection:"single"},{name:Zt,label:(0,B.__)("Contains"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s contains: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:Xt,label:(0,B.__)("Doesn't contain"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s doesn't contain: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&!o.toLowerCase().includes(String(r).toLowerCase())},selection:"single"},{name:Qt,label:(0,B.__)("Starts with"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s starts with: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=e.getValue({item:t});return typeof o=="string"&&r&&o.toLowerCase().startsWith(String(r).toLowerCase())},selection:"single"},{name:Ur,label:(0,B.__)("On"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,bt.getDate)(r),n=(0,bt.getDate)(e.getValue({item:t}));return o.getTime()===n.getTime()},selection:"single"},{name:$r,label:(0,B.__)("Not on"),filterText:(t,e)=>(0,Re.createInterpolateElement)((0,B.sprintf)((0,B.__)("%1$s is not: %2$s"),t.name,e[0].label),Fe),filter(t,e,r){if(r===void 0)return!0;let o=(0,bt.getDate)(r),n=(0,bt.getDate)(e.getValue({item:t}));return o.getTime()!==n.getTime()},selection:"single"}],No=t=>Xa.find(e=>e.name===t),Jp=()=>Xa.map(t=>t.name),ev=t=>Xa.filter(e=>e.selection==="single").some(e=>e.name===t),tv=t=>Xa.some(e=>e.name===t);var tt=c(R(),1),Ow="Enter",Iw=" ",Rw=({activeElements:t,filterInView:e,filter:r})=>{if(t===void 0||t.length===0)return r.name;let o=No(e?.operator);return o!==void 0?o.filterText(r,t):(0,Ir.sprintf)((0,Ir.__)("Unknown status for %1$s"),r.name)};function Vw({filter:t,view:e,onChangeView:r}){let o=t.operators?.map(a=>({value:a,label:No(a)?.label||a})),n=e.filters?.find(a=>a.field===t.field),i=n?.operator||t.operators[0];return o.length>1&&(0,tt.jsxs)(F,{direction:"row",gap:"sm",justify:"flex-start",className:"dataviews-filters__summary-operators-container",align:"center",children:[(0,tt.jsx)(Gt.FlexItem,{className:"dataviews-filters__summary-operators-filter-name",children:t.name}),(0,tt.jsx)(Gt.SelectControl,{className:"dataviews-filters__summary-operators-filter-select",label:(0,Ir.__)("Conditions"),value:i,options:o,onChange:a=>{let l=a,s=n?.operator,u=n?[...(e.filters??[]).map(d=>{if(d.field===t.field){let p=No(s)?.selection,f=No(l)?.selection,m=p!==f||[p,f].includes("custom");return{...d,value:m?void 0:d.value,operator:l}}return d})]:[...e.filters??[],{field:t.field,operator:l,value:void 0}];r({...e,page:1,filters:u})},size:"small",variant:"minimal",hideLabelFromVision:!0})]})}function rv({addFilterRef:t,openedFilter:e,fields:r,...o}){let n=(0,Qa.useRef)(null),{filter:i,view:a,onChangeView:l}=o,s=a.filters?.find(h=>h.field===i.field),u=[],d=(0,Qa.useMemo)(()=>{let h=r.find(x=>x.id===i.field);return h&&{...h,getValue:({item:x})=>x[h.id]}},[r,i.field]),{elements:p}=Ze({elements:i.elements,getElements:i.getElements});if(p.length>0)u=p.filter(h=>i.singleSelection?h.value===s?.value:s?.value?.includes(h.value));else if(Array.isArray(s?.value)){let h=s.value.map(x=>d?.getValueFormatted({item:{[d.id]:x},field:d})||String(x));u=[{value:s.value,label:h}]}else if(typeof s?.value=="object")u=[{value:s.value,label:s.value}];else if(s?.value!==void 0){let h=d!==void 0?d.getValueFormatted({item:{[d.id]:s.value},field:d}):String(s.value);u=[{value:s.value,label:h}]}let f=i.isPrimary,m=s?.isLocked,v=!m&&s?.value!==void 0,_=!m&&(!f||v);return(0,tt.jsx)(Gt.Dropdown,{defaultOpen:e===i.field,contentClassName:"dataviews-filters__summary-popover",popoverProps:{placement:"bottom-start",role:"dialog"},onClose:()=>{n.current?.focus()},renderToggle:({isOpen:h,onToggle:x})=>(0,tt.jsxs)("div",{className:"dataviews-filters__summary-chip-container",children:[(0,tt.jsx)(Gt.Tooltip,{text:(0,Ir.sprintf)((0,Ir.__)("Filter by: %1$s"),i.name.toLowerCase()),placement:"top",children:(0,tt.jsx)("div",{className:z("dataviews-filters__summary-chip",{"has-reset":_,"has-values":v,"is-not-clickable":m}),role:"button",tabIndex:m?-1:0,onClick:()=>{m||x()},onKeyDown:y=>{!m&&[Ow,Iw].includes(y.key)&&(x(),y.preventDefault())},"aria-disabled":m,"aria-pressed":h,"aria-expanded":h,ref:n,children:(0,tt.jsx)(Rw,{activeElements:u,filterInView:s,filter:i})})}),_&&(0,tt.jsx)(Gt.Tooltip,{text:f?(0,Ir.__)("Reset"):(0,Ir.__)("Remove"),placement:"top",children:(0,tt.jsx)("button",{className:z("dataviews-filters__summary-chip-remove",{"has-values":v}),onClick:()=>{l({...a,page:1,filters:a.filters?.filter(y=>y.field!==i.field)}),f?n.current?.focus():t.current?.focus()},children:(0,tt.jsx)(Gt.Icon,{icon:Rn})})})]}),renderContent:()=>(0,tt.jsxs)(F,{direction:"column",justify:"flex-start",children:[(0,tt.jsx)(Vw,{...o}),o.filter.hasElements?(0,tt.jsx)(vp,{...o,filter:{...o.filter,elements:p}}):(0,tt.jsx)(_p,{...o,fields:r})]})})}var Ja=c(q(),1),ov=c(U(),1),nv=c(H(),1);var Rr=c(R(),1),{Menu:si}=K(Ja.privateApis);function ic({filters:t,view:e,onChangeView:r,setOpenedFilter:o,triggerProps:n}){let i=t.filter(a=>!a.isVisible);return(0,Rr.jsxs)(si,{children:[(0,Rr.jsx)(si.TriggerButton,{...n}),(0,Rr.jsx)(si.Popover,{children:i.map(a=>(0,Rr.jsx)(si.Item,{onClick:()=>{o(a.field),r({...e,page:1,filters:[...e.filters||[],{field:a.field,value:void 0,operator:a.operators[0]}]})},children:(0,Rr.jsx)(si.ItemLabel,{children:a.name})},a.field))})]})}function kw({filters:t,view:e,onChangeView:r,setOpenedFilter:o},n){if(!t.length||t.every(({isPrimary:a})=>a))return null;let i=t.filter(a=>!a.isVisible);return(0,Rr.jsx)(ic,{triggerProps:{render:(0,Rr.jsx)(Ja.Button,{accessibleWhenDisabled:!0,size:"compact",className:"dataviews-filters-button",variant:"tertiary",disabled:!i.length,ref:n}),children:(0,ov.__)("Add filter")},filters:t,view:e,onChangeView:r,setOpenedFilter:o})}var iv=(0,nv.forwardRef)(kw);var av=c(q(),1),sv=c(U(),1),lv=c(R(),1);function uv({filters:t,view:e,onChangeView:r}){let o=i=>t.some(a=>a.field===i&&a.isPrimary),n=!e.search&&!e.filters?.some(i=>!i.isLocked&&(i.value!==void 0||!o(i.field)));return(0,lv.jsx)(av.Button,{disabled:n,accessibleWhenDisabled:!0,size:"compact",variant:"tertiary",className:"dataviews-filters__reset-button",onClick:()=>{r({...e,page:1,search:"",filters:e.filters?.filter(i=>!!i.isLocked)||[]})},children:(0,sv.__)("Reset")})}var cv=c(H(),1);function Dw(t,e){return(0,cv.useMemo)(()=>{let r=[];return t.forEach(o=>{if(o.filterBy===!1||!o.hasElements&&!o.Edit)return;let n=o.filterBy.operators,i=!!o.filterBy?.isPrimary,a=e.filters?.some(l=>l.field===o.id&&!!l.isLocked)??!1;r.push({field:o.id,name:o.label,elements:o.elements,getElements:o.getElements,hasElements:o.hasElements,singleSelection:n.some(l=>ev(l)),operators:n,isVisible:a||i||!!e.filters?.some(l=>l.field===o.id&&tv(l.operator)),isPrimary:i,isLocked:a})}),r.sort((o,n)=>o.isLocked&&!n.isLocked?-1:!o.isLocked&&n.isLocked?1:o.isPrimary&&!n.isPrimary?-1:!o.isPrimary&&n.isPrimary?1:o.name.localeCompare(n.name)),r},[t,e])}var li=Dw;var ui=c(R(),1);function Nw({className:t}){let{fields:e,view:r,onChangeView:o,openedFilter:n,setOpenedFilter:i}=(0,vn.useContext)(G),a=(0,vn.useRef)(null),l=li(e,r),s=(0,ui.jsx)(iv,{filters:l,view:r,onChangeView:o,ref:a,setOpenedFilter:i},"add-filter"),u=l.filter(p=>p.isVisible);if(u.length===0)return null;let d=[...u.map(p=>(0,ui.jsx)(rv,{filter:p,view:r,fields:e,onChangeView:o,addFilterRef:a,openedFilter:n},p.field)),s];return d.push((0,ui.jsx)(uv,{filters:l,view:r,onChangeView:o},"reset-filters")),(0,ui.jsx)(F,{direction:"row",justify:"flex-start",gap:"sm",style:{width:"fit-content"},wrap:"wrap",className:t,children:d})}var ci=(0,vn.memo)(Nw);var lo=c(H(),1),dv=c(q(),1);var es=c(U(),1);var lr=c(R(),1);function Mw(){let{filters:t,view:e,onChangeView:r,setOpenedFilter:o,isShowingFilter:n,setIsShowingFilter:i}=(0,lo.useContext)(G),a=(0,lo.useRef)(null),l=(0,lo.useCallback)(m=>{r(m),i(!0)},[r,i]);if(t.length===0)return null;let s=t.some(m=>m.isVisible),u={label:(0,es.__)("Add filter"),"aria-expanded":!1,isPressed:!1},d={label:(0,es._x)("Filter","verb"),"aria-expanded":n,isPressed:n,onClick:()=>{n||o(null),i(!n)}},p=t.some(m=>m.isPrimary||m.isLocked),f=(0,lr.jsx)(dv.Button,{ref:a,className:"dataviews-filters__visibility-toggle",size:"compact",icon:Vn,disabled:p,accessibleWhenDisabled:!0,...s?d:u});return(0,lr.jsx)("div",{className:"dataviews-filters__container-visibility-toggle",children:s?(0,lr.jsx)(Fw,{buttonRef:a,filtersCount:e.filters?.length,children:f}):(0,lr.jsx)(ic,{filters:t,view:e,onChangeView:l,setOpenedFilter:o,triggerProps:{render:f}})})}function Fw({buttonRef:t,filtersCount:e,children:r}){return(0,lo.useEffect)(()=>()=>{t.current?.focus()},[t]),(0,lr.jsxs)(lr.Fragment,{children:[r,!!e&&(0,lr.jsx)("span",{className:"dataviews-filters-toggle__count",children:e})]})}var ts=Mw;var fv=c(H(),1);var mv=c(R(),1);function Lw(t){let{isShowingFilter:e}=(0,fv.useContext)(G);return e?(0,mv.jsx)(ci,{...t}):null}var rs=Lw;var pv=c(H(),1),vv=c(U(),1);var ac=c(R(),1);function sc({className:t}){let{actions:e=[],data:r,fields:o,getItemId:n,getItemLevel:i,hasInitiallyLoaded:a,isLoading:l,view:s,onChangeView:u,selection:d,onChangeSelection:p,setOpenedFilter:f,onClickItem:m,isItemClickable:v,renderItemLink:_,defaultLayouts:h,empty:x=(0,ac.jsx)("p",{children:(0,vv.__)("No results")})}=(0,pv.useContext)(G);if(!a)return null;let y=eo.find(S=>S.type===s.type&&h[S.type])?.component;return(0,ac.jsx)(y,{className:t,actions:e,data:r,fields:o,getItemId:n,getItemLevel:i,isLoading:l,onChangeView:u,onChangeSelection:p,selection:d,setOpenedFilter:f,onClickItem:m,renderItemLink:_,isItemClickable:v,view:s,empty:x})}var gv=c(H(),1);var gn=c(R(),1),Bw=[];function lc(){let{view:t,paginationInfo:{totalItems:e=0,totalPages:r},data:o,actions:n=Bw,isLoading:i,hasInitiallyLoaded:a,hasInfiniteScrollHandler:l}=(0,gv.useContext)(G),s=!!i&&a&&!l&&!!o?.length,u=er(!!s),d=Yo(n,o)&&[Ho,ra].includes(t.type);return!s&&(!e||!r||r<=1&&!d)?null:(!!e||s)&&(0,gn.jsx)("div",{className:"dataviews-footer",inert:s?"true":void 0,children:(0,gn.jsxs)(F,{direction:"row",justify:"end",align:"center",className:z("dataviews-footer__content",{"is-refreshing":u}),gap:"sm",children:[d&&(0,gn.jsx)(aa,{}),(0,gn.jsx)(lf,{})]})})}var hv=c(U(),1),qt=c(H(),1),bv=c(q(),1),xv=c(_t(),1);var wv=c(R(),1),jw=(0,qt.memo)(function({label:e}){let{view:r,onChangeView:o}=(0,qt.useContext)(G),[n,i,a]=(0,xv.useDebouncedInput)(r.search);(0,qt.useEffect)(()=>{i(r.search??"")},[r.search,i]);let l=(0,qt.useRef)(o),s=(0,qt.useRef)(r);(0,qt.useEffect)(()=>{l.current=o,s.current=r},[o,r]),(0,qt.useEffect)(()=>{a!==s.current?.search&&l.current({...s.current,page:1,search:a})},[a]);let u=e||(0,hv.__)("Search");return(0,wv.jsx)(bv.SearchControl,{className:"dataviews-search",onChange:i,value:n,label:u,placeholder:u,size:"compact"})}),uc=jw;var Le=c(q(),1),Vr=c(U(),1),Yt=c(H(),1);var dc=c(yv(),1),Tv=c(_t(),1);var Sv=c(q(),1),cc=c(U(),1),Cv=c(H(),1);var Ev=c(R(),1);function Pv(){let t=(0,Cv.useContext)(G),{view:e,onChangeView:r}=t,o=e.infiniteScrollEnabled??!1;return t.hasInfiniteScrollHandler?(0,Ev.jsx)(Sv.ToggleControl,{label:(0,cc.__)("Enable infinite scroll"),help:(0,cc.__)("Automatically load more content as you scroll, instead of showing pagination links."),checked:o,onChange:n=>{r({...e,infiniteScrollEnabled:n})}}):null}var re=c(R(),1),{Menu:di}=K(Le.privateApis),Hw={className:"dataviews-config__popover",placement:"bottom-end",offset:9};function fc(){let{view:t,onChangeView:e,defaultLayouts:r}=(0,Yt.useContext)(G),o=Object.keys(r);if(o.length<=1)return null;let n=eo.find(i=>t.type===i.type);return(0,re.jsxs)(di,{children:[(0,re.jsx)(di.TriggerButton,{render:(0,re.jsx)(Le.Button,{size:"compact",icon:n?.icon,label:(0,Vr.__)("Layout")})}),(0,re.jsx)(di.Popover,{children:o.map(i=>{let a=eo.find(l=>l.type===i);return a?(0,re.jsx)(di.RadioItem,{value:i,name:"view-actions-available-view",checked:i===t.type,hideOnClick:!0,onChange:l=>{switch(l.target.value){case"list":case"grid":case"table":case"pickerGrid":case"pickerTable":case"activity":let s={...t};return"layout"in s&&delete s.layout,e({...s,type:l.target.value,...r[l.target.value]})}(0,dc.default)("Invalid dataview")},children:(0,re.jsx)(di.ItemLabel,{children:a.label})},i):null})})]})}function zw(){let{view:t,fields:e,onChangeView:r}=(0,Yt.useContext)(G),o=(0,Yt.useMemo)(()=>e.filter(i=>i.enableSorting!==!1).map(i=>({label:i.label,value:i.id})),[e]);return(0,re.jsx)(Le.SelectControl,{__next40pxDefaultSize:!0,label:(0,Vr.__)("Sort by"),value:t.sort?.field,options:o,onChange:n=>{r({...t,sort:{direction:t?.sort?.direction||"desc",field:n},showLevels:!1})}})}function Ww(){let{view:t,fields:e,onChangeView:r}=(0,Yt.useContext)(G);if(e.filter(i=>i.enableSorting!==!1).length===0)return null;let n=t.sort?.direction;return!n&&t.sort?.field&&(n="desc"),(0,re.jsx)(Le.__experimentalToggleGroupControl,{className:"dataviews-view-config__sort-direction",__next40pxDefaultSize:!0,isBlock:!0,label:(0,Vr.__)("Order"),value:n,onChange:i=>{if(i==="asc"||i==="desc"){r({...t,sort:{direction:i,field:t.sort?.field||e.find(a=>a.enableSorting!==!1)?.id||""},showLevels:!1});return}(0,dc.default)("Invalid direction")},children:Ji.map(i=>(0,re.jsx)(Le.__experimentalToggleGroupControlOptionIcon,{value:i,icon:gd[i],label:ta[i]},i))})}function Gw(){let{view:t,config:e,onChangeView:r}=(0,Yt.useContext)(G),{infiniteScrollEnabled:o}=t;return!e||!e.perPageSizes||e.perPageSizes.length<2||e.perPageSizes.length>6||o?null:(0,re.jsx)(Le.__experimentalToggleGroupControl,{__next40pxDefaultSize:!0,isBlock:!0,label:(0,Vr.__)("Items per page"),value:t.perPage||10,disabled:!t?.sort?.field,onChange:n=>{let i=typeof n=="number"||n===void 0?n:parseInt(n,10);r({...t,perPage:i,page:1})},children:e.perPageSizes.map(n=>(0,re.jsx)(Le.__experimentalToggleGroupControlOption,{value:n,label:n.toString()},n))})}function qw(){let{onReset:t}=(0,Yt.useContext)(G);return t===void 0?null:(0,re.jsx)(Le.Button,{variant:"tertiary",size:"compact",disabled:t===!1,accessibleWhenDisabled:!0,className:"dataviews-view-config__reset-button",onClick:()=>{typeof t=="function"&&t()},children:(0,Vr.__)("Reset view")})}function mc(){let{view:t,onReset:e}=(0,Yt.useContext)(G),r=(0,Tv.useInstanceId)(Av,"dataviews-view-config-dropdown"),o=eo.find(i=>i.type===t.type),n=typeof e=="function";return(0,re.jsx)(Le.Dropdown,{expandOnMobile:!0,popoverProps:{...Hw,id:r},renderToggle:({onToggle:i,isOpen:a})=>(0,re.jsxs)("div",{className:"dataviews-view-config__toggle-wrapper",children:[(0,re.jsx)(Le.Button,{size:"compact",icon:ml,label:(0,Vr._x)("View options","View is used as a noun"),onClick:i,"aria-expanded":a?"true":"false","aria-controls":r}),n&&(0,re.jsx)("span",{className:"dataviews-view-config__modified-indicator"})]}),renderContent:()=>(0,re.jsx)(Le.__experimentalDropdownContentWrapper,{paddingSize:"medium",className:"dataviews-config__popover-content-wrapper",children:(0,re.jsxs)(F,{direction:"column",className:"dataviews-view-config",gap:"xl",children:[(0,re.jsxs)(F,{direction:"row",justify:"space-between",align:"center",className:"dataviews-view-config__header",children:[(0,re.jsx)(Le.__experimentalHeading,{level:2,className:"dataviews-settings-section__title",children:(0,Vr.__)("Appearance")}),(0,re.jsx)(qw,{})]}),(0,re.jsxs)(F,{direction:"column",gap:"lg",children:[(0,re.jsxs)(F,{direction:"row",gap:"sm",className:"dataviews-view-config__sort-controls",children:[(0,re.jsx)(zw,{}),(0,re.jsx)(Ww,{})]}),!!o?.viewConfigOptions&&(0,re.jsx)(o.viewConfigOptions,{}),(0,re.jsx)(Pv,{}),(0,re.jsx)(Gw,{}),(0,re.jsx)(ua,{})]})]})})})}function Av(){return(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(fc,{}),(0,re.jsx)(mc,{})]})}var Yw=(0,Yt.memo)(Av),Ov=Yw;var Iv=c(q(),1),Rv=c(H(),1);function ve(t,e){let r;return t?.required&&e?.required?r=e?.required?.message?e.required:void 0:t?.pattern&&e?.pattern?r=e.pattern:t?.min&&e?.min?r=e.min:t?.max&&e?.max?r=e.max:t?.minLength&&e?.minLength?r=e.minLength:t?.maxLength&&e?.maxLength?r=e.maxLength:t?.elements&&e?.elements?r=e.elements:e?.custom&&(r=e.custom),r}var Vv=c(R(),1),{ValidatedCheckboxControl:Uw}=K(Iv.privateApis);function kv({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,label:s,description:u,isValid:d}=t,p=(0,Rv.useCallback)(()=>{e(l({item:r,value:!a({item:r})}))},[r,a,e,l]);return(0,Vv.jsx)(Uw,{required:!!t.isValid?.required,markWhenOptional:n,customValidity:ve(d,i),hidden:o,label:s,help:u,checked:a({item:r}),onChange:p})}var os=c(q(),1),Dv=c(H(),1);var pc=c(R(),1),{ValidatedComboboxControl:$w}=K(os.privateApis);function ns({data:t,field:e,onChange:r,hideLabelFromVision:o,validity:n}){let{label:i,description:a,placeholder:l,getValue:s,setValue:u,isValid:d}=e,p=s({item:t})??"",f=(0,Dv.useCallback)(_=>r(u({item:t,value:_??""})),[t,r,u]),{elements:m,isLoading:v}=Ze({elements:e.elements,getElements:e.getElements});return v?(0,pc.jsx)(os.Spinner,{}):(0,pc.jsx)($w,{required:!!e.isValid?.required,customValidity:ve(d,n),label:i,value:p,help:a,placeholder:l,options:m,onChange:f,hideLabelFromVision:o,allowReset:!0,expandOnFocus:!0})}var ls=c(q(),1),Ht=c(H(),1),ss=c(U(),1),Dt=c(Do(),1);var bn=c(q(),1),vc=c(H(),1),ur=c(U(),1);var hn=c(R(),1),Kw={[pt]:[{value:"days",label:(0,ur.__)("Days")},{value:"weeks",label:(0,ur.__)("Weeks")},{value:"months",label:(0,ur.__)("Months")},{value:"years",label:(0,ur.__)("Years")}],[yt]:[{value:"days",label:(0,ur.__)("Days ago")},{value:"weeks",label:(0,ur.__)("Weeks ago")},{value:"months",label:(0,ur.__)("Months ago")},{value:"years",label:(0,ur.__)("Years ago")}]};function is({className:t,data:e,field:r,onChange:o,hideLabelFromVision:n,operator:i}){let a=Kw[i===pt?"inThePast":"over"],{id:l,label:s,getValue:u,setValue:d}=r,p=u({item:e}),{value:f="",unit:m=a[0].value}=p&&typeof p=="object"?p:{},v=(0,vc.useCallback)(h=>o(d({item:e,value:{value:Number(h),unit:m}})),[o,d,e,m]),_=(0,vc.useCallback)(h=>o(d({item:e,value:{value:f,unit:h}})),[o,d,e,f]);return(0,hn.jsx)(bn.BaseControl,{id:l,className:z(t,"dataviews-controls__relative-date"),label:s,hideLabelFromVision:n,children:(0,hn.jsxs)(F,{direction:"row",gap:"sm",children:[(0,hn.jsx)(bn.__experimentalNumberControl,{__next40pxDefaultSize:!0,className:"dataviews-controls__relative-date-number",spinControls:"none",min:1,step:1,value:f,onChange:v}),(0,hn.jsx)(bn.SelectControl,{className:"dataviews-controls__relative-date-unit",__next40pxDefaultSize:!0,label:(0,ur.__)("Unit"),value:m,options:a,onChange:_,hideLabelFromVision:!0})]})})}var Nv=c(Do(),1);function as(t){if(!t)return null;let e=(0,Nv.getDate)(t);return e&&dn(e)?e:null}var uo=c(R(),1),{DateCalendar:Zw,ValidatedInputControl:Xw}=K(ls.privateApis),Qw=t=>t?(0,Dt.dateI18n)("Y-m-d\\TH:i",(0,Dt.getDate)(t)):"";function Jw({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,description:s,setValue:u,getValue:d,isValid:p}=e,f=d({item:t}),m=typeof f=="string"?f:void 0,[v,_]=(0,Ht.useState)(()=>as(m)||new Date),h=(0,Ht.useRef)(null),x=(0,Ht.useRef)(void 0),y=(0,Ht.useRef)(null),S=(0,Ht.useCallback)(k=>r(u({item:t,value:k})),[t,r,u]);(0,Ht.useEffect)(()=>()=>{x.current&&clearTimeout(x.current)},[]);let V=(0,Ht.useCallback)(k=>{let b;if(k){let P=(0,Dt.dateI18n)("Y-m-d",k),T;m?T=(0,Dt.dateI18n)("H:i",(0,Dt.getDate)(m)):T=(0,Dt.dateI18n)("H:i",k),b=(0,Dt.getDate)(`${P}T${T}`).toISOString(),S(b),x.current&&clearTimeout(x.current)}else S(void 0);y.current=h.current&&h.current.ownerDocument.activeElement,x.current=setTimeout(()=>{h.current&&(h.current.focus(),h.current.blur(),S(b),y.current&&y.current instanceof HTMLElement&&y.current.focus())},0)},[S,m]),O=(0,Ht.useCallback)(k=>{if(k){let b=(0,Dt.getDate)(k);S(b.toISOString());let P=as(b.toISOString());P&&_(P)}else S(void 0)},[S]),{format:N}=e,D=N.weekStartsOn??(0,Dt.getSettings)().l10n.startOfWeek,{timezone:{string:E}}=(0,Dt.getSettings)(),A=l;return p?.required&&!n&&!o?A=`${l} (${(0,ss.__)("Required")})`:!p?.required&&n&&!o&&(A=`${l} (${(0,ss.__)("Optional")})`),(0,uo.jsx)(ls.BaseControl,{id:a,label:A,help:s,hideLabelFromVision:o,children:(0,uo.jsxs)(F,{direction:"column",gap:"lg",children:[(0,uo.jsx)(Zw,{style:{width:"100%"},selected:m&&as(m)||void 0,onSelect:V,month:v,onMonthChange:_,timeZone:E||void 0,weekStartsOn:D}),(0,uo.jsx)(Xw,{ref:h,__next40pxDefaultSize:!0,required:!!p?.required,customValidity:ve(p,i),type:"datetime-local",label:(0,ss.__)("Date time"),hideLabelFromVision:!0,value:Qw(m),onChange:O})]})})}function Mv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===pt||i===yt?(0,uo.jsx)(is,{className:"dataviews-controls__datetime",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):(0,uo.jsx)(Jw,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var ct=c(q(),1),de=c(H(),1),qe=c(U(),1),ut=c(Do(),1);var ge=c(R(),1),{DateCalendar:e_,DateRangeCalendar:t_}=K(ct.privateApis),r_=[{id:"today",label:(0,qe.__)("Today"),getValue:()=>(0,ut.getDate)(null)},{id:"yesterday",label:(0,qe.__)("Yesterday"),getValue:()=>{let t=(0,ut.getDate)(null);return ko(t,1)}},{id:"past-week",label:(0,qe.__)("Past week"),getValue:()=>{let t=(0,ut.getDate)(null);return ko(t,7)}},{id:"past-month",label:(0,qe.__)("Past month"),getValue:()=>{let t=(0,ut.getDate)(null);return Ka(t,1)}}],o_=[{id:"last-7-days",label:(0,qe.__)("Last 7 days"),getValue:()=>{let t=(0,ut.getDate)(null);return[ko(t,7),t]}},{id:"last-30-days",label:(0,qe.__)("Last 30 days"),getValue:()=>{let t=(0,ut.getDate)(null);return[ko(t,30),t]}},{id:"month-to-date",label:(0,qe.__)("Month to date"),getValue:()=>{let t=(0,ut.getDate)(null);return[Ip(t),t]}},{id:"last-year",label:(0,qe.__)("Last year"),getValue:()=>{let t=(0,ut.getDate)(null);return[Za(t,1),t]}},{id:"year-to-date",label:(0,qe.__)("Year to date"),getValue:()=>{let t=(0,ut.getDate)(null);return[Ya(t),t]}}],xn=t=>{if(!t)return null;let e=(0,ut.getDate)(t);return e&&dn(e)?e:null},gc=t=>t?typeof t=="string"?t:oc(t,"yyyy-MM-dd"):"";function Fv({field:t,validity:e,inputRefs:r,isTouched:o,setIsTouched:n,children:i}){let{isValid:a}=t,[l,s]=(0,de.useState)(void 0),u=(0,de.useCallback)(()=>{let p=Array.isArray(r)?r:[r];for(let f of p){let m=f.current;if(m&&!m.validity.valid){s({type:"invalid",message:m.validationMessage});return}}s(void 0)},[r]);return(0,de.useEffect)(()=>{let p=Array.isArray(r)?r:[r],f=e?ve(a,e):void 0;for(let m of p){let v=m.current;v&&v.setCustomValidity(f?.type==="invalid"&&f.message?f.message:"")}},[r,a,e]),(0,de.useEffect)(()=>{let p=Array.isArray(r)?r:[r],f=m=>{m.preventDefault(),n(!0)};for(let m of p)m.current?.addEventListener("invalid",f);return()=>{for(let m of p)m.current?.removeEventListener("invalid",f)}},[r,n]),(0,de.useEffect)(()=>{if(!o)return;let p=e?ve(a,e):void 0;p?s(p):u()},[o,a,e,u]),(0,ge.jsxs)("div",{onBlur:p=>{o||(!p.relatedTarget||!p.currentTarget.contains(p.relatedTarget))&&n(!0)},children:[i,(0,ge.jsx)("div",{"aria-live":"polite",children:l&&(0,ge.jsxs)("p",{className:z("components-validated-control__indicator",l.type==="invalid"?"is-invalid":void 0),children:[(0,ge.jsx)(ct.Icon,{className:"components-validated-control__indicator-icon",icon:hl,size:16,fill:"currentColor"}),l.message]})})]})}function n_({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,setValue:s,getValue:u,isValid:d,format:p}=e,[f,m]=(0,de.useState)(null),v=p.weekStartsOn??(0,ut.getSettings)().l10n.startOfWeek,_=u({item:t}),h=typeof _=="string"?_:void 0,[x,y]=(0,de.useState)(()=>xn(h)||new Date),[S,V]=(0,de.useState)(!1),O=(0,de.useRef)(null),N=(0,de.useCallback)(P=>r(s({item:t,value:P})),[t,r,s]),D=(0,de.useCallback)(P=>{let T=P?oc(P,"yyyy-MM-dd"):void 0;N(T),m(null),V(!0)},[N]),E=(0,de.useCallback)(P=>{let T=P.getValue(),g=gc(T);y(T),N(g),m(P.id),V(!0)},[N]),A=(0,de.useCallback)(P=>{if(N(P),P){let T=xn(P);T&&y(T)}m(null),V(!0)},[N]),{timezone:{string:k}}=(0,ut.getSettings)(),b=l;return d?.required&&!n?b=`${l} (${(0,qe.__)("Required")})`:!d?.required&&n&&(b=`${l} (${(0,qe.__)("Optional")})`),(0,ge.jsx)(Fv,{field:e,validity:i,inputRefs:O,isTouched:S,setIsTouched:V,children:(0,ge.jsx)(ct.BaseControl,{id:a,className:"dataviews-controls__date",label:b,hideLabelFromVision:o,children:(0,ge.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ge.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[r_.map(P=>{let T=f===P.id;return(0,ge.jsx)(ct.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:T,size:"small",onClick:()=>E(P),children:P.label},P.id)}),(0,ge.jsx)(ct.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!f,size:"small",disabled:!!f,accessibleWhenDisabled:!1,children:(0,qe.__)("Custom")})]}),(0,ge.jsx)(ct.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:O,type:"date",label:(0,qe.__)("Date"),hideLabelFromVision:!0,value:h,onChange:A,required:!!e.isValid?.required}),(0,ge.jsx)(e_,{style:{width:"100%"},selected:h&&xn(h)||void 0,onSelect:D,month:x,onMonthChange:y,timeZone:k||void 0,weekStartsOn:v})]})})})}function i_({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{id:a,label:l,getValue:s,setValue:u,format:d}=e,p,f=s({item:t});Array.isArray(f)&&f.length===2&&f.every(g=>typeof g=="string")&&(p=f);let m=d.weekStartsOn??(0,ut.getSettings)().l10n.startOfWeek,v=(0,de.useCallback)(g=>{r(u({item:t,value:g}))},[t,r,u]),[_,h]=(0,de.useState)(null),x=(0,de.useMemo)(()=>{if(!p)return{from:void 0,to:void 0};let[g,I]=p;return{from:xn(g)||void 0,to:xn(I)||void 0}},[p]),[y,S]=(0,de.useState)(()=>x.from||new Date),[V,O]=(0,de.useState)(!1),N=(0,de.useRef)(null),D=(0,de.useRef)(null),E=(0,de.useCallback)((g,I)=>{g&&I?v([gc(g),gc(I)]):!g&&!I&&v(void 0)},[v]),A=(0,de.useCallback)(g=>{E(g?.from,g?.to),h(null),O(!0)},[E]),k=(0,de.useCallback)(g=>{let[I,w]=g.getValue();S(I),E(I,w),h(g.id),O(!0)},[E]),b=(0,de.useCallback)((g,I)=>{let[w,C]=p||[void 0,void 0];if(E(g==="from"?I:w,g==="to"?I:C),I){let ae=xn(I);ae&&S(ae)}h(null),O(!0)},[p,E]),{timezone:P}=(0,ut.getSettings)(),T=l;return e.isValid?.required&&!n?T=`${l} (${(0,qe.__)("Required")})`:!e.isValid?.required&&n&&(T=`${l} (${(0,qe.__)("Optional")})`),(0,ge.jsx)(Fv,{field:e,validity:i,inputRefs:[N,D],isTouched:V,setIsTouched:O,children:(0,ge.jsx)(ct.BaseControl,{id:a,className:"dataviews-controls__date",label:T,hideLabelFromVision:o,children:(0,ge.jsxs)(F,{direction:"column",gap:"lg",children:[(0,ge.jsxs)(F,{direction:"row",gap:"sm",wrap:"wrap",justify:"flex-start",children:[o_.map(g=>{let I=_===g.id;return(0,ge.jsx)(ct.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:I,size:"small",onClick:()=>k(g),children:g.label},g.id)}),(0,ge.jsx)(ct.Button,{className:"dataviews-controls__date-preset",variant:"tertiary",isPressed:!_,size:"small",accessibleWhenDisabled:!1,disabled:!!_,children:(0,qe.__)("Custom")})]}),(0,ge.jsxs)(F,{direction:"row",gap:"sm",justify:"space-between",className:"dataviews-controls__date-range-inputs",children:[(0,ge.jsx)(ct.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:N,type:"date",label:(0,qe.__)("From"),hideLabelFromVision:!0,value:p?.[0],onChange:g=>b("from",g),required:!!e.isValid?.required}),(0,ge.jsx)(ct.__experimentalInputControl,{__next40pxDefaultSize:!0,ref:D,type:"date",label:(0,qe.__)("To"),hideLabelFromVision:!0,value:p?.[1],onChange:g=>b("to",g),required:!!e.isValid?.required})]}),(0,ge.jsx)(t_,{style:{width:"100%"},selected:x,onSelect:A,month:y,onMonthChange:S,timeZone:P.string||void 0,weekStartsOn:m})]})})})}function Lv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){return i===pt||i===yt?(0,ge.jsx)(is,{className:"dataviews-controls__date",data:t,field:e,onChange:r,hideLabelFromVision:o,operator:i}):i===mt?(0,ge.jsx)(i_,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a}):(0,ge.jsx)(n_,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a})}var us=c(q(),1),Bv=c(H(),1);var hc=c(R(),1),{ValidatedSelectControl:a_}=K(us.privateApis);function cs({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{type:a,label:l,description:s,getValue:u,setValue:d,isValid:p}=e,f=a==="array",m=u({item:t})??(f?[]:""),v=(0,Bv.useCallback)(x=>r(d({item:t,value:x})),[t,r,d]),{elements:_,isLoading:h}=Ze({elements:e.elements,getElements:e.getElements});return h?(0,hc.jsx)(us.Spinner,{}):(0,hc.jsx)(a_,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(p,i),label:l,value:m,help:s,options:_,onChange:v,__next40pxDefaultSize:!0,hideLabelFromVision:o,multiple:f})}var bc=c(R(),1),s_=10;function jv(t){let{field:e}=t,{elements:r}=Ze({elements:e.elements,getElements:e.getElements});return r.length>=s_?(0,bc.jsx)(ns,{...t}):(0,bc.jsx)(cs,{...t})}var fs=c(q(),1);var Hv=c(q(),1),zv=c(H(),1);var Wv=c(R(),1),{ValidatedInputControl:l_}=K(Hv.privateApis);function cr({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,type:i,prefix:a,suffix:l,validity:s}){let{label:u,placeholder:d,description:p,getValue:f,setValue:m,isValid:v}=e,_=f({item:t}),h=(0,zv.useCallback)(x=>r(m({item:t,value:x})),[t,m,r]);return(0,Wv.jsx)(l_,{required:!!v.required,markWhenOptional:n,customValidity:ve(v,s),label:u,placeholder:d,value:_??"",help:p,onChange:h,hideLabelFromVision:o,type:i,prefix:a,suffix:l,pattern:v.pattern?v.pattern.constraint:void 0,minLength:v.minLength?v.minLength.constraint:void 0,maxLength:v.maxLength?v.maxLength.constraint:void 0,__next40pxDefaultSize:!0})}var ds=c(R(),1);function Gv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,ds.jsx)(cr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"email",prefix:(0,ds.jsx)(fs.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,ds.jsx)(fs.Icon,{icon:vl})})})}var ps=c(q(),1);var ms=c(R(),1);function qv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,ms.jsx)(cr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"tel",prefix:(0,ms.jsx)(ps.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,ms.jsx)(ps.Icon,{icon:Il})})})}var gs=c(q(),1);var vs=c(R(),1);function Yv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){return(0,vs.jsx)(cr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:"url",prefix:(0,vs.jsx)(gs.__experimentalInputControlPrefixWrapper,{variant:"icon",children:(0,vs.jsx)(gs.Icon,{icon:Al})})})}var kr=c(q(),1),fi=c(H(),1),hs=c(U(),1);var co=c(R(),1),{ValidatedNumberControl:u_}=K(kr.privateApis);function Uv(t){if(t===""||t===void 0)return"";let e=Number(t);return Number.isFinite(e)?e:""}function c_({value:t,onChange:e,hideLabelFromVision:r,step:o}){let[n="",i=""]=t,a=(0,fi.useCallback)(s=>e([Uv(s),i]),[e,i]),l=(0,fi.useCallback)(s=>e([n,Uv(s)]),[e,n]);return(0,co.jsx)(kr.BaseControl,{help:(0,hs.__)("The max. value must be greater than the min. value."),children:(0,co.jsxs)(kr.Flex,{direction:"row",gap:4,children:[(0,co.jsx)(kr.__experimentalNumberControl,{label:(0,hs.__)("Min."),value:n,max:i?Number(i)-o:void 0,onChange:a,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o}),(0,co.jsx)(kr.__experimentalNumberControl,{label:(0,hs.__)("Max."),value:i,min:n?Number(n)+o:void 0,onChange:l,__next40pxDefaultSize:!0,hideLabelFromVision:r,step:o})]})})}function bs({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,operator:i,validity:a}){let l=e.format?.decimals??0,s=Math.pow(10,Math.abs(l)*-1),{label:u,description:d,getValue:p,setValue:f,isValid:m}=e,v=p({item:t})??"",_=(0,fi.useCallback)(x=>{r(f({item:t,value:["",void 0].includes(x)?void 0:Number(x)}))},[t,r,f]),h=(0,fi.useCallback)(x=>{r(f({item:t,value:x}))},[t,r,f]);if(i===mt){let x=["",""];return Array.isArray(v)&&v.length===2&&v.every(y=>typeof y=="number"||y==="")&&(x=v),(0,co.jsx)(c_,{value:x,onChange:h,hideLabelFromVision:o,step:s})}return(0,co.jsx)(u_,{required:!!m.required,markWhenOptional:n,customValidity:ve(m,a),label:u,help:d,value:v,onChange:_,__next40pxDefaultSize:!0,hideLabelFromVision:o,step:s,min:m.min?m.min.constraint:void 0,max:m.max?m.max.constraint:void 0})}var $v=c(R(),1);function Kv(t){return(0,$v.jsx)(bs,{...t})}var Zv=c(R(),1);function Xv(t){return(0,Zv.jsx)(bs,{...t})}var xs=c(q(),1),Qv=c(H(),1);var xc=c(R(),1),{ValidatedRadioControl:d_}=K(xs.privateApis);function Jv({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:d}=e,{elements:p,isLoading:f}=Ze({elements:e.elements,getElements:e.getElements}),m=s({item:t}),v=(0,Qv.useCallback)(_=>r(u({item:t,value:_})),[t,r,u]);return f?(0,xc.jsx)(xs.Spinner,{}):(0,xc.jsx)(d_,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(d,i),label:a,help:l,onChange:v,options:p,selected:m,hideLabelFromVision:o})}var wc=c(H(),1);var eg=c(R(),1);function tg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{prefix:l,suffix:s}=i||{};return(0,eg.jsx)(cr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:a,prefix:l?(0,wc.createElement)(l):void 0,suffix:s?(0,wc.createElement)(s):void 0})}var rg=c(q(),1),og=c(H(),1);var ng=c(R(),1),{ValidatedToggleControl:f_}=K(rg.privateApis);function ig({field:t,onChange:e,data:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,description:l,getValue:s,setValue:u,isValid:d}=t,p=(0,og.useCallback)(()=>{e(u({item:r,value:!s({item:r})}))},[e,u,r,s]);return(0,ng.jsx)(f_,{required:!!d.required,markWhenOptional:n,customValidity:ve(d,i),hidden:o,label:a,help:l,checked:s({item:r}),onChange:p})}var ag=c(q(),1),sg=c(H(),1);var lg=c(R(),1),{ValidatedTextareaControl:m_}=K(ag.privateApis);function ug({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,config:i,validity:a}){let{rows:l=4}=i||{},{label:s,placeholder:u,description:d,setValue:p,isValid:f}=e,m=e.getValue({item:t}),v=(0,sg.useCallback)(_=>r(p({item:t,value:_})),[t,r,p]);return(0,lg.jsx)(m_,{required:!!f.required,markWhenOptional:n,customValidity:ve(f,a),label:s,placeholder:u,value:m??"",help:d,onChange:v,rows:l,minLength:f.minLength?f.minLength.constraint:void 0,maxLength:f.maxLength?f.maxLength.constraint:void 0,__next40pxDefaultSize:!0,hideLabelFromVision:o})}var wn=c(q(),1),cg=c(H(),1);var ws=c(R(),1),{ValidatedToggleGroupControl:p_}=K(wn.privateApis);function dg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{getValue:a,setValue:l,isValid:s}=e,u=a({item:t}),d=(0,cg.useCallback)(v=>r(l({item:t,value:v})),[t,r,l]),{elements:p,isLoading:f}=Ze({elements:e.elements,getElements:e.getElements});if(f)return(0,ws.jsx)(wn.Spinner,{});if(p.length===0)return null;let m=p.find(v=>v.value===u);return(0,ws.jsx)(p_,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(s,i),__next40pxDefaultSize:!0,isBlock:!0,label:e.label,help:m?.description||e.description,onChange:d,value:u,hideLabelFromVision:o,children:p.map(v=>(0,ws.jsx)(wn.__experimentalToggleGroupControlOption,{label:v.label,value:v.value},v.value))})}var _s=c(q(),1),ys=c(H(),1);var mi=c(R(),1),{ValidatedFormTokenField:v_}=K(_s.privateApis);function fg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,getValue:s,setValue:u,isValid:d}=e,p=s({item:t}),{elements:f,isLoading:m}=Ze({elements:e.elements,getElements:e.getElements}),v=(0,ys.useMemo)(()=>Array.isArray(p)?p.map(h=>f?.find(y=>y.value===h)||{value:h,label:h}):[],[p,f]),_=(0,ys.useCallback)(h=>{let x=h.map(y=>typeof y=="object"&&"value"in y?y.value:y);r(u({item:t,value:x}))},[r,u,t]);return m?(0,mi.jsx)(_s.Spinner,{}):(0,mi.jsx)(v_,{required:!!d?.required,markWhenOptional:n,customValidity:ve(d,i),label:o?void 0:a,value:v,onChange:_,placeholder:l,suggestions:f?.map(h=>h.value),__experimentalValidateInput:h=>e.isValid?.elements&&f?f.some(x=>x.value===h||x.label===h):!0,__experimentalExpandOnFocus:f&&f.length>0,__experimentalShowHowTo:!e.isValid?.elements,displayTransform:h=>typeof h=="object"&&"label"in h?h.label:typeof h=="string"&&f&&f.find(y=>y.value===h)?.label||h,__experimentalRenderItem:({item:h})=>{if(typeof h=="string"&&f){let x=f.find(y=>y.value===h);return(0,mi.jsx)("span",{children:x?.label||h})}return(0,mi.jsx)("span",{children:h})}})}var g_={grad:.9,turn:360,rad:360/(2*Math.PI)},Dr=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},Xe=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},zt=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},_g=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},mg=function(t){return{r:zt(t.r,0,255),g:zt(t.g,0,255),b:zt(t.b,0,255),a:zt(t.a)}},_c=function(t){return{r:Xe(t.r),g:Xe(t.g),b:Xe(t.b),a:Xe(t.a,3)}},h_=/^#([0-9a-f]{3,8})$/i,Ss=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},yg=function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=Math.max(e,r,o),a=i-Math.min(e,r,o),l=a?i===e?(r-o)/a:i===r?2+(o-e)/a:4+(e-r)/a:0;return{h:60*(l<0?l+6:l),s:i?a/i*100:0,v:i/255*100,a:n}},Sg=function(t){var e=t.h,r=t.s,o=t.v,n=t.a;e=e/360*6,r/=100,o/=100;var i=Math.floor(e),a=o*(1-r),l=o*(1-(e-i)*r),s=o*(1-(1-e+i)*r),u=i%6;return{r:255*[o,l,a,a,s,o][u],g:255*[s,o,o,l,a,a][u],b:255*[a,a,s,o,o,l][u],a:n}},pg=function(t){return{h:_g(t.h),s:zt(t.s,0,100),l:zt(t.l,0,100),a:zt(t.a)}},vg=function(t){return{h:Xe(t.h),s:Xe(t.s),l:Xe(t.l),a:Xe(t.a,3)}},gg=function(t){return Sg((r=(e=t).s,{h:e.h,s:(r*=((o=e.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:e.a}));var e,r,o},pi=function(t){return{h:(e=yg(t)).h,s:(n=(200-(r=e.s))*(o=e.v)/100)>0&&n<200?r*o/100/(n<=100?n:200-n)*100:0,l:n/2,a:e.a};var e,r,o,n},b_=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,x_=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,w_=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,__=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,hg={string:[[function(t){var e=h_.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?Xe(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?Xe(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=w_.exec(t)||__.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:mg({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=b_.exec(t)||x_.exec(t);if(!e)return null;var r,o,n=pg({h:(r=e[1],o=e[2],o===void 0&&(o="deg"),Number(r)*(g_[o]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return gg(n)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,o=t.b,n=t.a,i=n===void 0?1:n;return Dr(e)&&Dr(r)&&Dr(o)?mg({r:Number(e),g:Number(r),b:Number(o),a:Number(i)}):null},"rgb"],[function(t){var e=t.h,r=t.s,o=t.l,n=t.a,i=n===void 0?1:n;if(!Dr(e)||!Dr(r)||!Dr(o))return null;var a=pg({h:Number(e),s:Number(r),l:Number(o),a:Number(i)});return gg(a)},"hsl"],[function(t){var e=t.h,r=t.s,o=t.v,n=t.a,i=n===void 0?1:n;if(!Dr(e)||!Dr(r)||!Dr(o))return null;var a=(function(l){return{h:_g(l.h),s:zt(l.s,0,100),v:zt(l.v,0,100),a:zt(l.a)}})({h:Number(e),s:Number(r),v:Number(o),a:Number(i)});return Sg(a)},"hsv"]]},bg=function(t,e){for(var r=0;r=.5},t.prototype.toHex=function(){return e=_c(this.rgba),r=e.r,o=e.g,n=e.b,a=(i=e.a)<1?Ss(Xe(255*i)):"","#"+Ss(r)+Ss(o)+Ss(n)+a;var e,r,o,n,i,a},t.prototype.toRgb=function(){return _c(this.rgba)},t.prototype.toRgbString=function(){return e=_c(this.rgba),r=e.r,o=e.g,n=e.b,(i=e.a)<1?"rgba("+r+", "+o+", "+n+", "+i+")":"rgb("+r+", "+o+", "+n+")";var e,r,o,n,i},t.prototype.toHsl=function(){return vg(pi(this.rgba))},t.prototype.toHslString=function(){return e=vg(pi(this.rgba)),r=e.h,o=e.s,n=e.l,(i=e.a)<1?"hsla("+r+", "+o+"%, "+n+"%, "+i+")":"hsl("+r+", "+o+"%, "+n+"%)";var e,r,o,n,i},t.prototype.toHsv=function(){return e=yg(this.rgba),{h:Xe(e.h),s:Xe(e.s),v:Xe(e.v),a:Xe(e.a,3)};var e},t.prototype.invert=function(){return dt({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),dt(yc(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),dt(yc(this.rgba,-e))},t.prototype.grayscale=function(){return dt(yc(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),dt(xg(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),dt(xg(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?dt({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):Xe(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=pi(this.rgba);return typeof e=="number"?dt({h:e,s:r.s,l:r.l,a:r.a}):Xe(r.h)},t.prototype.isEqual=function(e){return this.toHex()===dt(e).toHex()},t})(),dt=function(t){return t instanceof wg?t:new wg(t)};var Tt=c(q(),1),Cc=c(H(),1),Cg=c(U(),1);var Nr=c(R(),1),{ValidatedInputControl:S_}=K(Tt.privateApis),C_=({color:t,onColorChange:e})=>{let r=t&&dt(t).isValid()?t:"#ffffff";return(0,Nr.jsx)(Tt.Dropdown,{className:"dataviews-controls__color-picker-dropdown",popoverProps:{resize:!1},renderToggle:({onToggle:o})=>(0,Nr.jsx)(Tt.Button,{onClick:o,"aria-label":(0,Cg.__)("Open color picker"),size:"small",icon:()=>(0,Nr.jsx)(Tt.ColorIndicator,{colorValue:r})}),renderContent:()=>(0,Nr.jsx)(Tt.__experimentalDropdownContentWrapper,{paddingSize:"none",children:(0,Nr.jsx)(Tt.ColorPicker,{color:r,onChange:e,enableAlpha:!0})})})};function Eg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let{label:a,placeholder:l,description:s,setValue:u,isValid:d}=e,p=e.getValue({item:t})||"",f=(0,Cc.useCallback)(v=>{r(u({item:t,value:v}))},[t,r,u]),m=(0,Cc.useCallback)(v=>{r(u({item:t,value:v||""}))},[t,r,u]);return(0,Nr.jsx)(S_,{required:!!e.isValid?.required,markWhenOptional:n,customValidity:ve(d,i),label:a,placeholder:l,value:p,help:s,onChange:m,hideLabelFromVision:o,type:"text",prefix:(0,Nr.jsx)(Tt.__experimentalInputControlPrefixWrapper,{variant:"control",children:(0,Nr.jsx)(C_,{color:p,onColorChange:f})})})}var Es=c(q(),1),Ps=c(H(),1),Ec=c(U(),1);var Cs=c(R(),1);function Pg({data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i}){let[a,l]=(0,Ps.useState)(!1),s=(0,Ps.useCallback)(()=>{l(u=>!u)},[]);return(0,Cs.jsx)(cr,{data:t,field:e,onChange:r,hideLabelFromVision:o,markWhenOptional:n,validity:i,type:a?"text":"password",suffix:(0,Cs.jsx)(Es.__experimentalInputControlSuffixWrapper,{variant:"control",children:(0,Cs.jsx)(Es.Button,{icon:a?Dn:Hl,onClick:s,size:"small",label:a?(0,Ec.__)("Hide password"):(0,Ec.__)("Show password")})})})}function Ts(t){return Array.isArray(t.elements)&&t.elements.length>0||typeof t.getElements=="function"}var Ag=c(R(),1),Tg={adaptiveSelect:jv,array:fg,checkbox:kv,color:Eg,combobox:ns,datetime:Mv,date:Lv,email:Gv,telephone:qv,url:Yv,integer:Kv,number:Xv,password:Pg,radio:Jv,select:cs,text:tg,toggle:ig,textarea:ug,toggleGroup:dg};function E_(t){return t&&typeof t=="object"&&typeof t.control=="string"}function P_(t){let{control:e,...r}=t,o=As(e);return o===null?null:function(i){return(0,Ag.jsx)(o,{...i,config:r})}}function Og(t,e){return typeof t.Edit=="function"?t.Edit:typeof t.Edit=="string"?As(t.Edit):E_(t.Edit)?P_(t.Edit):Ts(t)&&t.type!=="array"?As("adaptiveSelect"):e===null?null:As(e)}function As(t){return Object.keys(Tg).includes(t)?Tg[t]:null}function T_(t,e,r){if(t.filterBy===!1)return!1;let o=t.filterBy?.operators?.filter(n=>r.includes(n))??e;return o.length===0?!1:{isPrimary:!!t.filterBy?.isPrimary,operators:o}}var Ig=T_;var A_=t=>({item:e})=>{let r=t.split("."),o=e;for(let n of r)o.hasOwnProperty(n)?o=o[n]:o=void 0;return o},Rg=A_;var O_=t=>({value:e})=>{let r=t.split("."),o={},n=o;for(let i of r.slice(0,-1))n[i]={},n=n[i];return n[r.at(-1)]=e,o},Vg=O_;var Dg=c(U(),1);function Os({item:t,field:e}){let{elements:r,isLoading:o}=Ze({elements:e.elements,getElements:e.getElements}),n=e.getValue({item:t});return o||r.length===0?n:r?.find(i=>i.value===n)?.label||e.getValue({item:t})}var kg=c(R(),1);function Ve({item:t,field:e}){return e.hasElements?(0,kg.jsx)(Os,{item:t,field:e}):e.getValueFormatted({item:t,field:e})}var dr=(t,e,r)=>r==="asc"?t.localeCompare(e):e.localeCompare(t);function ke(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)}function fr(t,e){if(typeof e.isValid.minLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length>=e.isValid.minLength.constraint}function mr(t,e){if(typeof e.isValid.maxLength?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:String(r).length<=e.isValid.maxLength.constraint}function pr(t,e){if(e.isValid.pattern?.constraint===void 0)return!0;try{let r=new RegExp(e.isValid.pattern.constraint),o=e.getValue({item:t});return[void 0,"",null].includes(o)?!0:r.test(String(o))}catch{return!1}}function _e(t,e){let o=(e.elements??[]).map(i=>i.value);if(o.length===0)return!0;let n=e.getValue({item:t});return[].concat(n).every(i=>o.includes(i))}function I_({item:t,field:e}){return e.getValue({item:t})}var xt=I_;var R_=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function V_(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!R_.test(r)?(0,Dg.__)("Value must be a valid email address."):null}var Ng={type:"email",render:Ve,Edit:"email",sort:dr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Zt,Xt,Qt,Se,Ce,it,at],format:{},getValueFormatted:xt,validate:{required:ke,pattern:pr,minLength:fr,maxLength:mr,elements:_e,custom:V_}};var Mg=c(U(),1);var _n=(t,e,r)=>r==="asc"?t-e:e-t;function Is(t,e){if(typeof e.isValid.min?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)>=e.isValid.min.constraint}function Rs(t,e){if(typeof e.isValid.max?.constraint!="number")return!1;let r=e.getValue({item:t});return[void 0,"",null].includes(r)?!0:Number(r)<=e.isValid.max.constraint}var Fg={separatorThousand:","};function k_({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="integer"?o=Fg:o=e.format;let{separatorThousand:n}=o,i=Math.trunc(r);return n?String(i).replace(/\B(?=(\d{3})+(?!\d))/g,n):String(i)}function D_(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Number.isInteger(r)?(0,Mg.__)("Value must be an integer."):null}var Lg={type:"integer",render:Ve,Edit:"integer",sort:_n,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe,Br,jr,Hr,zr,mt],validOperators:[Ee,Pe,Br,jr,Hr,zr,mt,Se,Ce,it,at],format:Fg,getValueFormatted:k_,validate:{required:ke,min:Is,max:Rs,elements:_e,custom:D_}};var Bg=c(U(),1);var jg={separatorThousand:",",separatorDecimal:".",decimals:2};function N_({item:t,field:e}){let r=e.getValue({item:t});if(r==null)return"";if(r=Number(r),!Number.isFinite(r))return String(r);let o;e.type!=="number"?o=jg:o=e.format;let{separatorThousand:n,separatorDecimal:i,decimals:a}=o,l=r.toFixed(a),[s,u]=l.split("."),d=n?s.replace(/\B(?=(\d{3})+(?!\d))/g,n):s;return a===0?d:d+i+u}function M_(t){return t===""||t===void 0||t===null}function F_(t,e){let r=e.getValue({item:t});return!M_(r)&&!Number.isFinite(r)?(0,Bg.__)("Value must be a number."):null}var Hg={type:"number",render:Ve,Edit:"number",sort:_n,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe,Br,jr,Hr,zr,mt],validOperators:[Ee,Pe,Br,jr,Hr,zr,mt,Se,Ce,it,at],format:jg,getValueFormatted:N_,validate:{required:ke,min:Is,max:Rs,elements:_e,custom:F_}};var zg={type:"text",render:Ve,Edit:"text",sort:dr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Zt,Xt,Qt,Se,Ce,it,at],format:{},getValueFormatted:xt,validate:{required:ke,pattern:pr,minLength:fr,maxLength:mr,elements:_e}};var Mo=c(Do(),1);var Wg={datetime:(0,Mo.getSettings)().formats.datetime,weekStartsOn:(0,Mo.getSettings)().l10n.startOfWeek};function L_({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="datetime"?o=Wg:o=e.format,(0,Mo.dateI18n)(o.datetime,(0,Mo.getDate)(r))}var B_=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},Gg={type:"datetime",render:Ve,Edit:"datetime",sort:B_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ur,$r,Wr,Gr,qr,Yr,pt,yt],validOperators:[Ur,$r,Wr,Gr,qr,Yr,pt,yt],format:Wg,getValueFormatted:L_,validate:{required:ke,elements:_e}};var Fo=c(Do(),1);var qg={date:(0,Fo.getSettings)().formats.date,weekStartsOn:(0,Fo.getSettings)().l10n.startOfWeek};function j_({item:t,field:e}){let r=e.getValue({item:t});if(["",void 0,null].includes(r))return"";let o;return e.type!=="date"?o=qg:o=e.format,(0,Fo.dateI18n)(o.date,(0,Fo.getDate)(r))}var H_=(t,e,r)=>{let o=new Date(t).getTime(),n=new Date(e).getTime();return r==="asc"?o-n:n-o},Yg={type:"date",render:Ve,Edit:"date",sort:H_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ur,$r,Wr,Gr,qr,Yr,pt,yt,mt],validOperators:[Ur,$r,Wr,Gr,qr,Yr,pt,yt,mt],format:qg,getValueFormatted:j_,validate:{required:ke,elements:_e}};var Vs=c(U(),1);function Ug(t,e){return e.getValue({item:t})===!0}function z_({item:t,field:e}){let r=e.getValue({item:t});return r===!0?(0,Vs.__)("True"):r===!1?(0,Vs.__)("False"):""}function W_(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&![!0,!1].includes(r)?(0,Vs.__)("Value must be true, false, or undefined"):null}var G_=(t,e,r)=>{let o=!!t;return o===!!e?0:r==="asc"?o?1:-1:o?-1:1},$g={type:"boolean",render:Ve,Edit:"checkbox",sort:G_,validate:{required:Ug,elements:_e,custom:W_},enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:[Ee,Pe],format:{},getValueFormatted:z_};var Kg={type:"media",render:()=>null,Edit:null,sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:xt,validate:{}};var Pc=c(U(),1);function Zg(t,e){let r=e.getValue({item:t});return Array.isArray(r)&&r.length>0&&r.every(o=>![void 0,"",null].includes(o))}function Xg({item:t,field:e}){let r=e.getValue({item:t});return(Array.isArray(r)?r:[]).join(", ")}function q_({item:t,field:e}){return Xg({item:t,field:e})}function Y_(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!Array.isArray(r)?(0,Pc.__)("Value must be an array."):r.every(o=>typeof o=="string")?null:(0,Pc.__)("Every value must be a string.")}var U_=(t,e,r)=>{let o=Array.isArray(t)?t:[],n=Array.isArray(e)?e:[];if(o.length!==n.length)return r==="asc"?o.length-n.length:n.length-o.length;let i=o.join(","),a=n.join(",");return r==="asc"?i.localeCompare(a):a.localeCompare(i)},Qg={type:"array",render:q_,Edit:"array",sort:U_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Se,Ce,it,at],format:{},getValueFormatted:Xg,validate:{required:Zg,elements:_e,custom:Y_}};function $_({item:t,field:e}){return e.getValue({item:t})?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":""}var Jg={type:"password",render:Ve,Edit:"password",sort:()=>0,enableSorting:!1,enableGlobalSearch:!1,defaultOperators:[],validOperators:[],format:{},getValueFormatted:$_,validate:{required:ke,pattern:pr,minLength:fr,maxLength:mr,elements:_e}};var eh={type:"telephone",render:Ve,Edit:"telephone",sort:dr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Zt,Xt,Qt,Se,Ce,it,at],format:{},getValueFormatted:xt,validate:{required:ke,pattern:pr,minLength:fr,maxLength:mr,elements:_e}};var th=c(U(),1);var yn=c(R(),1);function K_({item:t,field:e}){if(e.hasElements)return(0,yn.jsx)(Os,{item:t,field:e});let r=xt({item:t,field:e});return!r||!dt(r).isValid()?r:(0,yn.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,yn.jsx)("div",{style:{width:"16px",height:"16px",borderRadius:"50%",backgroundColor:r,border:"1px solid #ddd",flexShrink:0}}),(0,yn.jsx)("span",{children:r})]})}function Z_(t,e){let r=e.getValue({item:t});return![void 0,"",null].includes(r)&&!dt(r).isValid()?(0,th.__)("Value must be a valid color."):null}var X_=(t,e,r)=>{let o=dt(t),n=dt(e);if(!o.isValid()&&!n.isValid())return 0;if(!o.isValid())return r==="asc"?1:-1;if(!n.isValid())return r==="asc"?-1:1;let i=o.toHsl(),a=n.toHsl();return i.h!==a.h?r==="asc"?i.h-a.h:a.h-i.h:i.s!==a.s?r==="asc"?i.s-a.s:a.s-i.s:r==="asc"?i.l-a.l:a.l-i.l},rh={type:"color",render:K_,Edit:"color",sort:X_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Se,Ce],format:{},getValueFormatted:xt,validate:{required:ke,elements:_e,custom:Z_}};var oh={type:"url",render:Ve,Edit:"url",sort:dr,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Se,Ce],validOperators:[Ee,Pe,Zt,Xt,Qt,Se,Ce,it,at],format:{},getValueFormatted:xt,validate:{required:ke,pattern:pr,minLength:fr,maxLength:mr,elements:_e}};var Q_=(t,e,r)=>typeof t=="number"&&typeof e=="number"?_n(t,e,r):dr(t,e,r),nh={render:Ve,Edit:null,sort:Q_,enableSorting:!0,enableGlobalSearch:!1,defaultOperators:[Ee,Pe],validOperators:Jp(),format:{},getValueFormatted:xt,validate:{required:ke,elements:_e}};function ih(t,e){let r;t.isValid?.required===!0&&e.validate.required!==void 0&&(r={constraint:!0,validate:e.validate.required});let o;(t.isValid?.elements===!0||t.isValid?.elements===void 0&&(t.elements||t.getElements))&&e.validate.elements!==void 0&&(o={constraint:!0,validate:e.validate.elements});let n;typeof t.isValid?.min=="number"&&e.validate.min!==void 0&&(n={constraint:t.isValid.min,validate:e.validate.min});let i;typeof t.isValid?.max=="number"&&e.validate.max!==void 0&&(i={constraint:t.isValid.max,validate:e.validate.max});let a;typeof t.isValid?.minLength=="number"&&e.validate.minLength!==void 0&&(a={constraint:t.isValid.minLength,validate:e.validate.minLength});let l;typeof t.isValid?.maxLength=="number"&&e.validate.maxLength!==void 0&&(l={constraint:t.isValid.maxLength,validate:e.validate.maxLength});let s;t.isValid?.pattern!==void 0&&e.validate.pattern!==void 0&&(s={constraint:t.isValid?.pattern,validate:e.validate.pattern});let u=t.isValid?.custom??e.validate.custom;return{required:r,elements:o,min:n,max:i,minLength:a,maxLength:l,pattern:s,custom:u}}function ah(t){return t.validOperators.reduce((e,r)=>{let o=No(r);return o?.filter&&(e[r]=o.filter),e},{})}function J_(t,e){return{...e.format,...t.format}}var sh=J_;function ey(t){let e=[Ng,Lg,Hg,zg,Gg,Yg,$g,Kg,Qg,Jg,eh,rh,oh].find(r=>r?.type===t);return e||nh}function lh(t){return t.map(e=>{let r=ey(e.type),o=e.getValue||Rg(e.id),n=function(i,a,l){let s=o({item:i}),u=o({item:a});return e.sort?e.sort(s,u,l):r.sort(s,u,l)};return{id:e.id,label:e.label||e.id,header:e.header||e.label||e.id,description:e.description,placeholder:e.placeholder,getValue:o,setValue:e.setValue||Vg(e.id),elements:e.elements,getElements:e.getElements,hasElements:Ts(e),isVisible:e.isVisible,enableHiding:e.enableHiding??!0,readOnly:e.readOnly??!1,type:r.type,render:e.render??r.render,Edit:Og(e,r.Edit),sort:n,enableSorting:e.enableSorting??r.enableSorting,enableGlobalSearch:e.enableGlobalSearch??r.enableGlobalSearch,isValid:ih(e,r),filterBy:Ig(e,r.defaultOperators,r.validOperators),filter:ah(r),format:sh(e,r),getValueFormatted:e.getValueFormatted??r.getValueFormatted}})}var Lo=c(H(),1);function uh(t,e,r){let o=(0,Lo.useRef)(t),n=(0,Lo.useRef)(r),[i,a]=(0,Lo.useState)(!e);return(0,Lo.useEffect)(()=>{e||(o.current=t,n.current=r,a(!0))},[t,e,r]),{data:e&&o.current?.length?o.current:t,paginationInfo:e&&o.current?.length?n.current:r,hasInitiallyLoaded:i}}var rt=c(R(),1),ty=t=>t.id,ry=()=>!0,oy=[],ny=eo.filter(t=>!t.isPicker);function iy({header:t,search:e=!0,searchLabel:r=void 0}){return(0,rt.jsxs)(rt.Fragment,{children:[(0,rt.jsxs)(F,{direction:"row",align:"top",justify:"space-between",className:"dataviews__view-actions",gap:"xs",children:[(0,rt.jsxs)(F,{direction:"row",justify:"start",gap:"sm",className:"dataviews__search",children:[e&&(0,rt.jsx)(uc,{label:r}),(0,rt.jsx)(ts,{})]}),(0,rt.jsxs)(F,{direction:"row",gap:"xs",style:{flexShrink:0},children:[(0,rt.jsx)(Ov,{}),t]})]}),(0,rt.jsx)(rs,{className:"dataviews-filters__container"}),(0,rt.jsx)(sc,{}),(0,rt.jsx)(lc,{})]})}function ay({view:t,onChangeView:e,fields:r,search:o=!0,searchLabel:n=void 0,actions:i=oy,data:a,getItemId:l=ty,getItemLevel:s,isLoading:u=!1,paginationInfo:d,defaultLayouts:p,selection:f,onChangeSelection:m,onClickItem:v,renderItemLink:_,isItemClickable:h=ry,header:x,children:y,config:S={perPageSizes:[10,20,50,100]},empty:V,onReset:O}){let{infiniteScrollHandler:N}=d,D=(0,wt.useRef)(null),[E,A]=(0,wt.useState)(0),k=(0,ks.useResizeObserver)(Q=>{A(Q[0].borderBoxSize[0].inlineSize)},{box:"border-box"}),[b,P]=(0,wt.useState)([]),T=f===void 0||m===void 0,g=T?b:f,[I,w]=(0,wt.useState)(null);function C(Q){let he=typeof Q=="function"?Q(g):Q;T&&P(he),m&&m(he)}let M=(0,wt.useMemo)(()=>lh(r),[r]),j=(0,wt.useMemo)(()=>g.filter(Q=>a.some(he=>l(he)===Q)),[g,a,l]),ae=li(M,t),ye=(0,wt.useMemo)(()=>(ae||[]).some(Q=>Q.isPrimary||Q.isLocked),[ae]),[De,je]=(0,wt.useState)(ye);(0,wt.useEffect)(()=>{ye&&!De&&je(!0)},[ye,De]),(0,wt.useEffect)(()=>{if(!t.infiniteScrollEnabled||!D.current)return;let Q=(0,ks.throttle)(gr=>{let hr=gr.target,mo=hr.scrollTop,po=hr.scrollHeight,Bo=hr.clientHeight;mo+Bo>=po-100&&N?.()},100),he=D.current;return he.addEventListener("scroll",Q),()=>{he.removeEventListener("scroll",Q),Q.cancel()}},[N,t.infiniteScrollEnabled]);let ot=(0,wt.useMemo)(()=>Object.fromEntries(Object.entries(p).filter(([Q])=>ny.some(he=>he.type===Q))),[p]),{data:Kt,paginationInfo:vr,hasInitiallyLoaded:Y}=uh(a,u,d);return ot[t.type]?(0,rt.jsx)(G.Provider,{value:{view:t,onChangeView:e,fields:M,actions:i,data:Kt,isLoading:u,paginationInfo:vr,selection:j,onChangeSelection:C,openedFilter:I,setOpenedFilter:w,getItemId:l,getItemLevel:s,isItemClickable:h,onClickItem:v,renderItemLink:_,containerWidth:E,containerRef:D,resizeObserverRef:k,defaultLayouts:ot,filters:ae,isShowingFilter:De,setIsShowingFilter:je,config:S,empty:V,hasInitiallyLoaded:Y,hasInfiniteScrollHandler:!!N,onReset:O},children:(0,rt.jsx)("div",{className:"dataviews-wrapper",ref:D,children:y??(0,rt.jsx)(iy,{header:x,search:o,searchLabel:n})})}):null}var Ut=ay;Ut.BulkActionToolbar=aa;Ut.Filters=ci;Ut.FiltersToggled=rs;Ut.FiltersToggle=ts;Ut.Layout=sc;Ut.LayoutSwitcher=fc;Ut.Pagination=uu;Ut.Search=uc;Ut.ViewConfig=mc;Ut.Footer=lc;var Tc=Ut;var ch=c(H(),1),dh=c(R(),1),fh=(0,ch.forwardRef)(({children:t,className:e,ariaLabel:r,as:o="div",...n},i)=>(0,dh.jsx)(o,{ref:i,className:z("admin-ui-navigable-region",e),"aria-label":r,role:"region",tabIndex:"-1",...n,children:t}));fh.displayName="NavigableRegion";var mh=fh;var fo=c(q(),1);var ph=c(q(),1),{Fill:vh,Slot:gh}=(0,ph.createSlotFill)("SidebarToggle");var Mr=c(R(),1);function hh({breadcrumbs:t,badges:e,title:r,subTitle:o,actions:n,showSidebarToggle:i=!0}){return(0,Mr.jsxs)(fo.__experimentalVStack,{className:"admin-ui-page__header",as:"header",children:[(0,Mr.jsxs)(fo.__experimentalHStack,{justify:"space-between",spacing:2,children:[(0,Mr.jsxs)(fo.__experimentalHStack,{spacing:2,justify:"left",children:[i&&(0,Mr.jsx)(gh,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),r&&(0,Mr.jsx)(fo.__experimentalHeading,{as:"h2",level:3,weight:500,truncate:!0,children:r}),t,e]}),(0,Mr.jsx)(fo.__experimentalHStack,{style:{width:"auto",flexShrink:0},spacing:2,className:"admin-ui-page__header-actions",children:n})]}),o&&(0,Mr.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var vi=c(R(),1);function bh({breadcrumbs:t,badges:e,title:r,subTitle:o,children:n,className:i,actions:a,hasPadding:l=!1,showSidebarToggle:s=!0}){let u=z("admin-ui-page",i);return(0,vi.jsxs)(mh,{className:u,ariaLabel:r,children:[(r||t||e)&&(0,vi.jsx)(hh,{breadcrumbs:t,badges:e,title:r,subTitle:o,actions:a,showSidebarToggle:s}),l?(0,vi.jsx)("div",{className:"admin-ui-page__content has-padding",children:n}):n]})}bh.SidebarToggleFill=vh;var Ac=bh;var gi=c(Ds()),Bs=c(q()),Rc=c(Wt()),$t=c(H()),$h=c(_h());var Sn=function(){return Sn=Object.assign||function(e){for(var r,o=1,n=arguments.length;o(0,Rh.useSelect)(t=>t(Vh.store).getEntityRecords("postType","wp_template_part",{per_page:-1}),[])??[],Dh=(t,e)=>{let r=t.toLowerCase(),o=e.map(i=>i.title.rendered.toLowerCase());if(!o.includes(r))return t;let n=2;for(;o.includes(`${r} ${n}`);)n++;return`${t} ${n}`},Nh=t=>Ih(t).replace(/[^\w-]+/g,"")||"wp-custom-part";var Ye=c(R(),1);function Mh(t,e){return`fields-create-template-part-modal__area-option-${t}-${e}`}function Fh(t,e){return`fields-create-template-part-modal__area-option-description-${t}-${e}`}function Fs({modalTitle:t,...e}){let r=(0,En.useSelect)(o=>o(Ms.store).getPostType("wp_template_part")?.labels?.add_new_item,[]);return(0,Ye.jsx)(ft.Modal,{title:t||r,onRequestClose:e.closeModal,overlayClassName:"fields-create-template-part-modal",focusOnMount:"firstContentElement",size:"medium",children:(0,Ye.jsx)(cy,{...e})})}var uy=t=>t==="header"?Pl:t==="footer"?xl:t==="sidebar"?Wl:t==="navigation-overlay"?kl:ql;function cy({defaultArea:t="uncategorized",blocks:e=[],confirmLabel:r=(0,Cn.__)("Add"),closeModal:o,onCreate:n,onError:i,defaultTitle:a=""}){let{createErrorNotice:l}=(0,En.useDispatch)(Bh.store),{saveEntityRecord:s}=(0,En.useDispatch)(Ms.store),u=kh(),[d,p]=(0,Ns.useState)(a),[f,m]=(0,Ns.useState)(t),[v,_]=(0,Ns.useState)(!1),h=(0,Lh.useInstanceId)(Fs),x=(0,En.useSelect)(S=>S(Ms.store).getCurrentTheme()?.default_template_part_areas,[]);async function y(){if(!(!d||v))try{_(!0);let S=Dh(d,u),V=Nh(S),O=await s("postType","wp_template_part",{slug:V,title:S,content:(0,jh.serialize)(e),area:f},{throwOnError:!0});await n(O)}catch(S){let V=S instanceof Error&&"code"in S&&S.message&&S.code!=="unknown_error"?S.message:(0,Cn.__)("An error occurred while creating the template part.");l(V,{type:"snackbar"}),i?.()}finally{_(!1)}}return(0,Ye.jsx)("form",{onSubmit:async S=>{S.preventDefault(),await y()},children:(0,Ye.jsxs)(ft.__experimentalVStack,{spacing:"4",children:[(0,Ye.jsx)(ft.TextControl,{__next40pxDefaultSize:!0,label:(0,Cn.__)("Name"),value:d,onChange:p,required:!0}),(0,Ye.jsxs)("fieldset",{className:"fields-create-template-part-modal__area-fieldset",children:[(0,Ye.jsx)(ft.BaseControl.VisualLabel,{as:"legend",children:(0,Cn.__)("Area")}),(0,Ye.jsx)("div",{className:"fields-create-template-part-modal__area-radio-group",children:(x??[]).map(S=>{let V=uy(S.icon);return(0,Ye.jsxs)("div",{className:"fields-create-template-part-modal__area-radio-wrapper",children:[(0,Ye.jsx)("input",{type:"radio",id:Mh(S.area,h),name:`fields-create-template-part-modal__area-${h}`,value:S.area,checked:f===S.area,onChange:()=>{m(S.area)},"aria-describedby":Fh(S.area,h)}),(0,Ye.jsx)(ft.Icon,{icon:V,className:"fields-create-template-part-modal__area-radio-icon"}),(0,Ye.jsx)("label",{htmlFor:Mh(S.area,h),className:"fields-create-template-part-modal__area-radio-label",children:S.label}),(0,Ye.jsx)(ft.Icon,{icon:go,className:"fields-create-template-part-modal__area-radio-checkmark"}),(0,Ye.jsx)("p",{className:"fields-create-template-part-modal__area-radio-description",id:Fh(S.area,h),children:S.description})]},S.area)})})]}),(0,Ye.jsxs)(ft.__experimentalHStack,{justify:"right",children:[(0,Ye.jsx)(ft.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{o()},children:(0,Cn.__)("Cancel")}),(0,Ye.jsx)(ft.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit","aria-disabled":!d||v,isBusy:v,children:r})]})]})})}var Hh=c(Ul()),{lock:yF,unlock:Ls}=(0,Hh.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var dy="navigation-overlay",zh={type:"grid",sort:{field:"date",direction:"desc"},fields:[],titleField:"title",mediaField:"preview"},Wh={table:{},grid:{},list:{}},Oc=[{slug:"all",label:"All Template Parts"},{slug:"header",label:"Headers"},{slug:"footer",label:"Footers"},{slug:"sidebar",label:"Sidebars"},{slug:dy,label:"Overlays"},{slug:"uncategorized",label:"General"}];function Gh(t){return t==="all"?{}:{filters:[{field:"area",operator:"is",value:t}]}}function qh(t){let e={};t.perPage!==void 0&&(e.per_page=t.perPage),t.page!==void 0&&(e.page=t.page),[void 0,""].includes(t.search)||(e.search=t.search),t.sort?.field!==void 0&&(e.orderby=t.sort.field),t.sort?.direction!==void 0&&(e.order=t.sort.direction);let r=t.filters?.find(o=>o.field==="area");return r&&(e.area=r.value),e}var Yh=c(U());import{Preview as fy}from"@wordpress/lazy-editor";function my({item:t}){let e=t.description;return React.createElement(fy,{content:t?.content?.raw,blocks:t?.blocks,description:e})}var Uh={label:(0,Yh.__)("Preview"),id:"preview",render:my,enableSorting:!1};if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='c58d328215']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","c58d328215"),t.appendChild(document.createTextNode(':root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-fieldset{border:0;margin:0;padding:0}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{grid-gap:4px 8px;align-items:center;color:#1e1e1e;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{text-wrap:pretty;color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}fieldset.fields__media-edit{border:0;margin:0;padding:0;width:100%}fieldset.fields__media-edit .components-base-control__label{color:#1e1e1e}fieldset.fields__media-edit{container-type:inline-size}fieldset.fields__media-edit .fields__media-edit-compact-group{border:1px dashed #949494;border-radius:4px;overflow:hidden}fieldset.fields__media-edit .fields__media-edit-compact-group.is-single{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button{border:0;border-radius:0}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-picker-button:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-compact-group .fields__media-edit-compact:not(:last-child){border-bottom:1px solid #f0f0f0}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-compact .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-compact{min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-compact:focus-within .fields__media-edit-compact-movers,fieldset.fields__media-edit .fields__media-edit-compact:hover .fields__media-edit-compact-movers{opacity:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers{background:#fff;border-radius:2px;opacity:0;pointer-events:none;position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-compact .fields__media-edit-compact-movers *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-picker-button:has(.fields__media-edit-placeholder):not(.fields__media-edit-expanded *) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-picker-button{align-items:center;border:1px dashed #949494;border-radius:2px;cursor:pointer;display:flex;gap:8px;min-height:40px;min-width:0;padding:4px 8px;position:relative}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment){border-color:var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:not(.has-attachment):hover{background-color:color-mix(in srgb,var(--wp-admin-theme-color,#3858e9) 4%,#0000);border-color:var(--wp-admin-theme-color-darker-20);color:var(--wp-admin-theme-color-darker-20)}fieldset.fields__media-edit .fields__media-edit-picker-button:hover{color:var(--wp-admin-theme-color)}fieldset.fields__media-edit .fields__media-edit-picker-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}fieldset.fields__media-edit .fields__media-edit-picker-button[aria-disabled=true]{cursor:default;opacity:.6}fieldset.fields__media-edit .fields__media-edit-picker-button .fields__media-edit-picker-button-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}fieldset.fields__media-edit .fields__media-edit-filename,fieldset.fields__media-edit .fields__media-edit-placeholder{flex:1;min-width:0;width:100%}fieldset.fields__media-edit .fields__media-edit-placeholder{text-align:center}fieldset.fields__media-edit .fields__media-edit-thumbnail{aspect-ratio:1/1;border-radius:2px;flex-shrink:0;width:24px}fieldset.fields__media-edit .fields__media-edit-expanded{display:grid;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview{align-items:center;aspect-ratio:3/2;border-radius:2px;display:flex;justify-content:center;overflow:hidden;padding:4px;position:relative;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-preview .fields__media-edit-expanded-preview-stack{height:100%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-overlay *{pointer-events:auto}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-actions{background:#fff;border-radius:2px;position:absolute;right:4px;top:4px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item{border-radius:4px;min-width:0;position:relative}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:focus-within .fields__media-edit-expanded-overlay,fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:hover .fields__media-edit-expanded-overlay{opacity:1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-expanded-item:not(.has-preview-image) .fields__media-edit-expanded-preview-stack{padding:8px}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-thumbnail{height:100%;object-fit:cover;object-position:50% 50%;width:100%}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-filename{flex:none;text-align:center}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button-spinner svg{margin:0}fieldset.fields__media-edit .fields__media-edit-expanded.is-single{grid-template-columns:1fr}fieldset.fields__media-edit .fields__media-edit-expanded.is-single .fields__media-edit-expanded-preview{aspect-ratio:2/1}fieldset.fields__media-edit .fields__media-edit-expanded .fields__media-edit-picker-button{border-radius:4px}fieldset.fields__media-edit .fields__media-edit-expanded.is-empty .fields__media-edit-picker-button{border-radius:2px}fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(3,1fr)}@container (max-width: 768px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:repeat(2,1fr)}}@container (max-width: 280px){fieldset.fields__media-edit .fields__media-edit-expanded.is-multiple:not(.is-empty){grid-template-columns:1fr}}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-picker-button{padding:0}fieldset.fields__media-edit .fields__media-edit-expanded:not(.is-empty) .fields__media-edit-placeholder{align-items:center;aspect-ratio:3/2;display:flex;justify-content:center}.fields-controls__slug{border:0;margin:0;padding:0}.fields-controls__slug .fields-controls__slug-external-icon{margin-left:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-image,.fields-controls__featured-image-placeholder{border-radius:4px;display:block;height:100%;width:100%}.fields-controls__featured-image-placeholder{background:#f0f0f0;box-shadow:none}.fields-controls__parent,.fields-controls__password{border:0;margin:0;padding:0}.fields-field__title>span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.routes-template-part-list__tabs-wrapper{border-bottom:1px solid #f0f0f0;padding:0 24px}')),document.head.appendChild(t)}var{useEntityRecordsWithPermissions:xy}=Ls(gi.privateApis),{usePostActions:wy,usePostFields:_y}=Ls($h.privateApis),{Tabs:Ic}=Ls(Bs.privateApis);function yy(t){return t.id.toString()}function Sy(){let t=by(),{area:e="all"}=py({from:"/template-parts/list/$area"}),r=vy(),o=gy({from:"/template-parts/list/$area"}),n=(0,Rc.useSelect)(g=>g(gi.store).getPostType("wp_template_part"),[]),i=n?.labels,a=(0,Rc.useSelect)(g=>g(gi.store).canUser("create",{kind:"postType",name:"wp_template_part"}),[]),[l,s]=(0,$t.useState)(!1),u=zh,d=(0,$t.useMemo)(()=>Gh(e),[e]),p=(0,$t.useCallback)(g=>{r({search:{...o,...g}})},[o,r]),{view:f,isModified:m,updateView:v,resetToDefault:_}=qs({kind:"postType",name:"wp_template_part",slug:"default-new",defaultView:u,activeViewOverrides:d,queryParams:o,onChangeQueryParams:p}),h=()=>{_(),t()},x=g=>{v(g),g.type!==f.type&&t()},y=(0,$t.useMemo)(()=>qh(f),[f]),{records:S,totalItems:V,totalPages:O,isResolving:N}=xy("postType","wp_template_part",y),D=_y({postType:"wp_template_part"}),E=(0,$t.useMemo)(()=>[Uh].concat(D.filter(g=>!(g.id==="area"&&e!=="all"||g.id==="status")).map(g=>g.id==="area"?{...g,filterBy:!1}:g)),[D,e]),A=(0,$t.useCallback)(g=>{let I=g.map(M=>M.id.toString()),w=o.postIds||[],C=w.filter(M=>!I.includes(M));C.length!==w.length?r({search:{...o,postIds:C.length>0?C:void 0}}):t()},[t,o,r]),k=wy({postType:"wp_template_part",context:"list",onActionPerformed:(g,I)=>{(g==="move-to-trash"||g==="permanently-delete")&&A(I)}}),b=(0,$t.useMemo)(()=>[...k?.flatMap(g=>g.id==="view-post-revisions"?[]:[g])],[k]),P=(0,$t.useCallback)(g=>{r({to:`/template-parts/list/${g}`})},[r]);if(!n)return null;let T=o.postIds??[];return f.type==="list"&&T.length===0&&S?.length>0&&T.push(S[0].id.toString()),f.type==="list"&&T.splice(1),React.createElement(Ac,{title:n.labels?.name,subTitle:n.labels?.description,className:"template-part-page",actions:i?.add_new_item&&a&&React.createElement(Bs.Button,{variant:"primary",onClick:()=>s(!0),size:"compact"},i.add_new_item),hasPadding:!1},Oc.length>1&&React.createElement("div",{className:"routes-template-part-list__tabs-wrapper"},React.createElement(Ic,{onSelect:P,selectedTabId:e??"all"},React.createElement(Ic.TabList,null,Oc.map(g=>React.createElement(Ic.Tab,{tabId:g.slug,key:g.slug},g.label))))),React.createElement(Tc,{data:S,fields:E,view:f,onChangeView:x,actions:b,isLoading:N,paginationInfo:{totalItems:V,totalPages:O},defaultLayouts:Wh,getItemId:yy,selection:T,onReset:m?h:!1,onChangeSelection:g=>{r({search:{...o,postIds:g.length>0?g:void 0,edit:g.length===0?void 0:o.edit}})},renderItemLink:({item:g,...I})=>React.createElement(hy,{to:`/types/wp_template_part/edit/${encodeURIComponent(g.id)}`,...I,onClick:w=>{w.stopPropagation()}})}),l&&React.createElement(Fs,{closeModal:()=>s(!1),blocks:[],onCreate:g=>{s(!1),r({to:`/types/wp_template_part/edit/${encodeURIComponent(g.id)}`})},onError:()=>s(!1),defaultArea:e!=="all"?e:"uncategorized"}))}var Cy=Sy;export{Cy as stage}; +/*! Bundled license information: + +use-sync-external-store/cjs/use-sync-external-store-shim.production.js: + (** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/src/wp-includes/build/routes/template-part-list/route.js b/src/wp-includes/build/routes/template-part-list/route.js new file mode 100644 index 0000000000000..d5e39401ba722 --- /dev/null +++ b/src/wp-includes/build/routes/template-part-list/route.js @@ -0,0 +1,267 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// package-external:@wordpress/data +var require_data = __commonJS({ + "package-external:@wordpress/data"(exports, module) { + module.exports = window.wp.data; + } +}); + +// package-external:@wordpress/core-data +var require_core_data = __commonJS({ + "package-external:@wordpress/core-data"(exports, module) { + module.exports = window.wp.coreData; + } +}); + +// package-external:@wordpress/i18n +var require_i18n = __commonJS({ + "package-external:@wordpress/i18n"(exports, module) { + module.exports = window.wp.i18n; + } +}); + +// package-external:@wordpress/element +var require_element = __commonJS({ + "package-external:@wordpress/element"(exports, module) { + module.exports = window.wp.element; + } +}); + +// package-external:@wordpress/preferences +var require_preferences = __commonJS({ + "package-external:@wordpress/preferences"(exports, module) { + module.exports = window.wp.preferences; + } +}); + +// routes/template-part-list/route.ts +var import_data3 = __toESM(require_data()); +var import_core_data = __toESM(require_core_data()); +var import_i18n = __toESM(require_i18n()); + +// packages/views/build-module/use-view.mjs +var import_element = __toESM(require_element(), 1); +var import_data = __toESM(require_data(), 1); +var import_preferences = __toESM(require_preferences(), 1); + +// packages/views/build-module/preference-keys.mjs +function generatePreferenceKey(kind, name, slug) { + return `dataviews-${kind}-${name}-${slug}`; +} + +// packages/views/build-module/filter-utils.mjs +var SCALAR_VALUES = [ + "titleField", + "mediaField", + "descriptionField", + "showTitle", + "showMedia", + "showDescription", + "showLevels", + "infiniteScrollEnabled" +]; +function mergeActiveViewOverrides(view, activeViewOverrides, defaultView) { + if (!activeViewOverrides) { + return view; + } + let result = view; + for (const key of SCALAR_VALUES) { + if (key in activeViewOverrides) { + result = { ...result, [key]: activeViewOverrides[key] }; + } + } + if (activeViewOverrides.filters && activeViewOverrides.filters.length > 0) { + const activeFields = new Set( + activeViewOverrides.filters.map((f) => f.field) + ); + const preserved = (view.filters ?? []).filter( + (f) => !activeFields.has(f.field) + ); + result = { + ...result, + filters: [...preserved, ...activeViewOverrides.filters] + }; + } + if (activeViewOverrides.sort) { + const isDefaultSort = defaultView && view.sort?.field === defaultView.sort?.field && view.sort?.direction === defaultView.sort?.direction; + if (isDefaultSort) { + result = { + ...result, + sort: activeViewOverrides.sort + }; + } + } + if (activeViewOverrides.layout) { + result = { + ...result, + layout: { + ...result.layout, + ...activeViewOverrides.layout + } + }; + } + if (activeViewOverrides.groupBy) { + result = { + ...result, + groupBy: activeViewOverrides.groupBy + }; + } + return result; +} + +// packages/views/build-module/load-view.mjs +var import_data2 = __toESM(require_data(), 1); +var import_preferences2 = __toESM(require_preferences(), 1); +async function loadView(config) { + const { kind, name, slug, defaultView, activeViewOverrides, queryParams } = config; + const preferenceKey = generatePreferenceKey(kind, name, slug); + const persistedView = (0, import_data2.select)(import_preferences2.store).get( + "core/views", + preferenceKey + ); + const baseView = persistedView ?? defaultView; + const page = queryParams?.page ?? 1; + const search = queryParams?.search ?? ""; + return mergeActiveViewOverrides( + { + ...baseView, + page, + search + }, + activeViewOverrides, + defaultView + ); +} + +// routes/template-part-list/view-utils.ts +var DEFAULT_VIEW = { + type: "grid", + sort: { + field: "date", + direction: "desc" + }, + fields: [], + titleField: "title", + mediaField: "preview" +}; +function getActiveViewOverridesForTab(area) { + if (area === "all") { + return {}; + } + return { + filters: [ + { + field: "area", + operator: "is", + value: area + } + ] + }; +} +async function ensureView(area, search) { + return loadView({ + kind: "postType", + name: "wp_template_part", + slug: "default-new", + defaultView: DEFAULT_VIEW, + activeViewOverrides: getActiveViewOverridesForTab(area ?? "all"), + queryParams: search + }); +} +function viewToQuery(view) { + const result = {}; + if (void 0 !== view.perPage) { + result.per_page = view.perPage; + } + if (void 0 !== view.page) { + result.page = view.page; + } + if (![void 0, ""].includes(view.search)) { + result.search = view.search; + } + if (void 0 !== view.sort?.field) { + result.orderby = view.sort.field; + } + if (void 0 !== view.sort?.direction) { + result.order = view.sort.direction; + } + const areaFilter = view.filters?.find( + (filter) => filter.field === "area" + ); + if (areaFilter) { + result.area = areaFilter.value; + } + return result; +} + +// routes/template-part-list/route.ts +var route = { + title: () => (0, import_i18n.__)("Template Parts"), + async canvas(context) { + const { params, search } = context; + const view = await ensureView(params.area, { + page: search.page, + search: search.search + }); + if (view.type !== "list") { + return void 0; + } + if (search.postIds && search.postIds.length > 0) { + const postId = search.postIds[0].toString(); + return { + postType: "wp_template_part", + postId, + isPreview: true, + editLink: `/types/wp_template_part/edit/${encodeURIComponent( + postId + )}` + }; + } + const query = viewToQuery(view); + const posts = await (0, import_data3.resolveSelect)(import_core_data.store).getEntityRecords( + "postType", + "wp_template_part", + { ...query, per_page: 1 } + ); + if (posts && posts.length > 0) { + const postId = posts[0].id.toString(); + return { + postType: "wp_template_part", + postId, + isPreview: true, + editLink: `/types/wp_template_part/edit/${encodeURIComponent( + postId + )}` + }; + } + return void 0; + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/template-part-list/route.min.asset.php b/src/wp-includes/build/routes/template-part-list/route.min.asset.php new file mode 100644 index 0000000000000..7746bfef374c1 --- /dev/null +++ b/src/wp-includes/build/routes/template-part-list/route.min.asset.php @@ -0,0 +1 @@ + array('wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-preferences'), 'version' => '39f2323c7086498e4456'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/template-part-list/route.min.js b/src/wp-includes/build/routes/template-part-list/route.min.js new file mode 100644 index 0000000000000..dca4ee059b301 --- /dev/null +++ b/src/wp-includes/build/routes/template-part-list/route.min.js @@ -0,0 +1 @@ +var j=Object.create;var g=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var a=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var M=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of z(e))!K.call(t,n)&&n!==r&&g(t,n,{get:()=>e[n],enumerable:!(s=q(e,n))||s.enumerable});return t};var o=(t,e,r)=>(r=t!=null?j(C(t)):{},M(e||!t||!t.__esModule?g(r,"default",{value:t,enumerable:!0}):r,t));var p=a((H,m)=>{m.exports=window.wp.data});var h=a((J,y)=>{y.exports=window.wp.coreData});var A=a((X,w)=>{w.exports=window.wp.i18n});var T=a((O,_)=>{_.exports=window.wp.element});var f=a((v,S)=>{S.exports=window.wp.preferences});var E=o(p()),k=o(h()),D=o(A());var x=o(T(),1),P=o(p(),1),N=o(f(),1);function u(t,e,r){return`dataviews-${t}-${e}-${r}`}var $=["titleField","mediaField","descriptionField","showTitle","showMedia","showDescription","showLevels","infiniteScrollEnabled"];function c(t,e,r){if(!e)return t;let s=t;for(let n of $)n in e&&(s={...s,[n]:e[n]});if(e.filters&&e.filters.length>0){let n=new Set(e.filters.map(i=>i.field)),l=(t.filters??[]).filter(i=>!n.has(i.field));s={...s,filters:[...l,...e.filters]}}return e.sort&&r&&t.sort?.field===r.sort?.field&&t.sort?.direction===r.sort?.direction&&(s={...s,sort:e.sort}),e.layout&&(s={...s,layout:{...s.layout,...e.layout}}),e.groupBy&&(s={...s,groupBy:e.groupBy}),s}var F=o(p(),1),L=o(f(),1);async function d(t){let{kind:e,name:r,slug:s,defaultView:n,activeViewOverrides:l,queryParams:i}=t,B=u(e,r,s),R=(0,F.select)(L.store).get("core/views",B)??n,U=i?.page??1,b=i?.search??"";return c({...R,page:U,search:b},l,n)}var Q={type:"grid",sort:{field:"date",direction:"desc"},fields:[],titleField:"title",mediaField:"preview"};function G(t){return t==="all"?{}:{filters:[{field:"area",operator:"is",value:t}]}}async function V(t,e){return d({kind:"postType",name:"wp_template_part",slug:"default-new",defaultView:Q,activeViewOverrides:G(t??"all"),queryParams:e})}function I(t){let e={};t.perPage!==void 0&&(e.per_page=t.perPage),t.page!==void 0&&(e.page=t.page),[void 0,""].includes(t.search)||(e.search=t.search),t.sort?.field!==void 0&&(e.orderby=t.sort.field),t.sort?.direction!==void 0&&(e.order=t.sort.direction);let r=t.filters?.find(s=>s.field==="area");return r&&(e.area=r.value),e}var we={title:()=>(0,D.__)("Template Parts"),async canvas(t){let{params:e,search:r}=t,s=await V(e.area,{page:r.page,search:r.search});if(s.type!=="list")return;if(r.postIds&&r.postIds.length>0){let i=r.postIds[0].toString();return{postType:"wp_template_part",postId:i,isPreview:!0,editLink:`/types/wp_template_part/edit/${encodeURIComponent(i)}`}}let n=I(s),l=await(0,E.resolveSelect)(k.store).getEntityRecords("postType","wp_template_part",{...n,per_page:1});if(l&&l.length>0){let i=l[0].id.toString();return{postType:"wp_template_part",postId:i,isPreview:!0,editLink:`/types/wp_template_part/edit/${encodeURIComponent(i)}`}}}};export{we as route}; diff --git a/src/wp-includes/build/routes/template-part/route.js b/src/wp-includes/build/routes/template-part/route.js new file mode 100644 index 0000000000000..09019e9730357 --- /dev/null +++ b/src/wp-includes/build/routes/template-part/route.js @@ -0,0 +1,16 @@ +// routes/template-part/route.ts +import { redirect } from "@wordpress/route"; +var route = { + beforeLoad: () => { + throw redirect({ + throw: true, + to: "/template-parts/list/$area", + params: { + area: "all" + } + }); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/template-part/route.min.asset.php b/src/wp-includes/build/routes/template-part/route.min.asset.php new file mode 100644 index 0000000000000..7faff671e5696 --- /dev/null +++ b/src/wp-includes/build/routes/template-part/route.min.asset.php @@ -0,0 +1 @@ + array(), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'fc7a9aa11a3a6d1e7659'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/template-part/route.min.js b/src/wp-includes/build/routes/template-part/route.min.js new file mode 100644 index 0000000000000..9c9d6011425e5 --- /dev/null +++ b/src/wp-includes/build/routes/template-part/route.min.js @@ -0,0 +1 @@ +import{redirect as r}from"@wordpress/route";var e={beforeLoad:()=>{throw r({throw:!0,to:"/template-parts/list/$area",params:{area:"all"}})}};export{e as route}; diff --git a/src/wp-includes/build/routes/template/route.js b/src/wp-includes/build/routes/template/route.js new file mode 100644 index 0000000000000..a92aa069e8940 --- /dev/null +++ b/src/wp-includes/build/routes/template/route.js @@ -0,0 +1,17 @@ +// routes/template/route.ts +import { redirect } from "@wordpress/route"; +var route = { + beforeLoad: () => { + const isTemplateActivateEnabled = typeof window !== "undefined" && window.__experimentalTemplateActivate; + throw redirect({ + throw: true, + to: "/templates/list/$activeView", + params: { + activeView: isTemplateActivateEnabled ? "active" : "all" + } + }); + } +}; +export { + route +}; diff --git a/src/wp-includes/build/routes/template/route.min.asset.php b/src/wp-includes/build/routes/template/route.min.asset.php new file mode 100644 index 0000000000000..fb0f42057528f --- /dev/null +++ b/src/wp-includes/build/routes/template/route.min.asset.php @@ -0,0 +1 @@ + array(), 'module_dependencies' => array(array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '84e7d423597f7b5bb543'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/template/route.min.js b/src/wp-includes/build/routes/template/route.min.js new file mode 100644 index 0000000000000..828bbf7bb1c54 --- /dev/null +++ b/src/wp-includes/build/routes/template/route.min.js @@ -0,0 +1 @@ +import{redirect as t}from"@wordpress/route";var a={beforeLoad:()=>{let e=typeof window<"u"&&window.__experimentalTemplateActivate;throw t({throw:!0,to:"/templates/list/$activeView",params:{activeView:e?"active":"all"}})}};export{a as route}; diff --git a/src/wp-includes/certificates/ca-bundle.crt b/src/wp-includes/certificates/ca-bundle.crt index 65be891eea878..5d325ac6fab3f 100644 --- a/src/wp-includes/certificates/ca-bundle.crt +++ b/src/wp-includes/certificates/ca-bundle.crt @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Tue Dec 2 04:12:02 2025 GMT +## Certificate data from Mozilla as of: Tue Nov 4 04:12:02 2025 GMT ## ## Find updated versions here: https://curl.se/docs/caextract.html ## @@ -15,8 +15,8 @@ ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## -## Conversion done with mk-ca-bundle.pl version 1.30. -## SHA256: a903b3cd05231e39332515ef7ebe37e697262f39515a52015c23c62805b73cd0 +## Conversion done with mk-ca-bundle.pl version 1.29. +## SHA256: 039132bff5179ce57cec5803ba59fe37abe6d0297aeb538c5af27847f0702517 ## @@ -3167,6 +3167,96 @@ bbd+NvBNEU/zy4k6LHiRUKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xk dUfFVZDj/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== -----END CERTIFICATE----- +CommScope Public Trust ECC Root-01 +================================== +-----BEGIN CERTIFICATE----- +MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMwTjELMAkGA1UE +BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz +dCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNaFw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYT +AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg +RUNDIFJvb3QtMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLx +eP0CflfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJEhRGnSjot +6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggqhkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2 +Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liW +pDVfG2XqYZpwI7UNo5uSUm9poIyNStDuiw7LR47QjRE= +-----END CERTIFICATE----- + +CommScope Public Trust ECC Root-02 +================================== +-----BEGIN CERTIFICATE----- +MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMwTjELMAkGA1UE +BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz +dCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRaFw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYT +AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg +RUNDIFJvb3QtMDIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/M +MDALj2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmUv4RDsNuE +SgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggqhkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9 +Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/nich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs7 +3u1Z/GtMMH9ZzkXpc2AVmkzw5l4lIhVtwodZ0LKOag== +-----END CERTIFICATE----- + +CommScope Public Trust RSA Root-01 +================================== +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQELBQAwTjELMAkG +A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU +cnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNV +BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1 +c3QgUlNBIFJvb3QtMDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45Ft +nYSkYZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslhsuitQDy6 +uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0alDrJLpA6lfO741GIDuZNq +ihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3OjWiE260f6GBfZumbCk6SP/F2krfxQapWs +vCQz0b2If4b19bJzKo98rwjyGpg/qYFlP8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/c +Zip8UlF1y5mO6D1cv547KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTif +BSeolz7pUcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/kQO9 +lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JOHg9O5j9ZpSPcPYeo +KFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkBEa801M/XrmLTBQe0MXXgDW1XT2mH ++VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6UCBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm4 +5P3luG0wDQYJKoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6 +NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQnmhUQo8mUuJM +3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+QgvfKNmwrZggvkN80V4aCRck +jXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2vtrV0KnahP/t1MJ+UXjulYPPLXAziDslg+Mkf +Foom3ecnf+slpoq9uC02EJqxWE2aaE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/W +NyVntHKLr4W96ioDj8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+ +o/E4Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0wlREQKC6/ +oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHnYfkUyq+Dj7+vsQpZXdxc +1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVocicCMb3SgazNNtQEo/a2tiRc7ppqEvOuM +6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw +-----END CERTIFICATE----- + +CommScope Public Trust RSA Root-02 +================================== +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQELBQAwTjELMAkG +A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU +cnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNV +BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1 +c3QgUlNBIFJvb3QtMDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3V +rCLENQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0kyI9p+Kx +7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1CrWDaSWqVcN3SAOLMV2MC +e5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxzhkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2W +Wy09X6GDRl224yW4fKcZgBzqZUPckXk2LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rp +M9kzXzehxfCrPfp4sOcsn/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIf +hs1w/tkuFT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5kQMr +eyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3wNemKfrb3vOTlycE +VS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6vwQcQeKwRoi9C8DfF8rhW3Q5iLc4t +Vn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7Gx +cJXvYXowDQYJKoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB +KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3+VGXu6TwYofF +1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbymeAPnCKfWxkxlSaRosTKCL4BWa +MS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3NyqpgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xd +gSGn2rtO/+YHqP65DSdsu3BaVXoT6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2O +HG1QAk8mGEPej1WFsQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+Nm +YWvtPjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2dlklyALKr +dVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670v64fG9PiO/yzcnMcmyiQ +iRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17Org3bhzjlP1v9mxnhMUF6cKojawHhRUzN +lM47ni3niAIi9G7oyOzWPPO5std3eqx7 +-----END CERTIFICATE----- + Telekom Security TLS ECC Root 2020 ================================== -----BEGIN CERTIFICATE----- diff --git a/src/wp-includes/class-wp-block-parser-frame.php b/src/wp-includes/class-wp-block-parser-frame.php index afa836d01f678..6ab5dd3087dfb 100644 --- a/src/wp-includes/class-wp-block-parser-frame.php +++ b/src/wp-includes/class-wp-block-parser-frame.php @@ -73,7 +73,7 @@ public function __construct( $block, $token_start, $token_length, $prev_offset = $this->block = $block; $this->token_start = $token_start; $this->token_length = $token_length; - $this->prev_offset = $prev_offset ?? $token_start + $token_length; + $this->prev_offset = isset( $prev_offset ) ? $prev_offset : $token_start + $token_length; $this->leading_html_start = $leading_html_start; } } diff --git a/src/wp-includes/class-wp-block-parser.php b/src/wp-includes/class-wp-block-parser.php index 8c619a7b47f2c..bf8a59249d99d 100644 --- a/src/wp-includes/class-wp-block-parser.php +++ b/src/wp-includes/class-wp-block-parser.php @@ -318,7 +318,7 @@ public function freeform( $inner_html ) { * * @internal * @since 5.0.0 - * @param null|int $length How many bytes of document text to output. + * @param null $length how many bytes of document text to output. */ public function add_freeform( $length = null ) { $length = $length ? $length : strlen( $this->document ) - $this->offset; diff --git a/src/wp-includes/icons/library/accordion-heading.svg b/src/wp-includes/icons/library/accordion-heading.svg new file mode 100644 index 0000000000000..490a55584a8f6 --- /dev/null +++ b/src/wp-includes/icons/library/accordion-heading.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/accordion-item.svg b/src/wp-includes/icons/library/accordion-item.svg new file mode 100644 index 0000000000000..7bb8649f9b15b --- /dev/null +++ b/src/wp-includes/icons/library/accordion-item.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/wp-includes/icons/library/accordion.svg b/src/wp-includes/icons/library/accordion.svg new file mode 100644 index 0000000000000..909d9150cfa79 --- /dev/null +++ b/src/wp-includes/icons/library/accordion.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/wp-includes/icons/library/add-card.svg b/src/wp-includes/icons/library/add-card.svg new file mode 100644 index 0000000000000..91a4565df6934 --- /dev/null +++ b/src/wp-includes/icons/library/add-card.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/add-submenu.svg b/src/wp-includes/icons/library/add-submenu.svg new file mode 100644 index 0000000000000..19f9b28f6366d --- /dev/null +++ b/src/wp-includes/icons/library/add-submenu.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/add-template.svg b/src/wp-includes/icons/library/add-template.svg new file mode 100644 index 0000000000000..31b6107afcb62 --- /dev/null +++ b/src/wp-includes/icons/library/add-template.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/align-center.svg b/src/wp-includes/icons/library/align-center.svg new file mode 100644 index 0000000000000..4a859d45cc2a0 --- /dev/null +++ b/src/wp-includes/icons/library/align-center.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/align-justify.svg b/src/wp-includes/icons/library/align-justify.svg new file mode 100644 index 0000000000000..52c22e430d43a --- /dev/null +++ b/src/wp-includes/icons/library/align-justify.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/align-left.svg b/src/wp-includes/icons/library/align-left.svg new file mode 100644 index 0000000000000..5b26154484352 --- /dev/null +++ b/src/wp-includes/icons/library/align-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/align-none.svg b/src/wp-includes/icons/library/align-none.svg new file mode 100644 index 0000000000000..30942087145e5 --- /dev/null +++ b/src/wp-includes/icons/library/align-none.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/align-right.svg b/src/wp-includes/icons/library/align-right.svg new file mode 100644 index 0000000000000..6ad90bdb89678 --- /dev/null +++ b/src/wp-includes/icons/library/align-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/archive.svg b/src/wp-includes/icons/library/archive.svg new file mode 100644 index 0000000000000..661a9782231ef --- /dev/null +++ b/src/wp-includes/icons/library/archive.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-down-left.svg b/src/wp-includes/icons/library/arrow-down-left.svg new file mode 100644 index 0000000000000..7ae619122cb18 --- /dev/null +++ b/src/wp-includes/icons/library/arrow-down-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-down-right.svg b/src/wp-includes/icons/library/arrow-down-right.svg new file mode 100644 index 0000000000000..96f3eaaa341f3 --- /dev/null +++ b/src/wp-includes/icons/library/arrow-down-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-down.svg b/src/wp-includes/icons/library/arrow-down.svg new file mode 100644 index 0000000000000..eec68fd0379db --- /dev/null +++ b/src/wp-includes/icons/library/arrow-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-left.svg b/src/wp-includes/icons/library/arrow-left.svg new file mode 100644 index 0000000000000..f0ad62990499b --- /dev/null +++ b/src/wp-includes/icons/library/arrow-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-right.svg b/src/wp-includes/icons/library/arrow-right.svg new file mode 100644 index 0000000000000..b1d35eb42725a --- /dev/null +++ b/src/wp-includes/icons/library/arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-up-left.svg b/src/wp-includes/icons/library/arrow-up-left.svg new file mode 100644 index 0000000000000..ace24ff41421c --- /dev/null +++ b/src/wp-includes/icons/library/arrow-up-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-up-right.svg b/src/wp-includes/icons/library/arrow-up-right.svg new file mode 100644 index 0000000000000..ff9807df94919 --- /dev/null +++ b/src/wp-includes/icons/library/arrow-up-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/arrow-up.svg b/src/wp-includes/icons/library/arrow-up.svg new file mode 100644 index 0000000000000..bc68d5bee25ba --- /dev/null +++ b/src/wp-includes/icons/library/arrow-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/aspect-ratio.svg b/src/wp-includes/icons/library/aspect-ratio.svg new file mode 100644 index 0000000000000..8d83f7635ebd7 --- /dev/null +++ b/src/wp-includes/icons/library/aspect-ratio.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/at-symbol.svg b/src/wp-includes/icons/library/at-symbol.svg new file mode 100644 index 0000000000000..d7280813c6a9c --- /dev/null +++ b/src/wp-includes/icons/library/at-symbol.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/audio.svg b/src/wp-includes/icons/library/audio.svg new file mode 100644 index 0000000000000..3cdbe1181dc10 --- /dev/null +++ b/src/wp-includes/icons/library/audio.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/background.svg b/src/wp-includes/icons/library/background.svg new file mode 100644 index 0000000000000..166c1db70dd50 --- /dev/null +++ b/src/wp-includes/icons/library/background.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/backup.svg b/src/wp-includes/icons/library/backup.svg new file mode 100644 index 0000000000000..4abf701d41fed --- /dev/null +++ b/src/wp-includes/icons/library/backup.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/bell-unread.svg b/src/wp-includes/icons/library/bell-unread.svg new file mode 100644 index 0000000000000..efdedbf25d4b3 --- /dev/null +++ b/src/wp-includes/icons/library/bell-unread.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/bell.svg b/src/wp-includes/icons/library/bell.svg new file mode 100644 index 0000000000000..c1bccda2275e7 --- /dev/null +++ b/src/wp-includes/icons/library/bell.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/block-default.svg b/src/wp-includes/icons/library/block-default.svg new file mode 100644 index 0000000000000..5c8e11103d994 --- /dev/null +++ b/src/wp-includes/icons/library/block-default.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/block-meta.svg b/src/wp-includes/icons/library/block-meta.svg new file mode 100644 index 0000000000000..81dfc1d3684d4 --- /dev/null +++ b/src/wp-includes/icons/library/block-meta.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/block-table.svg b/src/wp-includes/icons/library/block-table.svg new file mode 100644 index 0000000000000..44d91172e4c10 --- /dev/null +++ b/src/wp-includes/icons/library/block-table.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/border.svg b/src/wp-includes/icons/library/border.svg new file mode 100644 index 0000000000000..344181dccd79a --- /dev/null +++ b/src/wp-includes/icons/library/border.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/box.svg b/src/wp-includes/icons/library/box.svg new file mode 100644 index 0000000000000..396c4471cf40b --- /dev/null +++ b/src/wp-includes/icons/library/box.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/breadcrumbs.svg b/src/wp-includes/icons/library/breadcrumbs.svg new file mode 100644 index 0000000000000..96919bd87fe6c --- /dev/null +++ b/src/wp-includes/icons/library/breadcrumbs.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/brush.svg b/src/wp-includes/icons/library/brush.svg new file mode 100644 index 0000000000000..18dffa96f6993 --- /dev/null +++ b/src/wp-includes/icons/library/brush.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/bug.svg b/src/wp-includes/icons/library/bug.svg new file mode 100644 index 0000000000000..92ca3b18be2d8 --- /dev/null +++ b/src/wp-includes/icons/library/bug.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/button.svg b/src/wp-includes/icons/library/button.svg new file mode 100644 index 0000000000000..cbc2b05e75dcb --- /dev/null +++ b/src/wp-includes/icons/library/button.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/buttons.svg b/src/wp-includes/icons/library/buttons.svg new file mode 100644 index 0000000000000..fdc79c2b1b71d --- /dev/null +++ b/src/wp-includes/icons/library/buttons.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/calendar.svg b/src/wp-includes/icons/library/calendar.svg new file mode 100644 index 0000000000000..982890efb37a8 --- /dev/null +++ b/src/wp-includes/icons/library/calendar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/cancel-circle-filled.svg b/src/wp-includes/icons/library/cancel-circle-filled.svg new file mode 100644 index 0000000000000..63dce97f38000 --- /dev/null +++ b/src/wp-includes/icons/library/cancel-circle-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/caption.svg b/src/wp-includes/icons/library/caption.svg new file mode 100644 index 0000000000000..0fff644fb6176 --- /dev/null +++ b/src/wp-includes/icons/library/caption.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/capture-photo.svg b/src/wp-includes/icons/library/capture-photo.svg new file mode 100644 index 0000000000000..9322db371f060 --- /dev/null +++ b/src/wp-includes/icons/library/capture-photo.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/capture-video.svg b/src/wp-includes/icons/library/capture-video.svg new file mode 100644 index 0000000000000..5fde23efb3d04 --- /dev/null +++ b/src/wp-includes/icons/library/capture-video.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/cart.svg b/src/wp-includes/icons/library/cart.svg new file mode 100644 index 0000000000000..5bf6f6d45f559 --- /dev/null +++ b/src/wp-includes/icons/library/cart.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/category.svg b/src/wp-includes/icons/library/category.svg new file mode 100644 index 0000000000000..3b36e4f2fc00c --- /dev/null +++ b/src/wp-includes/icons/library/category.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/caution-filled.svg b/src/wp-includes/icons/library/caution-filled.svg new file mode 100644 index 0000000000000..6b35a8ea4d022 --- /dev/null +++ b/src/wp-includes/icons/library/caution-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/caution.svg b/src/wp-includes/icons/library/caution.svg new file mode 100644 index 0000000000000..3e6c70c263b9a --- /dev/null +++ b/src/wp-includes/icons/library/caution.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chart-bar.svg b/src/wp-includes/icons/library/chart-bar.svg new file mode 100644 index 0000000000000..c2bcf26f58a35 --- /dev/null +++ b/src/wp-includes/icons/library/chart-bar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/check.svg b/src/wp-includes/icons/library/check.svg new file mode 100644 index 0000000000000..af0a393450169 --- /dev/null +++ b/src/wp-includes/icons/library/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-down-small.svg b/src/wp-includes/icons/library/chevron-down-small.svg new file mode 100644 index 0000000000000..c8fb1bfffa2f0 --- /dev/null +++ b/src/wp-includes/icons/library/chevron-down-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-down.svg b/src/wp-includes/icons/library/chevron-down.svg new file mode 100644 index 0000000000000..bd3f8fb059df5 --- /dev/null +++ b/src/wp-includes/icons/library/chevron-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-left-small.svg b/src/wp-includes/icons/library/chevron-left-small.svg new file mode 100644 index 0000000000000..b2ca179d1a59e --- /dev/null +++ b/src/wp-includes/icons/library/chevron-left-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-left.svg b/src/wp-includes/icons/library/chevron-left.svg new file mode 100644 index 0000000000000..6276e30f924a8 --- /dev/null +++ b/src/wp-includes/icons/library/chevron-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-right-small.svg b/src/wp-includes/icons/library/chevron-right-small.svg new file mode 100644 index 0000000000000..956ca53c66147 --- /dev/null +++ b/src/wp-includes/icons/library/chevron-right-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-right.svg b/src/wp-includes/icons/library/chevron-right.svg new file mode 100644 index 0000000000000..d4b7d6dac2b96 --- /dev/null +++ b/src/wp-includes/icons/library/chevron-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-up-down.svg b/src/wp-includes/icons/library/chevron-up-down.svg new file mode 100644 index 0000000000000..7cdd5d61d0497 --- /dev/null +++ b/src/wp-includes/icons/library/chevron-up-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-up-small.svg b/src/wp-includes/icons/library/chevron-up-small.svg new file mode 100644 index 0000000000000..e6be7bd3b841e --- /dev/null +++ b/src/wp-includes/icons/library/chevron-up-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/chevron-up.svg b/src/wp-includes/icons/library/chevron-up.svg new file mode 100644 index 0000000000000..59db09c28b612 --- /dev/null +++ b/src/wp-includes/icons/library/chevron-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/classic.svg b/src/wp-includes/icons/library/classic.svg new file mode 100644 index 0000000000000..d27703521a3cf --- /dev/null +++ b/src/wp-includes/icons/library/classic.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/close-small.svg b/src/wp-includes/icons/library/close-small.svg new file mode 100644 index 0000000000000..5ba16b5c710f7 --- /dev/null +++ b/src/wp-includes/icons/library/close-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/close.svg b/src/wp-includes/icons/library/close.svg new file mode 100644 index 0000000000000..75be939490410 --- /dev/null +++ b/src/wp-includes/icons/library/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/cloud-download.svg b/src/wp-includes/icons/library/cloud-download.svg new file mode 100644 index 0000000000000..6d2125241572b --- /dev/null +++ b/src/wp-includes/icons/library/cloud-download.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/cloud-upload.svg b/src/wp-includes/icons/library/cloud-upload.svg new file mode 100644 index 0000000000000..513159068a773 --- /dev/null +++ b/src/wp-includes/icons/library/cloud-upload.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/cloud.svg b/src/wp-includes/icons/library/cloud.svg new file mode 100644 index 0000000000000..9fb89b1aac649 --- /dev/null +++ b/src/wp-includes/icons/library/cloud.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/code.svg b/src/wp-includes/icons/library/code.svg new file mode 100644 index 0000000000000..24d4bdccbd5a2 --- /dev/null +++ b/src/wp-includes/icons/library/code.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/cog.svg b/src/wp-includes/icons/library/cog.svg new file mode 100644 index 0000000000000..d8b4b82c02c2d --- /dev/null +++ b/src/wp-includes/icons/library/cog.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/color.svg b/src/wp-includes/icons/library/color.svg new file mode 100644 index 0000000000000..07e1a13011a10 --- /dev/null +++ b/src/wp-includes/icons/library/color.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/column.svg b/src/wp-includes/icons/library/column.svg new file mode 100644 index 0000000000000..bd7e1e71e696a --- /dev/null +++ b/src/wp-includes/icons/library/column.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/columns.svg b/src/wp-includes/icons/library/columns.svg new file mode 100644 index 0000000000000..dc376abf5013d --- /dev/null +++ b/src/wp-includes/icons/library/columns.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/comment-author-avatar.svg b/src/wp-includes/icons/library/comment-author-avatar.svg new file mode 100644 index 0000000000000..d26ae18218da4 --- /dev/null +++ b/src/wp-includes/icons/library/comment-author-avatar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/comment-author-name.svg b/src/wp-includes/icons/library/comment-author-name.svg new file mode 100644 index 0000000000000..260be0a635ba0 --- /dev/null +++ b/src/wp-includes/icons/library/comment-author-name.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/wp-includes/icons/library/comment-content.svg b/src/wp-includes/icons/library/comment-content.svg new file mode 100644 index 0000000000000..7094932f8e9cb --- /dev/null +++ b/src/wp-includes/icons/library/comment-content.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/comment-edit-link.svg b/src/wp-includes/icons/library/comment-edit-link.svg new file mode 100644 index 0000000000000..db400e2e871d9 --- /dev/null +++ b/src/wp-includes/icons/library/comment-edit-link.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/comment-reply-link.svg b/src/wp-includes/icons/library/comment-reply-link.svg new file mode 100644 index 0000000000000..49c79270c08a1 --- /dev/null +++ b/src/wp-includes/icons/library/comment-reply-link.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/comment.svg b/src/wp-includes/icons/library/comment.svg new file mode 100644 index 0000000000000..c95cfe7421875 --- /dev/null +++ b/src/wp-includes/icons/library/comment.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/connection.svg b/src/wp-includes/icons/library/connection.svg new file mode 100644 index 0000000000000..2193bd27a5f2c --- /dev/null +++ b/src/wp-includes/icons/library/connection.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/contents.svg b/src/wp-includes/icons/library/contents.svg new file mode 100644 index 0000000000000..c0e26159bef0f --- /dev/null +++ b/src/wp-includes/icons/library/contents.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/copy-small.svg b/src/wp-includes/icons/library/copy-small.svg new file mode 100644 index 0000000000000..40439846218e6 --- /dev/null +++ b/src/wp-includes/icons/library/copy-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/copy.svg b/src/wp-includes/icons/library/copy.svg new file mode 100644 index 0000000000000..8acb3bf068658 --- /dev/null +++ b/src/wp-includes/icons/library/copy.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/corner-all.svg b/src/wp-includes/icons/library/corner-all.svg new file mode 100644 index 0000000000000..455870f0f0127 --- /dev/null +++ b/src/wp-includes/icons/library/corner-all.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/corner-bottom-left.svg b/src/wp-includes/icons/library/corner-bottom-left.svg new file mode 100644 index 0000000000000..73ae5297c8fca --- /dev/null +++ b/src/wp-includes/icons/library/corner-bottom-left.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/wp-includes/icons/library/corner-bottom-right.svg b/src/wp-includes/icons/library/corner-bottom-right.svg new file mode 100644 index 0000000000000..9d8416abc5c8a --- /dev/null +++ b/src/wp-includes/icons/library/corner-bottom-right.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/wp-includes/icons/library/corner-top-left.svg b/src/wp-includes/icons/library/corner-top-left.svg new file mode 100644 index 0000000000000..d1c72c1b9d6c3 --- /dev/null +++ b/src/wp-includes/icons/library/corner-top-left.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/wp-includes/icons/library/corner-top-right.svg b/src/wp-includes/icons/library/corner-top-right.svg new file mode 100644 index 0000000000000..bf806bb899a3c --- /dev/null +++ b/src/wp-includes/icons/library/corner-top-right.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/wp-includes/icons/library/cover.svg b/src/wp-includes/icons/library/cover.svg new file mode 100644 index 0000000000000..d625a018cda7f --- /dev/null +++ b/src/wp-includes/icons/library/cover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/create.svg b/src/wp-includes/icons/library/create.svg new file mode 100644 index 0000000000000..3e96b8596ee47 --- /dev/null +++ b/src/wp-includes/icons/library/create.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/crop.svg b/src/wp-includes/icons/library/crop.svg new file mode 100644 index 0000000000000..b56abed30292b --- /dev/null +++ b/src/wp-includes/icons/library/crop.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/currency-dollar.svg b/src/wp-includes/icons/library/currency-dollar.svg new file mode 100644 index 0000000000000..80089d8d68c35 --- /dev/null +++ b/src/wp-includes/icons/library/currency-dollar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/currency-euro.svg b/src/wp-includes/icons/library/currency-euro.svg new file mode 100644 index 0000000000000..2e57f3726ec9e --- /dev/null +++ b/src/wp-includes/icons/library/currency-euro.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/currency-pound.svg b/src/wp-includes/icons/library/currency-pound.svg new file mode 100644 index 0000000000000..5a86fa25075e9 --- /dev/null +++ b/src/wp-includes/icons/library/currency-pound.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/custom-link.svg b/src/wp-includes/icons/library/custom-link.svg new file mode 100644 index 0000000000000..6294804a2acc9 --- /dev/null +++ b/src/wp-includes/icons/library/custom-link.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/custom-post-type.svg b/src/wp-includes/icons/library/custom-post-type.svg new file mode 100644 index 0000000000000..7c91be9bf21b2 --- /dev/null +++ b/src/wp-includes/icons/library/custom-post-type.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/dashboard.svg b/src/wp-includes/icons/library/dashboard.svg new file mode 100644 index 0000000000000..374d5ba916f7b --- /dev/null +++ b/src/wp-includes/icons/library/dashboard.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/desktop.svg b/src/wp-includes/icons/library/desktop.svg new file mode 100644 index 0000000000000..9d8a699f91834 --- /dev/null +++ b/src/wp-includes/icons/library/desktop.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/details.svg b/src/wp-includes/icons/library/details.svg new file mode 100644 index 0000000000000..cdc6d8cbdf2b3 --- /dev/null +++ b/src/wp-includes/icons/library/details.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/download.svg b/src/wp-includes/icons/library/download.svg new file mode 100644 index 0000000000000..9d3fbe682d25b --- /dev/null +++ b/src/wp-includes/icons/library/download.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/drafts.svg b/src/wp-includes/icons/library/drafts.svg new file mode 100644 index 0000000000000..4cd55eee757b5 --- /dev/null +++ b/src/wp-includes/icons/library/drafts.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/drag-handle.svg b/src/wp-includes/icons/library/drag-handle.svg new file mode 100644 index 0000000000000..e8012fd7721f9 --- /dev/null +++ b/src/wp-includes/icons/library/drag-handle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/drawer-left.svg b/src/wp-includes/icons/library/drawer-left.svg new file mode 100644 index 0000000000000..c0fd465b61f40 --- /dev/null +++ b/src/wp-includes/icons/library/drawer-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/drawer-right.svg b/src/wp-includes/icons/library/drawer-right.svg new file mode 100644 index 0000000000000..7b22105ae5a5d --- /dev/null +++ b/src/wp-includes/icons/library/drawer-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/envelope.svg b/src/wp-includes/icons/library/envelope.svg new file mode 100644 index 0000000000000..f41c0a915ba60 --- /dev/null +++ b/src/wp-includes/icons/library/envelope.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/error.svg b/src/wp-includes/icons/library/error.svg new file mode 100644 index 0000000000000..006d6aec28ca2 --- /dev/null +++ b/src/wp-includes/icons/library/error.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/external.svg b/src/wp-includes/icons/library/external.svg new file mode 100644 index 0000000000000..aa3348828b006 --- /dev/null +++ b/src/wp-includes/icons/library/external.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/file.svg b/src/wp-includes/icons/library/file.svg new file mode 100644 index 0000000000000..0144266c4425e --- /dev/null +++ b/src/wp-includes/icons/library/file.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/filter.svg b/src/wp-includes/icons/library/filter.svg new file mode 100644 index 0000000000000..6e83e036d0856 --- /dev/null +++ b/src/wp-includes/icons/library/filter.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/flip-horizontal.svg b/src/wp-includes/icons/library/flip-horizontal.svg new file mode 100644 index 0000000000000..62464773c0a76 --- /dev/null +++ b/src/wp-includes/icons/library/flip-horizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/flip-vertical.svg b/src/wp-includes/icons/library/flip-vertical.svg new file mode 100644 index 0000000000000..a9ca7edc29bd7 --- /dev/null +++ b/src/wp-includes/icons/library/flip-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/footer.svg b/src/wp-includes/icons/library/footer.svg new file mode 100644 index 0000000000000..e888b893caf61 --- /dev/null +++ b/src/wp-includes/icons/library/footer.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-bold.svg b/src/wp-includes/icons/library/format-bold.svg new file mode 100644 index 0000000000000..89b84e8810fb2 --- /dev/null +++ b/src/wp-includes/icons/library/format-bold.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-capitalize.svg b/src/wp-includes/icons/library/format-capitalize.svg new file mode 100644 index 0000000000000..9dda39c17d68e --- /dev/null +++ b/src/wp-includes/icons/library/format-capitalize.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-indent-rtl.svg b/src/wp-includes/icons/library/format-indent-rtl.svg new file mode 100644 index 0000000000000..c85346d08b5fc --- /dev/null +++ b/src/wp-includes/icons/library/format-indent-rtl.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-indent.svg b/src/wp-includes/icons/library/format-indent.svg new file mode 100644 index 0000000000000..a89e7d313d386 --- /dev/null +++ b/src/wp-includes/icons/library/format-indent.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-italic.svg b/src/wp-includes/icons/library/format-italic.svg new file mode 100644 index 0000000000000..fc2c5380a8d3e --- /dev/null +++ b/src/wp-includes/icons/library/format-italic.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-list-bullets-rtl.svg b/src/wp-includes/icons/library/format-list-bullets-rtl.svg new file mode 100644 index 0000000000000..ecbcd95ee849b --- /dev/null +++ b/src/wp-includes/icons/library/format-list-bullets-rtl.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-list-bullets.svg b/src/wp-includes/icons/library/format-list-bullets.svg new file mode 100644 index 0000000000000..7c855d82938ce --- /dev/null +++ b/src/wp-includes/icons/library/format-list-bullets.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-list-numbered-rtl.svg b/src/wp-includes/icons/library/format-list-numbered-rtl.svg new file mode 100644 index 0000000000000..e976b85248f19 --- /dev/null +++ b/src/wp-includes/icons/library/format-list-numbered-rtl.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-list-numbered.svg b/src/wp-includes/icons/library/format-list-numbered.svg new file mode 100644 index 0000000000000..4febed3ea87a0 --- /dev/null +++ b/src/wp-includes/icons/library/format-list-numbered.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-lowercase.svg b/src/wp-includes/icons/library/format-lowercase.svg new file mode 100644 index 0000000000000..ccb9e2f07a7a4 --- /dev/null +++ b/src/wp-includes/icons/library/format-lowercase.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-ltr.svg b/src/wp-includes/icons/library/format-ltr.svg new file mode 100644 index 0000000000000..efc114919be8d --- /dev/null +++ b/src/wp-includes/icons/library/format-ltr.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-outdent-rtl.svg b/src/wp-includes/icons/library/format-outdent-rtl.svg new file mode 100644 index 0000000000000..c09ce6e45b511 --- /dev/null +++ b/src/wp-includes/icons/library/format-outdent-rtl.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-outdent.svg b/src/wp-includes/icons/library/format-outdent.svg new file mode 100644 index 0000000000000..87a656789531a --- /dev/null +++ b/src/wp-includes/icons/library/format-outdent.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-rtl.svg b/src/wp-includes/icons/library/format-rtl.svg new file mode 100644 index 0000000000000..e2438fb7ca237 --- /dev/null +++ b/src/wp-includes/icons/library/format-rtl.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-strikethrough.svg b/src/wp-includes/icons/library/format-strikethrough.svg new file mode 100644 index 0000000000000..e4b87f5dbe1fe --- /dev/null +++ b/src/wp-includes/icons/library/format-strikethrough.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-underline.svg b/src/wp-includes/icons/library/format-underline.svg new file mode 100644 index 0000000000000..be2f1b5cb4f87 --- /dev/null +++ b/src/wp-includes/icons/library/format-underline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/format-uppercase.svg b/src/wp-includes/icons/library/format-uppercase.svg new file mode 100644 index 0000000000000..6521cb22e029a --- /dev/null +++ b/src/wp-includes/icons/library/format-uppercase.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/full-height.svg b/src/wp-includes/icons/library/full-height.svg new file mode 100644 index 0000000000000..cbe69cfb604a3 --- /dev/null +++ b/src/wp-includes/icons/library/full-height.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/fullscreen.svg b/src/wp-includes/icons/library/fullscreen.svg new file mode 100644 index 0000000000000..18dde7bea3e75 --- /dev/null +++ b/src/wp-includes/icons/library/fullscreen.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/funnel.svg b/src/wp-includes/icons/library/funnel.svg new file mode 100644 index 0000000000000..903a7ec4ab215 --- /dev/null +++ b/src/wp-includes/icons/library/funnel.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/gallery.svg b/src/wp-includes/icons/library/gallery.svg new file mode 100644 index 0000000000000..389a918817fcb --- /dev/null +++ b/src/wp-includes/icons/library/gallery.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/gift.svg b/src/wp-includes/icons/library/gift.svg new file mode 100644 index 0000000000000..39727cb9fa491 --- /dev/null +++ b/src/wp-includes/icons/library/gift.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/globe.svg b/src/wp-includes/icons/library/globe.svg new file mode 100644 index 0000000000000..5c1274db85467 --- /dev/null +++ b/src/wp-includes/icons/library/globe.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/grid.svg b/src/wp-includes/icons/library/grid.svg new file mode 100644 index 0000000000000..62617fcb82680 --- /dev/null +++ b/src/wp-includes/icons/library/grid.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/group.svg b/src/wp-includes/icons/library/group.svg new file mode 100644 index 0000000000000..8f00bd1d043d2 --- /dev/null +++ b/src/wp-includes/icons/library/group.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/handle.svg b/src/wp-includes/icons/library/handle.svg new file mode 100644 index 0000000000000..3dd7cb09a490b --- /dev/null +++ b/src/wp-includes/icons/library/handle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/header.svg b/src/wp-includes/icons/library/header.svg new file mode 100644 index 0000000000000..5d051294f2802 --- /dev/null +++ b/src/wp-includes/icons/library/header.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/heading-level-1.svg b/src/wp-includes/icons/library/heading-level-1.svg new file mode 100644 index 0000000000000..8cfb64f53f8f8 --- /dev/null +++ b/src/wp-includes/icons/library/heading-level-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/heading-level-2.svg b/src/wp-includes/icons/library/heading-level-2.svg new file mode 100644 index 0000000000000..cf38f4d17adef --- /dev/null +++ b/src/wp-includes/icons/library/heading-level-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/heading-level-3.svg b/src/wp-includes/icons/library/heading-level-3.svg new file mode 100644 index 0000000000000..03d52fee98d61 --- /dev/null +++ b/src/wp-includes/icons/library/heading-level-3.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/heading-level-4.svg b/src/wp-includes/icons/library/heading-level-4.svg new file mode 100644 index 0000000000000..556d57faa256c --- /dev/null +++ b/src/wp-includes/icons/library/heading-level-4.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/heading-level-5.svg b/src/wp-includes/icons/library/heading-level-5.svg new file mode 100644 index 0000000000000..6f4858ef0bc5f --- /dev/null +++ b/src/wp-includes/icons/library/heading-level-5.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/heading-level-6.svg b/src/wp-includes/icons/library/heading-level-6.svg new file mode 100644 index 0000000000000..511099d84a27a --- /dev/null +++ b/src/wp-includes/icons/library/heading-level-6.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/heading.svg b/src/wp-includes/icons/library/heading.svg new file mode 100644 index 0000000000000..51f90adaa39c2 --- /dev/null +++ b/src/wp-includes/icons/library/heading.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/help-filled.svg b/src/wp-includes/icons/library/help-filled.svg new file mode 100644 index 0000000000000..9c8cf7e6b5c07 --- /dev/null +++ b/src/wp-includes/icons/library/help-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/help.svg b/src/wp-includes/icons/library/help.svg new file mode 100644 index 0000000000000..ae2167edb7ce5 --- /dev/null +++ b/src/wp-includes/icons/library/help.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/home-button.svg b/src/wp-includes/icons/library/home-button.svg new file mode 100644 index 0000000000000..c9798175aa921 --- /dev/null +++ b/src/wp-includes/icons/library/home-button.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/home.svg b/src/wp-includes/icons/library/home.svg new file mode 100644 index 0000000000000..bedfb6e00f593 --- /dev/null +++ b/src/wp-includes/icons/library/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/html.svg b/src/wp-includes/icons/library/html.svg new file mode 100644 index 0000000000000..da3eafd242cf3 --- /dev/null +++ b/src/wp-includes/icons/library/html.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/image.svg b/src/wp-includes/icons/library/image.svg new file mode 100644 index 0000000000000..e14678e2cf4ab --- /dev/null +++ b/src/wp-includes/icons/library/image.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/inbox.svg b/src/wp-includes/icons/library/inbox.svg new file mode 100644 index 0000000000000..af82f9eb05e2a --- /dev/null +++ b/src/wp-includes/icons/library/inbox.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/info.svg b/src/wp-includes/icons/library/info.svg new file mode 100644 index 0000000000000..9d7afc85fae83 --- /dev/null +++ b/src/wp-includes/icons/library/info.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/insert-after.svg b/src/wp-includes/icons/library/insert-after.svg new file mode 100644 index 0000000000000..6743fe8043803 --- /dev/null +++ b/src/wp-includes/icons/library/insert-after.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/insert-before.svg b/src/wp-includes/icons/library/insert-before.svg new file mode 100644 index 0000000000000..90ceb9c31fb7a --- /dev/null +++ b/src/wp-includes/icons/library/insert-before.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/institution.svg b/src/wp-includes/icons/library/institution.svg new file mode 100644 index 0000000000000..fa5e94b06cf04 --- /dev/null +++ b/src/wp-includes/icons/library/institution.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-bottom.svg b/src/wp-includes/icons/library/justify-bottom.svg new file mode 100644 index 0000000000000..983f354b08d9d --- /dev/null +++ b/src/wp-includes/icons/library/justify-bottom.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-center-vertical.svg b/src/wp-includes/icons/library/justify-center-vertical.svg new file mode 100644 index 0000000000000..09fa620daedc5 --- /dev/null +++ b/src/wp-includes/icons/library/justify-center-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-center.svg b/src/wp-includes/icons/library/justify-center.svg new file mode 100644 index 0000000000000..17eb01f512295 --- /dev/null +++ b/src/wp-includes/icons/library/justify-center.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-left.svg b/src/wp-includes/icons/library/justify-left.svg new file mode 100644 index 0000000000000..f3913733ecf92 --- /dev/null +++ b/src/wp-includes/icons/library/justify-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-right.svg b/src/wp-includes/icons/library/justify-right.svg new file mode 100644 index 0000000000000..6238f51099b5f --- /dev/null +++ b/src/wp-includes/icons/library/justify-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-space-between-vertical.svg b/src/wp-includes/icons/library/justify-space-between-vertical.svg new file mode 100644 index 0000000000000..1fb2a4145c22f --- /dev/null +++ b/src/wp-includes/icons/library/justify-space-between-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-space-between.svg b/src/wp-includes/icons/library/justify-space-between.svg new file mode 100644 index 0000000000000..f562659d010a0 --- /dev/null +++ b/src/wp-includes/icons/library/justify-space-between.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-stretch-vertical.svg b/src/wp-includes/icons/library/justify-stretch-vertical.svg new file mode 100644 index 0000000000000..cff13e239deac --- /dev/null +++ b/src/wp-includes/icons/library/justify-stretch-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-stretch.svg b/src/wp-includes/icons/library/justify-stretch.svg new file mode 100644 index 0000000000000..5e7d892b5b717 --- /dev/null +++ b/src/wp-includes/icons/library/justify-stretch.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/justify-top.svg b/src/wp-includes/icons/library/justify-top.svg new file mode 100644 index 0000000000000..2e0bfacd43dd9 --- /dev/null +++ b/src/wp-includes/icons/library/justify-top.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/key.svg b/src/wp-includes/icons/library/key.svg new file mode 100644 index 0000000000000..b04dde57aa7fa --- /dev/null +++ b/src/wp-includes/icons/library/key.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/keyboard-close.svg b/src/wp-includes/icons/library/keyboard-close.svg new file mode 100644 index 0000000000000..db193d038e347 --- /dev/null +++ b/src/wp-includes/icons/library/keyboard-close.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/keyboard-return.svg b/src/wp-includes/icons/library/keyboard-return.svg new file mode 100644 index 0000000000000..db53403b3db6a --- /dev/null +++ b/src/wp-includes/icons/library/keyboard-return.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/keyboard.svg b/src/wp-includes/icons/library/keyboard.svg new file mode 100644 index 0000000000000..34fcf1a2e5fa4 --- /dev/null +++ b/src/wp-includes/icons/library/keyboard.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/language.svg b/src/wp-includes/icons/library/language.svg new file mode 100644 index 0000000000000..42b3b549824f2 --- /dev/null +++ b/src/wp-includes/icons/library/language.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/layout.svg b/src/wp-includes/icons/library/layout.svg new file mode 100644 index 0000000000000..9179ce8e9b1db --- /dev/null +++ b/src/wp-includes/icons/library/layout.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/level-up.svg b/src/wp-includes/icons/library/level-up.svg new file mode 100644 index 0000000000000..fbd9a5d69c483 --- /dev/null +++ b/src/wp-includes/icons/library/level-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/lifesaver.svg b/src/wp-includes/icons/library/lifesaver.svg new file mode 100644 index 0000000000000..766784ed531bd --- /dev/null +++ b/src/wp-includes/icons/library/lifesaver.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/line-dashed.svg b/src/wp-includes/icons/library/line-dashed.svg new file mode 100644 index 0000000000000..0fff9b3f2bfe5 --- /dev/null +++ b/src/wp-includes/icons/library/line-dashed.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/line-dotted.svg b/src/wp-includes/icons/library/line-dotted.svg new file mode 100644 index 0000000000000..ba9ff4a2b299e --- /dev/null +++ b/src/wp-includes/icons/library/line-dotted.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/line-solid.svg b/src/wp-includes/icons/library/line-solid.svg new file mode 100644 index 0000000000000..95aa7137b5bdb --- /dev/null +++ b/src/wp-includes/icons/library/line-solid.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/link-off.svg b/src/wp-includes/icons/library/link-off.svg new file mode 100644 index 0000000000000..bb22938f6522a --- /dev/null +++ b/src/wp-includes/icons/library/link-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/link.svg b/src/wp-includes/icons/library/link.svg new file mode 100644 index 0000000000000..5be28f494efe5 --- /dev/null +++ b/src/wp-includes/icons/library/link.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/list-item.svg b/src/wp-includes/icons/library/list-item.svg new file mode 100644 index 0000000000000..96f60ae5cf213 --- /dev/null +++ b/src/wp-includes/icons/library/list-item.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/list-view.svg b/src/wp-includes/icons/library/list-view.svg new file mode 100644 index 0000000000000..3df1c41cbffeb --- /dev/null +++ b/src/wp-includes/icons/library/list-view.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/list.svg b/src/wp-includes/icons/library/list.svg new file mode 100644 index 0000000000000..1178564a6b81d --- /dev/null +++ b/src/wp-includes/icons/library/list.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/lock-outline.svg b/src/wp-includes/icons/library/lock-outline.svg new file mode 100644 index 0000000000000..aae2b8e0d25dd --- /dev/null +++ b/src/wp-includes/icons/library/lock-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/lock-small.svg b/src/wp-includes/icons/library/lock-small.svg new file mode 100644 index 0000000000000..68c43b0e94e45 --- /dev/null +++ b/src/wp-includes/icons/library/lock-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/lock.svg b/src/wp-includes/icons/library/lock.svg new file mode 100644 index 0000000000000..4c51bf5efc8a4 --- /dev/null +++ b/src/wp-includes/icons/library/lock.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/login.svg b/src/wp-includes/icons/library/login.svg new file mode 100644 index 0000000000000..220c8635b92cc --- /dev/null +++ b/src/wp-includes/icons/library/login.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/loop.svg b/src/wp-includes/icons/library/loop.svg new file mode 100644 index 0000000000000..eaf69f00a6d41 --- /dev/null +++ b/src/wp-includes/icons/library/loop.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/map-marker.svg b/src/wp-includes/icons/library/map-marker.svg new file mode 100644 index 0000000000000..09102ac0ce2bc --- /dev/null +++ b/src/wp-includes/icons/library/map-marker.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/math.svg b/src/wp-includes/icons/library/math.svg new file mode 100644 index 0000000000000..eeda5f831717e --- /dev/null +++ b/src/wp-includes/icons/library/math.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/media-and-text.svg b/src/wp-includes/icons/library/media-and-text.svg new file mode 100644 index 0000000000000..d63b328cb4abe --- /dev/null +++ b/src/wp-includes/icons/library/media-and-text.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/media.svg b/src/wp-includes/icons/library/media.svg new file mode 100644 index 0000000000000..c529ab8413db1 --- /dev/null +++ b/src/wp-includes/icons/library/media.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/megaphone.svg b/src/wp-includes/icons/library/megaphone.svg new file mode 100644 index 0000000000000..0a76cbd05a5c7 --- /dev/null +++ b/src/wp-includes/icons/library/megaphone.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/menu.svg b/src/wp-includes/icons/library/menu.svg new file mode 100644 index 0000000000000..58c9c4d2701c9 --- /dev/null +++ b/src/wp-includes/icons/library/menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/mobile.svg b/src/wp-includes/icons/library/mobile.svg new file mode 100644 index 0000000000000..90410b38463b2 --- /dev/null +++ b/src/wp-includes/icons/library/mobile.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/more-horizontal.svg b/src/wp-includes/icons/library/more-horizontal.svg new file mode 100644 index 0000000000000..9abb19ec73607 --- /dev/null +++ b/src/wp-includes/icons/library/more-horizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/more-vertical.svg b/src/wp-includes/icons/library/more-vertical.svg new file mode 100644 index 0000000000000..469a873d1f01f --- /dev/null +++ b/src/wp-includes/icons/library/more-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/more.svg b/src/wp-includes/icons/library/more.svg new file mode 100644 index 0000000000000..f1264ebba4fc2 --- /dev/null +++ b/src/wp-includes/icons/library/more.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/move-to.svg b/src/wp-includes/icons/library/move-to.svg new file mode 100644 index 0000000000000..26cf713a06c36 --- /dev/null +++ b/src/wp-includes/icons/library/move-to.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/navigation-overlay.svg b/src/wp-includes/icons/library/navigation-overlay.svg new file mode 100644 index 0000000000000..83425951477b7 --- /dev/null +++ b/src/wp-includes/icons/library/navigation-overlay.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/navigation.svg b/src/wp-includes/icons/library/navigation.svg new file mode 100644 index 0000000000000..9897b55a11927 --- /dev/null +++ b/src/wp-includes/icons/library/navigation.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/next.svg b/src/wp-includes/icons/library/next.svg new file mode 100644 index 0000000000000..c4a9b1b454b38 --- /dev/null +++ b/src/wp-includes/icons/library/next.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/not-allowed.svg b/src/wp-includes/icons/library/not-allowed.svg new file mode 100644 index 0000000000000..4550385ac2e3a --- /dev/null +++ b/src/wp-includes/icons/library/not-allowed.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/not-found.svg b/src/wp-includes/icons/library/not-found.svg new file mode 100644 index 0000000000000..a436d883f5ac7 --- /dev/null +++ b/src/wp-includes/icons/library/not-found.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/offline.svg b/src/wp-includes/icons/library/offline.svg new file mode 100644 index 0000000000000..ddd432987997f --- /dev/null +++ b/src/wp-includes/icons/library/offline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/overlay-text.svg b/src/wp-includes/icons/library/overlay-text.svg new file mode 100644 index 0000000000000..0b15b071b67a6 --- /dev/null +++ b/src/wp-includes/icons/library/overlay-text.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/page-break.svg b/src/wp-includes/icons/library/page-break.svg new file mode 100644 index 0000000000000..0f9dd1f1b7a2f --- /dev/null +++ b/src/wp-includes/icons/library/page-break.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/page.svg b/src/wp-includes/icons/library/page.svg new file mode 100644 index 0000000000000..ce1918e963dd6 --- /dev/null +++ b/src/wp-includes/icons/library/page.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/pages.svg b/src/wp-includes/icons/library/pages.svg new file mode 100644 index 0000000000000..4cfedd8e91f01 --- /dev/null +++ b/src/wp-includes/icons/library/pages.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/wp-includes/icons/library/paragraph.svg b/src/wp-includes/icons/library/paragraph.svg new file mode 100644 index 0000000000000..a5945a65500e6 --- /dev/null +++ b/src/wp-includes/icons/library/paragraph.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/payment.svg b/src/wp-includes/icons/library/payment.svg new file mode 100644 index 0000000000000..305e1e2495e9c --- /dev/null +++ b/src/wp-includes/icons/library/payment.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/pencil.svg b/src/wp-includes/icons/library/pencil.svg new file mode 100644 index 0000000000000..6a6fccc85deed --- /dev/null +++ b/src/wp-includes/icons/library/pencil.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/pending.svg b/src/wp-includes/icons/library/pending.svg new file mode 100644 index 0000000000000..ef3b154b2240f --- /dev/null +++ b/src/wp-includes/icons/library/pending.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/people.svg b/src/wp-includes/icons/library/people.svg new file mode 100644 index 0000000000000..352a6410e30bc --- /dev/null +++ b/src/wp-includes/icons/library/people.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/percent.svg b/src/wp-includes/icons/library/percent.svg new file mode 100644 index 0000000000000..bb1bf2a134d49 --- /dev/null +++ b/src/wp-includes/icons/library/percent.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/pin-small.svg b/src/wp-includes/icons/library/pin-small.svg new file mode 100644 index 0000000000000..25a36f5e6a801 --- /dev/null +++ b/src/wp-includes/icons/library/pin-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/pin.svg b/src/wp-includes/icons/library/pin.svg new file mode 100644 index 0000000000000..a61c2cafad05e --- /dev/null +++ b/src/wp-includes/icons/library/pin.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/plugins.svg b/src/wp-includes/icons/library/plugins.svg new file mode 100644 index 0000000000000..a74ce8910aac1 --- /dev/null +++ b/src/wp-includes/icons/library/plugins.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/plus-circle-filled.svg b/src/wp-includes/icons/library/plus-circle-filled.svg new file mode 100644 index 0000000000000..e46a7e178e589 --- /dev/null +++ b/src/wp-includes/icons/library/plus-circle-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/plus-circle.svg b/src/wp-includes/icons/library/plus-circle.svg new file mode 100644 index 0000000000000..9ab6d1bbd7fee --- /dev/null +++ b/src/wp-includes/icons/library/plus-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/plus.svg b/src/wp-includes/icons/library/plus.svg new file mode 100644 index 0000000000000..09776c79ee92a --- /dev/null +++ b/src/wp-includes/icons/library/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/position-center.svg b/src/wp-includes/icons/library/position-center.svg new file mode 100644 index 0000000000000..ab9a1990373c3 --- /dev/null +++ b/src/wp-includes/icons/library/position-center.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/position-left.svg b/src/wp-includes/icons/library/position-left.svg new file mode 100644 index 0000000000000..a1b96ae2f92f3 --- /dev/null +++ b/src/wp-includes/icons/library/position-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/position-right.svg b/src/wp-includes/icons/library/position-right.svg new file mode 100644 index 0000000000000..1abb237622be8 --- /dev/null +++ b/src/wp-includes/icons/library/position-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-author.svg b/src/wp-includes/icons/library/post-author.svg new file mode 100644 index 0000000000000..acbf5f1383c1c --- /dev/null +++ b/src/wp-includes/icons/library/post-author.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-categories.svg b/src/wp-includes/icons/library/post-categories.svg new file mode 100644 index 0000000000000..22471982de366 --- /dev/null +++ b/src/wp-includes/icons/library/post-categories.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-comments-count.svg b/src/wp-includes/icons/library/post-comments-count.svg new file mode 100644 index 0000000000000..55caa3b60a080 --- /dev/null +++ b/src/wp-includes/icons/library/post-comments-count.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-comments-form.svg b/src/wp-includes/icons/library/post-comments-form.svg new file mode 100644 index 0000000000000..ecbdd4766e127 --- /dev/null +++ b/src/wp-includes/icons/library/post-comments-form.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-comments.svg b/src/wp-includes/icons/library/post-comments.svg new file mode 100644 index 0000000000000..b05d4bf1a167a --- /dev/null +++ b/src/wp-includes/icons/library/post-comments.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-content.svg b/src/wp-includes/icons/library/post-content.svg new file mode 100644 index 0000000000000..82a7c427a11a9 --- /dev/null +++ b/src/wp-includes/icons/library/post-content.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-date.svg b/src/wp-includes/icons/library/post-date.svg new file mode 100644 index 0000000000000..84bc05d2549fa --- /dev/null +++ b/src/wp-includes/icons/library/post-date.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/post-excerpt.svg b/src/wp-includes/icons/library/post-excerpt.svg new file mode 100644 index 0000000000000..8dca8a3ab16f7 --- /dev/null +++ b/src/wp-includes/icons/library/post-excerpt.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-featured-image.svg b/src/wp-includes/icons/library/post-featured-image.svg new file mode 100644 index 0000000000000..d5c88159e5843 --- /dev/null +++ b/src/wp-includes/icons/library/post-featured-image.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-list.svg b/src/wp-includes/icons/library/post-list.svg new file mode 100644 index 0000000000000..008b1dc86a66e --- /dev/null +++ b/src/wp-includes/icons/library/post-list.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post-terms.svg b/src/wp-includes/icons/library/post-terms.svg new file mode 100644 index 0000000000000..1df12e6e31d53 --- /dev/null +++ b/src/wp-includes/icons/library/post-terms.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/post.svg b/src/wp-includes/icons/library/post.svg new file mode 100644 index 0000000000000..be934e242a1cd --- /dev/null +++ b/src/wp-includes/icons/library/post.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/preformatted.svg b/src/wp-includes/icons/library/preformatted.svg new file mode 100644 index 0000000000000..231d6e77a5fcd --- /dev/null +++ b/src/wp-includes/icons/library/preformatted.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/previous.svg b/src/wp-includes/icons/library/previous.svg new file mode 100644 index 0000000000000..ea03926c3aa11 --- /dev/null +++ b/src/wp-includes/icons/library/previous.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/published.svg b/src/wp-includes/icons/library/published.svg new file mode 100644 index 0000000000000..13dfc4bb18164 --- /dev/null +++ b/src/wp-includes/icons/library/published.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/pull-left.svg b/src/wp-includes/icons/library/pull-left.svg new file mode 100644 index 0000000000000..016da89b0afc1 --- /dev/null +++ b/src/wp-includes/icons/library/pull-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/pull-right.svg b/src/wp-includes/icons/library/pull-right.svg new file mode 100644 index 0000000000000..688280c37fbc7 --- /dev/null +++ b/src/wp-includes/icons/library/pull-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/pullquote.svg b/src/wp-includes/icons/library/pullquote.svg new file mode 100644 index 0000000000000..6fe0e1447936b --- /dev/null +++ b/src/wp-includes/icons/library/pullquote.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/query-pagination-next.svg b/src/wp-includes/icons/library/query-pagination-next.svg new file mode 100644 index 0000000000000..8925c33bfd4fb --- /dev/null +++ b/src/wp-includes/icons/library/query-pagination-next.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/query-pagination-numbers.svg b/src/wp-includes/icons/library/query-pagination-numbers.svg new file mode 100644 index 0000000000000..7fdff964d8a86 --- /dev/null +++ b/src/wp-includes/icons/library/query-pagination-numbers.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/query-pagination-previous.svg b/src/wp-includes/icons/library/query-pagination-previous.svg new file mode 100644 index 0000000000000..c8bc7eb8e032d --- /dev/null +++ b/src/wp-includes/icons/library/query-pagination-previous.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/query-pagination.svg b/src/wp-includes/icons/library/query-pagination.svg new file mode 100644 index 0000000000000..6c6cb0cfed672 --- /dev/null +++ b/src/wp-includes/icons/library/query-pagination.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/quote.svg b/src/wp-includes/icons/library/quote.svg new file mode 100644 index 0000000000000..655bd131dfe3f --- /dev/null +++ b/src/wp-includes/icons/library/quote.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/receipt.svg b/src/wp-includes/icons/library/receipt.svg new file mode 100644 index 0000000000000..def9c8118f0fc --- /dev/null +++ b/src/wp-includes/icons/library/receipt.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/redo.svg b/src/wp-includes/icons/library/redo.svg new file mode 100644 index 0000000000000..8adb40ee5d946 --- /dev/null +++ b/src/wp-includes/icons/library/redo.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/remove-bug.svg b/src/wp-includes/icons/library/remove-bug.svg new file mode 100644 index 0000000000000..07fc6c0b05a76 --- /dev/null +++ b/src/wp-includes/icons/library/remove-bug.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/remove-submenu.svg b/src/wp-includes/icons/library/remove-submenu.svg new file mode 100644 index 0000000000000..e57bd6f94bed2 --- /dev/null +++ b/src/wp-includes/icons/library/remove-submenu.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/replace.svg b/src/wp-includes/icons/library/replace.svg new file mode 100644 index 0000000000000..c4629ecaf869d --- /dev/null +++ b/src/wp-includes/icons/library/replace.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/reset.svg b/src/wp-includes/icons/library/reset.svg new file mode 100644 index 0000000000000..660c39b49123c --- /dev/null +++ b/src/wp-includes/icons/library/reset.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/resize-corner-ne.svg b/src/wp-includes/icons/library/resize-corner-ne.svg new file mode 100644 index 0000000000000..764fec3b29bde --- /dev/null +++ b/src/wp-includes/icons/library/resize-corner-ne.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/reusable-block.svg b/src/wp-includes/icons/library/reusable-block.svg new file mode 100644 index 0000000000000..e6879cc660bc4 --- /dev/null +++ b/src/wp-includes/icons/library/reusable-block.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/rotate-left.svg b/src/wp-includes/icons/library/rotate-left.svg new file mode 100644 index 0000000000000..262ab29a96648 --- /dev/null +++ b/src/wp-includes/icons/library/rotate-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/rotate-right.svg b/src/wp-includes/icons/library/rotate-right.svg new file mode 100644 index 0000000000000..deb8cc272a1b3 --- /dev/null +++ b/src/wp-includes/icons/library/rotate-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/row.svg b/src/wp-includes/icons/library/row.svg new file mode 100644 index 0000000000000..1ce7a6a417ac7 --- /dev/null +++ b/src/wp-includes/icons/library/row.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/rss.svg b/src/wp-includes/icons/library/rss.svg new file mode 100644 index 0000000000000..47af92eca26a6 --- /dev/null +++ b/src/wp-includes/icons/library/rss.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/scheduled.svg b/src/wp-includes/icons/library/scheduled.svg new file mode 100644 index 0000000000000..1a1e769092211 --- /dev/null +++ b/src/wp-includes/icons/library/scheduled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/search.svg b/src/wp-includes/icons/library/search.svg new file mode 100644 index 0000000000000..fe24af8e80dec --- /dev/null +++ b/src/wp-includes/icons/library/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/seen.svg b/src/wp-includes/icons/library/seen.svg new file mode 100644 index 0000000000000..b8bf2575dc8a4 --- /dev/null +++ b/src/wp-includes/icons/library/seen.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/send.svg b/src/wp-includes/icons/library/send.svg new file mode 100644 index 0000000000000..31444a297e420 --- /dev/null +++ b/src/wp-includes/icons/library/send.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/separator.svg b/src/wp-includes/icons/library/separator.svg new file mode 100644 index 0000000000000..f2ec17aea2a29 --- /dev/null +++ b/src/wp-includes/icons/library/separator.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/settings.svg b/src/wp-includes/icons/library/settings.svg new file mode 100644 index 0000000000000..a6b1d86540ad9 --- /dev/null +++ b/src/wp-includes/icons/library/settings.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/shadow.svg b/src/wp-includes/icons/library/shadow.svg new file mode 100644 index 0000000000000..41a5c2cac7f09 --- /dev/null +++ b/src/wp-includes/icons/library/shadow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/share.svg b/src/wp-includes/icons/library/share.svg new file mode 100644 index 0000000000000..2ed89feccf56b --- /dev/null +++ b/src/wp-includes/icons/library/share.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/shield.svg b/src/wp-includes/icons/library/shield.svg new file mode 100644 index 0000000000000..33e45e6228de5 --- /dev/null +++ b/src/wp-includes/icons/library/shield.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/shipping.svg b/src/wp-includes/icons/library/shipping.svg new file mode 100644 index 0000000000000..f987d40c9725f --- /dev/null +++ b/src/wp-includes/icons/library/shipping.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/shortcode.svg b/src/wp-includes/icons/library/shortcode.svg new file mode 100644 index 0000000000000..f0e3b412d73f8 --- /dev/null +++ b/src/wp-includes/icons/library/shortcode.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/shuffle.svg b/src/wp-includes/icons/library/shuffle.svg new file mode 100644 index 0000000000000..2683ef13fb50a --- /dev/null +++ b/src/wp-includes/icons/library/shuffle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/sidebar.svg b/src/wp-includes/icons/library/sidebar.svg new file mode 100644 index 0000000000000..15d5880d3fe93 --- /dev/null +++ b/src/wp-includes/icons/library/sidebar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/sides-all.svg b/src/wp-includes/icons/library/sides-all.svg new file mode 100644 index 0000000000000..afbf1775bb9b8 --- /dev/null +++ b/src/wp-includes/icons/library/sides-all.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/sides-axial.svg b/src/wp-includes/icons/library/sides-axial.svg new file mode 100644 index 0000000000000..08f202cfa6d16 --- /dev/null +++ b/src/wp-includes/icons/library/sides-axial.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/sides-bottom.svg b/src/wp-includes/icons/library/sides-bottom.svg new file mode 100644 index 0000000000000..7e477e5d6d7af --- /dev/null +++ b/src/wp-includes/icons/library/sides-bottom.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/sides-horizontal.svg b/src/wp-includes/icons/library/sides-horizontal.svg new file mode 100644 index 0000000000000..df651421e339e --- /dev/null +++ b/src/wp-includes/icons/library/sides-horizontal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/wp-includes/icons/library/sides-left.svg b/src/wp-includes/icons/library/sides-left.svg new file mode 100644 index 0000000000000..c546c042fba39 --- /dev/null +++ b/src/wp-includes/icons/library/sides-left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/sides-right.svg b/src/wp-includes/icons/library/sides-right.svg new file mode 100644 index 0000000000000..689698d85d0dc --- /dev/null +++ b/src/wp-includes/icons/library/sides-right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/sides-top.svg b/src/wp-includes/icons/library/sides-top.svg new file mode 100644 index 0000000000000..a413488ac3fca --- /dev/null +++ b/src/wp-includes/icons/library/sides-top.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/sides-vertical.svg b/src/wp-includes/icons/library/sides-vertical.svg new file mode 100644 index 0000000000000..1e64f408855fb --- /dev/null +++ b/src/wp-includes/icons/library/sides-vertical.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/wp-includes/icons/library/site-logo.svg b/src/wp-includes/icons/library/site-logo.svg new file mode 100644 index 0000000000000..26b6cfb4ce689 --- /dev/null +++ b/src/wp-includes/icons/library/site-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/square.svg b/src/wp-includes/icons/library/square.svg new file mode 100644 index 0000000000000..3b66d51854cb1 --- /dev/null +++ b/src/wp-includes/icons/library/square.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/stack.svg b/src/wp-includes/icons/library/stack.svg new file mode 100644 index 0000000000000..c4d9aef31e5c0 --- /dev/null +++ b/src/wp-includes/icons/library/stack.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/star-empty.svg b/src/wp-includes/icons/library/star-empty.svg new file mode 100644 index 0000000000000..75cd0e122d458 --- /dev/null +++ b/src/wp-includes/icons/library/star-empty.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/star-filled.svg b/src/wp-includes/icons/library/star-filled.svg new file mode 100644 index 0000000000000..2b32a6424776a --- /dev/null +++ b/src/wp-includes/icons/library/star-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/star-half.svg b/src/wp-includes/icons/library/star-half.svg new file mode 100644 index 0000000000000..fe0f1b5ca0b16 --- /dev/null +++ b/src/wp-includes/icons/library/star-half.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/store.svg b/src/wp-includes/icons/library/store.svg new file mode 100644 index 0000000000000..af15718d7f908 --- /dev/null +++ b/src/wp-includes/icons/library/store.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/stretch-full-width.svg b/src/wp-includes/icons/library/stretch-full-width.svg new file mode 100644 index 0000000000000..02a5f5c0cb644 --- /dev/null +++ b/src/wp-includes/icons/library/stretch-full-width.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/stretch-wide.svg b/src/wp-includes/icons/library/stretch-wide.svg new file mode 100644 index 0000000000000..ff3031ef9bd74 --- /dev/null +++ b/src/wp-includes/icons/library/stretch-wide.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/styles.svg b/src/wp-includes/icons/library/styles.svg new file mode 100644 index 0000000000000..377fa2e6bb458 --- /dev/null +++ b/src/wp-includes/icons/library/styles.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/subscript.svg b/src/wp-includes/icons/library/subscript.svg new file mode 100644 index 0000000000000..632317fe7536c --- /dev/null +++ b/src/wp-includes/icons/library/subscript.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/superscript.svg b/src/wp-includes/icons/library/superscript.svg new file mode 100644 index 0000000000000..ca60e0e1133f2 --- /dev/null +++ b/src/wp-includes/icons/library/superscript.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/swatch.svg b/src/wp-includes/icons/library/swatch.svg new file mode 100644 index 0000000000000..af21de80a183b --- /dev/null +++ b/src/wp-includes/icons/library/swatch.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/symbol-filled.svg b/src/wp-includes/icons/library/symbol-filled.svg new file mode 100644 index 0000000000000..608a9e8ee96b2 --- /dev/null +++ b/src/wp-includes/icons/library/symbol-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/symbol.svg b/src/wp-includes/icons/library/symbol.svg new file mode 100644 index 0000000000000..58f92a5cc93c6 --- /dev/null +++ b/src/wp-includes/icons/library/symbol.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/tab.svg b/src/wp-includes/icons/library/tab.svg new file mode 100644 index 0000000000000..a6444a9739efd --- /dev/null +++ b/src/wp-includes/icons/library/tab.svg @@ -0,0 +1 @@ + diff --git a/src/wp-includes/icons/library/table-column-after.svg b/src/wp-includes/icons/library/table-column-after.svg new file mode 100644 index 0000000000000..bfbf79eefb306 --- /dev/null +++ b/src/wp-includes/icons/library/table-column-after.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/table-column-before.svg b/src/wp-includes/icons/library/table-column-before.svg new file mode 100644 index 0000000000000..6966550159ef2 --- /dev/null +++ b/src/wp-includes/icons/library/table-column-before.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/table-column-delete.svg b/src/wp-includes/icons/library/table-column-delete.svg new file mode 100644 index 0000000000000..a23314d76e897 --- /dev/null +++ b/src/wp-includes/icons/library/table-column-delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/table-of-contents.svg b/src/wp-includes/icons/library/table-of-contents.svg new file mode 100644 index 0000000000000..09a6e26ec72b1 --- /dev/null +++ b/src/wp-includes/icons/library/table-of-contents.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/table-row-after.svg b/src/wp-includes/icons/library/table-row-after.svg new file mode 100644 index 0000000000000..f20db5ac4c884 --- /dev/null +++ b/src/wp-includes/icons/library/table-row-after.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/table-row-before.svg b/src/wp-includes/icons/library/table-row-before.svg new file mode 100644 index 0000000000000..ab0c02e9dce58 --- /dev/null +++ b/src/wp-includes/icons/library/table-row-before.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/table-row-delete.svg b/src/wp-includes/icons/library/table-row-delete.svg new file mode 100644 index 0000000000000..110a6a9fb80e8 --- /dev/null +++ b/src/wp-includes/icons/library/table-row-delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/table.svg b/src/wp-includes/icons/library/table.svg new file mode 100644 index 0000000000000..64e387e683d62 --- /dev/null +++ b/src/wp-includes/icons/library/table.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/tablet.svg b/src/wp-includes/icons/library/tablet.svg new file mode 100644 index 0000000000000..fa36e90de69cd --- /dev/null +++ b/src/wp-includes/icons/library/tablet.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/tabs-menu-item.svg b/src/wp-includes/icons/library/tabs-menu-item.svg new file mode 100644 index 0000000000000..2e8102d5d7f9b --- /dev/null +++ b/src/wp-includes/icons/library/tabs-menu-item.svg @@ -0,0 +1 @@ + diff --git a/src/wp-includes/icons/library/tabs-menu.svg b/src/wp-includes/icons/library/tabs-menu.svg new file mode 100644 index 0000000000000..d42453416b532 --- /dev/null +++ b/src/wp-includes/icons/library/tabs-menu.svg @@ -0,0 +1 @@ + diff --git a/src/wp-includes/icons/library/tabs.svg b/src/wp-includes/icons/library/tabs.svg new file mode 100644 index 0000000000000..9740dca50ff48 --- /dev/null +++ b/src/wp-includes/icons/library/tabs.svg @@ -0,0 +1 @@ + diff --git a/src/wp-includes/icons/library/tag.svg b/src/wp-includes/icons/library/tag.svg new file mode 100644 index 0000000000000..a2a52b7541ed8 --- /dev/null +++ b/src/wp-includes/icons/library/tag.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/term-count.svg b/src/wp-includes/icons/library/term-count.svg new file mode 100644 index 0000000000000..8b333407a02ef --- /dev/null +++ b/src/wp-includes/icons/library/term-count.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/term-description.svg b/src/wp-includes/icons/library/term-description.svg new file mode 100644 index 0000000000000..5a00b07073134 --- /dev/null +++ b/src/wp-includes/icons/library/term-description.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/term-name.svg b/src/wp-includes/icons/library/term-name.svg new file mode 100644 index 0000000000000..c4135c2511de2 --- /dev/null +++ b/src/wp-includes/icons/library/term-name.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/wp-includes/icons/library/text-color.svg b/src/wp-includes/icons/library/text-color.svg new file mode 100644 index 0000000000000..a6096517801ad --- /dev/null +++ b/src/wp-includes/icons/library/text-color.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/text-horizontal.svg b/src/wp-includes/icons/library/text-horizontal.svg new file mode 100644 index 0000000000000..faf6150751bba --- /dev/null +++ b/src/wp-includes/icons/library/text-horizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/text-vertical.svg b/src/wp-includes/icons/library/text-vertical.svg new file mode 100644 index 0000000000000..64ec893f7f0f2 --- /dev/null +++ b/src/wp-includes/icons/library/text-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/thumbs-down.svg b/src/wp-includes/icons/library/thumbs-down.svg new file mode 100644 index 0000000000000..72c96f5b5693e --- /dev/null +++ b/src/wp-includes/icons/library/thumbs-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/thumbs-up.svg b/src/wp-includes/icons/library/thumbs-up.svg new file mode 100644 index 0000000000000..79fb58752a32a --- /dev/null +++ b/src/wp-includes/icons/library/thumbs-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/time-to-read.svg b/src/wp-includes/icons/library/time-to-read.svg new file mode 100644 index 0000000000000..fd368c5e4fc80 --- /dev/null +++ b/src/wp-includes/icons/library/time-to-read.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/tip.svg b/src/wp-includes/icons/library/tip.svg new file mode 100644 index 0000000000000..212885ca47e50 --- /dev/null +++ b/src/wp-includes/icons/library/tip.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/title.svg b/src/wp-includes/icons/library/title.svg new file mode 100644 index 0000000000000..28e8fa6921378 --- /dev/null +++ b/src/wp-includes/icons/library/title.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/tool.svg b/src/wp-includes/icons/library/tool.svg new file mode 100644 index 0000000000000..1c9cc50018fcf --- /dev/null +++ b/src/wp-includes/icons/library/tool.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/trash.svg b/src/wp-includes/icons/library/trash.svg new file mode 100644 index 0000000000000..fddfcfeb44883 --- /dev/null +++ b/src/wp-includes/icons/library/trash.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/trending-down.svg b/src/wp-includes/icons/library/trending-down.svg new file mode 100644 index 0000000000000..66f297ade96fc --- /dev/null +++ b/src/wp-includes/icons/library/trending-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/trending-up.svg b/src/wp-includes/icons/library/trending-up.svg new file mode 100644 index 0000000000000..b7644d8f2b52f --- /dev/null +++ b/src/wp-includes/icons/library/trending-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/typography.svg b/src/wp-includes/icons/library/typography.svg new file mode 100644 index 0000000000000..c81ee1fad6551 --- /dev/null +++ b/src/wp-includes/icons/library/typography.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/undo.svg b/src/wp-includes/icons/library/undo.svg new file mode 100644 index 0000000000000..2a66cab0267f1 --- /dev/null +++ b/src/wp-includes/icons/library/undo.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/ungroup.svg b/src/wp-includes/icons/library/ungroup.svg new file mode 100644 index 0000000000000..9e8339598f228 --- /dev/null +++ b/src/wp-includes/icons/library/ungroup.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/unlock.svg b/src/wp-includes/icons/library/unlock.svg new file mode 100644 index 0000000000000..59785ed29f86d --- /dev/null +++ b/src/wp-includes/icons/library/unlock.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/unseen.svg b/src/wp-includes/icons/library/unseen.svg new file mode 100644 index 0000000000000..661725a3048de --- /dev/null +++ b/src/wp-includes/icons/library/unseen.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/update.svg b/src/wp-includes/icons/library/update.svg new file mode 100644 index 0000000000000..e69e11c4e2a1f --- /dev/null +++ b/src/wp-includes/icons/library/update.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/upload.svg b/src/wp-includes/icons/library/upload.svg new file mode 100644 index 0000000000000..27578edddddc3 --- /dev/null +++ b/src/wp-includes/icons/library/upload.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/verse.svg b/src/wp-includes/icons/library/verse.svg new file mode 100644 index 0000000000000..3ad231a950a52 --- /dev/null +++ b/src/wp-includes/icons/library/verse.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/video.svg b/src/wp-includes/icons/library/video.svg new file mode 100644 index 0000000000000..4b80f689b0efb --- /dev/null +++ b/src/wp-includes/icons/library/video.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/widget.svg b/src/wp-includes/icons/library/widget.svg new file mode 100644 index 0000000000000..987e201641fef --- /dev/null +++ b/src/wp-includes/icons/library/widget.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/word-count.svg b/src/wp-includes/icons/library/word-count.svg new file mode 100644 index 0000000000000..0d1dfd33f82c8 --- /dev/null +++ b/src/wp-includes/icons/library/word-count.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/library/wordpress.svg b/src/wp-includes/icons/library/wordpress.svg new file mode 100644 index 0000000000000..56be7255c7482 --- /dev/null +++ b/src/wp-includes/icons/library/wordpress.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/wp-includes/icons/manifest.php b/src/wp-includes/icons/manifest.php new file mode 100644 index 0000000000000..b15ff4b5fd9f0 --- /dev/null +++ b/src/wp-includes/icons/manifest.php @@ -0,0 +1,360 @@ + array( + 'label' => _x( 'Arrow Down Left', 'icon label' ), + 'filePath' => 'library/arrow-down-left.svg', + ), + 'arrow-down-right' => array( + 'label' => _x( 'Arrow Down Right', 'icon label' ), + 'filePath' => 'library/arrow-down-right.svg', + ), + 'arrow-down' => array( + 'label' => _x( 'Arrow Down', 'icon label' ), + 'filePath' => 'library/arrow-down.svg', + ), + 'arrow-left' => array( + 'label' => _x( 'Arrow Left', 'icon label' ), + 'filePath' => 'library/arrow-left.svg', + ), + 'arrow-right' => array( + 'label' => _x( 'Arrow Right', 'icon label' ), + 'filePath' => 'library/arrow-right.svg', + ), + 'arrow-up-left' => array( + 'label' => _x( 'Arrow Up Left', 'icon label' ), + 'filePath' => 'library/arrow-up-left.svg', + ), + 'arrow-up-right' => array( + 'label' => _x( 'Arrow Up Right', 'icon label' ), + 'filePath' => 'library/arrow-up-right.svg', + ), + 'arrow-up' => array( + 'label' => _x( 'Arrow Up', 'icon label' ), + 'filePath' => 'library/arrow-up.svg', + ), + 'at-symbol' => array( + 'label' => _x( 'At Symbol (@)', 'icon label' ), + 'filePath' => 'library/at-symbol.svg', + ), + 'audio' => array( + 'label' => _x( 'Audio', 'icon label' ), + 'filePath' => 'library/audio.svg', + ), + 'bell' => array( + 'label' => _x( 'Bell', 'icon label' ), + 'filePath' => 'library/bell.svg', + ), + 'block-default' => array( + 'label' => _x( 'Block Default', 'icon label' ), + 'filePath' => 'library/block-default.svg', + ), + 'block-meta' => array( + 'label' => _x( 'Block Meta', 'icon label' ), + 'filePath' => 'library/block-meta.svg', + ), + 'block-table' => array( + 'label' => _x( 'Block Table', 'icon label' ), + 'filePath' => 'library/block-table.svg', + ), + 'calendar' => array( + 'label' => _x( 'Calendar', 'icon label' ), + 'filePath' => 'library/calendar.svg', + ), + 'capture-photo' => array( + 'label' => _x( 'Capture Photo', 'icon label' ), + 'filePath' => 'library/capture-photo.svg', + ), + 'capture-video' => array( + 'label' => _x( 'Capture Video', 'icon label' ), + 'filePath' => 'library/capture-video.svg', + ), + 'cart' => array( + 'label' => _x( 'Cart', 'icon label' ), + 'filePath' => 'library/cart.svg', + ), + 'category' => array( + 'label' => _x( 'Category', 'icon label' ), + 'filePath' => 'library/category.svg', + ), + 'caution' => array( + 'label' => _x( 'Caution', 'icon label' ), + 'filePath' => 'library/caution.svg', + ), + 'chart-bar' => array( + 'label' => _x( 'Chart Bar', 'icon label' ), + 'filePath' => 'library/chart-bar.svg', + ), + 'check' => array( + 'label' => _x( 'Check', 'icon label' ), + 'filePath' => 'library/check.svg', + ), + 'chevron-down' => array( + 'label' => _x( 'Chevron Down', 'icon label' ), + 'filePath' => 'library/chevron-down.svg', + ), + 'chevron-down-small' => array( + 'label' => _x( 'Chevron Down Small', 'icon label' ), + 'filePath' => 'library/chevron-down-small.svg', + ), + 'chevron-left' => array( + 'label' => _x( 'Chevron Left', 'icon label' ), + 'filePath' => 'library/chevron-left.svg', + ), + 'chevron-left-small' => array( + 'label' => _x( 'Chevron Left Small', 'icon label' ), + 'filePath' => 'library/chevron-left-small.svg', + ), + 'chevron-right' => array( + 'label' => _x( 'Chevron Right', 'icon label' ), + 'filePath' => 'library/chevron-right.svg', + ), + 'chevron-right-small' => array( + 'label' => _x( 'Chevron Right Small', 'icon label' ), + 'filePath' => 'library/chevron-right-small.svg', + ), + 'chevron-up' => array( + 'label' => _x( 'Chevron Up', 'icon label' ), + 'filePath' => 'library/chevron-up.svg', + ), + 'chevron-up-down' => array( + 'label' => _x( 'Chevron Up Down', 'icon label' ), + 'filePath' => 'library/chevron-up-down.svg', + ), + 'chevron-up-small' => array( + 'label' => _x( 'Chevron Up Small', 'icon label' ), + 'filePath' => 'library/chevron-up-small.svg', + ), + 'comment' => array( + 'label' => _x( 'Comment', 'icon label' ), + 'filePath' => 'library/comment.svg', + ), + 'cover' => array( + 'label' => _x( 'Cover', 'icon label' ), + 'filePath' => 'library/cover.svg', + ), + 'create' => array( + 'label' => _x( 'Create', 'icon label' ), + 'filePath' => 'library/create.svg', + ), + 'desktop' => array( + 'label' => _x( 'Desktop', 'icon label' ), + 'filePath' => 'library/desktop.svg', + ), + 'download' => array( + 'label' => _x( 'Download', 'icon label' ), + 'filePath' => 'library/download.svg', + ), + 'drawer-left' => array( + 'label' => _x( 'Drawer Left', 'icon label' ), + 'filePath' => 'library/drawer-left.svg', + ), + 'drawer-right' => array( + 'label' => _x( 'Drawer Right', 'icon label' ), + 'filePath' => 'library/drawer-right.svg', + ), + 'envelope' => array( + 'label' => _x( 'Envelope', 'icon label' ), + 'filePath' => 'library/envelope.svg', + ), + 'error' => array( + 'label' => _x( 'Error', 'icon label' ), + 'filePath' => 'library/error.svg', + ), + 'external' => array( + 'label' => _x( 'External', 'icon label' ), + 'filePath' => 'library/external.svg', + ), + 'file' => array( + 'label' => _x( 'File', 'icon label' ), + 'filePath' => 'library/file.svg', + ), + 'gallery' => array( + 'label' => _x( 'Gallery', 'icon label' ), + 'filePath' => 'library/gallery.svg', + ), + 'group' => array( + 'label' => _x( 'Group', 'icon label' ), + 'filePath' => 'library/group.svg', + ), + 'heading' => array( + 'label' => _x( 'Heading', 'icon label' ), + 'filePath' => 'library/heading.svg', + ), + 'help' => array( + 'label' => _x( 'Help', 'icon label' ), + 'filePath' => 'library/help.svg', + ), + 'home' => array( + 'label' => _x( 'Home', 'icon label' ), + 'filePath' => 'library/home.svg', + ), + 'image' => array( + 'label' => _x( 'Image', 'icon label' ), + 'filePath' => 'library/image.svg', + ), + 'info' => array( + 'label' => _x( 'Info', 'icon label' ), + 'filePath' => 'library/info.svg', + ), + 'key' => array( + 'label' => _x( 'Key', 'icon label' ), + 'filePath' => 'library/key.svg', + ), + 'language' => array( + 'label' => _x( 'Language', 'icon label' ), + 'filePath' => 'library/language.svg', + ), + 'map-marker' => array( + 'label' => _x( 'Map Marker', 'icon label' ), + 'filePath' => 'library/map-marker.svg', + ), + 'menu' => array( + 'label' => _x( 'Menu', 'icon label' ), + 'filePath' => 'library/menu.svg', + ), + 'mobile' => array( + 'label' => _x( 'Mobile', 'icon label' ), + 'filePath' => 'library/mobile.svg', + ), + 'more-horizontal' => array( + 'label' => _x( 'More Horizontal', 'icon label' ), + 'filePath' => 'library/more-horizontal.svg', + ), + 'more-vertical' => array( + 'label' => _x( 'More Vertical', 'icon label' ), + 'filePath' => 'library/more-vertical.svg', + ), + 'next' => array( + 'label' => _x( 'Next', 'icon label' ), + 'filePath' => 'library/next.svg', + ), + 'paragraph' => array( + 'label' => _x( 'Paragraph', 'icon label' ), + 'filePath' => 'library/paragraph.svg', + ), + 'payment' => array( + 'label' => _x( 'Payment', 'icon label' ), + 'filePath' => 'library/payment.svg', + ), + 'pencil' => array( + 'label' => _x( 'Pencil', 'icon label' ), + 'filePath' => 'library/pencil.svg', + ), + 'people' => array( + 'label' => _x( 'People', 'icon label' ), + 'filePath' => 'library/people.svg', + ), + 'plus' => array( + 'label' => _x( 'Plus', 'icon label' ), + 'filePath' => 'library/plus.svg', + ), + 'plus-circle' => array( + 'label' => _x( 'Plus Circle', 'icon label' ), + 'filePath' => 'library/plus-circle.svg', + ), + 'previous' => array( + 'label' => _x( 'Previous', 'icon label' ), + 'filePath' => 'library/previous.svg', + ), + 'published' => array( + 'label' => _x( 'Published', 'icon label' ), + 'filePath' => 'library/published.svg', + ), + 'quote' => array( + 'label' => _x( 'Quote', 'icon label' ), + 'filePath' => 'library/quote.svg', + ), + 'receipt' => array( + 'label' => _x( 'Receipt', 'icon label' ), + 'filePath' => 'library/receipt.svg', + ), + 'rss' => array( + 'label' => _x( 'RSS', 'icon label' ), + 'filePath' => 'library/rss.svg', + ), + 'scheduled' => array( + 'label' => _x( 'Scheduled', 'icon label' ), + 'filePath' => 'library/scheduled.svg', + ), + 'search' => array( + 'label' => _x( 'Search', 'icon label' ), + 'filePath' => 'library/search.svg', + ), + 'settings' => array( + 'label' => _x( 'Settings', 'icon label' ), + 'filePath' => 'library/settings.svg', + ), + 'shadow' => array( + 'label' => _x( 'Shadow', 'icon label' ), + 'filePath' => 'library/shadow.svg', + ), + 'share' => array( + 'label' => _x( 'Share', 'icon label' ), + 'filePath' => 'library/share.svg', + ), + 'shield' => array( + 'label' => _x( 'Shield', 'icon label' ), + 'filePath' => 'library/shield.svg', + ), + 'shuffle' => array( + 'label' => _x( 'Shuffle', 'icon label' ), + 'filePath' => 'library/shuffle.svg', + ), + 'star-empty' => array( + 'label' => _x( 'Star Empty', 'icon label' ), + 'filePath' => 'library/star-empty.svg', + ), + 'star-filled' => array( + 'label' => _x( 'Star Filled', 'icon label' ), + 'filePath' => 'library/star-filled.svg', + ), + 'star-half' => array( + 'label' => _x( 'Star Half', 'icon label' ), + 'filePath' => 'library/star-half.svg', + ), + 'store' => array( + 'label' => _x( 'Store', 'icon label' ), + 'filePath' => 'library/store.svg', + ), + 'styles' => array( + 'label' => _x( 'Styles', 'icon label' ), + 'filePath' => 'library/styles.svg', + ), + 'symbol' => array( + 'label' => _x( 'Symbol', 'icon label' ), + 'filePath' => 'library/symbol.svg', + ), + 'symbol-filled' => array( + 'label' => _x( 'Symbol Filled', 'icon label' ), + 'filePath' => 'library/symbol-filled.svg', + ), + 'table' => array( + 'label' => _x( 'Table', 'icon label' ), + 'filePath' => 'library/table.svg', + ), + 'tablet' => array( + 'label' => _x( 'Tablet', 'icon label' ), + 'filePath' => 'library/tablet.svg', + ), + 'tag' => array( + 'label' => _x( 'Tag', 'icon label' ), + 'filePath' => 'library/tag.svg', + ), + 'tip' => array( + 'label' => _x( 'Tip', 'icon label' ), + 'filePath' => 'library/tip.svg', + ), + 'upload' => array( + 'label' => _x( 'Upload', 'icon label' ), + 'filePath' => 'library/upload.svg', + ), + 'verse' => array( + 'label' => _x( 'Verse', 'icon label' ), + 'filePath' => 'library/verse.svg', + ), +); diff --git a/src/wp-includes/theme.json b/src/wp-includes/theme.json new file mode 100644 index 0000000000000..fb26d36518841 --- /dev/null +++ b/src/wp-includes/theme.json @@ -0,0 +1,420 @@ +{ + "$schema": "https://schemas.wp.org/trunk/theme.json", + "version": 3, + "settings": { + "appearanceTools": false, + "useRootPaddingAwareAlignments": false, + "border": { + "color": false, + "radius": false, + "style": false, + "width": false + }, + "color": { + "background": true, + "button": true, + "caption": true, + "custom": true, + "customDuotone": true, + "customGradient": true, + "defaultDuotone": true, + "defaultGradients": true, + "defaultPalette": true, + "duotone": [ + { + "name": "Dark grayscale", + "colors": [ "#000000", "#7f7f7f" ], + "slug": "dark-grayscale" + }, + { + "name": "Grayscale", + "colors": [ "#000000", "#ffffff" ], + "slug": "grayscale" + }, + { + "name": "Purple and yellow", + "colors": [ "#8c00b7", "#fcff41" ], + "slug": "purple-yellow" + }, + { + "name": "Blue and red", + "colors": [ "#000097", "#ff4747" ], + "slug": "blue-red" + }, + { + "name": "Midnight", + "colors": [ "#000000", "#00a5ff" ], + "slug": "midnight" + }, + { + "name": "Magenta and yellow", + "colors": [ "#c7005a", "#fff278" ], + "slug": "magenta-yellow" + }, + { + "name": "Purple and green", + "colors": [ "#a60072", "#67ff66" ], + "slug": "purple-green" + }, + { + "name": "Blue and orange", + "colors": [ "#1900d8", "#ffa96b" ], + "slug": "blue-orange" + } + ], + "gradients": [ + { + "name": "Vivid cyan blue to vivid purple", + "gradient": "linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%)", + "slug": "vivid-cyan-blue-to-vivid-purple" + }, + { + "name": "Light green cyan to vivid green cyan", + "gradient": "linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)", + "slug": "light-green-cyan-to-vivid-green-cyan" + }, + { + "name": "Luminous vivid amber to luminous vivid orange", + "gradient": "linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%)", + "slug": "luminous-vivid-amber-to-luminous-vivid-orange" + }, + { + "name": "Luminous vivid orange to vivid red", + "gradient": "linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%)", + "slug": "luminous-vivid-orange-to-vivid-red" + }, + { + "name": "Very light gray to cyan bluish gray", + "gradient": "linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%)", + "slug": "very-light-gray-to-cyan-bluish-gray" + }, + { + "name": "Cool to warm spectrum", + "gradient": "linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%)", + "slug": "cool-to-warm-spectrum" + }, + { + "name": "Blush light purple", + "gradient": "linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%)", + "slug": "blush-light-purple" + }, + { + "name": "Blush bordeaux", + "gradient": "linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%)", + "slug": "blush-bordeaux" + }, + { + "name": "Luminous dusk", + "gradient": "linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%)", + "slug": "luminous-dusk" + }, + { + "name": "Pale ocean", + "gradient": "linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%)", + "slug": "pale-ocean" + }, + { + "name": "Electric grass", + "gradient": "linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%)", + "slug": "electric-grass" + }, + { + "name": "Midnight", + "gradient": "linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%)", + "slug": "midnight" + } + ], + "heading": true, + "link": false, + "palette": [ + { + "name": "Black", + "slug": "black", + "color": "#000000" + }, + { + "name": "Cyan bluish gray", + "slug": "cyan-bluish-gray", + "color": "#abb8c3" + }, + { + "name": "White", + "slug": "white", + "color": "#ffffff" + }, + { + "name": "Pale pink", + "slug": "pale-pink", + "color": "#f78da7" + }, + { + "name": "Vivid red", + "slug": "vivid-red", + "color": "#cf2e2e" + }, + { + "name": "Luminous vivid orange", + "slug": "luminous-vivid-orange", + "color": "#ff6900" + }, + { + "name": "Luminous vivid amber", + "slug": "luminous-vivid-amber", + "color": "#fcb900" + }, + { + "name": "Light green cyan", + "slug": "light-green-cyan", + "color": "#7bdcb5" + }, + { + "name": "Vivid green cyan", + "slug": "vivid-green-cyan", + "color": "#00d084" + }, + { + "name": "Pale cyan blue", + "slug": "pale-cyan-blue", + "color": "#8ed1fc" + }, + { + "name": "Vivid cyan blue", + "slug": "vivid-cyan-blue", + "color": "#0693e3" + }, + { + "name": "Vivid purple", + "slug": "vivid-purple", + "color": "#9b51e0" + } + ], + "text": true + }, + "dimensions": { + "defaultAspectRatios": true, + "aspectRatios": [ + { + "name": "Square - 1:1", + "slug": "square", + "ratio": "1" + }, + { + "name": "Standard - 4:3", + "slug": "4-3", + "ratio": "4/3" + }, + { + "name": "Portrait - 3:4", + "slug": "3-4", + "ratio": "3/4" + }, + { + "name": "Classic - 3:2", + "slug": "3-2", + "ratio": "3/2" + }, + { + "name": "Classic Portrait - 2:3", + "slug": "2-3", + "ratio": "2/3" + }, + { + "name": "Wide - 16:9", + "slug": "16-9", + "ratio": "16/9" + }, + { + "name": "Tall - 9:16", + "slug": "9-16", + "ratio": "9/16" + } + ] + }, + "shadow": { + "defaultPresets": true, + "presets": [ + { + "name": "Natural", + "slug": "natural", + "shadow": "6px 6px 9px rgba(0, 0, 0, 0.2)" + }, + { + "name": "Deep", + "slug": "deep", + "shadow": "12px 12px 50px rgba(0, 0, 0, 0.4)" + }, + { + "name": "Sharp", + "slug": "sharp", + "shadow": "6px 6px 0px rgba(0, 0, 0, 0.2)" + }, + { + "name": "Outlined", + "slug": "outlined", + "shadow": "6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0)" + }, + { + "name": "Crisp", + "slug": "crisp", + "shadow": "6px 6px 0px rgb(0, 0, 0)" + } + ] + }, + "spacing": { + "blockGap": null, + "margin": false, + "padding": false, + "customSpacingSize": true, + "defaultSpacingSizes": true, + "units": [ "px", "em", "rem", "vh", "vw", "%" ], + "spacingScale": { + "operator": "*", + "increment": 1.5, + "steps": 7, + "mediumStep": 1.5, + "unit": "rem" + } + }, + "typography": { + "customFontSize": true, + "defaultFontSizes": true, + "dropCap": true, + "fontSizes": [ + { + "name": "Small", + "slug": "small", + "size": "13px" + }, + { + "name": "Medium", + "slug": "medium", + "size": "20px" + }, + { + "name": "Large", + "slug": "large", + "size": "36px" + }, + { + "name": "Extra Large", + "slug": "x-large", + "size": "42px" + } + ], + "fontStyle": true, + "fontWeight": true, + "letterSpacing": true, + "lineHeight": false, + "textAlign": true, + "textColumns": false, + "textDecoration": true, + "textIndent": "subsequent", + "textTransform": true, + "writingMode": false + }, + "blocks": { + "core/button": { + "border": { + "radius": true + } + }, + "core/image": { + "lightbox": { + "allowEditing": true + } + }, + "core/icon": { + "dimensions": { + "width": true + } + }, + "core/pullquote": { + "border": { + "color": true, + "radius": true, + "style": true, + "width": true + } + } + } + }, + "styles": { + "blocks": { + "core/button": { + "variations": { + "outline": { + "border": { + "width": "2px", + "style": "solid", + "color": "currentColor" + }, + "color": { + "text": "currentColor", + "gradient": "transparent none" + }, + "spacing": { + "padding": { + "top": "0.667em", + "right": "1.33em", + "bottom": "0.667em", + "left": "1.33em" + } + } + } + } + }, + "core/icon": { + "dimensions": { + "width": "24px" + } + }, + "core/site-logo": { + "variations": { + "rounded": { + "border": { + "radius": "9999px" + } + } + } + } + }, + "elements": { + "button": { + "color": { + "text": "#fff", + "background": "#32373c" + }, + "spacing": { + "padding": { + "top": "calc(0.667em + 2px)", + "right": "calc(1.333em + 2px)", + "bottom": "calc(0.667em + 2px)", + "left": "calc(1.333em + 2px)" + } + }, + "typography": { + "fontSize": "inherit", + "fontFamily": "inherit", + "fontStyle": "inherit", + "fontWeight": "inherit", + "letterSpacing": "inherit", + "textTransform": "inherit", + "lineHeight": "inherit", + "textDecoration": "none" + }, + "border": { + "width": "0" + } + } + }, + "spacing": { + "blockGap": "24px", + "padding": { + "top": "0px", + "right": "0px", + "bottom": "0px", + "left": "0px" + } + } + } +} diff --git a/tests/e2e/specs/edit-posts.test.js b/tests/e2e/specs/edit-posts.test.js index 9b8cd37c60e50..0e2eb3687f778 100644 --- a/tests/e2e/specs/edit-posts.test.js +++ b/tests/e2e/specs/edit-posts.test.js @@ -53,7 +53,7 @@ test.describe( 'Edit Posts', () => { await expect( listTable ).toBeVisible(); // Click the post title (edit) link - await listTable.getByRole( 'link', { name: title, exact: true } ).click(); + await listTable.getByRole( 'link', { name: `“${ title }” (Edit)` } ).click(); // Wait for the editor iframe to load, and switch to it as the active content frame. await page @@ -84,7 +84,7 @@ test.describe( 'Edit Posts', () => { await expect( listTable ).toBeVisible(); // // Focus on the post title link. - await listTable.getByRole( 'link', { name: title, exact: true } ).focus(); + await listTable.getByRole( 'link', { name: `“${ title }” (Edit)` } ).focus(); // Tab to the Quick Edit button and press Enter to quick edit. await pageUtils.pressKeys( 'Tab', { times: 2 } ) @@ -122,7 +122,7 @@ test.describe( 'Edit Posts', () => { await expect( listTable ).toBeVisible(); // Focus on the post title link. - await listTable.getByRole( 'link', { name: title, exact: true } ).focus(); + await listTable.getByRole( 'link', { name: `“${ title }” (Edit)` } ).focus(); // Tab to the Trash button and press Enter to delete the post. await pageUtils.pressKeys( 'Tab', { times: 3 } ) diff --git a/tests/e2e/specs/empty-trash-restore-trashed-posts.test.js b/tests/e2e/specs/empty-trash-restore-trashed-posts.test.js index 5f71ff2e415c5..d970ca09b1c90 100644 --- a/tests/e2e/specs/empty-trash-restore-trashed-posts.test.js +++ b/tests/e2e/specs/empty-trash-restore-trashed-posts.test.js @@ -20,7 +20,7 @@ test.describe( 'Empty Trash', () => { await expect( listTable ).toBeVisible(); // Move post to trash - await listTable.getByRole( 'link', { name: POST_TITLE, exact: true } ).hover(); + await listTable.getByRole( 'link', { name: `“${ POST_TITLE }” (Edit)` } ).hover(); await listTable.getByRole( 'link', { name: `Move “${POST_TITLE}” to the Trash` } ).click(); // Empty trash @@ -40,7 +40,7 @@ test.describe( 'Empty Trash', () => { await expect( listTable ).toBeVisible(); // Move post to trash - await listTable.getByRole( 'link', { name: POST_TITLE, exact: true } ).hover(); + await listTable.getByRole( 'link', { name: `“${ POST_TITLE }” (Edit)` } ).hover(); await listTable.getByRole( 'link', { name: `Move “${POST_TITLE}” to the Trash` } ).click(); await page.getByRole( 'link', { name: 'Trash' } ).click(); diff --git a/tests/performance/log-results.js b/tests/performance/log-results.js index a3ef4003fab6c..f8214b68d4eb3 100644 --- a/tests/performance/log-results.js +++ b/tests/performance/log-results.js @@ -10,6 +10,7 @@ /** * External dependencies. */ +const https = require( 'https' ); const [ token, branch, hash, baseHash, date, host ] = process.argv.slice( 2 ); const { median, parseFile, accumulateValues } = require( './utils' ); @@ -81,40 +82,40 @@ for ( const { title, results } of afterStats ) { } } -const data = JSON.stringify( { - branch, - hash, - baseHash, - timestamp: date, - metrics: metrics, - baseMetrics: baseMetrics, +const data = new TextEncoder().encode( + JSON.stringify( { + branch, + hash, + baseHash, + timestamp: date, + metrics: metrics, + baseMetrics: baseMetrics, + } ) +); + +const options = { + hostname: host, + port: 443, + path: '/api/log?token=' + token, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': data.length, + }, +}; + +const req = https.request( options, ( res ) => { + console.log( `statusCode: ${ res.statusCode }` ); + + res.on( 'data', ( d ) => { + process.stdout.write( d ); + } ); } ); -( async () => { - try { - const response = await fetch( - `https://${ host }/api/log?token=${ token }`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: data, - } - ); - - console.log( `statusCode: ${ response.status }` ); - - const responseText = await response.text(); - if ( responseText ) { - console.log( responseText ); - } - - if ( ! response.ok ) { - process.exit( 1 ); - } - } catch ( error ) { - console.error( error ); - process.exit( 1 ); - } -} )(); +req.on( 'error', ( error ) => { + console.error( error ); + process.exit( 1 ); +} ); + +req.write( data ); +req.end(); diff --git a/tests/phpstan/README.md b/tests/phpstan/README.md deleted file mode 100644 index 967c4a9d0195d..0000000000000 --- a/tests/phpstan/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# PHPStan - -PHPStan is a static analysis tool for PHP that checks your code for errors without needing to execute the specific lines or write extra tests. - -## Running the tests - -PHPStan requires PHP and Composer dependencies to be installed. - -If you don't already have an environment ready, you can set one up by following [these instructions](https://github.com/WordPress/wordpress-develop/blob/master/README.md). - -Then you can launch the tests by running: - -```bash -npm run typecheck:php -``` - -which will run PHPStan in the Docker container. - -Additional flags supported by PHPStan can be passed by passing `--` followed by the flags themselves. For example, - -```bash -# to increase the memory limit from the default 2G to 4G: -npm run typecheck:php -- --memory-limit=4G - -# to analyze only a specific file: -npm run typecheck:php -- src/wp-includes/template.php - -# To scan with verbose debugging output: -npm run typecheck:php -- -vvv --debug -``` - -If you are not using the Docker environment, you can run PHPStan via Composer directly: - -```bash -composer run phpstan - -composer run phpstan -- --memory-limit=4G -composer run phpstan -- src/wp-includes/template.php -composer run phpstan -- -vvv --debug -``` - -For available flags, see https://phpstan.org/user-guide/command-line-usage. - -## The PHPStan configuration - -The PHPStan configuration file is located at [`phpstan.neon.dist`](../../phpstan.neon.dist). - -You can create a local copy at `phpstan.neon` to override the default configuration. - -For more information about configuring PHPStan, see the [PHPStan documentation's Config reference](https://phpstan.org/config-reference). - -## Ignoring and baselining errors - -As we adopt PHPStan iteratively, you may be faced with false positives due to legacy code, or code that is not worth changing at this time. - -PHPStan errors can be ignored in the following ways: - -- Using the `@phpstan-ignore {error-identifier} (Reason for ignoring)` annotation in the code itself. This should be used to suppress false positives with a specific line of code. - -- Adding the error pattern to the `ignoreErrors` section of the `phpstan.neon.dist` configuration file. This should be used to handle conflicts with WordPress Coding Standards or similar project decisions, or to allowlist legacy code that is not worth refactoring solely to satisfy the tests. - -- Adding an error to the "tech debt" baseline. This should be used for code that needs to be addressed eventually - by fixing, refactoring, or ignoring via one of the above methods - but is not worth addressing right now. - - Baselines are a useful triage tool for handling PHPStan errors in legacy code, as they allow us to enforce stricter code quality checks on new code, while gradually chipping away at the existing issues over time. **Avoid adding PHPStan errors from new code whenever possible, and use baselines as a last resort.** - - The baseline file is located at `tests/phpstan/baseline.php` and generated by running PHPStan with the `--generate-baseline` flag: - - ```bash - npm run typecheck:php -- --generate-baseline=tests/phpstan/baseline.php - - # or, with Composer directly: - composer run phpstan -- --generate-baseline=tests/phpstan/baseline.php - ``` - - This will regenerate the baseline file with any new errors added to the existing ones. You can then commit the updated baseline file. - -## Performance and troubleshooting - -PHPStan can be resource-intensive, especially on large codebases like WordPress. If you encounter memory limit issues, you can increase the memory limit by passing the `--memory-limit` flag as shown [above](#running-the-tests). - -PHPStan caches analysis results to speed up subsequent runs. You can see information about the results cache by running `analyse` with the `-vv` or `-vvv` flag. - -Sometimes, due to the lack of type information in legacy code, PHPStan may still struggle to analyze certain parts of the codebase. In such cases, you can use the `--debug` flag to disable caching and see which files are causing issues. diff --git a/tests/phpstan/base.neon b/tests/phpstan/base.neon deleted file mode 100644 index 318b9969a928d..0000000000000 --- a/tests/phpstan/base.neon +++ /dev/null @@ -1,141 +0,0 @@ -# Base PHPStan configuration for WordPress Core. -# -# This is kept separate from the main PHPStan configuration file to allow for easy overloading while baseline errors are being fixed. -# -# https://phpstan.org/config-reference - -parameters: - # Cache is stored locally, so it's available for CI. - tmpDir: ../../.cache - - # The Minimum PHP Version - phpVersion: - min: 70400 - max: 80500 - - # If it's not enforced by PHP we can't assume users are passing valid values. - treatPhpDocTypesAsCertain: false - - # These config options are explained in https://phpstan.org/config-reference - checkFunctionNameCase: true - inferPrivatePropertyTypeFromConstructor: true - - # Constants whose values may differ depending on the install. - dynamicConstantNames: - - ALLOW_SUBDIRECTORY_INSTALL - - AUTH_SALT - - AUTOMATIC_UPDATER_DISABLED - - COOKIEPATH - - CUSTOM_TAGS - - DISALLOW_FILE_EDIT - - DISALLOW_UNFILTERED_HTML - - EMPTY_TRASH_DAYS - - ENFORCE_GZIP - - FORCE_SSL_LOGIN - - MEDIA_TRASH - - MULTISITE - - NOBLOGREDIRECT - - SAVEQUERIES - - SCRIPT_DEBUG - - SECRET_KEY - - SECRET_SALT - - SHORTINIT - - SITECOOKIEPATH - - UPLOADBLOGSDIR - - WP_ALLOW_MULTISITE - - WP_CACHE - - WP_DEBUG - - WP_DEBUG_DISPLAY - - WP_DEBUG_LOG - - WP_LANG_DIR - - WP_NETWORK_ADMIN - - WP_POST_REVISIONS - - WP_SITEURL - - WP_USE_THEMES - - WP_USER_ADMIN - - WPLANG - - WPMU_ACCEL_REDIRECT - - WPMU_PLUGIN_DIR - - WPMU_SENDFILE - - # What directories and files should be scanned. - paths: - - ../../src/wp-admin - - ../../src/wp-includes - - ../../src/wp-content/themes/twentyeleven - - ../../src/wp-content/themes/twentyfifteen - - ../../src/wp-content/themes/twentyfourteen - - ../../src/wp-content/themes/twentynineteen - - ../../src/wp-content/themes/twentyseventeen - - ../../src/wp-content/themes/twentysixteen - - ../../src/wp-content/themes/twentyten - - ../../src/wp-content/themes/twentythirteen - - ../../src/wp-content/themes/twentytwelve - - ../../src/wp-content/themes/twentytwenty - - ../../src/wp-content/themes/twentytwentyfive - - ../../src/wp-content/themes/twentytwentyfour - - ../../src/wp-content/themes/twentytwentyone - - ../../src/wp-content/themes/twentytwentythree - - ../../src/wp-content/themes/twentytwentytwo - - ../../src/index.php - - ../../src/wp-activate.php - - ../../src/wp-blog-header.php - - ../../src/wp-comments-post.php - - ../../src/wp-cron.php - - ../../src/wp-links-opml.php - - ../../src/wp-load.php - - ../../src/wp-login.php - - ../../src/wp-mail.php - - ../../src/wp-settings.php - - ../../src/wp-signup.php - - ../../src/wp-trackback.php - - ../../src/xmlrpc.php - bootstrapFiles: - - bootstrap.php - scanFiles: - - ../../wp-config-sample.php - - ../../src/wp-admin/includes/ms.php - excludePaths: - analyseAndScan: - - ../../src/wp-admin/includes/noop.php - analyse: - # These files are deprecated. - - ../../src/wp-admin/includes/deprecated.php - - ../../src/wp-admin/includes/ms-deprecated.php - - ../../src/wp-includes/deprecated.php - - ../../src/wp-includes/ms-deprecated.php - - ../../src/wp-includes/pluggable-deprecated.php - # These files are autogenerated by tools/gutenberg/copy.js. - - ../../src/wp-includes/blocks - # Third-party libraries. - - ../../src/wp-admin/includes/class-ftp-pure.php - - ../../src/wp-admin/includes/class-ftp-sockets.php - - ../../src/wp-admin/includes/class-ftp.php - - ../../src/wp-admin/includes/class-pclzip.php - - ../../src/wp-includes/ID3 - - ../../src/wp-includes/IXR - - ../../src/wp-includes/PHPMailer - - ../../src/wp-includes/Requests - - ../../src/wp-includes/SimplePie - - ../../src/wp-includes/Text - - ../../src/wp-includes/atomlib.php - - ../../src/wp-includes/class-IXR.php - - ../../src/wp-includes/class-avif-info.php - - ../../src/wp-includes/class-json.php - - ../../src/wp-includes/class-phpass.php - - ../../src/wp-includes/class-pop3.php - - ../../src/wp-includes/class-requests.php - - ../../src/wp-includes/class-simplepie.php - - ../../src/wp-includes/class-snoopy.php - - ../../src/wp-includes/class-wp-feed-cache.php - - ../../src/wp-includes/class-wp-http-ixr-client.php - - ../../src/wp-includes/class-wp-http-requests-hooks.php - - ../../src/wp-includes/class-wp-http-requests-response.php - - ../../src/wp-includes/class-wp-simplepie-file.php - - ../../src/wp-includes/class-wp-simplepie-sanitize-kses.php - - ../../src/wp-includes/class-wp-text-diff-renderer-inline.php - - ../../src/wp-includes/class-wp-text-diff-renderer-table.php - - ../../src/wp-includes/php-ai-client - - ../../src/wp-includes/pomo - - ../../src/wp-includes/rss.php - - ../../src/wp-includes/sodium_compat diff --git a/tests/phpstan/baseline.php b/tests/phpstan/baseline.php deleted file mode 100644 index 646cbdbef630c..0000000000000 --- a/tests/phpstan/baseline.php +++ /dev/null @@ -1,3 +0,0 @@ - -

      First Gutenberg Paragraph

      +

      First Gutenberg Paragraph

      Second Auto Paragraph

      @@ -11,7 +11,7 @@ -

      Third Gutenberg Paragraph

      +

      Third Gutenberg Paragraph

      Third Auto Paragraph

      diff --git a/tests/phpunit/data/blocks/fixtures/core__categories.server.html b/tests/phpunit/data/blocks/fixtures/core__categories.server.html index f10bd41b123bc..f073f8f5ee213 100644 --- a/tests/phpunit/data/blocks/fixtures/core__categories.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__categories.server.html @@ -1 +1 @@ -
      • No categories
      +
      • No categories
      diff --git a/tests/phpunit/data/blocks/fixtures/core__column.server.html b/tests/phpunit/data/blocks/fixtures/core__column.server.html index 2487ea0f93c9b..d0b6ab4016d91 100644 --- a/tests/phpunit/data/blocks/fixtures/core__column.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__column.server.html @@ -1,10 +1,10 @@
      - -

      Column One, Paragraph One

      - - -

      Column One, Paragraph Two

      - + +

      Column One, Paragraph One

      + + +

      Column One, Paragraph Two

      +
      diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.server.html b/tests/phpunit/data/blocks/fixtures/core__columns.server.html index fa39f71320056..02d855cbd6c38 100644 --- a/tests/phpunit/data/blocks/fixtures/core__columns.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__columns.server.html @@ -1,24 +1,24 @@ -
      - +
      +
      - -

      Column One, Paragraph One

      - - -

      Column One, Paragraph Two

      - + +

      Column One, Paragraph One

      + + +

      Column One, Paragraph Two

      +
      - - + +
      - -

      Column Two, Paragraph One

      - - -

      Column Three, Paragraph One

      - + +

      Column Two, Paragraph One

      + + +

      Column Three, Paragraph One

      +
      - +
      diff --git a/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html b/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html index af37434febcf8..6b695d15963de 100644 --- a/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html @@ -1,16 +1,16 @@ -
      - -

      Column One, Paragraph One

      - - -

      Column One, Paragraph Two

      - - -

      Column Two, Paragraph One

      - - -

      Column Three, Paragraph One

      - +
      + +

      Column One, Paragraph One

      + + +

      Column One, Paragraph Two

      + + +

      Column Two, Paragraph One

      + + +

      Column Three, Paragraph One

      +
      diff --git a/tests/phpunit/data/blocks/fixtures/core__media-text.server.html b/tests/phpunit/data/blocks/fixtures/core__media-text.server.html index 9093acb972b23..e472aeb90e182 100644 --- a/tests/phpunit/data/blocks/fixtures/core__media-text.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__media-text.server.html @@ -5,7 +5,7 @@
      -

      My Content

      +

      My Content

      diff --git a/tests/phpunit/data/blocks/fixtures/core__media-text__image-alt-no-align.server.html b/tests/phpunit/data/blocks/fixtures/core__media-text__image-alt-no-align.server.html index 15d5feec2b849..c25f5431b6809 100644 --- a/tests/phpunit/data/blocks/fixtures/core__media-text__image-alt-no-align.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__media-text__image-alt-no-align.server.html @@ -5,7 +5,7 @@
      -

      Content

      +

      Content

      diff --git a/tests/phpunit/data/blocks/fixtures/core__media-text__is-stacked-on-mobile.server.html b/tests/phpunit/data/blocks/fixtures/core__media-text__is-stacked-on-mobile.server.html index a8ddd142e6c00..5a1c3993f54c9 100644 --- a/tests/phpunit/data/blocks/fixtures/core__media-text__is-stacked-on-mobile.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__media-text__is-stacked-on-mobile.server.html @@ -5,7 +5,7 @@
      -

      My Content

      +

      My Content

      diff --git a/tests/phpunit/data/blocks/fixtures/core__media-text__media-right-custom-width.server.html b/tests/phpunit/data/blocks/fixtures/core__media-text__media-right-custom-width.server.html index 2c2cbe3da310d..41edc3e02ebb8 100644 --- a/tests/phpunit/data/blocks/fixtures/core__media-text__media-right-custom-width.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__media-text__media-right-custom-width.server.html @@ -5,7 +5,7 @@
      -

      My video

      +

      My video

      diff --git a/tests/phpunit/data/blocks/fixtures/core__media-text__video.server.html b/tests/phpunit/data/blocks/fixtures/core__media-text__video.server.html index 4328c16b367a0..88e9393dd75f2 100644 --- a/tests/phpunit/data/blocks/fixtures/core__media-text__video.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__media-text__video.server.html @@ -5,7 +5,7 @@
      -

      My Content

      +

      My Content

      diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html index 4c6b5d6ffad0a..1db164ca1fb5b 100644 --- a/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html @@ -1,3 +1,3 @@ -

      ... like this one, which is separate from the above and right aligned.

      +

      ... like this one, which is separate from the above and right aligned.

      diff --git a/tests/phpunit/data/html-api/script-element-escaping-diagram.dot b/tests/phpunit/data/html-api/script-element-escaping-diagram.dot deleted file mode 100644 index ae6789cae2f27..0000000000000 --- a/tests/phpunit/data/html-api/script-element-escaping-diagram.dot +++ /dev/null @@ -1,33 +0,0 @@ -// https://html.spec.whatwg.org/multipage/parsing.html#script-data-state -digraph { - rankdir=TB; - node [width=1, height=1, fixedsize=true]; - - // Entry point - entry [shape=plaintext label="Open script"]; - entry -> script_data; - - // Double-circle states arranged more compactly - data [shape=doublecircle label="Close script"]; - script_data [shape=doublecircle color=blue label="script\ndata"]; - script_data_escaped [shape=circle color=orange label="escaped"]; - script_data_double_escaped [shape=circle color=red label="double\nescaped"]; - - // Group related nodes on same ranks where possible - {rank=same; script_data script_data_escaped script_data_double_escaped} - - script_data -> script_data [headport=sw, tailport=sw, label=<<!--*>
      (all dashes)>]; - script_data -> script_data_escaped [label=<<!-->]; - script_data -> data [label=<</script¹>]; - - script_data_escaped -> script_data [label=<-->>]; - script_data_escaped -> script_data_double_escaped [label=<<script¹>]; - script_data_escaped -> data [label=<</script¹>]; - - // The newline before the label prevents the edge from drawing over it. - script_data_double_escaped -> script_data [label=<
      -->>]; - script_data_double_escaped -> script_data_escaped [label=<</script¹>]; - - label=<¹ = Case insensitive “script” followed by one of  “ \\t\\f\\r\\n/>”>; - labelloc=b; -} diff --git a/tests/phpunit/data/html-api/script-element-escaping-diagram.php b/tests/phpunit/data/html-api/script-element-escaping-diagram.php deleted file mode 100644 index 20c10f5711347..0000000000000 --- a/tests/phpunit/data/html-api/script-element-escaping-diagram.php +++ /dev/null @@ -1,13 +0,0 @@ -factory = static::factory(); @@ -118,6 +112,8 @@ public function set_up() { $this->_backup_hooks(); } + global $wp_rewrite; + $this->clean_up_global_scope(); /* @@ -146,10 +142,10 @@ public function set_up() { /** * Sets the bcrypt cost option for password hashing during tests. * - * @param array $options The options for password hashing. - * @param string $algorithm The algorithm to use for hashing. + * @param array $options The options for password hashing. + * @param string|int $algorithm The algorithm to use for hashing. This is a string in PHP 7.4+ and an integer in PHP 7.3 and earlier. */ - public function wp_hash_password_options( array $options, string $algorithm ): array { + public function wp_hash_password_options( array $options, $algorithm ): array { if ( PASSWORD_BCRYPT === $algorithm ) { $options['cost'] = 5; } @@ -159,17 +155,10 @@ public function wp_hash_password_options( array $options, string $algorithm ): a /** * After a test method runs, resets any state in WordPress the test method might have changed. - * - * @global wpdb $wpdb WordPress database abstraction object. - * @global WP_Query $wp_the_query Main WordPress query object. - * @global WP_Query $wp_query WordPress query object. - * @global WP $wp WordPress environment object. */ public function tear_down() { global $wpdb, $wp_the_query, $wp_query, $wp; - $wpdb->query( 'ROLLBACK' ); - if ( is_multisite() ) { while ( ms_is_switched() ) { restore_current_blog(); @@ -370,10 +359,10 @@ protected function reset__SERVER() { * Stores $wp_filter, $wp_actions, $wp_filters, and $wp_current_filter * on a class variable so they can be restored on tear_down() using _restore_hooks(). * - * @global array $wp_filter All of the filters and actions. - * @global array $wp_actions The number of times each action was triggered. - * @global array $wp_filters The number of times each filter was triggered. - * @global array $wp_current_filter The list of current filters with the current one last. + * @global array $wp_filter + * @global array $wp_actions + * @global array $wp_filters + * @global array $wp_current_filter */ protected function _backup_hooks() { self::$hooks_saved['wp_filter'] = array(); @@ -393,10 +382,10 @@ protected function _backup_hooks() { * Restores the hook-related globals to their state at set_up() * so that future tests aren't affected by hooks set during this last test. * - * @global array $wp_filter All of the filters and actions. - * @global array $wp_actions The number of times each action was triggered. - * @global array $wp_filters The number of times each filter was triggered. - * @global array $wp_current_filter The list of current filters with the current one last. + * @global array $wp_filter + * @global array $wp_actions + * @global array $wp_filters + * @global array $wp_current_filter */ protected function _restore_hooks() { if ( isset( self::$hooks_saved['wp_filter'] ) ) { @@ -418,8 +407,6 @@ protected function _restore_hooks() { /** * Flushes the WordPress object cache. - * - * @global WP_Object_Cache $wp_object_cache WordPress Object Cache object. */ public static function flush_cache() { global $wp_object_cache; @@ -465,15 +452,13 @@ public static function flush_cache() { * * @since 5.1.0 * - * @global array $wp_meta_keys Global registry for meta keys. + * @global array $wp_meta_keys */ public function unregister_all_meta_keys() { global $wp_meta_keys; - if ( ! is_array( $wp_meta_keys ) ) { return; } - foreach ( $wp_meta_keys as $object_type => $type_keys ) { foreach ( $type_keys as $object_subtype => $subtype_keys ) { foreach ( $subtype_keys as $key => $value ) { @@ -485,15 +470,11 @@ public function unregister_all_meta_keys() { /** * Starts a database transaction. - * - * @global wpdb $wpdb WordPress database abstraction object. */ public function start_transaction() { global $wpdb; - $wpdb->query( 'SET autocommit = 0;' ); $wpdb->query( 'START TRANSACTION;' ); - add_filter( 'query', array( $this, '_create_temporary_tables' ) ); add_filter( 'query', array( $this, '_drop_temporary_tables' ) ); } @@ -502,12 +483,9 @@ public function start_transaction() { * Commits the queries in a transaction. * * @since 4.1.0 - * - * @global wpdb $wpdb WordPress database abstraction object. */ public static function commit_transaction() { global $wpdb; - $wpdb->query( 'COMMIT;' ); } @@ -1155,8 +1133,6 @@ public function normalizeDirectorySeparatorsInPath( $path ) { * @since 5.3.0 Formalized the existing `...$prop` parameter by adding it * to the function signature. * - * @global WP_Query $wp_query WordPress Query object. - * * @param string ...$prop Any number of WP_Query properties that are expected to be true for the current request. */ public function assertQueryTrue( ...$prop ) { @@ -1619,6 +1595,14 @@ public function scandir( $dir ) { } } + /* + * Compatibility check for PHP < 7.4, where array_merge() expects at least one array. + * See: https://3v4l.org/BIQMA + */ + if ( array() === $matched_dirs ) { + return array(); + } + return array_merge( ...$matched_dirs ); } @@ -1656,7 +1640,7 @@ public static function delete_user( $user_id ) { * * @since 4.4.0 * - * @global WP_Rewrite $wp_rewrite WordPress rewrite rules object. + * @global WP_Rewrite $wp_rewrite * * @param string $structure Optional. Permalink structure to set. Default empty. */ diff --git a/tests/phpunit/includes/build-visual-html-tree.php b/tests/phpunit/includes/build-visual-html-tree.php index 9d2850ce4947c..ac31a0ac071db 100644 --- a/tests/phpunit/includes/build-visual-html-tree.php +++ b/tests/phpunit/includes/build-visual-html-tree.php @@ -1,5 +1,7 @@ get_modifiable_text(); - if ( '' === $text_content ) { + if ( '' === trim( $text_content, " \f\t\r\n" ) ) { break; } $was_text = true; @@ -235,7 +237,7 @@ static function ( $a, $b ) { ++$indent_level; } - // When no attributes are present, there’s nothing left to do. + // If they're no attributes, we're done here. if ( empty( $block_attrs ) ) { break; } @@ -276,6 +278,7 @@ static function ( $a, $b ) { } break; default: + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export $serialized_token_type = var_export( $processor->get_token_type(), true ); throw new Exception( "Unhandled token type for tree construction: {$serialized_token_type}" ); } diff --git a/tests/phpunit/includes/functions.php b/tests/phpunit/includes/functions.php index d6b6218278ae3..66e916e94876d 100644 --- a/tests/phpunit/includes/functions.php +++ b/tests/phpunit/includes/functions.php @@ -375,18 +375,6 @@ function _unhook_font_registration() { } tests_add_filter( 'init', '_unhook_font_registration', 1000 ); -/** - * After the init action has been run once, trying to re-register connector settings can cause - * duplicate registrations. To avoid this, unhook the connector registration functions. - * - * @since 7.0.0 - */ -function _unhook_connector_registration() { - remove_action( 'init', '_wp_register_default_connector_settings', 20 ); - remove_action( 'init', '_wp_connectors_pass_default_keys_to_ai_client', 20 ); -} -tests_add_filter( 'init', '_unhook_connector_registration', 1000 ); - /** * Before the abilities API categories init action runs, unhook the core ability * categories registration function to prevent core categories from being registered diff --git a/tests/phpunit/includes/unregister-blocks-hooks.php b/tests/phpunit/includes/unregister-blocks-hooks.php index 116b4191766bb..b67936a103c81 100644 --- a/tests/phpunit/includes/unregister-blocks-hooks.php +++ b/tests/phpunit/includes/unregister-blocks-hooks.php @@ -1,14 +1,79 @@ create_test_text_model_metadata(); - - $provider_metadata = new ProviderMetadata( - 'mock', - 'Mock Provider', - ProviderTypeEnum::cloud() - ); - - return new class( $metadata, $provider_metadata, $result ) implements ModelInterface, TextGenerationModelInterface { - - private ModelMetadata $metadata; - private ProviderMetadata $provider_metadata; - private GenerativeAiResult $result; - private ModelConfig $config; - - public function __construct( - ModelMetadata $metadata, - ProviderMetadata $provider_metadata, - GenerativeAiResult $result - ) { - $this->metadata = $metadata; - $this->provider_metadata = $provider_metadata; - $this->result = $result; - $this->config = new ModelConfig(); - } - - public function metadata(): ModelMetadata { - return $this->metadata; - } - - public function providerMetadata(): ProviderMetadata { - return $this->provider_metadata; - } - - public function setConfig( ModelConfig $config ): void { - $this->config = $config; - } - - public function getConfig(): ModelConfig { - return $this->config; - } - - public function generateTextResult( array $prompt ): GenerativeAiResult { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - return $this->result; - } - - public function streamGenerateTextResult( array $prompt ): Generator { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - yield $this->result; - } - }; - } - - /** - * Creates a mock image generation model using anonymous class. - * - * @param GenerativeAiResult $result The result to return from generation. - * @param ModelMetadata|null $metadata Optional metadata. - * @return ModelInterface&ImageGenerationModelInterface The mock model. - */ - protected function create_mock_image_generation_model( - GenerativeAiResult $result, - ?ModelMetadata $metadata = null - ): ModelInterface { - $metadata = $metadata ?? $this->create_test_image_model_metadata(); - - $provider_metadata = new ProviderMetadata( - 'mock', - 'Mock Provider', - ProviderTypeEnum::cloud() - ); - - return new class( $metadata, $provider_metadata, $result ) implements ModelInterface, ImageGenerationModelInterface { - - private ModelMetadata $metadata; - private ProviderMetadata $provider_metadata; - private GenerativeAiResult $result; - private ModelConfig $config; - - public function __construct( - ModelMetadata $metadata, - ProviderMetadata $provider_metadata, - GenerativeAiResult $result - ) { - $this->metadata = $metadata; - $this->provider_metadata = $provider_metadata; - $this->result = $result; - $this->config = new ModelConfig(); - } - - public function metadata(): ModelMetadata { - return $this->metadata; - } - - public function providerMetadata(): ProviderMetadata { - return $this->provider_metadata; - } - - public function setConfig( ModelConfig $config ): void { - $this->config = $config; - } - - public function getConfig(): ModelConfig { - return $this->config; - } - - public function generateImageResult( array $prompt ): GenerativeAiResult { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - return $this->result; - } - }; - } - - /** - * Creates a mock speech generation model using anonymous class. - * - * @param GenerativeAiResult $result The result to return from generation. - * @param ModelMetadata|null $metadata Optional metadata. - * @return ModelInterface&SpeechGenerationModelInterface The mock model. - */ - protected function create_mock_speech_generation_model( - GenerativeAiResult $result, - ?ModelMetadata $metadata = null - ): ModelInterface { - $metadata = $metadata ?? $this->create_test_speech_model_metadata(); - - $provider_metadata = new ProviderMetadata( - 'mock-provider', - 'Mock Provider', - ProviderTypeEnum::cloud() - ); - - return new class( $metadata, $provider_metadata, $result ) implements ModelInterface, SpeechGenerationModelInterface { - - private ModelMetadata $metadata; - private ProviderMetadata $provider_metadata; - private GenerativeAiResult $result; - private ModelConfig $config; - - public function __construct( - ModelMetadata $metadata, - ProviderMetadata $provider_metadata, - GenerativeAiResult $result - ) { - $this->metadata = $metadata; - $this->provider_metadata = $provider_metadata; - $this->result = $result; - $this->config = new ModelConfig(); - } - - public function metadata(): ModelMetadata { - return $this->metadata; - } - - public function providerMetadata(): ProviderMetadata { - return $this->provider_metadata; - } - - public function setConfig( ModelConfig $config ): void { - $this->config = $config; - } - - public function getConfig(): ModelConfig { - return $this->config; - } - - public function generateSpeechResult( array $prompt ): GenerativeAiResult { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - return $this->result; - } - }; - } - - /** - * Creates a mock text-to-speech conversion model using anonymous class. - * - * @param GenerativeAiResult $result The result to return from conversion. - * @param ModelMetadata|null $metadata Optional metadata. - * @return ModelInterface&TextToSpeechConversionModelInterface The mock model. - */ - protected function create_mock_text_to_speech_model( - GenerativeAiResult $result, - ?ModelMetadata $metadata = null - ): ModelInterface { - $metadata = $metadata ?? $this->create_test_text_to_speech_model_metadata(); - - $provider_metadata = new ProviderMetadata( - 'mock-provider', - 'Mock Provider', - ProviderTypeEnum::cloud() - ); - - return new class( $metadata, $provider_metadata, $result ) implements ModelInterface, TextToSpeechConversionModelInterface { - - private ModelMetadata $metadata; - private ProviderMetadata $provider_metadata; - private GenerativeAiResult $result; - private ModelConfig $config; - - public function __construct( - ModelMetadata $metadata, - ProviderMetadata $provider_metadata, - GenerativeAiResult $result - ) { - $this->metadata = $metadata; - $this->provider_metadata = $provider_metadata; - $this->result = $result; - $this->config = new ModelConfig(); - } - - public function metadata(): ModelMetadata { - return $this->metadata; - } - - public function providerMetadata(): ProviderMetadata { - return $this->provider_metadata; - } - - public function setConfig( ModelConfig $config ): void { - $this->config = $config; - } - - public function getConfig(): ModelConfig { - return $this->config; - } - - public function convertTextToSpeechResult( array $prompt ): GenerativeAiResult { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - return $this->result; - } - }; - } - - /** - * Creates a mock video generation model using anonymous class. - * - * @param GenerativeAiResult $result The result to return from generation. - * @param ModelMetadata|null $metadata Optional metadata. - * @return ModelInterface&VideoGenerationModelInterface The mock model. - */ - protected function create_mock_video_generation_model( - GenerativeAiResult $result, - ?ModelMetadata $metadata = null - ): ModelInterface { - $metadata = $metadata ?? $this->create_test_video_model_metadata(); - - $provider_metadata = new ProviderMetadata( - 'mock-provider', - 'Mock Provider', - ProviderTypeEnum::cloud() - ); - - return new class( $metadata, $provider_metadata, $result ) implements ModelInterface, VideoGenerationModelInterface { - - private ModelMetadata $metadata; - private ProviderMetadata $provider_metadata; - private GenerativeAiResult $result; - private ModelConfig $config; - - public function __construct( - ModelMetadata $metadata, - ProviderMetadata $provider_metadata, - GenerativeAiResult $result - ) { - $this->metadata = $metadata; - $this->provider_metadata = $provider_metadata; - $this->result = $result; - $this->config = new ModelConfig(); - } - - public function metadata(): ModelMetadata { - return $this->metadata; - } - - public function providerMetadata(): ProviderMetadata { - return $this->provider_metadata; - } - - public function setConfig( ModelConfig $config ): void { - $this->config = $config; - } - - public function getConfig(): ModelConfig { - return $this->config; - } - - public function generateVideoResult( array $prompt ): GenerativeAiResult { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - return $this->result; - } - }; - } - - /** - * Creates a mock text generation model that throws an exception. - * - * @param Exception $exception The exception to throw from generation. - * @param ModelMetadata|null $metadata Optional metadata. - * @return ModelInterface&TextGenerationModelInterface The mock model. - */ - protected function create_mock_text_generation_model_with_exception( - Exception $exception, - ?ModelMetadata $metadata = null - ): ModelInterface { - $metadata = $metadata ?? $this->create_test_text_model_metadata(); - - $provider_metadata = new ProviderMetadata( - 'mock', - 'Mock Provider', - ProviderTypeEnum::cloud() - ); - - return new class( $metadata, $provider_metadata, $exception ) implements ModelInterface, TextGenerationModelInterface { - - private ModelMetadata $metadata; - private ProviderMetadata $provider_metadata; - private Exception $exception; - private ModelConfig $config; - - public function __construct( - ModelMetadata $metadata, - ProviderMetadata $provider_metadata, - Exception $exception - ) { - $this->metadata = $metadata; - $this->provider_metadata = $provider_metadata; - $this->exception = $exception; - $this->config = new ModelConfig(); - } - - public function metadata(): ModelMetadata { - return $this->metadata; - } - - public function providerMetadata(): ProviderMetadata { - return $this->provider_metadata; - } - - public function setConfig( ModelConfig $config ): void { - $this->config = $config; - } - - public function getConfig(): ModelConfig { - return $this->config; - } - - public function generateTextResult( array $prompt ): GenerativeAiResult { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - throw $this->exception; - } - - public function streamGenerateTextResult( array $prompt ): Generator { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter - throw $this->exception; - } - }; - } -} diff --git a/tests/phpunit/includes/wp-ai-client-mock-provider-trait.php b/tests/phpunit/includes/wp-ai-client-mock-provider-trait.php deleted file mode 100644 index e7637bf239119..0000000000000 --- a/tests/phpunit/includes/wp-ai-client-mock-provider-trait.php +++ /dev/null @@ -1,202 +0,0 @@ -hasProvider( 'mock_connectors_test' ) ) { - $ai_registry->registerProvider( Mock_Connectors_Test_Provider::class ); - } - - // Also register in the WP connector registry if not already present. - $connector_registry = WP_Connector_Registry::get_instance(); - if ( null !== $connector_registry && ! $connector_registry->is_registered( 'mock_connectors_test' ) ) { - $connector_registry->register( - 'mock_connectors_test', - array( - 'name' => 'Mock Connectors Test', - 'description' => '', - 'type' => 'ai_provider', - 'authentication' => array( - 'method' => 'api_key', - 'credentials_url' => null, - ), - ) - ); - } - } - - /** - * Sets whether the mock provider reports as configured. - * - * @param bool $is_configured Whether the provider should be configured. - */ - private static function set_mock_provider_configured( bool $is_configured ): void { - Mock_Connectors_Test_Provider_Availability::$is_configured = $is_configured; - } - - /** - * Unregisters the mock provider's connector setting. - * - * Reverses the side effect of _wp_register_default_connector_settings() - * for the mock provider so that subsequent test classes start with a clean slate. - * Must be called from tear_down_after_class() after running tests. - */ - private static function unregister_mock_connector_setting(): void { - $setting_name = 'connectors_ai_mock_connectors_test_api_key'; - unregister_setting( 'connectors', $setting_name ); - remove_filter( "option_{$setting_name}", '_wp_connectors_mask_api_key' ); - } -} diff --git a/tests/phpunit/includes/wp-ai-client-test-abilities-trait.php b/tests/phpunit/includes/wp-ai-client-test-abilities-trait.php deleted file mode 100644 index 47f5f7725a14c..0000000000000 --- a/tests/phpunit/includes/wp-ai-client-test-abilities-trait.php +++ /dev/null @@ -1,136 +0,0 @@ -is_registered( 'wpaiclienttests' ) ) { - return; - } - - global $wp_current_filter; - - // Simulate the init hook for ability categories. - $wp_current_filter[] = 'wp_abilities_api_categories_init'; - - // Register test ability category. - wp_register_ability_category( - 'wpaiclienttests', - array( - 'label' => 'WP AI Client Tests', - 'description' => 'Test abilities for WP AI Client.', - ) - ); - - array_pop( $wp_current_filter ); - - // Simulate the abilities init action. - $wp_current_filter[] = 'wp_abilities_api_init'; - - // Register test abilities. - wp_register_ability( - 'wpaiclienttests/simple', - array( - 'label' => 'Simple Test Ability', - 'description' => 'A simple test ability with no parameters.', - 'category' => 'wpaiclienttests', - 'execute_callback' => static function () { - return array( 'success' => true ); - }, - 'permission_callback' => static function () { - return true; - }, - ) - ); - - wp_register_ability( - 'wpaiclienttests/with-params', - array( - 'label' => 'Test Ability With Parameters', - 'description' => 'A test ability that accepts parameters.', - 'category' => 'wpaiclienttests', - 'input_schema' => array( - 'type' => 'object', - 'properties' => array( - 'title' => array( - 'type' => 'string', - 'description' => 'The title parameter.', - 'required' => true, - ), - ), - 'additionalProperties' => false, - ), - 'execute_callback' => static function ( array $input ) { - return array( - 'success' => true, - 'title' => $input['title'], - ); - }, - 'permission_callback' => static function () { - return true; - }, - ) - ); - - wp_register_ability( - 'wpaiclienttests/returns-error', - array( - 'label' => 'Test Ability That Returns Error', - 'description' => 'A test ability that returns a WP_Error.', - 'category' => 'wpaiclienttests', - 'execute_callback' => static function () { - return new WP_Error( 'test_error', 'This is a test error message.' ); - }, - 'permission_callback' => static function () { - return true; - }, - ) - ); - - wp_register_ability( - 'wpaiclienttests/hyphen-test', - array( - 'label' => 'Test Ability With Hyphens', - 'description' => 'A test ability to verify hyphenated names.', - 'category' => 'wpaiclienttests', - 'execute_callback' => static function () { - return array( 'hyphenated' => true ); - }, - 'permission_callback' => static function () { - return true; - }, - ) - ); - - array_pop( $wp_current_filter ); - } - - /** - * Unregisters test ability category and abilities. - * - * Safe to call multiple times; skips unregistration if already done. - * Must be called from tear_down_after_class() before parent::tear_down_after_class(). - */ - private static function unregister_test_abilities() { - // Unregister test abilities. - wp_unregister_ability( 'wpaiclienttests/simple' ); - wp_unregister_ability( 'wpaiclienttests/with-params' ); - wp_unregister_ability( 'wpaiclienttests/returns-error' ); - wp_unregister_ability( 'wpaiclienttests/hyphen-test' ); - - // Unregister test ability category. - wp_unregister_ability_category( 'wpaiclienttests' ); - } -} diff --git a/tests/phpunit/tests/abilities-api/wpAbilitiesRegistry.php b/tests/phpunit/tests/abilities-api/wpAbilitiesRegistry.php index b9cc58279c118..32479d69e2f8c 100644 --- a/tests/phpunit/tests/abilities-api/wpAbilitiesRegistry.php +++ b/tests/phpunit/tests/abilities-api/wpAbilitiesRegistry.php @@ -136,74 +136,6 @@ public function test_register_invalid_uppercase_characters_in_name() { $this->assertNull( $result ); } - /** - * Should accept ability name with 3 segments (2 slashes). - * - * @ticket 64098 - * - * @covers WP_Abilities_Registry::register - */ - public function test_register_valid_name_with_three_segments() { - $result = $this->registry->register( 'test/sub/add-numbers', self::$test_ability_args ); - $this->assertInstanceOf( WP_Ability::class, $result ); - $this->assertSame( 'test/sub/add-numbers', $result->get_name() ); - } - - /** - * Should accept ability name with 4 segments (3 slashes). - * - * @ticket 64098 - * - * @covers WP_Abilities_Registry::register - */ - public function test_register_valid_name_with_four_segments() { - $result = $this->registry->register( 'test/sub/deep/add-numbers', self::$test_ability_args ); - $this->assertInstanceOf( WP_Ability::class, $result ); - $this->assertSame( 'test/sub/deep/add-numbers', $result->get_name() ); - } - - /** - * Should reject ability name with 5 segments (exceeds maximum of 4). - * - * @ticket 64098 - * - * @covers WP_Abilities_Registry::register - * - * @expectedIncorrectUsage WP_Abilities_Registry::register - */ - public function test_register_invalid_name_with_five_segments() { - $result = $this->registry->register( 'test/a/b/c/too-deep', self::$test_ability_args ); - $this->assertNull( $result ); - } - - /** - * Should reject ability name with empty segments (double slashes). - * - * @ticket 64098 - * - * @covers WP_Abilities_Registry::register - * - * @expectedIncorrectUsage WP_Abilities_Registry::register - */ - public function test_register_invalid_name_with_empty_segment() { - $result = $this->registry->register( 'test//add-numbers', self::$test_ability_args ); - $this->assertNull( $result ); - } - - /** - * Should reject ability name with trailing slash. - * - * @ticket 64098 - * - * @covers WP_Abilities_Registry::register - * - * @expectedIncorrectUsage WP_Abilities_Registry::register - */ - public function test_register_invalid_name_with_trailing_slash() { - $result = $this->registry->register( 'test/add-numbers/', self::$test_ability_args ); - $this->assertNull( $result ); - } - /** * Should reject ability registration without a label. * diff --git a/tests/phpunit/tests/admin/includesScreen.php b/tests/phpunit/tests/admin/includesScreen.php index 26186391f261d..4b4ba86c5c7d6 100644 --- a/tests/phpunit/tests/admin/includesScreen.php +++ b/tests/phpunit/tests/admin/includesScreen.php @@ -451,19 +451,6 @@ public function test_options() { $this->assertSame( $screen->get_options(), array() ); } - /** - * @ticket 62562 - */ - public function test_get_current_screen_type() { - global $current_screen; - - set_current_screen( 'edit.php' ); - $this->assertInstanceOf( 'WP_Screen', get_current_screen() ); - - $current_screen = new stdClass(); - $this->assertNull( get_current_screen() ); - } - public function test_in_admin() { set_current_screen( 'edit.php' ); $this->assertTrue( get_current_screen()->in_admin() ); diff --git a/tests/phpunit/tests/admin/includesTemplate.php b/tests/phpunit/tests/admin/includesTemplate.php index 15a5edd672f09..909aff217a583 100644 --- a/tests/phpunit/tests/admin/includesTemplate.php +++ b/tests/phpunit/tests/admin/includesTemplate.php @@ -494,20 +494,4 @@ public function test_wp_add_dashboard_widget() { // This doesn't actually get removed due to the invalid priority. remove_meta_box( 'dashboard2', 'dashboard', 'normal' ); } - - /** - * Tests that get_post_states() handles a null value gracefully. - * - * This can happen when get_post() returns null (e.g., when a post - * doesn't exist) and that result is passed to get_post_states() - * without being checked first. - * - * @ticket 58932 - * - * @covers ::get_post_states - */ - public function test_get_post_states_with_null_returns_empty_array() { - $result = get_post_states( null ); - $this->assertSame( array(), $result, 'get_post_states() should return an empty array when WP_Post is not supplied.' ); - } } diff --git a/tests/phpunit/tests/admin/wpCommentsListTable.php b/tests/phpunit/tests/admin/wpCommentsListTable.php index 185bc5bfa48b0..ed1d3a83bfb38 100644 --- a/tests/phpunit/tests/admin/wpCommentsListTable.php +++ b/tests/phpunit/tests/admin/wpCommentsListTable.php @@ -218,61 +218,30 @@ public function test_get_views_should_return_views_by_default() { * Verify that the comments table never shows the note comment_type. * * @ticket 64198 - * @ticket 64474 - * - * @dataProvider data_comment_type - * - * @param string $comment_type The comment_type parameter value to test. */ - public function test_comments_list_table_does_not_show_note_comment_type( string $comment_type ) { - $post_id = self::factory()->post->create(); - self::factory()->comment->create( + public function test_comments_list_table_does_not_show_note_comment_type() { + $post_id = self::factory()->post->create(); + $note_id = self::factory()->comment->create( array( 'comment_post_ID' => $post_id, 'comment_content' => 'This is a note.', 'comment_type' => 'note', 'comment_approved' => '1', - 'comment_date' => '2024-01-01 10:00:00', - 'comment_date_gmt' => '2024-01-01 10:00:00', ) ); - $regular_comment_id = self::factory()->comment->create( + $comment_id = self::factory()->comment->create( array( 'comment_post_ID' => $post_id, 'comment_content' => 'This is a regular comment.', 'comment_type' => '', 'comment_approved' => '1', - 'comment_date' => '2024-01-01 11:00:00', - 'comment_date_gmt' => '2024-01-01 11:00:00', - ) - ); - $pingback_comment_id = self::factory()->comment->create( - array( - 'comment_post_ID' => $post_id, - 'comment_content' => 'This is a pingback comment.', - 'comment_type' => '', - 'comment_approved' => '1', - 'comment_date' => '2024-01-01 12:00:00', - 'comment_date_gmt' => '2024-01-01 12:00:00', ) ); - $_REQUEST['comment_type'] = $comment_type; + // Request the note comment type. + $_REQUEST['comment_type'] = 'note'; $this->table->prepare_items(); $items = $this->table->items; - $this->assertCount( 2, $items ); - $this->assertEquals( $pingback_comment_id, $items[0]->comment_ID ); - $this->assertEquals( $regular_comment_id, $items[1]->comment_ID ); - } - - /** - * Data provider for test_comments_list_table_does_not_show_note_comment_type(). - * - * @return array - */ - public function data_comment_type(): array { - return array( - 'note type explicitly requested' => array( 'note' ), - 'all type requested' => array( 'all' ), - ); + $this->assertCount( 1, $items ); + $this->assertEquals( $comment_id, $items[0]->comment_ID ); } } diff --git a/tests/phpunit/tests/admin/wpMediaListTable.php b/tests/phpunit/tests/admin/wpMediaListTable.php index 31d2bfa7cbb9d..b6af6b660cba2 100644 --- a/tests/phpunit/tests/admin/wpMediaListTable.php +++ b/tests/phpunit/tests/admin/wpMediaListTable.php @@ -122,7 +122,7 @@ public function tear_down() { * does not result in a PHP warning. * * The warning that we should not see: - * PHP 7.4: `Invalid argument supplied for foreach()`. + * PHP <= 7.4: `Invalid argument supplied for foreach()`. * PHP 8.0 and higher: `Warning: foreach() argument must be of type array|object, bool given`. * * Note: This does not test the actual functioning of the WP_Media_List_Table::prepare_items() method. diff --git a/tests/phpunit/tests/admin/wpSiteHealth.php b/tests/phpunit/tests/admin/wpSiteHealth.php index 6080b477f54c3..86974db2160e3 100644 --- a/tests/phpunit/tests/admin/wpSiteHealth.php +++ b/tests/phpunit/tests/admin/wpSiteHealth.php @@ -12,8 +12,10 @@ class Tests_Admin_wpSiteHealth extends WP_UnitTestCase { * An instance of the class to test. * * @since 6.1.0 + * + * @var WP_Site_Health */ - private WP_Site_Health $instance; + private $instance; public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { // Include the `WP_Site_Health` file. @@ -170,7 +172,7 @@ public function data_cron_health_checks() { * @covers ::get_page_cache_headers() * @covers ::check_for_page_caching() */ - public function test_get_page_cache( array $responses, string $expected_status, string $expected_label, bool $has_basic_auth = false, bool $delay_the_response = false ) { + public function test_get_page_cache( $responses, $expected_status, $expected_label, $good_basic_auth = null, $delay_the_response = false ) { $expected_props = array( 'badge' => array( 'label' => __( 'Performance' ), @@ -181,7 +183,7 @@ public function test_get_page_cache( array $responses, string $expected_status, 'label' => $expected_label, ); - if ( $has_basic_auth ) { + if ( null !== $good_basic_auth ) { $_SERVER['PHP_AUTH_USER'] = 'admin'; $_SERVER['PHP_AUTH_PW'] = 'password'; } @@ -198,7 +200,7 @@ static function () use ( $threshold ) { add_filter( 'pre_http_request', - function ( $response, $parsed_args ) use ( &$responses, &$is_unauthorized, $has_basic_auth, $delay_the_response, $threshold ) { + function ( $response, $parsed_args ) use ( &$responses, &$is_unauthorized, $good_basic_auth, $delay_the_response, $threshold ) { $expected_response = array_shift( $responses ); @@ -217,7 +219,7 @@ function ( $response, $parsed_args ) use ( &$responses, &$is_unauthorized, $has_ ); } - if ( $has_basic_auth ) { + if ( null !== $good_basic_auth ) { $this->assertArrayHasKey( 'Authorization', $parsed_args['headers'] @@ -261,15 +263,9 @@ function ( $response, $parsed_args ) use ( &$responses, &$is_unauthorized, $has_ * * @ticket 56041 * - * @return array>, - * expected_status: 'recommended'|'critical'|'good', - * expected_label: string, - * good_basic_auth?: bool, - * delay_the_response?: bool, - * }> + * @return array[] */ - public function data_get_page_cache(): array { + public function data_get_page_cache() { $recommended_label = 'Page cache is not detected but the server response time is OK'; $good_label = 'Page cache is detected and the server response time is good'; $critical_label = 'Page cache is not detected and the server response time is slow'; @@ -282,13 +278,13 @@ public function data_get_page_cache(): array { ), 'expected_status' => 'recommended', 'expected_label' => $error_label, - 'has_basic_auth' => true, + 'good_basic_auth' => false, ), 'no-cache-control' => array( 'responses' => array_fill( 0, 3, array() ), 'expected_status' => 'critical', 'expected_label' => $critical_label, - 'has_basic_auth' => false, + 'good_basic_auth' => null, 'delay_the_response' => true, ), 'no-cache' => array( @@ -314,7 +310,7 @@ public function data_get_page_cache(): array { 'responses' => array_fill( 0, 3, array( 'cache-control' => 'no-cache' ) ), 'expected_status' => 'critical', 'expected_label' => $critical_label, - 'has_basic_auth' => false, + 'good_basic_auth' => null, 'delay_the_response' => true, ), 'age' => array( @@ -370,7 +366,7 @@ public function data_get_page_cache(): array { ), 'expected_status' => 'critical', 'expected_label' => $critical_label, - 'has_basic_auth' => false, + 'good_basic_auth' => null, 'delay_the_response' => true, ), 'cache-control-with-basic-auth' => array( @@ -381,7 +377,7 @@ public function data_get_page_cache(): array { ), 'expected_status' => 'good', 'expected_label' => $good_label, - 'has_basic_auth' => true, + 'good_basic_auth' => true, ), 'x-cache-enabled' => array( 'responses' => array_fill( @@ -400,7 +396,7 @@ public function data_get_page_cache(): array { ), 'expected_status' => 'critical', 'expected_label' => $critical_label, - 'has_basic_auth' => false, + 'good_basic_auth' => null, 'delay_the_response' => true, ), 'x-cache-disabled' => array( @@ -412,78 +408,6 @@ public function data_get_page_cache(): array { 'expected_status' => 'good', 'expected_label' => $good_label, ), - 'false-positive-hit-in-word' => array( - 'responses' => array_fill( - 0, - 3, - array( 'x-cache' => 'no-hit' ) - ), - 'expected_status' => 'recommended', - 'expected_label' => $recommended_label, - ), - 'varnish-header' => array( - 'responses' => array_fill( - 0, - 3, - array( 'x-varnish' => '123 456' ) - ), - 'expected_status' => 'good', - 'expected_label' => $good_label, - ), - 'varnish-header-miss' => array( - 'responses' => array_fill( - 0, - 3, - array( 'x-varnish' => '123' ) - ), - 'expected_status' => 'recommended', - 'expected_label' => $recommended_label, - ), - 'srcache-store-status' => array( - 'responses' => array_fill( - 0, - 3, - array( 'x-srcache-store-status' => 'STORE' ) - ), - 'expected_status' => 'good', - 'expected_label' => $good_label, - ), - 'srcache-store-status-bypass' => array( - 'responses' => array_fill( - 0, - 3, - array( 'x-srcache-store-status' => 'BYPASS' ) - ), - 'expected_status' => 'recommended', - 'expected_label' => $recommended_label, - ), - 'srcache-fetch-status' => array( - 'responses' => array_fill( - 0, - 3, - array( 'x-srcache-fetch-status' => 'HIT' ) - ), - 'expected_status' => 'good', - 'expected_label' => $good_label, - ), - 'last-modified' => array( - 'responses' => array_fill( - 0, - 3, - array( 'last-modified' => 'Wed, 21 Oct 2015 07:28:00 GMT' ) - ), - 'expected_status' => 'good', - 'expected_label' => $good_label, - ), - 'via' => array( - 'responses' => array_fill( - 0, - 3, - array( 'via' => '1.1 varnish' ) - ), - 'expected_status' => 'good', - 'expected_label' => $good_label, - ), ); } @@ -565,11 +489,11 @@ public function data_object_cache_thresholds() { return array( array( 'comments_count', 0 ), array( 'posts_count', 0 ), - array( 'terms_count', 0 ), - array( 'options_count', 1 ), + array( 'terms_count', 1 ), + array( 'options_count', 100 ), array( 'users_count', 0 ), - array( 'alloptions_count', 1 ), - array( 'alloptions_bytes', 10 ), + array( 'alloptions_count', 100 ), + array( 'alloptions_bytes', 1000 ), ); } @@ -648,63 +572,4 @@ public static function set_autoloaded_option( $bytes = 800000 ) { // Force autoloading so that WordPress core does not override it. See https://core.trac.wordpress.org/changeset/57920. add_option( 'test_set_autoloaded_option', $heavy_option_string, '', true ); } - - /** - * Tests get_test_opcode_cache() return structure. - * - * @ticket 63697 - * - * @covers ::get_test_opcode_cache() - */ - public function test_get_test_opcode_cache_return_structure() { - $result = $this->instance->get_test_opcode_cache(); - - $this->assertIsArray( $result ); - $this->assertArrayHasKey( 'label', $result ); - $this->assertArrayHasKey( 'status', $result ); - $this->assertArrayHasKey( 'badge', $result ); - $this->assertArrayHasKey( 'description', $result ); - $this->assertArrayHasKey( 'actions', $result ); - $this->assertArrayHasKey( 'test', $result ); - - $this->assertSame( 'opcode_cache', $result['test'] ); - $this->assertSame( - array( - 'label' => __( 'Performance' ), - 'color' => 'blue', - ), - $result['badge'] - ); - $this->assertContains( $result['status'], array( 'good', 'recommended' ), 'Status must be good or recommended.' ); - } - - /** - * Tests get_test_opcode_cache() result when opcode cache is enabled or not. - * - * Covers: opcache enabled, disabled, not available, and opcache_get_status() returns false. - * - * @ticket 63697 - * - * @covers ::get_test_opcode_cache() - */ - public function test_get_test_opcode_cache_result_by_environment() { - $result = $this->instance->get_test_opcode_cache(); - - $opcache_enabled = false; - if ( function_exists( 'opcache_get_status' ) ) { - $status = @opcache_get_status( false ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Warning emitted in failure case. - if ( $status && true === $status['opcache_enabled'] ) { - $opcache_enabled = true; - } - } - - if ( $opcache_enabled ) { - $this->assertSame( 'good', $result['status'], 'When opcache is enabled, status should be "good".' ); - $this->assertSame( __( 'Opcode cache is enabled' ), $result['label'] ); - } else { - $this->assertSame( 'recommended', $result['status'] ); - $this->assertSame( __( 'Opcode cache is not enabled' ), $result['label'] ); - $this->assertStringContainsString( __( 'Enabling this cache can significantly improve the performance of your site.' ), $result['description'] ); - } - } } diff --git a/tests/phpunit/tests/ai-client/wpAiClientAbilityFunctionResolver.php b/tests/phpunit/tests/ai-client/wpAiClientAbilityFunctionResolver.php deleted file mode 100644 index 37ed36951c5ae..0000000000000 --- a/tests/phpunit/tests/ai-client/wpAiClientAbilityFunctionResolver.php +++ /dev/null @@ -1,835 +0,0 @@ -is_ability_call( $call ); - - $this->assertTrue( $result ); - } - - /** - * Test that is_ability_call returns true for a nested namespace. - * - * @ticket 64591 - */ - public function test_is_ability_call_returns_true_for_nested_namespace() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'tec/v1/create_event' ); - $call = new FunctionCall( - 'test-id', - 'wpab__tec__v1__create_event', - array() - ); - - $result = $resolver->is_ability_call( $call ); - - $this->assertTrue( $result ); - } - - /** - * Test that is_ability_call returns false for a non-ability call. - * - * @ticket 64591 - */ - public function test_is_ability_call_returns_false_for_non_ability() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $call = new FunctionCall( - 'test-id', - 'regular_function', - array() - ); - - $result = $resolver->is_ability_call( $call ); - - $this->assertFalse( $result ); - } - - /** - * Test that is_ability_call returns false when name is null. - * - * @ticket 64591 - */ - public function test_is_ability_call_returns_false_when_name_is_null() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $call = new FunctionCall( - 'test-id', - null, - array() - ); - - $result = $resolver->is_ability_call( $call ); - - $this->assertFalse( $result ); - } - - /** - * Test that is_ability_call returns false for partial prefix. - * - * @ticket 64591 - */ - public function test_is_ability_call_returns_false_for_partial_prefix() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $call = new FunctionCall( - 'test-id', - 'wpab_single_underscore', - array() - ); - - $result = $resolver->is_ability_call( $call ); - - $this->assertFalse( $result ); - } - - /** - * Test that execute_ability returns error for non-ability call. - * - * @ticket 64591 - */ - public function test_execute_ability_returns_error_for_non_ability_call() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $call = new FunctionCall( - 'test-id', - 'regular_function', - array() - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $this->assertSame( 'test-id', $response->getId() ); - $this->assertSame( 'regular_function', $response->getName() ); - $data = $response->getResponse(); - $this->assertIsArray( $data ); - $this->assertArrayHasKey( 'error', $data ); - $this->assertSame( 'Not an ability function call', $data['error'] ); - $this->assertArrayHasKey( 'code', $data ); - $this->assertSame( 'invalid_ability_call', $data['code'] ); - } - - /** - * Test that execute_ability returns error when ability not found. - * - * @ticket 64591 - */ - public function test_execute_ability_returns_error_when_ability_not_found() { - $this->setExpectedIncorrectUsage( 'WP_Abilities_Registry::get_registered' ); - - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'nonexistent/ability' ); - $call = new FunctionCall( - 'test-id', - 'wpab__nonexistent__ability', - array() - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $this->assertSame( 'test-id', $response->getId() ); - $this->assertSame( 'wpab__nonexistent__ability', $response->getName() ); - $data = $response->getResponse(); - $this->assertIsArray( $data ); - $this->assertArrayHasKey( 'error', $data ); - $this->assertStringContainsString( 'not found', $data['error'] ); - $this->assertArrayHasKey( 'code', $data ); - $this->assertSame( 'ability_not_found', $data['code'] ); - } - - /** - * Test that execute_ability handles missing id. - * - * @ticket 64591 - */ - public function test_execute_ability_handles_missing_id() { - $this->setExpectedIncorrectUsage( 'WP_Abilities_Registry::get_registered' ); - - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'nonexistent/ability' ); - $call = new FunctionCall( - null, - 'wpab__nonexistent__ability', - array() - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $this->assertSame( 'unknown', $response->getId() ); - } - - /** - * Test that has_ability_calls returns true when ability call is present. - * - * @ticket 64591 - */ - public function test_has_ability_calls_returns_true_when_present() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'tec/create_event' ); - $call = new FunctionCall( - 'test-id', - 'wpab__tec__create_event', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( 'Here is the result:' ), - new MessagePart( $call ), - ) - ); - - $result = $resolver->has_ability_calls( $message ); - - $this->assertTrue( $result ); - } - - /** - * Test that has_ability_calls returns false when ability call is not present. - * - * @ticket 64591 - */ - public function test_has_ability_calls_returns_false_when_not_present() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $call = new FunctionCall( - 'test-id', - 'regular_function', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( 'Here is the result:' ), - new MessagePart( $call ), - ) - ); - - $result = $resolver->has_ability_calls( $message ); - - $this->assertFalse( $result ); - } - - /** - * Test that has_ability_calls returns false for text-only message. - * - * @ticket 64591 - */ - public function test_has_ability_calls_returns_false_for_text_only() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $message = new UserMessage( - array( - new MessagePart( 'Just some text' ), - ) - ); - - $result = $resolver->has_ability_calls( $message ); - - $this->assertFalse( $result ); - } - - /** - * Test that has_ability_calls returns true with mixed content. - * - * @ticket 64591 - */ - public function test_has_ability_calls_returns_true_with_mixed_content() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'tec/create_event' ); - - $regular_call = new FunctionCall( - 'regular-id', - 'regular_function', - array() - ); - - $ability_call = new FunctionCall( - 'ability-id', - 'wpab__tec__create_event', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( 'Some text' ), - new MessagePart( $regular_call ), - new MessagePart( $ability_call ), - ) - ); - - $result = $resolver->has_ability_calls( $message ); - - $this->assertTrue( $result ); - } - - /** - * Test that has_ability_calls handles empty message. - * - * @ticket 64591 - */ - public function test_has_ability_calls_with_empty_message() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $message = new ModelMessage( array() ); - - $result = $resolver->has_ability_calls( $message ); - - $this->assertFalse( $result ); - } - - /** - * Test that execute_abilities handles empty message. - * - * @ticket 64591 - */ - public function test_execute_abilities_with_empty_message() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $message = new ModelMessage( array() ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $this->assertCount( 0, $result->getParts() ); - } - - /** - * Test that execute_abilities handles errors gracefully. - * - * @ticket 64591 - */ - public function test_execute_abilities_handles_errors_gracefully() { - $this->setExpectedIncorrectUsage( 'WP_Abilities_Registry::get_registered' ); - - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'nonexistent/ability' ); - $call = new FunctionCall( - 'test-id', - 'wpab__nonexistent__ability', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( $call ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $parts = $result->getParts(); - $this->assertCount( 1, $parts ); - - $response = $parts[0]->getFunctionResponse(); - $this->assertInstanceOf( FunctionResponse::class, $response ); - $data = $response->getResponse(); - $this->assertArrayHasKey( 'error', $data ); - } - - /** - * Test that execute_abilities returns a UserMessage. - * - * @ticket 64591 - */ - public function test_execute_abilities_returns_user_message() { - $this->setExpectedIncorrectUsage( 'WP_Abilities_Registry::get_registered' ); - - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'nonexistent/ability' ); - $call = new FunctionCall( - 'test-id', - 'wpab__nonexistent__ability', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( $call ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - } - - /** - * Test that execute_abilities processes multiple calls. - * - * @ticket 64591 - */ - public function test_execute_abilities_processes_multiple_calls() { - $this->setExpectedIncorrectUsage( 'WP_Abilities_Registry::get_registered' ); - - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'nonexistent/ability1', 'nonexistent/ability2' ); - - $call1 = new FunctionCall( - 'call-1', - 'wpab__nonexistent__ability1', - array() - ); - - $call2 = new FunctionCall( - 'call-2', - 'wpab__nonexistent__ability2', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( $call1 ), - new MessagePart( $call2 ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $parts = $result->getParts(); - $this->assertCount( 2, $parts ); - } - - /** - * Test that execute_abilities only processes function calls. - * - * @ticket 64591 - */ - public function test_execute_abilities_only_processes_function_calls() { - $this->setExpectedIncorrectUsage( 'WP_Abilities_Registry::get_registered' ); - - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'nonexistent/ability' ); - $call = new FunctionCall( - 'test-id', - 'wpab__nonexistent__ability', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( 'Some text' ), - new MessagePart( $call ), - new MessagePart( 'More text' ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $parts = $result->getParts(); - // Only the function call should be processed. - $this->assertCount( 1, $parts ); - } - - /** - * Test ability_name_to_function_name with simple name. - * - * @ticket 64591 - */ - public function test_ability_name_to_function_name_simple() { - $result = WP_AI_Client_Ability_Function_Resolver::ability_name_to_function_name( 'tec/create_event' ); - - $this->assertSame( 'wpab__tec__create_event', $result ); - } - - /** - * Test ability_name_to_function_name with nested namespace. - * - * @ticket 64591 - */ - public function test_ability_name_to_function_name_nested() { - $result = WP_AI_Client_Ability_Function_Resolver::ability_name_to_function_name( 'tec/v1/create_event' ); - - $this->assertSame( 'wpab__tec__v1__create_event', $result ); - } - - /** - * Test execute_ability with successful execution. - * - * @ticket 64591 - */ - public function test_execute_ability_success() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/simple' ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__simple', - array() - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $this->assertSame( 'test-id', $response->getId() ); - $this->assertSame( 'wpab__wpaiclienttests__simple', $response->getName() ); - $data = $response->getResponse(); - $this->assertIsArray( $data ); - $this->assertArrayHasKey( 'success', $data ); - $this->assertTrue( $data['success'] ); - } - - /** - * Test execute_ability with parameters. - * - * @ticket 64591 - */ - public function test_execute_ability_with_parameters() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/with-params' ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__with-params', - array( 'title' => 'Test Title' ) - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $this->assertSame( 'test-id', $response->getId() ); - $this->assertSame( 'wpab__wpaiclienttests__with-params', $response->getName() ); - $data = $response->getResponse(); - $this->assertIsArray( $data ); - $this->assertArrayHasKey( 'success', $data ); - $this->assertTrue( $data['success'] ); - $this->assertArrayHasKey( 'title', $data ); - $this->assertSame( 'Test Title', $data['title'] ); - } - - /** - * Test execute_ability handles WP_Error. - * - * @ticket 64591 - */ - public function test_execute_ability_handles_wp_error() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/returns-error' ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__returns-error', - array() - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $this->assertSame( 'test-id', $response->getId() ); - $this->assertSame( 'wpab__wpaiclienttests__returns-error', $response->getName() ); - $data = $response->getResponse(); - $this->assertIsArray( $data ); - $this->assertArrayHasKey( 'error', $data ); - $this->assertSame( 'This is a test error message.', $data['error'] ); - $this->assertArrayHasKey( 'code', $data ); - $this->assertSame( 'test_error', $data['code'] ); - } - - /** - * Test execute_abilities with successful execution. - * - * @ticket 64591 - */ - public function test_execute_abilities_success() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/simple' ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__simple', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( $call ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $parts = $result->getParts(); - $this->assertCount( 1, $parts ); - - $response = $parts[0]->getFunctionResponse(); - $this->assertInstanceOf( FunctionResponse::class, $response ); - $data = $response->getResponse(); - $this->assertArrayHasKey( 'success', $data ); - $this->assertTrue( $data['success'] ); - } - - /** - * Test execute_abilities with multiple successful executions. - * - * @ticket 64591 - */ - public function test_execute_abilities_multiple_success() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/simple', 'wpaiclienttests/hyphen-test' ); - - $call1 = new FunctionCall( - 'call-1', - 'wpab__wpaiclienttests__simple', - array() - ); - - $call2 = new FunctionCall( - 'call-2', - 'wpab__wpaiclienttests__hyphen-test', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( $call1 ), - new MessagePart( $call2 ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $parts = $result->getParts(); - $this->assertCount( 2, $parts ); - - // Check first response. - $response1 = $parts[0]->getFunctionResponse(); - $this->assertInstanceOf( FunctionResponse::class, $response1 ); - $data1 = $response1->getResponse(); - $this->assertArrayHasKey( 'success', $data1 ); - $this->assertTrue( $data1['success'] ); - - // Check second response. - $response2 = $parts[1]->getFunctionResponse(); - $this->assertInstanceOf( FunctionResponse::class, $response2 ); - $data2 = $response2->getResponse(); - $this->assertArrayHasKey( 'hyphenated', $data2 ); - $this->assertTrue( $data2['hyphenated'] ); - } - - /** - * Test execute_abilities with mixed text and ability calls. - * - * @ticket 64591 - */ - public function test_execute_abilities_with_mixed_content() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/simple' ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__simple', - array() - ); - - $message = new ModelMessage( - array( - new MessagePart( 'Starting execution' ), - new MessagePart( $call ), - new MessagePart( 'Execution complete' ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $parts = $result->getParts(); - // Only function calls should be processed. - $this->assertCount( 1, $parts ); - - $response = $parts[0]->getFunctionResponse(); - $this->assertInstanceOf( FunctionResponse::class, $response ); - } - - /** - * Test execute_abilities with ability that has parameters. - * - * @ticket 64591 - */ - public function test_execute_abilities_with_parameters() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/with-params' ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__with-params', - array( 'title' => 'Integration Test' ) - ); - - $message = new ModelMessage( - array( - new MessagePart( $call ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $this->assertInstanceOf( UserMessage::class, $result ); - $parts = $result->getParts(); - $this->assertCount( 1, $parts ); - - $response = $parts[0]->getFunctionResponse(); - $this->assertInstanceOf( FunctionResponse::class, $response ); - $data = $response->getResponse(); - $this->assertArrayHasKey( 'success', $data ); - $this->assertTrue( $data['success'] ); - $this->assertArrayHasKey( 'title', $data ); - $this->assertSame( 'Integration Test', $data['title'] ); - } - - /** - * Test execute_ability rejects ability not in allowed list. - * - * @ticket 64769 - */ - public function test_execute_ability_rejects_ability_not_in_allowed_list() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/simple' ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__with-params', - array( 'title' => 'Test' ) - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $data = $response->getResponse(); - $this->assertIsArray( $data ); - $this->assertArrayHasKey( 'error', $data ); - $this->assertStringContainsString( 'not specified in the allowed abilities list', $data['error'] ); - $this->assertArrayHasKey( 'code', $data ); - $this->assertSame( 'ability_not_allowed', $data['code'] ); - } - - /** - * Test execute_ability rejects all abilities when constructed with no abilities. - * - * @ticket 64769 - */ - public function test_execute_ability_rejects_all_when_no_abilities_specified() { - $resolver = new WP_AI_Client_Ability_Function_Resolver(); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__simple', - array() - ); - - $response = $resolver->execute_ability( $call ); - - $this->assertInstanceOf( FunctionResponse::class, $response ); - $data = $response->getResponse(); - $this->assertIsArray( $data ); - $this->assertArrayHasKey( 'code', $data ); - $this->assertSame( 'ability_not_allowed', $data['code'] ); - } - - /** - * Test execute_abilities filters by allowed list. - * - * @ticket 64769 - */ - public function test_execute_abilities_filters_by_allowed_list() { - $resolver = new WP_AI_Client_Ability_Function_Resolver( 'wpaiclienttests/simple' ); - - $call1 = new FunctionCall( - 'call-1', - 'wpab__wpaiclienttests__simple', - array() - ); - - $call2 = new FunctionCall( - 'call-2', - 'wpab__wpaiclienttests__with-params', - array( 'title' => 'Test' ) - ); - - $message = new ModelMessage( - array( - new MessagePart( $call1 ), - new MessagePart( $call2 ), - ) - ); - - $result = $resolver->execute_abilities( $message ); - - $parts = $result->getParts(); - $this->assertCount( 2, $parts ); - - $response1_data = $parts[0]->getFunctionResponse()->getResponse(); - $this->assertArrayHasKey( 'success', $response1_data ); - $this->assertTrue( $response1_data['success'] ); - - $response2_data = $parts[1]->getFunctionResponse()->getResponse(); - $this->assertSame( 'ability_not_allowed', $response2_data['code'] ); - } - - /** - * Test constructor accepts WP_Ability objects. - * - * @ticket 64769 - */ - public function test_constructor_accepts_wp_ability_objects() { - $ability = wp_get_ability( 'wpaiclienttests/simple' ); - $resolver = new WP_AI_Client_Ability_Function_Resolver( $ability ); - $call = new FunctionCall( - 'test-id', - 'wpab__wpaiclienttests__simple', - array() - ); - - $response = $resolver->execute_ability( $call ); - - $data = $response->getResponse(); - $this->assertArrayHasKey( 'success', $data ); - $this->assertTrue( $data['success'] ); - } - - /** - * Test constructor accepts mixed WP_Ability objects and strings. - * - * @ticket 64769 - */ - public function test_constructor_accepts_mixed_ability_types() { - $ability = wp_get_ability( 'wpaiclienttests/simple' ); - $resolver = new WP_AI_Client_Ability_Function_Resolver( $ability, 'wpaiclienttests/with-params' ); - - $call1 = new FunctionCall( - 'call-1', - 'wpab__wpaiclienttests__simple', - array() - ); - $response1 = $resolver->execute_ability( $call1 ); - $this->assertArrayHasKey( 'success', $response1->getResponse() ); - - $call2 = new FunctionCall( - 'call-2', - 'wpab__wpaiclienttests__with-params', - array( 'title' => 'Test' ) - ); - $response2 = $resolver->execute_ability( $call2 ); - $this->assertArrayHasKey( 'success', $response2->getResponse() ); - } -} diff --git a/tests/phpunit/tests/ai-client/wpAiClientCache.php b/tests/phpunit/tests/ai-client/wpAiClientCache.php deleted file mode 100644 index 690b8b9668981..0000000000000 --- a/tests/phpunit/tests/ai-client/wpAiClientCache.php +++ /dev/null @@ -1,221 +0,0 @@ -cache = new WP_AI_Client_Cache(); - } - - /** - * Test that the cache implements the scoped PSR-16 CacheInterface. - * - * @ticket 64591 - */ - public function test_implements_cache_interface() { - $this->assertInstanceOf( - WordPress\AiClientDependencies\Psr\SimpleCache\CacheInterface::class, - $this->cache - ); - } - - /** - * Test that get returns default value on cache miss. - * - * @ticket 64591 - */ - public function test_get_returns_default_on_miss() { - $this->assertNull( $this->cache->get( 'nonexistent' ) ); - $this->assertSame( 'fallback', $this->cache->get( 'nonexistent', 'fallback' ) ); - } - - /** - * Test set and get round-trip. - * - * @ticket 64591 - */ - public function test_set_and_get() { - $this->assertTrue( $this->cache->set( 'key1', 'value1' ) ); - $this->assertSame( 'value1', $this->cache->get( 'key1' ) ); - } - - /** - * Test delete removes cached item. - * - * @ticket 64591 - */ - public function test_delete() { - $this->cache->set( 'key1', 'value1' ); - $this->assertTrue( $this->cache->delete( 'key1' ) ); - $this->assertNull( $this->cache->get( 'key1' ) ); - } - - /** - * Test has returns false on cache miss. - * - * @ticket 64591 - */ - public function test_has_returns_false_on_miss() { - $this->assertFalse( $this->cache->has( 'nonexistent' ) ); - } - - /** - * Test has returns true on cache hit. - * - * @ticket 64591 - */ - public function test_has_returns_true_on_hit() { - $this->cache->set( 'key1', 'value1' ); - $this->assertTrue( $this->cache->has( 'key1' ) ); - } - - /** - * Test getMultiple returns values and defaults. - * - * @ticket 64591 - */ - public function test_get_multiple() { - $this->cache->set( 'key1', 'value1' ); - $this->cache->set( 'key2', 'value2' ); - - $result = $this->cache->getMultiple( array( 'key1', 'key2', 'key3' ), 'default' ); - - $this->assertSame( 'value1', $result['key1'] ); - $this->assertSame( 'value2', $result['key2'] ); - $this->assertSame( 'default', $result['key3'] ); - } - - /** - * Test setMultiple stores multiple values. - * - * @ticket 64591 - */ - public function test_set_multiple() { - $this->assertTrue( - $this->cache->setMultiple( - array( - 'key1' => 'value1', - 'key2' => 'value2', - ) - ) - ); - - $this->assertSame( 'value1', $this->cache->get( 'key1' ) ); - $this->assertSame( 'value2', $this->cache->get( 'key2' ) ); - } - - /** - * Test deleteMultiple removes multiple items. - * - * @ticket 64591 - */ - public function test_delete_multiple() { - $this->cache->set( 'key1', 'value1' ); - $this->cache->set( 'key2', 'value2' ); - - $this->assertTrue( $this->cache->deleteMultiple( array( 'key1', 'key2' ) ) ); - $this->assertNull( $this->cache->get( 'key1' ) ); - $this->assertNull( $this->cache->get( 'key2' ) ); - } - - /** - * Test clear flushes the cache group. - * - * @ticket 64591 - */ - public function test_clear() { - $this->cache->set( 'key1', 'value1' ); - - // WordPress default object cache supports flush_group. - $result = $this->cache->clear(); - - if ( function_exists( 'wp_cache_supports' ) && wp_cache_supports( 'flush_group' ) ) { - $this->assertTrue( $result ); - $this->assertNull( $this->cache->get( 'key1' ) ); - } else { - $this->assertFalse( $result ); - } - } - - /** - * Test that get returns a stored false value instead of the default. - * - * @ticket 64591 - */ - public function test_get_returns_stored_false() { - $this->cache->set( 'key_false', false ); - $this->assertFalse( $this->cache->get( 'key_false', 'default' ) ); - } - - /** - * Test that get returns a stored null value instead of the default. - * - * @ticket 64591 - */ - public function test_get_returns_stored_null() { - $this->cache->set( 'key_null', null ); - $this->assertNull( $this->cache->get( 'key_null', 'default' ) ); - } - - /** - * Test that getMultiple returns a stored false value instead of the default. - * - * @ticket 64591 - */ - public function test_get_multiple_returns_stored_false() { - $this->cache->set( 'key_false', false ); - - $result = $this->cache->getMultiple( array( 'key_false' ), 'default' ); - - $this->assertFalse( $result['key_false'] ); - } - - /** - * Test that getMultiple returns a stored null value instead of the default. - * - * @ticket 64591 - */ - public function test_get_multiple_returns_stored_null() { - $this->cache->set( 'key_null', null ); - - $result = $this->cache->getMultiple( array( 'key_null' ), 'default' ); - - $this->assertNull( $result['key_null'] ); - } - - /** - * Test set with integer TTL. - * - * @ticket 64591 - */ - public function test_ttl_with_integer() { - $this->assertTrue( $this->cache->set( 'key1', 'value1', 3600 ) ); - $this->assertSame( 'value1', $this->cache->get( 'key1' ) ); - } - - /** - * Test set with DateInterval TTL. - * - * @ticket 64591 - */ - public function test_ttl_with_date_interval() { - $ttl = new DateInterval( 'PT1H' ); - $this->assertTrue( $this->cache->set( 'key1', 'value1', $ttl ) ); - $this->assertSame( 'value1', $this->cache->get( 'key1' ) ); - } -} diff --git a/tests/phpunit/tests/ai-client/wpAiClientDiscoveryStrategy.php b/tests/phpunit/tests/ai-client/wpAiClientDiscoveryStrategy.php deleted file mode 100644 index 0e31738d52a88..0000000000000 --- a/tests/phpunit/tests/ai-client/wpAiClientDiscoveryStrategy.php +++ /dev/null @@ -1,151 +0,0 @@ -saved_strategies = WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery::getStrategies(); - } - - /** - * Restores discovery strategies after each test. - */ - public function tear_down() { - WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery::setStrategies( - is_array( $this->saved_strategies ) ? $this->saved_strategies : iterator_to_array( $this->saved_strategies ) - ); - parent::tear_down(); - } - - /** - * Test that the strategy implements DiscoveryStrategy interface. - * - * @ticket 64591 - */ - public function test_implements_discovery_strategy() { - $this->assertTrue( - is_a( - WP_AI_Client_Discovery_Strategy::class, - WordPress\AiClientDependencies\Http\Discovery\Strategy\DiscoveryStrategy::class, - true - ) - ); - } - - /** - * Test init prepends strategy to discovery. - * - * @ticket 64591 - */ - public function test_init_prepends_strategy() { - // Clear strategies to isolate test. - WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery::setStrategies( array() ); - - WP_AI_Client_Discovery_Strategy::init(); - - $strategies = WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery::getStrategies(); - $strategies = is_array( $strategies ) ? $strategies : iterator_to_array( $strategies ); - - $this->assertNotEmpty( $strategies ); - $this->assertSame( WP_AI_Client_Discovery_Strategy::class, $strategies[0] ); - } - - /** - * Test getCandidates for ClientInterface returns a closure that creates WP_AI_Client_HTTP_Client. - * - * @ticket 64591 - */ - public function test_get_candidates_client_interface() { - $candidates = WP_AI_Client_Discovery_Strategy::getCandidates( - WordPress\AiClientDependencies\Psr\Http\Client\ClientInterface::class - ); - - $this->assertCount( 1, $candidates ); - $this->assertArrayHasKey( 'class', $candidates[0] ); - $this->assertIsCallable( $candidates[0]['class'] ); - - $client = $candidates[0]['class'](); - $this->assertInstanceOf( WP_AI_Client_HTTP_Client::class, $client ); - } - - /** - * Test getCandidates for RequestFactoryInterface returns PSR17 Factory class. - * - * @ticket 64591 - */ - public function test_get_candidates_request_factory() { - $candidates = WP_AI_Client_Discovery_Strategy::getCandidates( - 'WordPress\AiClientDependencies\Psr\Http\Message\RequestFactoryInterface' - ); - - $this->assertCount( 1, $candidates ); - $this->assertSame( WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory::class, $candidates[0]['class'] ); - } - - /** - * Test getCandidates for ResponseFactoryInterface returns PSR17 Factory class. - * - * @ticket 64591 - */ - public function test_get_candidates_response_factory() { - $candidates = WP_AI_Client_Discovery_Strategy::getCandidates( - 'WordPress\AiClientDependencies\Psr\Http\Message\ResponseFactoryInterface' - ); - - $this->assertCount( 1, $candidates ); - $this->assertSame( WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory::class, $candidates[0]['class'] ); - } - - /** - * Test getCandidates for StreamFactoryInterface returns PSR17 Factory class. - * - * @ticket 64591 - */ - public function test_get_candidates_stream_factory() { - $candidates = WP_AI_Client_Discovery_Strategy::getCandidates( - 'WordPress\AiClientDependencies\Psr\Http\Message\StreamFactoryInterface' - ); - - $this->assertCount( 1, $candidates ); - $this->assertSame( WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory::class, $candidates[0]['class'] ); - } - - /** - * Test getCandidates for UriFactoryInterface returns PSR17 Factory class. - * - * @ticket 64591 - */ - public function test_get_candidates_uri_factory() { - $candidates = WP_AI_Client_Discovery_Strategy::getCandidates( - 'WordPress\AiClientDependencies\Psr\Http\Message\UriFactoryInterface' - ); - - $this->assertCount( 1, $candidates ); - $this->assertSame( WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory::class, $candidates[0]['class'] ); - } - - /** - * Test getCandidates for unknown type returns empty array. - * - * @ticket 64591 - */ - public function test_get_candidates_unknown_type() { - $candidates = WP_AI_Client_Discovery_Strategy::getCandidates( 'UnknownType' ); - $this->assertSame( array(), $candidates ); - } -} diff --git a/tests/phpunit/tests/ai-client/wpAiClientEventDispatcher.php b/tests/phpunit/tests/ai-client/wpAiClientEventDispatcher.php deleted file mode 100644 index 55c8ddc4e0c33..0000000000000 --- a/tests/phpunit/tests/ai-client/wpAiClientEventDispatcher.php +++ /dev/null @@ -1,55 +0,0 @@ -dispatch( $event ); - - $this->assertTrue( $hook_fired, 'The action hook should have been fired' ); - $this->assertSame( $event, $fired_event, 'The fired event should be the same as the dispatched event' ); - $this->assertSame( $event, $result, 'The dispatch method should return the same event' ); - } - - /** - * Test that dispatch returns event without listeners. - * - * @ticket 64591 - */ - public function test_dispatch_returns_event_without_listeners() { - $dispatcher = new WP_AI_Client_Event_Dispatcher(); - $event = new stdClass(); - $event->test_value = 'original'; - - $result = $dispatcher->dispatch( $event ); - - $this->assertSame( $event, $result, 'The dispatch method should return the same object' ); - $this->assertSame( 'original', $result->test_value, 'The event object should remain unchanged' ); - } -} diff --git a/tests/phpunit/tests/ai-client/wpAiClientHttpClient.php b/tests/phpunit/tests/ai-client/wpAiClientHttpClient.php deleted file mode 100644 index 15fb8f07d2f18..0000000000000 --- a/tests/phpunit/tests/ai-client/wpAiClientHttpClient.php +++ /dev/null @@ -1,367 +0,0 @@ -psr17_factory = new WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory(); - $this->client = new WP_AI_Client_HTTP_Client( $this->psr17_factory, $this->psr17_factory ); - } - - /** - * Test that the client implements ClientInterface. - * - * @ticket 64591 - */ - public function test_implements_client_interface() { - $this->assertInstanceOf( - WordPress\AiClientDependencies\Psr\Http\Client\ClientInterface::class, - $this->client - ); - } - - /** - * Test that the client implements ClientWithOptionsInterface. - * - * @ticket 64591 - */ - public function test_implements_client_with_options_interface() { - $this->assertInstanceOf( - WordPress\AiClient\Providers\Http\Contracts\ClientWithOptionsInterface::class, - $this->client - ); - } - - /** - * Test successful sendRequest maps status, body, and headers. - * - * @ticket 64591 - */ - public function test_send_request_success() { - add_filter( - 'pre_http_request', - static function () { - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', - ), - 'headers' => array( - 'content-type' => 'application/json', - ), - 'body' => '{"result":"ok"}', - ); - } - ); - - $request = $this->psr17_factory->createRequest( 'GET', 'https://api.example.com/test' ); - $response = $this->client->sendRequest( $request ); - - $this->assertSame( 200, $response->getStatusCode() ); - $this->assertSame( '{"result":"ok"}', (string) $response->getBody() ); - $this->assertTrue( $response->hasHeader( 'content-type' ) ); - } - - /** - * Test request method, headers, body, and httpversion are mapped to WP args. - * - * @ticket 64591 - */ - public function test_request_args_mapped() { - $captured_args = null; - $captured_url = null; - - add_filter( - 'pre_http_request', - static function ( $preempt, $parsed_args, $url ) use ( &$captured_args, &$captured_url ) { - $captured_args = $parsed_args; - $captured_url = $url; - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', - ), - 'headers' => array(), - 'body' => '', - ); - }, - 10, - 3 - ); - - $body = $this->psr17_factory->createStream( '{"key":"value"}' ); - $request = $this->psr17_factory->createRequest( 'POST', 'https://api.example.com/data' ); - $request = $request->withBody( $body ); - $request = $request->withHeader( 'Content-Type', 'application/json' ); - $request = $request->withProtocolVersion( '2.0' ); - - $this->client->sendRequest( $request ); - - $this->assertSame( 'https://api.example.com/data', $captured_url ); - $this->assertSame( 'POST', $captured_args['method'] ); - $this->assertSame( '2.0', $captured_args['httpversion'] ); - $this->assertSame( '{"key":"value"}', $captured_args['body'] ); - $this->assertArrayHasKey( 'Content-Type', $captured_args['headers'] ); - $this->assertSame( 'application/json', $captured_args['headers']['Content-Type'] ); - } - - /** - * Test empty body sends null. - * - * @ticket 64591 - */ - public function test_empty_body_sends_null() { - $captured_args = null; - - add_filter( - 'pre_http_request', - static function ( $preempt, $parsed_args ) use ( &$captured_args ) { - $captured_args = $parsed_args; - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', - ), - 'headers' => array(), - 'body' => '', - ); - }, - 10, - 2 - ); - - $request = $this->psr17_factory->createRequest( 'GET', 'https://api.example.com' ); - $this->client->sendRequest( $request ); - - $this->assertNull( $captured_args['body'] ); - } - - /** - * Test WP_Error throws NetworkException. - * - * @ticket 64591 - */ - public function test_wp_error_throws_network_exception() { - add_filter( - 'pre_http_request', - static function () { - return new WP_Error( 'http_request_failed', 'Connection timed out' ); - } - ); - - $request = $this->psr17_factory->createRequest( 'GET', 'https://api.example.com' ); - - $this->expectException( WordPress\AiClient\Providers\Http\Exception\NetworkException::class ); - $this->client->sendRequest( $request ); - } - - /** - * Test sendRequestWithOptions applies timeout. - * - * @ticket 64591 - */ - public function test_send_request_with_options_timeout() { - $captured_args = null; - - add_filter( - 'pre_http_request', - static function ( $preempt, $parsed_args ) use ( &$captured_args ) { - $captured_args = $parsed_args; - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', - ), - 'headers' => array(), - 'body' => '', - ); - }, - 10, - 2 - ); - - $options = new WordPress\AiClient\Providers\Http\DTO\RequestOptions(); - $options->setTimeout( 30.0 ); - - $request = $this->psr17_factory->createRequest( 'GET', 'https://api.example.com' ); - $this->client->sendRequestWithOptions( $request, $options ); - - $this->assertSame( 30.0, $captured_args['timeout'] ); - } - - /** - * Test sendRequestWithOptions applies redirection. - * - * @ticket 64591 - */ - public function test_send_request_with_options_redirection() { - $captured_args = null; - - add_filter( - 'pre_http_request', - static function ( $preempt, $parsed_args ) use ( &$captured_args ) { - $captured_args = $parsed_args; - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', - ), - 'headers' => array(), - 'body' => '', - ); - }, - 10, - 2 - ); - - $options = new WordPress\AiClient\Providers\Http\DTO\RequestOptions(); - $options->setMaxRedirects( 5 ); - - $request = $this->psr17_factory->createRequest( 'GET', 'https://api.example.com' ); - $this->client->sendRequestWithOptions( $request, $options ); - - $this->assertSame( 5, $captured_args['redirection'] ); - } - - /** - * Test sendRequestWithOptions does not override defaults when options are null. - * - * @ticket 64591 - */ - public function test_send_request_with_options_null_uses_defaults() { - $args_with_options = null; - $args_without_options = null; - - add_filter( - 'pre_http_request', - static function ( $preempt, $parsed_args ) use ( &$args_with_options, &$args_without_options ) { - if ( null === $args_without_options ) { - $args_without_options = $parsed_args; - } else { - $args_with_options = $parsed_args; - } - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', - ), - 'headers' => array(), - 'body' => '', - ); - }, - 10, - 2 - ); - - $request = $this->psr17_factory->createRequest( 'GET', 'https://api.example.com' ); - - // First request: null options should use WordPress defaults. - $options = new WordPress\AiClient\Providers\Http\DTO\RequestOptions(); - $this->client->sendRequestWithOptions( $request, $options ); - - // Second request: explicit options should override defaults. - $options_explicit = new WordPress\AiClient\Providers\Http\DTO\RequestOptions(); - $options_explicit->setTimeout( 99.0 ); - $options_explicit->setMaxRedirects( 10 ); - $this->client->sendRequestWithOptions( $request, $options_explicit ); - - // Null options should retain WordPress default timeout, not 99. - $this->assertNotSame( 99.0, $args_without_options['timeout'] ); - // Explicit options should apply. - $this->assertSame( 99.0, $args_with_options['timeout'] ); - $this->assertSame( 10, $args_with_options['redirection'] ); - } - - /** - * Test sendRequestWithOptions WP_Error throws NetworkException. - * - * @ticket 64591 - */ - public function test_send_request_with_options_wp_error_throws() { - add_filter( - 'pre_http_request', - static function () { - return new WP_Error( 'http_request_failed', 'Connection refused' ); - } - ); - - $options = new WordPress\AiClient\Providers\Http\DTO\RequestOptions(); - $request = $this->psr17_factory->createRequest( 'GET', 'https://api.example.com' ); - - $this->expectException( WordPress\AiClient\Providers\Http\Exception\NetworkException::class ); - $this->client->sendRequestWithOptions( $request, $options ); - } - - /** - * Test seekable body is rewound before sending. - * - * @ticket 64591 - */ - public function test_seekable_body_rewound() { - $captured_args = null; - - add_filter( - 'pre_http_request', - static function ( $preempt, $parsed_args ) use ( &$captured_args ) { - $captured_args = $parsed_args; - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', - ), - 'headers' => array(), - 'body' => '', - ); - }, - 10, - 2 - ); - - $body = $this->psr17_factory->createStream( 'test body' ); - $body->read( 4 ); // Advance offset past "test". - - $request = $this->psr17_factory->createRequest( 'POST', 'https://api.example.com' ); - $request = $request->withBody( $body ); - - $this->client->sendRequest( $request ); - - $this->assertSame( 'test body', $captured_args['body'] ); - } -} diff --git a/tests/phpunit/tests/ai-client/wpAiClientPrompt.php b/tests/phpunit/tests/ai-client/wpAiClientPrompt.php deleted file mode 100644 index 287cd49116b71..0000000000000 --- a/tests/phpunit/tests/ai-client/wpAiClientPrompt.php +++ /dev/null @@ -1,33 +0,0 @@ -assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $builder ); - } - - /** - * Test that successive calls return independent builder instances. - * - * @ticket 64591 - */ - public function test_returns_independent_instances() { - $builder1 = wp_ai_client_prompt( 'First' ); - $builder2 = wp_ai_client_prompt( 'Second' ); - - $this->assertNotSame( $builder1, $builder2 ); - } -} diff --git a/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php b/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php deleted file mode 100644 index ea4814212d335..0000000000000 --- a/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php +++ /dev/null @@ -1,2608 +0,0 @@ -setAccessible( true ); - } - } - - /** - * Gets the value of a protected or private property from the wrapped prompt builder. - * - * @param WP_AI_Client_Prompt_Builder $builder The WordPress prompt builder instance. - * @param string $property Property to get value for. - * @return mixed The property value. - */ - private function get_wrapped_prompt_builder_property_value( WP_AI_Client_Prompt_Builder $builder, string $property ) { - $reflection_class = new ReflectionClass( WP_AI_Client_Prompt_Builder::class ); - $builder_property = $reflection_class->getProperty( 'builder' ); - self::set_accessible( $builder_property ); - $wrapped_builder = $builder_property->getValue( $builder ); - - $reflection_class2 = new ReflectionClass( get_class( $wrapped_builder ) ); - $the_property = $reflection_class2->getProperty( $property ); - self::set_accessible( $the_property ); - - return $the_property->getValue( $wrapped_builder ); - } - - /** - * Gets the function declarations from the builder's model config. - * - * @param WP_AI_Client_Prompt_Builder $builder The builder to get declarations from. - * @return list|null The function declarations or null if not set. - */ - private function get_function_declarations( WP_AI_Client_Prompt_Builder $builder ): ?array { - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - return $config->getFunctionDeclarations(); - } - - /** - * Set up before class. - */ - public static function set_up_before_class() { - parent::set_up_before_class(); - - self::register_test_abilities(); - } - - /** - * Tear down after class. - */ - public static function tear_down_after_class() { - self::unregister_test_abilities(); - - parent::tear_down_after_class(); - } - - /** - * Set up before each test. - */ - public function set_up() { - parent::set_up(); - - $this->registry = $this->createMock( ProviderRegistry::class ); - } - - /** - * Test that WP_AI_Client_Prompt_Builder can be instantiated. - * - * @ticket 64591 - */ - public function test_instantiation() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $prompt_builder ); - } - - /** - * Test that WP_AI_Client_Prompt_Builder can be instantiated with initial prompt content. - * - * @ticket 64591 - */ - public function test_instantiation_with_prompt() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry, 'Initial prompt text' ); - - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $prompt_builder ); - } - - /** - * Test that the constructor sets the default request timeout. - * - * @ticket 64591 - */ - public function test_constructor_sets_default_request_timeout() { - $builder = new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry() ); - - /** @var RequestOptions $request_options */ - $request_options = $this->get_wrapped_prompt_builder_property_value( $builder, 'requestOptions' ); - - $this->assertInstanceOf( RequestOptions::class, $request_options ); - $this->assertEquals( 30, $request_options->getTimeout() ); - } - - /** - * Test that the constructor allows overriding the default request timeout. - * - * @ticket 64591 - */ - public function test_constructor_allows_overriding_request_timeout() { - add_filter( - 'wp_ai_client_default_request_timeout', - static function () { - return 45; - } - ); - - $builder = new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry() ); - - /** @var RequestOptions $request_options */ - $request_options = $this->get_wrapped_prompt_builder_property_value( $builder, 'requestOptions' ); - - $this->assertInstanceOf( RequestOptions::class, $request_options ); - $this->assertEquals( 45, $request_options->getTimeout() ); - } - - /** - * Test method chaining with fluent methods. - * - * @ticket 64591 - */ - public function test_method_chaining_returns_decorator() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $result = $prompt_builder->with_text( 'Test text' ); - $this->assertSame( $prompt_builder, $result, 'with_text should return the decorator instance' ); - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $result ); - - $result = $prompt_builder->using_system_instruction( 'System instruction' ); - $this->assertSame( $prompt_builder, $result, 'using_system_instruction should return the decorator instance' ); - - $result = $prompt_builder->using_max_tokens( 100 ); - $this->assertSame( $prompt_builder, $result, 'using_max_tokens should return the decorator instance' ); - - $result = $prompt_builder->using_temperature( 0.7 ); - $this->assertSame( $prompt_builder, $result, 'using_temperature should return the decorator instance' ); - - $result = $prompt_builder->using_top_p( 0.9 ); - $this->assertSame( $prompt_builder, $result, 'using_top_p should return the decorator instance' ); - - $result = $prompt_builder->using_top_k( 50 ); - $this->assertSame( $prompt_builder, $result, 'using_top_k should return the decorator instance' ); - - $result = $prompt_builder->using_presence_penalty( 0.5 ); - $this->assertSame( $prompt_builder, $result, 'using_presence_penalty should return the decorator instance' ); - - $result = $prompt_builder->using_frequency_penalty( 0.5 ); - $this->assertSame( $prompt_builder, $result, 'using_frequency_penalty should return the decorator instance' ); - - $result = $prompt_builder->as_output_mime_type( 'application/json' ); - $this->assertSame( $prompt_builder, $result, 'as_output_mime_type should return the decorator instance' ); - } - - /** - * Test complex method chaining scenario. - * - * @ticket 64591 - */ - public function test_complex_method_chaining() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $result = $prompt_builder - ->with_text( 'Test prompt' ) - ->using_system_instruction( 'You are a helpful assistant' ) - ->using_max_tokens( 500 ) - ->using_temperature( 0.7 ) - ->using_top_p( 0.9 ); - - $this->assertSame( $prompt_builder, $result, 'Chained methods should return the same decorator instance' ); - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $result ); - } - - /** - * Test that boolean-returning methods do not return the decorator. - * - * @ticket 64591 - */ - public function test_boolean_methods_return_boolean() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry, 'Test text' ); - - $result = $prompt_builder->is_supported_for_text_generation(); - $this->assertIsBool( $result, 'is_supported_for_text_generation should return a boolean' ); - $this->assertNotSame( $prompt_builder, $result, 'is_supported_for_text_generation should not return the decorator' ); - } - - /** - * Test that calling a non-existent method returns WP_Error on termination. - * - * @ticket 64591 - */ - public function test_invalid_method_returns_wp_error() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - // Invalid method call stores error but returns $this for chaining. - $result = $prompt_builder->non_existent_method(); - $this->assertSame( $prompt_builder, $result ); - - // Calling a terminate method should return the stored WP_Error. - $result = $prompt_builder->generate_text(); - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'non_existent_method does not exist', $result->get_error_message() ); - } - - /** - * Test that the wrapped builder is properly configured with the registry. - * - * @ticket 64591 - */ - public function test_wrapped_builder_has_correct_registry() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $reflection_class = new ReflectionClass( WP_AI_Client_Prompt_Builder::class ); - $builder_property = $reflection_class->getProperty( 'builder' ); - self::set_accessible( $builder_property ); - $wrapped_builder = $builder_property->getValue( $prompt_builder ); - - $wrapped_builder_reflection = new ReflectionClass( get_class( $wrapped_builder ) ); - $registry_property = $wrapped_builder_reflection->getProperty( 'registry' ); - self::set_accessible( $registry_property ); - $this->assertSame( $registry, $registry_property->getValue( $wrapped_builder ), 'Wrapped builder should have the same registry' ); - } - - /** - * Test method chaining with with_history. - * - * @ticket 64591 - */ - public function test_method_chaining_with_history() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $message1 = Message::fromArray( - array( - 'role' => 'user', - 'parts' => array( - array( - 'text' => 'Hello', - ), - ), - ) - ); - $message2 = Message::fromArray( - array( - 'role' => 'user', - 'parts' => array( - array( - 'text' => 'How are you?', - ), - ), - ) - ); - - $result = $prompt_builder->with_history( $message1, $message2 ); - $this->assertSame( $prompt_builder, $result, 'with_history should return the decorator instance' ); - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $result ); - } - - /** - * Test method chaining with using_model_config. - * - * @ticket 64591 - */ - public function test_method_chaining_with_model_config() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $config = new ModelConfig( array( 'maxTokens' => 100 ) ); - - $result = $prompt_builder->using_model_config( $config ); - $this->assertSame( $prompt_builder, $result, 'using_model_config should return the decorator instance' ); - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $result ); - } - - /** - * Tests constructor with no prompt. - * - * @ticket 64591 - */ - public function test_constructor_with_no_prompt() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - $this->assertEmpty( $messages ); - } - - /** - * Tests constructor with string prompt. - * - * @ticket 64591 - */ - public function test_constructor_with_string_prompt() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Hello, world!' ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $this->assertInstanceOf( Message::class, $messages[0] ); - $this->assertEquals( 'Hello, world!', $messages[0]->getParts()[0]->getText() ); - } - - /** - * Tests constructor with MessagePart prompt. - * - * @ticket 64591 - */ - public function test_constructor_with_message_part_prompt() { - $part = new MessagePart( 'Test message' ); - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, $part ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $this->assertInstanceOf( Message::class, $messages[0] ); - $this->assertEquals( 'Test message', $messages[0]->getParts()[0]->getText() ); - } - - /** - * Tests constructor with Message prompt. - * - * @ticket 64591 - */ - public function test_constructor_with_message_prompt() { - $message = new UserMessage( array( new MessagePart( 'User message' ) ) ); - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, $message ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $this->assertSame( $message, $messages[0] ); - } - - /** - * Tests constructor with list of Messages. - * - * @ticket 64591 - */ - public function test_constructor_with_messages_list() { - $messages = array( - new UserMessage( array( new MessagePart( 'First' ) ) ), - new ModelMessage( array( new MessagePart( 'Second' ) ) ), - new UserMessage( array( new MessagePart( 'Third' ) ) ), - ); - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, $messages ); - - /** @var list $actual_messages */ - $actual_messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 3, $actual_messages ); - $this->assertSame( $messages, $actual_messages ); - } - - /** - * Tests constructor with MessageArrayShape. - * - * @ticket 64591 - */ - public function test_constructor_with_message_array_shape() { - $message_array = array( - 'role' => 'user', - 'parts' => array( - array( - 'type' => 'text', - 'text' => 'Hello from array', - ), - ), - ); - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, $message_array ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $this->assertInstanceOf( Message::class, $messages[0] ); - $this->assertEquals( 'Hello from array', $messages[0]->getParts()[0]->getText() ); - } - - /** - * Tests withText method. - * - * @ticket 64591 - */ - public function test_with_text() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->with_text( 'Some text' ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $this->assertEquals( 'Some text', $messages[0]->getParts()[0]->getText() ); - } - - /** - * Tests withText appends to existing user message. - * - * @ticket 64591 - */ - public function test_with_text_appends_to_existing_user_message() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Initial text' ); - $builder->with_text( ' Additional text' ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $parts = $messages[0]->getParts(); - $this->assertCount( 2, $parts ); - $this->assertEquals( 'Initial text', $parts[0]->getText() ); - $this->assertEquals( ' Additional text', $parts[1]->getText() ); - } - - /** - * Tests withFile method with base64 data. - * - * @ticket 64591 - */ - public function test_with_inline_file() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $base64 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=='; - $result = $builder->with_file( $base64, 'image/png' ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $file = $messages[0]->getParts()[0]->getFile(); - $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'data:image/png;base64,' . $base64, $file->getDataUri() ); - $this->assertEquals( 'image/png', $file->getMimeType() ); - } - - /** - * Tests withFile method with remote URL. - * - * @ticket 64591 - */ - public function test_with_remote_file() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->with_file( 'https://example.com/image.jpg', 'image/jpeg' ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $file = $messages[0]->getParts()[0]->getFile(); - $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'https://example.com/image.jpg', $file->getUrl() ); - $this->assertEquals( 'image/jpeg', $file->getMimeType() ); - } - - /** - * Tests withFile with data URI. - * - * @ticket 64591 - */ - public function test_with_inline_file_data_uri() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $data_uri = 'data:image/jpeg;base64,/9j/4AAQSkZJRg=='; - $result = $builder->with_file( $data_uri ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $file = $messages[0]->getParts()[0]->getFile(); - $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'image/jpeg', $file->getMimeType() ); - } - - /** - * Tests withFile with URL without explicit MIME type. - * - * @ticket 64591 - */ - public function test_with_remote_file_without_mime_type() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->with_file( 'https://example.com/audio.mp3' ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $file = $messages[0]->getParts()[0]->getFile(); - $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'https://example.com/audio.mp3', $file->getUrl() ); - $this->assertEquals( 'audio/mpeg', $file->getMimeType() ); - } - - /** - * Tests withFunctionResponse method. - * - * @ticket 64591 - */ - public function test_with_function_response() { - $function_response = new FunctionResponse( 'func_id', 'func_name', array( 'result' => 'data' ) ); - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->with_function_response( $function_response ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $this->assertSame( $function_response, $messages[0]->getParts()[0]->getFunctionResponse() ); - } - - /** - * Tests withMessageParts method. - * - * @ticket 64591 - */ - public function test_with_message_parts() { - $part1 = new MessagePart( 'Part 1' ); - $part2 = new MessagePart( 'Part 2' ); - $part3 = new MessagePart( 'Part 3' ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->with_message_parts( $part1, $part2, $part3 ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $parts = $messages[0]->getParts(); - $this->assertCount( 3, $parts ); - $this->assertEquals( 'Part 1', $parts[0]->getText() ); - $this->assertEquals( 'Part 2', $parts[1]->getText() ); - $this->assertEquals( 'Part 3', $parts[2]->getText() ); - } - - /** - * Tests withHistory method. - * - * @ticket 64591 - */ - public function test_with_history() { - $history = array( - new UserMessage( array( new MessagePart( 'User 1' ) ) ), - new ModelMessage( array( new MessagePart( 'Model 1' ) ) ), - new UserMessage( array( new MessagePart( 'User 2' ) ) ), - ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->with_history( ...$history ); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 3, $messages ); - $this->assertEquals( 'User 1', $messages[0]->getParts()[0]->getText() ); - $this->assertEquals( 'Model 1', $messages[1]->getParts()[0]->getText() ); - $this->assertEquals( 'User 2', $messages[2]->getParts()[0]->getText() ); - } - - /** - * Tests usingModel method. - * - * @ticket 64591 - */ - public function test_using_model() { - $model_config = new ModelConfig(); - $model = $this->createMock( ModelInterface::class ); - $model->method( 'getConfig' )->willReturn( $model_config ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_model( $model ); - - $this->assertSame( $builder, $result ); - - /** @var ModelInterface $actual_model */ - $actual_model = $this->get_wrapped_prompt_builder_property_value( $builder, 'model' ); - $this->assertSame( $model, $actual_model ); - } - - /** - * Tests constructor with list of string parts. - * - * @ticket 64591 - */ - public function test_constructor_with_string_parts_list() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, array( 'Part 1', 'Part 2', 'Part 3' ) ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $this->assertInstanceOf( Message::class, $messages[0] ); - $parts = $messages[0]->getParts(); - $this->assertCount( 3, $parts ); - $this->assertEquals( 'Part 1', $parts[0]->getText() ); - $this->assertEquals( 'Part 2', $parts[1]->getText() ); - $this->assertEquals( 'Part 3', $parts[2]->getText() ); - } - - /** - * Tests constructor with mixed parts list. - * - * @ticket 64591 - */ - public function test_constructor_with_mixed_parts_list() { - $part1 = new MessagePart( 'Part 1' ); - $part2_array = array( - 'type' => 'text', - 'text' => 'Part 2', - ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, array( 'String part', $part1, $part2_array ) ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - - $this->assertCount( 1, $messages ); - $parts = $messages[0]->getParts(); - $this->assertCount( 3, $parts ); - $this->assertEquals( 'String part', $parts[0]->getText() ); - $this->assertEquals( 'Part 1', $parts[1]->getText() ); - $this->assertEquals( 'Part 2', $parts[2]->getText() ); - } - - /** - * Tests full method chaining. - * - * @ticket 64591 - */ - public function test_method_chaining() { - $model = $this->createMock( ModelInterface::class ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder - ->with_text( 'Start of prompt' ) - ->with_file( 'https://example.com/img.jpg', 'image/jpeg' ) - ->using_model( $model ) - ->using_system_instruction( 'Be helpful' ) - ->using_max_tokens( 500 ) - ->using_temperature( 0.8 ) - ->using_top_p( 0.95 ) - ->using_top_k( 50 ) - ->using_candidate_count( 2 ) - ->as_json_response(); - - $this->assertSame( $builder, $result ); - - /** @var list $messages */ - $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); - $this->assertCount( 1, $messages ); - $this->assertCount( 2, $messages[0]->getParts() ); - - /** @var ModelInterface $actual_model */ - $actual_model = $this->get_wrapped_prompt_builder_property_value( $builder, 'model' ); - $this->assertSame( $model, $actual_model ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'Be helpful', $config->getSystemInstruction() ); - $this->assertEquals( 500, $config->getMaxTokens() ); - $this->assertEquals( 0.8, $config->getTemperature() ); - $this->assertEquals( 0.95, $config->getTopP() ); - $this->assertEquals( 50, $config->getTopK() ); - $this->assertEquals( 2, $config->getCandidateCount() ); - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); - } - - /** - * Tests usingModelPreference skips unavailable model IDs and falls back. - * - * @ticket 64591 - */ - public function test_using_model_preference_skips_unavailable_model_id() { - $result = $this->create_test_result( 'Fallback model result' ); - $other_metadata = $this->create_text_model_metadata_with_input_support( 'other-id' ); - $fallback_metadata = $this->create_text_model_metadata_with_input_support( 'fallback-id' ); - $model = $this->create_mock_text_generation_model( $result, $fallback_metadata ); - - $this->registry->expects( $this->once() ) - ->method( 'getProviderId' ) - ->with( 'test-provider' ) - ->willReturn( 'test-provider' ); - - $this->registry->expects( $this->once() ) - ->method( 'findProviderModelsMetadataForSupport' ) - ->with( 'test-provider', $this->isInstanceOf( ModelRequirements::class ) ) - ->willReturn( array( $other_metadata, $fallback_metadata ) ); - - $this->registry->expects( $this->once() ) - ->method( 'getProviderModel' ) - ->with( 'test-provider', 'fallback-id', $this->isInstanceOf( ModelConfig::class ) ) - ->willReturn( $model ); - - $this->registry->expects( $this->never() ) - ->method( 'findModelsMetadataForSupport' ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Test prompt' ); - $builder->using_provider( 'test-provider' ); - $builder->using_model_preference( 'missing-id', 'fallback-id' ); - - $actual_result = $builder->generate_text_result(); - - $this->assertSame( $result, $actual_result ); - } - - /** - * Tests usingModelPreference falls back to discovery when no preferences available. - * - * @ticket 64591 - */ - public function test_using_model_preference_falls_back_to_discovery() { - $result = $this->create_test_result( 'Discovered model result' ); - $metadata = $this->create_text_model_metadata_with_input_support( 'discovered-id' ); - $provider_metadata = $this->create_test_provider_metadata(); - $provider_models_metadata = new ProviderModelsMetadata( $provider_metadata, array( $metadata ) ); - - $model = $this->create_mock_text_generation_model( $result, $metadata ); - - $this->registry->expects( $this->once() ) - ->method( 'findModelsMetadataForSupport' ) - ->with( $this->isInstanceOf( ModelRequirements::class ) ) - ->willReturn( array( $provider_models_metadata ) ); - - $this->registry->expects( $this->once() ) - ->method( 'getProviderModel' ) - ->with( $provider_metadata->getId(), 'discovered-id', $this->isInstanceOf( ModelConfig::class ) ) - ->willReturn( $model ); - - $this->registry->expects( $this->never() ) - ->method( 'findProviderModelsMetadataForSupport' ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Test prompt' ); - $builder->using_model_preference( 'unavailable-model' ); - - $actual_result = $builder->generate_text_result(); - - $this->assertSame( $result, $actual_result ); - } - - /** - * Tests usingModelPreference respects priority order when multiple preferred models are available. - * - * @ticket 64591 - */ - public function test_using_model_preference_respects_order_when_multiple_available() { - $result = $this->create_test_result( 'Second choice result' ); - $second_choice_metadata = $this->create_text_model_metadata_with_input_support( 'second-choice' ); - $third_choice_metadata = $this->create_text_model_metadata_with_input_support( 'third-choice' ); - $provider_metadata = $this->create_test_provider_metadata(); - - $model = $this->create_mock_text_generation_model( $result, $second_choice_metadata ); - - $provider_models_metadata = new ProviderModelsMetadata( - $provider_metadata, - array( $third_choice_metadata, $second_choice_metadata ) - ); - - $this->registry->expects( $this->once() ) - ->method( 'findModelsMetadataForSupport' ) - ->with( $this->isInstanceOf( ModelRequirements::class ) ) - ->willReturn( array( $provider_models_metadata ) ); - - $this->registry->expects( $this->once() ) - ->method( 'getProviderModel' ) - ->with( $provider_metadata->getId(), 'second-choice', $this->isInstanceOf( ModelConfig::class ) ) - ->willReturn( $model ); - - $this->registry->expects( $this->never() ) - ->method( 'findProviderModelsMetadataForSupport' ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Test prompt' ); - $builder->using_model_preference( 'first-choice', 'second-choice', 'third-choice' ); - - $actual_result = $builder->generate_text_result(); - - $this->assertSame( $result, $actual_result ); - } - - /** - * Tests usingModelPreference rejects invalid preference types, returning WP_Error. - * - * @ticket 64591 - */ - public function test_using_model_preference_with_invalid_type_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $builder->using_model_preference( 123 ); - $result = $builder->generate_text_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( - 'Model preferences must be model identifiers', - $result->get_error_message() - ); - } - - /** - * Tests usingModelPreference rejects malformed preference tuples, returning WP_Error. - * - * @ticket 64591 - */ - public function test_using_model_preference_with_invalid_tuple_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $builder->using_model_preference( - array( - 'provider' => 'test', - 'model' => 'id', - ) - ); - $result = $builder->generate_text_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( - 'Model preference tuple must contain model identifier and provider ID.', - $result->get_error_message() - ); - } - - /** - * Tests usingModelPreference rejects empty preference identifiers, returning WP_Error. - * - * @ticket 64591 - */ - public function test_using_model_preference_with_empty_identifier_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $builder->using_model_preference( ' ' ); - $result = $builder->generate_text_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( - 'Model preference identifiers cannot be empty.', - $result->get_error_message() - ); - } - - /** - * Tests usingModelPreference rejects calls without preferences, returning WP_Error. - * - * @ticket 64591 - */ - public function test_using_model_preference_without_arguments_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $builder->using_model_preference(); - $result = $builder->generate_text_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( - 'At least one model preference must be provided.', - $result->get_error_message() - ); - } - - /** - * Tests usingModelConfig method. - * - * @ticket 64591 - */ - public function test_using_model_config() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $builder->using_system_instruction( 'Builder instruction' ) - ->using_max_tokens( 500 ) - ->using_temperature( 0.5 ); - - $config = new ModelConfig(); - $config->setSystemInstruction( 'Config instruction' ); - $config->setMaxTokens( 1000 ); - $config->setTopP( 0.9 ); - $config->setTopK( 40 ); - - $result = $builder->using_model_config( $config ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $merged_config */ - $merged_config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'Builder instruction', $merged_config->getSystemInstruction() ); - $this->assertEquals( 500, $merged_config->getMaxTokens() ); - $this->assertEquals( 0.5, $merged_config->getTemperature() ); - $this->assertEquals( 0.9, $merged_config->getTopP() ); - $this->assertEquals( 40, $merged_config->getTopK() ); - } - - /** - * Tests usingModelConfig with custom options. - * - * @ticket 64591 - */ - public function test_using_model_config_with_custom_options() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $config = new ModelConfig(); - $config->setCustomOption( 'stopSequences', array( 'CONFIG_STOP' ) ); - $config->setCustomOption( 'otherOption', 'value' ); - - $builder->using_model_config( $config ); - - /** @var ModelConfig $merged_config */ - $merged_config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $custom_options = $merged_config->getCustomOptions(); - - $this->assertArrayHasKey( 'stopSequences', $custom_options ); - $this->assertIsArray( $custom_options['stopSequences'] ); - $this->assertEquals( array( 'CONFIG_STOP' ), $custom_options['stopSequences'] ); - $this->assertArrayHasKey( 'otherOption', $custom_options ); - $this->assertEquals( 'value', $custom_options['otherOption'] ); - - $builder->using_stop_sequences( 'STOP' ); - - /** @var ModelConfig $merged_config */ - $merged_config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( array( 'STOP' ), $merged_config->getStopSequences() ); - - $custom_options = $merged_config->getCustomOptions(); - $this->assertArrayHasKey( 'stopSequences', $custom_options ); - $this->assertEquals( array( 'CONFIG_STOP' ), $custom_options['stopSequences'] ); - $this->assertArrayHasKey( 'otherOption', $custom_options ); - $this->assertEquals( 'value', $custom_options['otherOption'] ); - } - - /** - * Tests usingProvider method. - * - * @ticket 64591 - */ - public function test_using_provider() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_provider( 'test-provider' ); - - $this->assertSame( $builder, $result ); - - $actual_provider = $this->get_wrapped_prompt_builder_property_value( $builder, 'providerIdOrClassName' ); - $this->assertEquals( 'test-provider', $actual_provider ); - } - - /** - * Tests usingSystemInstruction method. - * - * @ticket 64591 - */ - public function test_using_system_instruction() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_system_instruction( 'You are a helpful assistant.' ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'You are a helpful assistant.', $config->getSystemInstruction() ); - } - - /** - * Tests usingMaxTokens method. - * - * @ticket 64591 - */ - public function test_using_max_tokens() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_max_tokens( 1000 ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 1000, $config->getMaxTokens() ); - } - - /** - * Tests usingTemperature method. - * - * @ticket 64591 - */ - public function test_using_temperature() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_temperature( 0.7 ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 0.7, $config->getTemperature() ); - } - - /** - * Tests usingTopP method. - * - * @ticket 64591 - */ - public function test_using_top_p() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_top_p( 0.9 ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 0.9, $config->getTopP() ); - } - - /** - * Tests usingTopK method. - * - * @ticket 64591 - */ - public function test_using_top_k() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_top_k( 40 ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 40, $config->getTopK() ); - } - - /** - * Tests usingStopSequences method. - * - * @ticket 64591 - */ - public function test_using_stop_sequences() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_stop_sequences( 'STOP', 'END', '###' ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( array( 'STOP', 'END', '###' ), $config->getStopSequences() ); - } - - /** - * Tests usingCandidateCount method. - * - * @ticket 64591 - */ - public function test_using_candidate_count() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_candidate_count( 3 ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 3, $config->getCandidateCount() ); - } - - /** - * Tests asOutputMimeType method. - * - * @ticket 64591 - */ - public function test_using_output_mime() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_output_mime_type( 'application/json' ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); - } - - /** - * Tests asOutputSchema method. - * - * @ticket 64591 - */ - public function test_using_output_schema() { - $schema = array( - 'type' => 'object', - 'properties' => array( - 'name' => array( 'type' => 'string' ), - ), - ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_output_schema( $schema ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( $schema, $config->getOutputSchema() ); - } - - /** - * Tests asOutputModalities method. - * - * @ticket 64591 - */ - public function test_using_output_modalities() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_output_modalities( - ModalityEnum::text(), - ModalityEnum::image() - ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $modalities = $config->getOutputModalities(); - $this->assertCount( 2, $modalities ); - $this->assertTrue( $modalities[0]->isText() ); - $this->assertTrue( $modalities[1]->isImage() ); - } - - /** - * Tests asJsonResponse method. - * - * @ticket 64591 - */ - public function test_as_json_response() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_json_response(); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); - } - - /** - * Tests asJsonResponse with schema. - * - * @ticket 64591 - */ - public function test_as_json_response_with_schema() { - $schema = array( 'type' => 'array' ); - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_json_response( $schema ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); - $this->assertEquals( $schema, $config->getOutputSchema() ); - } - - /** - * Tests validateMessages with empty messages returns WP_Error. - * - * @ticket 64591 - */ - public function test_validate_messages_empty_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'Cannot generate from an empty prompt', $result->get_error_message() ); - } - - /** - * Tests validateMessages with non-user first message returns WP_Error. - * - * @ticket 64591 - */ - public function test_validate_messages_non_user_first_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( - $this->registry, - array( - new ModelMessage( array( new MessagePart( 'Model says hi' ) ) ), - new UserMessage( array( new MessagePart( 'User response' ) ) ), - ) - ); - - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'The first message must be from a user role', $result->get_error_message() ); - } - - /** - * Tests validateMessages with non-user last message returns WP_Error. - * - * @ticket 64591 - */ - public function test_validate_messages_non_user_last_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $builder->with_text( 'Initial user message' ); - - $builder->with_history( - new UserMessage( array( new MessagePart( 'Historical user message' ) ) ), - new ModelMessage( array( new MessagePart( 'Historical model response' ) ) ) - ); - - // Manually add a model message as the last message. - $reflection_class = new ReflectionClass( WP_AI_Client_Prompt_Builder::class ); - $builder_property = $reflection_class->getProperty( 'builder' ); - self::set_accessible( $builder_property ); - $wrapped_builder = $builder_property->getValue( $builder ); - $reflection_class2 = new ReflectionClass( get_class( $wrapped_builder ) ); - $messages_property = $reflection_class2->getProperty( 'messages' ); - self::set_accessible( $messages_property ); - $messages = $messages_property->getValue( $wrapped_builder ); - $messages[] = new ModelMessage( array( new MessagePart( 'Final model message' ) ) ); - $messages_property->setValue( $wrapped_builder, $messages ); - - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'The last message must be from a user role', $result->get_error_message() ); - } - - /** - * Tests parseMessage with empty string returns WP_Error on termination. - * - * @ticket 64591 - */ - public function test_parse_message_empty_string_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, ' ' ); - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'Cannot create a message from an empty string', $result->get_error_message() ); - } - - /** - * Tests parseMessage with empty array returns WP_Error on termination. - * - * @ticket 64591 - */ - public function test_parse_message_empty_array_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, array() ); - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'Cannot create a message from an empty array', $result->get_error_message() ); - } - - /** - * Tests parseMessage with invalid type returns WP_Error on termination. - * - * @ticket 64591 - */ - public function test_parse_message_invalid_type_returns_wp_error() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 123 ); - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'Input must be a string, MessagePart, MessagePartArrayShape', $result->get_error_message() ); - } - - /** - * Tests that wp_ai_client_prompt() with an empty string does not throw. - * - * Constructor exceptions are caught and surfaced as WP_Error from - * generating methods, consistent with the __call() wrapping behavior. - * - * @ticket 64591 - */ - public function test_wp_ai_client_prompt_empty_string_returns_wp_error() { - $builder = wp_ai_client_prompt( ' ' ); - - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $builder ); - - $result = $builder->generate_text(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - } - - /** - * Tests generateResult with text output modality. - * - * @ticket 64591 - */ - public function test_generate_result_with_text_modality() { - $result = $this->createMock( GenerativeAiResult::class ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Test prompt' ); - $builder->using_model( $model ); - - $actual_result = $builder->generate_result(); - $this->assertSame( $result, $actual_result ); - } - - /** - * Tests generateResult with image output modality. - * - * @ticket 64591 - */ - public function test_generate_result_with_image_modality() { - $result = new GenerativeAiResult( - 'test-result', - array( - new Candidate( - new ModelMessage( array( new MessagePart( new File( 'data:image/png;base64,iVBORw0KGgo=', 'image/png' ) ) ) ), - FinishReasonEnum::stop() - ), - ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_image_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate an image' ); - $builder->using_model( $model ); - $builder->as_output_modalities( ModalityEnum::image() ); - - $actual_result = $builder->generate_result(); - $this->assertSame( $result, $actual_result ); - } - - /** - * Tests generateResult with audio output modality. - * - * @ticket 64591 - */ - public function test_generate_result_with_audio_modality() { - $result = new GenerativeAiResult( - 'test-result', - array( - new Candidate( - new ModelMessage( array( new MessagePart( new File( 'data:audio/wav;base64,UklGRigE=', 'audio/wav' ) ) ) ), - FinishReasonEnum::stop() - ), - ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_speech_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate speech' ); - $builder->using_model( $model ); - $builder->as_output_modalities( ModalityEnum::audio() ); - - $actual_result = $builder->generate_result(); - $this->assertSame( $result, $actual_result ); - } - - /** - * Tests generateResult with multimodal output. - * - * @ticket 64591 - */ - public function test_generate_result_with_multimodal_output() { - $result = new GenerativeAiResult( - 'test-result', - array( new Candidate( new ModelMessage( array( new MessagePart( 'Generated text' ) ) ), FinishReasonEnum::stop() ) ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate multimodal' ); - $builder->using_model( $model ); - $builder->as_output_modalities( ModalityEnum::text(), ModalityEnum::image() ); - - $actual_result = $builder->generate_result(); - $this->assertSame( $result, $actual_result ); - } - - /** - * Tests generateResult returns WP_Error when model does not support modality. - * - * @ticket 64591 - */ - public function test_generate_result_returns_wp_error_for_unsupported_modality() { - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->createMock( ModelInterface::class ); - $model->method( 'metadata' )->willReturn( $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Test prompt' ); - $builder->using_model( $model ); - - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'does not support text generation', $result->get_error_message() ); - } - - /** - * Tests generateResult returns WP_Error for unsupported output modality. - * - * @ticket 64591 - */ - public function test_generate_result_returns_wp_error_for_unsupported_output_modality() { - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->createMock( ModelInterface::class ); - $model->method( 'metadata' )->willReturn( $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Test prompt' ); - $builder->using_model( $model ); - $builder->as_output_modalities( ModalityEnum::video() ); - - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'does not support video generation', $result->get_error_message() ); - } - - /** - * Tests generateTextResult method. - * - * @ticket 64591 - */ - public function test_generate_text_result() { - $result = new GenerativeAiResult( - 'test-result', - array( new Candidate( new ModelMessage( array( new MessagePart( 'Generated text' ) ) ), FinishReasonEnum::stop() ) ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Test prompt' ); - $builder->using_model( $model ); - - $actual_result = $builder->generate_text_result(); - $this->assertSame( $result, $actual_result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $modalities = $config->getOutputModalities(); - $this->assertNotNull( $modalities ); - $this->assertTrue( $modalities[0]->isText() ); - } - - /** - * Tests generateImageResult method. - * - * @ticket 64591 - */ - public function test_generate_image_result() { - $result = new GenerativeAiResult( - 'test-result', - array( - new Candidate( - new ModelMessage( array( new MessagePart( new File( 'data:image/png;base64,iVBORw0KGgo=', 'image/png' ) ) ) ), - FinishReasonEnum::stop() - ), - ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_image_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate image' ); - $builder->using_model( $model ); - - $actual_result = $builder->generate_image_result(); - $this->assertSame( $result, $actual_result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $modalities = $config->getOutputModalities(); - $this->assertNotNull( $modalities ); - $this->assertTrue( $modalities[0]->isImage() ); - } - - /** - * Tests generateText returns WP_Error when no candidates. - * - * @ticket 64591 - */ - public function test_generate_text_returns_wp_error_when_no_candidates() { - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model_with_exception( - new RuntimeException( 'No candidates were generated' ), - $metadata - ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate text' ); - $builder->using_model( $model ); - - $result = $builder->generate_text(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'No candidates were generated', $result->get_error_message() ); - } - - /** - * Tests generateText returns WP_Error when message has no parts. - * - * @ticket 64591 - */ - public function test_generate_text_returns_wp_error_when_no_parts() { - $message = new ModelMessage( array() ); - $candidate = new Candidate( $message, FinishReasonEnum::stop() ); - - $result = new GenerativeAiResult( - 'test-result', - array( $candidate ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate text' ); - $builder->using_model( $model ); - - $actual_result = $builder->generate_text(); - - $this->assertWPError( $actual_result ); - $this->assertSame( 'prompt_builder_error', $actual_result->get_error_code() ); - $this->assertStringContainsString( 'No text content found in first candidate', $actual_result->get_error_message() ); - } - - /** - * Tests generateText returns WP_Error when part has no text. - * - * @ticket 64591 - */ - public function test_generate_text_returns_wp_error_when_part_has_no_text() { - $file = new File( 'https://example.com/image.jpg', 'image/jpeg' ); - $message_part = new MessagePart( $file ); - $message = new ModelMessage( array( $message_part ) ); - $candidate = new Candidate( $message, FinishReasonEnum::stop() ); - - $result = new GenerativeAiResult( - 'test-result', - array( $candidate ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate text' ); - $builder->using_model( $model ); - - $actual_result = $builder->generate_text(); - - $this->assertWPError( $actual_result ); - $this->assertSame( 'prompt_builder_error', $actual_result->get_error_code() ); - $this->assertStringContainsString( 'No text content found in first candidate', $actual_result->get_error_message() ); - } - - /** - * Tests generateTexts method. - * - * @ticket 64591 - */ - public function test_generate_texts() { - $candidates = array( - new Candidate( - new ModelMessage( array( new MessagePart( 'Text 1' ) ) ), - FinishReasonEnum::stop() - ), - new Candidate( - new ModelMessage( array( new MessagePart( 'Text 2' ) ) ), - FinishReasonEnum::stop() - ), - new Candidate( - new ModelMessage( array( new MessagePart( 'Text 3' ) ) ), - FinishReasonEnum::stop() - ), - ); - - $result = new GenerativeAiResult( - 'test-result-id', - $candidates, - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate texts' ); - $builder->using_model( $model ); - - $texts = $builder->generate_texts( 3 ); - - $this->assertCount( 3, $texts ); - $this->assertEquals( 'Text 1', $texts[0] ); - $this->assertEquals( 'Text 2', $texts[1] ); - $this->assertEquals( 'Text 3', $texts[2] ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 3, $config->getCandidateCount() ); - } - - /** - * Tests generateTexts returns WP_Error when no text generated. - * - * @ticket 64591 - */ - public function test_generate_texts_returns_wp_error_when_no_text_generated() { - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_generation_model_with_exception( - new RuntimeException( 'No text was generated from any candidates' ), - $metadata - ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate texts' ); - $builder->using_model( $model ); - - $result = $builder->generate_texts(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertStringContainsString( 'No text was generated from any candidates', $result->get_error_message() ); - } - - /** - * Tests generateImage method. - * - * @ticket 64591 - */ - public function test_generate_image() { - $file = new File( 'https://example.com/generated.jpg', 'image/jpeg' ); - $message_part = new MessagePart( $file ); - $message = new ModelMessage( array( $message_part ) ); - $candidate = new Candidate( $message, FinishReasonEnum::stop() ); - - $result = new GenerativeAiResult( - 'test-result', - array( $candidate ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_image_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate image' ); - $builder->using_model( $model ); - - $generated_file = $builder->generate_image(); - $this->assertSame( $file, $generated_file ); - } - - /** - * Tests generateImage returns WP_Error when no image file. - * - * @ticket 64591 - */ - public function test_generate_image_returns_wp_error_when_no_file() { - $message_part = new MessagePart( 'Text instead of image' ); - $message = new ModelMessage( array( $message_part ) ); - $candidate = new Candidate( $message, FinishReasonEnum::stop() ); - - $result = new GenerativeAiResult( - 'test-result', - array( $candidate ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_image_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate image' ); - $builder->using_model( $model ); - - $actual_result = $builder->generate_image(); - - $this->assertWPError( $actual_result ); - $this->assertSame( 'prompt_builder_error', $actual_result->get_error_code() ); - $this->assertStringContainsString( 'No file content found in first candidate', $actual_result->get_error_message() ); - } - - /** - * Tests generateImages method. - * - * @ticket 64591 - */ - public function test_generate_images() { - $files = array( - new File( 'https://example.com/img1.jpg', 'image/jpeg' ), - new File( 'https://example.com/img2.jpg', 'image/jpeg' ), - ); - - $candidates = array(); - foreach ( $files as $file ) { - $candidates[] = new Candidate( - new Message( MessageRoleEnum::model(), array( new MessagePart( $file ) ) ), - FinishReasonEnum::stop() - ); - } - - $result = new GenerativeAiResult( - 'test-result-id', - $candidates, - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_image_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate images' ); - $builder->using_model( $model ); - - $generated_files = $builder->generate_images( 2 ); - - $this->assertCount( 2, $generated_files ); - $this->assertSame( $files[0], $generated_files[0] ); - $this->assertSame( $files[1], $generated_files[1] ); - } - - /** - * Tests convertTextToSpeech method. - * - * @ticket 64591 - */ - public function test_convert_text_to_speech() { - $file = new File( 'https://example.com/audio.mp3', 'audio/mp3' ); - $message_part = new MessagePart( $file ); - $message = new Message( MessageRoleEnum::model(), array( $message_part ) ); - $candidate = new Candidate( $message, FinishReasonEnum::stop() ); - - $result = new GenerativeAiResult( - 'test-result', - array( $candidate ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_to_speech_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Convert this text' ); - $builder->using_model( $model ); - - $audio_file = $builder->convert_text_to_speech(); - $this->assertSame( $file, $audio_file ); - } - - /** - * Tests convertTextToSpeeches method. - * - * @ticket 64591 - */ - public function test_convert_text_to_speeches() { - $files = array( - new File( 'https://example.com/audio1.mp3', 'audio/mp3' ), - new File( 'https://example.com/audio2.mp3', 'audio/mp3' ), - ); - - $candidates = array(); - foreach ( $files as $file ) { - $candidates[] = new Candidate( - new Message( MessageRoleEnum::model(), array( new MessagePart( $file ) ) ), - FinishReasonEnum::stop() - ); - } - - $result = new GenerativeAiResult( - 'test-result-id', - $candidates, - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_text_to_speech_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Convert this text' ); - $builder->using_model( $model ); - - $audio_files = $builder->convert_text_to_speeches( 2 ); - - $this->assertCount( 2, $audio_files ); - $this->assertSame( $files[0], $audio_files[0] ); - $this->assertSame( $files[1], $audio_files[1] ); - } - - /** - * Tests generateSpeech method. - * - * @ticket 64591 - */ - public function test_generate_speech() { - $file = new File( 'https://example.com/speech.mp3', 'audio/mp3' ); - $message_part = new MessagePart( $file ); - $message = new Message( MessageRoleEnum::model(), array( $message_part ) ); - $candidate = new Candidate( $message, FinishReasonEnum::stop() ); - - $result = new GenerativeAiResult( - 'test-result', - array( $candidate ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_speech_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate speech' ); - $builder->using_model( $model ); - - $speech_file = $builder->generate_speech(); - $this->assertSame( $file, $speech_file ); - } - - /** - * Tests generateSpeeches method. - * - * @ticket 64591 - */ - public function test_generate_speeches() { - $files = array( - new File( 'https://example.com/speech1.mp3', 'audio/mp3' ), - new File( 'https://example.com/speech2.mp3', 'audio/mp3' ), - new File( 'https://example.com/speech3.mp3', 'audio/mp3' ), - ); - - $candidates = array(); - foreach ( $files as $file ) { - $candidates[] = new Candidate( - new Message( MessageRoleEnum::model(), array( new MessagePart( $file ) ) ), - FinishReasonEnum::stop(), - 10 - ); - } - - $result = new GenerativeAiResult( - 'test-result-id', - $candidates, - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_text_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_speech_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate speech' ); - $builder->using_model( $model ); - - $speech_files = $builder->generate_speeches( 3 ); - - $this->assertCount( 3, $speech_files ); - $this->assertSame( $files[0], $speech_files[0] ); - $this->assertSame( $files[1], $speech_files[1] ); - $this->assertSame( $files[2], $speech_files[2] ); - } - - /** - * Tests generateVideo method. - * - * @ticket 64591 - */ - public function test_generate_video() { - $file = new File( 'https://example.com/video.mp4', 'video/mp4' ); - $message_part = new MessagePart( $file ); - $message = new Message( MessageRoleEnum::model(), array( $message_part ) ); - $candidate = new Candidate( $message, FinishReasonEnum::stop() ); - - $result = new GenerativeAiResult( - 'test-result', - array( $candidate ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_video_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_video_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate video' ); - $builder->using_model( $model ); - - $video_file = $builder->generate_video(); - $this->assertSame( $file, $video_file ); - } - - /** - * Tests generateVideos method. - * - * @ticket 64591 - */ - public function test_generate_videos() { - $files = array( - new File( 'https://example.com/video1.mp4', 'video/mp4' ), - new File( 'https://example.com/video2.mp4', 'video/mp4' ), - ); - - $candidates = array(); - foreach ( $files as $file ) { - $candidates[] = new Candidate( - new Message( MessageRoleEnum::model(), array( new MessagePart( $file ) ) ), - FinishReasonEnum::stop() - ); - } - - $result = new GenerativeAiResult( - 'test-result-id', - $candidates, - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_video_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_video_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate videos' ); - $builder->using_model( $model ); - - $video_files = $builder->generate_videos( 2 ); - - $this->assertCount( 2, $video_files ); - $this->assertSame( $files[0], $video_files[0] ); - $this->assertSame( $files[1], $video_files[1] ); - } - - /** - * Tests generateVideoResult method. - * - * @ticket 64591 - */ - public function test_generate_video_result() { - $result = new GenerativeAiResult( - 'test-result', - array( - new Candidate( - new ModelMessage( array( new MessagePart( new File( 'data:video/mp4;base64,AAAAAA==', 'video/mp4' ) ) ) ), - FinishReasonEnum::stop() - ), - ), - new TokenUsage( 100, 50, 150 ), - $this->create_test_provider_metadata(), - $this->create_test_video_model_metadata() - ); - - $metadata = $this->createMock( ModelMetadata::class ); - $metadata->method( 'getId' )->willReturn( 'test-model' ); - - $model = $this->create_mock_video_generation_model( $result, $metadata ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry, 'Generate video' ); - $builder->using_model( $model ); - - $actual_result = $builder->generate_video_result(); - $this->assertSame( $result, $actual_result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $modalities = $config->getOutputModalities(); - $this->assertNotNull( $modalities ); - $this->assertTrue( $modalities[0]->isVideo() ); - } - - /** - * Tests asOutputMediaOrientation method. - * - * @ticket 64591 - */ - public function test_as_output_media_orientation() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_output_media_orientation( MediaOrientationEnum::landscape() ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertTrue( $config->getOutputMediaOrientation()->isLandscape() ); - } - - /** - * Tests asOutputMediaAspectRatio method. - * - * @ticket 64591 - */ - public function test_as_output_media_aspect_ratio() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_output_media_aspect_ratio( '16:9' ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( '16:9', $config->getOutputMediaAspectRatio() ); - } - - /** - * Tests asOutputSpeechVoice method. - * - * @ticket 64591 - */ - public function test_as_output_speech_voice() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->as_output_speech_voice( 'alloy' ); - - $this->assertSame( $builder, $result ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'alloy', $config->getOutputSpeechVoice() ); - } - - /** - * Tests using_abilities with ability name string. - * - * @ticket 64591 - */ - public function test_using_ability_with_string() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_abilities( 'wpaiclienttests/simple' ); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNotNull( $declarations ); - $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'A simple test ability with no parameters.', $declarations[0]->getDescription() ); - } - - /** - * Tests using_abilities with WP_Ability object. - * - * @ticket 64591 - */ - public function test_using_ability_with_wp_ability_object() { - $ability = wp_get_ability( 'wpaiclienttests/with-params' ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_abilities( $ability ); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNotNull( $declarations ); - $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[0]->getName() ); - $this->assertEquals( 'A test ability that accepts parameters.', $declarations[0]->getDescription() ); - - $params = $declarations[0]->getParameters(); - $this->assertNotNull( $params ); - $this->assertArrayHasKey( 'properties', $params ); - $this->assertArrayHasKey( 'title', $params['properties'] ); - } - - /** - * Tests using_abilities with multiple abilities. - * - * @ticket 64591 - */ - public function test_using_ability_with_multiple_abilities() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_abilities( - 'wpaiclienttests/simple', - 'wpaiclienttests/with-params', - 'wpaiclienttests/returns-error' - ); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNotNull( $declarations ); - $this->assertCount( 3, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__returns-error', $declarations[2]->getName() ); - } - - /** - * Tests using_abilities skips non-existent abilities. - * - * @ticket 64591 - * - * @expectedIncorrectUsage WP_AI_Client_Prompt_Builder::using_abilities - */ - public function test_using_ability_skips_nonexistent_abilities() { - $this->setExpectedIncorrectUsage( 'WP_Abilities_Registry::get_registered' ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_abilities( - 'wpaiclienttests/simple', - 'nonexistent/ability', - 'wpaiclienttests/with-params' - ); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNotNull( $declarations ); - $this->assertCount( 2, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); - } - - /** - * Tests using_abilities with empty arguments returns self. - * - * @ticket 64591 - */ - public function test_using_ability_with_no_arguments_returns_self() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_abilities(); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNull( $declarations ); - } - - /** - * Tests using_abilities with mixed strings and WP_Ability objects. - * - * @ticket 64591 - */ - public function test_using_ability_with_mixed_types() { - $ability = wp_get_ability( 'wpaiclienttests/with-params' ); - - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_abilities( - 'wpaiclienttests/simple', - $ability - ); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNotNull( $declarations ); - $this->assertCount( 2, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); - } - - /** - * Tests using_abilities with hyphenated ability name. - * - * @ticket 64591 - */ - public function test_using_ability_with_hyphenated_name() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder->using_abilities( 'wpaiclienttests/hyphen-test' ); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNotNull( $declarations ); - $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__hyphen-test', $declarations[0]->getName() ); - } - - /** - * Tests using_abilities can be chained with other methods. - * - * @ticket 64591 - */ - public function test_using_ability_method_chaining() { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - $result = $builder - ->with_text( 'Test prompt' ) - ->using_abilities( 'wpaiclienttests/simple' ) - ->using_system_instruction( 'You are a helpful assistant' ) - ->using_max_tokens( 500 ); - - $this->assertSame( $builder, $result ); - - $declarations = $this->get_function_declarations( $builder ); - - $this->assertNotNull( $declarations ); - $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - - /** @var ModelConfig $config */ - $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - - $this->assertEquals( 'You are a helpful assistant', $config->getSystemInstruction() ); - $this->assertEquals( 500, $config->getMaxTokens() ); - } - - /** - * Tests that is_supported returns false when prevent prompt filter returns true. - * - * @ticket 64591 - */ - public function test_is_supported_returns_false_when_filter_prevents_prompt() { - add_filter( 'wp_ai_client_prevent_prompt', '__return_true' ); - - $builder = new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry(), 'Test prompt' ); - - $this->assertFalse( $builder->is_supported() ); - } - - /** - * Tests that generate_result returns WP_Error when prevent prompt filter returns true. - * - * @ticket 64591 - */ - public function test_generate_result_returns_wp_error_when_filter_prevents_prompt() { - add_filter( 'wp_ai_client_prevent_prompt', '__return_true' ); - - $builder = new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry(), 'Test prompt' ); - - $result = $builder->generate_result(); - - $this->assertWPError( $result ); - $this->assertSame( 'prompt_prevented', $result->get_error_code() ); - $this->assertSame( 'Prompt execution was prevented by a filter.', $result->get_error_message() ); - } - - /** - * Tests that prevent prompt filter receives a clone of the builder instance. - * - * @ticket 64591 - */ - public function test_prevent_prompt_filter_receives_cloned_builder_instance() { - $captured_builder = null; - - add_filter( - 'wp_ai_client_prevent_prompt', - static function ( $prevent, $builder ) use ( &$captured_builder ) { - $captured_builder = $builder; - return $prevent; - }, - 10, - 2 - ); - - $builder = new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry(), 'Test prompt' ); - - // Test with is_supported(). - $builder->is_supported(); - $this->assertNotSame( $builder, $captured_builder, 'Filter should receive a clone, not the same instance' ); - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $captured_builder ); - - // Reset and test with generate_result(). - $captured_builder = null; - $builder2 = new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry(), 'Test prompt' ); - $builder2->generate_result(); - $this->assertNotSame( $builder2, $captured_builder, 'Filter should receive a clone, not the same instance' ); - $this->assertInstanceOf( WP_AI_Client_Prompt_Builder::class, $captured_builder ); - } - - /** - * Tests that once in error state, subsequent fluent calls return the same instance. - * - * @ticket 64591 - */ - public function test_error_state_fluent_calls_return_same_instance() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - // Trigger an error state by calling a nonexistent method. - $prompt_builder->nonexistent_method(); - - $result = $prompt_builder->with_text( 'Test' ); - $this->assertSame( $prompt_builder, $result, 'Fluent method should return same instance when in error state' ); - - $result = $prompt_builder->using_max_tokens( 100 ); - $this->assertSame( $prompt_builder, $result, 'Fluent method should return same instance when in error state' ); - } - - /** - * Tests that support check methods return false when in error state. - * - * @ticket 64591 - */ - public function test_support_check_methods_return_false_in_error_state() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - // Trigger an error state by calling a nonexistent method. - $prompt_builder->nonexistent_method(); - - $this->assertFalse( $prompt_builder->is_supported(), 'is_supported should return false when in error state' ); - $this->assertFalse( $prompt_builder->is_supported_for_text_generation(), 'is_supported_for_text_generation should return false when in error state' ); - } - - /** - * Tests that generating methods return WP_Error when in error state. - * - * @ticket 64591 - */ - public function test_generating_methods_return_wp_error_in_error_state() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - // Trigger an error state by calling a nonexistent method. - $prompt_builder->nonexistent_method(); - - $result = $prompt_builder->generate_text(); - $this->assertWPError( $result, 'generate_text should return WP_Error when in error state' ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - } - - /** - * Tests that exception in terminating method is caught and returned as WP_Error. - * - * @ticket 64591 - */ - public function test_exception_in_terminating_method_caught_and_returned() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $error = $prompt_builder->generate_text(); - - $this->assertWPError( $error, 'generate_text should return WP_Error when exception occurs' ); - $this->assertSame( 'prompt_builder_error', $error->get_error_code() ); - - $error_data = $error->get_error_data(); - $this->assertIsArray( $error_data ); - $this->assertArrayHasKey( 'exception_class', $error_data ); - $this->assertNotEmpty( $error_data['exception_class'] ); - } - - /** - * Tests that exception in chained method is caught and returned by the terminating method as WP_Error. - * - * @ticket 64591 - */ - /** - * Tests that every public method on the SDK PromptBuilder has a resolvable snake_case equivalent. - * - * @ticket 64591 - * - * @dataProvider data_sdk_public_methods - * - * @param string $snake_case The snake_case method name. - * @param string $camel_case The original camelCase method name. - */ - public function test_snake_case_resolves_to_sdk_method( string $snake_case, string $camel_case ) { - $builder = new WP_AI_Client_Prompt_Builder( $this->registry ); - - $reflection = new ReflectionClass( WP_AI_Client_Prompt_Builder::class ); - $method = $reflection->getMethod( 'get_builder_callable' ); - self::set_accessible( $method ); - - $callable = $method->invoke( $builder, $snake_case ); - $this->assertIsCallable( $callable, sprintf( 'snake_case method "%s" should resolve to SDK method "%s"', $snake_case, $camel_case ) ); - } - - /** - * Data provider for test_snake_case_resolves_to_sdk_method. - * - * @return array - */ - public static function data_sdk_public_methods(): array { - $reflection = new ReflectionClass( PromptBuilder::class ); - $data = array(); - - foreach ( $reflection->getMethods( ReflectionMethod::IS_PUBLIC ) as $method ) { - if ( $method->isConstructor() || PromptBuilder::class !== $method->class || str_starts_with( $method->getName(), '__' ) ) { - continue; - } - - $camel_case = $method->getName(); - $snake_case = strtolower( preg_replace( '/[A-Z]/', '_$0', $camel_case ) ); - - $data[ $snake_case ] = array( $snake_case, $camel_case ); - } - - return $data; - } - - /** - * Tests that exception in chained method is caught and returned by the terminating method as WP_Error. - * - * @ticket 64591 - */ - public function test_exception_in_chained_method_caught_and_returned_by_terminating_method() { - $registry = AiClient::defaultRegistry(); - $prompt_builder = new WP_AI_Client_Prompt_Builder( $registry ); - - $result = $prompt_builder - ->with_text( 'Start of prompt' ) - ->with_file( 'https://example.com/img.jpg', 'image/jpeg' ) - // Invalid: Only provider and model ID must be given. - ->using_model_preference( array( 'test-provider', 'test-model', 'test-version' ) ) - ->using_system_instruction( 'Be helpful' ) - ->generate_text(); - - $this->assertWPError( $result, 'generate_text should return WP_Error when exception occurs' ); - $this->assertSame( 'prompt_builder_error', $result->get_error_code() ); - $this->assertSame( 'Model preference tuple must contain model identifier and provider ID.', $result->get_error_message() ); - - $error_data = $result->get_error_data(); - $this->assertIsArray( $error_data ); - $this->assertArrayHasKey( 'exception_class', $error_data ); - $this->assertNotEmpty( $error_data['exception_class'] ); - } -} diff --git a/tests/phpunit/tests/block-bindings/postMetaSource.php b/tests/phpunit/tests/block-bindings/postMetaSource.php index 555376e1c6b0c..927d290f80557 100644 --- a/tests/phpunit/tests/block-bindings/postMetaSource.php +++ b/tests/phpunit/tests/block-bindings/postMetaSource.php @@ -68,7 +68,7 @@ public function test_custom_field_value_is_rendered() { $content = $this->get_modified_post_content( '

      Fallback value

      ' ); $this->assertSame( - '

      Custom field value

      ', + '

      Custom field value

      ', $content, 'The post content should show the value of the custom field . ' ); @@ -123,7 +123,7 @@ public function test_custom_field_value_is_not_shown_in_password_protected_posts remove_filter( 'post_password_required', '__return_true' ); $this->assertSame( - '

      Fallback value

      ', + '

      Fallback value

      ', $content, 'The post content should show the fallback value instead of the custom field value.' ); @@ -153,7 +153,7 @@ public function test_custom_field_value_is_not_shown_in_non_viewable_posts() { remove_filter( 'is_post_status_viewable', '__return_false' ); $this->assertSame( - '

      Fallback value

      ', + '

      Fallback value

      ', $content, 'The post content should show the fallback value instead of the custom field value.' ); @@ -168,7 +168,7 @@ public function test_binding_to_non_existing_meta_key() { $content = $this->get_modified_post_content( '

      Fallback value

      ' ); $this->assertSame( - '

      Fallback value

      ', + '

      Fallback value

      ', $content, 'The post content should show the fallback value.' ); @@ -183,7 +183,7 @@ public function test_binding_without_key_renders_the_fallback() { $content = $this->get_modified_post_content( '

      Fallback value

      ' ); $this->assertSame( - '

      Fallback value

      ', + '

      Fallback value

      ', $content, 'The post content should show the fallback value.' ); @@ -209,7 +209,7 @@ public function test_protected_field_value_is_not_shown() { $content = $this->get_modified_post_content( '

      Fallback value

      ' ); $this->assertSame( - '

      Fallback value

      ', + '

      Fallback value

      ', $content, 'The post content should show the fallback value instead of the protected value.' ); @@ -235,7 +235,7 @@ public function test_custom_field_not_exposed_in_rest_api_is_not_shown() { $content = $this->get_modified_post_content( '

      Fallback value

      ' ); $this->assertSame( - '

      Fallback value

      ', + '

      Fallback value

      ', $content, 'The post content should show the fallback value instead of the protected value.' ); @@ -261,7 +261,7 @@ public function test_custom_field_with_unsafe_html_is_sanitized() { $content = $this->get_modified_post_content( '

      Fallback value

      ' ); $this->assertSame( - '

      alert(“Unsafe HTML”)

      ', + '

      alert(“Unsafe HTML”)

      ', $content, 'The post content should not include the script tag.' ); @@ -298,7 +298,7 @@ public function test_filter_block_bindings_source_value() { remove_filter( 'block_bindings_source_value', $filter_value ); $this->assertSame( - '

      Filtered value: tests_filter_field

      ', + '

      Filtered value: tests_filter_field

      ', $content, 'The post content should show the filtered value.' ); diff --git a/tests/phpunit/tests/block-bindings/render.php b/tests/phpunit/tests/block-bindings/render.php index 77b0975105dc5..fa8178cbd39b2 100644 --- a/tests/phpunit/tests/block-bindings/render.php +++ b/tests/phpunit/tests/block-bindings/render.php @@ -90,7 +90,7 @@ public function data_update_block_with_value_from_source() { HTML , - '

      test source value

      ', + '

      test source value

      ', ), 'button block' => array( 'text', @@ -179,19 +179,19 @@ function ( $source_args, $block_instance, $attribute_name ) { $value = $source_args['key']; return "The attribute name is '$attribute_name' and its binding has argument 'key' with value '$value'."; }, - "

      The attribute name is 'content' and its binding has argument 'key' with value 'test'.

      ", + "

      The attribute name is 'content' and its binding has argument 'key' with value 'test'.

      ", ), 'unsafe HTML should be sanitized' => array( function () { return ''; }, - '

      alert("Unsafe HTML")

      ', + '

      alert("Unsafe HTML")

      ', ), 'symbols and numbers should be rendered correctly' => array( function () { return '$12.50'; }, - '

      $12.50

      ', + '

      $12.50

      ', ), ); } @@ -418,7 +418,7 @@ public function test_filter_block_bindings_source_value() { remove_filter( 'block_bindings_source_value', $filter_value ); $this->assertSame( - '

      Filtered value: test_arg. Block instance: core/paragraph. Attribute name: content.

      ', + '

      Filtered value: test_arg. Block instance: core/paragraph. Attribute name: content.

      ', trim( $result ), 'The block content should show the filtered value.' ); diff --git a/tests/phpunit/tests/block-processor/wpBlockProcessor.php b/tests/phpunit/tests/block-processor/wpBlockProcessor.php index 6f8934e003030..682307a88f28c 100644 --- a/tests/phpunit/tests/block-processor/wpBlockProcessor.php +++ b/tests/phpunit/tests/block-processor/wpBlockProcessor.php @@ -747,46 +747,6 @@ public function test_reports_if_block_is_of_type( $html, $block_type ) { } } - /** - * Verifies that innerHTML only matches as a block type when checking with the wildcard '*'. - * - * @ticket 64485 - * - * @covers ::is_block_type() - */ - public function test_inner_html_is_only_a_block_type_match_with_the_wildcard() { - $processor = new WP_Block_Processor( '01' ); - - $processor->next_token(); - $this->assertTrue( - $processor->is_block_type( 'freeform' ), - 'Failed to detect top-level freeform HTML as freeform block: check test setup.' - ); - - $processor->next_token(); - $this->assertTrue( - $processor->is_block_type( 'b1' ), - 'Failed to detect opening delimiter as b1 block type: check test setup.' - ); - - $processor->next_token(); - $this->assertFalse( - ( - $processor->is_block_type( 'freeform' ) || - $processor->is_block_type( 'b1' ) || - $processor->is_block_type( 'core/freeform' ) || - $processor->is_block_type( 'core/b1' ) || - $processor->is_block_type( '' ) - ), - 'Failed to reject innerHTML as a matched block type.' - ); - - $this->assertTrue( - $processor->is_block_type( '*' ), - 'Failed to accept innerHTML as a wildcard block-type match.' - ); - } - /** * Verifies that the processor indicates if the currently-matched delimiter * opens a block of a given block type. This is true for openers and void delimiters. @@ -1251,191 +1211,6 @@ public static function data_content_and_delimiter_spans() { ); } - /** - * Verifies that next_block( $block_type ) scans directly to the appropriate tokens. - * - * @ticket 64485 - * - * @dataProvider data_markup_with_block_of_given_type - * - * @param string $html Contains block markup, including the tested block type. - * @param string $block_type Jump to this block type. - */ - public function test_scans_directly_to_requested_block_type( string $html, string $block_type ) { - $processor = new WP_Block_Processor( $html ); - - $this->assertTrue( - $processor->next_block( $block_type ), - 'Failed to find block of requested type.' - ); - - $full_block_type = WP_Block_Processor::normalize_block_type( $block_type ); - - if ( 'core/freeform' === $full_block_type ) { - $this->assertTrue( - $processor->is_html(), - 'Failed to match on HTML token when looking for freeform content.' - ); - - $this->assertSame( - 0, - $processor->get_depth(), - 'Failed to scan to top-level freeform content when searching for freeform.' - ); - } else { - $this->assertFalse( - $processor->is_html(), - 'Matched on HTML token when looking for block delimiter.' - ); - } - - $this->assertSame( - $full_block_type, - $processor->get_printable_block_type(), - 'Scanned to token of wrong block type.' - ); - } - - /** - * Ensures that block extraction matches the behavior of the default block parser. - * - * @ticket 64537 - * - * @dataProvider data_various_block_posts - * - * @param string $test_document An HTML document to parse as blocks. - */ - public function test_extracts_equivalent_parses_as_parse_blocks( string $test_document ) { - $processor = new WP_Block_Processor( $test_document ); - $blocks = array(); - - while ( $processor->next_block( '*' ) ) { - $blocks[] = $processor->extract_full_block_and_advance(); - } - - $this->assertSame( - parse_blocks( $test_document ), - $blocks, - 'Failed to properly parse the block structure.' - ); - } - - /** - * Data provider. - * - * @return Generator - */ - public static function data_various_block_posts() { - yield 'Empty post' => array( '' ); - - yield 'Void block' => array( '' ); - - yield 'Empty block' => array( '' ); - - yield 'Paragraph block' => array( '

      Test

      ' ); - - yield 'Paragraph block with attributes' => array( - '

      Test

      ', - ); - - yield 'Group with void inner' => array( - '', - ); - - /* - * @todo There is a hidden bug in here, which is possibly a problem in - * the default parser. There are HTML spans of newlines between - * these block delimiters, and without them, the parse doesn’t - * match `parse_blocks()`. However, `parse_blocks()` is inconsistent - * in its behavior. Whereas it produces an empty text chunk here, - * in the case of a void inner block it produces none. The test is - * being adjusted to step around this issue so that it can be resolved - * separately, and until it’s clear if there is an implementation issue - * with `parse_blocks()` itself. - */ - yield 'Empty columns' => array( - << - - - -HTML - , - ); - - yield 'Contentful columns' => array( - << -
        - -
      • A good point.
      • - -
      - -HTML - , - ); - - yield 'Group with mixed content' => array( - << -
      -

      Test

      - This is freeform. - - End - -
      That’s it!
      - - -
      - -HTML - , - ); - - yield 'Nested blocks' => array( - << -
      - - - -
      - -HTML - , - ); - - yield 'Attributes on nested blocks' => array( - << - - - - - - - -HTML - , - ); - } - - /** - * Data provider. - * - * @return array[] - */ - public static function data_markup_with_block_of_given_type() { - return array( - 'At start of HTML' => array( '', 'target' ), - 'After freeform text' => array( 'prefix', 'target' ), - 'After outer block' => array( 'prefix', 'target' ), - 'After innerHTML' => array( 'prefixinner', 'target' ), - ); - } - // // Test helpers. // diff --git a/tests/phpunit/tests/block-supports/aria-label.php b/tests/phpunit/tests/block-supports/aria-label.php index 93666ba0fb493..087f4843cebb0 100644 --- a/tests/phpunit/tests/block-supports/aria-label.php +++ b/tests/phpunit/tests/block-supports/aria-label.php @@ -44,16 +44,15 @@ private function register_aria_label_block_with_support( $block_name, $supports } /** - * Tests that aria-label block support works as expected. + * Tests that position block support works as expected. * * @ticket 62919 - * @ticket 64594 * * @dataProvider data_aria_label_block_support * * @param boolean|array $support Aria label block support configuration. * @param string $value Aria label value for attribute object. - * @param array $expected Expected aria-label attributes. + * @param array $expected Expected aria label block support styles. */ public function test_wp_apply_aria_label_support( $support, $value, $expected ) { $block_type = self::register_aria_label_block_with_support( @@ -83,13 +82,6 @@ public function data_aria_label_block_support() { 'value' => 'Label', 'expected' => array(), ), - 'aria-label attribute is not applied when serialization is skipped' => array( - 'support' => array( - '__experimentalSkipSerialization' => true, - ), - 'value' => 'Label', - 'expected' => array(), - ), ); } } diff --git a/tests/phpunit/tests/block-supports/auto-register.php b/tests/phpunit/tests/block-supports/auto-register.php deleted file mode 100644 index 71754f247225b..0000000000000 --- a/tests/phpunit/tests/block-supports/auto-register.php +++ /dev/null @@ -1,144 +0,0 @@ - array( 'autoRegister' => true ), - 'attributes' => array( - 'title' => array( 'type' => 'string' ), - 'count' => array( 'type' => 'integer' ), - ), - ); - - $result = wp_mark_auto_generate_control_attributes( $settings ); - - $this->assertTrue( $result['attributes']['title']['autoGenerateControl'] ); - $this->assertTrue( $result['attributes']['count']['autoGenerateControl'] ); - } - - /** - * Tests that attributes are not marked without autoRegister flag. - * - * @ticket 64639 - */ - public function test_does_not_mark_attributes_without_auto_register() { - $settings = array( - 'attributes' => array( - 'title' => array( 'type' => 'string' ), - ), - ); - - $result = wp_mark_auto_generate_control_attributes( $settings ); - - $this->assertArrayNotHasKey( 'autoGenerateControl', $result['attributes']['title'] ); - } - - /** - * Tests that attributes with source are excluded. - * - * @ticket 64639 - */ - public function test_excludes_attributes_with_source() { - $settings = array( - 'supports' => array( 'autoRegister' => true ), - 'attributes' => array( - 'title' => array( 'type' => 'string' ), - 'content' => array( - 'type' => 'string', - 'source' => 'html', - ), - ), - ); - - $result = wp_mark_auto_generate_control_attributes( $settings ); - - $this->assertTrue( $result['attributes']['title']['autoGenerateControl'] ); - $this->assertArrayNotHasKey( 'autoGenerateControl', $result['attributes']['content'] ); - } - - /** - * Tests that attributes with role: local are excluded. - * - * Example: The 'blob' attribute in media blocks (image, video, file, audio) - * stores a temporary blob URL during file upload. This is internal state - * that shouldn't be shown in the inspector or saved to the database. - * - * @ticket 64639 - */ - public function test_excludes_attributes_with_role_local() { - $settings = array( - 'supports' => array( 'autoRegister' => true ), - 'attributes' => array( - 'title' => array( 'type' => 'string' ), - 'blob' => array( - 'type' => 'string', - 'role' => 'local', - ), - ), - ); - - $result = wp_mark_auto_generate_control_attributes( $settings ); - - $this->assertTrue( $result['attributes']['title']['autoGenerateControl'] ); - $this->assertArrayNotHasKey( 'autoGenerateControl', $result['attributes']['blob'] ); - } - - /** - * Tests that empty attributes are handled gracefully. - * - * @ticket 64639 - */ - public function test_handles_empty_attributes() { - $settings = array( - 'supports' => array( 'autoRegister' => true ), - ); - - $result = wp_mark_auto_generate_control_attributes( $settings ); - - $this->assertSame( $settings, $result ); - } - - /** - * Tests that only allowed attributes are marked. - * - * @ticket 64639 - */ - public function test_excludes_unsupported_types() { - $settings = array( - 'supports' => array( 'autoRegister' => true ), - 'attributes' => array( - // Supported types - 'text' => array( 'type' => 'string' ), - 'price' => array( 'type' => 'number' ), - 'count' => array( 'type' => 'integer' ), - 'enabled' => array( 'type' => 'boolean' ), - // Unsupported types - 'metadata' => array( 'type' => 'object' ), - 'items' => array( 'type' => 'array' ), - 'config' => array( 'type' => 'null' ), - 'unknown' => array( 'type' => 'unknown' ), - ), - ); - - $result = wp_mark_auto_generate_control_attributes( $settings ); - - $this->assertTrue( $result['attributes']['text']['autoGenerateControl'] ); - $this->assertTrue( $result['attributes']['price']['autoGenerateControl'] ); - $this->assertTrue( $result['attributes']['count']['autoGenerateControl'] ); - $this->assertTrue( $result['attributes']['enabled']['autoGenerateControl'] ); - $this->assertArrayNotHasKey( 'autoGenerateControl', $result['attributes']['metadata'] ); - $this->assertArrayNotHasKey( 'autoGenerateControl', $result['attributes']['items'] ); - $this->assertArrayNotHasKey( 'autoGenerateControl', $result['attributes']['config'] ); - $this->assertArrayNotHasKey( 'autoGenerateControl', $result['attributes']['unknown'] ); - } -} diff --git a/tests/phpunit/tests/block-supports/block-visibility.php b/tests/phpunit/tests/block-supports/block-visibility.php index 4f24b931744f8..b73e8a1ede09e 100644 --- a/tests/phpunit/tests/block-supports/block-visibility.php +++ b/tests/phpunit/tests/block-supports/block-visibility.php @@ -11,18 +11,18 @@ * @covers ::wp_render_block_visibility_support */ class Tests_Block_Supports_Block_Visibility extends WP_UnitTestCase { + /** + * @var string|null + */ + private $test_block_name; - private ?string $test_block_name; - - public function set_up(): void { + public function set_up() { parent::set_up(); $this->test_block_name = null; } - public function tear_down(): void { - if ( $this->test_block_name ) { - unregister_block_type( $this->test_block_name ); - } + public function tear_down() { + unregister_block_type( $this->test_block_name ); $this->test_block_name = null; parent::tear_down(); } @@ -30,10 +30,12 @@ public function tear_down(): void { /** * Registers a new block for testing block visibility support. * - * @param string $block_name Name for the test block. - * @param array $supports Array defining block support configuration. + * @param string $block_name Name for the test block. + * @param array $supports Array defining block support configuration. + * + * @return WP_Block_Type The block type for the newly registered test block. */ - private function register_visibility_block_with_support( string $block_name, array $supports = array() ): void { + private function register_visibility_block_with_support( $block_name, $supports = array() ) { $this->test_block_name = $block_name; register_block_type( $this->test_block_name, @@ -49,7 +51,7 @@ private function register_visibility_block_with_support( string $block_name, arr ); $registry = WP_Block_Type_Registry::get_instance(); - $registry->get_registered( $this->test_block_name ); + return $registry->get_registered( $this->test_block_name ); } /** @@ -58,8 +60,8 @@ private function register_visibility_block_with_support( string $block_name, arr * * @ticket 64061 */ - public function test_block_visibility_support_hides_block_when_visibility_false(): void { - $this->register_visibility_block_with_support( + public function test_block_visibility_support_hides_block_when_visibility_false() { + $block_type = $this->register_visibility_block_with_support( 'test/visibility-block', array( 'visibility' => true ) ); @@ -85,13 +87,13 @@ public function test_block_visibility_support_hides_block_when_visibility_false( * * @ticket 64061 */ - public function test_block_visibility_support_shows_block_when_support_not_opted_in(): void { - $this->register_visibility_block_with_support( + public function test_block_visibility_support_shows_block_when_support_not_opted_in() { + $block_type = $this->register_visibility_block_with_support( 'test/visibility-block', array( 'visibility' => false ) ); - $block_content = '
      Test content
      '; + $block_content = '

      This is a test block.

      '; $block = array( 'blockName' => 'test/visibility-block', 'attrs' => array( @@ -105,338 +107,4 @@ public function test_block_visibility_support_shows_block_when_support_not_opted $this->assertSame( $block_content, $result, 'Block content should remain unchanged when blockVisibility support is not opted in.' ); } - - /** - * @ticket 64414 - */ - public function test_block_visibility_support_no_visibility_attribute(): void { - $this->register_visibility_block_with_support( - 'test/block-visibility-none', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/block-visibility-none', - 'attrs' => array(), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertSame( $block_content, $result, 'Block content should remain unchanged when no visibility attribute is present.' ); - } - - /** - * @ticket 64414 - */ - public function test_block_visibility_support_generated_css_with_mobile_viewport_size(): void { - $this->register_visibility_block_with_support( - 'test/viewport-mobile', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-mobile', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'mobile' => false, - ), - ), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertStringContainsString( 'wp-block-hidden-mobile', $result, 'Block should have the visibility class for the mobile breakpoint.' ); - - $actual_stylesheet = wp_style_engine_get_stylesheet_from_context( 'block-supports', array( 'prettify' => false ) ); - - $this->assertSame( - '@media (width <= 480px){.wp-block-hidden-mobile{display:none !important;}}', - $actual_stylesheet, - 'CSS should contain mobile visibility rule' - ); - } - - /** - * @ticket 64414 - */ - public function test_block_visibility_support_generated_css_with_tablet_viewport_size(): void { - $this->register_visibility_block_with_support( - 'test/viewport-tablet', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-tablet', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'tablet' => false, - ), - ), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertEqualHTML( - '
      Test content
      ', - $result, - '', - 'Block should have the existing class and the visibility class for the tablet breakpoint in the class attribute.' - ); - - $actual_stylesheet = wp_style_engine_get_stylesheet_from_context( 'block-supports', array( 'prettify' => false ) ); - - $this->assertSame( - '@media (480px < width <= 782px){.wp-block-hidden-tablet{display:none !important;}}', - $actual_stylesheet, - 'CSS should contain tablet visibility rule' - ); - } - - /** - * @ticket 64414 - */ - public function test_block_visibility_support_generated_css_with_desktop_breakpoint(): void { - $this->register_visibility_block_with_support( - 'test/viewport-desktop', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-desktop', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'desktop' => false, - ), - ), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertEqualHTML( - '
      Test content
      ', - $result, - '', - 'Block should have the visibility class for the desktop breakpoint in the class attribute.' - ); - - $actual_stylesheet = wp_style_engine_get_stylesheet_from_context( 'block-supports', array( 'prettify' => false ) ); - - $this->assertSame( - '@media (width > 782px){.wp-block-hidden-desktop{display:none !important;}}', - $actual_stylesheet, - 'CSS should contain desktop visibility rule' - ); - } - - /** - * @ticket 64414 - * @ticket 64823 - */ - public function test_block_visibility_support_generated_css_with_two_viewport_sizes(): void { - $this->register_visibility_block_with_support( - 'test/viewport-two', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-two', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'mobile' => false, - 'desktop' => false, - ), - ), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertEqualHTML( - '
      Test content
      ', - $result, - '', - 'Block should have both visibility classes in the class attribute, and the IMG should have fetchpriority=auto.' - ); - - $actual_stylesheet = wp_style_engine_get_stylesheet_from_context( 'block-supports', array( 'prettify' => false ) ); - - $this->assertSame( - '@media (width > 782px){.wp-block-hidden-desktop{display:none !important;}}@media (width <= 480px){.wp-block-hidden-mobile{display:none !important;}}', - $actual_stylesheet, - 'CSS should contain desktop and mobile visibility rules' - ); - } - - /** - * @ticket 64414 - * @ticket 64823 - */ - public function test_block_visibility_support_generated_css_with_all_viewport_sizes_visible(): void { - $this->register_visibility_block_with_support( - 'test/viewport-all-visible', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-all-visible', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'mobile' => true, - 'tablet' => true, - 'desktop' => true, - ), - ), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertSame( $block_content, $result, 'Block content should remain unchanged when all breakpoints are visible.' ); - } - - /** - * @ticket 64414 - * @ticket 64823 - */ - public function test_block_visibility_support_generated_css_with_all_viewport_sizes_hidden(): void { - $this->register_visibility_block_with_support( - 'test/viewport-all-hidden', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-all-hidden', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'mobile' => false, - 'tablet' => false, - 'desktop' => false, - ), - ), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertEqualHTML( - '
      Test content
      ', - $result, - '', - 'Block content should have the visibility classes for all viewport sizes in the class attribute, and an IMG should get fetchpriority=auto.' - ); - } - - /** - * @ticket 64414 - */ - public function test_block_visibility_support_generated_css_with_empty_object(): void { - $this->register_visibility_block_with_support( - 'test/viewport-empty', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-empty', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array(), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertSame( $block_content, $result, 'Block content should remain unchanged when blockVisibility is an empty array.' ); - } - - /** - * @ticket 64414 - */ - public function test_block_visibility_support_generated_css_with_unknown_viewport_sizes_ignored(): void { - $this->register_visibility_block_with_support( - 'test/viewport-unknown-viewport-sizes', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-unknown-viewport-sizes', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'mobile' => false, - 'unknownBreak' => false, - 'largeScreen' => false, - ), - ), - ), - ), - ); - - $block_content = '
      Test content
      '; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertStringContainsString( - 'class="wp-block-hidden-mobile"', - $result, - 'Block should have the visibility class for the mobile breakpoint in the class attribute' - ); - } - - /** - * @ticket 64414 - */ - public function test_block_visibility_support_generated_css_with_empty_content(): void { - $this->register_visibility_block_with_support( - 'test/viewport-empty-content', - array( 'visibility' => true ) - ); - - $block = array( - 'blockName' => 'test/viewport-empty-content', - 'attrs' => array( - 'metadata' => array( - 'blockVisibility' => array( - 'viewport' => array( - 'mobile' => false, - ), - ), - ), - ), - ); - - $block_content = ''; - $result = wp_render_block_visibility_support( $block_content, $block ); - - $this->assertSame( '', $result, 'Block content should be empty when there is no content.' ); - } } diff --git a/tests/phpunit/tests/block-supports/duotone.php b/tests/phpunit/tests/block-supports/duotone.php index 808903a072452..1f60a8247d4c4 100644 --- a/tests/phpunit/tests/block-supports/duotone.php +++ b/tests/phpunit/tests/block-supports/duotone.php @@ -93,8 +93,6 @@ public function data_get_slug_from_attribute() { 'pipe-slug-no-value' => array( 'var:preset|duotone|', '' ), 'css-var-spaces' => array( 'var(--wp--preset--duotone-- ', '' ), 'pipe-slug-spaces' => array( 'var:preset|duotone| ', '' ), - 'array-of-colors' => array( array( '#000000', '#ffffff' ), '' ), - 'empty-array' => array( array(), '' ), ); } @@ -166,8 +164,6 @@ public function data_is_preset() { 'css-var-invalid-slug-chars' => array( 'var(--wp--preset--duotone--.)', false ), 'css-var-missing-end-parenthesis' => array( 'var(--wp--preset--duotone--blue-orange', false ), 'invalid' => array( 'not a valid attribute', false ), - 'array-of-colors' => array( array( '#000000', '#ffffff' ), false ), - 'empty-array' => array( array(), false ), ); } diff --git a/tests/phpunit/tests/block-supports/layout.php b/tests/phpunit/tests/block-supports/layout.php index f47a7a3e35d2b..3b71b2c4b7482 100644 --- a/tests/phpunit/tests/block-supports/layout.php +++ b/tests/phpunit/tests/block-supports/layout.php @@ -42,22 +42,6 @@ public function set_up() { // Clear caches. wp_clean_themes_cache(); unset( $GLOBALS['wp_themes'] ); - - /* - * Register a style variation with a custom blockGap value for testing. - */ - register_block_style( - 'core/group', - array( - 'name' => 'custom-gap', - 'label' => 'Custom Gap', - 'style_data' => array( - 'spacing' => array( - 'blockGap' => '99px', - ), - ), - ) - ); } public function tear_down() { @@ -70,11 +54,6 @@ public function tear_down() { wp_clean_themes_cache(); unset( $GLOBALS['wp_themes'] ); - - // Clean up variation test data. - unregister_block_style( 'core/group', 'custom-gap' ); - WP_Theme_JSON_Resolver::clean_cached_data(); - parent::tear_down(); } @@ -314,7 +293,7 @@ public function data_layout_support_flag_renders_classnames_on_wrapper() { ), ), ), - 'expected_output' => '
      ', + 'expected_output' => '
      ', ), 'single wrapper block layout with grid type' => array( 'args' => array( @@ -333,7 +312,7 @@ public function data_layout_support_flag_renders_classnames_on_wrapper() { ), ), ), - 'expected_output' => '
      ', + 'expected_output' => '
      ', ), 'skip classname output if block does not support layout and there are no child layout classes to be output' => array( 'args' => array( @@ -563,19 +542,9 @@ public function test_layout_support_flag_renders_consistent_container_hash( $blo $processor = new WP_HTML_Tag_Processor( $output ); $processor->next_tag(); - // Extract the actual container class from the output for better error messages. - $actual_class = ''; - foreach ( $processor->class_list() as $class_name ) { - if ( str_starts_with( $class_name, 'wp-container-core-group-is-layout-' ) ) { - $actual_class = $class_name; - break; - } - } - - $this->assertEquals( - $expected_class, - $actual_class, - 'Expected class not found in the rendered output, probably because of a different hash.' + $this->assertTrue( + $processor->has_class( $expected_class ), + "Expected class '$expected_class' not found in the rendered output, probably because of a different hash." ); } @@ -597,7 +566,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { ), ), ), - 'expected_class' => 'wp-container-core-group-is-layout-a6248535', + 'expected_class' => 'wp-container-core-group-is-layout-c5c7d83f', ), 'default type block gap 24px' => array( 'block_attributes' => array( @@ -610,7 +579,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { ), ), ), - 'expected_class' => 'wp-container-core-group-is-layout-61b496ee', + 'expected_class' => 'wp-container-core-group-is-layout-634f0b9d', ), 'constrained type justified left' => array( 'block_attributes' => array( @@ -619,7 +588,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { 'justifyContent' => 'left', ), ), - 'expected_class' => 'wp-container-core-group-is-layout-54d22900', + 'expected_class' => 'wp-container-core-group-is-layout-12dd3699', ), 'constrained type justified right' => array( 'block_attributes' => array( @@ -628,7 +597,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { 'justifyContent' => 'right', ), ), - 'expected_class' => 'wp-container-core-group-is-layout-2910ada7', + 'expected_class' => 'wp-container-core-group-is-layout-f1f2ed93', ), 'flex type horizontal' => array( 'block_attributes' => array( @@ -638,7 +607,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { 'flexWrap' => 'nowrap', ), ), - 'expected_class' => 'wp-container-core-group-is-layout-f5d79bea', + 'expected_class' => 'wp-container-core-group-is-layout-2487dcaa', ), 'flex type vertical' => array( 'block_attributes' => array( @@ -647,7 +616,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { 'orientation' => 'vertical', ), ), - 'expected_class' => 'wp-container-core-group-is-layout-2c90304e', + 'expected_class' => 'wp-container-core-group-is-layout-fe9cc265', ), 'grid type' => array( 'block_attributes' => array( @@ -655,7 +624,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { 'type' => 'grid', ), ), - 'expected_class' => 'wp-container-core-group-is-layout-5a23bf8e', + 'expected_class' => 'wp-container-core-group-is-layout-478b6e6b', ), 'grid type 3 columns' => array( 'block_attributes' => array( @@ -664,7 +633,7 @@ public function data_layout_support_flag_renders_consistent_container_hash() { 'columnCount' => 3, ), ), - 'expected_class' => 'wp-container-core-group-is-layout-cda6dc4f', + 'expected_class' => 'wp-container-core-group-is-layout-d3b710ac', ), ); } @@ -748,131 +717,4 @@ public function data_layout_classname_with_custom_blocks() { ), ); } - - /** - * Tests that block style variations with blockGap values are applied to layout styles. - * - * @ticket 64624 - * @covers ::wp_render_layout_support_flag - */ - public function test_layout_support_flag_uses_variation_block_gap_value() { - switch_theme( 'block-theme' ); - - $block_content = '
      '; - $block = array( - 'blockName' => 'core/group', - 'attrs' => array( - 'className' => 'is-style-custom-gap', - 'layout' => array( - 'type' => 'grid', - 'columnCount' => 3, - 'minimumColumnWidth' => '12rem', - ), - ), - 'innerBlocks' => array(), - 'innerHTML' => '
      ', - 'innerContent' => array( - '
      ', - ), - ); - - wp_render_layout_support_flag( $block_content, $block ); - - // Get the generated CSS from the style engine. - $actual_stylesheet = wp_style_engine_get_stylesheet_from_context( 'block-supports', array( 'prettify' => false ) ); - - // The CSS grid declaration should contain the variation's blockGap value of 99px. - $this->assertStringContainsString( - 'grid-template-columns:repeat(auto-fill, minmax(max(min(12rem, 100%), (100% - (99px * (3 - 1))) /3), 1fr))', - $actual_stylesheet, - 'Generated CSS should contain the variation blockGap value of 99px.' - ); - } - - /** - * Tests that wp_get_block_style_variation_name_from_registered_style correctly extracts variation names from class strings. - * - * @ticket 64624 - * @covers ::wp_get_block_style_variation_name_from_registered_style - * - * @dataProvider data_get_block_style_variation_name_from_registered_style - * - * @param string $class_name CSS class string to test. - * @param array $registered_styles Registered block styles. - * @param string|null $expected_result Expected variation name or null. - */ - public function test_get_block_style_variation_name_from_registered_style( $class_name, $registered_styles, $expected_result ) { - $result = wp_get_block_style_variation_name_from_registered_style( $class_name, $registered_styles ); - $this->assertSame( $expected_result, $result ); - } - - /** - * Data provider for test_get_block_style_variation_name_from_registered_style. - * - * @return array - */ - public function data_get_block_style_variation_name_from_registered_style() { - return array( - 'empty class name' => array( - 'class_name' => '', - 'registered_styles' => array(), - 'expected_result' => null, - ), - 'no matching registered styles' => array( - 'class_name' => 'is-style-shadowed wp-block-button', - 'registered_styles' => array( - array( 'name' => 'rounded' ), - array( 'name' => 'outlined' ), - ), - 'expected_result' => null, - ), - 'single matching variation found' => array( - 'class_name' => 'wp-block-button is-style-rounded', - 'registered_styles' => array( - array( 'name' => 'rounded' ), - array( 'name' => 'outlined' ), - ), - 'expected_result' => 'rounded', - ), - 'ignores default style only' => array( - 'class_name' => 'is-style-default wp-block-button', - 'registered_styles' => array( - array( 'name' => 'default' ), - array( 'name' => 'rounded' ), - ), - 'expected_result' => null, - ), - 'ignores default and returns next variation' => array( - 'class_name' => 'is-style-default is-style-rounded wp-block-button', - 'registered_styles' => array( - array( 'name' => 'default' ), - array( 'name' => 'rounded' ), - array( 'name' => 'outlined' ), - ), - 'expected_result' => 'rounded', - ), - 'returns first matching variation when multiple present' => array( - 'class_name' => 'is-style-shadowed is-style-rounded', - 'registered_styles' => array( - array( 'name' => 'rounded' ), - array( 'name' => 'outlined' ), - array( 'name' => 'shadowed' ), - ), - 'expected_result' => 'shadowed', - ), - 'empty registered styles array' => array( - 'class_name' => 'is-style-rounded', - 'registered_styles' => array(), - 'expected_result' => null, - ), - 'registered styles with missing name property' => array( - 'class_name' => 'is-style-outlined wp-block-button', - 'registered_styles' => array( - array( 'label' => 'Rounded' ), - array( 'name' => 'outlined' ), - ), - 'expected_result' => 'outlined', - ), - ); - } } diff --git a/tests/phpunit/tests/block-supports/wpApplyDimensionsSupport.php b/tests/phpunit/tests/block-supports/wpApplyDimensionsSupport.php index 897bcd0dd04f5..a4f2973a06934 100644 --- a/tests/phpunit/tests/block-supports/wpApplyDimensionsSupport.php +++ b/tests/phpunit/tests/block-supports/wpApplyDimensionsSupport.php @@ -100,146 +100,4 @@ public function data_minimum_height_block_support() { ), ); } - - /** - * Tests that width block support works as expected. - * - * @ticket 64200 - * - * @covers ::wp_apply_dimensions_support - * - * @dataProvider data_width_block_support - * - * @param string $block_name The test block name to register. - * @param mixed $dimensions The dimensions block support settings. - * @param mixed $expected The expected results. - */ - public function test_width_block_support( $block_name, $dimensions, $expected ) { - $this->test_block_name = $block_name; - register_block_type( - $this->test_block_name, - array( - 'api_version' => 2, - 'attributes' => array( - 'style' => array( - 'type' => 'object', - ), - ), - 'supports' => array( - 'dimensions' => $dimensions, - ), - ) - ); - $registry = WP_Block_Type_Registry::get_instance(); - $block_type = $registry->get_registered( $this->test_block_name ); - $block_attrs = array( - 'style' => array( - 'dimensions' => array( - 'width' => '300px', - ), - ), - ); - - $actual = wp_apply_dimensions_support( $block_type, $block_attrs ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Data provider. - * - * @return array - */ - public function data_width_block_support() { - return array( - 'style is applied' => array( - 'block_name' => 'test/width-style-is-applied', - 'dimensions' => array( - 'width' => true, - ), - 'expected' => array( - 'style' => 'width:300px;', - ), - ), - 'style output is skipped when individual feature serialization is skipped' => array( - 'block_name' => 'test/width-with-individual-skipped-serialization-block-supports', - 'dimensions' => array( - 'width' => true, - '__experimentalSkipSerialization' => array( 'width' ), - ), - 'expected' => array(), - ), - ); - } - - /** - * Tests that height block support works as expected. - * - * @ticket 64202 - * - * @covers ::wp_apply_dimensions_support - * - * @dataProvider data_height_block_support - * - * @param string $block_name The test block name to register. - * @param mixed $dimensions The dimensions block support settings. - * @param mixed $expected The expected results. - */ - public function test_height_block_support( $block_name, $dimensions, $expected ) { - $this->test_block_name = $block_name; - register_block_type( - $this->test_block_name, - array( - 'api_version' => 2, - 'attributes' => array( - 'style' => array( - 'type' => 'object', - ), - ), - 'supports' => array( - 'dimensions' => $dimensions, - ), - ) - ); - $registry = WP_Block_Type_Registry::get_instance(); - $block_type = $registry->get_registered( $this->test_block_name ); - $block_attrs = array( - 'style' => array( - 'dimensions' => array( - 'height' => '400px', - ), - ), - ); - - $actual = wp_apply_dimensions_support( $block_type, $block_attrs ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Data provider. - * - * @return array - */ - public function data_height_block_support() { - return array( - 'style is applied' => array( - 'block_name' => 'test/height-style-is-applied', - 'dimensions' => array( - 'height' => true, - ), - 'expected' => array( - 'style' => 'height:400px;', - ), - ), - 'style output is skipped when individual feature serialization is skipped' => array( - 'block_name' => 'test/height-with-individual-skipped-serialization-block-supports', - 'dimensions' => array( - 'height' => true, - '__experimentalSkipSerialization' => array( 'height' ), - ), - 'expected' => array(), - ), - ); - } } diff --git a/tests/phpunit/tests/block-supports/wpRenderCustomCssClassName.php b/tests/phpunit/tests/block-supports/wpRenderCustomCssClassName.php deleted file mode 100644 index 0bcbc6c708468..0000000000000 --- a/tests/phpunit/tests/block-supports/wpRenderCustomCssClassName.php +++ /dev/null @@ -1,134 +0,0 @@ -assertStringContainsString( $expected_class, $result, 'Custom CSS class should be present in the output.' ); - } - - /** - * Data provider. - * - * @return array - */ - public function data_adds_class_to_content() { - return array( - 'class is added to block content' => array( - 'block_content' => '
      Test content
      ', - 'block' => array( - 'blockName' => 'core/paragraph', - 'attrs' => array( - 'className' => 'wp-custom-css-123abc', - ), - ), - 'expected_class' => 'wp-custom-css-123abc', - ), - 'class is extracted from mixed class names' => array( - 'block_content' => '

      Test content

      ', - 'block' => array( - 'blockName' => 'core/paragraph', - 'attrs' => array( - 'className' => 'my-class wp-custom-css-mixed123 another-class', - ), - ), - 'expected_class' => 'wp-custom-css-mixed123', - ), - ); - } - - /** - * Tests that existing classes are preserved when the custom CSS class is added. - * - * @ticket 64544 - * - * @covers ::wp_render_custom_css_class_name - */ - public function test_preserves_existing_classes() { - $block_content = '
      Test content
      '; - $block = array( - 'blockName' => 'core/paragraph', - 'attrs' => array( - 'className' => 'wp-custom-css-456def', - ), - ); - - $result = wp_render_custom_css_class_name( $block_content, $block ); - - $this->assertStringContainsString( 'existing-class', $result, 'Existing classes should be preserved.' ); - $this->assertStringContainsString( 'another-class', $result, 'All existing classes should be preserved.' ); - $this->assertStringContainsString( 'wp-custom-css-456def', $result, 'Custom CSS class should be added.' ); - } - - /** - * Tests that block content is returned unchanged when no custom CSS class should be applied. - * - * @ticket 64544 - * - * @covers ::wp_render_custom_css_class_name - * - * @dataProvider data_returns_unchanged_content - * - * @param string $block_content The rendered block content. - * @param array $block The block data. - */ - public function test_returns_unchanged_content( $block_content, $block ) { - $result = wp_render_custom_css_class_name( $block_content, $block ); - - $this->assertSame( $block_content, $result, 'Block content should remain unchanged.' ); - } - - /** - * Data provider. - * - * @return array - */ - public function data_returns_unchanged_content() { - return array( - 'no custom CSS class in attrs' => array( - 'block_content' => '
      Test content
      ', - 'block' => array( - 'blockName' => 'core/paragraph', - 'attrs' => array( - 'className' => 'some-other-class', - ), - ), - ), - 'className is not set in attrs' => array( - 'block_content' => '
      Test content
      ', - 'block' => array( - 'blockName' => 'core/paragraph', - 'attrs' => array(), - ), - ), - 'block content is empty' => array( - 'block_content' => '', - 'block' => array( - 'blockName' => 'core/paragraph', - 'attrs' => array( - 'className' => 'wp-custom-css-789ghi', - ), - ), - ), - ); - } -} diff --git a/tests/phpunit/tests/block-supports/wpRenderCustomCssSupportStyles.php b/tests/phpunit/tests/block-supports/wpRenderCustomCssSupportStyles.php deleted file mode 100644 index 0048b379f8f33..0000000000000 --- a/tests/phpunit/tests/block-supports/wpRenderCustomCssSupportStyles.php +++ /dev/null @@ -1,267 +0,0 @@ -test_block_name = null; - } - - public function tear_down() { - if ( $this->test_block_name ) { - unregister_block_type( $this->test_block_name ); - } - $this->test_block_name = null; - parent::tear_down(); - } - - /** - * Tests that custom CSS support adds a class name when valid CSS is present. - * - * @ticket 64544 - * - * @covers ::wp_render_custom_css_support_styles - * - * @dataProvider data_adds_class_name - * - * @param string $block_name The test block name to register. - * @param array $supports The block support configuration. - * @param array $parsed_block The parsed block data. - */ - public function test_adds_class_name( $block_name, $supports, $parsed_block ) { - $this->test_block_name = $block_name; - register_block_type( - $this->test_block_name, - array( - 'api_version' => 3, - 'attributes' => array( - 'style' => array( - 'type' => 'object', - ), - ), - 'supports' => $supports, - ) - ); - - $result = wp_render_custom_css_support_styles( $parsed_block ); - - $this->assertArrayHasKey( 'className', $result['attrs'], 'Block should have className added.' ); - $this->assertMatchesRegularExpression( '/wp-custom-css-/', $result['attrs']['className'], 'className should contain wp-custom-css- prefix.' ); - } - - /** - * Data provider. - * - * @return array - */ - public function data_adds_class_name() { - return array( - 'class name is added when custom CSS is present' => array( - 'block_name' => 'test/custom-css-block', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-block', - 'attrs' => array( - 'style' => array( - 'css' => 'color: red;', - ), - ), - ), - ), - 'class name is added when support is not explicitly set' => array( - 'block_name' => 'test/custom-css-default', - 'supports' => array(), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-default', - 'attrs' => array( - 'style' => array( - 'css' => 'font-weight: bold;', - ), - ), - ), - ), - 'class name is added for valid CSS with url() values' => array( - 'block_name' => 'test/custom-css-valid', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-valid', - 'attrs' => array( - 'style' => array( - 'css' => 'color: red; background: url("image.png"); font-size: 16px;', - ), - ), - ), - ), - ); - } - - /** - * Tests that existing className is preserved when custom CSS class is added. - * - * @ticket 64544 - * - * @covers ::wp_render_custom_css_support_styles - */ - public function test_preserves_existing_class_name() { - $this->test_block_name = 'test/custom-css-block-existing'; - register_block_type( - $this->test_block_name, - array( - 'api_version' => 3, - 'attributes' => array( - 'style' => array( - 'type' => 'object', - ), - ), - 'supports' => array( 'customCSS' => true ), - ) - ); - - $parsed_block = array( - 'blockName' => 'test/custom-css-block-existing', - 'attrs' => array( - 'className' => 'my-existing-class', - 'style' => array( - 'css' => 'color: blue;', - ), - ), - ); - - $result = wp_render_custom_css_support_styles( $parsed_block ); - - $this->assertStringContainsString( 'my-existing-class', $result['attrs']['className'], 'Existing className should be preserved.' ); - $this->assertMatchesRegularExpression( '/wp-custom-css-/', $result['attrs']['className'], 'className should also contain wp-custom-css- prefix.' ); - } - - /** - * Tests that custom CSS support does not add a class name when CSS should not be applied. - * - * @ticket 64544 - * - * @covers ::wp_render_custom_css_support_styles - * - * @dataProvider data_does_not_add_class_name - * - * @param string $block_name The test block name to register. - * @param array $supports The block support configuration. - * @param array $parsed_block The parsed block data. - */ - public function test_does_not_add_class_name( $block_name, $supports, $parsed_block ) { - $this->test_block_name = $block_name; - register_block_type( - $this->test_block_name, - array( - 'api_version' => 3, - 'attributes' => array( - 'style' => array( - 'type' => 'object', - ), - ), - 'supports' => $supports, - ) - ); - - $result = wp_render_custom_css_support_styles( $parsed_block ); - - $this->assertArrayNotHasKey( 'className', $result['attrs'], 'Block should not have className added.' ); - } - - /** - * Data provider. - * - * @return array - */ - public function data_does_not_add_class_name() { - return array( - 'support is disabled' => array( - 'block_name' => 'test/custom-css-disabled', - 'supports' => array( 'customCSS' => false ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-disabled', - 'attrs' => array( - 'style' => array( - 'css' => 'color: green;', - ), - ), - ), - ), - 'no CSS attribute present' => array( - 'block_name' => 'test/custom-css-no-css', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-no-css', - 'attrs' => array( - 'style' => array( - 'color' => 'red', - ), - ), - ), - ), - 'CSS is empty' => array( - 'block_name' => 'test/custom-css-empty', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-empty', - 'attrs' => array( - 'style' => array( - 'css' => '', - ), - ), - ), - ), - 'CSS is whitespace only' => array( - 'block_name' => 'test/custom-css-whitespace', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-whitespace', - 'attrs' => array( - 'style' => array( - 'css' => ' ', - ), - ), - ), - ), - 'no style attribute' => array( - 'block_name' => 'test/custom-css-no-style', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-no-style', - 'attrs' => array(), - ), - ), - 'CSS contains HTML opening tags' => array( - 'block_name' => 'test/custom-css-html-open', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-html-open', - 'attrs' => array( - 'style' => array( - 'css' => '', - ), - ), - ), - ), - 'CSS contains HTML closing tags' => array( - 'block_name' => 'test/custom-css-html-close', - 'supports' => array( 'customCSS' => true ), - 'parsed_block' => array( - 'blockName' => 'test/custom-css-html-close', - 'attrs' => array( - 'style' => array( - 'css' => 'color: red;', - ), - ), - ), - ), - ); - } -} diff --git a/tests/phpunit/tests/block-template-utils.php b/tests/phpunit/tests/block-template-utils.php index d89aa35f06e72..e5255ba5ae011 100644 --- a/tests/phpunit/tests/block-template-utils.php +++ b/tests/phpunit/tests/block-template-utils.php @@ -297,83 +297,6 @@ public function data_remove_theme_attribute_in_block_template_content() { ); } - /** - * Tests that a skip link is added and a MAIN element without an ID receives the default ID. - * - * @ticket 64361 - * - * @covers ::_block_template_add_skip_link - */ - public function test_block_template_add_skip_link_inserts_link_and_adds_main_id_when_missing() { - $template_html = '
      Content
      '; - $expected = - '' . - '
      Content
      '; - - $this->assertEqualHTML( $expected, _block_template_add_skip_link( $template_html ) ); - } - - /** - * Tests that an existing MAIN ID is reused for the skip link. - * - * @ticket 64361 - * - * @covers ::_block_template_add_skip_link - */ - public function test_block_template_add_skip_link_uses_existing_main_id() { - $template_html = '
      Content
      '; - $expected = - '' . - '
      Content
      '; - - $this->assertEqualHTML( $expected, _block_template_add_skip_link( $template_html ) ); - } - - /** - * Tests that a boolean MAIN ID is treated as missing and replaced with the default. - * - * @ticket 64361 - * - * @covers ::_block_template_add_skip_link - */ - public function test_block_template_add_skip_link_handles_boolean_main_id() { - $template_html = '
      Content
      '; - $expected = - '' . - '
      Content
      '; - - $this->assertEqualHTML( $expected, _block_template_add_skip_link( $template_html ) ); - } - - /** - * Tests that a MAIN ID containing whitespace is preserved and used for the skip link. - * - * @ticket 64361 - * - * @covers ::_block_template_add_skip_link - */ - public function test_block_template_add_skip_link_preserves_whitespace_main_id() { - $template_html = '
      Content
      '; - $expected = - '' . - '
      Content
      '; - - $this->assertEqualHTML( $expected, _block_template_add_skip_link( $template_html ) ); - } - - /** - * Tests that no changes are made when there is no MAIN element. - * - * @ticket 64361 - * - * @covers ::_block_template_add_skip_link - */ - public function test_block_template_add_skip_link_does_not_modify_when_main_missing() { - $template_html = '
      Content
      '; - - $this->assertSame( $template_html, _block_template_add_skip_link( $template_html ) ); - } - /** * Should retrieve the template from the theme files. */ diff --git a/tests/phpunit/tests/block-template.php b/tests/phpunit/tests/block-template.php index e0307b5782165..bb153dfea6c9a 100644 --- a/tests/phpunit/tests/block-template.php +++ b/tests/phpunit/tests/block-template.php @@ -311,78 +311,6 @@ public function test_get_the_block_template_html_skips_singular_query_loop_when_ $this->assertSame( array( false ), $in_the_loop_logs, 'Main query loop was triggered despite a custom block template outside the current theme being used' ); } - /** - * Tests that `get_the_block_template_html()` adds a skip link when a MAIN element is present. - * - * @ticket 64361 - * @covers ::get_the_block_template_html - */ - public function test_get_the_block_template_html_adds_skip_link_when_main_present() { - global $_wp_current_template_id, $_wp_current_template_content; - - $_wp_current_template_id = get_stylesheet() . '//index'; - $_wp_current_template_content = '
      Content
      '; - - $processor = new WP_HTML_Tag_Processor( get_the_block_template_html() ); - $this->assertTrue( - $processor->next_tag( - array( - 'tag_name' => 'A', - 'class_name' => 'skip-link', - ) - ), - 'Expected skip link was not added to the block template HTML.' - ); - $this->assertSame( 'wp-skip-link', $processor->get_attribute( 'id' ), 'Unexpected ID on skip link.' ); - $this->assertTrue( $processor->has_class( 'screen-reader-text' ), 'Expected "screen-reader-text" class on skip link.' ); - } - - /** - * Tests that `get_the_block_template_html()` does not add a skip link when the skip-link action is unhooked. - * - * @ticket 64361 - * @covers ::get_the_block_template_html - * - * @dataProvider data_provider_skip_link_actions - */ - public function test_get_the_block_template_html_does_not_add_skip_link_when_action_unhooked( string $action, string $callback ) { - global $_wp_current_template_id, $_wp_current_template_content; - - $_wp_current_template_id = get_stylesheet() . '//index'; - $_wp_current_template_content = '
      Content
      '; - - remove_action( $action, $callback ); - - $processor = new WP_HTML_Tag_Processor( get_the_block_template_html() ); - $this->assertFalse( - $processor->next_tag( - array( - 'tag_name' => 'A', - 'class_name' => 'skip-link', - ) - ), - 'Unexpected skip link was added to the block template HTML when the action was unhooked.' - ); - } - - /** - * Data provider for test_get_the_block_template_html_does_not_add_skip_link_when_action_unhooked. - * - * @return array> - */ - public function data_provider_skip_link_actions(): array { - return array( - 'the_block_template_skip_link' => array( - 'action' => 'wp_footer', - 'callback' => 'the_block_template_skip_link', - ), - 'wp_enqueue_block_template_skip_link' => array( - 'action' => 'wp_enqueue_scripts', - 'callback' => 'wp_enqueue_block_template_skip_link', - ), - ); - } - /** * @ticket 58319 * diff --git a/tests/phpunit/tests/blocks/editor.php b/tests/phpunit/tests/blocks/editor.php index 1de4dbf1719a6..4241161388eb8 100644 --- a/tests/phpunit/tests/blocks/editor.php +++ b/tests/phpunit/tests/blocks/editor.php @@ -583,8 +583,7 @@ public function test_get_block_editor_settings_deprecated_filter_post_editor() { $this->assertSameSets( array( - 'canEditCSS' => false, - 'filter' => 'deprecated', + 'filter' => 'deprecated', ), $settings ); diff --git a/tests/phpunit/tests/blocks/render.php b/tests/phpunit/tests/blocks/render.php index 7b20dac147601..84b2382a4affe 100644 --- a/tests/phpunit/tests/blocks/render.php +++ b/tests/phpunit/tests/blocks/render.php @@ -75,9 +75,6 @@ public function test_the_content() { // Block rendering add some extra blank lines, but we're not worried about them. $block_filtered_content = preg_replace( "/\n{2,}/", "\n", $block_filtered_content ); - // Paragraph blocks now add a class, strip it for comparison with classic content. - $block_filtered_content = str_replace( ' class="wp-block-paragraph"', '', $block_filtered_content ); - remove_shortcode( 'someshortcode' ); $this->assertSame( trim( $classic_filtered_content ), trim( $block_filtered_content ) ); diff --git a/tests/phpunit/tests/blocks/renderReusable.php b/tests/phpunit/tests/blocks/renderReusable.php index f38ae41a41173..0a88818394780 100644 --- a/tests/phpunit/tests/blocks/renderReusable.php +++ b/tests/phpunit/tests/blocks/renderReusable.php @@ -83,7 +83,7 @@ public function test_render() { ); $block = new WP_Block( $parsed_block ); $output = $block->render(); - $this->assertSame( '

      Hello world!

      ', $output ); + $this->assertSame( '

      Hello world!

      ', $output ); } /** @@ -99,7 +99,7 @@ public function test_render_subsequent() { $block = new WP_Block( $parsed_block ); $output = $block->render(); $output .= $block->render(); - $this->assertSame( '

      Hello world!

      Hello world!

      ', $output ); + $this->assertSame( '

      Hello world!

      Hello world!

      ', $output ); } public function test_ref_empty() { diff --git a/tests/phpunit/tests/blocks/resolvePatternBlocks.php b/tests/phpunit/tests/blocks/resolvePatternBlocks.php index 4b28db4613f00..b2e6fa6463f7d 100644 --- a/tests/phpunit/tests/blocks/resolvePatternBlocks.php +++ b/tests/phpunit/tests/blocks/resolvePatternBlocks.php @@ -30,74 +30,12 @@ public function set_up() { 'description' => 'Recursive pattern.', ) ); - register_block_pattern( - 'core/single-root', - array( - 'title' => 'Single Root Pattern', - 'content' => 'Single root content', - 'description' => 'A single root pattern.', - 'categories' => array( 'text' ), - ) - ); - register_block_pattern( - 'core/single-root-with-forbidden-chars-in-attrs', - array( - 'title' => 'Single Root Pattern', - 'content' => 'Single root content', - 'description' => 'A single root pattern.', - 'categories' => array( - 'text', - 'bad\'); DROP TABLE wp_posts;--', - '', - "evil\x00null\nbyte", - 'category with html tags', - ), - ) - ); - register_block_pattern( - 'core/with-attrs', - array( - 'title' => 'Pattern With Attrs', - 'content' => 'Content', - 'description' => 'A pattern with existing attributes.', - ) - ); - register_block_pattern( - 'core/nested-single', - array( - 'title' => 'Nested Pattern', - 'content' => 'Nested content', - 'description' => 'A nested single root pattern.', - 'categories' => array( 'featured' ), - ) - ); - register_block_pattern( - 'core/existing-metadata', - array( - 'title' => 'Existing Metadata Pattern', - 'content' => 'Existing metadata content', - ) - ); - register_block_pattern( - 'core/with-custom-metadata', - array( - 'title' => 'Pattern With Custom Metadata', - 'content' => 'Content with custom metadata', - 'description' => 'A pattern with custom metadata keys.', - 'categories' => array( 'test' ), - ) - ); } public function tear_down() { unregister_block_pattern( 'core/test' ); unregister_block_pattern( 'core/recursive' ); - unregister_block_pattern( 'core/single-root' ); - unregister_block_pattern( 'core/single-root-with-forbidden-chars-in-attrs' ); - unregister_block_pattern( 'core/with-attrs' ); - unregister_block_pattern( 'core/nested-single' ); - unregister_block_pattern( 'core/existing-metadata' ); - unregister_block_pattern( 'core/with-custom-metadata' ); + parent::tear_down(); } @@ -122,55 +60,13 @@ public function test_should_resolve_pattern_blocks_as_expected( $blocks, $expect public function data_should_resolve_pattern_blocks_as_expected() { return array( // Works without attributes, leaves the block as is. - 'pattern with no slug attribute' => array( - '', - '', - ), + 'pattern with no slug attribute' => array( '', '' ), // Resolves the pattern. - 'test pattern' => array( - '', - 'HelloWorld', - ), + 'test pattern' => array( '', 'HelloWorld' ), // Skips recursive patterns. - 'recursive pattern' => array( - '', - 'Recursive', - ), + 'recursive pattern' => array( '', 'Recursive' ), // Resolves the pattern within a block. - 'pattern within a block' => array( - 'BeforeAfter', - 'BeforeHelloWorldAfter', - ), - // Resolves the single-root pattern and adds metadata. - 'single-root pattern' => array( - '', - 'Single root content', - ), - // Existing attributes are preserved when adding metadata. - 'existing attributes preserved' => array( - '', - 'Content', - ), - // Resolves the nested single-root pattern and adds metadata. - 'nested single-root pattern' => array( - '', - 'Nested contentSingle root content', - ), - // Sanitizes fields. - 'sanitized pattern attrs' => array( - '', - 'Single root content', - ), - // Metadata is merged with existing metadata and existing metadata is preserved. - 'existing metadata preserved' => array( - '', - 'Existing metadata content', - ), - // Custom metadata keys are preserved when resolving patterns. - 'custom metadata preserved' => array( - '', - 'Content with custom metadata', - ), + 'pattern within a block' => array( 'BeforeAfter', 'BeforeHelloWorldAfter' ), ); } } diff --git a/tests/phpunit/tests/blocks/wpBlock.php b/tests/phpunit/tests/blocks/wpBlock.php index 6460827fed032..f7c4710c9c3fe 100644 --- a/tests/phpunit/tests/blocks/wpBlock.php +++ b/tests/phpunit/tests/blocks/wpBlock.php @@ -368,39 +368,32 @@ public function test_render_applies_dynamic_render_block_filter() { * @return array */ public function data_provider_test_render_enqueues_scripts_and_styles(): array { - $block_markup = <<<'HTML' - -
      - -
      First child
      - - - -
      Last child
      - -
      - -HTML; + $block_markup = ' + +
      + +
      First child
      + + + +
      Last child
      + +
      + + '; // TODO: Add case where a dynamic block renders other blocks? return array( 'all_printed' => array( 'set_up' => null, 'block_markup' => $block_markup, - 'expected_rendered_block' => <<<'HTML' - -
      - -
      First child
      - -

      Hello World!

      - -
      Last child
      - -
      - -HTML - , + 'expected_rendered_block' => ' +
      +
      First child
      +

      Hello World!

      +
      Last child
      +
      + ', 'expected_styles' => array( 'static-view-style', 'static-child-view-style', 'dynamic-view-style' ), 'expected_scripts' => array( 'static-view-script', 'static-child-view-script', 'dynamic-view-script' ), 'expected_script_modules' => array( 'static-view-script-module', 'static-child-view-script-module', 'dynamic-view-script-module' ), @@ -421,20 +414,13 @@ static function ( $content ) { ); }, 'block_markup' => $block_markup, - 'expected_rendered_block' => <<<'HTML' - -
      - -
      First child
      - -

      Hello World!

      - -
      Last child
      - -
      - -HTML - , + 'expected_rendered_block' => ' +
      +
      First child
      +

      Hello World!

      +
      Last child
      +
      + ', 'expected_styles' => array( 'static-view-style', 'dynamic-extra', 'static-child-view-style', 'dynamic-view-style' ), 'expected_scripts' => array( 'static-view-script', 'static-child-view-script', 'dynamic-view-script' ), 'expected_script_modules' => array( 'static-view-script-module', 'static-child-view-script-module', 'dynamic-view-script-module' ), @@ -444,20 +430,12 @@ static function ( $content ) { add_filter( 'render_block_core/dynamic', '__return_empty_string' ); }, 'block_markup' => $block_markup, - 'expected_rendered_block' => <<<'HTML' - -
      - -
      First child
      - - - -
      Last child
      - -
      - -HTML - , + 'expected_rendered_block' => ' +
      +
      First child
      +
      Last child
      +
      + ', 'expected_styles' => array( 'static-view-style', 'static-child-view-style' ), 'expected_scripts' => array( 'static-view-script', 'static-child-view-script' ), 'expected_script_modules' => array( 'static-view-script-module', 'static-child-view-script-module' ), @@ -478,20 +456,12 @@ static function ( $enqueue, $block_name ) { ); }, 'block_markup' => $block_markup, - 'expected_rendered_block' => <<<'HTML' - -
      - -
      First child
      - - - -
      Last child
      - -
      - -HTML - , + 'expected_rendered_block' => ' +
      +
      First child
      +
      Last child
      +
      + ', 'expected_styles' => array( 'static-view-style', 'static-child-view-style', 'dynamic-view-style' ), 'expected_scripts' => array( 'static-view-script', 'static-child-view-script', 'dynamic-view-script' ), 'expected_script_modules' => array( 'static-view-script-module', 'static-child-view-script-module', 'dynamic-view-script-module' ), @@ -518,16 +488,11 @@ static function ( $content ) { add_filter( 'render_block_core/static-child', '__return_empty_string' ); }, 'block_markup' => $block_markup, - 'expected_rendered_block' => <<<'HTML' - -
      - -

      Hello World!

      - -
      - -HTML - , + 'expected_rendered_block' => ' +
      +

      Hello World!

      +
      + ', 'expected_styles' => array( 'static-view-style', 'dynamic-view-style' ), 'expected_scripts' => array( 'static-view-script', 'dynamic-view-script' ), 'expected_script_modules' => array( 'static-view-script-module', 'dynamic-view-script-module' ), @@ -547,18 +512,12 @@ static function ( $content ) { ); }, 'block_markup' => $block_markup, - 'expected_rendered_block' => <<<'HTML' - -
      - -
      First child
      - -

      Hello World!

      - -
      - -HTML - , + 'expected_rendered_block' => ' +
      +
      First child
      +

      Hello World!

      +
      + ', 'expected_styles' => array( 'static-view-style', 'static-child-view-style', 'dynamic-view-style' ), 'expected_scripts' => array( 'static-view-script', 'static-child-view-script', 'dynamic-view-script' ), 'expected_script_modules' => array( 'static-view-script-module', 'static-child-view-script-module', 'dynamic-view-script-module' ), @@ -603,8 +562,9 @@ static function ( $content ) { ); }, 'block_markup' => '
      ', - 'expected_rendered_block' => - '
      ', + 'expected_rendered_block' => ' +
      + ', 'expected_styles' => array( 'static-view-style', 'admin-bar' ), 'expected_scripts' => array( 'static-view-script', 'admin-bar' ), 'expected_script_modules' => array( 'static-view-script-module' ), @@ -708,7 +668,7 @@ public function test_render_enqueues_scripts_and_styles( ?Closure $set_up, strin ); // TODO: Why not use do_blocks() instead? - $parsed_blocks = parse_blocks( $block_markup ); + $parsed_blocks = parse_blocks( trim( $block_markup ) ); $parsed_block = $parsed_blocks[0]; $context = array(); $block = new WP_Block( $parsed_block, $context, $this->registry ); @@ -722,7 +682,7 @@ public function test_render_enqueues_scripts_and_styles( ?Closure $set_up, strin $expected_rendered_block, $rendered_block, '', - 'Rendered block does not contain expected HTML.' + "Rendered block does not contain expected HTML:\n$rendered_block" ); } @@ -837,102 +797,6 @@ public function test_build_query_vars_from_query_block() { ); } - /** - * @ticket 64416 - */ - public function test_build_query_vars_from_query_block_tax_query_old_format() { - $this->registry->register( - 'core/example', - array( 'uses_context' => array( 'query' ) ) - ); - - $parsed_blocks = parse_blocks( 'ab' ); - $parsed_block = $parsed_blocks[0]; - $context = array( - 'query' => array( - 'taxQuery' => array( - 'category' => array( 1, 2, 3 ), - 'post_tag' => array( 10, 20 ), - ), - ), - ); - $block = new WP_Block( $parsed_block, $context, $this->registry ); - $query = build_query_vars_from_query_block( $block, 1 ); - - $this->assertSame( - array( - 'post_type' => 'post', - 'order' => 'DESC', - 'orderby' => 'date', - 'post__not_in' => array(), - 'tax_query' => array( - array( - 'taxonomy' => 'category', - 'terms' => array( 1, 2, 3 ), - 'include_children' => false, - ), - array( - 'taxonomy' => 'post_tag', - 'terms' => array( 10, 20 ), - 'include_children' => false, - ), - ), - ), - $query - ); - } - - /** - * @ticket 64416 - */ - public function test_build_query_vars_from_query_block_tax_query_include_exclude() { - $this->registry->register( - 'core/example', - array( 'uses_context' => array( 'query' ) ) - ); - - $parsed_blocks = parse_blocks( 'ab' ); - $parsed_block = $parsed_blocks[0]; - $context = array( - 'query' => array( - 'taxQuery' => array( - 'include' => array( - 'category' => array( 1, 2, 3 ), - ), - 'exclude' => array( - 'post_tag' => array( 15 ), - ), - ), - ), - ); - $block = new WP_Block( $parsed_block, $context, $this->registry ); - $query = build_query_vars_from_query_block( $block, 1 ); - - $this->assertSame( - array( - 'post_type' => 'post', - 'order' => 'DESC', - 'orderby' => 'date', - 'post__not_in' => array(), - 'tax_query' => array( - array( - 'taxonomy' => 'category', - 'terms' => array( 1, 2, 3 ), - 'operator' => 'IN', - 'include_children' => false, - ), - array( - 'taxonomy' => 'post_tag', - 'terms' => array( 15 ), - 'operator' => 'NOT IN', - 'include_children' => false, - ), - ), - ), - $query - ); - } - /** * @ticket 62014 */ diff --git a/tests/phpunit/tests/build-visual-html-tree.php b/tests/phpunit/tests/build-visual-html-tree.php index e87cc1d1d257a..42e35c5b74b9f 100644 --- a/tests/phpunit/tests/build-visual-html-tree.php +++ b/tests/phpunit/tests/build-visual-html-tree.php @@ -9,13 +9,13 @@ */ class Tests_Build_Equivalent_HTML_Semantic_Tree extends WP_UnitTestCase { public function data_build_equivalent_html_semantic_tree() { - $block_markup = <<<'HTML' - -
      - -HTML; + $block_markup = << +
      + +END; - $tree_structure = <<<'TREE' + $tree_structure = << class="has-custom-classname is-style-default wp-block-separator" style="margin-top:50px;margin-bottom:50px;" - " -" -TREE; +END; - yield 'Block delimiter' => array( $block_markup, $tree_structure ); - - $block_markup = <<<'HTML' - - One - - Two - - Three - - Four - -HTML; - - $tree_structure = <<<'TREE' -BLOCK["example/block"] - " - One - " - BLOCK["example/nested-void"] - " - Two - " - BLOCK["example/nested"] - " - Three - " - " - Four -" - -TREE; - - yield 'Text nodes in blocks' => array( $block_markup, $tree_structure ); + return array( + 'Block delimiter' => array( $block_markup, $tree_structure ), + ); } /** * @ticket 63527 - * @ticket 64531 * * @covers ::build_visual_html_tree * @@ -177,41 +141,4 @@ public function test_build_equivalent_html_semantic_tree_with_non_equivalent_htm $this->assertNotSame( $tree_expected, $tree_actual ); } - - /** - * @ticket 64531 - * - * @covers ::build_visual_html_tree - */ - public function test_spacing() { - $html = <<<'HTML' -

      space-surrounded

      -

       nbsp-surrounded 

      -

      -newline-surrounded

      -

      tab-surrounded

      -

      ok

      -HTML; - - $expected = << - " space-surrounded " -"\n" -

      - "\u{00A0}nbsp-surrounded\u{00A0}" -"\n" -

      - "\nnewline-surrounded\n" -"\n" -

      - "\ttab-surrounded\t" -"\n" -

      - "ok" - -TREE; - - $tree_result = build_visual_html_tree( $html, '' ); - $this->assertSame( $expected, $tree_result ); - } } diff --git a/tests/phpunit/tests/comment/wpUpdateCommentCountNow.php b/tests/phpunit/tests/comment/wpUpdateCommentCountNow.php index 9dbb1f244ccf8..728998fa53c7d 100644 --- a/tests/phpunit/tests/comment/wpUpdateCommentCountNow.php +++ b/tests/phpunit/tests/comment/wpUpdateCommentCountNow.php @@ -47,8 +47,8 @@ public function test_using_filter_adjusts_comment_count_without_an_additional_da } /** - * @ticket 64325 - */ + * @ticket 64325 + */ public function test_only_approved_regular_comments_are_counted() { $post_id = self::factory()->post->create(); diff --git a/tests/phpunit/tests/compat/arrayKeyFirst.php b/tests/phpunit/tests/compat/arrayKeyFirst.php new file mode 100644 index 0000000000000..28db82e363a6a --- /dev/null +++ b/tests/phpunit/tests/compat/arrayKeyFirst.php @@ -0,0 +1,68 @@ +assertTrue( function_exists( 'array_key_first' ) ); + } + + /** + * @dataProvider data_array_key_first + * + * @ticket 45055 + * + * @param bool $expected The value of the key extracted to extracted from given array. + * @param array $arr The array to get first key from. + */ + public function test_array_key_first( $expected, $arr ) { + $this->assertSame( $expected, array_key_first( $arr ) ); + } + + /** + * Data provider. + * + * @return array[] + */ + public function data_array_key_first() { + return array( + 'string key' => array( + 'expected' => 'key1', + 'arr' => array( + 'key1' => 'val1', + 'key2' => 'val2', + ), + ), + 'int key' => array( + 'expected' => 99, + 'arr' => array( + 99 => 'val1', + 1 => 'val2', + ), + ), + 'no key' => array( + 'expected' => 0, + 'arr' => array( 'val1', 'val2' ), + ), + 'multi array' => array( + 'expected' => 99, + 'arr' => array( + 99 => array( 22 => 'val1' ), + 1 => 'val2', + ), + ), + 'empty array' => array( + 'expected' => null, + 'arr' => array(), + ), + ); + } +} diff --git a/tests/phpunit/tests/compat/arrayKeyLast.php b/tests/phpunit/tests/compat/arrayKeyLast.php new file mode 100644 index 0000000000000..819e850f13769 --- /dev/null +++ b/tests/phpunit/tests/compat/arrayKeyLast.php @@ -0,0 +1,77 @@ +assertTrue( function_exists( 'array_key_last' ) ); + } + + /** + * @dataProvider data_array_key_last + * + * @ticket 45055 + * + * @param bool $expected The value of the key extracted to extracted from given array. + * @param array $arr The array to get last key from. + */ + public function test_array_key_last( $expected, $arr ) { + $this->assertSame( $expected, array_key_last( $arr ) ); + } + + /** + * Data provider for test_array_key_last(). + * + * @return array + */ + public function data_array_key_last() { + return array( + 'string key' => array( + 'expected' => 'key2', + 'arr' => array( + 'key1' => 'val1', + 'key2' => 'val2', + ), + ), + 'int key' => array( + 'expected' => 1, + 'arr' => array( + 99 => 'val1', + 1 => 'val2', + ), + ), + 'no key' => array( + 'expected' => 1, + 'arr' => array( 'val1', 'val2' ), + ), + 'multi array' => array( + 'expected' => 1, + 'arr' => array( + 99 => array( 22 => 'val1' ), + 1 => 'val2', + ), + ), + 'mixed keys' => array( + 'expected' => 1, + 'arr' => array( + 'val1', + 'key2' => 'val2', + 'val3', + ), + ), + 'empty array' => array( + 'expected' => null, + 'arr' => array(), + ), + ); + } +} diff --git a/tests/phpunit/tests/compat/isCountable.php b/tests/phpunit/tests/compat/isCountable.php new file mode 100644 index 0000000000000..66bf3c8c6c09f --- /dev/null +++ b/tests/phpunit/tests/compat/isCountable.php @@ -0,0 +1,117 @@ +assertTrue( function_exists( 'is_countable' ) ); + } + + /** + * Test is_countable() polyfill. + * + * @ticket 43583 + * + * @dataProvider data_is_countable_functionality + * + * @param mixed $variable Variable to check. + * @param bool $is_countable The expected return value of PHP 7.3 is_countable() function. + */ + public function test_is_countable_functionality( $variable, $is_countable ) { + $this->assertSame( $is_countable, is_countable( $variable ) ); + } + + /** + * Data provider for test_is_countable_functionality(). + * + * @ticket 43583 + * + * @return array { + * @type array { + * @type mixed $variable Variable to check. + * @type bool $is_countable The expected return value of PHP 7.3 is_countable() function. + * } + * } + */ + public function data_is_countable_functionality() { + return array( + 'boolean true' => array( + 'variable' => true, + 'is_countable' => false, + ), + 'plain stdClass object' => array( + 'variable' => new stdClass(), + 'is_countable' => false, + ), + 'Array iterator object' => array( + 'variable' => new ArrayIteratorFakeForIsCountable(), + 'is_countable' => true, + ), + 'Countable object' => array( + 'variable' => new CountableFakeForIsCountable(), + 'is_countable' => true, + ), + 'integer 16' => array( + 'variable' => 16, + 'is_countable' => false, + ), + 'null' => array( + 'variable' => null, + 'is_countable' => false, + ), + 'non-empty array, 3 items' => array( + 'variable' => array( 1, 2, 3 ), + 'is_countable' => true, + ), + 'non-empty array, 1 item via cast' => array( + 'variable' => (array) 1, + 'is_countable' => true, + ), + 'array cast to object' => array( + 'variable' => (object) array( 'foo', 'bar', 'baz' ), + 'is_countable' => false, + ), + ); + } + + /** + * Test is_countable() polyfill for ResourceBundle. + * + * @ticket 43583 + * + * @requires extension intl + */ + public function test_is_countable_ResourceBundle() { + $this->assertTrue( is_countable( new ResourceBundle( 'en', null ) ) ); + } + + /** + * Test is_countable() polyfill for SimpleXMLElement. + * + * @ticket 43583 + * + * @requires extension simplexml + */ + public function test_is_countable_SimpleXMLElement() { + $this->assertTrue( is_countable( new SimpleXMLElement( '12' ) ) ); + } +} + +class ArrayIteratorFakeForIsCountable extends ArrayIterator { +} + +class CountableFakeForIsCountable implements Countable { + #[ReturnTypeWillChange] + public function count() { + return 16; + } +} diff --git a/tests/phpunit/tests/connectors/wpConnectorRegistry.php b/tests/phpunit/tests/connectors/wpConnectorRegistry.php deleted file mode 100644 index 161739b7a8ab8..0000000000000 --- a/tests/phpunit/tests/connectors/wpConnectorRegistry.php +++ /dev/null @@ -1,384 +0,0 @@ - - * @phpstan-var Connector - */ - private static array $default_args; - - /** - * Set up each test method. - */ - public function set_up(): void { - parent::set_up(); - - $this->registry = new WP_Connector_Registry(); - - self::$default_args = array( - 'name' => 'Test Provider', - 'description' => 'A test AI provider.', - 'type' => 'ai_provider', - 'authentication' => array( - 'method' => 'api_key', - 'credentials_url' => 'https://example.com/keys', - ), - ); - } - - /** - * @ticket 64791 - */ - public function test_register_returns_connector_data() { - $result = $this->registry->register( 'test_provider', self::$default_args ); - - $this->assertIsArray( $result ); - $this->assertSame( 'Test Provider', $result['name'] ); - $this->assertSame( 'A test AI provider.', $result['description'] ); - $this->assertSame( 'ai_provider', $result['type'] ); - $this->assertSame( 'api_key', $result['authentication']['method'] ); - $this->assertSame( 'https://example.com/keys', $result['authentication']['credentials_url'] ); - $this->assertSame( 'connectors_ai_test_provider_api_key', $result['authentication']['setting_name'] ); - } - - /** - * @ticket 64791 - */ - public function test_register_generates_setting_name_for_api_key() { - $result = $this->registry->register( 'my_ai', self::$default_args ); - - $this->assertSame( 'connectors_ai_my_ai_api_key', $result['authentication']['setting_name'] ); - } - - /** - * @ticket 64791 - */ - public function test_register_no_setting_name_for_none_auth() { - $args = array( - 'name' => 'No Auth Provider', - 'type' => 'ai_provider', - 'authentication' => array( 'method' => 'none' ), - ); - $result = $this->registry->register( 'no_auth', $args ); - - $this->assertIsArray( $result ); - $this->assertArrayNotHasKey( 'setting_name', $result['authentication'] ); - } - - /** - * @ticket 64791 - */ - public function test_register_defaults_description_to_empty_string() { - $args = array( - 'name' => 'Minimal', - 'type' => 'ai_provider', - 'authentication' => array( 'method' => 'none' ), - ); - - $result = $this->registry->register( 'minimal', $args ); - - $this->assertSame( '', $result['description'] ); - } - - /** - * @ticket 64791 - */ - public function test_register_includes_logo_url() { - $args = self::$default_args; - $args['logo_url'] = 'https://example.com/logo.png'; - - $result = $this->registry->register( 'with_logo', $args ); - - $this->assertArrayHasKey( 'logo_url', $result ); - $this->assertSame( 'https://example.com/logo.png', $result['logo_url'] ); - } - - /** - * @ticket 64791 - */ - public function test_register_omits_logo_url_when_not_provided() { - $result = $this->registry->register( 'no_logo', self::$default_args ); - - $this->assertArrayNotHasKey( 'logo_url', $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_omits_logo_url_when_empty() { - $args = self::$default_args; - $args['logo_url'] = ''; - - $result = $this->registry->register( 'empty_logo', $args ); - - $this->assertArrayNotHasKey( 'logo_url', $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_includes_plugin_data() { - $args = self::$default_args; - $args['plugin'] = array( 'slug' => 'my-plugin' ); - - $result = $this->registry->register( 'with_plugin', $args ); - - $this->assertArrayHasKey( 'plugin', $result ); - $this->assertSame( array( 'slug' => 'my-plugin' ), $result['plugin'] ); - } - - /** - * @ticket 64791 - */ - public function test_register_omits_plugin_when_not_provided() { - $result = $this->registry->register( 'no_plugin', self::$default_args ); - - $this->assertArrayNotHasKey( 'plugin', $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_invalid_id_with_uppercase() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $result = $this->registry->register( 'InvalidId', self::$default_args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_invalid_id_with_dashes() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $result = $this->registry->register( 'my-provider', self::$default_args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_empty_id() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $result = $this->registry->register( '', self::$default_args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_duplicate_id() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $this->registry->register( 'duplicate', self::$default_args ); - $result = $this->registry->register( 'duplicate', self::$default_args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_missing_name() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $args = self::$default_args; - unset( $args['name'] ); - - $result = $this->registry->register( 'no_name', $args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_empty_name() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $args = self::$default_args; - $args['name'] = ''; - - $result = $this->registry->register( 'empty_name', $args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_missing_type() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $args = self::$default_args; - unset( $args['type'] ); - - $result = $this->registry->register( 'no_type', $args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_missing_authentication() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $args = self::$default_args; - unset( $args['authentication'] ); - - $result = $this->registry->register( 'no_auth', $args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_register_rejects_invalid_auth_method() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::register' ); - - $args = self::$default_args; - $args['authentication']['method'] = 'oauth'; - - $result = $this->registry->register( 'bad_auth', $args ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_is_registered_returns_true_for_registered() { - $this->registry->register( 'exists', self::$default_args ); - - $this->assertTrue( $this->registry->is_registered( 'exists' ) ); - } - - /** - * @ticket 64791 - */ - public function test_is_registered_returns_false_for_unregistered() { - $this->assertFalse( $this->registry->is_registered( 'does_not_exist' ) ); - } - - /** - * @ticket 64791 - */ - public function test_get_registered_returns_connector_data() { - $this->registry->register( 'my_connector', self::$default_args ); - - $result = $this->registry->get_registered( 'my_connector' ); - - $this->assertIsArray( $result ); - $this->assertSame( 'Test Provider', $result['name'] ); - } - - /** - * @ticket 64791 - */ - public function test_get_registered_returns_null_for_unregistered() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::get_registered' ); - - $result = $this->registry->get_registered( 'nonexistent' ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_get_all_registered_returns_all_connectors() { - $this->registry->register( 'first', self::$default_args ); - - $args = self::$default_args; - $args['name'] = 'Second Provider'; - $this->registry->register( 'second', $args ); - - $all = $this->registry->get_all_registered(); - - $this->assertCount( 2, $all ); - $this->assertArrayHasKey( 'first', $all ); - $this->assertArrayHasKey( 'second', $all ); - } - - /** - * @ticket 64791 - */ - public function test_get_all_registered_returns_empty_when_none() { - $this->assertSame( array(), $this->registry->get_all_registered() ); - } - - /** - * @ticket 64791 - */ - public function test_unregister_removes_connector() { - $this->registry->register( 'to_remove', self::$default_args ); - - $result = $this->registry->unregister( 'to_remove' ); - - $this->assertIsArray( $result ); - $this->assertSame( 'Test Provider', $result['name'] ); - $this->assertFalse( $this->registry->is_registered( 'to_remove' ) ); - } - - /** - * @ticket 64791 - */ - public function test_unregister_returns_null_for_unregistered() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::unregister' ); - - $result = $this->registry->unregister( 'nonexistent' ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_get_instance_returns_registry() { - $instance = WP_Connector_Registry::get_instance(); - - $this->assertInstanceOf( WP_Connector_Registry::class, $instance ); - } - - /** - * @ticket 64791 - */ - public function test_set_instance_rejects_after_init() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::set_instance' ); - - WP_Connector_Registry::set_instance( new WP_Connector_Registry() ); - } - - /** - * @ticket 64791 - */ - public function test_get_instance_returns_same_instance() { - $instance1 = WP_Connector_Registry::get_instance(); - $instance2 = WP_Connector_Registry::get_instance(); - - $this->assertSame( $instance1, $instance2 ); - } -} diff --git a/tests/phpunit/tests/connectors/wpConnectorsGetConnectorSettings.php b/tests/phpunit/tests/connectors/wpConnectorsGetConnectorSettings.php deleted file mode 100644 index 8cb7a5c5d2d90..0000000000000 --- a/tests/phpunit/tests/connectors/wpConnectorsGetConnectorSettings.php +++ /dev/null @@ -1,117 +0,0 @@ -assertArrayHasKey( 'google', $connectors ); - $this->assertArrayHasKey( 'openai', $connectors ); - $this->assertArrayHasKey( 'anthropic', $connectors ); - $this->assertArrayHasKey( 'mock_connectors_test', $connectors ); - $this->assertCount( 4, $connectors ); - } - - /** - * @ticket 64730 - */ - public function test_each_connector_has_required_fields(): void { - $connectors = wp_get_connectors(); - - $this->assertNotEmpty( $connectors, 'Connector settings should not be empty.' ); - - foreach ( $connectors as $connector_id => $connector_data ) { - $this->assertArrayHasKey( 'name', $connector_data, "Connector '{$connector_id}' is missing 'name'." ); - $this->assertIsString( $connector_data['name'], "Connector '{$connector_id}' name should be a string." ); - $this->assertNotEmpty( $connector_data['name'], "Connector '{$connector_id}' name should not be empty." ); - $this->assertArrayHasKey( 'description', $connector_data, "Connector '{$connector_id}' is missing 'description'." ); - $this->assertIsString( $connector_data['description'], "Connector '{$connector_id}' description should be a string." ); - $this->assertArrayHasKey( 'type', $connector_data, "Connector '{$connector_id}' is missing 'type'." ); - $this->assertContains( $connector_data['type'], array( 'ai_provider' ), "Connector '{$connector_id}' has unexpected type '{$connector_data['type']}'." ); - $this->assertArrayHasKey( 'authentication', $connector_data, "Connector '{$connector_id}' is missing 'authentication'." ); - $this->assertIsArray( $connector_data['authentication'], "Connector '{$connector_id}' authentication should be an array." ); - $this->assertArrayHasKey( 'method', $connector_data['authentication'], "Connector '{$connector_id}' authentication is missing 'method'." ); - $this->assertContains( $connector_data['authentication']['method'], array( 'api_key', 'none' ), "Connector '{$connector_id}' has unexpected authentication method." ); - } - } - - /** - * @ticket 64730 - */ - public function test_api_key_connectors_have_setting_name_and_credentials_url(): void { - $connectors = wp_get_connectors(); - $api_key_count = 0; - - foreach ( $connectors as $connector_id => $connector_data ) { - if ( 'api_key' !== $connector_data['authentication']['method'] ) { - continue; - } - - ++$api_key_count; - - $this->assertArrayHasKey( 'setting_name', $connector_data['authentication'], "Connector '{$connector_id}' authentication is missing 'setting_name'." ); - $this->assertSame( - "connectors_ai_{$connector_id}_api_key", - $connector_data['authentication']['setting_name'] ?? null, - "Connector '{$connector_id}' setting_name does not match expected format." - ); - } - - $this->assertGreaterThan( 0, $api_key_count, 'At least one connector should use api_key authentication.' ); - } - - /** - * @ticket 64730 - */ - public function test_featured_provider_names_match_expected(): void { - $connectors = wp_get_connectors(); - - $this->assertSame( 'Google', $connectors['google']['name'] ); - $this->assertSame( 'OpenAI', $connectors['openai']['name'] ); - $this->assertSame( 'Anthropic', $connectors['anthropic']['name'] ); - } - - /** - * @ticket 64730 - */ - public function test_includes_registered_provider_from_registry(): void { - $connectors = wp_get_connectors(); - $mock = $connectors['mock_connectors_test']; - - $this->assertSame( 'Mock Connectors Test', $mock['name'] ); - $this->assertSame( '', $mock['description'] ); - $this->assertSame( 'ai_provider', $mock['type'] ); - $this->assertSame( 'api_key', $mock['authentication']['method'] ); - $this->assertNull( $mock['authentication']['credentials_url'] ?? null ); - $this->assertSame( 'connectors_ai_mock_connectors_test_api_key', $mock['authentication']['setting_name'] ?? null ); - } -} diff --git a/tests/phpunit/tests/connectors/wpConnectorsIsApiKeyValid.php b/tests/phpunit/tests/connectors/wpConnectorsIsApiKeyValid.php deleted file mode 100644 index d21b4a58695f5..0000000000000 --- a/tests/phpunit/tests/connectors/wpConnectorsIsApiKeyValid.php +++ /dev/null @@ -1,69 +0,0 @@ -setExpectedIncorrectUsage( '_wp_connectors_is_ai_api_key_valid' ); - - $result = _wp_connectors_is_ai_api_key_valid( 'test-key', 'nonexistent_provider' ); - - $this->assertNull( $result ); - } - - /** - * Tests that a registered and configured provider returns true. - * - * @ticket 64730 - */ - public function test_configured_provider_returns_true() { - self::set_mock_provider_configured( true ); - - $result = _wp_connectors_is_ai_api_key_valid( 'test-key', 'mock_connectors_test' ); - - $this->assertTrue( $result ); - } - - /** - * Tests that a registered but unconfigured provider returns false. - * - * @ticket 64730 - */ - public function test_unconfigured_provider_returns_false() { - self::set_mock_provider_configured( false ); - - $result = _wp_connectors_is_ai_api_key_valid( 'test-key', 'mock_connectors_test' ); - - $this->assertFalse( $result ); - } -} diff --git a/tests/phpunit/tests/connectors/wpConnectorsMaskApiKey.php b/tests/phpunit/tests/connectors/wpConnectorsMaskApiKey.php deleted file mode 100644 index 77f63f4b53ede..0000000000000 --- a/tests/phpunit/tests/connectors/wpConnectorsMaskApiKey.php +++ /dev/null @@ -1,44 +0,0 @@ -assertSame( $expected, _wp_connectors_mask_api_key( $input ) ); - } - - /** - * Data provider. - * - * @return array[] Test parameters { - * @type string $input API key to mask. - * @type string $expected Expected masked result. - * } - */ - public function data_mask_api_key(): array { - $bullet = "\u{2022}"; - - return array( - 'empty string' => array( '', '' ), - '1 char' => array( 'a', 'a' ), - '4 chars (boundary)' => array( 'abcd', 'abcd' ), - '5 chars (1 bullet + last 4)' => array( 'abcde', $bullet . 'bcde' ), - '20 chars (cap at 16 bullets)' => array( '12345678901234567890', str_repeat( $bullet, 16 ) . '7890' ), - '30 chars (cap at 16 bullets)' => array( str_repeat( 'x', 30 ), str_repeat( $bullet, 16 ) . 'xxxx' ), - ); - } -} diff --git a/tests/phpunit/tests/connectors/wpConnectorsResolveAiProviderLogoUrl.php b/tests/phpunit/tests/connectors/wpConnectorsResolveAiProviderLogoUrl.php deleted file mode 100644 index 71b1628af3311..0000000000000 --- a/tests/phpunit/tests/connectors/wpConnectorsResolveAiProviderLogoUrl.php +++ /dev/null @@ -1,107 +0,0 @@ -created_files as $file ) { - if ( is_file( $file ) ) { - unlink( $file ); - } - } - foreach ( array_reverse( $this->created_dirs ) as $dir ) { - if ( is_dir( $dir ) ) { - rmdir( $dir ); - } - } - parent::tear_down(); - } - - /** - * Creates a temporary file and tracks it for cleanup. - * - * @param string $path File path. - */ - private function create_file( string $path ): void { - $dir = dirname( $path ); - if ( ! is_dir( $dir ) ) { - wp_mkdir_p( $dir ); - $this->created_dirs[] = $dir; - } - file_put_contents( $path, '' ); - $this->created_files[] = $path; - } - - /** - * @ticket 64791 - */ - public function test_returns_null_when_path_is_empty() { - $this->assertNull( _wp_connectors_resolve_ai_provider_logo_url( '' ) ); - } - - /** - * @ticket 64791 - */ - public function test_resolves_plugin_dir_path_to_url() { - $logo_path = WP_PLUGIN_DIR . '/my-plugin/logo.svg'; - $this->create_file( $logo_path ); - - $result = _wp_connectors_resolve_ai_provider_logo_url( $logo_path ); - - $this->assertSame( site_url( '/wp-content/plugins/my-plugin/logo.svg' ), $result ); - } - - /** - * @ticket 64791 - */ - public function test_resolves_mu_plugin_dir_path_to_url() { - $logo_path = WPMU_PLUGIN_DIR . '/my-mu-plugin/logo.svg'; - $this->create_file( $logo_path ); - - $result = _wp_connectors_resolve_ai_provider_logo_url( $logo_path ); - - $this->assertSame( site_url( '/wp-content/mu-plugins/my-mu-plugin/logo.svg' ), $result ); - } - - /** - * @ticket 64791 - */ - public function test_returns_null_when_file_does_not_exist() { - $this->assertNull( - _wp_connectors_resolve_ai_provider_logo_url( WP_PLUGIN_DIR . '/nonexistent/logo.svg' ) - ); - } - - /** - * @ticket 64791 - * @expectedIncorrectUsage _wp_connectors_resolve_ai_provider_logo_url - */ - public function test_returns_null_and_triggers_doing_it_wrong_for_path_outside_plugin_dirs() { - $tmp_file = tempnam( sys_get_temp_dir(), 'logo_' ); - file_put_contents( $tmp_file, '' ); - $this->created_files[] = $tmp_file; - - $this->assertNull( _wp_connectors_resolve_ai_provider_logo_url( $tmp_file ) ); - } -} diff --git a/tests/phpunit/tests/connectors/wpRegisterConnector.php b/tests/phpunit/tests/connectors/wpRegisterConnector.php deleted file mode 100644 index ad55c012d97c7..0000000000000 --- a/tests/phpunit/tests/connectors/wpRegisterConnector.php +++ /dev/null @@ -1,63 +0,0 @@ -assertTrue( wp_is_connector_registered( 'openai' ) ); - $this->assertTrue( wp_is_connector_registered( 'google' ) ); - $this->assertTrue( wp_is_connector_registered( 'anthropic' ) ); - } - - /** - * @ticket 64791 - */ - public function test_is_connector_registered_returns_false_for_unregistered() { - $this->assertFalse( wp_is_connector_registered( 'nonexistent_provider' ) ); - } - - /** - * @ticket 64791 - */ - public function test_get_connector_returns_data_for_default() { - $connector = wp_get_connector( 'openai' ); - - $this->assertIsArray( $connector ); - $this->assertSame( 'OpenAI', $connector['name'] ); - $this->assertSame( 'ai_provider', $connector['type'] ); - $this->assertSame( 'api_key', $connector['authentication']['method'] ); - $this->assertSame( 'connectors_ai_openai_api_key', $connector['authentication']['setting_name'] ); - } - - /** - * @ticket 64791 - */ - public function test_get_connector_returns_null_for_unregistered() { - $this->setExpectedIncorrectUsage( 'WP_Connector_Registry::get_registered' ); - - $result = wp_get_connector( 'nonexistent_provider' ); - - $this->assertNull( $result ); - } - - /** - * @ticket 64791 - */ - public function test_get_connectors_returns_all_defaults() { - $connectors = wp_get_connectors(); - - $this->assertArrayHasKey( 'openai', $connectors ); - $this->assertArrayHasKey( 'google', $connectors ); - $this->assertArrayHasKey( 'anthropic', $connectors ); - } -} diff --git a/tests/phpunit/tests/customize/custom-css-setting.php b/tests/phpunit/tests/customize/custom-css-setting.php index 06f77075d0ba8..65cc3f717fe59 100644 --- a/tests/phpunit/tests/customize/custom-css-setting.php +++ b/tests/phpunit/tests/customize/custom-css-setting.php @@ -374,31 +374,6 @@ public function filter_update_custom_css_data( $data, $args ) { return $data; } - /** - * Ensure that dangerous STYLE tag contents do not break HTML output. - * - * @ticket 64418 - * @covers ::wp_update_custom_css_post - * @covers ::wp_custom_css_cb - */ - public function test_wp_custom_css_cb_escapes_dangerous_html() { - wp_update_custom_css_post( - '*::before { content: ""; }', - array( - 'stylesheet' => $this->setting->stylesheet, - ) - ); - $output = get_echo( 'wp_custom_css_cb' ); - $expected = - <<<'HTML' - - - HTML; - $this->assertEqualHTML( $expected, $output ); - } - /** * Tests that validation errors are caught appropriately. * @@ -407,7 +382,8 @@ public function test_wp_custom_css_cb_escapes_dangerous_html() { * * @covers WP_Customize_Custom_CSS_Setting::validate */ - public function test_validate_basic_css() { + public function test_validate() { + // Empty CSS throws no errors. $result = $this->setting->validate( '' ); $this->assertTrue( $result ); @@ -417,84 +393,9 @@ public function test_validate_basic_css() { $result = $this->setting->validate( $basic_css ); $this->assertTrue( $result ); - // Check for illegal closing STYLE tag. + // Check for markup. $unclosed_comment = $basic_css . ''; $result = $this->setting->validate( $unclosed_comment ); $this->assertArrayHasKey( 'illegal_markup', $result->errors ); } - - /** - * @ticket 64418 - * @covers WP_Customize_Custom_CSS_Setting::validate - */ - public function test_validate_accepts_css_property_at_rule() { - $css = - <<<'CSS' - @property --animate { - syntax: ""; - inherits: true; - initial-value: false; - } - CSS; - $this->assertTrue( $this->setting->validate( $css ) ); - } - - /** - * @ticket 64418 - * @covers ::wp_update_custom_css_post - * @covers ::wp_custom_css_cb - */ - public function test_save_and_print_property_at_rule() { - $css = - <<<'CSS' - @property --animate { - syntax: ""; - inherits: true; - initial-value: false; - } - CSS; - wp_update_custom_css_post( $css, array( 'stylesheet' => $this->setting->stylesheet ) ); - $output = get_echo( 'wp_custom_css_cb' ); - $expected = "\n"; - $this->assertEqualHTML( $expected, $output ); - } - - /** - * @dataProvider data_custom_css_disallowed - * - * @ticket 64418 - * @covers WP_Customize_Custom_CSS_Setting::validate - */ - public function test_validate_prevents( $css, $expected_error_message ) { - $result = $this->setting->validate( $css ); - $this->assertWPError( $result ); - $this->assertSame( $expected_error_message, $result->get_error_message() ); - } - - /** - * Data provider. - * - * @return array - */ - public static function data_custom_css_disallowed(): array { - return array( - 'style close tag' => array( 'css……css', 'The CSS must not contain "</style>".' ), - 'style close tag upper case' => array( '', 'The CSS must not contain "</STYLE>".' ), - 'style close tag mixed case' => array( '', 'The CSS must not contain "</sTyLe>".' ), - 'style close tag in comment' => array( '/**/', 'The CSS must not contain "</style>".' ), - 'style close tag (/)' => array( ' array( " array( " array( " array( " array( ' array( '<', 'The CSS must not end in "<".' ), - 'truncated " array( ' array( ' array( ' array( ' array( ' array( 'add_setting( - 'some_jpg', - array( - 'default' => 'https://example.com/image.jpg', - ) - ); - $manager->add_setting( - 'some_avif', - array( - 'default' => 'https://example.com/image.avif', - ) - ); - $manager->add_setting( - 'some_pdf', - array( - 'default' => 'https://example.com/image.pdf', - ) - ); - $manager->add_setting( 'no_default' ); - - $some_jpg_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'some_jpg' ) ); - $some_avif_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'some_avif' ) ); - $some_pdf_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'some_pdf' ) ); - $no_default_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'no_default' ) ); - - $some_jpg_control_json = $some_jpg_control->json(); - $some_avif_control_json = $some_avif_control->json(); - $some_pdf_control_json = $some_pdf_control->json(); - - $this->assertSame( 'image', $some_jpg_control_json['defaultAttachment']['type'] ); - $this->assertSame( 'image', $some_avif_control_json['defaultAttachment']['type'] ); - $this->assertSame( 'document', $some_pdf_control_json['defaultAttachment']['type'] ); - $this->assertArrayNotHasKey( 'defaultAttachment', $no_default_control->json() ); - } -} diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 5f1c30fe4cf47..ed742f4040133 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -105,73 +105,6 @@ public function get_script_html() { $this->assertEqualHTML( $expected, $processor->get_script_html(), '', $message ); } - /** - * Tests that scripts trigger _doing_it_wrong for unrecognized keys in the $args array. - * - * @ticket 63486 - * - * @covers ::wp_register_script - * @covers ::wp_enqueue_script - * @covers ::_wp_scripts_add_args_data - * - * @dataProvider data_unrecognized_keys_in_args - * - * @param string $function_name Function name to call. - * @param array $args Arguments to pass to the function. - * @param string $expected_msg Expected error message substring. - */ - public function test_unrecognized_keys_in_args( string $function_name, array $args, string $expected_msg ) { - $this->setExpectedIncorrectUsage( $function_name ); - - call_user_func_array( $function_name, $args ); - - $this->assertStringContainsString( - $expected_msg, - $this->caught_doing_it_wrong[ $function_name ] - ); - } - - /** - * Data provider for test_unrecognized_keys_in_args. - * - * @return array - */ - public function data_unrecognized_keys_in_args(): array { - return array( - 'register_script' => array( - 'function_name' => 'wp_register_script', - 'args' => array( - 'unrecognized-key-register', - '/script.js', - array(), - null, - array( - 'unrecognized_key' => 'value', - 'another_bad_key' => 'value', - ), - ), - 'expected_msg' => 'Unrecognized key(s) in the $args param: unrecognized_key, another_bad_key. Supported keys: strategy, in_footer, fetchpriority, module_dependencies', - ), - 'enqueue_script' => array( - 'function_name' => 'wp_enqueue_script', - 'args' => array( - 'unrecognized-key-enqueue', - '/script.js', - array(), - null, - array( - 'strategy' => 'defer', - 'in_footer' => true, - 'fetchpriority' => 'high', - 'module_dependencies' => array( 'foo' ), - 'invalid_key' => 'bar', - ), - ), - 'expected_msg' => 'Unrecognized key(s) in the $args param: invalid_key. Supported keys: strategy, in_footer, fetchpriority, module_dependencies', - ), - ); - } - /** * Test versioning * @@ -354,7 +287,7 @@ public function test_delayed_dependent_with_blocking_dependency( $strategy ) { wp_enqueue_script( 'main-script-a2', '/main-script-a2.js', array( 'dependency-script-a2' ), null, compact( 'strategy' ) ); $output = get_echo( 'wp_print_scripts' ); $expected = "\n"; - $expected .= "\n"; + $expected .= ""; $this->assertEqualHTML( $expected, $output, '', 'Dependents of a blocking dependency are free to have any strategy.' ); } @@ -376,9 +309,8 @@ public function test_blocking_dependent_with_delayed_dependency( $strategy ) { wp_enqueue_script( 'dependent-script-a3', '/dependent-script-a3.js', array( 'main-script-a3' ), null ); $output = get_echo( 'wp_print_scripts' ); $expected = << - - + + JS; $this->assertEqualHTML( $expected, $output, '', 'Blocking dependents must force delayed dependencies to become blocking.' ); } @@ -401,8 +333,8 @@ public function test_delayed_dependent_with_blocking_dependency_not_enqueued( $s // This dependent is registered but not enqueued, so it should not factor into the eligible loading strategy. wp_register_script( 'dependent-script-a4', '/dependent-script-a4.js', array( 'main-script-a4' ), null ); $output = get_echo( 'wp_print_scripts' ); - $expected = ""; - $this->assertEqualHTMLScriptTagById( $expected, $output, 'Only enqueued dependents should affect the eligible strategy.' ); + $expected = str_replace( "'", '"', "" ); + $this->assertStringContainsString( $expected, $output, 'Only enqueued dependents should affect the eligible strategy.' ); } /** @@ -631,7 +563,7 @@ public function data_provider_to_test_various_strategy_dependency_chains() { scriptEventLog.push( "blocking-not-async-without-dependency: before inline" ) //# sourceURL=blocking-not-async-without-dependency-js-before - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + HTML , ), @@ -1031,7 +963,7 @@ public function data_provider_to_test_various_strategy_dependency_chains() { $this->add_test_inline_script( $handle, 'after' ); }, 'expected_markup' => << + - - + + + - + - - + + + HTML , ), @@ -1144,8 +1076,8 @@ public function test_various_strategy_dependency_chains( $set_up, $expected_mark public function test_loading_strategy_with_defer_having_no_dependents_nor_dependencies() { wp_enqueue_script( 'main-script-d1', 'http://example.com/main-script-d1.js', array(), null, array( 'strategy' => 'defer' ) ); $output = get_echo( 'wp_print_scripts' ); - $expected = ""; - $this->assertEqualHTMLScriptTagById( $expected, $output, 'Expected defer, as there is no dependent or dependency' ); + $expected = str_replace( "'", '"', "\n" ); + $this->assertStringContainsString( $expected, $output, 'Expected defer, as there is no dependent or dependency' ); } /** @@ -1164,7 +1096,7 @@ public function test_loading_strategy_with_defer_dependent_and_varied_dependenci wp_enqueue_script( 'main-script-d2', 'http://example.com/main-script-d2.js', array( 'dependency-script-d2-1', 'dependency-script-d2-3' ), null, array( 'strategy' => 'defer' ) ); $output = get_echo( 'wp_print_scripts' ); $expected = ''; - $this->assertEqualHTMLScriptTagById( $expected, $output, 'Expected defer, as all dependencies are either deferred or blocking' ); + $this->assertStringContainsString( $expected, $output, 'Expected defer, as all dependencies are either deferred or blocking' ); } /** @@ -1183,7 +1115,7 @@ public function test_loading_strategy_with_all_defer_dependencies() { wp_enqueue_script( 'dependent-script-d3-3', 'http://example.com/dependent-script-d3-3.js', array( 'dependent-script-d3-2' ), null, array( 'strategy' => 'defer' ) ); $output = get_echo( 'wp_print_scripts' ); $expected = ''; - $this->assertEqualHTMLScriptTagById( $expected, $output, 'Expected defer, as all dependents have defer loading strategy' ); + $this->assertStringContainsString( $expected, $output, 'Expected defer, as all dependents have defer loading strategy' ); } /** @@ -1344,58 +1276,6 @@ public function test_invalid_fetchpriority_on_alias() { $this->assertArrayNotHasKey( 'fetchpriority', wp_scripts()->registered['alias']->extra ); } - /** - * Tests validation of module_dependencies in WP_Scripts::add_data(). - * - * @ticket 61500 - * - * @covers WP_Scripts::add_data - * - * @dataProvider data_add_data_module_dependencies_validation - * - * @param mixed $data Data to add. - * @param string $message Expected error message. - * @param bool $expected Expected return value. - * @param array|null $stored Expected stored value. - */ - public function test_add_data_module_dependencies_validation( $data, string $message, bool $expected, ?array $stored ) { - wp_register_script( 'test-script', '/test.js' ); - - $expected_incorrect_usage = 'WP_Scripts::add_data'; - $this->setExpectedIncorrectUsage( $expected_incorrect_usage ); - - $this->assertSame( $expected, wp_scripts()->add_data( 'test-script', 'module_dependencies', $data ) ); - $this->assertStringContainsString( $message, $this->caught_doing_it_wrong[ $expected_incorrect_usage ] ); - - if ( null === $stored ) { - $this->assertFalse( wp_scripts()->get_data( 'test-script', 'module_dependencies' ) ); - } else { - $this->assertSame( $stored, wp_scripts()->get_data( 'test-script', 'module_dependencies' ) ); - } - } - - /** - * Data provider. - * - * @return array>|null}> - */ - public function data_add_data_module_dependencies_validation(): array { - return array( - 'non-array' => array( - 'data' => 'not-an-array', - 'message' => 'The value for "module_dependencies" must be an array', - 'expected' => false, - 'stored' => null, - ), - 'bad-items' => array( - 'data' => array( 'valid', 123, true, array(), array( 'id' => 'valid2' ) ), - 'message' => 'has one or more of its script module dependencies ("module_dependencies") which are invalid', - 'expected' => true, - 'stored' => array( 'valid', array( 'id' => 'valid2' ) ), - ), - ); - } - /** * Data provider. * @@ -1405,20 +1285,22 @@ public function data_provider_to_test_fetchpriority_bumping(): array { return array( 'enqueue_bajo' => array( 'enqueues' => array( 'bajo' ), - 'expected' => "\n", + 'expected' => '', ), 'enqueue_auto' => array( 'enqueues' => array( 'auto' ), - 'expected' => - "\n" . - "\n", + 'expected' => ' + + + ', ), 'enqueue_alto' => array( 'enqueues' => array( 'alto' ), - 'expected' => - "\n" . - "\n" . - "\n", + 'expected' => ' + + + + ', ), ); } @@ -1472,17 +1354,16 @@ public function test_fetchpriority_bumping_a_to_z() { wp_enqueue_script( 'x' ); $actual = get_echo( 'wp_print_scripts' ); - $expected = <<<'HTML' - - - - - - - - - -HTML; + $expected = ' + + + + + + + + + '; $this->assertEqualHTML( $expected, $actual, '', "Snapshot:\n$actual" ); } @@ -1538,7 +1419,7 @@ public function test_priority_of_dependency_for_non_enqueued_dependent() { $actual = $this->normalize_markup_for_snapshot( get_echo( array( $wp_scripts, 'print_scripts' ) ) ); $this->assertEqualHTML( - "\n", + '', $actual, '', "Snapshot:\n$actual" @@ -1575,7 +1456,7 @@ public function test_printing_default_script_comment_reply_enqueued_or_not_enque $this->assertEqualHTML( sprintf( - "\n", + '', includes_url( 'js/comment-reply.js' ) ), $markup @@ -1614,10 +1495,9 @@ public function test_loading_strategy_with_invalid_defer_registration() { wp_enqueue_script( 'dependent-script-d4-1', '/dependent-script-d4-1.js', array( 'main-script-d4' ), null, array( 'strategy' => 'defer' ) ); wp_enqueue_script( 'dependent-script-d4-2', '/dependent-script-d4-2.js', array( 'dependent-script-d4-1' ), null ); wp_enqueue_script( 'dependent-script-d4-3', '/dependent-script-d4-3.js', array( 'dependent-script-d4-2' ), null, array( 'strategy' => 'defer' ) ); - $output = get_echo( 'wp_print_scripts' ); - $expected = ""; - $this->assertEqualHTMLScriptTagById( $expected, $output, 'Scripts registered as defer but that have all dependents with no strategy, should become blocking (no strategy).' ); + $expected = str_replace( "'", '"', "\n" ); + $this->assertStringContainsString( $expected, $output, 'Scripts registered as defer but that have all dependents with no strategy, should become blocking (no strategy).' ); } /** @@ -1997,6 +1877,22 @@ public function test_concatenate_with_blocking_script_before_and_after_script_wi $this->assertEqualHTML( $expected, $print_scripts, '', 'Scripts are being incorrectly concatenated when a main script is registered as deferred after other blocking scripts are registered. Deferred scripts should not be part of the script concat loader query string. ' ); } + /** + * @ticket 42804 + */ + public function test_wp_enqueue_script_with_html5_support_does_not_contain_type_attribute() { + global $wp_version; + + $GLOBALS['wp_scripts'] = new WP_Scripts(); + $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' ); + + wp_enqueue_script( 'empty-deps-no-version', 'example.com' ); + + $expected = "\n"; + + $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); + } + /** * Test the different protocol references in wp_enqueue_script * @@ -2313,7 +2209,6 @@ public function test_wp_add_inline_script_before() { console.log("before"); //# sourceURL=test-example-js-before - HTML; $expected .= "\n"; @@ -2333,7 +2228,6 @@ public function test_wp_add_inline_script_after() { console.log("after"); //# sourceURL=test-example-js-after - HTML; $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); @@ -2679,13 +2573,13 @@ public function test_wp_add_inline_script_customize_dependency() { _print_scripts(); $print_scripts = $this->getActualOutput(); - $expected = ""; + $expected = "\n"; $this->assertEqualHTMLScriptTagById( $expected, $print_scripts ); $expected = "'; + $expected .= "\n"; $this->assertEqualHTMLScriptTagById( $expected, $print_scripts ); } @@ -3158,13 +3052,14 @@ public function test_wp_enqueue_code_editor_when_php_file_will_be_passed() { 'curly', 'eqeqeq', 'eqnull', - 'esversion', + 'es3', 'expr', 'immed', - 'module', 'noarg', 'nonbsp', + 'onevar', 'quotmark', + 'trailing', 'undef', 'unused', 'browser', @@ -3241,13 +3136,14 @@ public function test_wp_enqueue_code_editor_when_generated_array_by_compact_will 'curly', 'eqeqeq', 'eqnull', - 'esversion', + 'es3', 'expr', 'immed', - 'module', 'noarg', 'nonbsp', + 'onevar', 'quotmark', + 'trailing', 'undef', 'unused', 'browser', @@ -3338,13 +3234,14 @@ public function test_wp_enqueue_code_editor_when_generated_array_by_array_merge_ 'curly', 'eqeqeq', 'eqnull', - 'esversion', + 'es3', 'expr', 'immed', - 'module', 'noarg', 'nonbsp', + 'onevar', 'quotmark', + 'trailing', 'undef', 'unused', 'browser', @@ -3432,13 +3329,14 @@ public function test_wp_enqueue_code_editor_when_simple_array_will_be_passed() { 'curly', 'eqeqeq', 'eqnull', - 'esversion', + 'es3', 'expr', 'immed', - 'module', 'noarg', 'nonbsp', + 'onevar', 'quotmark', + 'trailing', 'undef', 'unused', 'browser', @@ -3668,9 +3566,10 @@ public function data_provider_script_move_to_footer() { wp_enqueue_script( 'script-b', 'https://example.com/script-b.js', array( 'script-a' ), null, array( 'in_footer' => true ) ); }, 'expected_header' => '', - 'expected_footer' => - "\n" . - "\n", + 'expected_footer' => ' + + + ', 'expected_in_footer' => array( 'script-a', 'script-b', @@ -3688,9 +3587,10 @@ public function data_provider_script_move_to_footer() { wp_enqueue_script( 'script-b', 'https://example.com/script-b.js', array( 'script-a' ), null, array( 'in_footer' => true ) ); }, 'expected_header' => '', - 'expected_footer' => - "\n" . - "\n", + 'expected_footer' => ' + + + ', 'expected_in_footer' => array( 'script-a', 'script-b', @@ -3707,9 +3607,10 @@ public function data_provider_script_move_to_footer() { wp_enqueue_script( 'script-a', 'https://example.com/script-a.js', array(), null, array( 'strategy' => 'defer' ) ); wp_enqueue_script( 'script-b', 'https://example.com/script-b.js', array( 'script-a' ), null, array( 'in_footer' => false ) ); }, - 'expected_header' => - "\n" . - "\n", + 'expected_header' => ' + + + ', 'expected_footer' => '', 'expected_in_footer' => array(), 'expected_groups' => array( @@ -3733,10 +3634,12 @@ public function data_provider_script_move_to_footer() { ) ); }, - 'expected_header' => - "\n", - 'expected_footer' => - "\n", + 'expected_header' => ' + + ', + 'expected_footer' => ' + + ', 'expected_in_footer' => array( 'script-b', ), @@ -3781,12 +3684,14 @@ public function data_provider_script_move_to_footer() { ) ); }, - 'expected_header' => - "\n" . - "\n", - 'expected_footer' => - "\n" . - "\n", + 'expected_header' => ' + + + ', + 'expected_footer' => ' + + + ', 'expected_in_footer' => array( 'script-c', 'script-d', @@ -3826,11 +3731,12 @@ public function data_provider_script_move_to_footer() { ); }, 'expected_header' => '', - 'expected_footer' => - "\n" . - "\n" . - "\n" . - "\n", + 'expected_footer' => ' + + + + + ', 'expected_in_footer' => array( 'script-a', 'script-b', @@ -3872,12 +3778,14 @@ public function data_provider_script_move_to_footer() { ) ); }, - 'expected_header' => - "\n" . - "\n", - 'expected_footer' => - "\n" . - "\n", + 'expected_header' => ' + + + ', + 'expected_footer' => ' + + + ', 'expected_in_footer' => array( 'script-c', 'script-d', @@ -3953,19 +3861,14 @@ public function data_vendor_script_versions_registered_manually() { return array( 'backbone' => array( 'backbone' ), 'clipboard' => array( 'clipboard' ), - 'codemirror' => array( 'codemirror', 'wp-codemirror' ), 'core-js-url-browser' => array( 'core-js-url-browser', 'wp-polyfill-url' ), - 'csslint' => array( 'csslint' ), 'element-closest' => array( 'element-closest', 'wp-polyfill-element-closest' ), - 'esprima' => array( 'esprima' ), 'formdata-polyfill' => array( 'formdata-polyfill', 'wp-polyfill-formdata' ), 'imagesloaded' => array( 'imagesloaded' ), 'jquery-color' => array( 'jquery-color' ), 'jquery-core' => array( 'jquery', 'jquery-core' ), 'jquery-form' => array( 'jquery-form' ), 'jquery-hoverintent' => array( 'jquery-hoverintent', 'hoverIntent' ), - 'htmlhint' => array( 'htmlhint' ), - 'jsonlint' => array( 'jsonlint' ), 'lodash' => array( 'lodash' ), 'masonry' => array( 'masonry-layout', 'masonry' ), 'moment' => array( 'moment' ), @@ -4016,7 +3919,7 @@ static function ( $dependency ) { ); // Exclude packages that are not registered in WordPress. - $exclude = array( 'react-is', 'json2php', 'espree' ); + $exclude = array( 'react-is', 'json2php' ); $package_json_dependencies = array_diff( $package_json_dependencies, $exclude ); /* @@ -4093,7 +3996,6 @@ public function test_source_url_with_concat() { $print_scripts = get_echo( '_print_scripts' ); $expected = << var one = {"key":"val"};var two = {"key":"val"}; //# sourceURL=js-inline-concat-one%2Ctwo @@ -4167,7 +4069,7 @@ public function test_varying_versions_added_to_handle_args_enqueued_scripts( $ve wp_enqueue_script( 'test-script?qs1=q1&qs2=q2', '/test-script.js', array(), $version ); $markup = get_echo( 'wp_print_scripts' ); - $expected = "\n"; + $expected = ""; $this->assertEqualHTML( $expected, $markup, '', 'Expected equal snapshot for wp_print_scripts() with version ' . var_export( $version, true ) . ":\n$markup" ); } @@ -4188,75 +4090,10 @@ public function test_varying_versions_added_to_handle_args_registered_then_enque wp_enqueue_script( 'test-script?qs1=q1&qs2=q2' ); $markup = get_echo( 'wp_print_scripts' ); - $expected = "\n"; + $expected = ""; $this->assertEqualHTML( $expected, $markup, '', 'Expected equal snapshot for wp_print_scripts() with version ' . var_export( $version, true ) . ":\n$markup" ); } - /** - * Tests that duplicate query vars and fragments are preserved in scripts. - * - * @ticket 64372 - * - * @dataProvider data_duplicate_query_vars_and_fragments_preserved_in_scripts - * - * @param string $src The script's source URL. - * @param string|bool|null $ver The script's version. - * @param string $expected_url The expected URL. - * @param string $handle Optional. The script's registered handle. Default 'test-script'. - */ - public function test_duplicate_query_vars_and_fragments_preserved_in_scripts( string $src, $ver, string $expected_url, string $handle = 'test-script' ): void { - wp_enqueue_script( $handle, $src, array(), $ver ); - $output = get_echo( 'wp_print_scripts' ); - $processor = new WP_HTML_Tag_Processor( $output ); - - $this->assertTrue( $processor->next_tag( 'script' ) ); - $this->assertSame( $expected_url, $processor->get_attribute( 'src' ) ); - } - - /** - * Data provider for test_duplicate_query_vars_and_fragments_preserved_in_scripts. - * - * @return array Data provider. - */ - public function data_duplicate_query_vars_and_fragments_preserved_in_scripts(): array { - $ver = get_bloginfo( 'version' ); - - return array( - 'duplicate query vars' => array( - 'src' => 'https://example.com/script.js?arg=1&arg=2', - 'ver' => '1.0', - 'expected_url' => 'https://example.com/script.js?arg=1&arg=2&ver=1.0', - ), - 'duplicate query vars, null version' => array( - 'src' => 'https://example.com/script.js?arg=1&arg=2', - 'ver' => null, - 'expected_url' => 'https://example.com/script.js?arg=1&arg=2', - ), - 'duplicate query vars, false version' => array( - 'src' => 'https://example.com/script.js?arg=1&arg=2', - 'ver' => false, - 'expected_url' => "https://example.com/script.js?arg=1&arg=2&ver=$ver", - ), - 'duplicate query vars in handle' => array( - 'src' => 'https://example.com/test-script.js', - 'ver' => '1.0', - 'expected_url' => 'https://example.com/test-script.js?ver=1.0&a=1&a=2', - 'handle' => 'test-script?a=1&a=2', - ), - 'duplicate query vars and fragments' => array( - 'src' => 'https://example.com/script.js?arg=1&arg=2#anchor', - 'ver' => '1.0', - 'expected_url' => 'https://example.com/script.js?arg=1&arg=2&ver=1.0#anchor', - ), - 'zero query var in handle' => array( - 'src' => 'https://example.com/test-script.js', - 'ver' => '1.0', - 'expected_url' => 'https://example.com/test-script.js?ver=1.0&0', - 'handle' => 'test-script?0', - ), - ); - } - /** * Data provider for: * - test_varying_versions_added_to_handle_args_enqueued_scripts diff --git a/tests/phpunit/tests/dependencies/styles.php b/tests/phpunit/tests/dependencies/styles.php index de6fefb94b5bb..57687752f6a08 100644 --- a/tests/phpunit/tests/dependencies/styles.php +++ b/tests/phpunit/tests/dependencies/styles.php @@ -882,7 +882,6 @@ public function test_source_url_with_concat() { h1 { background: blue; }h2 { color: green; } /*# sourceURL=css-inline-concat-one%2Ctwo */ - HTML; $this->assertEqualHTML( $expected, $printed ); @@ -936,7 +935,7 @@ public function test_varying_versions_added_to_handle_args_enqueued_styles( $ver wp_enqueue_style( 'test-style?qs1=q1&qs2=q2', '/test-style.css', array(), $version ); $markup = get_echo( 'wp_print_styles' ); - $expected = "\n"; + $expected = ""; $this->assertEqualHTML( $expected, $markup, '', 'Expected equal snapshot for wp_print_styles() with version ' . var_export( $version, true ) . ":\n$markup" ); } @@ -957,75 +956,10 @@ public function test_varying_versions_added_to_handle_args_registered_then_enque wp_enqueue_style( 'test-style?qs1=q1&qs2=q2' ); $markup = get_echo( 'wp_print_styles' ); - $expected = "\n"; + $expected = ""; $this->assertEqualHTML( $expected, $markup, '', 'Expected equal snapshot for wp_print_styles() with version ' . var_export( $version, true ) . ":\n$markup" ); } - /** - * Tests that duplicate query vars and fragments are preserved in styles. - * - * @ticket 64372 - * - * @dataProvider data_duplicate_query_vars_and_fragments_preserved_in_styles - * - * @param string $src The stylesheet's source URL. - * @param string|bool|null $ver The style's version. - * @param string $expected_url The expected URL. - * @param string $handle Optional. The style's registered handle. Default 'test-style'. - */ - public function test_duplicate_query_vars_and_fragments_preserved_in_styles( string $src, $ver, string $expected_url, string $handle = 'test-style' ): void { - wp_enqueue_style( $handle, $src, array(), $ver ); - $output = get_echo( 'wp_print_styles' ); - $processor = new WP_HTML_Tag_Processor( $output ); - - $this->assertTrue( $processor->next_tag( 'link' ) ); - $this->assertSame( $expected_url, $processor->get_attribute( 'href' ) ); - } - - /** - * Data provider for test_duplicate_query_vars_and_fragments_preserved_in_styles. - * - * @return array Data provider. - */ - public function data_duplicate_query_vars_and_fragments_preserved_in_styles(): array { - $ver = get_bloginfo( 'version' ); - - return array( - 'duplicate query vars' => array( - 'src' => 'https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Montserrat:wght@700&display=swap', - 'ver' => '1.0', - 'expected_url' => 'https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Montserrat:wght@700&display=swap&ver=1.0', - ), - 'duplicate query vars, null version' => array( - 'src' => 'https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Montserrat:wght@700&display=swap', - 'ver' => null, - 'expected_url' => 'https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Montserrat:wght@700&display=swap', - ), - 'duplicate query vars, false version' => array( - 'src' => 'https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Montserrat:wght@700&display=swap', - 'ver' => false, - 'expected_url' => "https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Montserrat:wght@700&display=swap&ver=$ver", - ), - 'duplicate query vars in handle' => array( - 'src' => 'https://example.com/test-style.css', - 'ver' => '1.0', - 'expected_url' => 'https://example.com/test-style.css?ver=1.0&a=1&a=2', - 'handle' => 'test-style?a=1&a=2', - ), - 'duplicate query vars and fragments' => array( - 'src' => 'https://example.com/style.css?arg=1&arg=2#anchor', - 'ver' => '1.0', - 'expected_url' => 'https://example.com/style.css?arg=1&arg=2&ver=1.0#anchor', - ), - 'zero query var in handle' => array( - 'src' => 'https://example.com/test-style.css', - 'ver' => '1.0', - 'expected_url' => 'https://example.com/test-style.css?ver=1.0&0', - 'handle' => 'test-style?0', - ), - ); - } - /** * Data provider for: * - test_varying_versions_added_to_handle_args_enqueued_styles diff --git a/tests/phpunit/tests/dependencies/wpInlineScriptTag.php b/tests/phpunit/tests/dependencies/wpInlineScriptTag.php index e8fabd7226e84..76e53db9c235e 100644 --- a/tests/phpunit/tests/dependencies/wpInlineScriptTag.php +++ b/tests/phpunit/tests/dependencies/wpInlineScriptTag.php @@ -94,93 +94,4 @@ static function ( $attributes ) { ) ); } - - /** - * Test the behavior of generated script tag attributes passed different values and types of values. - * - * @ticket 64500 - */ - public function test_script_tag_attribute_value_types() { - $expected = <<<'HTML' - - -HTML; - - $this->assertEqualHTML( - $expected, - wp_get_inline_script_tag( - '"script data";', - array( - 'true' => true, - 'false' => false, - 'null' => null, - 'empty-string' => '', - '0-string' => '0', - '1-string' => '1', - '0-numeric' => 0, - '1-numeric' => 1, - ) - ), - ); - } - - /** - * Test the behavior of generated script tag repeated attributes. - * - * HTML will ignore case-insensitive repeated attributes. Ensure that the handling of input - * attributes aligns with expectations. - * - * @ticket 64500 - */ - public function test_script_tag_repeat_attributes() { - $expected = <<<'HTML' - - -HTML; - - $this->assertEqualHTML( - $expected, - wp_get_inline_script_tag( - '"script data";', - array( - 'test' => 'test-a', - 'tesT' => 'tesT-b', - 'teST' => 'teST-c', - 'tEST' => 'tEST-d', - 'TEST' => 'TEST-e', - ) - ), - ); - } - - /** - * Test failure conditions setting inline script tag contents. - * - * @ticket 64500 - */ - public function test_script_tag_dangerous_unescapeable_contents() { - $this->setExpectedIncorrectUsage( 'wp_get_inline_script_tag' ); - /* - * cannot be printed inside a script tag - * the `example/example` type is an unknown type with no known escaping rules. - * The only choice is to abort. - */ - $result = wp_get_inline_script_tag( - '', - array( 'type' => 'example/example' ) - ); - $this->assertSame( '', $result ); - } } diff --git a/tests/phpunit/tests/dependencies/wpLocalizeScript.php b/tests/phpunit/tests/dependencies/wpLocalizeScript.php index 6ddf22f1df858..7ec8604d40b87 100644 --- a/tests/phpunit/tests/dependencies/wpLocalizeScript.php +++ b/tests/phpunit/tests/dependencies/wpLocalizeScript.php @@ -46,6 +46,8 @@ public function test_wp_localize_script_works_before_enqueue_script() { * @covers ::wp_localize_script */ public function test_wp_localize_script_outputs_safe_json() { + add_theme_support( 'html5', array( 'script' ) ); + $path = '/test.js'; $base_url = site_url( $path ); diff --git a/tests/phpunit/tests/dependencies/wpSanitizeScriptAttributes.php b/tests/phpunit/tests/dependencies/wpSanitizeScriptAttributes.php index 92f10b8999d82..69ab85b8e3cd0 100644 --- a/tests/phpunit/tests/dependencies/wpSanitizeScriptAttributes.php +++ b/tests/phpunit/tests/dependencies/wpSanitizeScriptAttributes.php @@ -10,7 +10,6 @@ class Tests_Dependencies_wpSanitizeScriptAttributes extends WP_UnitTestCase { public function test_sanitize_script_attributes_type_set() { - $this->setExpectedDeprecated( 'wp_sanitize_script_attributes' ); $this->assertSame( ' type="application/javascript" src="https://DOMAIN.TLD/PATH/FILE.js" nomodule', wp_sanitize_script_attributes( @@ -25,7 +24,6 @@ public function test_sanitize_script_attributes_type_set() { } public function test_sanitize_script_attributes_type_not_set() { - $this->setExpectedDeprecated( 'wp_sanitize_script_attributes' ); $this->assertSame( ' src="https://DOMAIN.TLD/PATH/FILE.js" nomodule', wp_sanitize_script_attributes( @@ -40,7 +38,6 @@ public function test_sanitize_script_attributes_type_not_set() { public function test_sanitize_script_attributes_no_attributes() { - $this->setExpectedDeprecated( 'wp_sanitize_script_attributes' ); $this->assertSame( '', wp_sanitize_script_attributes( array() ) @@ -48,7 +45,6 @@ public function test_sanitize_script_attributes_no_attributes() { } public function test_sanitize_script_attributes_relative_src() { - $this->setExpectedDeprecated( 'wp_sanitize_script_attributes' ); $this->assertSame( ' src="PATH/FILE.js" nomodule', wp_sanitize_script_attributes( @@ -63,7 +59,6 @@ public function test_sanitize_script_attributes_relative_src() { public function test_sanitize_script_attributes_only_false_boolean_attributes() { - $this->setExpectedDeprecated( 'wp_sanitize_script_attributes' ); $this->assertSame( '', wp_sanitize_script_attributes( @@ -76,7 +71,6 @@ public function test_sanitize_script_attributes_only_false_boolean_attributes() } public function test_sanitize_script_attributes_only_true_boolean_attributes() { - $this->setExpectedDeprecated( 'wp_sanitize_script_attributes' ); $this->assertSame( ' async nomodule', wp_sanitize_script_attributes( diff --git a/tests/phpunit/tests/dependencies/wpScriptTag.php b/tests/phpunit/tests/dependencies/wpScriptTag.php index 57ed857ff5d6d..c06a86b2db57f 100644 --- a/tests/phpunit/tests/dependencies/wpScriptTag.php +++ b/tests/phpunit/tests/dependencies/wpScriptTag.php @@ -9,6 +9,8 @@ class Tests_Dependencies_wpScriptTag extends WP_UnitTestCase { public function get_script_tag_type_set() { + add_theme_support( 'html5', array( 'script' ) ); + $this->assertEqualHTML( '' . "\n", wp_get_script_tag( @@ -20,12 +22,28 @@ public function get_script_tag_type_set() { ) ) ); + + remove_theme_support( 'html5' ); + + $this->assertEqualHTML( + '' . "\n", + wp_get_script_tag( + array( + 'src' => 'https://localhost/PATH/FILE.js', + 'type' => 'application/javascript', + 'async' => false, + 'nomodule' => true, + ) + ) + ); } /** * @covers ::wp_get_script_tag */ public function test_get_script_tag_type_not_set() { + add_theme_support( 'html5', array( 'script' ) ); + $this->assertEqualHTML( '' . "\n", wp_get_script_tag( @@ -36,6 +54,8 @@ public function test_get_script_tag_type_not_set() { ) ) ); + + remove_theme_support( 'html5' ); } /** @@ -52,6 +72,8 @@ static function ( $attributes ) { } ); + add_theme_support( 'html5', array( 'script' ) ); + $attributes = array( 'src' => 'https://localhost/PATH/FILE.js', 'id' => 'utils-js-extra', @@ -65,69 +87,15 @@ static function ( $attributes ) { array( $attributes ) ) ); - } - - /** - * Test the behavior of generated script tag attributes passed different values and types of values. - * - * @ticket 64500 - */ - public function test_script_tag_attribute_value_types() { - $expected = <<<'HTML' - - -HTML; - - $this->assertEqualHTML( - $expected, - wp_get_script_tag( - array( - 'true' => true, - 'false' => false, - 'null' => null, - 'empty-string' => '', - '0-string' => '0', - '1-string' => '1', - '0-numeric' => 0, - '1-numeric' => 1, - ) - ), - ); - } - - /** - * Test the behavior of generated script tag repeated attributes. - * - * HTML will ignore case-insensitive repeated attributes. Ensure that the handling of input - * attributes aligns with expectations. - * - * @ticket 64500 - */ - public function test_script_tag_repeat_attributes() { - $expected = <<<'HTML' - -HTML; + remove_theme_support( 'html5' ); $this->assertEqualHTML( - $expected, - wp_get_script_tag( - array( - 'test' => 'test-a', - 'tesT' => 'tesT-b', - 'teST' => 'teST-c', - 'tEST' => 'tEST-d', - 'TEST' => 'TEST-e', - ) - ), + wp_get_script_tag( $attributes ), + get_echo( + 'wp_print_script_tag', + array( $attributes ) + ) ); } } diff --git a/tests/phpunit/tests/feed/fetchFeed.php b/tests/phpunit/tests/feed/fetchFeed.php index c00d88756b481..98224ff96c15d 100644 --- a/tests/phpunit/tests/feed/fetchFeed.php +++ b/tests/phpunit/tests/feed/fetchFeed.php @@ -33,109 +33,6 @@ public function test_empty_charset_does_not_trigger_fatal_error() { $this->assertStringContainsString( 'Learn WordPress is a learning resource providing workshops, quizzes, courses, lesson plans, and discussion groups so that anyone, from beginners to advanced users, can learn to do more with WordPress.', $content ); } - /** - * Ensure WP_Error object returned for 404 response. - * - * @ticket 64136 - */ - public function test_fetch_feed_returns_error_for_404_response() { - // Priority 15 to ensure this runs after the mocked_rss_response filter. - add_filter( 'pre_http_request', array( $this, 'mocked_rss_404_error_response' ), 15 ); - - $feed = fetch_feed( 'https://example.org/news/feed/' ); - - $this->assertWPError( $feed, 'A WP_Error object is expected for failing requests.' ); - $this->assertSame( 'simplepie-error', $feed->get_error_code() ); - } - - /** - * Ensure fetch_feed() returns WP_Error if any feed errors. - * - * @ticket 64136 - */ - public function test_fetch_feed_multiple_returns_error_if_any_feed_errors() { - // Priority 15 to ensure this runs after the mocked_rss_response filter. - add_filter( 'pre_http_request', array( $this, 'mocked_rss_404_error_response' ), 15 ); - add_filter( - 'pre_http_request', - /** - * Remove the 404 error response after the first call. - */ - function ( $response ) { - remove_filter( 'pre_http_request', array( $this, 'mocked_rss_404_error_response' ), 15 ); - - return $response; - }, - 20 // Priority 20 to ensure it runs after the 404 error response. - ); - - $feed = fetch_feed( array( 'https://example.org/news/feed/', 'https://wordpress.org/news/feed/' ) ); - - $this->assertWPError( $feed, 'A WP_Error object is expected for any failing requests.' ); - $this->assertSame( 'simplepie-error', $feed->get_error_code() ); - $this->assertCount( 1, $feed->get_error_messages()[0], 'There should be one error message for the failed feed.' ); - } - - /** - * Ensure fetch_feed() includes messages for all feeds that error. - * - * @ticket 64136 - */ - public function test_fetch_feed_multiple_returns_error_if_all_feeds_error() { - // Priority 15 to ensure this runs after the mocked_rss_response filter. - add_filter( 'pre_http_request', array( $this, 'mocked_rss_404_error_response' ), 15 ); - $feed = fetch_feed( array( 'https://example.org/news/feed/', 'https://example.com/news/feed/' ) ); - - $this->assertWPError( $feed, 'A WP_Error object is expected for failing requests.' ); - $this->assertSame( 'simplepie-error', $feed->get_error_code() ); - $this->assertCount( 2, $feed->get_error_messages()[0], 'There should be two error messages, one for each failed feed.' ); - } - - /** - * Ensure fetch_feed() returns a SimplePie object for an empty URL (string). - * - * @ticket 64136 - */ - public function test_fetch_feed_returns_a_simplepie_object_for_unspecified_url_string() { - $feed = fetch_feed( '' ); - - $this->assertInstanceOf( 'SimplePie\\SimplePie', $feed ); - } - - /** - * Ensure fetch_feed() returns a SimplePie object for an empty URL (array). - * - * @ticket 64136 - */ - public function test_fetch_feed_returns_a_simplepie_object_for_unspecified_url_array() { - $feed = fetch_feed( array() ); - - $this->assertInstanceOf( 'SimplePie\\SimplePie', $feed ); - } - - /** - * Ensure fetch_feed() accepts multiple feeds. - * - * The main purpose of this test is to ensure that the SimplePie deprecation warning - * is not thrown when requesting multiple feeds. - * - * Secondly it confirms that the markup of the first two items match as they will - * both be from the same feed URL as the array contains the WordPress News feed twice. - * - * @ticket 64136 - */ - public function test_fetch_feed_supports_multiple_feeds() { - $feed = fetch_feed( array( 'https://wordpress.org/news/feed/', 'https://wordpress.org/news/feed/atom/' ) ); - $content = array(); - - foreach ( $feed->get_items( 0, 2 ) as $item ) { - $content[] = $item->get_content(); - } - - $this->assertEqualHTML( $content[0], $content[1], null, 'The contents of the first two items should be identical.' ); - $this->assertCount( 20, $feed->get_items(), 'The feed should contain 20 items.' ); - } - /** * Ensure that fetch_feed() is cached on second and subsequent calls. * @@ -214,24 +111,4 @@ public function mocked_rss_response() { 'filename' => null, ); } - - /** - * Mock 404 error response for `fetch_feed()`. - * - * This simulates a 404 response to test error handling in `fetch_feed()`. - * - * @return array Mocked 404 error response data. - */ - public function mocked_rss_404_error_response() { - return array( - 'headers' => new WpOrg\Requests\Utility\CaseInsensitiveDictionary(), - 'body' => '', - 'response' => array( - 'code' => 404, - 'message' => 'Not Found', - ), - 'cookies' => array(), - 'filename' => null, - ); - } } diff --git a/tests/phpunit/tests/fonts/font-library/wpRestFontFacesController.php b/tests/phpunit/tests/fonts/font-library/wpRestFontFacesController.php index 19a2a6a86b8b0..63a5f18e14040 100644 --- a/tests/phpunit/tests/fonts/font-library/wpRestFontFacesController.php +++ b/tests/phpunit/tests/fonts/font-library/wpRestFontFacesController.php @@ -583,7 +583,7 @@ public function test_create_item_with_all_properties() { 'lineGapOverride' => '10%', 'sizeAdjust' => '90%', 'unicodeRange' => 'U+0025-00FF, U+4??', - 'preview' => 'https://s.w.org/images/fonts/wp-7.0/previews/open-sans/open-sans-400-normal.svg', + 'preview' => 'https://s.w.org/images/fonts/wp-6.9/previews/open-sans/open-sans-400-normal.svg', 'src' => 'https://fonts.gstatic.com/s/open-sans/v30/KFOkCnqEu92Fr1MmgWxPKTM1K9nz.ttf', ); @@ -769,23 +769,6 @@ public function test_create_item_invalid_settings_json() { $this->assertSame( $expected_message, $message, 'The response error message should match.' ); } - /** - * @covers WP_REST_Font_Faces_Controller::validate_create_font_face_settings - */ - public function test_create_item_non_string_settings() { - wp_set_current_user( self::$admin_id ); - $request = new WP_REST_Request( 'POST', '/wp/v2/font-families/' . self::$font_family_id . '/font-faces' ); - $request->set_param( 'theme_json_version', WP_REST_Font_Faces_Controller::LATEST_THEME_JSON_VERSION_SUPPORTED ); - $request->set_param( 'font_face_settings', self::$default_settings ); - - $response = rest_get_server()->dispatch( $request ); - - $this->assertErrorResponse( 'rest_invalid_param', $response, 400, 'The response should return an error for "rest_invalid_param" with 400 status.' ); - $expected_message = 'font_face_settings is not of type string.'; - $message = $response->as_error()->get_all_error_data()[0]['params']['font_face_settings']; - $this->assertSame( $expected_message, $message, 'The response error message should match.' ); - } - /** * @covers WP_REST_Font_Faces_Controller::validate_create_font_face_settings */ diff --git a/tests/phpunit/tests/fonts/font-library/wpRestFontFamiliesController.php b/tests/phpunit/tests/fonts/font-library/wpRestFontFamiliesController.php index fada1d1643890..c63f9814719a0 100644 --- a/tests/phpunit/tests/fonts/font-library/wpRestFontFamiliesController.php +++ b/tests/phpunit/tests/fonts/font-library/wpRestFontFamiliesController.php @@ -28,7 +28,7 @@ class Tests_REST_WpRestFontFamiliesController extends WP_Test_REST_Controller_Te 'name' => 'Open Sans', 'slug' => 'open-sans', 'fontFamily' => '"Open Sans", sans-serif', - 'preview' => 'https://s.w.org/images/fonts/wp-7.0/previews/open-sans/open-sans-400-normal.svg', + 'preview' => 'https://s.w.org/images/fonts/wp-6.9/previews/open-sans/open-sans-400-normal.svg', ); public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { @@ -48,7 +48,7 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { 'name' => 'Open Sans', 'slug' => 'open-sans', 'fontFamily' => '"Open Sans", sans-serif', - 'preview' => 'https://s.w.org/images/fonts/wp-7.0/previews/open-sans/open-sans-400-normal.svg', + 'preview' => 'https://s.w.org/images/fonts/wp-6.9/previews/open-sans/open-sans-400-normal.svg', ) ); self::$font_family_id2 = self::create_font_family_post( @@ -628,23 +628,6 @@ public function test_create_item_invalid_settings_json() { $this->assertSame( $expected_message, $message, 'The response error message should match.' ); } - /** - * @covers WP_REST_Font_Family_Controller::validate_font_family_settings - */ - public function test_create_item_non_string_settings() { - wp_set_current_user( self::$admin_id ); - $request = new WP_REST_Request( 'POST', '/wp/v2/font-families' ); - $request->set_param( 'theme_json_version', WP_REST_Font_Families_Controller::LATEST_THEME_JSON_VERSION_SUPPORTED ); - $request->set_param( 'font_family_settings', self::$default_settings ); - - $response = rest_get_server()->dispatch( $request ); - - $this->assertErrorResponse( 'rest_invalid_param', $response, 400, 'The response should return an error for "rest_invalid_param" with 400 status.' ); - $expected_message = 'font_family_settings is not of type string.'; - $message = $response->as_error()->get_all_error_data()[0]['params']['font_family_settings']; - $this->assertSame( $expected_message, $message, 'The response error message should match.' ); - } - /** * @covers WP_REST_Font_Family_Controller::create_item */ @@ -682,7 +665,7 @@ public function test_create_item_no_permission() { 'name' => 'Open Sans', 'slug' => 'open-sans', 'fontFamily' => '"Open Sans", sans-serif', - 'preview' => 'https://s.w.org/images/fonts/wp-7.0/previews/open-sans/open-sans-400-normal.svg', + 'preview' => 'https://s.w.org/images/fonts/wp-6.9/previews/open-sans/open-sans-400-normal.svg', ) ) ); @@ -699,7 +682,7 @@ public function test_update_item() { $settings = array( 'name' => 'Open Sans', 'fontFamily' => 'Open Sans, "Noto Sans", sans-serif', - 'preview' => 'https://s.w.org/images/fonts/wp-7.0/previews/open-sans/open-sans-400-normal.svg', + 'preview' => 'https://s.w.org/images/fonts/wp-6.9/previews/open-sans/open-sans-400-normal.svg', ); $font_family_id = self::create_font_family_post( array( 'slug' => 'open-sans-2' ) ); @@ -755,7 +738,7 @@ public function data_update_item_individual_settings() { return array( array( array( 'name' => 'Opened Sans' ) ), array( array( 'fontFamily' => '"Opened Sans", sans-serif' ) ), - array( array( 'preview' => 'https://s.w.org/images/fonts/wp-7.0/previews/opened-sans/opened-sans-400-normal.svg' ) ), + array( array( 'preview' => 'https://s.w.org/images/fonts/wp-6.9/previews/opened-sans/opened-sans-400-normal.svg' ) ), // Empty preview is allowed. array( array( 'preview' => '' ) ), ); @@ -846,22 +829,6 @@ public function test_update_item_update_slug_not_allowed() { $this->assertSame( $expected_message, $message, 'The response error message should match.' ); } - /** - * @covers WP_REST_Font_Family_Controller::validate_font_family_settings - */ - public function test_update_item_non_string_settings() { - wp_set_current_user( self::$admin_id ); - $request = new WP_REST_Request( 'POST', '/wp/v2/font-families/' . self::$font_family_id1 ); - $request->set_param( 'font_family_settings', self::$default_settings ); - - $response = rest_get_server()->dispatch( $request ); - - $this->assertErrorResponse( 'rest_invalid_param', $response, 400, 'The response should return an error for "rest_invalid_param" with 400 status.' ); - $expected_message = 'font_family_settings is not of type string.'; - $message = $response->as_error()->get_all_error_data()[0]['params']['font_family_settings']; - $this->assertSame( $expected_message, $message, 'The response error message should match.' ); - } - /** * @covers WP_REST_Font_Families_Controller::update_item */ diff --git a/tests/phpunit/tests/formatting/balanceTags.php b/tests/phpunit/tests/formatting/balanceTags.php index 47e505c362924..2631343ec64b5 100644 --- a/tests/phpunit/tests/formatting/balanceTags.php +++ b/tests/phpunit/tests/formatting/balanceTags.php @@ -205,29 +205,29 @@ public function data_single_tags() { } /** - * Tests closing unknown single tags. - * * @ticket 1597 - * @dataProvider data_unknown_single_tags_with_closing_tag */ - public function test_closes_unknown_single_tags_with_closing_tag( $input, $expected ) { - $this->assertSame( $expected, balanceTags( $input, true ) ); - } + public function test_closes_unknown_single_tags_with_closing_tag() { - /** - * Data provider for test_closes_unknown_single_tags_with_closing_tag. - * - * @return array> - */ - public function data_unknown_single_tags_with_closing_tag() { - return array( - 'default' => array( '', '' ), - 'with-space' => array( '', '' ), - 'with-class' => array( '

      ', '

      ' ), - 'with-class-and-space' => array( '

      ', '

      ' ), + $inputs = array( + '', + '', + '

      ', + '

      ', + '', + ); + $expected = array( + '', + '', + '

      ', + '

      ', // Valid tags are transformed to lowercase. - 'uppercase' => array( '', '' ), + '', ); + + foreach ( $inputs as $key => $input ) { + $this->assertSame( $expected[ $key ], balanceTags( $inputs[ $key ], true ) ); + } } public function test_closes_unclosed_single_tags_having_attributes() { diff --git a/tests/phpunit/tests/formatting/excerptRemoveBlocks.php b/tests/phpunit/tests/formatting/excerptRemoveBlocks.php index 2097c35bbf5b8..1f07596903fbf 100644 --- a/tests/phpunit/tests/formatting/excerptRemoveBlocks.php +++ b/tests/phpunit/tests/formatting/excerptRemoveBlocks.php @@ -12,7 +12,7 @@ class Tests_Formatting_ExcerptRemoveBlocks extends WP_UnitTestCase { public $content = ' -

      paragraph

      +

      paragraph

      @@ -25,7 +25,7 @@ class Tests_Formatting_ExcerptRemoveBlocks extends WP_UnitTestCase { -

      paragraph inside column

      +

      paragraph inside column

      @@ -35,12 +35,12 @@ class Tests_Formatting_ExcerptRemoveBlocks extends WP_UnitTestCase { public $filtered_content = ' -

      paragraph

      +

      paragraph

      -

      paragraph inside column

      +

      paragraph inside column

      '; diff --git a/tests/phpunit/tests/formatting/isEmail.php b/tests/phpunit/tests/formatting/isEmail.php index eb5a0379b8515..c3f0a7c45b001 100644 --- a/tests/phpunit/tests/formatting/isEmail.php +++ b/tests/phpunit/tests/formatting/isEmail.php @@ -6,21 +6,8 @@ * @covers ::is_email */ class Tests_Formatting_IsEmail extends WP_UnitTestCase { - - /** - * @dataProvider valid_email_provider - */ - public function test_returns_the_email_address_if_it_is_valid( $email ) { - $this->assertSame( $email, is_email( $email ), "is_email() should return the email address for $email." ); - } - - /** - * Data provider for valid email addresses. - * - * @return array - */ - public static function valid_email_provider() { - $valid_emails = array( + public function test_returns_the_email_address_if_it_is_valid() { + $data = array( 'bob@example.com', 'phil@example.info', 'ace@204.32.222.14', @@ -28,26 +15,13 @@ public static function valid_email_provider() { 'a@b.co', 'bill+ted@example.com', ); - - foreach ( $valid_emails as $email ) { - yield $email => array( $email ); + foreach ( $data as $datum ) { + $this->assertSame( $datum, is_email( $datum ), $datum ); } } - /** - * @dataProvider invalid_email_provider - */ - public function test_returns_false_if_given_an_invalid_email_address( $email ) { - $this->assertFalse( is_email( $email ), "is_email() should return false for $email." ); - } - - /** - * Data provider for invalid email addresses. - * - * @return array - */ - public static function invalid_email_provider() { - $invalid_emails = array( + public function test_returns_false_if_given_an_invalid_email_address() { + $data = array( 'khaaaaaaaaaaaaaaan!', 'http://bob.example.com/', "sif i'd give u it, spamer!1", @@ -55,9 +29,8 @@ public static function invalid_email_provider() { 'bob@your mom', 'a@b.c', ); - - foreach ( $invalid_emails as $email ) { - yield $email => array( $email ); + foreach ( $data as $datum ) { + $this->assertFalse( is_email( $datum ), $datum ); } } } diff --git a/tests/phpunit/tests/formatting/removeAccents.php b/tests/phpunit/tests/formatting/removeAccents.php index 184cd9d1d5dd3..8140d2df9b8c7 100644 --- a/tests/phpunit/tests/formatting/removeAccents.php +++ b/tests/phpunit/tests/formatting/removeAccents.php @@ -108,16 +108,6 @@ public function test_remove_accents_germanic_umlauts() { $this->assertSame( 'AeOeUeaeoeuess', remove_accents( 'ÄÖÜäöüß', 'de_DE' ) ); } - /** - * @ticket 64821 - */ - public function test_remove_accents_germanic_capital_eszett() { - // U+1E9E LATIN CAPITAL LETTER SHARP S, standardized in German orthography in 2017 (DIN 5008). - $this->assertSame( 'SS', remove_accents( 'ẞ', 'de_DE' ) ); - // Verify it works in context alongside the lowercase variant. - $this->assertSame( 'SSstrasse', remove_accents( 'ẞstraße', 'de_DE' ) ); - } - /** * @ticket 23907 */ diff --git a/tests/phpunit/tests/formatting/wpSlash.php b/tests/phpunit/tests/formatting/wpSlash.php index 3617b4bfa4ea0..aa0664d791b92 100644 --- a/tests/phpunit/tests/formatting/wpSlash.php +++ b/tests/phpunit/tests/formatting/wpSlash.php @@ -101,37 +101,4 @@ public function test_add_even_more_slashes() { $this->assertSame( array( 'a' => $new ), wp_slash( array( 'a' => $old ) ) ); // Keyed array. $this->assertSame( array( $new ), wp_slash( array( $old ) ) ); // Non-keyed. } - - /** - * Tests that addslashes_gpc() returns the same result as wp_slash() for strings. - * - * @ticket 64539 - * @covers ::addslashes_gpc - * @expectedDeprecated addslashes_gpc - */ - public function test_addslashes_gpc_matches_wp_slash_for_strings() { - $input = "String with 'quotes' and \"double quotes\""; - $this->assertSame( wp_slash( $input ), addslashes_gpc( $input ) ); - } - - /** - * Tests that addslashes_gpc() returns the same result as wp_slash() for arrays. - * - * @ticket 64539 - * @covers ::addslashes_gpc - * @expectedDeprecated addslashes_gpc - */ - public function test_addslashes_gpc_matches_wp_slash_for_arrays() { - $input = array( - 'field1' => "Value with 'apostrophe'", - 'field2' => 'Value with "quotes"', - 'field3' => 'user@example.com', - 'nested' => array( - 'key1' => 'Nested value with \\ backslash', - 'key2' => array( 'deeply', 'nested', 'array' ), - ), - ); - - $this->assertSame( wp_slash( $input ), addslashes_gpc( $input ) ); - } } diff --git a/tests/phpunit/tests/functions.php b/tests/phpunit/tests/functions.php index b6080da780ba8..ccbe24385e14e 100644 --- a/tests/phpunit/tests/functions.php +++ b/tests/phpunit/tests/functions.php @@ -222,66 +222,9 @@ public function data_wp_normalize_path() { array( 'php://input', 'php://input' ), array( 'http://example.com//path.ext', 'http://example.com/path.ext' ), array( 'file://c:\\www\\path\\', 'file://C:/www/path/' ), - - // Edge cases. - array( '', '' ), // Empty string should return empty string. - array( 123, '123' ), // Integer should be cast to string. ); } - /** - * Tests that wp_normalize_path() works with objects that have __toString(). - * - * This is important because the function uses a static cache, and the input - * must be cast to string before being used as an array key. - * - * @ticket 64538 - */ - public function test_wp_normalize_path_with_stringable_object() { - $file_info = new SplFileInfo( '/var/www/html\\test' ); - - $this->assertSame( '/var/www/html/test', wp_normalize_path( $file_info ) ); - } - - /** - * Tests that wp_normalize_path() returns consistent results on repeated calls. - * - * The function uses a static cache, so this verifies cache behavior. - * - * @ticket 64538 - */ - public function test_wp_normalize_path_returns_consistent_results() { - $path = 'C:\\www\\path\\'; - - $first_call = wp_normalize_path( $path ); - $second_call = wp_normalize_path( $path ); - $third_call = wp_normalize_path( $path ); - - $this->assertSame( $first_call, $second_call, 'Second call should return same result as first.' ); - $this->assertSame( $second_call, $third_call, 'Third call should return same result as second.' ); - $this->assertSame( 'C:/www/path/', $first_call, 'Normalized path should match expected value.' ); - } - - /** - * Tests that wp_normalize_path() static cache stores results. - * - * @ticket 64538 - */ - public function test_wp_normalize_path_static_cache() { - $path = '/var/www/cache-test\\subdir\\'; - $expected = '/var/www/cache-test/subdir/'; - - $result = wp_normalize_path( $path ); - $this->assertSame( $expected, $result ); - - $reflection = new ReflectionFunction( 'wp_normalize_path' ); - $static_vars = $reflection->getStaticVariables(); - - $this->assertArrayHasKey( 'cache', $static_vars, 'Static cache array should exist.' ); - $this->assertArrayHasKey( $path, $static_vars['cache'], 'Cache should contain the normalized path.' ); - $this->assertSame( $expected, $static_vars['cache'][ $path ], 'Cached value should match the expected normalized path.' ); - } - public function test_wp_unique_filename() { $testdir = DIR_TESTDATA . '/images/'; diff --git a/tests/phpunit/tests/functions/wpGetArchives.php b/tests/phpunit/tests/functions/wpGetArchives.php index 99967e9be3211..3f98d5c5644f6 100644 --- a/tests/phpunit/tests/functions/wpGetArchives.php +++ b/tests/phpunit/tests/functions/wpGetArchives.php @@ -221,10 +221,10 @@ static function ( $args ) { $ids = array_slice( array_reverse( self::$post_ids ), 0, 3 ); $expected = join( - '', + "\n", array_map( static function ( $id ) { - return sprintf( "\t
    12. %s
    13. \n", get_permalink( $id ), get_the_title( $id ) ); + return sprintf( '
    14. %s
    15. ', get_permalink( $id ), get_the_title( $id ) ); }, $ids ) diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor-serialize.php b/tests/phpunit/tests/html-api/wpHtmlProcessor-serialize.php index 175bb3845d554..e2b5a79c2de2f 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor-serialize.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor-serialize.php @@ -321,72 +321,4 @@ public static function data_provider_serialize_doctype() { 'Double quotes in system ID' => array( '', '' ), ); } - - /** - * Ensures that leading newlines in PRE, LISTING, and TEXTAREA elements are preserved upon normalization, - * and that normalization is idempotent in these cases. - * - * @ticket 64607 - * - * @dataProvider data_provider_normalize_special_leading_newline_cases - * - * @param string $input HTML input containing leading newlines in PRE, LISTING, or TEXTAREA elements. - * @param string $expected Expected output after normalization, which should preserve leading newlines. - */ - public function test_normalize_special_leading_newline_handling( string $input, string $expected ) { - $normalized = WP_HTML_Processor::normalize( $input ); - $this->assertEqualHTML( $expected, $normalized ); - $normalized_twice = WP_HTML_Processor::normalize( $normalized ); - $this->assertEqualHTML( $expected, $normalized_twice ); - } - - /** - * Data provider. - * - * @return array[] - */ - public static function data_provider_normalize_special_leading_newline_cases() { - return array( - 'Leading newline in PRE' => array( - "
      \nline 1\nline 2
      ", - "
      line 1\nline 2
      ", - ), - 'Double leading newline in PRE' => array( - "
      \n\nline 2\nline 3
      ", - "
      \n\nline 2\nline 3
      ", - ), - 'Multiple text nodes inside PRE' => array( - "
      \nline 1 still line 1
      ", - '
      line 1 still line 1
      ', - ), - 'Multiple text nodes inside PRE with leading newlines' => array( - "
      \n\nline 2 still line 2
      ", - "
      \n\nline 2 still line 2
      ", - ), - 'Leading newline in LISTING' => array( - "\nline 1\nline 2", - "line 1\nline 2", - ), - 'Double leading newline in LISTING' => array( - "\n\nline 2\nline 3", - "\n\nline 2\nline 3", - ), - 'Multiple text nodes inside LISTING' => array( - "\nline 1 still line 1", - 'line 1 still line 1', - ), - 'Multiple text nodes inside LISTING with leading newlines' => array( - "\n\nline 2 still line 2", - "\n\nline 2 still line 2", - ), - 'Leading newline in TEXTAREA' => array( - "", - "", - ), - 'Double leading newline in TEXTAREA' => array( - "", - "", - ), - ); - } } diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index a89014282df73..13e0728ca912a 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -1068,7 +1068,7 @@ public function test_ensure_next_token_method_extensibility( $html, $expected_to /** * Ensure that lowercased tag_name query matches tags case-insensitively. * - * @ticket 62427 + * @group 62427 */ public function test_next_tag_lowercase_tag_name() { // The upper case
      is irrelevant but illustrates the case-insentivity. @@ -1079,106 +1079,4 @@ public function test_next_tag_lowercase_tag_name() { $processor = WP_HTML_Processor::create_fragment( '' ); $this->assertTrue( $processor->next_tag( array( 'tag_name' => 'rect' ) ) ); } - - /** - * Ensure that the processor does not throw errors in cases of extreme HTML nesting. - * - * @ticket 64394 - * - * @expectedIncorrectUsage WP_HTML_Tag_Processor::set_bookmark - */ - public function test_deep_nesting_fails_process_without_error() { - $html = str_repeat( '', WP_HTML_Processor::MAX_BOOKMARKS * 2 ); - $processor = WP_HTML_Processor::create_fragment( $html ); - - while ( $processor->next_token() ) { - // Process tokens. - } - - $this->assertSame( - WP_HTML_Processor::ERROR_EXCEEDED_MAX_BOOKMARKS, - $processor->get_last_error(), - 'Failed to report exceeded-max-bookmarks error.' - ); - } - - /** - * @ticket 64394 - * - * @expectedIncorrectUsage WP_HTML_Tag_Processor::set_bookmark - */ - public function test_deep_nesting_fails_processing_virtual_tokens_without_error() { - /* - * This test has some variability depending on how the virtual tokens align. - * In order to ensure that bookmarks are exhausted on a virtual token - * without throwing an error, 3 documents are parsed with different "offsets" - * to ensure that the bookmarks are exhaused on a virtual token in at least one of the runs. - * - * "
      …" produces: - * └─TABLE (real) - * └─TBODY (virtual) - * └─TR (virtual) - * └─TD (real) - * └─TABLE (real) - * └─TBODY (virtual) - * └─TR (virtual) - * └─TD (real) - * └─… - */ - $html_table_td = str_repeat( '
      ', WP_HTML_Processor::MAX_BOOKMARKS * 2 ); - - // Offset 0 - $processor = WP_HTML_Processor::create_fragment( $html_table_td ); - while ( $processor->next_token() ) { - // Process tokens. - } - $this->assertSame( - WP_HTML_Processor::ERROR_EXCEEDED_MAX_BOOKMARKS, - $processor->get_last_error(), - 'Failed to report exceeded-max-bookmarks error.' - ); - - // Offset 1 - $processor = WP_HTML_Processor::create_fragment( "
      {$html_table_td}" ); - while ( $processor->next_token() ) { - // Process tokens. - } - $this->assertSame( - WP_HTML_Processor::ERROR_EXCEEDED_MAX_BOOKMARKS, - $processor->get_last_error(), - 'Failed to report exceeded-max-bookmarks error.' - ); - - // Offset 2 - $processor = WP_HTML_Processor::create_fragment( "
      {$html_table_td}" ); - while ( $processor->next_token() ) { - // Process tokens. - } - $this->assertSame( - WP_HTML_Processor::ERROR_EXCEEDED_MAX_BOOKMARKS, - $processor->get_last_error(), - 'Failed to report exceeded-max-bookmarks error.' - ); - } - - /** - * @ticket 64394 - * - * @expectedIncorrectUsage WP_HTML_Tag_Processor::set_bookmark - */ - public function test_prevents_unbounded_bookmarking() { - $processor = WP_HTML_Processor::create_full_parser( '' ); - $processor->next_tag(); - - // This might fail before the MAX_BOOKMARK limit, which is okay. - foreach ( range( 0, WP_HTML_Processor::MAX_BOOKMARKS ) as $n ) { - if ( ! $processor->set_bookmark( "{$n}" ) ) { - break; - } - } - - $this->assertFalse( - $processor->set_bookmark( 'beyond the limit' ) - ); - } } diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorModifiableText.php b/tests/phpunit/tests/html-api/wpHtmlProcessorModifiableText.php deleted file mode 100644 index 5d093ae05dd07..0000000000000 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorModifiableText.php +++ /dev/null @@ -1,126 +0,0 @@ -' ); - $processor->next_token(); - $processor->set_modifiable_text( $set_text ); - $this->assertSame( - strtr( - $set_text, - array( - "\r\n" => "\n", - "\r" => "\n", - ) - ), - $processor->get_modifiable_text(), - 'Should have preserved or normalized the leading newline in the TEXTAREA content.' - ); - $this->assertEqualHTML( - $expected_html, - $processor->get_updated_html(), - '', - 'Should have correctly output the TEXTAREA HTML.' - ); - } - - /** - * Data provider. - * - * @return array - */ - public static function data_modifiable_text_special_textarea(): array { - return array( - 'Leading newline' => array( - "\nAFTER NEWLINE", - "", - ), - 'Leading carriage return' => array( - "\rCR", - "", - ), - 'Leading carriage return + newline' => array( - "\r\nCR-N", - "", - ), - ); - } - - /** - * Ensures that `set_modifiable_text()` returns false for elements that are not special "atomic" elements. - * - * This includes atomic-like foreign elements (`
      `). - * - * @ticket 64751 - * @dataProvider data_set_modifiable_fails_non_atomic_tags - */ - public function test_set_modifiable_fails_non_atomic_tags( - string $html, - string $target_tag - ): void { - $processor = WP_HTML_Processor::create_fragment( $html ); - $this->assertNotNull( $processor, 'Failed to create a processor.' ); - $this->assertTrue( $processor->next_tag( $target_tag ), 'Failed to find target tag.' ); - $this->assertFalse( - $processor->set_modifiable_text( 'test' ), - "set_modifiable_text() should return false on {$processor->get_namespace()}:{$processor->get_qualified_tag_name()}." - ); - $this->assertSame( - $html, - $processor->get_updated_html(), - 'HTML should be unchanged after rejected set_modifiable_text().' - ); - } - - /** - * Data provider. - * - * @return array - */ - public static function data_set_modifiable_fails_non_atomic_tags(): array { - return array( - // Plain HTML tags. - 'html DIV' => array( '
      ', 'DIV' ), - - // Foreign elements with non-atomic tags. - 'svg PATH' => array( '', 'PATH' ), - 'svg PATH (self-closing)' => array( '', 'PATH' ), - 'math MTEXT' => array( '', 'MTEXT' ), - 'math MSPACE (self-closing)' => array( '', 'MSPACE' ), - - // Foreign elements with atomic-like tags. - 'svg TEXTAREA' => array( '', 'TEXTAREA' ), - 'svg TITLE' => array( '', 'TITLE' ), - 'svg STYLE' => array( '', 'STYLE' ), - 'svg SCRIPT' => array( '', 'SCRIPT' ), - 'math TEXTAREA' => array( '', 'TEXTAREA' ), - 'math TITLE' => array( '', 'TITLE' ), - 'math STYLE' => array( '', 'STYLE' ), - 'math SCRIPT' => array( '', 'SCRIPT' ), - ); - } -} diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php index f43d1fffaad0e..66f9e67f5c8ed 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php @@ -444,19 +444,17 @@ public static function data_tokens_with_basic_modifiable_text_updates() { /** * Ensures that updates with potentially-compromising values aren't accepted. * - * For example, a modifiable text update that would change the structure of the HTML - * document is not allowed, like attempting to set `-->` within a comment or `` - * within a text/plain SCRIPT tag. + * For example, a modifiable text update should be allowed which would break + * the structure of the containing element, such as in a script or comment. * * @ticket 61617 - * @ticket 62797 * * @dataProvider data_unallowed_modifiable_text_updates * * @param string $html_with_nonempty_modifiable_text Will be used to find the test element. * @param string $invalid_update Update containing possibly-compromising text. */ - public function test_rejects_dangerous_updates( string $html_with_nonempty_modifiable_text, string $invalid_update ) { + public function test_rejects_updates_with_unallowed_substrings( string $html_with_nonempty_modifiable_text, string $invalid_update ) { $processor = new WP_HTML_Tag_Processor( $html_with_nonempty_modifiable_text ); while ( '' === $processor->get_modifiable_text() && $processor->next_token() ) { @@ -468,7 +466,7 @@ public function test_rejects_dangerous_updates( string $html_with_nonempty_modif $this->assertFalse( $processor->set_modifiable_text( $invalid_update ), - 'Should have rejected possibly-compromising modifiable text update.' + 'Should have reject possibly-compromising modifiable text update.' ); // Flush updates. @@ -488,236 +486,11 @@ public function test_rejects_dangerous_updates( string $html_with_nonempty_modif */ public static function data_unallowed_modifiable_text_updates() { return array( - 'Comment with -->' => array( '', 'Comments end in -->' ), - 'Comment with --!>' => array( '', 'Invalid but legitimate comments end in --!>' ), - 'Non-JS SCRIPT with ', '' => array( '', 'Comments end in -->' ), + 'Comment with --!>' => array( '', 'Invalid but legitimate comments end in --!>' ), + 'SCRIPT with ' => array( '', 'Just a ' ), + 'SCRIPT with ' => array( '', 'beforeafter' ), + 'SCRIPT with "', ' -

      Second block.

      +

      Second block.

      EOF; $this->go_to( get_permalink( $post_id ) ); diff --git a/tests/phpunit/tests/rest-api/rest-attachments-controller.php b/tests/phpunit/tests/rest-api/rest-attachments-controller.php index 79e9d23cf9dd3..05029e0845d96 100644 --- a/tests/phpunit/tests/rest-api/rest-attachments-controller.php +++ b/tests/phpunit/tests/rest-api/rest-attachments-controller.php @@ -194,18 +194,6 @@ public function tear_down() { parent::tear_down(); } - /** - * Enables client-side media processing and reinitializes the REST server - * so that the sideload and finalize routes are registered. - */ - private function enable_client_side_media_processing(): void { - add_filter( 'wp_client_side_media_processing_enabled', '__return_true' ); - - global $wp_rest_server; - $wp_rest_server = new Spy_REST_Server(); - do_action( 'rest_api_init', $wp_rest_server ); - } - public function test_register_routes() { $routes = rest_get_server()->get_routes(); $this->assertArrayHasKey( '/wp/v2/media', $routes ); @@ -1951,12 +1939,9 @@ public function test_get_item_schema() { $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $properties = $data['schema']['properties']; - $this->assertCount( 32, $properties ); + $this->assertCount( 29, $properties ); $this->assertArrayHasKey( 'author', $properties ); $this->assertArrayHasKey( 'alt_text', $properties ); - $this->assertArrayHasKey( 'exif_orientation', $properties ); - $this->assertArrayHasKey( 'filename', $properties ); - $this->assertArrayHasKey( 'filesize', $properties ); $this->assertArrayHasKey( 'caption', $properties ); $this->assertArrayHasKey( 'raw', $properties['caption']['properties'] ); $this->assertArrayHasKey( 'rendered', $properties['caption']['properties'] ); @@ -2941,80 +2926,6 @@ public function test_upload_unsupported_image_type_with_filter() { $this->assertSame( 201, $response->get_status() ); } - /** - * Test that unsupported image type check is skipped when not generating sub-sizes. - * - * When the client handles image processing (generate_sub_sizes is false), - * the server should not check image editor support. - * - * Tests the permissions check directly with file params set, since the core - * check uses get_file_params() which is only populated for multipart uploads. - * - * @ticket 64836 - */ - public function test_upload_unsupported_image_type_skipped_when_not_generating_sub_sizes() { - wp_set_current_user( self::$author_id ); - - add_filter( 'wp_image_editors', '__return_empty_array' ); - - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_file_params( - array( - 'file' => array( - 'name' => 'avif-lossy.avif', - 'type' => 'image/avif', - 'tmp_name' => self::$test_avif_file, - 'error' => 0, - 'size' => filesize( self::$test_avif_file ), - ), - ) - ); - $request->set_param( 'generate_sub_sizes', false ); - - $controller = new WP_REST_Attachments_Controller( 'attachment' ); - $result = $controller->create_item_permissions_check( $request ); - - // Should pass because generate_sub_sizes is false (client handles processing). - $this->assertTrue( $result ); - } - - /** - * Test that unsupported image type check is enforced when generating sub-sizes. - * - * When the server handles image processing (generate_sub_sizes is true), - * the server should still check image editor support. - * - * Tests the permissions check directly with file params set, since the core - * check uses get_file_params() which is only populated for multipart uploads. - * - * @ticket 64836 - */ - public function test_upload_unsupported_image_type_enforced_when_generating_sub_sizes() { - wp_set_current_user( self::$author_id ); - - add_filter( 'wp_image_editors', '__return_empty_array' ); - - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_file_params( - array( - 'file' => array( - 'name' => 'avif-lossy.avif', - 'type' => 'image/avif', - 'tmp_name' => self::$test_avif_file, - 'error' => 0, - 'size' => filesize( self::$test_avif_file ), - ), - ) - ); - - $controller = new WP_REST_Attachments_Controller( 'attachment' ); - $result = $controller->create_item_permissions_check( $request ); - - // Should fail because the server needs to generate sub-sizes but can't. - $this->assertWPError( $result ); - $this->assertSame( 'rest_upload_image_type_not_supported', $result->get_error_code() ); - } - /** * Test that uploading an SVG image doesn't throw a `rest_upload_image_type_not_supported` error. * @@ -3240,305 +3151,4 @@ static function ( $data ) use ( &$captured_data ) { // Verify that the data is an array (not an object). $this->assertIsArray( $captured_data, 'Data passed to wp_insert_attachment should be an array' ); } - - /** - * Tests sideloading a scaled image for an existing attachment. - * - * @ticket 64737 - * @requires function imagejpeg - */ - public function test_sideload_scaled_image() { - $this->enable_client_side_media_processing(); - - wp_set_current_user( self::$author_id ); - - // First, create an attachment. - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola.jpg' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - $data = $response->get_data(); - $attachment_id = $data['id']; - - $this->assertSame( 201, $response->get_status() ); - - $original_file = get_attached_file( $attachment_id, true ); - - // Sideload a "scaled" version of the image. - $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment_id}/sideload" ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola-scaled.jpg' ); - $request->set_param( 'image_size', 'scaled' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertSame( 200, $response->get_status(), 'Sideloading scaled image should succeed.' ); - - $metadata = wp_get_attachment_metadata( $attachment_id ); - - // The original file should now be recorded as original_image. - $this->assertArrayHasKey( 'original_image', $metadata, 'Metadata should contain original_image.' ); - $this->assertSame( wp_basename( $original_file ), $metadata['original_image'], 'original_image should be the basename of the original attached file.' ); - - // The attached file should now point to the scaled version. - $new_file = get_attached_file( $attachment_id, true ); - $this->assertStringContainsString( 'scaled', wp_basename( $new_file ), 'Attached file should now be the scaled version.' ); - - // Metadata should have width, height, filesize, and file updated. - $this->assertArrayHasKey( 'width', $metadata, 'Metadata should contain width.' ); - $this->assertArrayHasKey( 'height', $metadata, 'Metadata should contain height.' ); - $this->assertArrayHasKey( 'filesize', $metadata, 'Metadata should contain filesize.' ); - $this->assertArrayHasKey( 'file', $metadata, 'Metadata should contain file.' ); - $this->assertStringContainsString( 'scaled', $metadata['file'], 'Metadata file should reference the scaled version.' ); - $this->assertGreaterThan( 0, $metadata['width'], 'Width should be positive.' ); - $this->assertGreaterThan( 0, $metadata['height'], 'Height should be positive.' ); - $this->assertGreaterThan( 0, $metadata['filesize'], 'Filesize should be positive.' ); - } - - /** - * Tests that sideloading scaled image requires authentication. - * - * @ticket 64737 - * @requires function imagejpeg - */ - public function test_sideload_scaled_image_requires_auth() { - $this->enable_client_side_media_processing(); - - wp_set_current_user( self::$author_id ); - - // Create an attachment. - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola.jpg' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - $attachment_id = $response->get_data()['id']; - - // Try sideloading without authentication. - wp_set_current_user( 0 ); - - $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment_id}/sideload" ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola-scaled.jpg' ); - $request->set_param( 'image_size', 'scaled' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertErrorResponse( 'rest_cannot_edit_image', $response, 401 ); - } - - /** - * Tests that the sideload endpoint includes 'scaled' in the image_size enum. - * - * @ticket 64737 - */ - public function test_sideload_route_includes_scaled_enum() { - $this->enable_client_side_media_processing(); - - $server = rest_get_server(); - $routes = $server->get_routes(); - - $endpoint = '/wp/v2/media/(?P[\d]+)/sideload'; - $this->assertArrayHasKey( $endpoint, $routes, 'Sideload route should exist.' ); - - $route = $routes[ $endpoint ]; - $endpoint = $route[0]; - $args = $endpoint['args']; - - $param_name = 'image_size'; - $this->assertArrayHasKey( $param_name, $args, 'Route should have image_size arg.' ); - $this->assertContains( 'scaled', $args[ $param_name ]['enum'], 'image_size enum should include scaled.' ); - } - - /** - * Tests the filter_wp_unique_filename method handles the -scaled suffix. - * - * @ticket 64737 - * @requires function imagejpeg - */ - public function test_sideload_scaled_unique_filename() { - $this->enable_client_side_media_processing(); - - wp_set_current_user( self::$author_id ); - - // Create an attachment. - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola.jpg' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - $attachment_id = $response->get_data()['id']; - - // Sideload with the -scaled suffix. - $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment_id}/sideload" ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola-scaled.jpg' ); - $request->set_param( 'image_size', 'scaled' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertSame( 200, $response->get_status(), 'Sideloading scaled image should succeed.' ); - - // The filename should retain the -scaled suffix without numeric disambiguation. - $new_file = get_attached_file( $attachment_id, true ); - $basename = wp_basename( $new_file ); - $this->assertMatchesRegularExpression( '/canola-scaled\.jpg$/', $basename, 'Scaled filename should not have numeric suffix appended.' ); - } - - /** - * Tests that sideloading a scaled image for a different attachment retains the numeric suffix - * when a file with the same name already exists on disk. - * - * @ticket 64737 - * @requires function imagejpeg - */ - public function test_sideload_scaled_unique_filename_conflict() { - $this->enable_client_side_media_processing(); - - wp_set_current_user( self::$author_id ); - - // Create the first attachment. - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola.jpg' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - $attachment_id_a = $response->get_data()['id']; - - // Sideload a scaled image for attachment A, creating canola-scaled.jpg on disk. - $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment_id_a}/sideload" ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola-scaled.jpg' ); - $request->set_param( 'image_size', 'scaled' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertSame( 200, $response->get_status(), 'First sideload should succeed.' ); - - // Create a second, different attachment. - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=other.jpg' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - $attachment_id_b = $response->get_data()['id']; - - // Sideload scaled for attachment B using the same filename that already exists on disk. - $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment_id_b}/sideload" ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola-scaled.jpg' ); - $request->set_param( 'image_size', 'scaled' ); - $request->set_body( file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertSame( 200, $response->get_status(), 'Second sideload should succeed.' ); - - // The filename should have a numeric suffix since the base name does not match this attachment. - $new_file = get_attached_file( $attachment_id_b, true ); - $basename = wp_basename( $new_file ); - $this->assertMatchesRegularExpression( '/canola-scaled-\d+\.jpg$/', $basename, 'Scaled filename should have numeric suffix when file conflicts with a different attachment.' ); - } - - /** - * Tests that the finalize endpoint triggers wp_generate_attachment_metadata. - * - * @ticket 62243 - * @covers WP_REST_Attachments_Controller::finalize_item - * @requires function imagejpeg - */ - public function test_finalize_item(): void { - $this->enable_client_side_media_processing(); - - wp_set_current_user( self::$author_id ); - - // Create an attachment. - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola.jpg' ); - $request->set_body( (string) file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - $attachment_id = $response->get_data()['id']; - - $this->assertSame( 201, $response->get_status() ); - - // Track whether wp_generate_attachment_metadata filter fires. - $filter_metadata = null; - $filter_id = null; - $filter_context = null; - add_filter( - 'wp_generate_attachment_metadata', - function ( array $metadata, int $id, string $context ) use ( &$filter_metadata, &$filter_id, &$filter_context ) { - $filter_metadata = $metadata; - $filter_id = $id; - $filter_context = $context; - $metadata['foo'] = 'bar'; - return $metadata; - }, - 10, - 3 - ); - - // Call the finalize endpoint. - $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment_id}/finalize" ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertSame( 200, $response->get_status(), 'Finalize endpoint should return 200.' ); - $this->assertIsArray( $filter_metadata ); - $this->assertStringContainsString( 'canola', $filter_metadata['file'], 'Expected the canola image to have been had its metadata updated.' ); - $this->assertSame( $attachment_id, $filter_id, 'Expected the post ID to be passed to the filter.' ); - $this->assertSame( 'update', $filter_context, 'Filter context should be "update".' ); - $resulting_metadata = wp_get_attachment_metadata( $attachment_id ); - $this->assertIsArray( $resulting_metadata ); - $this->assertArrayHasKey( 'foo', $resulting_metadata, 'Expected new metadata key to have been added.' ); - $this->assertSame( 'bar', $resulting_metadata['foo'], 'Expected filtered metadata to be updated.' ); - } - - /** - * Tests that the finalize endpoint requires authentication. - * - * @ticket 62243 - * @covers WP_REST_Attachments_Controller::finalize_item - * @requires function imagejpeg - */ - public function test_finalize_item_requires_auth(): void { - $this->enable_client_side_media_processing(); - - wp_set_current_user( self::$author_id ); - - // Create an attachment. - $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); - $request->set_header( 'Content-Type', 'image/jpeg' ); - $request->set_header( 'Content-Disposition', 'attachment; filename=canola.jpg' ); - $request->set_body( (string) file_get_contents( self::$test_file ) ); - $response = rest_get_server()->dispatch( $request ); - $attachment_id = $response->get_data()['id']; - - // Try finalizing without authentication. - wp_set_current_user( 0 ); - - $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment_id}/finalize" ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertErrorResponse( 'rest_cannot_edit_image', $response, 401 ); - } - - /** - * Tests that the finalize endpoint returns error for invalid attachment ID. - * - * @ticket 62243 - * @covers WP_REST_Attachments_Controller::finalize_item - */ - public function test_finalize_item_invalid_id(): void { - $this->enable_client_side_media_processing(); - - wp_set_current_user( self::$author_id ); - - $invalid_id = PHP_INT_MAX; - $this->assertNull( get_post( $invalid_id ), 'Expected invalid ID to not exist for an existing post.' ); - $request = new WP_REST_Request( 'POST', "/wp/v2/media/$invalid_id/finalize" ); - $response = rest_get_server()->dispatch( $request ); - - $this->assertErrorResponse( 'rest_post_invalid_id', $response, 404 ); - } } diff --git a/tests/phpunit/tests/rest-api/rest-autosaves-controller.php b/tests/phpunit/tests/rest-api/rest-autosaves-controller.php index 892ff2c6ca2c6..7815f8ced23c9 100644 --- a/tests/phpunit/tests/rest-api/rest-autosaves-controller.php +++ b/tests/phpunit/tests/rest-api/rest-autosaves-controller.php @@ -570,8 +570,6 @@ public function test_rest_autosave_published_post() { } public function test_rest_autosave_draft_post_same_author() { - add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_zero' ); // Zero as false doesn't work for pre-flight options. - wp_set_current_user( self::$editor_id ); $post_data = array( @@ -746,8 +744,6 @@ public function test_get_item_sets_up_postdata() { } public function test_update_item_draft_page_with_parent() { - add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_zero' ); // Zero as false doesn't work for pre-flight options. - wp_set_current_user( self::$editor_id ); $request = new WP_REST_Request( 'POST', '/wp/v2/pages/' . self::$child_draft_page_id . '/autosaves' ); $request->add_header( 'Content-Type', 'application/x-www-form-urlencoded' ); @@ -924,77 +920,4 @@ public static function data_head_request_with_specified_fields_returns_success_r 'get_items request' => array( '/wp/v2/posts/%d' ), ); } - - /** - * When real-time collaboration is enabled, autosaving a draft post by the - * same author should create a revision instead of updating the post directly. - */ - public function test_rest_autosave_draft_post_same_author_with_rtc() { - add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' ); - - wp_set_current_user( self::$editor_id ); - - $post_data = array( - 'post_content' => 'Test post content', - 'post_title' => 'Test post title', - 'post_excerpt' => 'Test post excerpt', - ); - $post_id = wp_insert_post( $post_data ); - - $autosave_data = array( - 'id' => $post_id, - 'content' => 'Updated post \ content', - 'title' => 'Updated post title', - ); - - $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); - $request->add_header( 'Content-Type', 'application/json' ); - $request->set_body( wp_json_encode( $autosave_data ) ); - - $response = rest_get_server()->dispatch( $request ); - $new_data = $response->get_data(); - $post = get_post( $post_id ); - - // With RTC enabled, a revision is created instead of updating the post. - $this->assertNotSame( $post_id, $new_data['id'] ); - $this->assertSame( $post_id, $new_data['parent'] ); - - // The autosave revision should have the updated content. - $this->assertSame( $autosave_data['content'], $new_data['content']['raw'] ); - $this->assertSame( $autosave_data['title'], $new_data['title']['raw'] ); - - // The draft post should not be updated. - $this->assertSame( $post_data['post_content'], $post->post_content ); - $this->assertSame( $post_data['post_title'], $post->post_title ); - $this->assertSame( $post_data['post_excerpt'], $post->post_excerpt ); - - wp_delete_post( $post_id ); - } - - /** - * When real-time collaboration is enabled, autosaving a draft page with - * a parent should create a revision instead of updating the page directly. - */ - public function test_update_item_draft_page_with_parent_with_rtc() { - add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' ); - - wp_set_current_user( self::$editor_id ); - $request = new WP_REST_Request( 'POST', '/wp/v2/pages/' . self::$child_draft_page_id . '/autosaves' ); - $request->add_header( 'Content-Type', 'application/x-www-form-urlencoded' ); - - $params = $this->set_post_data( - array( - 'id' => self::$child_draft_page_id, - 'author' => self::$editor_id, - ) - ); - - $request->set_body_params( $params ); - $response = rest_get_server()->dispatch( $request ); - $data = $response->get_data(); - - // With RTC enabled, a revision is created instead of updating the page. - $this->assertNotSame( self::$child_draft_page_id, $data['id'] ); - $this->assertSame( self::$child_draft_page_id, $data['parent'] ); - } } diff --git a/tests/phpunit/tests/rest-api/rest-global-styles-controller.php b/tests/phpunit/tests/rest-api/rest-global-styles-controller.php index 08ed7f65f818b..59986e597c71b 100644 --- a/tests/phpunit/tests/rest-api/rest-global-styles-controller.php +++ b/tests/phpunit/tests/rest-api/rest-global-styles-controller.php @@ -650,7 +650,6 @@ public function test_update_item_valid_styles_css() { /** * @covers WP_REST_Global_Styles_Controller::update_item * @ticket 57536 - * @ticket 64418 */ public function test_update_item_invalid_styles_css() { wp_set_current_user( self::$admin_id ); @@ -660,7 +659,7 @@ public function test_update_item_invalid_styles_css() { $request = new WP_REST_Request( 'PUT', '/wp/v2/global-styles/' . self::$global_styles_id ); $request->set_body_params( array( - 'styles' => array( 'css' => '' ), + 'styles' => array( 'css' => '

      test

      body { color: red; }' ), ) ); $response = rest_get_server()->dispatch( $request ); @@ -827,123 +826,4 @@ public function test_global_styles_route_args_schema() { $this->assertArrayHasKey( 'type', $route_data[0]['args']['id'] ); $this->assertSame( 'integer', $route_data[0]['args']['id']['type'] ); } - - /** - * @covers WP_REST_Global_Styles_Controller::update_item - * @ticket 64418 - */ - public function test_update_allows_valid_css_with_more_syntax() { - wp_set_current_user( self::$admin_id ); - if ( is_multisite() ) { - grant_super_admin( self::$admin_id ); - } - $request = new WP_REST_Request( 'PUT', '/wp/v2/global-styles/' . self::$global_styles_id ); - $css = <<<'CSS' -@property --animate { - syntax: ""; - inherits: true; - initial-value: false; -} -h1::before { content: "fun & games"; } -CSS; - $request->set_body_params( - array( - 'styles' => array( 'css' => $css ), - ) - ); - - $response = rest_get_server()->dispatch( $request ); - $data = $response->get_data(); - $this->assertSame( $css, $data['styles']['css'] ); - - // Compare expected API output to WP internal values. - $request = new WP_REST_Request( 'GET', '/wp/v2/global-styles/' . self::$global_styles_id ); - $response = rest_get_server()->dispatch( $request ); - $this->assertSame( $css, $response->get_data()['styles']['css'] ); - } - - /** - * @covers WP_REST_Global_Styles_Controller::validate_custom_css - * @ticket 64418 - * - * @dataProvider data_custom_css_allowed - */ - public function test_validate_custom_css_allowed( string $custom_css ) { - $controller = new WP_REST_Global_Styles_Controller(); - $validate = Closure::bind( - function ( $css ) { - return $this->validate_custom_css( $css ); - }, - $controller, - $controller - ); - - $this->assertTrue( $validate( $custom_css ) ); - } - - /** - * Data provider. - * - * @return array - */ - public static function data_custom_css_allowed(): array { - return array( - '@property declaration' => array( - '@property --prop { syntax: ""; inherits: true; initial-value: false; }', - ), - 'Different close tag' => array( '' ), - 'Not a style close tag' => array( '/* array( '/* array( '' ), - 'Short content' => array( '/**/' ), - ); - } - - /** - * @covers WP_REST_Global_Styles_Controller::validate_custom_css - * @ticket 64418 - * - * @dataProvider data_custom_css_disallowed - */ - public function test_validate_custom_css( string $custom_css, string $expected_error_message ) { - $controller = new WP_REST_Global_Styles_Controller(); - $validate = Closure::bind( - function ( $css ) { - return $this->validate_custom_css( $css ); - }, - $controller, - $controller - ); - - $result = $validate( $custom_css ); - $this->assertWPError( $result ); - $this->assertSame( $expected_error_message, $result->get_error_message() ); - } - - /** - * Data provider. - * - * @return array - */ - public static function data_custom_css_disallowed(): array { - return array( - 'style close tag' => array( 'css……css', 'The CSS must not contain "</style>".' ), - 'style close tag upper case' => array( '', 'The CSS must not contain "</STYLE>".' ), - 'style close tag mixed case' => array( '', 'The CSS must not contain "</sTyLe>".' ), - 'style close tag in comment' => array( '/**/', 'The CSS must not contain "</style>".' ), - 'style close tag (/)' => array( ' array( " array( " array( " array( " array( ' array( '<', 'The CSS must not end in "<".' ), - 'truncated " array( ' array( ' array( ' array( ' array( ' array( 'assertSame( 0, (int) get_post_thumbnail_id( $new_post->ID ) ); } - /** - * Data provider for featured media link permission tests. - * - * @return array - */ - public function data_featured_media_link_permissions() { - return array( - 'unauthenticated user with draft parent attachment' => array( - 'attachment_parent_status' => 'draft', - 'attachment_status' => 'inherit', - 'user_id' => 0, - 'expect_link' => false, - ), - 'authenticated editor with draft parent attachment' => array( - 'attachment_parent_status' => 'draft', - 'attachment_status' => 'inherit', - 'user_id' => 'editor', - 'expect_link' => true, - ), - 'unauthenticated user with published attachment' => array( - 'attachment_parent_status' => null, - 'attachment_status' => 'publish', - 'user_id' => 0, - 'expect_link' => true, - ), - ); - } - - /** - * Tests that featured media links respect attachment permissions. - * - * @ticket 64183 - * @dataProvider data_featured_media_link_permissions - * - * @param string|null $attachment_parent_status Status of the attachment's parent post, or null for no parent. - * @param string $attachment_status Status to set on the attachment. - * @param int|string $user_id User ID (0 for unauthenticated) or 'editor' for editor role. - * @param bool $expect_link Whether the featured media link should be included. - */ - public function test_get_item_featured_media_link_permissions( $attachment_parent_status, $attachment_status, $user_id, $expect_link ) { - $file = DIR_TESTDATA . '/images/canola.jpg'; - - // Create attachment parent if needed. - $parent_post_id = 0; - if ( null !== $attachment_parent_status ) { - $parent_post_id = self::factory()->post->create( - array( - 'post_title' => 'Parent Post', - 'post_status' => $attachment_parent_status, - ) - ); - } - - // Create attachment. - $attachment_id = self::factory()->attachment->create_object( - $file, - $parent_post_id, - array( - 'post_mime_type' => 'image/jpeg', - ) - ); - - // Set attachment status if different from default. - if ( 'publish' === $attachment_status ) { - wp_update_post( - array( - 'ID' => $attachment_id, - 'post_status' => 'publish', - ) - ); - } - - // Create published post with featured media. - $published_post_id = self::factory()->post->create( - array( - 'post_title' => 'Published Post', - 'post_status' => 'publish', - ) - ); - set_post_thumbnail( $published_post_id, $attachment_id ); - - // Set current user. - if ( 'editor' === $user_id ) { - wp_set_current_user( self::$editor_id ); - } else { - wp_set_current_user( $user_id ); - } - - // Make request. - $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $published_post_id ) ); - $response = rest_get_server()->dispatch( $request ); - $links = $response->get_links(); - - // Assert link presence based on expectation. - if ( $expect_link ) { - $this->assertArrayHasKey( 'https://api.w.org/featuredmedia', $links ); - $this->assertSame( - rest_url( '/wp/v2/media/' . $attachment_id ), - $links['https://api.w.org/featuredmedia'][0]['href'] - ); - } else { - $this->assertArrayNotHasKey( 'https://api.w.org/featuredmedia', $links ); - } - } - public function test_create_post_invalid_author() { wp_set_current_user( self::$editor_id ); diff --git a/tests/phpunit/tests/rest-api/rest-schema-setup.php b/tests/phpunit/tests/rest-api/rest-schema-setup.php index 89bf2c481c567..b5e9a177a7765 100644 --- a/tests/phpunit/tests/rest-api/rest-schema-setup.php +++ b/tests/phpunit/tests/rest-api/rest-schema-setup.php @@ -16,9 +16,6 @@ class WP_Test_REST_Schema_Initialization extends WP_Test_REST_TestCase { public function set_up() { parent::set_up(); - // Ensure client-side media processing is enabled so the sideload route is registered. - add_filter( 'wp_client_side_media_processing_enabled', '__return_true' ); - /** @var WP_REST_Server $wp_rest_server */ global $wp_rest_server; $wp_rest_server = new Spy_REST_Server(); @@ -112,8 +109,6 @@ public function test_expected_routes_in_schema() { '/wp/v2/media/(?P[\\d]+)', '/wp/v2/media/(?P[\\d]+)/post-process', '/wp/v2/media/(?P[\\d]+)/edit', - '/wp/v2/media/(?P[\\d]+)/sideload', - '/wp/v2/media/(?P[\\d]+)/finalize', '/wp/v2/blocks', '/wp/v2/blocks/(?P[\d]+)', '/wp/v2/blocks/(?P[\d]+)/autosaves', @@ -200,8 +195,6 @@ public function test_expected_routes_in_schema() { '/wp/v2/font-families/(?P[\d]+)/font-faces', '/wp/v2/font-families/(?P[\d]+)/font-faces/(?P[\d]+)', '/wp/v2/font-families/(?P[\d]+)', - '/wp/v2/icons', - '/wp/v2/icons/(?P[a-z][a-z0-9-]*/[a-z][a-z0-9-]*)', '/wp-abilities/v1', '/wp-abilities/v1/categories', '/wp-abilities/v1/categories/(?P[a-z0-9]+(?:-[a-z0-9]+)*)', diff --git a/tests/phpunit/tests/rest-api/rest-settings-controller.php b/tests/phpunit/tests/rest-api/rest-settings-controller.php index dd79885d2b16d..e8f90b53f20f1 100644 --- a/tests/phpunit/tests/rest-api/rest-settings-controller.php +++ b/tests/phpunit/tests/rest-api/rest-settings-controller.php @@ -119,7 +119,6 @@ public function test_get_items() { 'default_ping_status', 'default_comment_status', 'site_icon', // Registered in wp-includes/blocks/site-logo.php - 'wp_enable_real_time_collaboration', ); if ( ! is_multisite() ) { diff --git a/tests/phpunit/tests/rest-api/rest-sync-server.php b/tests/phpunit/tests/rest-api/rest-sync-server.php deleted file mode 100644 index 3f82a50b35f81..0000000000000 --- a/tests/phpunit/tests/rest-api/rest-sync-server.php +++ /dev/null @@ -1,867 +0,0 @@ -user->create( array( 'role' => 'editor' ) ); - self::$subscriber_id = $factory->user->create( array( 'role' => 'subscriber' ) ); - self::$post_id = $factory->post->create( array( 'post_author' => self::$editor_id ) ); - } - - public static function wpTearDownAfterClass() { - self::delete_user( self::$editor_id ); - self::delete_user( self::$subscriber_id ); - wp_delete_post( self::$post_id, true ); - } - - public function set_up() { - parent::set_up(); - - // Enable option for tests. - add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' ); - - // Reset storage post ID cache to ensure clean state after transaction rollback. - $reflection = new ReflectionProperty( 'WP_Sync_Post_Meta_Storage', 'storage_post_ids' ); - if ( PHP_VERSION_ID < 80100 ) { - $reflection->setAccessible( true ); - } - $reflection->setValue( null, array() ); - } - - /** - * Builds a room request array for the sync endpoint. - * - * @param string $room Room identifier. - * @param int $client_id Client ID. - * @param int $cursor Cursor value for the 'after' parameter. - * @param array $awareness Awareness state. - * @param array $updates Array of updates. - * @return array Room request data. - */ - private function build_room( $room, $client_id = 1, $cursor = 0, $awareness = array(), $updates = array() ) { - if ( empty( $awareness ) ) { - $awareness = array( 'user' => 'test' ); - } - - return array( - 'after' => $cursor, - 'awareness' => $awareness, - 'client_id' => $client_id, - 'room' => $room, - 'updates' => $updates, - ); - } - - /** - * Dispatches a sync request with the given rooms. - * - * @param array $rooms Array of room request data. - * @return WP_REST_Response Response object. - */ - private function dispatch_sync( $rooms ) { - $request = new WP_REST_Request( 'POST', '/wp-sync/v1/updates' ); - $request->set_body_params( array( 'rooms' => $rooms ) ); - return rest_get_server()->dispatch( $request ); - } - - /** - * Returns the default room identifier for the test post. - * - * @return string Room identifier. - */ - private function get_post_room() { - return 'postType/post:' . self::$post_id; - } - - /* - * Required abstract method implementations. - * - * The sync endpoint is a single POST endpoint, not a standard CRUD controller. - * Methods that don't apply are stubbed with @doesNotPerformAssertions. - */ - - public function test_register_routes() { - $routes = rest_get_server()->get_routes(); - $this->assertArrayHasKey( '/wp-sync/v1/updates', $routes ); - } - - /** - * Verifies the sync route is registered when relying on the option's default - * value (option not stored in the database). - * - * This covers the upgrade scenario where a site has never explicitly saved - * the collaboration setting. - * - * @ticket 64814 - */ - public function test_register_routes_with_default_option() { - global $wp_rest_server; - - // Remove the pre_option filter added in ::set_up() so get_option() uses its default logic. - remove_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' ); - - // Ensure the option is not in the database. - delete_option( 'wp_enable_real_time_collaboration' ); - - // Reset the REST server so routes are re-registered from scratch. - $wp_rest_server = null; - - $routes = rest_get_server()->get_routes(); - $this->assertArrayHasKey( '/wp-sync/v1/updates', $routes ); - } - - /** - * @doesNotPerformAssertions - */ - public function test_context_param() { - // Not applicable for sync endpoint. - } - - /** - * @doesNotPerformAssertions - */ - public function test_get_items() { - // Not applicable for sync endpoint. - } - - /** - * @doesNotPerformAssertions - */ - public function test_get_item() { - // Not applicable for sync endpoint. - } - - public function test_create_item() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( $this->get_post_room() ) ) ); - - $this->assertSame( 200, $response->get_status() ); - } - - /** - * @doesNotPerformAssertions - */ - public function test_update_item() { - // Not applicable for sync endpoint. - } - - /** - * @doesNotPerformAssertions - */ - public function test_delete_item() { - // Not applicable for sync endpoint. - } - - /** - * @doesNotPerformAssertions - */ - public function test_prepare_item() { - // Not applicable for sync endpoint. - } - - /** - * @doesNotPerformAssertions - */ - public function test_get_item_schema() { - // Not applicable for sync endpoint. - } - - /* - * Permission tests. - */ - - public function test_sync_requires_authentication() { - wp_set_current_user( 0 ); - - $response = $this->dispatch_sync( array( $this->build_room( $this->get_post_room() ) ) ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 401 ); - } - - public function test_sync_post_requires_edit_capability() { - wp_set_current_user( self::$subscriber_id ); - - $response = $this->dispatch_sync( array( $this->build_room( $this->get_post_room() ) ) ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); - } - - public function test_sync_post_allowed_with_edit_capability() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( $this->get_post_room() ) ) ); - - $this->assertSame( 200, $response->get_status() ); - } - - public function test_sync_post_type_collection_requires_edit_posts_capability() { - wp_set_current_user( self::$subscriber_id ); - - $response = $this->dispatch_sync( array( $this->build_room( 'postType/post' ) ) ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); - } - - public function test_sync_post_type_collection_allowed_with_edit_posts_capability() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( 'postType/post' ) ) ); - - $this->assertSame( 200, $response->get_status() ); - } - - public function test_sync_root_collection_allowed() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( 'root/site' ) ) ); - - $this->assertSame( 200, $response->get_status() ); - } - - public function test_sync_taxonomy_collection_allowed() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( 'taxonomy/category' ) ) ); - - $this->assertSame( 200, $response->get_status() ); - } - - public function test_sync_unknown_collection_kind_rejected() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( 'unknown/entity' ) ) ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); - } - - public function test_sync_non_posttype_entity_with_object_id_rejected() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( 'root/site:123' ) ) ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); - } - - public function test_sync_nonexistent_post_rejected() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( 'postType/post:999999' ) ) ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); - } - - public function test_sync_permission_checked_per_room() { - wp_set_current_user( self::$editor_id ); - - // First room is allowed, second room is forbidden. - $response = $this->dispatch_sync( - array( - $this->build_room( $this->get_post_room() ), - $this->build_room( 'unknown/entity' ), - ) - ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); - } - - /* - * Validation tests. - */ - - public function test_sync_invalid_room_format_rejected() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( - array( - $this->build_room( 'invalid-room-format' ), - ) - ); - - $this->assertSame( 400, $response->get_status() ); - } - - /* - * Response format tests. - */ - - public function test_sync_response_structure() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( $this->get_post_room() ) ) ); - - $this->assertSame( 200, $response->get_status() ); - - $data = $response->get_data(); - $this->assertArrayHasKey( 'rooms', $data ); - $this->assertCount( 1, $data['rooms'] ); - - $room_data = $data['rooms'][0]; - $this->assertArrayHasKey( 'room', $room_data ); - $this->assertArrayHasKey( 'awareness', $room_data ); - $this->assertArrayHasKey( 'updates', $room_data ); - $this->assertArrayHasKey( 'end_cursor', $room_data ); - $this->assertArrayHasKey( 'total_updates', $room_data ); - $this->assertArrayHasKey( 'should_compact', $room_data ); - } - - public function test_sync_response_room_matches_request() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $response = $this->dispatch_sync( array( $this->build_room( $room ) ) ); - - $data = $response->get_data(); - $this->assertSame( $room, $data['rooms'][0]['room'] ); - } - - public function test_sync_end_cursor_is_positive_integer() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( $this->get_post_room() ) ) ); - - $data = $response->get_data(); - $this->assertIsInt( $data['rooms'][0]['end_cursor'] ); - $this->assertGreaterThan( 0, $data['rooms'][0]['end_cursor'] ); - } - - public function test_sync_empty_updates_returns_zero_total() { - wp_set_current_user( self::$editor_id ); - - $response = $this->dispatch_sync( array( $this->build_room( $this->get_post_room() ) ) ); - - $data = $response->get_data(); - $this->assertSame( 0, $data['rooms'][0]['total_updates'] ); - $this->assertEmpty( $data['rooms'][0]['updates'] ); - } - - /* - * Update tests. - */ - - public function test_sync_update_delivered_to_other_client() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'update', - 'data' => 'dGVzdCBkYXRh', - ); - - // Client 1 sends an update. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'client1' ), array( $update ) ), - ) - ); - - // Client 2 requests updates from the beginning. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0 ), - ) - ); - - $data = $response->get_data(); - $updates = $data['rooms'][0]['updates']; - - $this->assertNotEmpty( $updates ); - - $types = wp_list_pluck( $updates, 'type' ); - $this->assertContains( 'update', $types ); - } - - public function test_sync_own_updates_not_returned() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'update', - 'data' => 'b3duIGRhdGE=', - ); - - // Client 1 sends an update. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'client1' ), array( $update ) ), - ) - ); - - $data = $response->get_data(); - $updates = $data['rooms'][0]['updates']; - - // Client 1 should not see its own non-compaction update. - $this->assertEmpty( $updates ); - } - - public function test_sync_step1_update_stored_and_returned() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'sync_step1', - 'data' => 'c3RlcDE=', - ); - - // Client 1 sends sync_step1. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'client1' ), array( $update ) ), - ) - ); - - // Client 2 should see the sync_step1 update. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0 ), - ) - ); - - $data = $response->get_data(); - $types = wp_list_pluck( $data['rooms'][0]['updates'], 'type' ); - $this->assertContains( 'sync_step1', $types ); - } - - public function test_sync_step2_update_stored_and_returned() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'sync_step2', - 'data' => 'c3RlcDI=', - ); - - // Client 1 sends sync_step2. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'client1' ), array( $update ) ), - ) - ); - - // Client 2 should see the sync_step2 update. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0 ), - ) - ); - - $data = $response->get_data(); - $types = wp_list_pluck( $data['rooms'][0]['updates'], 'type' ); - $this->assertContains( 'sync_step2', $types ); - } - - public function test_sync_multiple_updates_in_single_request() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $updates = array( - array( - 'type' => 'sync_step1', - 'data' => 'c3RlcDE=', - ), - array( - 'type' => 'update', - 'data' => 'dXBkYXRl', - ), - ); - - // Client 1 sends multiple updates. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'client1' ), $updates ), - ) - ); - - // Client 2 should see both updates. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0 ), - ) - ); - - $data = $response->get_data(); - $room_updates = $data['rooms'][0]['updates']; - - $this->assertCount( 2, $room_updates ); - $this->assertSame( 2, $data['rooms'][0]['total_updates'] ); - } - - public function test_sync_update_data_preserved() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'update', - 'data' => 'cHJlc2VydmVkIGRhdGE=', - ); - - // Client 1 sends an update. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'client1' ), array( $update ) ), - ) - ); - - // Client 2 should receive the exact same data. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0 ), - ) - ); - - $data = $response->get_data(); - $room_updates = $data['rooms'][0]['updates']; - - $this->assertSame( 'cHJlc2VydmVkIGRhdGE=', $room_updates[0]['data'] ); - $this->assertSame( 'update', $room_updates[0]['type'] ); - } - - public function test_sync_total_updates_increments() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'update', - 'data' => 'dGVzdA==', - ); - - // Send three updates from different clients. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'c1' ), array( $update ) ), - ) - ); - $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0, array( 'user' => 'c2' ), array( $update ) ), - ) - ); - $this->dispatch_sync( - array( - $this->build_room( $room, 3, 0, array( 'user' => 'c3' ), array( $update ) ), - ) - ); - - // Any client should see total_updates = 3. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 4, 0 ), - ) - ); - - $data = $response->get_data(); - $this->assertSame( 3, $data['rooms'][0]['total_updates'] ); - } - - /* - * Compaction tests. - */ - - public function test_sync_should_compact_is_false_below_threshold() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'update', - 'data' => 'dGVzdA==', - ); - - // Client 1 sends a single update. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'c1' ), array( $update ) ), - ) - ); - - $data = $response->get_data(); - $this->assertFalse( $data['rooms'][0]['should_compact'] ); - } - - public function test_sync_should_compact_is_true_above_threshold_for_compactor() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $updates = array(); - for ( $i = 0; $i < 51; $i++ ) { - $updates[] = array( - 'type' => 'update', - 'data' => base64_encode( "update-$i" ), - ); - } - - // Client 1 sends enough updates to exceed the compaction threshold. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'c1' ), $updates ), - ) - ); - - // Client 1 polls again. It is the lowest (only) client, so it is the compactor. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'c1' ) ), - ) - ); - - $data = $response->get_data(); - $this->assertTrue( $data['rooms'][0]['should_compact'] ); - } - - public function test_sync_should_compact_is_false_for_non_compactor() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $updates = array(); - for ( $i = 0; $i < 51; $i++ ) { - $updates[] = array( - 'type' => 'update', - 'data' => base64_encode( "update-$i" ), - ); - } - - // Client 1 sends enough updates to exceed the compaction threshold. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'c1' ), $updates ), - ) - ); - - // Client 2 (higher ID than client 1) should not be the compactor. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0, array( 'user' => 'c2' ) ), - ) - ); - - $data = $response->get_data(); - $this->assertFalse( $data['rooms'][0]['should_compact'] ); - } - - public function test_sync_stale_compaction_succeeds_when_newer_compaction_exists() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - $update = array( - 'type' => 'update', - 'data' => 'dGVzdA==', - ); - - // Client 1 sends an update to seed the room. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'user' => 'c1' ), array( $update ) ), - ) - ); - - $end_cursor = $response->get_data()['rooms'][0]['end_cursor']; - - // Client 2 sends a compaction at the current cursor. - $compaction = array( - 'type' => 'compaction', - 'data' => 'Y29tcGFjdGVk', - ); - - $this->dispatch_sync( - array( - $this->build_room( $room, 2, $end_cursor, array( 'user' => 'c2' ), array( $compaction ) ), - ) - ); - - // Client 3 sends a stale compaction at cursor 0. The server should find - // client 2's compaction in the updates after cursor 0 and silently discard - // this one. - $stale_compaction = array( - 'type' => 'compaction', - 'data' => 'c3RhbGU=', - ); - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 3, 0, array( 'user' => 'c3' ), array( $stale_compaction ) ), - ) - ); - - $this->assertSame( 200, $response->get_status() ); - - // Verify the newer compaction is preserved and the stale one was not stored. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 4, 0, array( 'user' => 'c4' ) ), - ) - ); - $update_data = wp_list_pluck( $response->get_data()['rooms'][0]['updates'], 'data' ); - - $this->assertContains( 'Y29tcGFjdGVk', $update_data, 'The newer compaction should be preserved.' ); - $this->assertNotContains( 'c3RhbGU=', $update_data, 'The stale compaction should not be stored.' ); - } - - /* - * Awareness tests. - */ - - public function test_sync_awareness_returned() { - wp_set_current_user( self::$editor_id ); - - $awareness = array( 'name' => 'Editor' ); - $response = $this->dispatch_sync( - array( - $this->build_room( $this->get_post_room(), 1, 0, $awareness ), - ) - ); - - $data = $response->get_data(); - $this->assertArrayHasKey( 1, $data['rooms'][0]['awareness'] ); - $this->assertSame( $awareness, $data['rooms'][0]['awareness'][1] ); - } - - public function test_sync_awareness_shows_multiple_clients() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - - // Client 1 connects. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'name' => 'Client 1' ) ), - ) - ); - - // Client 2 connects. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 2, 0, array( 'name' => 'Client 2' ) ), - ) - ); - - $data = $response->get_data(); - $awareness = $data['rooms'][0]['awareness']; - - $this->assertArrayHasKey( 1, $awareness ); - $this->assertArrayHasKey( 2, $awareness ); - $this->assertSame( array( 'name' => 'Client 1' ), $awareness[1] ); - $this->assertSame( array( 'name' => 'Client 2' ), $awareness[2] ); - } - - public function test_sync_awareness_updates_existing_client() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - - // Client 1 connects with initial awareness. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'cursor' => 'start' ) ), - ) - ); - - // Client 1 updates its awareness. - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'cursor' => 'updated' ) ), - ) - ); - - $data = $response->get_data(); - $awareness = $data['rooms'][0]['awareness']; - - // Should have exactly one entry for client 1 with updated state. - $this->assertCount( 1, $awareness ); - $this->assertSame( array( 'cursor' => 'updated' ), $awareness[1] ); - } - - public function test_sync_awareness_client_id_cannot_be_used_by_another_user() { - wp_set_current_user( self::$editor_id ); - - $room = $this->get_post_room(); - - // Editor establishes awareness with client_id 1. - $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'name' => 'Editor' ) ), - ) - ); - - // A different user tries to use the same client_id. - $editor_id_2 = self::factory()->user->create( array( 'role' => 'editor' ) ); - wp_set_current_user( $editor_id_2 ); - - $response = $this->dispatch_sync( - array( - $this->build_room( $room, 1, 0, array( 'name' => 'Impostor' ) ), - ) - ); - - $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); - } - - /* - * Multiple rooms tests. - */ - - public function test_sync_multiple_rooms_in_single_request() { - wp_set_current_user( self::$editor_id ); - - $room1 = $this->get_post_room(); - $room2 = 'taxonomy/category'; - - $response = $this->dispatch_sync( - array( - $this->build_room( $room1 ), - $this->build_room( $room2 ), - ) - ); - - $this->assertSame( 200, $response->get_status() ); - - $data = $response->get_data(); - $this->assertCount( 2, $data['rooms'] ); - $this->assertSame( $room1, $data['rooms'][0]['room'] ); - $this->assertSame( $room2, $data['rooms'][1]['room'] ); - } - - public function test_sync_rooms_are_isolated() { - wp_set_current_user( self::$editor_id ); - - $post_id_2 = self::factory()->post->create( array( 'post_author' => self::$editor_id ) ); - $room1 = $this->get_post_room(); - $room2 = 'postType/post:' . $post_id_2; - - $update = array( - 'type' => 'update', - 'data' => 'cm9vbTEgb25seQ==', - ); - - // Client 1 sends an update to room 1 only. - $this->dispatch_sync( - array( - $this->build_room( $room1, 1, 0, array( 'user' => 'client1' ), array( $update ) ), - ) - ); - - // Client 2 queries both rooms. - $response = $this->dispatch_sync( - array( - $this->build_room( $room1, 2, 0 ), - $this->build_room( $room2, 2, 0 ), - ) - ); - - $data = $response->get_data(); - - // Room 1 should have the update. - $this->assertNotEmpty( $data['rooms'][0]['updates'] ); - - // Room 2 should have no updates. - $this->assertEmpty( $data['rooms'][1]['updates'] ); - } -} diff --git a/tests/phpunit/tests/rest-api/rest-themes-controller.php b/tests/phpunit/tests/rest-api/rest-themes-controller.php index aeaf92a8a27a1..923e7cda27374 100644 --- a/tests/phpunit/tests/rest-api/rest-themes-controller.php +++ b/tests/phpunit/tests/rest-api/rest-themes-controller.php @@ -163,53 +163,9 @@ public function test_register_routes() { * * @ticket 45016 * @ticket 61021 - * @ticket 62574 + * @ticket 62574. */ public function test_get_items() { - wp_set_current_user( self::$admin_id ); - $request = new WP_REST_Request( 'GET', self::$themes_route ); - - $response = rest_get_server()->dispatch( $request ); - - $this->assertSame( 200, $response->get_status() ); - $data = $response->get_data(); - - $fields = array( - '_links', - 'author', - 'author_uri', - 'description', - 'is_block_theme', - 'name', - 'requires_php', - 'requires_wp', - 'screenshot', - 'status', - 'stylesheet', - 'stylesheet_uri', - 'tags', - 'template', - 'template_uri', - 'textdomain', - 'theme_uri', - 'version', - ); - $this->assertIsArray( $data ); - $this->assertNotEmpty( $data ); - $this->assertSameSets( $fields, array_keys( $data[0] ) ); - - $this->assertContains( 'twentytwenty', wp_list_pluck( $data, 'stylesheet' ) ); - $this->assertContains( get_stylesheet(), wp_list_pluck( $data, 'stylesheet' ) ); - } - - /** - * Test retrieving a collection of active themes. - * - * @ticket 64719 - */ - public function test_get_items_active() { - wp_set_current_user( self::$admin_id ); - $response = self::perform_active_theme_request(); $this->assertSame( 200, $response->get_status() ); @@ -240,9 +196,8 @@ public function test_get_items_active() { 'version', ); $this->assertIsArray( $data ); - $this->assertCount( 1, $data ); + $this->assertNotEmpty( $data ); $this->assertSameSets( $fields, array_keys( $data[0] ) ); - $this->assertEquals( array( 'rest-api' ), wp_list_pluck( $data, 'stylesheet' ) ); } /** diff --git a/tests/phpunit/tests/rest-api/rest-widgets-controller.php b/tests/phpunit/tests/rest-api/rest-widgets-controller.php index 27a58eb638f9c..246ad3b61eb09 100644 --- a/tests/phpunit/tests/rest-api/rest-widgets-controller.php +++ b/tests/phpunit/tests/rest-api/rest-widgets-controller.php @@ -406,7 +406,7 @@ public function test_get_items() { 'id' => 'block-1', 'id_base' => 'block', 'sidebar' => 'sidebar-1', - 'rendered' => '

      Block test

      ', + 'rendered' => '

      Block test

      ', ), array( 'id' => 'rss-1', diff --git a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1CategoriesController.php b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1CategoriesController.php index 43525263ac5ba..8a93c7a64047d 100644 --- a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1CategoriesController.php +++ b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1CategoriesController.php @@ -6,7 +6,7 @@ * @covers WP_REST_Abilities_V1_Categories_Controller * * @group abilities-api - * @group restapi + * @group rest-api */ class Tests_REST_API_WpRestAbilitiesV1CategoriesController extends WP_UnitTestCase { diff --git a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php index 9ee564ef00069..e64965242dc98 100644 --- a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php +++ b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php @@ -6,7 +6,7 @@ * @covers WP_REST_Abilities_V1_List_Controller * * @group abilities-api - * @group restapi + * @group rest-api */ class Tests_REST_API_WpRestAbilitiesV1ListController extends WP_UnitTestCase { diff --git a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1RunController.php b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1RunController.php index 609b7677d7b58..bccc30c2f2e94 100644 --- a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1RunController.php +++ b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1RunController.php @@ -6,7 +6,7 @@ * @covers WP_REST_Abilities_V1_Run_Controller * * @group abilities-api - * @group restapi + * @group rest-api */ class Tests_REST_API_WpRestAbilitiesV1RunController extends WP_UnitTestCase { @@ -379,43 +379,6 @@ private function register_test_abilities(): void { ) ); - // Ability with nested namespace (3 segments). - $this->register_test_ability( - 'test/math/add', - array( - 'label' => 'Nested Add', - 'description' => 'Adds numbers with nested namespace', - 'category' => 'math', - 'input_schema' => array( - 'type' => 'object', - 'properties' => array( - 'a' => array( - 'type' => 'number', - 'description' => 'First number', - ), - 'b' => array( - 'type' => 'number', - 'description' => 'Second number', - ), - ), - 'required' => array( 'a', 'b' ), - 'additionalProperties' => false, - ), - 'output_schema' => array( - 'type' => 'number', - ), - 'execute_callback' => static function ( array $input ) { - return $input['a'] + $input['b']; - }, - 'permission_callback' => static function () { - return current_user_can( 'edit_posts' ); - }, - 'meta' => array( - 'show_in_rest' => true, - ), - ) - ); - // Read-only ability for query params testing. $this->register_test_ability( 'test/query-params', @@ -469,31 +432,6 @@ public function test_execute_regular_ability_post(): void { $this->assertEquals( 8, $response->get_data() ); } - /** - * Test executing an ability with a nested namespace (3 segments) via REST. - * - * @ticket 64098 - */ - public function test_execute_nested_namespace_ability(): void { - $request = new WP_REST_Request( 'POST', '/wp-abilities/v1/abilities/test/math/add/run' ); - $request->set_header( 'Content-Type', 'application/json' ); - $request->set_body( - wp_json_encode( - array( - 'input' => array( - 'a' => 10, - 'b' => 7, - ), - ) - ) - ); - - $response = $this->server->dispatch( $request ); - - $this->assertEquals( 200, $response->get_status() ); - $this->assertEquals( 17, $response->get_data() ); - } - /** * Test executing a read-only ability with GET. * diff --git a/tests/phpunit/tests/script-modules/wpScriptModules.php b/tests/phpunit/tests/script-modules/wpScriptModules.php index 140531101a1cd..4b103953c8451 100644 --- a/tests/phpunit/tests/script-modules/wpScriptModules.php +++ b/tests/phpunit/tests/script-modules/wpScriptModules.php @@ -11,39 +11,43 @@ */ class Tests_Script_Modules_WpScriptModules extends WP_UnitTestCase { - protected WP_Script_Modules $original_script_modules; - - protected string $original_wp_version; + /** + * @var WP_Script_Modules + */ + protected $original_script_modules; - protected ?WP_Scripts $original_wp_scripts; + /** + * @var string + */ + protected $original_wp_version; - protected WP_Script_Modules $script_modules; + /** + * Instance of WP_Script_Modules. + * + * @var WP_Script_Modules + */ + protected $script_modules; /** * Set up. */ public function set_up() { - global $wp_script_modules, $wp_scripts, $wp_version; + global $wp_script_modules, $wp_version; parent::set_up(); $this->original_script_modules = $wp_script_modules; $this->original_wp_version = $wp_version; - $this->original_wp_scripts = $wp_scripts ?? null; $wp_script_modules = null; $this->script_modules = wp_script_modules(); - - $wp_scripts = new WP_Scripts(); - $wp_scripts->default_version = get_bloginfo( 'version' ); } /** * Tear down. */ public function tear_down() { + global $wp_script_modules, $wp_version; parent::tear_down(); - global $wp_script_modules, $wp_scripts, $wp_version; $wp_script_modules = $this->original_script_modules; $wp_version = $this->original_wp_version; - $wp_scripts = $this->original_wp_scripts; } /** @@ -568,17 +572,15 @@ static function ( $src, $id ) { 10, 2 ); - $actual = get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ); - $expected = <<<'HTML' - - - -HTML; + $actual = get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ); $this->assertEqualHTML( - $expected, + ' + + + ', $actual, '', - 'Expected only one SCRIPT tag to be printed.' + "Expected only one SCRIPT tag to be printed. Snapshot:\n$actual" ); } @@ -1474,31 +1476,25 @@ public function test_in_footer_methods() { $actual_head = get_echo( array( wp_script_modules(), 'print_head_enqueued_script_modules' ) ); $actual_footer = get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ); - $expected = <<<'HTML' - - - - -HTML; - $this->assertEqualHTML( $actual_head, - $expected, + ' + + + + ', '', - 'Expected equal script modules in the HEAD.' + "Expected equal script modules in the HEAD. Snapshot:\n$actual_head" ); - - $expected = <<<'HTML' - - - - -HTML; $this->assertEqualHTML( $actual_footer, - $expected, + ' + + + + ', '', - 'Expected equal script modules in the footer.' + "Expected equal script modules in the footer. Snapshot:\n$actual_footer" ); } @@ -1750,18 +1746,17 @@ public function test_fetchpriority_bumping_a_to_z() { $actual = get_echo( array( wp_script_modules(), 'print_script_module_preloads' ) ); $actual .= get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ); - $expected = <<<'HTML' - - - - - - - - - -HTML; - $this->assertEqualHTML( $expected, $actual ); + $expected = ' + + + + + + + + + '; + $this->assertEqualHTML( $expected, $actual, '', "Snapshot:\n$actual" ); } /** @@ -1796,19 +1791,18 @@ public function test_fetchpriority_propagation() { $actual = get_echo( array( wp_script_modules(), 'print_script_module_preloads' ) ); $actual .= get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ); - $expected = <<<'HTML' - - - - - - - - - - -HTML; - $this->assertEqualHTML( $expected, $actual ); + $expected = ' + + + + + + + + + + '; + $this->assertEqualHTML( $expected, $actual, '', "Snapshot:\n$actual" ); } /** @@ -1828,25 +1822,31 @@ public function test_default_script_modules() { $actual_preloads = $this->normalize_markup_for_snapshot( get_echo( array( wp_script_modules(), 'print_script_module_preloads' ) ) ); $this->assertEqualHTML( - "\n", - $actual_preloads + ' + + ', + $actual_preloads, + '', + "Snapshot:\n$actual_preloads" ); $actual_head_script_modules = $this->normalize_markup_for_snapshot( get_echo( array( wp_script_modules(), 'print_head_enqueued_script_modules' ) ) ); $this->assertEqualHTML( '', - $actual_head_script_modules + $actual_head_script_modules, + '', + "Snapshot:\n$actual_head_script_modules" ); $actual_footer_script_modules = $this->normalize_markup_for_snapshot( get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ) ); - $expected = <<<'HTML' - - - -HTML; $this->assertEqualHTML( - $expected, - $actual_footer_script_modules + ' + + + ', + $actual_footer_script_modules, + '', + "Snapshot:\n$actual_footer_script_modules" ); } @@ -1866,8 +1866,10 @@ public function test_priority_of_dependency_for_non_enqueued_dependent() { $actual = $this->normalize_markup_for_snapshot( get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ) ); $this->assertEqualHTML( - "\n", - $actual + '', + $actual, + '', + "Snapshot:\n$actual" ); } @@ -1893,35 +1895,13 @@ public function test_dependent_of_default_script_modules() { $actual = $this->normalize_markup_for_snapshot( $actual ); - $expected = <<<'HTML' - - - - - -HTML; - $this->assertEqualHTML( $expected, $actual ); - } - - /** - * Tests that VIPS script modules always use minified file paths. - * - * Non-minified VIPS files are not shipped because they are ~10MB of - * inlined WASM with no debugging value, so the registration should - * always point to the .min.js variants. - * - * @ticket 64734 - * - * @covers ::wp_default_script_modules - */ - public function test_vips_script_modules_always_use_minified_paths() { - wp_default_script_modules(); - wp_enqueue_script_module( '@wordpress/vips/loader' ); - - $actual = get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) ); - - $this->assertStringContainsString( 'vips/loader.min.js', $actual ); - $this->assertStringNotContainsString( 'vips/loader.js"', $actual ); + $expected = ' + + + + + '; + $this->assertEqualHTML( $expected, $actual, '', "Snapshot:\n$actual" ); } /** @@ -2002,174 +1982,6 @@ public static function data_invalid_script_module_data(): array { ); } - /** - * Tests that script modules identified as dependencies of classic scripts are included in the import map. - * - * @ticket 61500 - * - * @covers WP_Script_Modules::get_import_map - */ - public function test_included_module_appears_in_importmap() { - $this->script_modules->register( 'dependency', '/dep.js' ); - $this->script_modules->register( 'example', '/example.js', array( 'dependency' ) ); - $this->script_modules->register( 'example2', '/example2.js' ); - - // Nothing printed now. - $this->assertSame( array(), $this->get_enqueued_script_modules(), 'Initial enqueued script modules was wrong.' ); - $this->assertSame( array(), $this->get_preloaded_script_modules(), 'Initial module preloads was wrong.' ); - $this->assertSame( array(), $this->get_import_map(), 'Initial import map was wrong.' ); - - // Enqueuing a script with a module dependency should add it to the import map. - wp_enqueue_script( - 'classic', - '/classic.js', - array( 'classic-dependency' ), - false, - array( - 'module_dependencies' => array( - 'example', - array( - 'id' => 'example2', - ), - ), - ) - ); - - $this->assertSame( array(), $this->get_enqueued_script_modules(), 'Final enqueued script modules was wrong.' ); - $this->assertSame( array(), $this->get_preloaded_script_modules(), 'Final module preloads was wrong.' ); - $this->assertEqualSets( - array( 'example', 'example2', 'dependency' ), - array_keys( $this->get_import_map() ), - 'Import map keys were wrong.' - ); - } - - /** - * Tests that dynamic dependencies of enqueued script modules are included in the import map. - * - * @ticket 61500 - * - * @covers WP_Script_Modules::get_import_map - */ - public function test_import_map_includes_dynamic_dependencies_of_enqueued_modules() { - $this->script_modules->register( 'dependency-of-enqueued', '/dependency-of-enqueued.js' ); - $this->script_modules->enqueue( - 'enqueued', - '/enqueued.js', - array( - array( - 'id' => 'dependency-of-enqueued', - 'import' => 'dynamic', - ), - ) - ); - - $enqueued = $this->get_enqueued_script_modules(); - $this->assertCount( 1, $enqueued, 'Enqueue count was wrong.' ); - $this->assertArrayHasKey( 'enqueued', $enqueued, 'Missing "enqueued" script module enqueue.' ); - $this->assertCount( 0, $this->get_preloaded_script_modules(), 'Module preload count was wrong.' ); - $this->assertEqualSets( - array( 'dependency-of-enqueued' ), - array_keys( $this->get_import_map() ), - 'Import map keys were wrong.' - ); - } - - /** - * Tests that script module dependencies of enqueued classic scripts (including transitive ones) are included in the import map. - * - * @ticket 61500 - * - * @covers WP_Script_Modules::get_import_map - */ - public function test_import_map_includes_dependencies_of_classic_scripts_recursive() { - $this->script_modules->register( 'classic-transitive-dependency', '/classic-transitive-dependency.js' ); - $this->script_modules->register( 'dependency-of-not-enqueued', '/dependency-of-not-enqueued.js' ); - $this->script_modules->register( 'not-enqueued', '/not-enqueued.js', array( 'dependency-of-not-enqueued' ) ); - - // Enqueuing a script with a module dependency should add it to the import map. - wp_register_script( - 'classic-transitive-dep', - '/classic-transitive-dep.js', - array(), - false, - array( - 'module_dependencies' => array( 'classic-transitive-dependency' ), - ) - ); - wp_enqueue_script( - 'classic', - '/classic.js', - array( 'classic-transitive-dep' ), - false, - array( - 'module_dependencies' => array( 'not-enqueued' ), - ) - ); - - $enqueued = $this->get_enqueued_script_modules(); - $this->assertCount( 0, $enqueued, 'Enqueue count was wrong.' ); - $this->assertCount( 0, $this->get_preloaded_script_modules(), 'Module preload count was wrong.' ); - $this->assertEqualSets( - array( - 'classic-transitive-dependency', - 'not-enqueued', - 'dependency-of-not-enqueued', - ), - array_keys( $this->get_import_map() ), - 'Import map keys were wrong.' - ); - } - - /** - * Tests that WP_Scripts emits a _doing_it_wrong() notice for missing script module dependencies. - * - * @ticket 61500 - * @ticket 64229 - * @covers WP_Script_Modules::get_import_map - */ - public function test_wp_scripts_doing_it_wrong_for_missing_script_module_dependencies() { - $expected_incorrect_usage = 'WP_Scripts::add_data'; - $this->setExpectedIncorrectUsage( $expected_incorrect_usage ); - - wp_enqueue_script( - 'registered-dep', - '/registered-dep.js', - array(), - null, - array( - 'module_dependencies' => array( 'does-not-exist' ), - ) - ); - - $import_map = $this->get_import_map(); - $this->assertSame( array(), $import_map, 'Expected importmap to be empty.' ); - $markup = get_echo( 'wp_print_scripts' ); - - /* - * In the future, we may want to have missing script module dependencies for classic scripts to cause the - * classic script to not be printed. This would align the behavior with script modules that have missing - * script module dependencies, and classic scripts that have missing classic script dependencies. Nevertheless, - * since script module dependencies rely on dynamic imports, the dependency may not be as strong. This means - * the classic script may still work or have a fallback in case the script module fails to dynamically import. - * This same change could be made for script modules as well, where if a script module has a missing dynamic - * script module dependency, this might similarly not be sufficient reason to omit printing the dependent script module. - */ - $this->assertStringContainsString( 'registered-dep.js', $markup, 'Expected script to be present, even though it has a missing script module dependency.' ); - - $this->assertArrayHasKey( - $expected_incorrect_usage, - $this->caught_doing_it_wrong, - "Expected $expected_incorrect_usage to trigger a _doing_it_wrong() notice for missing dependency." - ); - - $this->assertStringContainsString( - 'The script with the handle "registered-dep" was enqueued with script module dependencies ("module_dependencies") that are not registered: does-not-exist', - $this->caught_doing_it_wrong[ $expected_incorrect_usage ], - 'Expected _doing_it_wrong() notice to indicate missing script module dependencies for enqueued script.' - ); - } - /** * Tests various ways of printing and dependency ordering of script modules. * @@ -2528,16 +2340,20 @@ public function test_static_import_dependency_with_dynamic_imports_depending_on_ "Expected import map to match snapshot:\n" . var_export( $import_map, true ) ); $this->assertEqualHTML( - "\n", + ' + + ', $preload_links, '', - 'Expected preload links to match.' + "Expected preload links to match snapshot:\n$preload_links" ); $this->assertEqualHTML( - "\n", + ' + + ', $script_modules, '', - 'Expected script modules to match.' + "Expected script modules to match snapshot:\n$script_modules" ); } diff --git a/tests/phpunit/tests/style-engine/styleEngine.php b/tests/phpunit/tests/style-engine/styleEngine.php index f6e0444faf74b..4e85ecad52299 100644 --- a/tests/phpunit/tests/style-engine/styleEngine.php +++ b/tests/phpunit/tests/style-engine/styleEngine.php @@ -119,23 +119,6 @@ public function data_wp_style_engine_get_styles() { ), ), - 'inline_valid_dimension_preset_style' => array( - 'block_styles' => array( - 'dimensions' => array( - 'width' => 'var:preset|dimension|large', - 'height' => 'var:preset|dimension|modestly-small', - ), - ), - 'options' => null, - 'expected_output' => array( - 'css' => 'height:var(--wp--preset--dimension--modestly-small);width:var(--wp--preset--dimension--large);', - 'declarations' => array( - 'height' => 'var(--wp--preset--dimension--modestly-small)', - 'width' => 'var(--wp--preset--dimension--large)', - ), - ), - ), - 'inline_valid_box_model_style' => array( 'block_styles' => array( 'spacing' => array( diff --git a/tests/phpunit/tests/style-engine/wpStyleEngineCssDeclarations.php b/tests/phpunit/tests/style-engine/wpStyleEngineCssDeclarations.php index b510edcbfd0cb..b1f6203e6bb00 100644 --- a/tests/phpunit/tests/style-engine/wpStyleEngineCssDeclarations.php +++ b/tests/phpunit/tests/style-engine/wpStyleEngineCssDeclarations.php @@ -290,32 +290,4 @@ public function test_should_remove_multiple_declarations() { 'Output after removing "color" and "margin" declarations via `remove_declarations()` does not match expectations' ); } - - /** - * Tests that non-string values are rejected without causing fatal errors. - * - * @ticket 64545 - * - * @covers ::add_declaration - */ - public function test_should_reject_non_string_values() { - $css_declarations = new WP_Style_Engine_CSS_Declarations(); - - // Add valid string value first. - $css_declarations->add_declaration( 'color', 'red' ); - - // Try to add array value - should be silently rejected. - $css_declarations->add_declaration( 'padding-margin', array( 'top' => '10px' ) ); - - // Try to add other non-string values. - $css_declarations->add_declaration( 'font-size', 123 ); - $css_declarations->add_declaration( 'margin', null ); - - // Only the valid string value should be stored. - $this->assertSame( - array( 'color' => 'red' ), - $css_declarations->get_declarations(), - 'Non-string values should be rejected without causing errors.' - ); - } } diff --git a/tests/phpunit/tests/template.php b/tests/phpunit/tests/template.php index a79702554dc64..a965665360b05 100644 --- a/tests/phpunit/tests/template.php +++ b/tests/phpunit/tests/template.php @@ -146,12 +146,6 @@ public function tear_down() { unregister_taxonomy( 'taxo' ); $this->set_permalink_structure( '' ); - $registry = WP_Block_Type_Registry::get_instance(); - if ( $registry->is_registered( 'third-party/test' ) ) { - $registry->unregister( 'third-party/test' ); - } - - unset( $GLOBALS['_wp_tests_development_mode'] ); parent::tear_down(); } @@ -1265,7 +1259,7 @@ public function test_wp_finalize_template_enhancement_output_buffer_with_errors_ // Start a wrapper output buffer so that we can flush the inner buffer. ob_start(); - ini_set( 'error_log', $this->temp_filename() ); + ini_set( 'error_log', $this->temp_filename() ); // phpcs:ignore WordPress.PHP.IniSet.log_errors_Blacklisted, WordPress.PHP.IniSet.Risky foreach ( $ini_config_options as $config => $option ) { ini_set( $config, $option ); } @@ -1478,351 +1472,136 @@ public function test_wp_load_classic_theme_block_styles_on_demand( string $theme /** * Data provider. * - * @return array + * @return array */ public function data_wp_hoist_late_printed_styles(): array { - $blocks_content = '
      This is only a test!
      '; - - $early_common_styles = array( + $common_expected_head_styles = array( 'wp-img-auto-sizes-contain-inline-css', 'early-css', 'early-inline-css', 'wp-emoji-styles-inline-css', - ); - - // Styles enqueued at wp_enqueue_scripts (priority 10). - $common_at_wp_enqueue_scripts = array( + 'wp-block-library-css', + 'wp-block-separator-css', + 'global-styles-inline-css', + 'core-block-supports-inline-css', + 'classic-theme-styles-css', 'normal-css', 'normal-inline-css', - ); - - $common_late_in_head = array( - // Styles printed at wp_head priority 101. 'wp-custom-css', - ); - - $common_late_in_body = array( 'late-css', 'late-inline-css', - 'core-block-supports-inline-css', - ); - - $common_expected_head_styles = array_merge( - $early_common_styles, - array( - // Core block styles enqueued by wp_common_block_scripts_and_styles(), which runs at wp_enqueue_scripts priority 10, added first. - 'wp-block-library-css', // Inline printed. - 'wp-block-separator-css', // Hoisted. - - // The wp_common_block_scripts_and_styles() function also fires enqueue_block_assets, at which wp_enqueue_classic_theme_styles() runs. - 'classic-theme-styles-css', // Printed at enqueue_block_assets. - - // Third-party block styles. - 'third-party-test-block-css', // Hoisted. - - // Other styles enqueued at enqueue_block_assets, which is fired by wp_common_block_scripts_and_styles(). - 'custom-block-styles-css', // Printed at enqueue_block_assets. - - // Hoisted. Enqueued by wp_enqueue_global_styles() which runs at wp_enqueue_scripts priority 10 and wp_footer priority 1. - 'global-styles-inline-css', - ), - $common_at_wp_enqueue_scripts, - $common_late_in_head, - $common_late_in_body ); return array( 'standard_classic_theme_config_with_min_styles_inlined' => array( 'set_up' => null, - 'content' => $blocks_content, 'inline_size_limit' => 0, 'expected_styles' => array( 'HEAD' => $common_expected_head_styles, 'BODY' => array(), ), ), - 'standard_classic_theme_config_with_max_styles_inlined' => array( 'set_up' => null, - 'content' => $blocks_content, - 'inline_size_limit' => PHP_INT_MAX, - 'expected_styles' => array( - 'HEAD' => array_merge( - $early_common_styles, - array( - 'wp-block-library-inline-css', - 'wp-block-separator-inline-css', - 'classic-theme-styles-inline-css', - 'third-party-test-block-css', - 'custom-block-styles-css', - 'global-styles-inline-css', - ), - $common_at_wp_enqueue_scripts, - $common_late_in_head, - $common_late_in_body - ), - 'BODY' => array(), - ), - ), - - 'classic_theme_styles_omitted' => array( - 'set_up' => static function () { - // Note that wp_enqueue_scripts is used instead of enqueue_block_assets because it runs again at the former action. - add_action( - 'wp_enqueue_scripts', - static function () { - wp_dequeue_style( 'classic-theme-styles' ); - }, - 100 - ); - }, - 'content' => $blocks_content, - 'inline_size_limit' => PHP_INT_MAX, - 'expected_styles' => array( - 'HEAD' => array_merge( - $early_common_styles, - array( - 'wp-block-library-inline-css', - 'wp-block-separator-inline-css', - 'third-party-test-block-css', - 'custom-block-styles-css', - 'global-styles-inline-css', - ), - $common_at_wp_enqueue_scripts, - $common_late_in_head, - $common_late_in_body - ), - 'BODY' => array(), - ), - ), - - 'no_styles_at_enqueued_block_assets' => array( - 'set_up' => static function () { - add_action( - 'wp_enqueue_scripts', - static function () { - wp_dequeue_style( 'classic-theme-styles' ); - wp_dequeue_style( 'custom-block-styles' ); - }, - 100 - ); - }, - 'content' => $blocks_content, - 'inline_size_limit' => PHP_INT_MAX, - 'expected_styles' => array( - 'HEAD' => array_merge( - $early_common_styles, - array( - 'wp-block-library-inline-css', - 'wp-block-separator-inline-css', - 'third-party-test-block-css', - 'global-styles-inline-css', - ), - $common_at_wp_enqueue_scripts, - $common_late_in_head, - $common_late_in_body - ), - 'BODY' => array(), - ), - ), - - 'no_global_styles' => array( - 'set_up' => static function () { - $dequeue = static function () { - wp_dequeue_style( 'global-styles' ); - }; - add_action( 'wp_enqueue_scripts', $dequeue, 1000 ); - add_action( 'wp_footer', $dequeue, 2 ); - }, - 'content' => $blocks_content, 'inline_size_limit' => PHP_INT_MAX, 'expected_styles' => array( - 'HEAD' => array_merge( - $early_common_styles, - array( - 'wp-block-library-inline-css', - 'wp-block-separator-inline-css', - 'classic-theme-styles-inline-css', - 'third-party-test-block-css', - 'custom-block-styles-css', - ), - $common_at_wp_enqueue_scripts, - $common_late_in_head, - $common_late_in_body + 'HEAD' => array( + 'wp-img-auto-sizes-contain-inline-css', + 'early-css', + 'early-inline-css', + 'wp-emoji-styles-inline-css', + 'wp-block-library-inline-css', + 'wp-block-separator-inline-css', + 'global-styles-inline-css', + 'core-block-supports-inline-css', + 'classic-theme-styles-inline-css', + 'normal-css', + 'normal-inline-css', + 'wp-custom-css', + 'late-css', + 'late-inline-css', ), 'BODY' => array(), ), ), - - 'standard_classic_theme_config_extra_block_library_inline_style_none_inlined' => array( + 'standard_classic_theme_config_extra_block_library_inline_style' => array( 'set_up' => static function () { add_action( 'enqueue_block_assets', static function () { - // Extra CSS which prevents empty inline style containing placeholder from being removed. - wp_add_inline_style( 'wp-block-library', '.wp-block-separator{ outline:solid 1px lime; }' ); + wp_add_inline_style( 'wp-block-library', '/* Extra CSS which prevents empty inline style containing placeholder from being removed. */' ); } ); }, - 'content' => $blocks_content, 'inline_size_limit' => 0, 'expected_styles' => array( - 'HEAD' => array_merge( - $early_common_styles, - array( - 'wp-block-library-css', - 'wp-block-separator-css', - 'wp-block-library-inline-css-extra', - 'classic-theme-styles-css', - 'third-party-test-block-css', - 'custom-block-styles-css', - 'global-styles-inline-css', - ), - $common_at_wp_enqueue_scripts, - $common_late_in_head, - $common_late_in_body - ), + 'HEAD' => ( function ( $expected_styles ) { + // Insert 'wp-block-library-inline-css' right after 'wp-block-library-css'. + $i = array_search( 'wp-block-library-css', $expected_styles, true ); + $this->assertIsInt( $i, 'Expected wp-block-library-css to be among the styles.' ); + array_splice( $expected_styles, $i + 1, 0, 'wp-block-library-inline-css' ); + return $expected_styles; + } )( $common_expected_head_styles ), 'BODY' => array(), ), - 'assert' => function ( string $buffer, string $filtered_buffer ) { - $block_separator_core_style_span = null; - $block_separator_custom_style_span = null; - $processor = new class( $filtered_buffer ) extends WP_HTML_Tag_Processor { - public function get_span(): WP_HTML_Span { - $this->set_bookmark( 'here' ); - return $this->bookmarks['here']; - } - }; - while ( $processor->next_tag() ) { - if ( - $processor->get_tag() === 'LINK' && - $processor->get_attribute( 'rel' ) === 'stylesheet' && - $processor->get_attribute( 'id' ) === 'wp-block-separator-css' - ) { - $block_separator_core_style_span = $processor->get_span(); - } elseif ( - $processor->get_tag() === 'STYLE' && - $processor->get_attribute( 'id' ) === 'wp-block-library-inline-css-extra' && - str_contains( $processor->get_modifiable_text(), '.wp-block-separator{ outline:solid 1px lime; }' ) - ) { - $block_separator_custom_style_span = $processor->get_span(); - } - } - - $this->assertInstanceOf( WP_HTML_Span::class, $block_separator_core_style_span, 'Expected the block separator core style to be present.' ); - $this->assertInstanceOf( WP_HTML_Span::class, $block_separator_custom_style_span, 'Expected the block separator custom style to be present.' ); - $this->assertGreaterThan( $block_separator_core_style_span->start, $block_separator_custom_style_span->start, 'Expected the block separator custom style to appear after the block separator stylesheet.' ); - }, ), - - 'standard_classic_theme_config_extra_block_library_inline_style_all_inlined' => array( - 'set_up' => static function () { - add_action( - 'enqueue_block_assets', - static function () { - // Extra CSS which prevents empty inline style containing placeholder from being removed. - wp_add_inline_style( 'wp-block-library', '.wp-block-separator{ outline:solid 1px lime; }' ); - } - ); - }, - 'content' => $blocks_content, - 'inline_size_limit' => PHP_INT_MAX, - 'expected_styles' => array( - 'HEAD' => array_merge( - $early_common_styles, - array( - 'wp-block-library-inline-css', - 'wp-block-separator-inline-css', - 'wp-block-library-inline-css-extra', - 'classic-theme-styles-inline-css', - 'third-party-test-block-css', - 'custom-block-styles-css', - 'global-styles-inline-css', - ), - $common_at_wp_enqueue_scripts, - $common_late_in_head, - $common_late_in_body - ), - 'BODY' => array(), - ), - 'assert' => function ( string $buffer, string $filtered_buffer ) { - $block_separator_inline_style_start_tag = '