diff --git a/.github/workflows/daily_tests.yml b/.github/workflows/daily_tests.yml index 4bc2c2c4cc..8e22965d03 100644 --- a/.github/workflows/daily_tests.yml +++ b/.github/workflows/daily_tests.yml @@ -20,6 +20,11 @@ jobs: uses: ./.github/workflows/testing_dev_with_live_services.yml secrets: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + E2ELiveServices: + uses: ./.github/workflows/testing_dev_e2e_with_live_services.yml + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} DANDI_STAGING_API_KEY: ${{ secrets.DANDI_STAGING_API_KEY }} BuildTests: @@ -38,7 +43,7 @@ jobs: NotifyOnAnyFailure: runs-on: ubuntu-latest - needs: [DevTests, LiveServices, BuildTests, ExampleDataCache, ExampleDataTests] + needs: [DevTests, LiveServices, E2ELiveServices, BuildTests, ExampleDataCache, ExampleDataTests] if: failure() steps: - uses: dawidd6/action-send-mail@v3 @@ -48,6 +53,6 @@ jobs: username: ${{ secrets.MAIL_USERNAME }} password: ${{ secrets.MAIL_PASSWORD }} subject: NWB GUIDE Daily Test Failure - to: ${{ secrets.DAILY_FAILURE_EMAIL_LIST }} + to: cody.c.baker.phd@gmail.com,rly@lbl.gov from: NWB Guide Daily Tests body: "The daily tests workflow failed, please check the status at https://github.com/NeurodataWithoutBorders/nwb-guide/actions/workflows/daily_tests.yml" diff --git a/.github/workflows/deploy_tests_on_pull_request.yml b/.github/workflows/deploy_tests_on_pull_request.yml index f006b1d2b3..9d59d44c6d 100644 --- a/.github/workflows/deploy_tests_on_pull_request.yml +++ b/.github/workflows/deploy_tests_on_pull_request.yml @@ -18,6 +18,11 @@ jobs: uses: ./.github/workflows/testing_dev_with_live_services.yml secrets: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + E2ELiveServices: + uses: ./.github/workflows/testing_dev_e2e_with_live_services.yml + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} DANDI_STAGING_API_KEY: ${{ secrets.DANDI_STAGING_API_KEY }} BuildTests: diff --git a/.github/workflows/example_data_cache.yml b/.github/workflows/example_data_cache.yml index 5a2b6d9b82..d487582211 100644 --- a/.github/workflows/example_data_cache.yml +++ b/.github/workflows/example_data_cache.yml @@ -21,7 +21,7 @@ jobs: fail-fast: false matrix: python-version: ["3.12"] - os: [ubuntu-latest, macos-latest, macos-13, windows-latest] + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] steps: diff --git a/.github/workflows/testing_dev.yml b/.github/workflows/testing_dev.yml index 385f13f4dd..561f2b38be 100644 --- a/.github/workflows/testing_dev.yml +++ b/.github/workflows/testing_dev.yml @@ -29,8 +29,8 @@ jobs: - os: macos-13 # Mac x64 runner label: environments/environment-MAC-intel.yml -# - os: windows-latest -# label: environments/environment-Windows.yml + - os: windows-latest + label: environments/environment-Windows.yml steps: - uses: actions/checkout@v4 @@ -69,6 +69,12 @@ jobs: - name: Install GUIDE run: npm ci --verbose + - name: Install testing dependencies + run: pip install pytest pytest-cov + + - name: Manually remove matplotlib + run: pip uninstall matplotlib --yes + - if: matrix.os != 'ubuntu-latest' name: Run tests run: npm run test:coverage @@ -77,16 +83,6 @@ jobs: name: Run tests with xvfb run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test:coverage - - name: Archive E2E Test Screenshots - if: always() - uses: actions/upload-artifact@v4 - with: - name: test-screenshots-${{ matrix.os }} - path: docs/assets/tutorials - retention-days: 1 - overwrite: true - - - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4 env: diff --git a/.github/workflows/testing_dev_e2e_with_live_services.yml b/.github/workflows/testing_dev_e2e_with_live_services.yml new file mode 100644 index 0000000000..bd10f5f351 --- /dev/null +++ b/.github/workflows/testing_dev_e2e_with_live_services.yml @@ -0,0 +1,106 @@ +name: End-to-end tests with live services +on: + workflow_call: + secrets: + CODECOV_TOKEN: + required: true + DANDI_STAGING_API_KEY: + required: true + +jobs: + + run: + # Will read on PR dashboard as 'Deploy / E2ELiveServices / {os}' + # Action dashboard identified by 'End-to-end tests with live services' + # Requirement settings identified as 'E2ELiveServices / {os}' + name: ${{ matrix.os }} + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash -l {0} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + label: environments/environment-Linux.yml + + - os: macos-latest # Mac arm64 runner + label: environments/environment-MAC-apple-silicon.yml + + - os: macos-13 # Mac x64 runner + label: environments/environment-MAC-intel.yml + + - os: windows-latest + label: environments/environment-Windows.yml + + steps: + - uses: actions/checkout@v4 + - run: git fetch --prune --unshallow --tags + + # see https://github.com/conda-incubator/setup-miniconda#caching-environments + - name: Setup Mambaforge + uses: conda-incubator/setup-miniconda@v3 + with: + miniforge-variant: Mambaforge + miniforge-version: latest + activate-environment: nwb-guide + use-mamba: true + + - name: Set cache date + id: get-date + run: echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT + shell: bash + + - name: Cache Conda env + uses: actions/cache@v4 + with: + path: ${{ env.CONDA }}/envs + key: conda-${{ runner.os }}-${{ runner.arch }}-${{steps.get-date.outputs.today }}-${{ hashFiles(matrix.label) }}-${{ env.CACHE_NUMBER }} + id: cache + + - if: steps.cache.outputs.cache-hit != 'true' + name: Create and activate environment + run: mamba env update -n nwb-guide -f ${{ matrix.label }} + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install GUIDE + run: npm ci --verbose + + - name: Install testing dependencies + run: pip install pytest pytest-cov + + - name: Manually remove matplotlib + run: pip uninstall matplotlib --yes + + - name: Create env file + run: | + touch .env + echo DANDI_STAGING_API_KEY=${{ secrets.DANDI_STAGING_API_KEY }} >> .env + + - if: matrix.os != 'ubuntu-latest' + name: Run tests + run: npm run coverage:tutorial + + - if: matrix.os == 'ubuntu-latest' + name: Run tests with xvfb + run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run coverage:tutorial + + - name: Archive E2E Test Screenshots + uses: actions/upload-artifact@v4 + with: + name: test-screenshots-${{ matrix.os }} + path: docs/assets/tutorials + retention-days: 1 + overwrite: true + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v4 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + with: + fail_ci_if_error: true diff --git a/.github/workflows/testing_dev_with_live_services.yml b/.github/workflows/testing_dev_with_live_services.yml index 7dd96ce9ce..020db13911 100644 --- a/.github/workflows/testing_dev_with_live_services.yml +++ b/.github/workflows/testing_dev_with_live_services.yml @@ -4,8 +4,6 @@ on: secrets: CODECOV_TOKEN: required: true - DANDI_STAGING_API_KEY: - required: true jobs: @@ -31,8 +29,8 @@ jobs: - os: macos-13 # Mac x64 runner label: environments/environment-MAC-intel.yml -# - os: windows-latest -# label: environments/environment-Windows.yml + - os: windows-latest + label: environments/environment-Windows.yml steps: - uses: actions/checkout@v4 @@ -71,10 +69,11 @@ jobs: - name: Install GUIDE run: npm ci --verbose - - name: Create env file - run: | - touch .env - echo DANDI_STAGING_API_KEY=${{ secrets.DANDI_STAGING_API_KEY }} >> .env + - name: Install testing dependencies + run: pip install pytest pytest-cov + + - name: Manually remove matplotlib + run: pip uninstall matplotlib --yes - if: matrix.os != 'ubuntu-latest' name: Run tests diff --git a/.github/workflows/testing_flask_build_and_dist.yml b/.github/workflows/testing_flask_build_and_dist.yml index 6c477d5e44..a892ff2a92 100644 --- a/.github/workflows/testing_flask_build_and_dist.yml +++ b/.github/workflows/testing_flask_build_and_dist.yml @@ -17,26 +17,16 @@ jobs: fail-fast: false matrix: include: - # linux installation instructions use dev mode instead of distributable - # - python-version: "3.9" - # os: ubuntu-latest - # label: environments/environment-Linux.yml - # prefix: /usr/share/miniconda3/envs/nwb-guide - - - python-version: "3.9" - os: macos-latest # Mac arm64 runner + # No linux in this matrix since installation instructions use dev mode instead of distributable + + - os: macos-latest # Mac arm64 runner label: environments/environment-MAC-apple-silicon.yml - prefix: /Users/runner/miniconda3/envs/nwb-guide - - python-version: "3.9" - os: macos-13 # Mac x64 runner + - os: macos-13 # Mac x64 runner label: environments/environment-MAC-intel.yml - prefix: /Users/runner/miniconda3/envs/nwb-guide - - python-version: "3.9" - os: windows-latest + - os: windows-latest label: environments/environment-Windows.yml - prefix: C:\Miniconda3\envs\nwb-guide steps: - uses: actions/checkout@v4 @@ -78,7 +68,14 @@ jobs: with: node-version: "20" - - run: npm ci --verbose + - name: Install GUIDE + run: npm ci --verbose + + - name: Install testing dependencies + run: pip install pytest pytest-cov + + - name: Manually remove matplotlib + run: pip uninstall matplotlib --yes # Fix for macos build - remove bad sonpy file - if: matrix.os == 'macos-latest' || matrix.os == 'macos-13' diff --git a/.github/workflows/testing_pipelines.yml b/.github/workflows/testing_pipelines.yml index 4467f1872b..57fe37feea 100644 --- a/.github/workflows/testing_pipelines.yml +++ b/.github/workflows/testing_pipelines.yml @@ -30,7 +30,6 @@ jobs: - os: windows-latest label: environments/environment-Windows.yml - steps: - uses: actions/checkout@v4 - run: git fetch --prune --unshallow --tags @@ -67,6 +66,12 @@ jobs: - name: Install GUIDE run: npm ci --verbose + - name: Install testing dependencies + run: pip install pytest pytest-cov + + - name: Manually remove matplotlib + run: pip uninstall matplotlib --yes + # Load example data caches - name: Get ephy_testing_data current head hash id: ephys diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index aab09b8b7d..b3568371f3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,7 +8,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/psf/black - rev: 24.4.2 + rev: 24.8.0 hooks: - id: black exclude: ^docs/ diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index f0baefd23f..809ab5bfe2 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -11,7 +11,7 @@ button.btn.version-switcher__button { .version-switcher__container.dropdown:hover .dropdown-menu { display: block; left: 0; - margin-top: var(--bs-dropdown-spacer); + margin-top: 0 !important; top: 100%; } diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json index 082d3fc8d3..289809962b 100644 --- a/docs/_static/switcher.json +++ b/docs/_static/switcher.json @@ -4,11 +4,23 @@ "url": "https://nwb-guide.readthedocs.io/en/latest/", "preferred": false }, + { + "name": "1.0.3", + "version": "v1.0.3", + "url": "https://nwb-guide.readthedocs.io/en/v1.0.3/", + "preferred": true + }, + { + "name": "1.0.2", + "version": "v1.0.2", + "url": "https://nwb-guide.readthedocs.io/en/v1.0.2/", + "preferred": false + }, { "name": "1.0.1", "version": "v1.0.1", "url": "https://nwb-guide.readthedocs.io/en/v1.0.1/", - "preferred": true + "preferred": false }, { "name": "1.0.0", diff --git a/docs/assets/tutorials/dandi/create-dandiset.png b/docs/assets/tutorials/dandi/create-dandiset.png index 33360bfe91..25591f0834 100644 Binary files a/docs/assets/tutorials/dandi/create-dandiset.png and b/docs/assets/tutorials/dandi/create-dandiset.png differ diff --git a/docs/assets/tutorials/dandi/dandiset-id.png b/docs/assets/tutorials/dandi/dandiset-id.png index 8d871a04f3..857568610c 100644 Binary files a/docs/assets/tutorials/dandi/dandiset-id.png and b/docs/assets/tutorials/dandi/dandiset-id.png differ diff --git a/docs/assets/tutorials/dandi/review-page.png b/docs/assets/tutorials/dandi/review-page.png index c4ce9c2da2..bb59b5bda9 100644 Binary files a/docs/assets/tutorials/dandi/review-page.png and b/docs/assets/tutorials/dandi/review-page.png differ diff --git a/docs/assets/tutorials/dataset-created.png b/docs/assets/tutorials/dataset-created.png index 716344593c..e319cfa14f 100644 Binary files a/docs/assets/tutorials/dataset-created.png and b/docs/assets/tutorials/dataset-created.png differ diff --git a/docs/assets/tutorials/dataset-creation.png b/docs/assets/tutorials/dataset-creation.png index f69e72a31d..f785673438 100644 Binary files a/docs/assets/tutorials/dataset-creation.png and b/docs/assets/tutorials/dataset-creation.png differ diff --git a/docs/assets/tutorials/home-page.png b/docs/assets/tutorials/home-page.png index 924a4a6407..b3208b0a84 100644 Binary files a/docs/assets/tutorials/home-page.png and b/docs/assets/tutorials/home-page.png differ diff --git a/docs/assets/tutorials/multiple/conversion-results-page.png b/docs/assets/tutorials/multiple/conversion-results-page.png index 7d5daf094d..73ea06d734 100644 Binary files a/docs/assets/tutorials/multiple/conversion-results-page.png and b/docs/assets/tutorials/multiple/conversion-results-page.png differ diff --git a/docs/assets/tutorials/multiple/fail-name.png b/docs/assets/tutorials/multiple/fail-name.png index 27f7e33665..3419a2a906 100644 Binary files a/docs/assets/tutorials/multiple/fail-name.png and b/docs/assets/tutorials/multiple/fail-name.png differ diff --git a/docs/assets/tutorials/multiple/home-page-complete.png b/docs/assets/tutorials/multiple/home-page-complete.png index ca650959e5..6204a2888b 100644 Binary files a/docs/assets/tutorials/multiple/home-page-complete.png and b/docs/assets/tutorials/multiple/home-page-complete.png differ diff --git a/docs/assets/tutorials/multiple/inspect-page.png b/docs/assets/tutorials/multiple/inspect-page.png index 7e778b01aa..794a1c1005 100644 Binary files a/docs/assets/tutorials/multiple/inspect-page.png and b/docs/assets/tutorials/multiple/inspect-page.png differ diff --git a/docs/assets/tutorials/multiple/metadata-ecephys.png b/docs/assets/tutorials/multiple/metadata-ecephys.png index 835f0f365c..3ab764ee41 100644 Binary files a/docs/assets/tutorials/multiple/metadata-ecephys.png and b/docs/assets/tutorials/multiple/metadata-ecephys.png differ diff --git a/docs/assets/tutorials/multiple/metadata-nwbfile.png b/docs/assets/tutorials/multiple/metadata-nwbfile.png index a0ae0b25ff..4210a22016 100644 Binary files a/docs/assets/tutorials/multiple/metadata-nwbfile.png and b/docs/assets/tutorials/multiple/metadata-nwbfile.png differ diff --git a/docs/assets/tutorials/multiple/pathexpansion-autocomplete-filled.png b/docs/assets/tutorials/multiple/pathexpansion-autocomplete-filled.png index 72e53d3615..211848e6ba 100644 Binary files a/docs/assets/tutorials/multiple/pathexpansion-autocomplete-filled.png and b/docs/assets/tutorials/multiple/pathexpansion-autocomplete-filled.png differ diff --git a/docs/assets/tutorials/multiple/pathexpansion-autocomplete-open.png b/docs/assets/tutorials/multiple/pathexpansion-autocomplete-open.png index 397bb6b70c..6c63aecdf4 100644 Binary files a/docs/assets/tutorials/multiple/pathexpansion-autocomplete-open.png and b/docs/assets/tutorials/multiple/pathexpansion-autocomplete-open.png differ diff --git a/docs/assets/tutorials/multiple/pathexpansion-autocomplete-submitted.png b/docs/assets/tutorials/multiple/pathexpansion-autocomplete-submitted.png index 649aefc4d0..1079239e71 100644 Binary files a/docs/assets/tutorials/multiple/pathexpansion-autocomplete-submitted.png and b/docs/assets/tutorials/multiple/pathexpansion-autocomplete-submitted.png differ diff --git a/docs/assets/tutorials/multiple/pathexpansion-completed.png b/docs/assets/tutorials/multiple/pathexpansion-completed.png index 873565b57f..289685090d 100644 Binary files a/docs/assets/tutorials/multiple/pathexpansion-completed.png and b/docs/assets/tutorials/multiple/pathexpansion-completed.png differ diff --git a/docs/assets/tutorials/multiple/pathexpansion-page.png b/docs/assets/tutorials/multiple/pathexpansion-page.png index ffd2152e02..39a3ad9189 100644 Binary files a/docs/assets/tutorials/multiple/pathexpansion-page.png and b/docs/assets/tutorials/multiple/pathexpansion-page.png differ diff --git a/docs/assets/tutorials/multiple/preview-page.png b/docs/assets/tutorials/multiple/preview-page.png index 861647edc8..8950697b00 100644 Binary files a/docs/assets/tutorials/multiple/preview-page.png and b/docs/assets/tutorials/multiple/preview-page.png differ diff --git a/docs/assets/tutorials/multiple/subject-complete.png b/docs/assets/tutorials/multiple/subject-complete.png index 1a5d4ed67a..76a5875e5e 100644 Binary files a/docs/assets/tutorials/multiple/subject-complete.png and b/docs/assets/tutorials/multiple/subject-complete.png differ diff --git a/docs/assets/tutorials/multiple/subject-error.png b/docs/assets/tutorials/multiple/subject-error.png index 6e2d60667c..9f2fa4c27d 100644 Binary files a/docs/assets/tutorials/multiple/subject-error.png and b/docs/assets/tutorials/multiple/subject-error.png differ diff --git a/docs/assets/tutorials/multiple/subject-invalid.png b/docs/assets/tutorials/multiple/subject-invalid.png index 39fe3da0a8..c8d3d8a366 100644 Binary files a/docs/assets/tutorials/multiple/subject-invalid.png and b/docs/assets/tutorials/multiple/subject-invalid.png differ diff --git a/docs/assets/tutorials/multiple/subject-page.png b/docs/assets/tutorials/multiple/subject-page.png index e5db16cf25..2d8828d735 100644 Binary files a/docs/assets/tutorials/multiple/subject-page.png and b/docs/assets/tutorials/multiple/subject-page.png differ diff --git a/docs/assets/tutorials/multiple/workflow-page.png b/docs/assets/tutorials/multiple/workflow-page.png index 6049565d4e..c5ca85f1bc 100644 Binary files a/docs/assets/tutorials/multiple/workflow-page.png and b/docs/assets/tutorials/multiple/workflow-page.png differ diff --git a/docs/assets/tutorials/single/conversion-results-page.png b/docs/assets/tutorials/single/conversion-results-page.png index cc30f9aced..bc8f2d0594 100644 Binary files a/docs/assets/tutorials/single/conversion-results-page.png and b/docs/assets/tutorials/single/conversion-results-page.png differ diff --git a/docs/assets/tutorials/single/home-page-complete.png b/docs/assets/tutorials/single/home-page-complete.png index 1a409e7295..4b4bd58f28 100644 Binary files a/docs/assets/tutorials/single/home-page-complete.png and b/docs/assets/tutorials/single/home-page-complete.png differ diff --git a/docs/assets/tutorials/single/inspect-page.png b/docs/assets/tutorials/single/inspect-page.png index 51a1e6c728..b9e7cdcec2 100644 Binary files a/docs/assets/tutorials/single/inspect-page.png and b/docs/assets/tutorials/single/inspect-page.png differ diff --git a/docs/assets/tutorials/single/metadata-ecephys.png b/docs/assets/tutorials/single/metadata-ecephys.png index f63bf9a403..0b71fe238c 100644 Binary files a/docs/assets/tutorials/single/metadata-ecephys.png and b/docs/assets/tutorials/single/metadata-ecephys.png differ diff --git a/docs/assets/tutorials/single/metadata-nwbfile.png b/docs/assets/tutorials/single/metadata-nwbfile.png index 8ef3ddb7b8..c77ffb5507 100644 Binary files a/docs/assets/tutorials/single/metadata-nwbfile.png and b/docs/assets/tutorials/single/metadata-nwbfile.png differ diff --git a/docs/assets/tutorials/single/preview-page.png b/docs/assets/tutorials/single/preview-page.png index fcd25df164..a0f316a462 100644 Binary files a/docs/assets/tutorials/single/preview-page.png and b/docs/assets/tutorials/single/preview-page.png differ diff --git a/docs/assets/tutorials/single/sourcedata-page-specified.png b/docs/assets/tutorials/single/sourcedata-page-specified.png index 3a5e509a15..be5de05379 100644 Binary files a/docs/assets/tutorials/single/sourcedata-page-specified.png and b/docs/assets/tutorials/single/sourcedata-page-specified.png differ diff --git a/docs/developer_guide.rst b/docs/developer_guide.rst index dd4988d745..65e12fcfaa 100644 --- a/docs/developer_guide.rst +++ b/docs/developer_guide.rst @@ -30,25 +30,40 @@ Install the appropriate Python dependencies for your operating system. .. code-block:: bash - conda env create -f ./environments/environment-Windows.yml + conda env create --file ./environments/environment-Windows.yml **Mac with x64 architecture** .. code-block:: bash - conda env create -f ./environments/environment-MAC-intel.yml + conda env create --file ./environments/environment-MAC-intel.yml **Mac with arm64 architecture** .. code-block:: bash - conda env create -f ./environments/environment-MAC-apple-silicon.yml + conda env create --file ./environments/environment-MAC-apple-silicon.yml **Linux** .. code-block:: bash - conda env create -f ./environments/environment-Linux.yml + conda env create --file ./environments/environment-Linux.yml + + +.. note:: + + The NWB GUIDE environment can be quite large. If your base folder for ``conda`` is on a small mounted partition, you may need to setup the environment elsewhere on your system. You can do this using: + + .. code-block:: bash + + conda env create --file ./environments/environment-< platform >.yml --prefix < explicit location to setup environment > + + For example, on a remote Linux server, this might look like: + + .. code-block:: bash + + conda env create --file ./environments/environment-Linux.yml --prefix /mnt/data/nwb-guide Activate the Python Environment @@ -60,6 +75,20 @@ Before starting NWB GUIDE, you'll need to ensure that the Python environment is conda activate nwb-guide +.. note:: + + If you had to use the ``--prefix`` flag in the previous step, then this becomes + + .. code-block:: bash + + conda activate < explicit location of environment > + + Such as, using the previous example: + + .. code-block:: bash + + conda activate /mnt/data/nwb-guide + Install JavaScript Dependencies ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -86,13 +115,13 @@ Repo Structure - `src` - `electron` - `main` - - `src` - Contains all the source code for the backend - - `assets` - Contains all the backend-facing assets (e.g. images, css, etc.) + - `application-menu.js` - Configures the application window + - `main.ts` - Configures the Python backend process - `preload` - `preload.js` - Exposes electron-specific variables to the frontend - `frontend` - `core` - Contains all the source code for the frontend - - `index.js` - The entry point for the application + - `index.ts` - The entry point for the application. Manages initial system and internet connection checks, and sets up auto-updating - `pages.js` - The main code that controls which pages are rendered and how they are linked together - `components` - Contains all the UI Components used throughout the app - `assets` - Contains all the frontend-facing assets (e.g. images, css, etc.) @@ -131,12 +160,12 @@ Starting a New Feature Adding a New Page ^^^^^^^^^^^^^^^^^ -New pages can be added by linking a component in the ``src/pages.js`` file. For example, if you wanted to -add a new page called ``NewPage``, you would add the following to the configuration file: +New pages can be added by linking a component in the ``src/electron/frontend/core/pages.js`` file. +For example, if you wanted to add a new page called ``NewPage``, you would add the following to the configuration file: .. code-block:: javascript - import NewPage from "./stories/pages/NewPage"; + import NewPage from "./components/pages/new_page/NewPage"; // ... @@ -144,34 +173,24 @@ add a new page called ``NewPage``, you would add the following to the configurat // ... - 'guided': new GuidedHomePage({ - label: "Guided Mode", - icon: guidedIcon, - pages: { - start: new GuidedStartPage({ - label: "Start", - }), + uploads: new UploadsPage({ + label: "Upload", + icon: uploadIcon, + }), - // ... - - newpage: new NewPage({ - label: "New Page", // This is the label that will be displayed in the sidebar - }), - - // ... - - }, - }) + newpage: new NewPage({ + label: "New Page", // This is the label that will be displayed in the sidebar + }), // ... - } + } // ... This will automatically add the new page to the sidebar. The page itself can be defined in the -``src/stories/pages/NewPage.js`` file. For example, if you wanted to add a new page that displays -a simple message, you could add the following to the ``src/stories/pages/NewPage.js`` file: +``./components/pages/new_page/NewPage.js`` file. For example, if you wanted to add a new page that displays +a simple message, you could add the following to the ``./components/pages/new_page/NewPage.js`` file: .. code-block:: javascript @@ -224,8 +243,9 @@ Updating Tutorial Screenshots ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Before a release, you'll want to update the tutorial screenshots to reflect the latest changes in the application. -#. To regenerate the dataset, you'll need to change ``regenerateTestData`` in the ``tests/e2e/config.ts`` to ``true``. -#. Run the End-to-End Tests locally using ``npm test:app``. +#. To regenerate the dataset, you'll need to change ``regenerateTestData`` in the ``tests/e2e/config.ts`` to ``true`` or delete the test dataset directory ``rm -rf ~/NWB_GUIDE/.test``. +#. Create a ``.env`` file with the following content: ``DANDI_STAGING_API_KEY={your_dandi_staging_api_key}`` where ``{your_dandi_staging_api_key}`` is your DANDI staging API key from https://gui-staging.dandiarchive.org. +#. Run the End-to-End Tests locally using ``npm test:tutorial``. - This will generate new screenshots in the ``docs/assets/tutorials`` directory. #. Review the new screenshots to ensure they are accurate. #. If the screenshots are accurate, commit them to the repository. Their paths should be consistent across runs—allowing the new versions to show up on the tutorial. diff --git a/docs/format_support.rst b/docs/format_support.rst index 0fe2c7b184..5c7ab9b519 100644 --- a/docs/format_support.rst +++ b/docs/format_support.rst @@ -1,5 +1,5 @@ Ecosystem Format Support -======================================= +======================== The following is a live record of all the supported formats in the NWB GUIDE and underlying ecosystem. .. raw:: html diff --git a/docs/tutorials/dataset_publication.rst b/docs/tutorials/dataset_publication.rst index fd99a2a209..db6de6bf22 100644 --- a/docs/tutorials/dataset_publication.rst +++ b/docs/tutorials/dataset_publication.rst @@ -1,7 +1,7 @@ Dataset Publication =================== -For this tutorial, we'll be adapting the previous :doc:`Multi-Session Tutorial ` to publish our data to the DANDI Archive. +For this tutorial, we'll publish the NWB files created in :doc:`Multi-Session Tutorial ` as a Dandiset on the DANDI Archive. This workflow works for any collection of NWB files (2.1+), whether they were created by NWB GUIDE or not. .. note:: Creating an account on DANDI requires approval from the archive administrators. Separate approval is required for both the main archive and the development server. diff --git a/environments/environment-Linux.yml b/environments/environment-Linux.yml index ea486f110c..b2e1b052a5 100644 --- a/environments/environment-Linux.yml +++ b/environments/environment-Linux.yml @@ -15,10 +15,10 @@ dependencies: - flask == 2.3.2 - flask-cors == 4.0.0 - flask_restx == 1.1.0 - - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@main#neuroconv[full] - - dandi >= 0.60.0 - - pytest == 7.4.0 - - pytest-cov == 4.1.0 - - scikit-learn == 1.4.0 - - tqdm_publisher >= 0.0.1 - - tzlocal >= 5.2 + # For stability, NeuroConv is pinned at a commit just prior to breaking SpikeInterface compatibility + - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@fa636458aa5c321f1c2c08f6e682b4a52d5a83f3#neuroconv[dandi,compressors,ecephys,ophys,behavior,text] + # For stability, pinning SpikeInterface to a version that works with NeuroConv and with tutorial generation + - spikeinterface == 0.100.5 + - scikit-learn == 1.4.0 # Tutorial data generation + - tqdm_publisher >= 0.0.1 # Progress bars + - tzlocal >= 5.2 # Frontend timezone handling diff --git a/environments/environment-MAC-apple-silicon.yml b/environments/environment-MAC-apple-silicon.yml index 39daf9452c..6445eff697 100644 --- a/environments/environment-MAC-apple-silicon.yml +++ b/environments/environment-MAC-apple-silicon.yml @@ -5,13 +5,13 @@ channels: dependencies: - python = 3.9.18 - nodejs = 18.16.1 + # Install these from conda-forge so that dependent packages get included in the distributable - numcodecs = 0.11.0 - - lxml = 4.9.3 # pypi build fails due to x64/arm64 mismatch so install from conda-forge - - pyedflib = 0.1.32 # pypi build fails due to x64/arm64 mismatch so install from conda-forge - - numpy # may have x64/arm64 mismatch issues so install from conda-forge - - pytables = 3.8 # pypi build fails on arm64 so install from conda-forge (used by neuroconv deps) - # install these from conda-forge so that dependent packages get included in the distributable - - jsonschema = 4.18.0 # installs jsonschema-specifications + - lxml = 4.9.3 # PyPI build fails due to x64/arm64 mismatch so install from conda-forge + - pyedflib = 0.1.32 # PyPI build fails due to x64/arm64 mismatch so install from conda-forge + - numpy # May have x64/arm64 mismatch issues so install from conda-forge + - pytables = 3.8 # PyPI build fails on arm64 so install from conda-forge (used by neuroconv deps) + - jsonschema = 4.18.0 # Also installs jsonschema-specifications - pip - pip: - setuptools==70.0.0 @@ -21,12 +21,12 @@ dependencies: - flask == 2.3.2 - flask-cors == 4.0.0 - flask_restx == 1.1.0 - # NOTE: the neuroconv wheel on pypi includes sonpy which is not compatible with arm64, so build and install - # neuroconv from github, which will remove the sonpy dependency when building from mac arm64 - - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@main#neuroconv[full] - - dandi >= 0.60.0 - - pytest == 7.4.0 - - pytest-cov == 4.1.0 - - scikit-learn == 1.4.0 - - tqdm_publisher >= 0.0.1 - - tzlocal >= 5.2 + # NOTE: the NeuroConv wheel on PyPI includes sonpy which is not compatible with arm64, so build and install + # NeuroConv from GitHub, which will remove the sonpy dependency when building from Mac arm64 + # For stability, NeuroConv is pinned at a commit just prior to breaking SpikeInterface compatibility + - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@fa636458aa5c321f1c2c08f6e682b4a52d5a83f3#neuroconv[dandi,compressors,ecephys,ophys,behavior,text] + # For stability, pinning SpikeInterface to a version that works with NeuroConv and with tutorial generation + - spikeinterface == 0.100.5 + - scikit-learn == 1.4.0 # Tutorial data generation + - tqdm_publisher >= 0.0.1 # Progress bars + - tzlocal >= 5.2 # Frontend timezone handling diff --git a/environments/environment-MAC-intel.yml b/environments/environment-MAC-intel.yml index 3cb9377672..4d915e6b52 100644 --- a/environments/environment-MAC-intel.yml +++ b/environments/environment-MAC-intel.yml @@ -18,10 +18,10 @@ dependencies: - flask == 2.3.2 - flask-cors == 4.0.0 - flask_restx == 1.1.0 - - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@main#neuroconv[full] - - dandi >= 0.60.0 - - pytest == 7.4.0 - - pytest-cov == 4.1.0 - - scikit-learn == 1.4.0 - - tqdm_publisher >= 0.0.1 - - tzlocal >= 5.2 + # For stability, NeuroConv is pinned at a commit just prior to breaking SpikeInterface compatibility + - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@fa636458aa5c321f1c2c08f6e682b4a52d5a83f3#neuroconv[dandi,compressors,ecephys,ophys,behavior,text] + # For stability, pinning SpikeInterface to a version that works with NeuroConv and with tutorial generation + - spikeinterface == 0.100.5 + - scikit-learn == 1.4.0 # Tutorial data generation + - tqdm_publisher >= 0.0.1 # Progress bars + - tzlocal >= 5.2 # Frontend timezone handling diff --git a/environments/environment-Windows.yml b/environments/environment-Windows.yml index 1cb6f2e23d..abb7c0a918 100644 --- a/environments/environment-Windows.yml +++ b/environments/environment-Windows.yml @@ -18,10 +18,10 @@ dependencies: - flask == 2.3.2 - flask-cors === 3.0.10 - flask_restx == 1.1.0 - - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@main#neuroconv[full] - - dandi >= 0.60.0 - - pytest == 7.2.2 - - pytest-cov == 4.1.0 - - scikit-learn == 1.4.0 - - tqdm_publisher >= 0.0.1 - - tzlocal >= 5.2 + # For stability, NeuroConv is pinned at a commit just prior to breaking SpikeInterface compatibility + - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@fa636458aa5c321f1c2c08f6e682b4a52d5a83f3#neuroconv[dandi,compressors,ecephys,ophys,behavior,text] + # For stability, pinning SpikeInterface to a version that works with NeuroConv and with tutorial generation + - spikeinterface == 0.100.5 + - scikit-learn == 1.4.0 # Tutorial data generation + - tqdm_publisher >= 0.0.1 # Progress bars + - tzlocal >= 5.2 # Frontend timezone handling diff --git a/nwb-guide.spec b/nwb-guide.spec index 0fb2d28f22..8d767edb04 100644 --- a/nwb-guide.spec +++ b/nwb-guide.spec @@ -39,6 +39,7 @@ modules_to_collect = [ 'ndx_pose', 'tzdata', 'elephant', + 'ScanImageTiffReader', ] for module_name in modules_to_collect: collection = collect_all(module_name) diff --git a/package-lock.json b/package-lock.json index e5bbb774e5..43a8bcb368 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nwb-guide", - "version": "1.0.0", + "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nwb-guide", - "version": "1.0.0", + "version": "1.0.2", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -25,7 +25,6 @@ "lit": "^2.6.1", "lottie-web": "^5.9.5", "notyf": "^3.9.0", - "puppeteer": "^21.7.0", "sweetalert2": "^11.6.13", "tippy.js": "^6.3.7", "url": "^0.11.3", @@ -48,6 +47,7 @@ "electron-vite": "^1.0.28", "jsdom": "^22.0.0", "prettier": "^2.3.2", + "puppeteer": "^22.15.0", "react": "^18.2.0", "react-dom": "^18.2.0", "storybook": "^7.6.10", @@ -111,6 +111,7 @@ }, "node_modules/@babel/code-frame": { "version": "7.23.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/highlight": "^7.23.4", @@ -124,6 +125,7 @@ "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, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -136,6 +138,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -150,6 +153,7 @@ "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, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -159,12 +163,14 @@ "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/@babel/code-frame/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -174,6 +180,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -552,6 +559,7 @@ }, "node_modules/@babel/highlight": { "version": "7.23.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -566,6 +574,7 @@ "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, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -578,6 +587,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -592,6 +602,7 @@ "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, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -601,12 +612,14 @@ "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/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -616,6 +629,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -3474,24 +3488,37 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz", - "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==", - "license": "Apache-2.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", + "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", + "dev": true, "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.3.1", - "tar-fs": "3.0.4", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "debug": "^4.3.5", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=16.3.0" + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@radix-ui/number": { @@ -5660,7 +5687,7 @@ "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "license": "MIT" + "dev": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -6686,6 +6713,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, "node_modules/aria-hidden": { @@ -6914,7 +6942,7 @@ "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "license": "MIT", + "dev": true, "dependencies": { "tslib": "^2.0.1" }, @@ -7085,7 +7113,7 @@ "version": "1.6.6", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "license": "Apache-2.0" + "dev": true }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", @@ -7176,6 +7204,52 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "dev": true, + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", + "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", + "dev": true, + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", + "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", + "dev": true, + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "dev": true, + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", + "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", + "dev": true, + "optional": true, + "dependencies": { + "streamx": "^2.18.0" + } + }, "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", @@ -7227,8 +7301,10 @@ "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.0.4", - "license": "MIT", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, "engines": { "node": ">=10.0.0" } @@ -7781,6 +7857,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7921,13 +7998,14 @@ } }, "node_modules/chromium-bidi": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.8.tgz", - "integrity": "sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==", - "license": "Apache-2.0", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", + "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", + "dev": true, "dependencies": { "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0" + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" @@ -8623,6 +8701,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -8656,15 +8735,6 @@ "buffer": "^5.1.0" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8760,8 +8830,10 @@ "integrity": "sha512-SiPqaFl7M/MYhWRdZQuAHu/8jgcgZYTMDg3X0IbplCyvWVO+yPVTCZmkY1PX2hPrz3hIkCgNVmYlL6IzNlBq2Q==" }, "node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "license": "MIT", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, "engines": { "node": ">= 14" } @@ -8807,10 +8879,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -9037,7 +9108,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "license": "MIT", + "dev": true, "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -9177,10 +9248,10 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1232444", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1232444.tgz", - "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==", - "license": "BSD-3-Clause" + "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": "1.0.8", @@ -10342,7 +10413,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", + "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -10363,6 +10434,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -10376,7 +10448,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", + "dev": true, "engines": { "node": ">=4.0" } @@ -10392,6 +10464,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -10799,7 +10872,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "license": "MIT" + "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", @@ -11915,48 +11988,32 @@ } }, "node_modules/get-uri": { - "version": "6.0.2", - "license": "MIT", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "dev": true, "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" }, "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "license": "MIT", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "node": ">=14.14" } }, "node_modules/get-value": { @@ -14492,6 +14549,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -14508,6 +14566,7 @@ "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, "license": "MIT", "engines": { "node": ">=4" @@ -14619,8 +14678,22 @@ }, "node_modules/ip": { "version": "2.0.0", + "dev": true, "license": "MIT" }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/ip-regex": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", @@ -15406,12 +15479,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -15420,6 +15495,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jscodeshift": { "version": "0.15.1", "dev": true, @@ -15536,6 +15617,7 @@ "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, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -15815,6 +15897,7 @@ "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, "license": "MIT" }, "node_modules/lit": { @@ -16746,7 +16829,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "license": "MIT" + "dev": true }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -16777,6 +16860,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, "license": "MIT" }, "node_modules/mlly": { @@ -16921,7 +17005,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "license": "MIT", + "dev": true, "engines": { "node": ">= 0.4.0" } @@ -17689,27 +17773,29 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", - "license": "MIT", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "dev": true, "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "license": "MIT", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, "dependencies": { "debug": "^4.3.4" }, @@ -17718,8 +17804,10 @@ } }, "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "license": "MIT", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -17729,8 +17817,10 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "license": "MIT", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -17740,21 +17830,18 @@ } }, "node_modules/pac-resolver": { - "version": "7.0.0", - "license": "MIT", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { "node": ">= 14" } }, - "node_modules/pac-resolver/node_modules/ip": { - "version": "1.1.8", - "license": "MIT" - }, "node_modules/pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", @@ -17766,6 +17853,7 @@ "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, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -17817,6 +17905,7 @@ "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, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -18317,15 +18406,15 @@ } }, "node_modules/proxy-agent": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", - "license": "MIT", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "dev": true, "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", @@ -18336,8 +18425,10 @@ } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "license": "MIT", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, "dependencies": { "debug": "^4.3.4" }, @@ -18346,8 +18437,10 @@ } }, "node_modules/proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "license": "MIT", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -18357,8 +18450,10 @@ } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "license": "MIT", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -18371,7 +18466,7 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "license": "ISC", + "dev": true, "engines": { "node": ">=12" } @@ -18380,6 +18475,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, "license": "MIT" }, "node_modules/prr": { @@ -18438,38 +18534,38 @@ } }, "node_modules/puppeteer": { - "version": "21.11.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.11.0.tgz", - "integrity": "sha512-9jTHuYe22TD3sNxy0nEIzC7ZrlRnDgeX3xPkbS7PnbdwYjl2o/z/YuCrRBwezdKpbTDTJ4VqIggzNyeRcKq3cg==", + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.15.0.tgz", + "integrity": "sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==", + "dev": true, "hasInstallScript": true, - "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "1.9.1", - "cosmiconfig": "9.0.0", - "puppeteer-core": "21.11.0" + "@puppeteer/browsers": "2.3.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1312386", + "puppeteer-core": "22.15.0" }, "bin": { "puppeteer": "lib/esm/puppeteer/node/cli.js" }, "engines": { - "node": ">=16.13.2" + "node": ">=18" } }, "node_modules/puppeteer-core": { - "version": "21.11.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.11.0.tgz", - "integrity": "sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==", - "license": "Apache-2.0", + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", + "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", + "dev": true, "dependencies": { - "@puppeteer/browsers": "1.9.1", - "chromium-bidi": "0.5.8", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1232444", - "ws": "8.16.0" + "@puppeteer/browsers": "2.3.0", + "chromium-bidi": "0.6.3", + "debug": "^4.3.6", + "devtools-protocol": "0.0.1312386", + "ws": "^8.18.0" }, "engines": { - "node": ">=16.13.2" + "node": ">=18" } }, "node_modules/qs": { @@ -18516,7 +18612,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "license": "MIT" + "dev": true }, "node_modules/quick-lru": { "version": "5.1.1", @@ -20025,6 +20121,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -20171,32 +20268,38 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "license": "MIT", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "license": "MIT", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "license": "MIT", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, "dependencies": { "debug": "^4.3.4" }, @@ -20321,8 +20424,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause", - "optional": true + "devOptional": true, + "license": "BSD-3-Clause" }, "node_modules/stack-trace": { "version": "0.0.10", @@ -20437,11 +20540,17 @@ "license": "MIT" }, "node_modules/streamx": { - "version": "2.15.7", - "license": "MIT", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "dev": true, "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -20678,21 +20787,24 @@ } }, "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "license": "MIT", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "dev": true, "dependencies": { - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, "node_modules/tar-stream": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "license": "MIT", + "dev": true, "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -20941,6 +21053,15 @@ "node": "*" } }, + "node_modules/text-decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", + "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/textextensions": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz", @@ -21359,7 +21480,7 @@ }, "node_modules/typescript": { "version": "5.3.3", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -21390,7 +21511,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "license": "MIT", + "dev": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -21783,7 +21904,7 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "license": "MIT" + "dev": true }, "node_modules/use": { "version": "3.1.1", @@ -22873,10 +22994,10 @@ } }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "license": "MIT", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "devOptional": true, "engines": { "node": ">=10.0.0" }, @@ -23064,6 +23185,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index 99980322ed..f2c0a165ed 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nwb-guide", "productName": "NWB GUIDE", - "version": "1.0.2", + "version": "1.0.3", "description": "NWB GUIDE is a desktop app that provides a no-code user interface for converting neurophysiology data to NWB.", "main": "./build/main/index.js", "engine": { @@ -22,18 +22,17 @@ "build:electron:mac": "electron-builder build --mac --publish never", "build:electron:linux": "electron-builder build --linux --publish never", "test": "npm run test:app && npm run test:server", - "test:app": "vitest run --exclude \"**/pipelines.test.ts\"", - "test:app:covered": "vitest run --exclude \"**/e2e/*.test.ts\"", + "test:app": "vitest run --exclude \"**/e2e/*.test.ts\"", "test:tutorial": "vitest tutorial", "test:pipelines": "vitest pipelines", "test:progress": "vitest progress", "test:metadata": "vitest metadata", - "test:coverage:minimal": "npm run test:app:covered && npm run coverage:server", "test:server": "pytest src/pyflask/tests/ -s -vv", "wait5s": "node -e \"setTimeout(() => process.exit(0),5000)\"", "test:executable": "concurrently -n EXE,TEST --kill-others --success first \"node tests/testPyinstallerExecutable.js --port 3434 --forever\" \"npm run wait5s && pytest src/pyflask/tests/ -s --target http://localhost:3434\"", "test:coverage": "npm run coverage:app && npm run coverage:server", "coverage:app": "npm run test:app -- --coverage", + "coverage:tutorial": "npm run test:tutorial -- --coverage", "coverage:server": "pytest src/pyflask/tests/ -s --cov=pyflask --cov-report=xml", "deploy:win": "npm run build && npm run build:flask && npm run deploy:electron:win", "deploy:mac": "npm run build && npm run build:flask && npm run deploy:electron:mac", @@ -156,7 +155,6 @@ "lit": "^2.6.1", "lottie-web": "^5.9.5", "notyf": "^3.9.0", - "puppeteer": "^21.7.0", "sweetalert2": "^11.6.13", "tippy.js": "^6.3.7", "url": "^0.11.3", @@ -179,6 +177,7 @@ "electron-vite": "^1.0.28", "jsdom": "^22.0.0", "prettier": "^2.3.2", + "puppeteer": "^22.15.0", "react": "^18.2.0", "react-dom": "^18.2.0", "storybook": "^7.6.10", diff --git a/src/electron/frontend/assets/css/guided.css b/src/electron/frontend/assets/css/guided.css index 441ae3c861..86a67c6654 100644 --- a/src/electron/frontend/assets/css/guided.css +++ b/src/electron/frontend/assets/css/guided.css @@ -463,13 +463,6 @@ flex-grow: 1; } -.guided--container-permissions { - width: 800px; - display: flex; - flex-direction: row; - align-items: center; -} - .guided--container-data-display { display: flex; width: 90%; @@ -1345,122 +1338,6 @@ h1.guided--text-sub-step { } } -.asideContainer { - border: 2px solid lightgray; -} - -.asideTitleContainer { - padding-top: 0; - border-radius: 0; - border: none; - border-right: 2px solid lightgray; -} - -.asideTitle { - background: lightgray; - padding: 12px 0 15px 0; - border-radius: 0; -} - .border-styling { border: 2px solid lightgray; } - -.before-getting-started-btn { - margin-bottom: 1.5rem; -} -.lds-roller { - display: inline-block; - position: relative; - width: 80px; - height: 80px; -} -.lds-roller div { - animation: lds-roller 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; - transform-origin: 40px 40px; -} -.lds-roller div:after { - content: " "; - display: block; - position: absolute; - width: 7px; - height: 7px; - border-radius: 50%; - background: var(--color-light-green); - margin: -4px 0 0 -4px; -} -.lds-roller div:nth-child(1) { - animation-delay: -0.036s; -} -.lds-roller div:nth-child(1):after { - top: 63px; - left: 63px; -} -.lds-roller div:nth-child(2) { - animation-delay: -0.072s; -} -.lds-roller div:nth-child(2):after { - top: 68px; - left: 56px; -} -.lds-roller div:nth-child(3) { - animation-delay: -0.108s; -} -.lds-roller div:nth-child(3):after { - top: 71px; - left: 48px; -} -.lds-roller div:nth-child(4) { - animation-delay: -0.144s; -} -.lds-roller div:nth-child(4):after { - top: 72px; - left: 40px; -} -.lds-roller div:nth-child(5) { - animation-delay: -0.18s; -} -.lds-roller div:nth-child(5):after { - top: 71px; - left: 32px; -} -.lds-roller div:nth-child(6) { - animation-delay: -0.216s; -} -.lds-roller div:nth-child(6):after { - top: 68px; - left: 24px; -} -.lds-roller div:nth-child(7) { - animation-delay: -0.252s; -} -.lds-roller div:nth-child(7):after { - top: 63px; - left: 17px; -} -.lds-roller div:nth-child(8) { - animation-delay: -0.288s; -} -.lds-roller div:nth-child(8):after { - top: 56px; - left: 12px; -} -@keyframes lds-roller { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -.tippy-box[data-theme~="soda"] { - background-color: #13716d; - color: white; - /* white-space: nowrap; */ - /* overflow: hidden; */ -} - -.tippy-box[data-theme~="soda"][data-placement^="top"] > .tippy-arrow::before { - border-top-color: #13716d; -} diff --git a/src/electron/frontend/assets/css/individualtab.css b/src/electron/frontend/assets/css/individualtab.css index 56f38c4c4a..1b68e07108 100644 --- a/src/electron/frontend/assets/css/individualtab.css +++ b/src/electron/frontend/assets/css/individualtab.css @@ -1206,13 +1206,6 @@ .card-right.bf-account-span, .card-right.bf-account-details-span, .card-right.bf-dataset-span, -.card-right.current-permissions { - width: auto; - margin-left: 5px; - margin-top: 0px; - padding-left: 5px; -} - .card-container.manage-dataset .card-right.bf-dataset-span { width: fit-content; } diff --git a/src/electron/frontend/assets/css/main.css b/src/electron/frontend/assets/css/main.css index 2ae4d3e737..e1d791579e 100644 --- a/src/electron/frontend/assets/css/main.css +++ b/src/electron/frontend/assets/css/main.css @@ -72,28 +72,6 @@ button:focus { justify-content: space-between; } -.update-file:before { - opacity: 0.5; -} - -.update-file:after { - content: "\f24d"; - position: absolute; - top: 42px; - right: 24px; - color: var(--color-bg-plum); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - .input-name { color: black; align-self: center; @@ -272,33 +250,6 @@ button[disabled] { color: white !important; } -button[data-id="bf_list_users"], -button[data-id="bf_list_roles_user"], -button[data-id="bf_list_teams"], -button[data-id="bf_list_roles_team"] { - border: 1px solid rgba(34, 36, 38, 0.15); - border-radius: 7px; - width: 90% !important; -} -button[data-id="guided-sparc-award-dropdown"], -button[data-id="bf_list_users_pi"], -button[data-id="guided_bf_list_users_pi"], -button[data-id="guided_bf_list_users_and_teams"] { - border: 1px solid rgba(34, 36, 38, 0.15); - border-radius: 7px; - height: 35px; -} - -#pi_bootstrap_select_div > .dropdown.bootstrap-select { - width: 550px; -} - -#guided_sparc_award_bootstrap_select_div > .dropdown.bootstrap-select, -#guided_pi_bootstrap_select_div > .dropdown.bootstrap-select, -#guided_permissions_select_div > .dropdown.bootstrap-select { - width: 100%; -} - .sidebar { background-color: var(--color-teal); height: 100%; @@ -466,136 +417,6 @@ button[data-id="guided_bf_list_users_and_teams"] { color: #404040; } -.hoverPath { - width: auto; - min-height: auto; - background-color: #f4f4f4; - color: #333; - border: 1px solid #aaa; - /* box-shadow: 2px 2px 2px #999; */ - border-radius: 3px; - position: fixed; - padding: 5px 5px; - font-size: 12px; - z-index: 5; - overflow: hidden; -} - -.hoverFullName { - max-width: auto; - min-height: auto; - background-color: #f4f4f4; - color: #333; - border: 1px solid #aaa; - border-radius: 3px; - position: absolute; - padding: 5px 5px; - font-size: 12px; - z-index: 1000; -} - -.single-item { - display: inline-block; - text-align: center; - width: 120px; - height: 100px; - position: relative !important; - margin-right: 5px; - margin-top: 5px; - padding: 10px 0px 10px 0px; -} - -.single-item.selected-item:hover { - border: #c0c0c0; - background-color: #d8d7d7; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.single-item.selected-item:focus { - border: #c0c0c0; - background-color: #eeeaea; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -@-o-keyframes fadeIt { - 0% { - background-color: #ffffff; - } - - 50% { - background-color: #85ceff; - } - - 100% { - background-color: #ffffff; - } -} - -@keyframes fadeIt { - 0% { - background-color: #ffffff; - } - - 50% { - background-color: #85ceff; - } - - 100% { - background-color: #ffffff; - } -} - -.backgroundAnimate { - background-image: none !important; - -o-animation: fadeIt 3s ease-in-out; - animation: fadeIt 3s ease-in-out; -} - -.ds-selected { - border: #c0c0c0; - background-color: #eeeaea; - /* transform: translateY(-6px); */ -} - -.single-item:active { - transform: all 3s; - -webkit-transform: all 3s; -} - -/*Pre publishing submission flow file viewer uses .single-item but allows a user to select a file UI element. - When the element is selected it adds styling. This sets it up to ignore the hover effect styling once selected. -*/ -.single-item:not(.pre-publishing-file-viewer-file-selected):hover { - border: #c0c0c0; - background-color: #f5f5f5; - transition: all 0.15s linear; - -webkit-transition: all 0.15s linear; -} - -.single-item:hover + #myspan { - display: block; -} - -.folder_desc { - text-align: center; - font-size: 13px; - width: 110px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - user-select: none; - -webkit-user-select: none; - padding: 0px 4px 0px 4px; - /* word-wrap: break-word; */ - line-height: 1.5; - margin-right: 5px; - margin-left: 5px; - color: black; - pointer-events: none; -} - .blue { color: rgb(255, 165, 0, 0.8); } @@ -608,1170 +429,95 @@ button[data-id="guided_bf_list_users_and_teams"] { padding: 5px; } -.btn.btn-success:hover { - border: 5px solid #3b5998; - box-shadow: 0 0 5px #3b5998; - transition: all 0.5s ease; -} - -.button-back { - color: #666666; - background-color: #fff; - border: 1px solid #666666; - border-radius: 5px; - height: 35px; - width: 40px; - font-size: 14px; - background-position: center; - transition: background 0.8s; -} - -.button-back:hover { - box-shadow: 0 0 3px 0px #666666; -} - -.button-back:active { - transform: translateY(-4px); -} - -.button-back:focus { - outline: none; -} - -.myButton { - margin-right: 3px; - font-size: 13px; - font-weight: 600; - color: #fff; - background-color: #bf3062; - border: 1px solid transparent; - border-radius: 5px; - cursor: pointer; - height: 35px; - width: 110px; - box-shadow: 0 0 2px #999; - background-position: center; - transition: background 0.8s; -} - -.myButton.second { - background-color: #bf3062; - color: #fff; -} - -.myButton:hover { - background: var(--color-teal) radial-gradient(circle, transparent 1%, var(--color-teal) 1%) center/15000%; - color: white; - box-shadow: 0 0 5px #3b5998; - transition: all 0.5s ease; -} - -.myButton:active { - background-color: #292d3e; - background-size: 100%; - transition: background 0s; - transform: translateY(-3px); -} - -.myButton:focus { - outline: none; -} - -.myButton.second:hover { - background: var(--color-teal) radial-gradient(circle, transparent 1%, var(--color-teal) 1%) center/15000%; - color: #fff; - box-shadow: 0 0 5px #3b5998; - transition: all 0.5s ease; -} - -.confirmButton { - left: 89%; - top: 93%; - position: absolute; - font-family: "Montserrat", sans-serif; - width: 190px; - font-size: 14px; - font-weight: 600; - color: var(--color-light-green); - background-color: #fff; - border: 2px solid var(--color-light-green); - margin: 0 0; - height: 35px; - cursor: pointer; - border-radius: 5px; - background: linear-gradient(to left, #fff 50%, var(--color-light-green) 50%) right; - background-size: 200%; - transition: 0.5s ease-out; -} - -.confirmButton:hover { - color: #fff; - background-position: left; -} - -.confirmButton:active { - background-size: 100%; - transform: translateY(-3px); -} - -.confirmButton:focus { - outline: none; -} - -.div-organize-generate-dataset { - text-align: center; - min-width: 450px; - margin-top: 20px; - display: flex; - flex-direction: column; - justify-content: center; -} - -.div-organize-generate-dataset.metadata { - justify-content: space-around; - flex-wrap: wrap; - /* margin-top: 50px !important; */ - margin: 0 auto; -} - -.div-organize-generate-dataset.metadata.hide { - display: none; -} - -.div-organize-generate-dataset.metadata button { - width: 150px; - height: 155px; -} - -.div-organize-generate-dataset.metadata i { - color: var(--tagify-dd-color-primary) !important; - font-size: 50px !important; -} - -.div-organize-generate-dataset.metadata p { - /* color: orange; */ - font-size: 13px; - margin-top: 20px !important; -} - -.content-header.metadata-step4 { - font-weight: 600; - color: #000; +details > summary { + list-style-type: none; } -.div-file-import.pennsieve { +details > summary::-webkit-details-marker { display: none; } -.flex-row-container.code-metadata { - display: none; +details > summary::before { + content: url("data:image/svg+xml,%3Csvg style='transform: scale(0.2);' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z'/%3E%3C/svg%3E"); } -.div-individual-metadata { - display: none; +details[open] > summary::before { + content: none; } -.div-individual-metadata.show { +.documentation_container { display: flex; + justify-content: center; + align-items: center; flex-direction: column; - margin: 30px auto; -} - -.button-generate-dataset { - width: 200px; - height: 200px; - border: none; - background-color: #fff; - font-size: 13px; - font-weight: 600; - border-radius: 5px; - padding-top: 0; - padding-bottom: 5px; - padding-right: 20px; - padding-left: 20px; - margin-right: 30px; - color: var(--color-teal); - opacity: 1; - position: relative; - box-shadow: 0px 0px 10px #d5d5d5; -} - -.button-generate-dataset:hover { - outline: none; - /* border: 1px solid var(--color-light-green); */ - box-shadow: 0px 0px 10px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.button-generate-dataset:active, -.button-generate-dataset:focus { - outline: none; - border: 1px solid var(--color-light-green); - box-shadow: 0px 0px 3px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; + width: 100%; + height: 100%; + max-height: 1000px; } -.button-generate-dataset p { - color: #000; - font-weight: 500; - font-size: 14px; - line-height: 1.5; +.document_container { + overflow-y: auto; + justify-content: center; + width: 100%; + height: 100%; + display: flex; } -.button-generate-dataset svg { - margin: 0 auto; +.doc_container { + padding-right: 1.25rem; + padding-top: 0.5rem; + justify-content: center; + align-items: center; + padding: 0.75rem; + flex-direction: column; + max-width: 1024px; + width: 100%; + height: 100%; + display: flex; } -.button-generate-dataset .bi.bi-file-earmark-plus { - display: block; +.dc_con { + flex-direction: column; + width: 100%; + height: 100%; + display: flex; } -.button-generate-dataset .bi.bi-check2 { - display: none; +.doc_header { + font-weight: 700; + font-size: 1.875rem !important; + line-height: 2.25rem; + padding-bottom: 0.25rem; + margin: 0; } -.drag-drop-container-instructions { - display: flex; - flex-direction: column; +.document-content { align-items: center; + flex-direction: column; width: 100%; - padding: 25px; - opacity: 0.55; -} - -.file-templates-button { - width: 160px; - height: 160px; - border: none; - background-color: #fff; - font-size: 13px; - font-weight: 600; - border-radius: 5px; - padding-top: 5px; - padding-bottom: 5px; - padding-right: 20px; - padding-left: 20px; - margin-right: 30px; - color: var(--color-teal); - opacity: 1; - position: relative; - box-shadow: 0px 0px 10px #d5d5d5; + height: 40%; display: flex; - flex-direction: column; justify-content: center; - align-items: center; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.file-templates-button svg { - margin: 0 auto; - fill: var(--tagify-dd-color-primary); - width: 45px; - height: 45px; - pointer-events: none; -} - -.file-templates-button:hover { - outline: none; - box-shadow: 0px 0px 10px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.file-templates-button:active { - border: 1px solid var(--color-light-green); - box-shadow: 0px 0px 3px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.metadata-button.button-generate-dataset.code-metadata { - display: none; -} - -.metadata-button.button-generate-dataset.done { - border: 1px solid var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.metadata-button.button-generate-dataset.done p { - color: var(--color-light-green); - font-weight: 600; -} - -.metadata-button.button-generate-dataset.done .bi.bi-file-earmark-plus { - display: none; -} - -.metadata-button.button-generate-dataset.done .bi.bi-check2 { - color: var(--color-light-green); - display: block !important; - margin: 0 auto; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.form-group.row { - margin-bottom: 10px; - margin-left: 5px; -} - -.folder_desc.pennsieve_folder:after { - content: "\f0c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.pennsieve_folder_deleted { - color: rgba(0, 0, 0, 0.5); } -.folder_desc.local_folder:after { - content: "\f7c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; +.button_container_contact { + display: flex; + justify-content: center; + margin-bottom: 3rem; } -.local_folder_deleted { - color: rgba(0, 0, 0, 0.5); +.docu-content-container { + padding-top: 1rem; + margin-bottom: 1rem; + display: flex; + flex-direction: column; + justify-content: center; } -.folder_desc.pennsieve_folder_deleted:after { - content: "\f0c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.local_folder_deleted:after { - content: "\f7c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.pennsieve_file:after { - content: "\f0c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.local_file:after { - content: "\f7c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.pennsieve_file_deleted { - color: rgba(0, 0, 0, 0.5); -} - -.local_file_deleted { - color: rgba(0, 0, 0, 0.5); -} - -.folder_desc.pennsieve_file_deleted:after { - content: "\f0c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.local_file_deleted:after { - content: "\f7c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.menu-toggle { - transition: transform 1s ease-in-out !important; -} - -.step-dot { - height: 12px; - width: 12px; - background-color: #bbb; - border-radius: 50%; - display: inline-block; - /* visibility: hidden; */ -} - -.step-dot.active { - box-shadow: 0 0 5px #3b5998; - background-color: var(--color-teal); -} - -#metadata_progress { - width: 100%; - height: 100%; - overflow: hidden; - margin: 0px auto; - position: relative; - /* background: url('http://www.csslab.cl/ejemplos/timelinr/latest/images/dot.gif') 3px top repeat-y; */ -} - -#metadata-content { - max-width: 100%; - height: auto; - overflow: hidden; - margin: 10px auto; - /* float:left */ - padding: 0; -} - -#metadata-content h1 { - font-size: 16px; - text-align: center; - padding-top: 30px; -} - -#metadata-content li { - list-style: none; - text-align: center; - display: none; - min-height: 260px; - max-width: 240px; - border: 1px dashed #3d3d3d !important; - margin: 20px auto; - border-radius: 5px; -} - -#metadata-content li i { - color: #c0c0c0; -} - -#metadata-content li p { - font-size: 23px; - margin: 0; -} - -#metadata-content li button { - width: 90px; - height: 25px; - background: #fff; - color: var(--color-light-green); - border: 1px solid var(--color-light-green); - border-radius: 3px; - box-shadow: 0 0 3px 0 var(--color-light-green); - margin: 0 auto; - cursor: pointer; -} - -#metadata-content li.selected { - list-style: none; - text-align: center; - display: block; -} - -.folder-upload-div { - list-style: none; - text-align: center; - width: 200px; - height: 210px; - border: 1px dashed #c0c0c0; - background-color: #fff; - font-size: 13px; - font-weight: 600; - border-radius: 5px; - padding: 5px 10px; - margin: 0 auto; - color: var(--color-teal); - opacity: 1; - position: relative; -} - -.folder-upload-div button { - width: 100px; - height: 25px; - background: #fff; - color: var(--color-light-green); - border: 1px solid var(--color-light-green); - border-radius: 3px; - box-shadow: 0 0 3px 0 var(--color-light-green); - margin: 0 auto; - cursor: pointer; -} - -.folder-upload-div p { - margin: 5px auto; - font-size: 16px; - opacity: 0.7; - color: #000; -} - -.progress-box { - float: left; - height: 25px; - width: 25px; - margin-bottom: 10px; - margin-right: 10px; - border: 1px solid transparent; - clear: both; - font-size: 13px; - border-radius: 3px; - color: #9e9e9e; - text-align: center; - background: #e0e0e0; -} - -.progress-box span { - color: #333333; -} - -.progress-box.checked { - content: "\2713"; - background: var(--color-light-green); - color: #fff; - text-align: center; - border-color: var(--color-light-green); -} - -.progress-box.checked span { - opacity: 1; - color: var(--color-light-green); -} - -.metadata-progress-box { - padding-top: 20px; - width: 100%; - border-bottom: 1px solid #e0e0e0; - display: flex; - flex-direction: row; - justify-content: space-between; -} - -.metadata-progress-box span { - color: #000; - font-weight: 600; - font-size: 13px; - opacity: 0.5; -} - -.div-display-details { - position: absolute; - width: 350px; - height: auto; - bottom: 70px; - right: 0; - bottom: 70px; - border-radius: 10px 0 0 10px; - border: 1px solid #f0f0f0; - background: #f5f5f5; - color: #000; - padding: 20px; - line-height: 1.5; - float: right; - transform: translateX(350px); - transition: transform 1.4s ease-in-out; - display: none; - grid-template-rows: auto; - text-align: center; - overflow-wrap: break-word; - z-index: 10; -} - -.div-display-details div { - max-width: 90%; - margin-right: 10px; - margin-left: 10px; - overflow-x: auto; -} - -.div-display-details.folders { - grid-template-rows: 50% 50%; -} - -.div-display-details p { - font-family: inherit; - margin-top: 25px; - margin-bottom: 5px; - font-size: 13px; -} - -.div-display-details textarea { - font-family: inherit; - max-height: 60px; - overflow-y: scroll; - resize: vertical; - width: 100%; - margin-top: 10px; -} - -.div-display-details.show { - transform: translateX(0); - display: grid; -} - -.button-display-details { - position: absolute; - top: 10px; - left: 10px; - width: 25px; - height: 25px; - opacity: 0.8; - background: var(--color-bg-plum); - color: #fff; - border-radius: 50%; - border: 1px solid var(--color-bg-plum); - cursor: pointer; - box-shadow: 0 0 3px 0 var(--color-bg-plum); -} - -#div-manifest-edit { - margin-top: 20px; - max-height: 70vh; - overflow-y: scroll; -} - -.sparc-logo { - margin: 5px; - position: absolute; - margin-left: 39px; - width: 146px; - padding-left: 6px; - bottom: 0; -} - -#items_container { - display: flex; - justify-content: center; - margin: 10px; -} - -#items_loading_container { - position: absolute; - top: 50%; - left: 50%; - z-index: 9999; - margin: 10px; - display: none; -} - -#item_load { - color: rgb(78, 166, 255); -} - -.loading-items-background { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 9999; - background-color: darkgray; - opacity: 0.5; - display: flex; - justify-content: center; -} - -details > summary { - list-style-type: none; -} - -details > summary::-webkit-details-marker { - display: none; -} - -details > summary::before { - content: url("data:image/svg+xml,%3Csvg style='transform: scale(0.2);' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z'/%3E%3C/svg%3E"); -} - -details[open] > summary::before { - content: none; -} - -.info-container { - align-self: center; - width: 573px; - margin-top: 1rem; -} - -.info-container-wrapper { - position: relative; - max-width: 95%; - margin-top: 1rem; - margin: 0 auto; - font-size: smaller; - color: #666666; -} - -.info-summary { - margin: 0; - font-size: unset; - font-weight: unset; - position: relative; - display: block; - padding: 0.5em 1.5em; - line-height: 1.5; - text-align: left; - border: none; - color: inherit; - background-color: transparent; - transition: border-color 0.12s; - outline: none; - border-color: #f8f8f9; -} - -.info-summary:before { - top: 0; - transform-origin: bottom center; - transform: translateX(0.7em) rotate(-30deg) scale(0.5); - content: ""; - position: absolute; - left: 0; - width: 2px; - height: 50%; - background-color: hsl(0, 0%, 88%); - transition: transform 0.2s cubic-bezier(0.4, 0.1, 0, 1); -} - -.info-summary:after { - bottom: 0; - transform-origin: top center; - transform: translateX(0.7em) rotate(30deg) scale(0.5); -} - -.is-open .info-summary:before, -.is-open .info-summary:after { - transform: rotate(0deg); - transform: scale(0.7); -} - -.details-box { - display: none; - position: relative; - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1); - padding: 2em; - margin-top: 1rem; - margin-bottom: 2rem; - border-radius: 0.4rem; - background-color: #f8f8f9; - border-color: #f8f8f9; -} - -.is-open .details-box { - display: block; - animation: demo-box-fade-in 0.2s cubic-bezier(0, 0.2, 0.2, 0.96); -} - -.overview-column { - display: flex; - margin: 15px; - border: solid; - border-color: #f2f2f2; - height: 95% !important; - border-radius: 2rem; - align-items: center; - border-width: 1px !important; - justify-content: center; - flex-direction: column; - text-align: center; - padding: 1.5rem; - --tw-border-opacity: 1; - border-color: rgb(244 244 245 / var(--tw-border-opacity)); - --tw-shadow-color: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - --tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.getting-started { - width: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.overview-card-layout { - display: grid; - color: black; - padding-left: 2rem; - padding-right: 2rem; - grid-template-columns: repeat(3, minmax(0, 1fr)); - width: 100%; - height: 60% !important; - max-width: 1000px; - place-self: center; -} - -.overview-lottie { - height: 100%; -} - -.getting-started-buttons { - display: flex; - justify-content: center; - height: 50% !important; - margin-top: 25px; -} - -.about-title { - font-size: 17px; - font-weight: 700; - color: var(--color-bg-plum) !important; - margin-bottom: 0; -} - -.about-container { - border-radius: 0.5rem; - margin-top: 7px; - display: flex; - flex-direction: column; - align-items: center; - width: 550px; - margin-bottom: 3rem; - align-self: center; -} - -.about-text { - color: dimgray !important; - text-align: justify; - font-size: 1rem !important; - font-weight: 500 !important; -} - -.tip-content { - text-align: justify; - color: #898989 !important; - font-size: 12px; - font-weight: 700; -} - -.sodaVideo-button { - display: flex; - background: white; - width: 14rem; - justify-content: center; - justify-self: center; - border-radius: 0.25rem; - align-items: center; - height: 3.5rem; - margin-right: 1rem; - color: #666666; - border-width: 1px; - border-color: var(--color-accent) !important; -} - -.sodaVideo-button:hover { - box-shadow: 0 0 6px #b0b0b0; -} - -.direct-to-doc-btn:hover { - box-shadow: 0 0 6px #b0b0b0; -} - -.getting-started-btn:hover { - box-shadow: 0 0 6px #b0b0b0; -} - -.direct-to-doc-btn { - color: #666666; - display: flex; - background: white; - font-weight: bold; - line-height: 1rem; - font-size: 1rem; - width: 18rem !important; - height: 3.5rem; - margin-right: 1rem; - justify-content: center; - align-items: center; - border-radius: 0.25rem; - border-width: 1px; - border-color: #b80d49; -} - -.getting-started-btn { - display: flex; - background: white; - width: 14rem; - justify-self: center; - border-radius: 0.25rem; - justify-content: center; - align-items: center; - height: 3.5rem; - color: #666666; - border-width: 1px; - border-color: var(--color-accent); - margin: 8px; - width: 250px; -} - -.getting-started-btn-txt { - margin: 0; - font-weight: bold !important; - margin-right: 2px; - font-weight: 500; - line-height: 1.5rem; -} - -.interface-btn-txt { - margin: 0; - font-weight: bold !important; - margin-right: 6px; - font-weight: 500; - line-height: 1rem; -} - -@media (min-height: 1200px) { - .getting-started-buttons { - margin-top: -17rem !important; - } -} - -@media (min-height: 900px) { - /* .getting-started-header { - margin-top: 8rem; - } - - .getting-started-buttons { - margin-top: -7rem; - } */ - - /* .getting-started-overview { - grid-template-rows: 12% 65% 10% 21%; - } */ - - .front-page_logo { - width: 80rem; - } -} - -.overview_lottie_header { - margin: 0; - font-weight: 600; - font-size: 16px; -} - -.heart-lottie { - --lottie-animation-container-width: 20px; - --lottie-animation-container-height: 20px; - --lottie-animation-container-background-color: transparent; - width: var(--lottie-animation-container-width); - height: var(--lottie-animation-container-height); - background: var(--lottie-animation-container-background-color); - overflow: hidden; - margin: 0 !important; -} - -.documentation_container { - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 100%; - max-height: 1000px; -} - -.document_container { - overflow-y: auto; - justify-content: center; - width: 100%; - height: 100%; - display: flex; -} - -.doc_container { - padding-right: 1.25rem; - padding-top: 0.5rem; - justify-content: center; - align-items: center; - padding: 0.75rem; - flex-direction: column; - max-width: 1024px; - width: 100%; - height: 100%; - display: flex; -} - -.dc_con { - flex-direction: column; - width: 100%; - height: 100%; - display: flex; -} - -.doc_header { - font-weight: 700; - font-size: 1.875rem !important; - line-height: 2.25rem; - padding-bottom: 0.25rem; - margin: 0; -} - -.docu_divide { - margin-top: 1rem; - margin-bottom: 1rem; - height: 0; - color: inherit; - border-top-width: 1px; -} - -.document-content { - align-items: center; - flex-direction: column; - width: 100%; - height: 40%; - display: flex; - justify-content: center; -} - -.button_container_contact { - display: flex; - justify-content: center; - margin-bottom: 3rem; -} - -.docu-content-container { - padding-top: 1rem; - margin-bottom: 1rem; - display: flex; - flex-direction: column; - justify-content: center; -} - -.documentation-lottie_style { - width: 100%; - height: 100%; - overflow: hidden; -} - -.api_key-btn { - background: #fff !important; - color: #666666 !important; - display: inline !important; - margin-top: 1rem !important; - align-self: center !important; - width: 258px !important; - border: none !important; -} - -.api_key-btn:hover { - border: 1px solid #666666 !important; -} - -.view_doc_button { - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(147 197 253 / var(--tw-border-opacity)); - display: flex; - flex-direction: row; - align-items: center; - justify-content: center; - border-radius: 0.25rem; - padding-left: 1.25rem; - padding-right: 1.25rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - min-width: 130px; - font-size: 14px; - font-weight: 500; - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); - cursor: pointer; - -webkit-appearance: button; - background-color: transparent; - background-image: none; +.documentation-lottie_style { + width: 100%; + height: 100%; + overflow: hidden; } .document_text { @@ -1780,139 +526,3 @@ details[open] > summary::before { font-weight: 500; margin-top: 0 !important; } - -.circular { - height: 100px; - width: 100px; - position: relative; - transform: scale(1); -} - -.circular .inner { - position: relative; - z-index: 6; - top: 110%; - left: 50%; - height: 80px; - width: 80px; - margin: -40px 0 0 -40px; - background: #f5f5f5; - border-radius: 100%; -} - -.circular .number { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 10; - font-size: 18px; - font-weight: 500; - color: black; -} - -.circular .fix { - position: relative !important; - top: 60% !important; - z-index: 100 !important; /* left: 40% !important; */ - text-align: center; -} - -.circular .bar { - position: absolute; - height: 100%; - width: 100%; - background: #fff; - -webkit-border-radius: 100%; - clip: rect(0px, 100px, 100px, 50px); -} - -.circle .bar .progress { - position: absolute; - height: 100%; - width: 100%; - -webkit-border-radius: 100%; - clip: rect(0px, 50px, 100px, 0px); - background: var(--color-light-green); -} - -.circle .left .progress { - z-index: 1; - transition: transform 600ms ease; -} - -.circle .right { - transform: rotate(180deg); - transition: linear; - z-index: 3; -} - -.circle .right .progress { - transition: transform 600ms ease; -} - -#Question-getting-started-locally-destination { - text-align: -webkit-center; -} - -.notransition { - -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; - transition: none !important; -} - -.freeform-file-explorer { - border: 2px solid lightgray; - margin-top: 5px; - height: auto; - border-radius: 3px; -} - -.freeform-file-explorer { - border: 2px solid lightgray; - margin-top: 5px; - height: auto; - border-radius: 3px; -} - -.freeform-file-explorer-buttons { - display: flex; - margin-top: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - width: 100%; - border-bottom: 2px solid lightgray; -} - -#guided-pennsieve-copy-dataset-link { - background: var(--button-color); - border: none; - color: white; - height: 40px; - width: 45px; - margin-left: 2px; -} - -#guided-pennsieve-copy-dataset-link:hover { - background: #1c687e !important; -} - -#guided-pennsieve-dataset-link { - border-bottom: none !important; - width: 431px; - display: inline-flex; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} - -#guided-pennsieve-dataset-link:hover { - border-bottom: 1px solid !important; -} - -#other-dataset-information-container { - display: flex; - flex-direction: column; - align-self: center; -} diff --git a/src/electron/frontend/core/components/InstanceManager.js b/src/electron/frontend/core/components/InstanceManager.js index cfb4e1f86d..0765aa9f97 100644 --- a/src/electron/frontend/core/components/InstanceManager.js +++ b/src/electron/frontend/core/components/InstanceManager.js @@ -400,7 +400,7 @@ export class InstanceManager extends LitElement { const res = this.onAdded(path); let resolvedPath = res?.key ? res.key.split("/") : path; - let resolvedValue = res instanceof HTMLElement ? res : res?.value ?? null; + let resolvedValue = res instanceof HTMLElement ? res : (res?.value ?? null); let key = resolvedPath.pop(); diff --git a/src/electron/frontend/core/components/JSONSchemaForm.js b/src/electron/frontend/core/components/JSONSchemaForm.js index 3e3909820c..b241473c8a 100644 --- a/src/electron/frontend/core/components/JSONSchemaForm.js +++ b/src/electron/frontend/core/components/JSONSchemaForm.js @@ -698,7 +698,7 @@ export class JSONSchemaForm extends LitElement { required: isRequired, conditional: isConditional, validateEmptyValue: this.validateEmptyValues, - pattern: propertyType === "pattern" ? name : propertyType ?? undefined, + pattern: propertyType === "pattern" ? name : (propertyType ?? undefined), renderTable: this.renderTable, renderCustomHTML: this.renderCustomHTML, showLabel: !("title" in info && !info.title), diff --git a/src/electron/frontend/core/components/JSONSchemaInput.js b/src/electron/frontend/core/components/JSONSchemaInput.js index 91ec60014d..2cbda00943 100644 --- a/src/electron/frontend/core/components/JSONSchemaInput.js +++ b/src/electron/frontend/core/components/JSONSchemaInput.js @@ -1285,7 +1285,7 @@ export class JSONSchemaInput extends LitElement { const type = isDateTime ? "datetime-local" - : schema.format ?? (schema.type === "string" ? "text" : schema.type); + : (schema.format ?? (schema.type === "string" ? "text" : schema.type)); const value = isDateTime ? renderDateTime(this.value) : this.value; diff --git a/src/electron/frontend/core/components/Neurosift.js b/src/electron/frontend/core/components/Neurosift.js index 4381072054..381e6dbca1 100644 --- a/src/electron/frontend/core/components/Neurosift.js +++ b/src/electron/frontend/core/components/Neurosift.js @@ -86,7 +86,7 @@ export class Neurosift extends LitElement { ${this.fullscreen ? new FullScreenToggle({ target: this }) : ""}