From 25d8736a117b618c76d519d84c6735719b7a953e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Thu, 20 Feb 2025 10:49:52 -0500
Subject: [PATCH 1/3] Completely remove Project Browser integration

---
 .tugboat/config.yml                     |   4 -
 dist/css/components/project_browser.css | 515 ------------------------
 gin.info.yml                            |   2 -
 gin.libraries.yml                       |   5 -
 styles/components/project_browser.scss  | 504 -----------------------
 webpack.config.js                       |   1 -
 6 files changed, 1031 deletions(-)
 delete mode 100644 dist/css/components/project_browser.css
 delete mode 100644 styles/components/project_browser.scss

diff --git a/.tugboat/config.yml b/.tugboat/config.yml
index 0ebef8f52..23e835b48 100644
--- a/.tugboat/config.yml
+++ b/.tugboat/config.yml
@@ -30,8 +30,6 @@ services:
         composer require 'drupal/gin_login:^2.1'
         # Require Admin Toolbar
         composer require 'drupal/admin_toolbar:^3.0'
-        # Require Project Browser
-        composer require 'drupal/project_browser:^1.0@beta'
         # Now we can require Gin, specifing the branch name we created
         # above that uses the $TUGBOAT_REPO_ID environment variable.
         composer require drupal/gin:dev-$TUGBOAT_REPO_ID
@@ -57,8 +55,6 @@ services:
         vendor/bin/drush --yes en gin_toolbar
         # Enable gin_login Module.
         vendor/bin/drush --yes en gin_login
-        # Enable project_browser Module.
-        vendor/bin/drush --yes en project_browser
       build: |
         set -eux
         # Delete and re-check out this branch in case this is built from a Base Preview.
