diff --git a/.github/workflows/lint_test.yaml b/.github/workflows/lint_test.yaml index 777c564bc..f27e35504 100644 --- a/.github/workflows/lint_test.yaml +++ b/.github/workflows/lint_test.yaml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [24] + node-version: [22] steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/blocks/browse/browse.css b/blocks/browse/browse.css new file mode 100644 index 000000000..dc76ba16b --- /dev/null +++ b/blocks/browse/browse.css @@ -0,0 +1,30 @@ +.light-scheme { + .browse:has(da-sites) { + [data-scheme="light"] { + display: block; + } + } +} + +.dark-scheme { + .browse:has(da-sites) { + [data-scheme="dark"] { + display: block; + } + } +} + +picture { + display: none; + position: absolute; + left: 0; + right: 0; + top: 0; +} + +img { + display: block; + width: 100%; + height: auto; + mask-image: linear-gradient(to bottom, rgb(0 0 0) 50%, transparent 100%); +} diff --git a/blocks/browse/browse.js b/blocks/browse/browse.js index 2ecb9b5c8..ee3275451 100644 --- a/blocks/browse/browse.js +++ b/blocks/browse/browse.js @@ -1,54 +1,43 @@ -import getPathDetails from '../shared/pathDetails.js'; +import { getNx } from '../../scripts/utils.js'; -// Preload Lit -import('../../deps/lit/dist/index.js'); +const { hashChange, loadStyle } = await import(`${getNx()}/utils/utils.js`); -async function loadComponent(el, cmpName, details) { - el.innerHTML = ''; +const styles = await loadStyle(import.meta.url); +document.adoptedStyleSheets.push(styles); + +async function loadComponent(el, cmpName, pathDetails) { + const existing = el.querySelector(cmpName); + if (existing && pathDetails) { + existing.details = pathDetails; + return; + } + // Swapping views — remove whichever component is currently mounted. + el.querySelector('da-sites, da-browse')?.remove(); await import(`./${cmpName}/${cmpName}.js`); const cmp = document.createElement(cmpName); - if (details) cmp.details = details; + cmp.details = pathDetails; el.append(cmp); } function setRecentSite(details) { - if (!details.repo) return; - if (details.repo.startsWith('.')) return; + if (!details.site) return; + // .trash, .da, .helix, .versions + if (details.site.startsWith('.')) return; const currentSites = JSON.parse(localStorage.getItem('da-sites')) || []; - const siteString = `${details.owner}/${details.repo}`; + const siteString = `${details.org}/${details.site}`; const foundIdx = currentSites.indexOf(siteString); if (foundIdx === 0) return; if (foundIdx !== -1) currentSites.splice(foundIdx, 1); localStorage.setItem('da-sites', JSON.stringify([siteString, ...currentSites].slice(0, 8))); } -async function setupExperience(el, e) { - const details = getPathDetails(); - if (details) setRecentSite(details); - if (e) { - const oldHash = new URL(e.oldURL).hash; - const newHash = new URL(e.newURL).hash; - - // Are they already browsing - if (oldHash.startsWith('#/') && newHash.startsWith('#/')) { - document.querySelector('da-browse').details = details; - return; - } - } - if (!details) { - await loadComponent(el, 'da-sites'); - } else { - await loadComponent(el, 'da-browse', details); - } -} - -export default async function init(el) { - await setupExperience(el); +export default function init(el) { + hashChange.subscribe((pathDetails) => { + const cmpName = pathDetails ? 'da-browse' : 'da-sites'; + loadComponent(el, cmpName, pathDetails); + if (pathDetails) setRecentSite(pathDetails); + }); // Lazily preload the editor setTimeout(() => { import('da-y-wrapper'); }, 3000); - - window.addEventListener('hashchange', async (e) => { - await setupExperience(el, e); - }); } diff --git a/blocks/browse/da-actionbar/da-actionbar.css b/blocks/browse/da-actionbar/da-actionbar.css index 07047ab5b..16ac1ef16 100644 --- a/blocks/browse/da-actionbar/da-actionbar.css +++ b/blocks/browse/da-actionbar/da-actionbar.css @@ -4,11 +4,11 @@ button { .da-action-bar { bottom: 12px; - position: fixed; - background: #BC1C74; + position: absolute; + background-color: rgb(188 28 116); min-height: 48px; - border-radius: 6px; - width: var(--grid-container-width); + border-radius: var(--s2-corner-radius-700); + width: var(--se-grid-container-width); z-index: 400; filter: drop-shadow(rgb(0 0 0 / 15%) 0 1px 4px); display: flex; @@ -25,7 +25,7 @@ button { height: 32px; color: #FFF; border: none; - border-radius: 4px; + border-radius: var(--s2-corner-radius-500); display: flex; align-items: center; gap: 12px; @@ -43,14 +43,14 @@ button { } .da-action-bar-left-rail { - margin-left: 14px; + margin-left: 3px; display: flex; align-items: center; gap: 12px; } .da-action-bar-right-rail { - margin: 0 3px; + margin-right: 3px; display: flex; gap: 8px; } diff --git a/blocks/browse/da-actionbar/da-actionbar.js b/blocks/browse/da-actionbar/da-actionbar.js index 73dd35330..7fba88c92 100644 --- a/blocks/browse/da-actionbar/da-actionbar.js +++ b/blocks/browse/da-actionbar/da-actionbar.js @@ -2,8 +2,8 @@ import { LitElement, html } from 'da-lit'; import { getNx } from '../../../scripts/utils.js'; // Styles -const { default: getStyle } = await import(`${getNx()}/utils/styles.js`); -const STYLE = await getStyle(import.meta.url); +const { loadStyle } = await import(`${getNx()}/utils/utils.js`); +const STYLE = await loadStyle(import.meta.url); export default class DaActionBar extends LitElement { static properties = { diff --git a/blocks/browse/da-breadcrumbs/da-breadcrumbs.css b/blocks/browse/da-breadcrumbs/da-breadcrumbs.css index ebb5dbff2..7b0e1c2f4 100644 --- a/blocks/browse/da-breadcrumbs/da-breadcrumbs.css +++ b/blocks/browse/da-breadcrumbs/da-breadcrumbs.css @@ -29,7 +29,7 @@ button { .da-breadcrumb-list-item-link-wrapper { padding: 0 10px; - background: #dcdcdc; + background: var(--s2-gray-200); border-radius: 6px; line-height: 32px; display: flex; @@ -38,7 +38,7 @@ button { .da-breadcrumb-list-item a { text-decoration: none; - color: rgb(44 44 44); + color: var(--s2-gray-800); } .da-breadcrumb-list-item-config { @@ -54,7 +54,7 @@ button { } .da-breadcrumb-list-item-config:hover { - background-color: #147af3; + background-color: var(--s2-blue-900); color: #FFF; } @@ -90,7 +90,7 @@ button { } } -@media (min-width: 900px) { +@media (width >= 900px) { .da-breadcrumb { margin-bottom: 12px; display: flex; diff --git a/blocks/browse/da-breadcrumbs/da-breadcrumbs.js b/blocks/browse/da-breadcrumbs/da-breadcrumbs.js index bffc86ba0..778070fcb 100644 --- a/blocks/browse/da-breadcrumbs/da-breadcrumbs.js +++ b/blocks/browse/da-breadcrumbs/da-breadcrumbs.js @@ -1,24 +1,18 @@ -import { LitElement, html } from 'da-lit'; +import { LitElement, html, nothing } from 'da-lit'; import { getNx } from '../../../scripts/utils.js'; -// Styles & Icons -const getStyle = (await import(`${getNx()}/public/utils/styles.js`)).default; -const getSvg = (await import(`${getNx()}/public/utils/svg.js`)).default; - -const STYLE = await getStyle(import.meta.url); -const ICONS = await getSvg({ paths: ['/blocks/browse/da-browse/img/Smock_Settings_18_N.svg'] }); +const { loadStyle } = await import(`${getNx()}/utils/utils.js`); +const style = await loadStyle(import.meta.url); export default class DaBreadcrumbs extends LitElement { static properties = { - fullpath: { type: String }, - depth: { type: Number }, + details: { attribute: false }, _breadcrumbs: { state: true }, }; connectedCallback() { super.connectedCallback(); - this.shadowRoot.adoptedStyleSheets = [STYLE]; - this.shadowRoot.append(...ICONS); + this.shadowRoot.adoptedStyleSheets = [style]; } update(props) { @@ -27,23 +21,23 @@ export default class DaBreadcrumbs extends LitElement { } getBreadcrumbs() { - const pathSplit = this.fullpath.split('/').filter((part) => part !== ''); + const pathSplit = this.details.fullpath.split('/').filter((part) => part !== ''); this._breadcrumbs = pathSplit.map((part, idx) => ({ name: part, path: `#/${pathSplit.slice(0, idx + 1).join('/')}`, })); } - renderConfig(length, crumb, idx) { - if (this.depth <= 2 && idx + 1 === length) { - return html` - - - `; - } - return null; + renderConfig(crumb) { + if (this.details.path) return nothing; + return html` + + + `; } render() { @@ -54,7 +48,7 @@ export default class DaBreadcrumbs extends LitElement {