diff --git a/dist/css/components/project_browser.css b/dist/css/components/project_browser.css
deleted file mode 100644
index 6839ab663..000000000
--- a/dist/css/components/project_browser.css
+++ /dev/null
@@ -1,515 +0,0 @@
-#project-browser .search__form-container,
-#project-browser .pb-layout,
-#project-browser .pb-module-page {
-  padding: var(--gin-spacing-s);
-  margin-block-start: 0;
-  background: var(--gin-bg-layer);
-  border: 1px solid var(--gin-border-color-layer);
-  box-shadow: var(--gin-shadow-l1);
-  border-radius: var(--gin-border-l);
-}
-
-@media (min-width: 48em) {
-  #project-browser .search__form-container,
-  #project-browser .pb-layout,
-  #project-browser .pb-module-page {
-    padding: var(--gin-spacing-l);
-  }
-}
-
-.gin--dark-mode #project-browser .search__form-container,
-.gin--dark-mode #project-browser .pb-layout,
-.gin--dark-mode #project-browser .pb-module-page {
-  box-shadow: 0 6px 16px var(--gin-border-color-layer);
-}
-
-.gin--high-contrast-mode #project-browser .search__form-container,
-.gin--high-contrast-mode #project-browser .pb-layout,
-.gin--high-contrast-mode #project-browser .pb-module-page {
-  box-shadow: none;
-}
-
-#project-browser .search__form-container {
-  margin-block-start: var(--gin-spacing-l);
-}
-
-#project-browser .search__search-bar {
-  background: none;
-  border: none;
-}
-
-#project-browser .search__search-bar .search__search_term {
-  padding: var(--gin-spacing-m);
-  border: 1px solid var(--gin-border-color-form-element);
-}
-
-#project-browser .search__search-icon {
-  width: 1rem;
-  height: 1rem;
-  inset-inline-end: 20px;
-  inset-block-end: 20px;
-}
-
-#project-browser .search__search-clear {
-  width: 1.5rem;
-  height: 1.5rem;
-  padding: 0;
-  inset-block-start: 17px;
-  inset-inline-end: 56px;
-  z-index: 2;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  background: var(--gin-status-bg);
-  border-radius: 50%;
-}
-
-#project-browser .search__search-clear img {
-  width: 12px;
-  height: 12px;
-}
-
-.gin--dark-mode #project-browser .search__search-clear img {
-  filter: brightness(0) invert(1);
-}
-
-#project-browser .search__search-clear + .search__search-icon {
-  display: none;
-}
-
-#project-browser .search__search-submit {
-  padding: 0 16px;
-}
-
-#project-browser .search__form-item {
-  margin-block-start: 0;
-  margin-block-end: var(--gin-spacing-s);
-}
-
-#project-browser .search__results-count {
-  display: flex;
-  flex-wrap: wrap;
-  gap: var(--gin-spacing-xs);
-}
-
-#project-browser .search__form-filters-container {
-  padding: var(--gin-spacing-m);
-  background: none;
-  border: 1px solid var(--gin-border-color);
-  border-radius: var(--gin-border-m);
-}
-
-#project-browser .search__form-filters {
-  align-items: baseline;
-}
-
-#project-browser .search__form-filters .form-item {
-  padding-block-start: 0;
-  margin-block: 0 var(--gin-spacing-s);
-}
-
-#project-browser .search__grid-container, #project-browser .search__dropdown.dropdown-filters {
-  background-color: transparent;
-  border: none;
-}
-
-#project-browser .search__grid-container {
-  grid-gap: 0;
-  padding: 0;
-}
-
-#project-browser .search__filters {
-  margin-block-start: 0;
-  padding: 0;
-  background: none;
-}
-
-#project-browser .search__filter-wrapper {
-  gap: var(--gin-spacing-s);
-  margin-block-start: var(--gin-spacing-s);
-}
-
-@media (min-width: 48em) {
-  #project-browser .search__filter-wrapper {
-    margin-block-start: 0;
-  }
-}
-
-#project-browser .search__filter__toggle-container {
-  margin-inline-end: 0;
-}
-
-#project-browser .search__filter-button {
-  font-size: var(--gin-font-size-xs);
-  color: var(--gin-color-primary);
-}
-
-#project-browser .search__filter__toggle.form-element, #project-browser .search__sort-select.form-element {
-  color: var(--gin-color-text);
-  text-decoration: none;
-  margin-block-start: 0;
-  margin-inline-start: 0;
-  background-color: var(--gin-bg-input);
-  border: 1px solid var(--gin-border-color-form-element);
-  border-radius: var(--gin-border-m);
-  transition: var(--gin-transition);
-}
-
-#project-browser .search__checkbox-label {
-  font-size: var(--gin-font-size-s);
-}
-
-#project-browser .search__filter__toggle.form-element .search__filter__toggle-img {
-  padding: 0;
-}
-
-.gin--dark-mode #project-browser .search__filter__toggle.form-element .search__filter__toggle-img {
-  filter: invert(1);
-}
-
-#project-browser .search__sort {
-  display: flex;
-  align-items: center;
-  gap: var(--gin-spacing-xs);
-}
-
-#project-browser .search__sort label {
-  flex-shrink: 0;
-}
-
-#project-browser .pb-display__button,
-#project-browser .select_button {
-  font-size: var(--gin-font-size-s);
-  color: var(--gin-color-primary);
-  background: transparent;
-  padding: var(--gin-spacing-xs) var(--gin-spacing-s);
-  border-color: inherit;
-  border-radius: var(--gin-border-s);
-  box-shadow: none;
-}
-
-#project-browser .pb-display__button:hover,
-#project-browser .select_button:hover {
-  z-index: 2;
-  color: var(--gin-color-primary);
-  background: var(--gin-color-primary-light);
-}
-
-#project-browser .pb-display__button:active, #project-browser .pb-display__button:focus, #project-browser .pb-display__button--selected,
-#project-browser .select_button:active,
-#project-browser .select_button:focus,
-#project-browser .select_button--selected {
-  z-index: 2;
-  color: var(--gin-color-button-text);
-  background: var(--gin-color-primary);
-}
-
-#project-browser .pb-display__button:active img, #project-browser .pb-display__button:focus img, #project-browser .pb-display__button--selected img,
-#project-browser .select_button:active img,
-#project-browser .select_button:focus img,
-#project-browser .select_button--selected img {
-  filter: invert(1);
-}
-
-.gin--dark-mode #project-browser .pb-display__button:active img, .gin--dark-mode #project-browser .pb-display__button:focus img, .gin--dark-mode #project-browser .pb-display__button--selected img,
-.gin--dark-mode #project-browser .select_button:active img,
-.gin--dark-mode #project-browser .select_button:focus img,
-.gin--dark-mode #project-browser .select_button--selected img {
-  filter: none;
-}
-
-#project-browser .pb-display__button:focus,
-#project-browser .select_button:focus {
-  box-shadow: 0 0 0 1px var(--gin-color-focus-border), 0 0 0 4px var(--gin-color-focus);
-}
-
-#project-browser .pb-display {
-  gap: var(--gin-spacing-xxxs);
-  padding: var(--gin-spacing-xxs);
-  margin-inline-end: 0;
-  margin-block-end: 0;
-  background: var(--gin-bg-layer);
-  border: 1px solid var(--gin-border-color);
-  border-radius: var(--gin-spacing-xl);
-}
-
-#project-browser .pb-display__button {
-  color: var(--gin-color-text);
-  background: var(--gin-bg-layer);
-  border-radius: var(--gin-border-xl);
-}
-
-.gin--dark-mode #project-browser .pb-display__button-icon {
-  filter: invert(1);
-}
-
-#project-browser .pb-layout__header {
-  align-items: baseline;
-  margin-block: var(--gin-spacing-l) var(--gin-spacing-s);
-  border-block-end: none;
-}
-
-#project-browser .filter-group__title-wrapper,
-#project-browser .pb-filter__heading {
-  font-size: var(--gin-font-size-s);
-  font-weight: var(--gin-font-weight-bold);
-  color: var(--gin-color-title);
-  margin-block-end: 0;
-}
-
-#project-browser .pb-filter__heading {
-  display: inline-flex;
-}
-
-@media (min-width: 61em) {
-  #project-browser .pb-filter__heading {
-    margin-block-end: var(--gin-spacing-s);
-  }
-}
-
-#project-browser .pb-filter__summary {
-  padding: var(--gin-spacing-s);
-  background: var(--gin-bg-layer2);
-  border-radius: var(--gin-border-m);
-}
-
-#project-browser .pb-filter__checkbox-label {
-  font-size: var(--gin-font-size-s);
-  padding-block-start: 0;
-}
-
-#project-browser .filter-applied {
-  font-size: var(--gin-font-size-xs);
-  font-weight: var(--gin-font-weight-semibold);
-  color: var(--gin-color-primary-active);
-  background: var(--gin-color-primary-light);
-  padding-block: 0;
-  padding-inline: var(--gin-spacing-s) var(--gin-spacing-xs);
-  margin: 0;
-  min-height: 2rem;
-}
-
-.gin--dark-mode #project-browser .filter-applied img {
-  filter: invert(1);
-}
-
-.pb-project.pb-project--grid,
-.pb-project.pb-project--list {
-  background: transparent;
-  border: 1px solid var(--gin-border-color-layer2);
-  border-radius: var(--gin-border-m);
-  box-shadow: none;
-}
-
-.gin--dark-mode .pb-project.pb-project--grid,
-.gin--dark-mode .pb-project.pb-project--list {
-  background: var(--gin-bg-layer2);
-}
-
-.pb-project.pb-project--grid .pb-project__logo,
-.pb-project.pb-project--list .pb-project__logo {
-  line-height: 0;
-}
-
-.pb-project.pb-project--grid .pb-project__logo-image,
-.pb-project.pb-project--list .pb-project__logo-image {
-  width: 64px;
-}
-
-.pb-project.pb-project--grid .pb-project__title,
-.pb-project.pb-project--list .pb-project__title {
-  font-size: var(--gin-font-size-l);
-  font-weight: var(--gin-font-weight-bold);
-  margin-block-end: var(--gin-spacing-xxs);
-}
-
-.pb-project.pb-project--grid .pb-project__title .pb-project__link,
-.pb-project.pb-project--list .pb-project__title .pb-project__link {
-  color: var(--gin-color-primary);
-  text-decoration: none;
-}
-
-.pb-project.pb-project--grid .pb-project__body,
-.pb-project.pb-project--list .pb-project__body {
-  font-size: var(--gin-font-size-s);
-}
-
-.pb-project.pb-project--grid .project__action_button,
-.pb-project.pb-project--list .project__action_button {
-  font-size: var(--gin-font-size-xxs);
-  padding-block: calc(var(--gin-spacing-xxs) + 2px);
-  padding-inline: var(--gin-spacing-s);
-  border-radius: var(--gin-border-s);
-}
-
-.pb-project--list {
-  grid-template-columns: 64px 1fr;
-}
-
-.pb-project__image--list {
-  padding-inline-start: 0;
-}
-
-.pb-project__project-usage-container {
-  gap: var(--gin-spacing-xxxs);
-}
-
-.pb-project__status-icon, .pb-project__maintenance-icon {
-  margin-top: .25rem;
-}
-
-.pb-project__status-icon img, .pb-project__maintenance-icon img {
-  width: 24px;
-}
-
-.pb-search-results {
-  font-size: var(--gin-font-size-h3);
-  font-weight: var(--gin-font-weight-bold);
-  margin: 0;
-  margin-block-start: var(--gin-spacing-xs);
-}
-
-.pb-actions .project_status-indicator {
-  display: inline-flex;
-  gap: var(--gin-spacing-xs);
-  padding-block: var(--gin-spacing-xxs);
-  padding-inline: var(--gin-spacing-xs) var(--gin-spacing-s);
-  font-size: var(--gin-font-size-s);
-  font-weight: var(--gin-font-weight-bold);
-  border-radius: var(--gin-border-xl);
-}
-
-.pb-actions__icon {
-  color: var(--gin-status-success-text);
-}
-
-.gin--dark-mode .pb-icon--usage {
-  filter: invert(1);
-}
-
-.pb-icon--module-details {
-  width: auto;
-  margin-inline: 0;
-}
-
-.gin--dark-mode .pb-icon--status.pb-module-page__module-details-icon,
-.gin--dark-mode .pb-project__status-icon img {
-  mix-blend-mode: plus-lighter;
-}
-
-.gin--dark-mode .project-browser-popup .command-box,
-.gin--dark-mode .project-browser-popup input {
-  background: var(--gin-bg-layer2);
-}
-
-.search__form .filter-applied,
-.pb-project-categories__item,
-.pb-module-page__categories-list-item {
-  font-size: var(--gin-font-size-xs);
-  font-weight: var(--gin-font-weight-semibold);
-  margin-inline-end: .25em;
-  border-radius: 2rem;
-}
-
-.pb-project-categories__item,
-.pb-module-page__categories-list-item {
-  padding: var(--gin-spacing-xxxs) var(--gin-spacing-xs);
-}
-
-.pb-module-page {
-  display: flex;
-  flex-wrap: wrap;
-  gap: var(--gin-spacing-xl);
-  margin-block-start: var(--gin-spacing-s) !important;
-}
-
-@media (min-width: 61em) {
-  .pb-module-page {
-    flex-wrap: nowrap;
-  }
-}
-
-.pb-module-page__sidebar, .pb-module-page__main {
-  flex-basis: 100%;
-  padding: var(--gin-spacing-s);
-}
-
-@media (min-width: 61em) {
-  .pb-module-page__sidebar, .pb-module-page__main {
-    padding: 0;
-  }
-}
-
-.pb-module-page__main {
-  max-width: 100%;
-  overflow: auto;
-}
-
-@media (min-width: 61em) {
-  .pb-module-page__sidebar {
-    flex-basis: 320px;
-  }
-}
-
-.pb-module-page hr {
-  margin-block: var(--gin-spacing-s);
-}
-
-.pb-module-page__project-logo {
-  max-width: 96px;
-  margin-block-end: var(--gin-spacing-xs);
-}
-
-.pb-module-page__title {
-  font-size: var(--gin-font-size-h1);
-  font-weight: var(--gin-font-weight-bold);
-  color: var(--gin-color-title);
-  margin-block: 0;
-}
-
-.pb-module-page__author {
-  color: var(--gin-color-text-light);
-  margin-block-start: 0;
-  margin-block-end: var(--gin-spacing-m);
-}
-
-.pb-module-page__details-title {
-  position: absolute !important;
-  clip: rect(1px, 1px, 1px, 1px);
-  overflow: hidden;
-  height: 1px;
-  width: 1px;
-  word-wrap: normal;
-}
-
-.pb-module-page__module-details {
-  grid-template-columns: 2rem 2fr;
-  align-items: start;
-}
-
-.pb-module-page__module-details-info {
-  font-size: var(--gin-font-size-s);
-  margin: 0;
-  margin-block-end: var(--gin-spacing-s);
-}
-
-.pb-module-page__categories-list {
-  display: flex;
-  height: auto;
-  flex-wrap: wrap;
-  gap: var(--gin-spacing-xs);
-  margin-block-end: var(--gin-spacing-m);
-}
-
-.pb-module-page__categories-label {
-  margin-block-end: var(--gin-spacing-xs);
-}
-
-.pb-module-page__actions {
-  margin: var(--gin-spacing-s) 0;
-}
-
-.pb-module-page__categories-list-item {
-  margin: 0;
-}
-
diff --git a/gin.info.yml b/gin.info.yml
index 40fd608ec..fdc242c17 100755
--- a/gin.info.yml
+++ b/gin.info.yml
@@ -136,8 +136,6 @@ libraries-extend:
     - gin/responsive_preview
   workspaces/drupal.workspaces.overview:
     - gin/workspaces
-  project_browser/project_browser:
-    - gin/project_browser
 
 ckeditor_stylesheets:
   - dist/css/theme/accent.css
diff --git a/gin.libraries.yml b/gin.libraries.yml
index ea6c0fadb..0b284a187 100644
--- a/gin.libraries.yml
+++ b/gin.libraries.yml
@@ -463,8 +463,3 @@ workspaces:
   css:
     component:
       dist/css/components/workspaces.css: { minified: false }
-
-project_browser:
-  css:
-    theme:
-      dist/css/components/project_browser.css: { minified: false }
diff --git a/styles/components/project_browser.scss b/styles/components/project_browser.scss
deleted file mode 100644
index 500b390db..000000000
--- a/styles/components/project_browser.scss
+++ /dev/null
@@ -1,504 +0,0 @@
-#project-browser {
-  .search__form-container,
-  .pb-layout,
-  .pb-module-page {
-    padding: var(--gin-spacing-s);
-    margin-block-start: 0;
-    background: var(--gin-bg-layer);
-    border: 1px solid var(--gin-border-color-layer);
-    box-shadow: var(--gin-shadow-l1);
-    border-radius: var(--gin-border-l);
-
-    @include mq(small) {
-      padding: var(--gin-spacing-l);
-    }
-
-    .gin--dark-mode & {
-      box-shadow: 0 6px 16px var(--gin-border-color-layer);
-    }
-
-    .gin--high-contrast-mode & {
-      box-shadow: none;
-    }
-  }
-
-  .search {
-    &__form-container {
-      margin-block-start: var(--gin-spacing-l);
-    }
-
-    &__search-bar {
-      background: none;
-      border: none;
-
-      .search__search_term {
-        padding: var(--gin-spacing-m);
-        border: 1px solid var(--gin-border-color-form-element);
-      }
-    }
-
-    &__search-icon {
-      width: 1rem;
-      height: 1rem;
-      inset-inline-end: 20px;
-      inset-block-end: 20px;
-    }
-
-    &__search-clear {
-      width: 1.5rem;
-      height: 1.5rem;
-      padding: 0;
-      inset-block-start: 17px;
-      inset-inline-end: 56px;
-      z-index: 2;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      background: var(--gin-status-bg);
-      border-radius: 50%;
-
-      img {
-        width: 12px;
-        height: 12px;
-
-        .gin--dark-mode & {
-          filter: brightness(0) invert(1);
-        }
-      }
-
-      + .search__search-icon {
-        display: none;
-      }
-    }
-
-    &__search-submit {
-      padding: 0 16px;
-    }
-
-    &__form-item {
-      margin-block-start: 0;
-      margin-block-end: var(--gin-spacing-s);
-    }
-
-    &__results-count {
-      display: flex;
-      flex-wrap: wrap;
-      gap: var(--gin-spacing-xs);
-    }
-
-    &__form-filters-container {
-      padding: var(--gin-spacing-m);
-      background: none;
-      border: 1px solid var(--gin-border-color);
-      border-radius: var(--gin-border-m);
-    }
-
-    &__form-filters {
-      align-items: baseline;
-
-      .form-item {
-        padding-block-start: 0;
-        margin-block: 0 var(--gin-spacing-s);
-      }
-    }
-
-    &__grid-container,
-    &__dropdown.dropdown-filters {
-      background-color: transparent;
-      border: none;
-    }
-
-    &__grid-container {
-      grid-gap: 0;
-      padding: 0;
-    }
-
-    &__filters {
-      margin-block-start: 0;
-      padding: 0;
-      background: none;
-    }
-
-    &__filter-wrapper {
-      gap: var(--gin-spacing-s);
-      margin-block-start: var(--gin-spacing-s);
-
-      @include mq(small) {
-        margin-block-start: 0;
-      }
-    }
-
-    &__filter__toggle-container {
-      margin-inline-end: 0;
-    }
-
-    &__filter-button {
-      font-size: var(--gin-font-size-xs);
-      color: var(--gin-color-primary);
-    }
-
-    &__filter__toggle.form-element,
-    &__sort-select.form-element {
-      color: var(--gin-color-text);
-      text-decoration: none;
-      margin-block-start: 0;
-      margin-inline-start: 0;
-      background-color: var(--gin-bg-input);
-      border: 1px solid var(--gin-border-color-form-element);
-      border-radius: var(--gin-border-m);
-      transition: var(--gin-transition);
-    }
-
-    &__checkbox-label {
-      font-size: var(--gin-font-size-s);
-    }
-
-    &__filter__toggle.form-element .search__filter__toggle-img {
-      padding: 0;
-
-      .gin--dark-mode & {
-        filter: invert(1);
-      }
-    }
-
-    &__sort {
-      display: flex;
-      align-items: center;
-      gap: var(--gin-spacing-xs);
-
-      label {
-        flex-shrink: 0;
-      }
-    }
-  }
-
-  .pb-display__button,
-  .select_button {
-    font-size: var(--gin-font-size-s);
-    color: var(--gin-color-primary);
-    background: transparent;
-    padding: var(--gin-spacing-xs) var(--gin-spacing-s);
-    border-color: inherit;
-    border-radius: var(--gin-border-s);
-    box-shadow: none;
-
-    &:hover {
-      z-index: 2;
-      color: var(--gin-color-primary);
-      background: var(--gin-color-primary-light);
-    }
-
-    &:active,
-    &:focus,
-    &--selected {
-      z-index: 2;
-      color: var(--gin-color-button-text);
-      background: var(--gin-color-primary);
-
-      img {
-        filter: invert(1);
-
-        .gin--dark-mode & {
-          filter: none;
-        }
-      }
-    }
-
-    &:focus {
-      box-shadow: 0 0 0 1px var(--gin-color-focus-border), 0 0 0 4px var(--gin-color-focus);
-    }
-  }
-
-  .pb-display {
-    gap: var(--gin-spacing-xxxs);
-    padding: var(--gin-spacing-xxs);
-    margin-inline-end: 0;
-    margin-block-end: 0;
-    background: var(--gin-bg-layer);
-    border: 1px solid var(--gin-border-color);
-    border-radius: var(--gin-spacing-xl);
-
-    &__button {
-      color: var(--gin-color-text);
-      background: var(--gin-bg-layer);
-      border-radius: var(--gin-border-xl);
-    }
-
-    &__button-icon {
-      .gin--dark-mode & {
-        filter: invert(1);
-      }
-    }
-  }
-
-  .pb-layout__header {
-    align-items: baseline;
-    margin-block: var(--gin-spacing-l) var(--gin-spacing-s);
-    border-block-end: none;
-  }
-
-  .filter-group__title-wrapper,
-  .pb-filter__heading {
-    font-size: var(--gin-font-size-s);
-    font-weight: var(--gin-font-weight-bold);
-    color: var(--gin-color-title);
-    margin-block-end: 0;
-  }
-
-  .pb-filter {
-    &__heading {
-      display: inline-flex;
-
-      @include mq(medium) {
-        margin-block-end: var(--gin-spacing-s);
-      }
-    }
-
-    &__summary {
-      padding: var(--gin-spacing-s);
-      background: var(--gin-bg-layer2);
-      border-radius: var(--gin-border-m);
-    }
-
-    &__checkbox-label {
-      font-size: var(--gin-font-size-s);
-      padding-block-start: 0;
-    }
-  }
-
-  .filter-applied {
-    font-size: var(--gin-font-size-xs);
-    font-weight: var(--gin-font-weight-semibold);
-    color: var(--gin-color-primary-active);
-    background: var(--gin-color-primary-light);
-    padding-block: 0;
-    padding-inline: var(--gin-spacing-s) var(--gin-spacing-xs);
-    margin: 0;
-    min-height: 2rem;
-
-    img {
-      .gin--dark-mode & {
-        filter: invert(1);
-      }
-    }
-  }
-}
-
-.pb-project.pb-project--grid,
-.pb-project.pb-project--list {
-  background: transparent;
-  border: 1px solid var(--gin-border-color-layer2);
-  border-radius: var(--gin-border-m);
-  box-shadow: none;
-
-  .gin--dark-mode & {
-    background: var(--gin-bg-layer2);
-  }
-
-  .pb-project__logo {
-    line-height: 0;
-  }
-
-  .pb-project__logo-image {
-    width: 64px;
-  }
-
-  .pb-project__title {
-    font-size: var(--gin-font-size-l);
-    font-weight: var(--gin-font-weight-bold);
-    margin-block-end: var(--gin-spacing-xxs);
-
-    .pb-project__link {
-      color: var(--gin-color-primary);
-      text-decoration: none;
-    }
-  }
-
-  .pb-project__body {
-    font-size: var(--gin-font-size-s);
-  }
-
-  .project__action_button {
-    font-size: var(--gin-font-size-xxs);
-    padding-block: calc(var(--gin-spacing-xxs) + 2px);
-    padding-inline: var(--gin-spacing-s);
-    border-radius: var(--gin-border-s);
-  }
-}
-
-.pb-project {
-  &--list {
-    grid-template-columns: 64px 1fr;
-  }
-
-  &__image--list {
-    padding-inline-start: 0;
-  }
-
-  &__project-usage-container {
-    gap: var(--gin-spacing-xxxs);
-  }
-
-  &__status-icon,
-  &__maintenance-icon {
-    margin-top: 0.25rem;
-
-    img {
-      width: 24px;
-    }
-  }
-}
-
-.pb-search-results {
-  font-size: var(--gin-font-size-h3);
-  font-weight: var(--gin-font-weight-bold);
-  margin: 0;
-  margin-block-start: var(--gin-spacing-xs);
-}
-
-.pb-actions .project_status-indicator {
-  display: inline-flex;
-  gap: var(--gin-spacing-xs);
-  padding-block: var(--gin-spacing-xxs);
-  padding-inline: var(--gin-spacing-xs) var(--gin-spacing-s);
-  font-size: var(--gin-font-size-s);
-  font-weight: var(--gin-font-weight-bold);
-  border-radius: var(--gin-border-xl);
-}
-
-.pb-actions__icon {
-  color: var(--gin-status-success-text);
-}
-
-.pb-icon {
-  &--usage {
-    .gin--dark-mode & {
-      filter: invert(1);
-    }
-  }
-
-  &--module-details {
-    width: auto;
-    margin-inline: 0;
-  }
-}
-
-.pb-icon--status.pb-module-page__module-details-icon,
-.pb-project__status-icon img {
-  .gin--dark-mode & {
-    mix-blend-mode: plus-lighter;
-  }
-}
-
-.project-browser-popup {
-  .gin--dark-mode & {
-    .command-box,
-    input {
-      background: var(--gin-bg-layer2);
-    }
-  }
-}
-
-.search__form .filter-applied,
-.pb-project-categories__item,
-.pb-module-page__categories-list-item {
-  font-size: var(--gin-font-size-xs);
-  font-weight: var(--gin-font-weight-semibold);
-  margin-inline-end: .25em;
-  border-radius: 2rem;
-}
-
-.pb-project-categories__item,
-.pb-module-page__categories-list-item {
-  padding: var(--gin-spacing-xxxs) var(--gin-spacing-xs);
-}
-
-.pb-module-page {
-  display: flex;
-  flex-wrap: wrap;
-  gap: var(--gin-spacing-xl);
-  margin-block-start: var(--gin-spacing-s) !important;
-
-  @include mq(medium) {
-    flex-wrap: nowrap;
-  }
-
-  &__sidebar,
-  &__main {
-    flex-basis: 100%;
-    padding: var(--gin-spacing-s);
-
-    @include mq(medium) {
-      padding: 0;
-    }
-  }
-
-  &__main {
-    max-width: 100%;
-    overflow: auto;
-  }
-
-  &__sidebar {
-    @include mq(medium) {
-      flex-basis: 320px;
-    }
-  }
-
-  hr {
-    margin-block: var(--gin-spacing-s);
-  }
-
-  &__project-logo {
-    max-width: 96px;
-    margin-block-end: var(--gin-spacing-xs);
-  }
-
-  &__title {
-    font-size: var(--gin-font-size-h1);
-    font-weight: var(--gin-font-weight-bold);
-    color: var(--gin-color-title);
-    margin-block: 0;
-  }
-
-  &__author {
-    color: var(--gin-color-text-light);
-    margin-block-start: 0;
-    margin-block-end: var(--gin-spacing-m);
-  }
-
-  &__details-title {
-    @include visually-hidden;
-  }
-
-  &__module-details {
-    grid-template-columns: 2rem 2fr;
-    align-items: start;
-  }
-
-  &__module-details-info {
-    font-size: var(--gin-font-size-s);
-    margin: 0;
-    margin-block-end: var(--gin-spacing-s);
-  }
-
-  &__categories-list {
-    display: flex;
-    height: auto;
-    flex-wrap: wrap;
-    gap: var(--gin-spacing-xs);
-    margin-block-end: var(--gin-spacing-m);
-  }
-
-  &__categories-label {
-    margin-block-end: var(--gin-spacing-xs);
-  }
-
-  &__actions {
-    margin: var(--gin-spacing-s) 0;
-  }
-
-  &__categories-list-item {
-    margin: 0;
-  }
-}
-
diff --git a/webpack.config.js b/webpack.config.js
index 2635235ab..1978e6976 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -60,7 +60,6 @@ module.exports = {
     'components/node_preview': ['./styles/components/node_preview.scss'],
     'components/paragraphs': ['./styles/components/paragraphs.scss'],
     'components/responsive_preview': ['./styles/components/responsive_preview.scss'],
-    'components/project_browser': ['./styles/components/project_browser.scss'],
     'components/revisions': ['./styles/components/revisions.scss'],
     'components/settings_tray': ['./styles/components/settings_tray.scss'],
     'components/settings_tray_edit': ['./styles/components/settings_tray_edit.scss'],
-- 
GitLab


From b772abc33d28e4e1e383662ed65edb9d4c5ef00d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Thu, 20 Feb 2025 10:55:58 -0500
Subject: [PATCH 2/3] Conflict with PB>=alpha10

---
 composer.json | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/composer.json b/composer.json
index edac9da31..81664f903 100644
--- a/composer.json
+++ b/composer.json
@@ -37,5 +37,8 @@
     },
     "scripts": {
         "phpcs": "phpcs -s --runtime-set ignore_warnings_on_exit 1 --runtime-set ignore_errors_on_exit 0 'web/modules/custom'"
+    },
+    "conflict": {
+        "drupal/project_browser": ">=2-alpha10"
     }
 }
-- 
GitLab


From 376878423514a88bce18a942366cf983ddf573e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Tue, 25 Feb 2025 14:41:23 -0500
Subject: [PATCH 3/3] Add pre-render

---
 includes/form.theme  |  6 ++++++
 src/GinPreRender.php | 25 ++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/includes/form.theme b/includes/form.theme
index 4f99ebc42..2c58b1490 100644
--- a/includes/form.theme
+++ b/includes/form.theme
@@ -191,6 +191,12 @@ function gin_element_info_alter(&$info) {
       'textFormat',
     ];
   }
+  if (array_key_exists('project_browser', $info)) {
+    $info['project_browser']['#pre_render'][] = [
+      GinPreRender::class,
+      'projectBrowser',
+    ];
+  }
 }
 
 /**
diff --git a/src/GinPreRender.php b/src/GinPreRender.php
index 81ab7977d..a28906314 100644
--- a/src/GinPreRender.php
+++ b/src/GinPreRender.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\gin;
 
+use Composer\InstalledVersions;
 use Drupal\Core\Security\TrustedCallbackInterface;
 
 /**
@@ -11,11 +12,32 @@ use Drupal\Core\Security\TrustedCallbackInterface;
  */
 class GinPreRender implements TrustedCallbackInterface {
 
+  /**
+   * Conditionally attaches libraries to project browsers.
+   *
+   * @param array $element
+   *   The render element.
+   *
+   * @return array
+   *   The modified render element.
+   */
+  public static function projectBrowser(array $element): array {
+    try {
+      $version = InstalledVersions::getVersion('drupal/project_browser');
+      if (version_compare($version, '2.0.0-alpha10', '<')) {
+        $element['#attached']['library'][] = 'gin/project_browser';
+      }
+    }
+    catch (\OutOfBoundsException) {
+      // Project Browser isn't installed, we don't have to do anything.
+    }
+    return $element;
+  }
+
   /**
    * Prepare description toggle for output in template.
    */
   public static function textFormat($element) {
-
     if (\Drupal::classResolver(GinDescriptionToggle::class)->isEnabled() && !empty($element['#description'])) {
       if ($element['#type'] === 'text_format') {
         $element['value']['#description_toggle'] = TRUE;
@@ -34,6 +56,7 @@ class GinPreRender implements TrustedCallbackInterface {
    */
   public static function trustedCallbacks() {
     return [
+      'projectBrowser',
       'textFormat',
     ];
   }
-- 
GitLab