From b8e04279c3a9d46380658984fa863babb7065535 Mon Sep 17 00:00:00 2001 From: Kiran Murugulla Date: Wed, 28 Jan 2026 06:20:34 -0500 Subject: [PATCH 1/3] feat:adding block library set up app --- tools/library-setup/app/main.js | 837 ++++++++++++++ tools/library-setup/app/state.js | 39 + tools/library-setup/app/templates.js | 603 ++++++++++ tools/library-setup/library-setup.css | 1065 ++++++++++++++++++ tools/library-setup/library-setup.html | 13 + tools/library-setup/operations/github.js | 80 ++ tools/library-setup/operations/library.js | 195 ++++ tools/library-setup/operations/pages.js | 105 ++ tools/library-setup/utils/block-analysis.js | 234 ++++ tools/library-setup/utils/content-extract.js | 148 +++ tools/library-setup/utils/da-api.js | 398 +++++++ tools/library-setup/utils/doc-generator.js | 137 +++ tools/library-setup/utils/github-api.js | 183 +++ tools/library-setup/utils/github-parser.js | 44 + tools/library-setup/utils/token-storage.js | 21 + 15 files changed, 4102 insertions(+) create mode 100644 tools/library-setup/app/main.js create mode 100644 tools/library-setup/app/state.js create mode 100644 tools/library-setup/app/templates.js create mode 100644 tools/library-setup/library-setup.css create mode 100644 tools/library-setup/library-setup.html create mode 100644 tools/library-setup/operations/github.js create mode 100644 tools/library-setup/operations/library.js create mode 100644 tools/library-setup/operations/pages.js create mode 100644 tools/library-setup/utils/block-analysis.js create mode 100644 tools/library-setup/utils/content-extract.js create mode 100644 tools/library-setup/utils/da-api.js create mode 100644 tools/library-setup/utils/doc-generator.js create mode 100644 tools/library-setup/utils/github-api.js create mode 100644 tools/library-setup/utils/github-parser.js create mode 100644 tools/library-setup/utils/token-storage.js diff --git a/tools/library-setup/app/main.js b/tools/library-setup/app/main.js new file mode 100644 index 0000000..8371d38 --- /dev/null +++ b/tools/library-setup/app/main.js @@ -0,0 +1,837 @@ +/* eslint-disable import/no-absolute-path */ +/* eslint-disable import/no-unresolved */ +import DA_SDK from 'https://da.live/nx/utils/sdk.js'; + +import state from './state.js'; +import * as templates from './templates.js'; +import * as githubOps from '../operations/github.js'; +import * as libraryOps from '../operations/library.js'; +import * as pagesOps from '../operations/pages.js'; +import TokenStorage from '../utils/token-storage.js'; +import GitHubAPI from '../utils/github-api.js'; + +const app = { + async init() { + const container = document.getElementById('app-container'); + if (!container) { + throw new Error('App container not found'); + } + + try { + const { context, token } = await DA_SDK; + state.daToken = token; + + if (context?.org) { + state.org = context.org; + } + + if (context?.repo) { + state.site = context.repo; + } + + // eslint-disable-next-line no-console + console.log('DA SDK initialized:', { + hasContext: !!context, + hasToken: !!token, + org: context?.org, + repo: context?.repo, + autoPopulated: !!(context?.org && context?.repo), + }); + } catch (error) { + // eslint-disable-next-line no-console + console.warn('DA SDK not available (running outside DA.live):', error); + + const urlMatch = window.location.pathname.match(/^\/app\/([^/]+)\/([^/]+)/); + if (urlMatch) { + const [, org, site] = urlMatch; + state.org = org; + state.site = site; + // eslint-disable-next-line no-console + console.log('Auto-populated from URL:', { org: state.org, site: state.site }); + } + } + + if (TokenStorage.exists()) { + state.githubToken = TokenStorage.get(); + } + + this.container = container; + this.render(); + this.attachEventListeners(); + + // Auto-load blocks if starting in refresh mode with org/site available + if (state.mode === 'refresh' && state.org && state.site) { + await this.handleLoadExistingBlocks(); + } + }, + + render() { + const sections = []; + + sections.push(templates.modeToggleTemplate({ + currentMode: state.mode, + })); + + if (state.mode === 'setup') { + sections.push(templates.githubSectionTemplate({ + isValidated: state.repositoryValidated, + validating: state.validating, + githubUrl: state.githubUrl, + message: templates.messageTemplate(state.message, state.messageType), + })); + + if (state.needsToken && !state.repositoryValidated) { + sections.push(templates.tokenInputTemplate({ + hasSavedToken: TokenStorage.exists(), + })); + } + } + + if ((state.mode === 'setup' && state.repositoryValidated) || state.mode === 'refresh') { + sections.push(templates.siteSectionTemplate({ + org: state.org, + site: state.site, + message: templates.messageTemplate(state.message, state.messageType), + mode: state.mode, + })); + } + + if (state.blocksDiscovered) { + sections.push(templates.blocksListTemplate({ + blocks: state.blocks, + selectedBlocks: state.selectedBlocks, + message: state.mode === 'refresh' ? '' : templates.messageTemplate(state.message, state.messageType), + })); + } + + if (state.selectedBlocks.size > 0) { + sections.push(templates.pagesSelectionTemplate({ + allSites: this.getAllSites(), + pageSelections: state.pageSelections, + message: state.mode === 'refresh' ? '' : templates.messageTemplate(state.message, state.messageType), + daToken: state.daToken, + org: state.org, + mode: state.mode, + })); + } + + if (state.selectedBlocks.size > 0 && (state.processing || state.processResults.length > 0)) { + sections.push(state.processing + ? templates.processingTemplate({ processStatus: state.processStatus }) + : templates.finalStatusTemplate({ + processStatus: state.processStatus, + org: state.org, + repo: state.repo, + })); + } else if (state.selectedBlocks.size > 0) { + sections.push(templates.initialStatusTemplate({ + org: state.org, + repo: state.repo, + blocksCount: state.selectedBlocks.size, + mode: state.mode, + })); + } + + const content = sections.join(''); + this.container.innerHTML = templates.appTemplate(content); + this.attachEventListeners(); + }, + + attachEventListeners() { + document.querySelectorAll('.mode-btn').forEach((btn) => { + btn.addEventListener('click', (e) => { + const newMode = e.target.dataset.mode; + if (newMode !== state.mode) { + this.handleModeChange(newMode); + } + }); + }); + + const githubUrlInput = document.getElementById('github-url'); + if (githubUrlInput && !state.repositoryValidated) { + githubUrlInput.addEventListener('input', (e) => { + state.githubUrl = e.target.value; + }); + + githubUrlInput.addEventListener('blur', (e) => this.handleGitHubUrlChange(e.target.value)); + + githubUrlInput.addEventListener('keydown', (e) => { + if (e.key === 'Enter') { + e.preventDefault(); + this.handleGitHubUrlChange(e.target.value); + } + }); + } + + const orgInput = document.getElementById('org-name'); + if (orgInput) { + orgInput.addEventListener('input', (e) => { + state.org = e.target.value.trim(); + }); + } + + const siteInput = document.getElementById('site-name'); + if (siteInput) { + siteInput.addEventListener('input', (e) => { + state.site = e.target.value.trim(); + }); + } + + const loadExistingBlocksBtn = document.getElementById('load-existing-blocks'); + if (loadExistingBlocksBtn) { + loadExistingBlocksBtn.addEventListener('click', () => this.handleLoadExistingBlocks()); + } + + const validateWithTokenBtn = document.getElementById('validate-with-token'); + if (validateWithTokenBtn) { + validateWithTokenBtn.addEventListener('click', () => this.handleValidateWithToken()); + } + + const clearTokenBtn = document.getElementById('clear-token'); + if (clearTokenBtn) { + clearTokenBtn.addEventListener('click', () => this.handleClearToken()); + } + + const startBtn = document.getElementById('start-processing'); + if (startBtn) { + startBtn.addEventListener('click', () => this.handleStartProcessing()); + } + + document.querySelectorAll('[data-block-name]').forEach((checkbox) => { + checkbox.addEventListener('change', (e) => { + const { target } = e; + const { blockName } = target.dataset; + if (target.checked) { + state.selectedBlocks.add(blockName); + } else { + state.selectedBlocks.delete(blockName); + } + this.render(); + }); + }); + + const toggleAllBtn = document.getElementById('toggle-all-blocks'); + if (toggleAllBtn) { + toggleAllBtn.addEventListener('click', () => this.toggleAllBlocks()); + } + + document.querySelectorAll('.select-pages-btn').forEach((btn) => { + btn.addEventListener('click', (e) => { + const { site } = e.target.dataset; + this.openPagePicker(site); + }); + }); + + document.querySelectorAll('.remove-page-btn').forEach((btn) => { + btn.addEventListener('click', (e) => { + const { site, path } = e.target.dataset; + this.removePage(site, path); + }); + }); + }, + + async handleModeChange(newMode) { + state.mode = newMode; + state.message = ''; + state.messageType = 'info'; + + if (newMode === 'refresh') { + state.repositoryValidated = false; + state.blocksDiscovered = false; + state.needsToken = false; + state.githubUrl = ''; + state.blocks = []; + state.selectedBlocks.clear(); + state.processing = false; + state.processResults = []; + state.validating = false; + state.discovering = false; + state.pageSelections = {}; + + this.render(); + if (state.org && state.site) { + await this.handleLoadExistingBlocks(); + } + return; + } + + if (newMode === 'setup') { + state.repositoryValidated = false; + state.blocksDiscovered = false; + state.needsToken = false; + state.githubUrl = ''; + state.blocks = []; + state.selectedBlocks.clear(); + state.processing = false; + state.processResults = []; + state.validating = false; + state.discovering = false; + state.pageSelections = {}; + state.libraryExists = false; + } + + this.render(); + }, + + async handleGitHubUrlChange(url) { + state.githubUrl = url.trim(); + + const parsed = githubOps.parseGitHubURL(state.githubUrl); + if (parsed && parsed.org && parsed.repo) { + state.org = parsed.org; + state.repo = parsed.repo; + state.site = parsed.repo; + + await this.validateRepository(); + } + }, + + async validateRepository() { + state.validating = true; + this.render(); + + try { + const result = await githubOps.validateRepository(state.org, state.repo, state.githubToken); + + if (!result.valid) { + if (result.error === 'private' && result.needsToken) { + state.needsToken = true; + state.message = 'Unable to access repository. If this is a private repository, please enter a GitHub token below.'; + state.messageType = 'error'; + state.validating = false; + this.render(); + return; + } + + state.message = result.error === 'private' ? 'Unable to access repository with provided token.' : result.error; + state.messageType = 'error'; + state.validating = false; + this.render(); + return; + } + + state.repositoryValidated = true; + state.needsToken = false; + + state.validating = false; + this.render(); + await this.discoverBlocks(); + } catch (error) { + let errorMsg = error.message; + if (errorMsg.includes('404') || errorMsg.includes('Not Found')) { + errorMsg = 'Please enter a valid GitHub repository URL.'; + } else if (errorMsg.includes('Failed to fetch') || errorMsg.includes('NetworkError')) { + errorMsg = 'Network error. Please check your connection and try again.'; + } + + state.message = errorMsg; + state.messageType = 'error'; + state.validating = false; + this.render(); + } + }, + + async handleValidateWithToken() { + const tokenInput = document.getElementById('github-token'); + const saveCheckbox = document.getElementById('save-token'); + const token = tokenInput?.value.trim(); + + if (!token) { + state.message = 'Please enter a GitHub token'; + state.messageType = 'error'; + this.render(); + return; + } + + if (saveCheckbox?.checked) { + TokenStorage.set(token); + } + + state.githubToken = token; + await this.validateRepository(); + }, + + handleClearToken() { + TokenStorage.clear(); + state.githubToken = null; + state.message = 'Saved token cleared'; + state.messageType = 'success'; + this.render(); + }, + + async handleLoadExistingBlocks() { + if (!state.org || !state.site) { + state.message = 'Please enter both organization and site name'; + state.messageType = 'error'; + this.render(); + return; + } + + state.discovering = true; + this.render(); + + try { + const blocks = await libraryOps.fetchExistingBlocks(state.org, state.site); + + if (blocks.length === 0) { + state.message = 'No library found at this location. Please run "Library Setup" first to create the library.'; + state.messageType = 'error'; + state.discovering = false; + this.render(); + return; + } + + state.blocks = blocks; + state.blocksDiscovered = true; + state.discovering = false; + state.selectedBlocks = new Set(blocks.map((b) => b.name)); + state.message = ''; + state.messageType = 'info'; + this.render(); + } catch (error) { + state.message = `Unable to load library: ${error.message}. Please run "Library Setup" first to create the library.`; + state.messageType = 'error'; + state.discovering = false; + this.render(); + } + }, + + async discoverBlocks() { + state.discovering = true; + this.render(); + + try { + const blocks = await githubOps.discoverBlocks(state.org, state.repo, state.githubToken); + state.blocks = blocks; + state.blocksDiscovered = true; + state.discovering = false; + + state.selectedBlocks = new Set(blocks.map((b) => b.name)); + + const libraryCheck = await libraryOps.checkLibraryExists(state.org, state.site); + state.libraryExists = libraryCheck.exists; + + this.render(); + } catch (error) { + state.message = `Block discovery failed: ${error.message}`; + state.messageType = 'error'; + state.discovering = false; + this.render(); + } + }, + + async handleStartProcessing() { + if (!state.daToken) { + state.message = 'DA.live authentication required. This tool must be run from within DA.live.'; + state.messageType = 'error'; + this.render(); + return; + } + + const siteValid = await this.validateSite(state.org, state.site, state.daToken); + if (!siteValid) { + state.message = `Site "${state.org}/${state.site}" not found in DA.live. Cannot create library.`; + state.messageType = 'error'; + this.render(); + return; + } + + state.processing = true; + const baseStatus = { + github: { org: state.org, repo: state.repo, status: 'complete' }, + blocks: { total: state.selectedBlocks.size, status: 'complete' }, + blockDocs: { created: 0, total: state.selectedBlocks.size, status: 'pending' }, + errors: { count: 0, messages: [] }, + currentStep: state.mode === 'refresh' ? 'Starting documentation refresh...' : 'Starting library setup...', + }; + + // Only include siteConfig and blocksJson status in setup mode (not refresh) + if (state.mode === 'setup') { + baseStatus.siteConfig = { status: 'pending', message: '' }; + baseStatus.blocksJson = { status: 'pending', message: '' }; + } + + state.processStatus = baseStatus; + state.processResults = []; + this.render(); + + try { + const selectedBlockNames = Array.from(state.selectedBlocks); + const sitesWithPages = this.getAllSites().map((site) => ({ + org: state.org, + site, + pages: Array.from(state.pageSelections[site] || []), + })); + + // eslint-disable-next-line no-console + console.log('Starting library setup:', { + org: state.org, + site: state.site, + blocks: selectedBlockNames, + pages: sitesWithPages, + }); + + let githubApi = null; + if (state.mode === 'setup' && state.org && state.repo) { + githubApi = new GitHubAPI(state.org, state.repo, 'main', state.githubToken); + } + + const results = await libraryOps.setupLibrary({ + org: state.org, + site: state.site, + blockNames: selectedBlockNames, + sitesWithPages, + onProgress: (progress) => this.handleProgress(progress), + skipSiteConfig: state.mode === 'refresh', + githubApi, + }); + + // eslint-disable-next-line no-console + console.log('Setup results:', results); + + if (!results.success) { + throw new Error(results.error || 'Library setup failed'); + } + + state.processStatus.currentStep = ''; + state.message = ''; + state.messageType = ''; + } catch (error) { + // eslint-disable-next-line no-console + console.error('Processing error:', error); + + state.processStatus.currentStep = `✗ Error: ${error.message}`; + state.processStatus.errors.count += 1; + state.processStatus.errors.messages.push(error.message); + state.message = `Processing failed: ${error.message}`; + state.messageType = 'error'; + } finally { + state.processing = false; + this.render(); + } + }, + + handleProgress(progress) { + // eslint-disable-next-line no-console + console.log('Progress update:', progress); + + if (progress.step === 'register') { + // Only update siteConfig status if it exists (setup mode only) + if (state.processStatus.siteConfig) { + if (progress.status === 'start') { + state.processStatus.siteConfig.status = 'processing'; + state.processStatus.siteConfig.message = 'Registering library...'; + state.processStatus.currentStep = 'Registering library in site configuration...'; + } else if (progress.status === 'complete') { + state.processStatus.siteConfig.status = 'complete'; + state.processStatus.siteConfig.message = 'Updated Site Config'; + state.processStatus.currentStep = progress.registration.created + ? 'Created config.json with library sheet' + : 'Library already registered in config.json'; + } + } + } else if (progress.step === 'extract') { + if (progress.status === 'start') { + state.processStatus.currentStep = `Extracting block examples from ${progress.totalPages} sample pages...`; + } else if (progress.status === 'complete') { + state.processStatus.currentStep = 'Extracted block examples from sample pages'; + } + } else if (progress.step === 'generate') { + if (progress.status === 'start') { + state.processStatus.blockDocs.status = 'processing'; + state.processStatus.currentStep = `Generating documentation for ${progress.totalBlocks} blocks...`; + } else if (progress.status === 'complete') { + state.processStatus.currentStep = `Generated ${progress.totalBlocks} block documentation files`; + } + } else if (progress.step === 'upload') { + if (progress.status === 'start') { + state.processStatus.blockDocs.status = 'processing'; + state.processStatus.currentStep = 'Uploading block documentation...'; + } else if (progress.current && progress.total) { + state.processStatus.blockDocs.created = progress.current; + state.processStatus.blockDocs.status = 'processing'; + state.processStatus.currentStep = `Uploading blocks... ${progress.current}/${progress.total}`; + } else if (progress.status === 'complete') { + const successCount = progress.uploadResults.filter((r) => r.success).length; + const errorCount = progress.uploadResults.length - successCount; + + state.processResults = progress.uploadResults; + state.processStatus.blockDocs.created = successCount; + state.processStatus.blockDocs.status = errorCount > 0 ? 'warning' : 'complete'; + state.processStatus.currentStep = `Uploaded ${successCount} block documents`; + + if (errorCount > 0) { + state.processStatus.errors.count += errorCount; + progress.uploadResults + .filter((r) => !r.success) + .forEach((r) => state.processStatus.errors.messages.push(`${r.name}: ${r.error}`)); + } + } + } else if (progress.step === 'blocks-json') { + if (state.processStatus.blocksJson) { + if (progress.status === 'start') { + state.processStatus.blocksJson.status = 'processing'; + state.processStatus.blocksJson.message = state.libraryExists + ? 'Updating...' + : 'Creating...'; + state.processStatus.currentStep = state.libraryExists + ? 'Updating blocks.json configuration...' + : 'Creating blocks.json configuration...'; + } else if (progress.status === 'complete') { + state.processStatus.blocksJson.status = 'complete'; + state.processStatus.blocksJson.message = state.libraryExists + ? 'Updated' + : 'Created'; + state.processStatus.currentStep = state.libraryExists + ? 'Updated blocks.json' + : 'Created blocks.json'; + } + } + } + + this.render(); + }, + + toggleAllBlocks() { + if (state.selectedBlocks.size === state.blocks.length) { + state.selectedBlocks.clear(); + } else { + state.blocks.forEach((block) => state.selectedBlocks.add(block.name)); + } + this.render(); + }, + + getAllSites() { + return [state.site]; + }, + + async validateSite(org, site, token) { + try { + const response = await fetch( + `https://admin.da.live/list/${org}/${site}/`, + { + method: 'GET', + headers: { Authorization: `Bearer ${token}` }, + }, + ); + return response.ok; + } catch (error) { + return false; + } + }, + + async openPagePicker(site) { + if (!state.daToken) { + state.message = 'DA.live authentication required. This tool must be run from within DA.live.'; + state.messageType = 'error'; + this.render(); + return; + } + + const siteValid = await this.validateSite(state.org, site, state.daToken); + if (!siteValid) { + state.message = `Site "${state.org}/${site}" not found in DA.live. Please verify the site name.`; + state.messageType = 'error'; + this.render(); + return; + } + + state.currentSite = site; + state.loadingPages = true; + state.showPagePicker = true; + this.renderPagePickerModal(); + + try { + const pages = await pagesOps.fetchSitePages(state.org, site); + state.allPages = pages; + state.loadingPages = false; + this.renderPagePickerModal(); + } catch (error) { + // eslint-disable-next-line no-console + console.error('Page picker error:', error); + + const errorMsg = error.message.includes('401') + ? 'Authentication failed. Please ensure you are logged in to DA.live.' + : `Failed to load pages: ${error.message}`; + + state.message = errorMsg; + state.messageType = 'error'; + state.loadingPages = false; + state.showPagePicker = false; + this.render(); + } + }, + + renderPagePickerModal() { + const modal = templates.pagePickerModalTemplate({ + site: state.currentSite, + items: state.allPages, // Pass items directly + selectedPages: state.pageSelections[state.currentSite] || new Set(), + loading: state.loadingPages, + }); + + let modalContainer = document.getElementById('page-picker-modal'); + if (!modalContainer) { + modalContainer = document.createElement('div'); + modalContainer.id = 'page-picker-modal'; + document.body.appendChild(modalContainer); + } + + modalContainer.innerHTML = modal; + this.attachPagePickerListeners(); + }, + + attachPagePickerListeners() { + const overlay = document.querySelector('.modal-overlay'); + if (overlay) { + overlay.addEventListener('click', (e) => { + if (e.target === overlay) { + this.closePagePicker(); + } + }); + } + + const cancelBtn = document.querySelector('.modal-cancel'); + if (cancelBtn) { + cancelBtn.addEventListener('click', () => this.closePagePicker()); + } + + const confirmBtn = document.querySelector('.modal-confirm'); + if (confirmBtn) { + confirmBtn.addEventListener('click', () => this.confirmPageSelection()); + } + + const searchInput = document.getElementById('page-search'); + if (searchInput) { + searchInput.addEventListener('input', (e) => { + state.pageSearchQuery = e.target.value; + this.renderPagePickerModal(); + }); + } + + document.querySelectorAll('.folder-toggle').forEach((folderBtn) => { + folderBtn.addEventListener('click', async (e) => { + const button = e.currentTarget; + const folderItem = button.closest('.folder-item'); + const contents = folderItem.querySelector('.folder-contents'); + const arrow = button.querySelector('.toggle-arrow'); + const icon = button.querySelector('.folder-icon'); + const { folderPath } = button.dataset; + const isLoaded = contents.dataset.loaded === 'true'; + + if (contents.classList.contains('hidden')) { + contents.classList.remove('hidden'); + arrow.textContent = '▼'; + icon.textContent = '📂'; + + if (!isLoaded) { + try { + const items = await pagesOps.loadFolderContents( + state.org, + state.currentSite, + folderPath, + ); + + const childHTML = items + .sort((a, b) => { + if (!a.ext && b.ext) return -1; + if (a.ext && !b.ext) return 1; + return a.name.localeCompare(b.name); + }) + .map((item) => { + if (item.ext === 'html') { + const siteSelections = state.pageSelections[state.currentSite] || new Set(); + const isSelected = siteSelections.has(item.path); + const displayName = item.name.replace('.html', ''); + return ` +
+ +
+ `; + } + return ` +
+ + +
+ `; + }) + .join(''); + + contents.innerHTML = childHTML || '

Empty folder

'; + contents.dataset.loaded = 'true'; + + this.attachPagePickerListeners(); + } catch (error) { + contents.innerHTML = '

Failed to load

'; + } + } + } else { + contents.classList.add('hidden'); + arrow.textContent = '▶'; + icon.textContent = '📁'; + } + }); + }); + + document.querySelectorAll('.page-checkbox input[type="checkbox"]').forEach((checkbox) => { + checkbox.addEventListener('change', (e) => { + const { path } = e.target.dataset; + if (!state.pageSelections[state.currentSite]) { + state.pageSelections[state.currentSite] = new Set(); + } + + if (e.target.checked) { + state.pageSelections[state.currentSite].add(path); + } else { + state.pageSelections[state.currentSite].delete(path); + } + + const confirmButton = document.querySelector('.modal-confirm'); + if (confirmButton) { + const count = state.pageSelections[state.currentSite].size; + confirmButton.textContent = `Confirm (${count} selected)`; + } + }); + }); + }, + + closePagePicker() { + const modalContainer = document.getElementById('page-picker-modal'); + if (modalContainer) { + modalContainer.remove(); + } + state.showPagePicker = false; + state.pageSearchQuery = ''; + }, + + confirmPageSelection() { + this.closePagePicker(); + this.render(); + }, + + removePage(site, path) { + if (state.pageSelections[site]) { + state.pageSelections[site].delete(path); + } + this.render(); + }, +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => app.init()); +} else { + app.init(); +} + +export default app; diff --git a/tools/library-setup/app/state.js b/tools/library-setup/app/state.js new file mode 100644 index 0000000..8be8098 --- /dev/null +++ b/tools/library-setup/app/state.js @@ -0,0 +1,39 @@ +const state = { + mode: 'setup', + daToken: null, + githubUrl: '', + githubToken: null, + needsToken: false, + org: '', + repo: '', + site: '', + validating: false, + repositoryValidated: false, + blocks: [], + selectedBlocks: new Set(), + discovering: false, + blocksDiscovered: false, + libraryExists: false, + showPagePicker: false, + currentSite: '', + pageSearchQuery: '', + allPages: [], + loadingPages: false, + loadedFolders: {}, + pageSelections: {}, + processing: false, + processStatus: { + github: { org: '', repo: '', status: 'pending' }, + blocks: { total: 0, status: 'pending' }, + siteConfig: { status: 'pending', message: '' }, + blockDocs: { created: 0, total: 0, status: 'pending' }, + blocksJson: { status: 'pending', message: '' }, + errors: { count: 0, messages: [] }, + currentStep: '', + }, + processResults: [], + message: '', + messageType: 'info', +}; + +export default state; diff --git a/tools/library-setup/app/templates.js b/tools/library-setup/app/templates.js new file mode 100644 index 0000000..e2abe85 --- /dev/null +++ b/tools/library-setup/app/templates.js @@ -0,0 +1,603 @@ +export function appTemplate(content) { + return ` +
+
+

Library Setup

+

Generate block documentation with real content examples

+
+
+ ${content} +
+
+ `; +} + +export function messageTemplate(message, type) { + if (!message) return ''; + return ` +
+ ${message} +
+ `; +} + +export function modeToggleTemplate({ currentMode }) { + return ` +
+ + +
+ `; +} + +export function githubSectionTemplate({ + isValidated, + validating, + githubUrl, + message, +}) { + return ` +
+

Repository

+ +
+ +
+ + ${validating ? ` +
+
+

Validating...

+
+ ` : ''} + + ${message} +
+ `; +} + +export function tokenInputTemplate({ hasSavedToken }) { + return ` +
+
+
+
+ + +
+ +
+ +
+ +
+ + ${hasSavedToken ? ` + + ` : ''} +
+
+ +
+

Token Permissions

+

We only READ code (never write). Required:

+
    +
  • Fine-Grained Token (recommended):
    Repository → Contents → Read-only
  • +
  • Classic Token:
    repo scope (private repos only)
  • +
+

Public repos don't need a token

+ + Create Fine-Grained Token + +
+
+
+ `; +} + +export function siteSectionTemplate({ + org, + site, + message, + mode = 'setup', +}) { + const isRefreshMode = mode === 'refresh'; + + return ` +
+
+
+ + +
+
+ + + ${!isRefreshMode ? '

Please enter repoless site name as needed

' : ''} +
+
+ + ${message} +
+ `; +} + +export function blocksListTemplate({ + blocks, + selectedBlocks, + message, +}) { + const selectedCount = selectedBlocks.size; + const totalCount = blocks.length; + + return ` +
+
+

Select Blocks ${selectedCount} of ${totalCount} blocks selected

+ +
+ + ${message} + + +
+ `; +} + +export function pagesSelectionTemplate({ + allSites, + pageSelections, + message, + daToken, + org, + mode = 'setup', +}) { + const totalSelectedPages = Object.values(pageSelections).reduce((sum, set) => sum + set.size, 0); + const isRefreshMode = mode === 'refresh'; + const buttonDisabled = isRefreshMode && totalSelectedPages === 0; + + return ` +
+

Sample Pages ${isRefreshMode ? '' : '(Optional)'}

+

+ ${isRefreshMode + ? 'Select pages to extract real block examples from. Only blocks found in these pages will be updated.' + : 'Select pages to extract real block examples from. Skip to use placeholder content.'} +

+ + ${!daToken ? ` +
+ DA.live authentication required to browse pages. Please run this tool from within DA.live. +
+ ` : ''} + + ${message} + + ${allSites.map((site) => { + const basePath = `/${org}/${site}`; + return ` +
+

${site}

+ + + ${(pageSelections[site] || new Set()).size > 0 ? ` +
+ ${Array.from(pageSelections[site] || []).map((path) => { + const displayPath = path.replace(basePath, '') || '/'; + return ` +
+ ${displayPath} + +
+ `; + }).join('')} +
+ ` : ''} +
+ `; + }).join('')} + +
+ +
+
+ `; +} + +export function initialStatusTemplate({ + org, + repo, + blocksCount, + mode = 'setup', +}) { + return ` +
+
+ +
+
+

GitHub Repository

+
+
+

${org}/${repo}

+
+
+ + +
+
+

Blocks

+
+
+

${blocksCount}

+
+
+ + + ${mode === 'setup' ? ` +
+
+

Site Config

+
+
+

Pending

+
+
+ ` : ''} + + +
+
+

Block Docs

+
+
+

0/${blocksCount}

+
+
+ + +
+
+

Errors

+
+
+

0

+
+
+
+
+ `; +} + +export function processingTemplate({ + processStatus, +}) { + return ` +
+ ${processStatus.currentStep ? ` +

${processStatus.currentStep}

+ ` : ''} + +
+ +
+
+

GitHub Repository

+
+
+

${processStatus.github.org}/${processStatus.github.repo}

+
+
+ + +
+
+

Blocks Selected

+
+
+

${processStatus.blocks.total}

+
+
+ + + ${processStatus.siteConfig ? ` +
+
+

Site Config

+
+
+

${processStatus.siteConfig.message || 'Pending'}

+
+
+ ` : ''} + + +
+
+

Block Docs

+
+
+

${processStatus.blockDocs.created}/${processStatus.blockDocs.total}

+
+
+ + +
+
+

Errors

+
+
+

${processStatus.errors.count}

+ ${processStatus.errors.messages.length > 0 ? ` +
+ View errors +
    + ${processStatus.errors.messages.map((msg) => `
  • ${msg}
  • `).join('')} +
+
+ ` : ''} +
+
+
+
+ `; +} + +export function pagePickerModalTemplate({ + site, + items, + selectedPages, + loading, +}) { + // Helper to render an item + const renderItem = (item) => { + if (item.ext === 'html') { + // HTML file + const isSelected = selectedPages.has(item.path); + const displayName = item.name.replace('.html', ''); + return ` +
+ +
+ `; + } + // Folder + return ` +
+ + +
+ `; + }; + + return ` + + `; +} + +export function finalStatusTemplate({ processStatus, org, repo }) { + return ` +
+
+ +
+
+

GitHub Repository

+
+
+

${processStatus.github.org}/${processStatus.github.repo}

+
+
+ + +
+
+

Blocks Selected

+
+
+

${processStatus.blocks.total}

+
+
+ + + ${processStatus.siteConfig ? ` +
+
+

Site Config

+
+
+

${processStatus.siteConfig.message}

+ + View Config → + +
+
+ ` : ''} + + +
+
+

Block Docs

+
+
+

${processStatus.blockDocs.created}/${processStatus.blockDocs.total}

+ + View Library → + +
+
+ + +
+
+

Errors

+
+
+

${processStatus.errors.count}

+ ${processStatus.errors.messages.length > 0 ? ` +
+ View errors +
    + ${processStatus.errors.messages.map((msg) => `
  • ${msg}
  • `).join('')} +
+
+ ` : ''} +
+
+
+
+ `; +} + +export function resultsTemplate({ + processStatus, + processResults, +}) { + const successResults = processResults.filter((r) => r.success); + const errorResults = processResults.filter((r) => !r.success); + + return ` +
+

Library Setup Complete

+ + ${successResults.length > 0 ? ` +
+

Successfully Created (${successResults.length})

+
+ ${successResults.map((r) => ` +
+
+

${r.name}

+ + View in DA → + +
+
+ `).join('')} +
+
+ ` : ''} + + ${errorResults.length > 0 ? ` +
+

Errors (${errorResults.length})

+
+ ${errorResults.map((r) => ` +
+
+
+

${r.name}

+

${r.error}

+
+
+ `).join('')} +
+
+ ` : ''} +
+ `; +} diff --git a/tools/library-setup/library-setup.css b/tools/library-setup/library-setup.css new file mode 100644 index 0000000..67fef75 --- /dev/null +++ b/tools/library-setup/library-setup.css @@ -0,0 +1,1065 @@ +/* Library Setup - Clean styles inspired by DA.live Importer */ + +:root { + /* Colors - matching DA.live */ + --s2-gray-50: #f9fafb; + --s2-gray-200: #e5e7eb; + --s2-gray-600: #4b5563; + --s2-gray-900: #111827; + --s2-blue-200: #bfdbfe; + --s2-blue-900: #1e3a8a; + --s2-green-100: rgb(215 247 225); + --s2-green-200: rgb(202 255 164); + --s2-cyan-100: rgb(202 248 250); + --s2-blue-100: rgb(181 230 252); + --s2-red-100: rgb(255 214 209); + + /* Spacing */ + --spacing-100: 4px; + --spacing-200: 8px; + --spacing-300: 12px; + --spacing-400: 16px; + --spacing-500: 24px; + --spacing-600: 32px; + --spacing-800: 48px; + + /* Border radius */ + --s2-radius-100: 4px; + --s2-radius-200: 8px; + --s2-radius-300: 18px; + + /* Typography */ + --body-font-family: -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, sans-serif; + --s2-font-size-200: 14px; + --s2-font-size-400: 16px; + --s2-font-size-600: 24px; +} + +* { + box-sizing: border-box; +} + +body { + font-family: var(--body-font-family); + color: var(--s2-gray-900); + line-height: 1.6; + margin: 0; + padding: 0; +} + +.library-setup-container { + max-width: 1200px; + margin: var(--spacing-800) auto; + padding: 0 var(--spacing-400); +} + +.library-setup-header { + margin-bottom: var(--spacing-600); +} + +.library-setup-header h1 { + font-size: 32px; + line-height: 1.2; + margin: 0 0 var(--spacing-200); +} + +.library-setup-header p { + font-size: var(--s2-font-size-400); + color: var(--s2-gray-600); + margin: 0; +} + +/* Mode Toggle */ +.mode-toggle { + display: flex; + gap: var(--spacing-200); + margin-bottom: var(--spacing-600); + padding: var(--spacing-200); + background: var(--s2-gray-50); + border-radius: var(--s2-radius-200); + width: fit-content; +} + +.mode-btn { + padding: var(--spacing-200) var(--spacing-500); + background: transparent; + border: none; + border-radius: var(--s2-radius-100); + font-size: var(--s2-font-size-200); + font-weight: 500; + color: var(--s2-gray-600); + cursor: pointer; + transition: all 0.2s ease; +} + +.mode-btn:hover { + background: white; + color: var(--s2-gray-900); +} + +.mode-btn.active { + background: white; + color: var(--s2-blue-900); + font-weight: 600; + box-shadow: 0 1px 3px rgb(0 0 0 / 10%); +} + +/* Form Section */ +.form-section { + background: white; + padding: var(--spacing-300) 0; + margin-bottom: var(--spacing-300); +} + +.form-section h2 { + font-size: 20px; + margin: 0 0 var(--spacing-200); +} + +.form-section-subtitle { + font-size: var(--s2-font-size-200); + color: var(--s2-gray-600); + margin: 0 0 var(--spacing-500); +} + +/* Info Banner */ +.info-banner { + background: var(--s2-blue-200); + color: var(--s2-blue-900); + border-radius: var(--s2-radius-100); + padding: var(--spacing-300) var(--spacing-400); + margin-bottom: var(--spacing-400); + font-size: var(--s2-font-size-200); +} + +/* Form Elements */ +.form-row { + margin-bottom: var(--spacing-500); +} + +.repo-input-row { + position: relative; + display: flex; + align-items: center; + gap: var(--spacing-200); +} + +.validation-check { + color: #00773f; + font-size: 24px; + line-height: 1; + flex-shrink: 0; +} + +.org-site-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: var(--spacing-400); + margin-bottom: var(--spacing-400); +} + +.input-group { + display: flex; + flex-direction: column; +} + +.input-hint { + margin: var(--spacing-100) 0 0; + font-size: var(--s2-font-size-100); + color: var(--s2-gray-600); + font-style: italic; +} + +.readonly-input { + background: var(--s2-gray-100); + color: var(--s2-gray-600); + cursor: not-allowed; +} + +label { + display: block; + font-weight: 700; + font-size: var(--s2-font-size-200); + margin-bottom: var(--spacing-200); +} + +.checkbox-label { + display: flex; + align-items: flex-start; + gap: var(--spacing-200); + font-weight: 400; + cursor: pointer; + margin-bottom: 0; +} + +.checkbox-label input[type="checkbox"] { + margin-top: 2px; + cursor: pointer; +} + +.checkbox-label span { + flex: 1; + font-size: var(--s2-font-size-100); + color: var(--s2-gray-700); +} + +.label-hint { + font-weight: 400; + color: var(--s2-gray-600); + font-size: 13px; +} + +.token-input-section { + background: var(--s2-gray-50); + border: 1px solid var(--s2-gray-200); + border-radius: var(--s2-border-radius-200); + padding: var(--spacing-400); + margin-top: var(--spacing-300); +} + +.token-content { + display: grid; + grid-template-columns: 60% 40%; + gap: var(--spacing-500); + align-items: start; +} + +@media (width <= 900px) { + .token-content { + grid-template-columns: 1fr; + } + + .token-instructions { + border-left: none !important; + border-top: 1px solid var(--s2-gray-300); + padding-left: 0 !important; + padding-top: var(--spacing-400) !important; + } +} + +.token-form { + flex: 1; +} + +.token-form .form-row { + margin-bottom: var(--spacing-300); +} + +.token-form .form-row:last-child { + margin-bottom: 0; +} + +.token-form .button-row { + display: flex; + gap: var(--spacing-300); + align-items: center; + flex-wrap: wrap; +} + +.token-instructions { + padding-left: var(--spacing-500); + border-left: 1px solid var(--s2-gray-300); +} + +.token-instructions h4 { + margin: 0 0 var(--spacing-200) 0; + font-size: 14px; + font-weight: 600; + color: var(--s2-gray-900); +} + +.token-instructions p { + margin: 0 0 var(--spacing-200) 0; + font-size: 13px; + color: var(--s2-gray-700); +} + +.token-instructions ul { + margin: 0 0 var(--spacing-400) 0; + padding-left: var(--spacing-400); + list-style: none; +} + +.token-instructions li { + font-size: 13px; + color: var(--s2-gray-700); + margin-bottom: var(--spacing-200); + padding-left: var(--spacing-300); + position: relative; +} + +.token-instructions li::before { + content: "•"; + position: absolute; + left: 0; + color: var(--s2-gray-500); +} + +.token-instructions li strong { + color: var(--s2-gray-900); + font-weight: 600; + font-family: var(--mono-font-family); + font-size: 12px; +} + +.token-instructions .permission-note { + font-size: 12px; + color: var(--s2-gray-600); + font-style: italic; + margin-top: var(--spacing-300); +} + +.create-token-btn { + display: inline-block; + font-family: var(--body-font-family); + font-size: 15px; + font-weight: 700; + padding: 8px 24px; + line-height: 18px; + border: 2px solid #000; + color: #000; + background: white; + border-radius: var(--s2-radius-300); + text-decoration: none; + cursor: pointer; + transition: all 0.2s; + text-align: center; +} + +.create-token-btn:hover { + background: rgb(245 245 245); +} + +.token-input { + font-family: var(--mono-font-family); + letter-spacing: 0.5px; + font-size: 14px; + padding: 10px 12px; + background: white; + border: 1px solid var(--s2-gray-300); + border-radius: var(--s2-border-radius-200); + width: 100%; + transition: border-color 0.15s ease; +} + +.token-input:focus { + outline: none; + border-color: var(--s2-blue-500); + box-shadow: 0 0 0 3px rgb(59 99 251 / 10%); +} + +.token-input::placeholder { + color: var(--s2-gray-400); + letter-spacing: 1px; +} + +input[type="text"], +input[type="url"] { + font-family: var(--body-font-family); + display: block; + background: var(--s2-gray-50); + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-100); + line-height: 32px; + padding: 0 var(--spacing-300); + width: 100%; + font-size: var(--s2-font-size-200); + transition: border-color 0.2s; +} + +input[type="text"]:focus, +input[type="url"]:focus { + outline: none; + border-color: var(--s2-blue-900); +} + +input[readonly] { + background: var(--s2-gray-200); + cursor: not-allowed; +} + +/* Validation Success */ + +/* Removed validation-success styles - using subtle checkmark instead */ + +.derived-value { + background: white; + padding: var(--spacing-300); + border-radius: var(--s2-radius-100); +} + +.derived-value-label { + font-size: 12px; + color: var(--s2-gray-600); + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: var(--spacing-100); +} + +.derived-value-text { + font-weight: 700; + font-size: var(--s2-font-size-400); +} + +/* Blocks List */ +.blocks-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: var(--spacing-400); +} + +.blocks-header h2 { + margin: 0; + display: flex; + align-items: baseline; + gap: var(--spacing-200); +} + +.heading-annotation { + font-size: 16px; + font-weight: 400; + color: #676767; +} + +.blocks-list { + list-style: none; + padding: 0; + margin: 0; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: var(--spacing-300); +} + +.block-item { + background: var(--s2-gray-50); + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-100); + padding: var(--spacing-300); + transition: all 0.2s; +} + +.block-item:hover { + border-color: var(--s2-blue-900); +} + +.block-item.selected { + background: var(--s2-blue-200); + border-color: var(--s2-blue-900); +} + +.block-item label { + display: flex; + align-items: center; + gap: var(--spacing-200); + cursor: pointer; + margin: 0; + font-weight: 400; +} + +.block-item input[type="checkbox"] { + cursor: pointer; +} + +.block-name { + font-family: monospace; + font-size: 13px; +} + +/* Buttons (Import tool style) */ +button, +.button { + font-family: var(--body-font-family); + font-size: 15px; + font-weight: 700; + padding: 8px 24px; + line-height: 18px; + border: 2px solid #000; + color: #000; + border-radius: var(--s2-radius-300); + background: none; + cursor: pointer; + transition: all 0.2s; + text-align: center; +} + +.action, +button.action { + line-height: 1; + padding: 4px 8px; + font-size: 14px; + font-weight: 400; + border-radius: var(--s2-radius-100); + background: rgb(225 225 225); + border: 2px solid rgb(225 225 225); + color: #000; +} + +.action:hover, +button.action:hover { + background: rgb(200 200 200); + border: 2px solid rgb(200 200 200); +} + +button.accent, +button.primary, +.button.accent, +.button.primary { + background: #3b63fb; + border: 2px solid #3b63fb; + color: #fff; +} + +button:disabled { + background-color: #efefef; + border: 2px solid #efefef; + color: var(--s2-gray-700); + cursor: not-allowed; +} + +.button-group { + display: flex; + gap: var(--spacing-300); + margin-top: var(--spacing-500); +} + +/* Import Tool Style Cards */ +.import-card { + border-radius: 18px; + padding: var(--spacing-400); + border: none; + transition: all 0.2s; +} + +/* Fixed color scheme - each card has its own color */ +.import-card-blue { + background: rgb(181 230 252); +} + +.import-card-lime { + background: rgb(202 255 164); +} + +.import-card-green { + background: rgb(215 247 225); +} + +.import-card-cyan { + background: rgb(202 248 250); +} + +.import-card-purple { + background: rgb(221 214 254); +} + +.import-card-red { + background: rgb(255 214 209); +} + +/* Legacy colors for backward compatibility */ +.import-card-success { + background: rgb(215 247 225); +} + +.import-card-error { + background: rgb(255 214 209); +} + +.import-card-warning { + background: rgb(202 248 250); +} + +.import-card-info { + background: rgb(181 230 252); +} + +.import-card-total { + background: rgb(181 230 252); +} + +.import-card-remaining { + background: rgb(202 248 250); +} + +.import-card-header { + display: flex; + align-items: center; + gap: var(--spacing-200); + margin-bottom: var(--spacing-300); +} + +.import-card h3 { + margin: 0; + font-size: var(--s2-font-size-300); + font-weight: 600; +} + +.import-card-body { + /* No extra padding needed - parent card has padding */ +} + +.import-card-body p { + margin: 0 0 var(--spacing-200); + font-size: var(--s2-font-size-200); +} + +.import-card-value { + font-size: var(--s2-font-size-700); + font-weight: 700; + line-height: 1; + margin: 0; +} + +.repo-path { + overflow-wrap: break-word; + word-break: break-all; + font-size: var(--s2-font-size-200); +} + +.import-card-link { + display: inline-block; + color: #1e40af; + text-decoration: none; + font-size: 14px; + font-weight: 500; + margin-top: var(--spacing-200); +} + +.import-card-link:hover { + text-decoration: underline; +} + +/* Status Cards Grid */ +.status-cards-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: var(--spacing-400); + margin: var(--spacing-500) 0; +} + +.status-card { + background: white; + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-200); + padding: var(--spacing-400); + transition: all 0.3s; +} + +.status-card.status-pending { + background: var(--s2-gray-50); + border-color: var(--s2-gray-200); +} + +.status-card.status-processing { + background: var(--s2-blue-100); + border-color: #3b82f6; +} + +.status-card.status-complete { + background: var(--s2-green-100); + border-color: #10b981; +} + +.status-card.status-warning { + background: #fef3c7; + border-color: #f59e0b; +} + +.status-card.status-error { + background: var(--s2-red-100); + border-color: #ef4444; +} + +.status-card-header { + display: flex; + align-items: center; + gap: var(--spacing-200); + margin-bottom: var(--spacing-300); +} + +.status-icon { + font-size: 20px; + line-height: 1; +} + +.status-card h3 { + margin: 0; + font-size: var(--s2-font-size-200); + font-weight: 600; +} + +.status-card-body { + padding-left: 28px; +} + +.status-value { + font-size: var(--s2-font-size-200); + font-weight: 500; + margin: 0; + font-family: monospace; +} + +.status-value-large { + font-size: var(--s2-font-size-600); + font-weight: 700; + margin: 0; + line-height: 1; +} + +.status-message { + font-size: var(--s2-font-size-200); + margin: 0; + color: var(--s2-gray-600); +} + +.error-details { + margin-top: var(--spacing-300); + font-size: 13px; +} + +.error-details summary { + cursor: pointer; + color: #991b1b; + font-weight: 600; +} + +.error-list { + margin: var(--spacing-200) 0 0; + padding-left: var(--spacing-400); + list-style: disc; +} + +.error-list li { + margin-bottom: var(--spacing-100); + color: #991b1b; +} + +/* Status Banners (Different from status-message in cards) */ +.status-banner { + padding: var(--spacing-300) var(--spacing-400); + border-radius: var(--s2-radius-100); + margin: var(--spacing-400) 0; + font-size: var(--s2-font-size-200); +} + +.status-banner.info { + background: var(--s2-blue-200); + color: var(--s2-blue-900); +} + +.status-banner.error { + background: var(--s2-red-100); + color: #991b1b; +} + +.status-banner.success { + background: var(--s2-green-100); + color: #065f46; +} + +/* Loading Spinner */ +.loading { + display: flex; + flex-direction: column; + align-items: center; + padding: var(--spacing-600); +} + +.spinner { + width: 32px; + height: 32px; + border: 3px solid var(--s2-gray-200); + border-top-color: var(--s2-blue-900); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +.loading p { + margin-top: var(--spacing-300); + color: var(--s2-gray-600); +} + +/* Current Step Display */ +.current-step { + font-size: var(--s2-font-size-400); + font-weight: 500; + margin: var(--spacing-400) 0 0; + line-height: 1.6; +} + +/* Results - Block Cards */ +.results-section { + margin: var(--spacing-600) 0; +} + +.results-section h3 { + margin: 0 0 var(--spacing-400); + font-size: 18px; +} + +.block-cards { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: var(--spacing-400); +} + +.block-card { + background: white; + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-200); + padding: var(--spacing-400); + display: flex; + gap: var(--spacing-300); +} + +.block-card.success { + border-color: #10b981; + background: var(--s2-green-100); +} + +.block-card.error { + border-color: #ef4444; + background: var(--s2-red-100); +} + +.block-card-icon { + font-size: 24px; + font-weight: 700; + flex-shrink: 0; +} + +.block-card.success .block-card-icon { + color: #10b981; +} + +.block-card.error .block-card-icon { + color: #ef4444; +} + +.block-card-content { + flex: 1; +} + +.block-card-name { + font-family: monospace; + font-size: var(--s2-font-size-400); + margin: 0 0 var(--spacing-200); +} + +.block-card-link { + color: var(--s2-blue-900); + text-decoration: none; + font-size: 13px; +} + +.block-card-link:hover { + text-decoration: underline; +} + +.block-card-error { + font-size: 13px; + color: #991b1b; + margin: 0; +} + +/* Site Section */ +.site-section { + margin-bottom: var(--spacing-500); +} + +.site-section h4 { + font-size: var(--s2-font-size-400); + margin: 0 0 var(--spacing-300); +} + +.selected-pages-list { + margin-top: var(--spacing-300); +} + +.selected-page-item { + display: flex; + justify-content: space-between; + align-items: center; + background: var(--s2-gray-50); + padding: var(--spacing-200) var(--spacing-300); + border-radius: var(--s2-radius-100); + margin-bottom: var(--spacing-200); +} + +.page-path { + font-family: monospace; + font-size: 13px; +} + +.remove-page-btn { + background: transparent; + border: none; + color: #ef4444; + font-size: 20px; + cursor: pointer; + padding: 0; + line-height: 1; + width: 24px; + height: 24px; +} + +/* Modal */ +.modal-overlay { + position: fixed; + inset: 0; + background: rgb(0 0 0 / 50%); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; +} + +.modal { + background: white; + border-radius: var(--s2-radius-200); + padding: var(--spacing-600); + max-width: 600px; + width: 90%; + max-height: 80vh; + overflow-y: auto; + box-shadow: 0 4px 12px rgb(0 0 0 / 15%); +} + +.modal h2 { + margin-top: 0; +} + +.page-picker-controls { + display: flex; + align-items: center; + gap: var(--spacing-400); + margin-bottom: var(--spacing-400); +} + +.page-picker-controls input[type="text"] { + flex: 1; + margin: 0; +} + +.page-count { + font-size: var(--s2-font-size-200); + color: var(--s2-gray-600); + white-space: nowrap; +} + +.page-list { + max-height: 400px; + overflow-y: auto; + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-100); + padding: var(--spacing-400); + margin: var(--spacing-400) 0; +} + +/* Tree View Styles */ +.tree-view { + padding: 0; +} + +.tree-item { + margin: 0; +} + +.folder-item { + margin-bottom: var(--spacing-200); +} + +.folder-toggle { + display: flex; + align-items: center; + gap: var(--spacing-200); + width: 100%; + padding: var(--spacing-200); + border: none; + background: transparent; + cursor: pointer; + font-family: var(--body-font-family); + font-size: var(--s2-font-size-200); + text-align: left; + border-radius: var(--s2-radius-100); + transition: background 0.2s; +} + +.folder-toggle:hover { + background: var(--s2-gray-50); +} + +.folder-icon { + flex-shrink: 0; + font-size: 16px; +} + +.folder-name { + flex: 1; + font-weight: 500; +} + +.toggle-arrow { + flex-shrink: 0; + font-size: 12px; + transition: transform 0.2s; +} + +.folder-contents { + margin-left: var(--spacing-300); +} + +.folder-contents.hidden { + display: none; +} + +.folder-loading { + padding: var(--spacing-200) var(--spacing-300); + color: var(--s2-gray-600); + font-size: var(--s2-font-size-100); + font-style: italic; +} + +.file-item { + margin-bottom: 2px; +} + +.page-checkbox { + display: flex; + align-items: center; + gap: var(--spacing-200); + padding: var(--spacing-200); + cursor: pointer; + font-size: var(--s2-font-size-200); + transition: background 0.2s; + border-radius: var(--s2-radius-100); + width: 100%; +} + +.page-checkbox:hover { + background: var(--s2-gray-50); +} + +.page-checkbox.selected { + background: var(--s2-blue-200); +} + +.page-checkbox input[type="checkbox"] { + cursor: pointer; + flex-shrink: 0; +} + +.page-icon { + flex-shrink: 0; + font-size: 14px; +} + +.page-name { + flex: 1; + font-family: monospace; + font-size: 13px; +} diff --git a/tools/library-setup/library-setup.html b/tools/library-setup/library-setup.html new file mode 100644 index 0000000..7ea2b4f --- /dev/null +++ b/tools/library-setup/library-setup.html @@ -0,0 +1,13 @@ + + + + + + Block Library Setup + + + +
+ + + diff --git a/tools/library-setup/operations/github.js b/tools/library-setup/operations/github.js new file mode 100644 index 0000000..d889afc --- /dev/null +++ b/tools/library-setup/operations/github.js @@ -0,0 +1,80 @@ +import GitHubAPI from '../utils/github-api.js'; + +export function parseGitHubURL(url) { + try { + const urlObj = new URL(url); + const pathParts = urlObj.pathname.split('/').filter(Boolean); + + if (pathParts.length >= 2) { + return { + org: pathParts[0], + repo: pathParts[1].replace(/\.git$/, ''), + }; + } + } catch (error) { + // do nothing + } + return null; +} + +export async function validateRepository(org, repo, token = null) { + const api = new GitHubAPI(org, repo, 'main', token); + return api.validateAccess(); +} + +async function detectAutoBlocks(api) { + const autoBlocks = new Set(); + + try { + const scriptsContent = await api.getFileContent('scripts/scripts.js'); + if (!scriptsContent) return autoBlocks; + + const buildBlockRegex = /buildBlock\(['"`](\w+)['"`]/g; + const buildBlockMatches = Array.from(scriptsContent.matchAll(buildBlockRegex)); + buildBlockMatches.forEach((match) => { + autoBlocks.add(match[1]); + }); + + const importRegex = /\/blocks\/(\w+)\/\w+\.js['"`)\]]/g; + const importMatches = Array.from(scriptsContent.matchAll(importRegex)); + importMatches.forEach((match) => { + autoBlocks.add(match[1]); + }); + } catch (error) { + // do nothing + } + + return autoBlocks; +} + +export async function discoverBlocks(org, repo, token = null) { + const api = new GitHubAPI(org, repo, 'main', token); + const allBlocks = await api.discoverBlocks(); + + const excludedBlocks = new Set(['header', 'footer']); + + try { + const autoBlocks = await detectAutoBlocks(api); + if (autoBlocks.size > 0) { + // eslint-disable-next-line no-console + console.log('Auto-blocks detected from scripts.js:', Array.from(autoBlocks)); + autoBlocks.forEach((blockName) => excludedBlocks.add(blockName)); + } + } catch (error) { + // eslint-disable-next-line no-console + console.warn('Could not detect auto-blocks from scripts.js:', error.message); + } + + const filteredBlocks = allBlocks.filter((block) => !excludedBlocks.has(block.name)); + const excluded = allBlocks.filter((block) => excludedBlocks.has(block.name)); + + if (excluded.length > 0) { + // eslint-disable-next-line no-console + console.log(`Excluded ${excluded.length} block(s) from library:`, excluded.map((b) => b.name)); + } + + return filteredBlocks.map((block) => ({ + ...block, + isAutoBlock: false, + })); +} diff --git a/tools/library-setup/operations/library.js b/tools/library-setup/operations/library.js new file mode 100644 index 0000000..caf3025 --- /dev/null +++ b/tools/library-setup/operations/library.js @@ -0,0 +1,195 @@ +import { + registerLibrary, + fetchBlocksJSON, + updateBlocksJSON, + batchUploadBlocks, +} from '../utils/da-api.js'; +import { generateBlockHTML, generateBlocksJSON } from '../utils/doc-generator.js'; +import { extractExamplesWithProgress } from '../utils/content-extract.js'; +import { analyzeBlock } from '../utils/block-analysis.js'; + +export async function checkLibraryExists(org, site) { + try { + const blocksJSON = await fetchBlocksJSON(org, site); + if (blocksJSON && blocksJSON.data) { + return { + exists: true, + count: blocksJSON.data.total || blocksJSON.data.data?.length || 0, + }; + } + return { exists: false, count: 0 }; + } catch (error) { + return { exists: false, count: 0 }; + } +} + +export async function fetchExistingBlocks(org, site) { + const blocksJSON = await fetchBlocksJSON(org, site); + if (blocksJSON && blocksJSON.data && blocksJSON.data.data) { + return blocksJSON.data.data.map((block) => ({ + name: block.name, + path: block.path, + isAutoBlock: false, + })); + } + return []; +} + +export async function setupLibraryConfig(org, site) { + return registerLibrary(org, site); +} + +export async function extractBlockExamples(blockNames, sitesWithPages, onProgress) { + if (!sitesWithPages || sitesWithPages.length === 0) { + return {}; + } + + const totalPages = sitesWithPages.reduce((sum, s) => sum + s.pages.length, 0); + if (totalPages === 0) { + return {}; + } + + return extractExamplesWithProgress(sitesWithPages, blockNames, onProgress); +} + +export async function generateBlockDocs(blocks, examplesByBlock, api = null) { + return Promise.all(blocks.map(async (blockName) => { + const examples = examplesByBlock[blockName] || []; + + let analysis = null; + if (api && examples.length === 0) { + try { + analysis = await analyzeBlock(api, blockName); + } catch (error) { + // do nothing + } + } + + const block = { name: blockName, analysis }; + const html = generateBlockHTML(block, examples); + + return { + name: blockName, + html, + }; + })); +} + +export async function uploadBlockDocs(org, site, blocksToUpload, onProgress) { + return batchUploadBlocks(org, site, blocksToUpload, onProgress); +} + +export async function updateLibraryBlocksJSON(org, site, blockNames) { + let existingBlocks = []; + let existingOptions = null; + + try { + const existingBlocksJSON = await fetchBlocksJSON(org, site); + if (existingBlocksJSON?.data?.data) { + existingBlocks = existingBlocksJSON.data.data; + } + if (existingBlocksJSON?.options) { + existingOptions = existingBlocksJSON.options; + } + } catch (error) { + // do nothing + } + + const blockNamesSet = new Set(blockNames); + const preservedBlocks = existingBlocks.filter((block) => !blockNamesSet.has(block.name)); + + const newBlocks = blockNames.map((name) => ({ + name, + path: `https://content.da.live/${org}/${site}/library/blocks/${name}`, + })); + + const mergedBlocks = [...preservedBlocks, ...newBlocks]; + + const blocksJSON = generateBlocksJSON( + mergedBlocks.map((block) => ({ name: block.name, path: block.path })), + org, + site, + ); + + if (existingOptions) { + blocksJSON.options = existingOptions; + } + + return updateBlocksJSON(org, site, blocksJSON); +} + +export async function setupLibrary({ + org, + site, + blockNames, + sitesWithPages = [], + onProgress, + skipSiteConfig = false, + githubApi = null, +}) { + const results = { + steps: [], + success: true, + error: null, + }; + + try { + // Skip site config registration when refreshing existing documentation + if (!skipSiteConfig) { + onProgress?.({ step: 'register', status: 'start' }); + const registration = await setupLibraryConfig(org, site); + if (!registration.success) { + throw new Error(`Failed to register library: ${registration.error}`); + } + results.steps.push({ name: 'register', success: true }); + onProgress?.({ step: 'register', status: 'complete', registration }); + } + + let examplesByBlock = {}; + const totalPages = sitesWithPages.reduce((sum, s) => sum + s.pages.length, 0); + if (totalPages > 0) { + onProgress?.({ step: 'extract', status: 'start', totalPages }); + examplesByBlock = await extractBlockExamples(blockNames, sitesWithPages, onProgress); + results.steps.push({ name: 'extract', success: true }); + onProgress?.({ step: 'extract', status: 'complete' }); + } + + let blocksToProcess = blockNames; + if (skipSiteConfig && totalPages > 0) { + blocksToProcess = blockNames.filter((name) => { + const examples = examplesByBlock[name] || []; + return examples.length > 0; + }); + + if (blocksToProcess.length === 0) { + throw new Error('No blocks found in the selected sample pages. Please select pages that contain the blocks you want to update.'); + } + } + + onProgress?.({ step: 'generate', status: 'start', totalBlocks: blocksToProcess.length }); + const blocksToUpload = await generateBlockDocs(blocksToProcess, examplesByBlock, githubApi); + results.steps.push({ name: 'generate', success: true }); + onProgress?.({ step: 'generate', status: 'complete' }); + + onProgress?.({ step: 'upload', status: 'start' }); + const uploadResults = await uploadBlockDocs(org, site, blocksToUpload, onProgress); + results.steps.push({ name: 'upload', success: true, results: uploadResults }); + onProgress?.({ step: 'upload', status: 'complete', uploadResults }); + + if (!skipSiteConfig) { + onProgress?.({ step: 'blocks-json', status: 'start' }); + const blocksJsonResult = await updateLibraryBlocksJSON(org, site, blockNames); + if (!blocksJsonResult.success) { + throw new Error(`Failed to update blocks.json: ${blocksJsonResult.error}`); + } + results.steps.push({ name: 'blocks-json', success: true }); + onProgress?.({ step: 'blocks-json', status: 'complete' }); + } + + return results; + } catch (error) { + results.success = false; + results.error = error.message; + return results; + } +} diff --git a/tools/library-setup/operations/pages.js b/tools/library-setup/operations/pages.js new file mode 100644 index 0000000..fba2993 --- /dev/null +++ b/tools/library-setup/operations/pages.js @@ -0,0 +1,105 @@ +import state from '../app/state.js'; + +const DA_ADMIN = 'https://admin.da.live'; + +async function daFetch(url) { + const token = state.daToken; + + // eslint-disable-next-line no-console + console.log('Pages fetch:', { + url, + hasToken: !!token, + tokenPreview: token ? `${token.substring(0, 10)}...` : 'none', + }); + + const headers = {}; + if (token) { + headers.Authorization = `Bearer ${token}`; + } + + const response = await fetch(url, { headers }); + + // eslint-disable-next-line no-console + console.log('Pages response:', { + url, + status: response.status, + ok: response.ok, + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + return response.json(); +} + +export async function fetchSitePages(org, site) { + try { + const url = `${DA_ADMIN}/list/${org}/${site}/`; + const items = await daFetch(url); + + if (!Array.isArray(items)) { + return []; + } + + const result = items.filter((item) => !item.ext || item.ext === 'html'); + + // eslint-disable-next-line no-console + console.log(`Found ${result.length} items for ${org}/${site}`); + // eslint-disable-next-line no-console + console.log('Sample paths:', result.slice(0, 3).map((item) => item.path)); + + return result; + } catch (error) { + // eslint-disable-next-line no-console + console.error('Failed to fetch site items:', error); + throw error; + } +} + +export async function loadFolderContents(org, site, path) { + try { + const prefix = `/${org}/${site}`; + const relativePath = path.startsWith(prefix) ? path.substring(prefix.length) : path; + const url = `${DA_ADMIN}/list/${org}/${site}${relativePath}`; + + // eslint-disable-next-line no-console + console.log('Loading folder:', { + fullPath: path, + relativePath, + url, + }); + + const items = await daFetch(url); + + if (!Array.isArray(items)) { + return []; + } + + const result = items.filter((item) => !item.ext || item.ext === 'html'); + + // eslint-disable-next-line no-console + console.log(`Loaded folder contents for ${path}:`, result.length, 'items', result); + + return result; + } catch (error) { + // eslint-disable-next-line no-console + console.error('Failed to load folder:', error); + return []; + } +} + +export async function validateSite(org, site, token) { + try { + const response = await fetch( + `https://admin.da.live/list/${org}/${site}/`, + { + method: 'GET', + headers: { Authorization: `Bearer ${token}` }, + }, + ); + return response.ok; + } catch (error) { + return false; + } +} diff --git a/tools/library-setup/utils/block-analysis.js b/tools/library-setup/utils/block-analysis.js new file mode 100644 index 0000000..be69665 --- /dev/null +++ b/tools/library-setup/utils/block-analysis.js @@ -0,0 +1,234 @@ +const STRUCTURE_PATTERNS = { + hasImage: ['image', 'img', 'picture', 'photo'], + hasHeading: ['title', 'heading', 'headline'], + hasButton: ['button', 'btn', 'cta', 'action'], + hasMultipleItems: ['item', 'card', 'column'], +}; + +function detectStructureFeatures(classes) { + const features = {}; + + Object.entries(STRUCTURE_PATTERNS).forEach(([feature, patterns]) => { + features[feature] = classes.some((className) => ( + patterns.some((pattern) => className.includes(pattern)) + )); + }); + + features.isBEM = classes.some((c) => c.includes('__') || c.includes('--')); + + return features; +} + +function extractVariantsFromCSS(cssContent, blockName) { + if (!cssContent) return []; + + const variantPattern = new RegExp(`\\.${blockName}\\.(\\w+)`, 'g'); + const variants = new Set(); + const matches = cssContent.matchAll(variantPattern); + + Array.from(matches).forEach((match) => { + if (match[1] !== blockName) { + variants.add(match[1]); + } + }); + + return Array.from(variants); +} + +function extractDescriptionFromJS(jsContent) { + if (!jsContent) return null; + + const jsdocMatch = jsContent.match(/\/\*\*\s*\n\s*\*\s*(.+?)\s*\n/); + if (jsdocMatch) { + return jsdocMatch[1]; + } + + return null; +} + +function extractClassesFromCSS(cssContent) { + if (!cssContent) return []; + + const allClasses = new Set(); + const classMatches = cssContent.matchAll(/\.([a-zA-Z0-9_-]+)/g); + + Array.from(classMatches).forEach((match) => { + allClasses.add(match[1]); + }); + + return Array.from(allClasses); +} + +export function generateAutoDescription(blockName, structure, variants) { + const parts = []; + + if (structure.hasMultipleItems) { + parts.push('Multi-item layout'); + } + + const content = []; + if (structure.hasImage) content.push('images'); + if (structure.hasHeading) content.push('headings'); + if (structure.hasButton) content.push('buttons'); + + if (content.length > 0) { + parts.push(`with ${content.join(', ')}`); + } + + if (variants?.length > 0) { + parts.push(`Variants: ${variants.join(', ')}`); + } + + return parts.length > 0 + ? parts.join(' ') + : `${blockName.charAt(0).toUpperCase() + blockName.slice(1)} block`; +} + +function generateCellContent(blockName, cellIndex, structure) { + const parts = []; + + if (cellIndex === 0 && structure.hasHeading) { + parts.push('

Block Title

'); + } else if (structure.hasImage && cellIndex === 1) { + parts.push(''); + parts.push(' \'Placeholder\''); + parts.push(''); + } else if (structure.hasButton && cellIndex === structure.columns - 1) { + parts.push('

Call to Action

'); + } else { + parts.push(`

Column ${cellIndex + 1} content

`); + } + + return `
+ ${parts.join('\n ')} +
`; +} + +function generateStructuredPlaceholder(blockName, structure) { + const { rows, columns } = structure; + const rowElements = []; + + for (let r = 0; r < rows; r += 1) { + const cells = []; + for (let c = 0; c < columns; c += 1) { + cells.push(generateCellContent(blockName, c, structure)); + } + + rowElements.push(`
+${cells.join('\n')} +
`); + } + + return rowElements.join('\n'); +} + +function detectRowColumnStructure(jsContent) { + if (!jsContent) { + return { rows: 1, columns: 1 }; + } + + const querySelectorAllLinks = /querySelectorAll\(['"]a['"]\)/.test(jsContent); + if (querySelectorAllLinks && /links\.find/.test(jsContent)) { + const findMatches = (jsContent.match(/links\.find/g) || []).length; + if (findMatches >= 2) { + return { rows: findMatches, columns: 1 }; + } + } + + const hasRowIteration = /\.forEach\(\(row[,)]/i.test(jsContent) + || /\[\.\.\.block\.children\]\.forEach/i.test(jsContent) + || /querySelectorAll\(['"]:scope\s*>\s*div['"]\)/i.test(jsContent); + + const columnMatches = jsContent.match(/row\.children\[(\d+)\]/g); + let maxColumns = 1; + if (columnMatches) { + columnMatches.forEach((match) => { + const colIndex = parseInt(match.match(/\[(\d+)\]/)[1], 10); + if (colIndex + 1 > maxColumns) { + maxColumns = colIndex + 1; + } + }); + } + + const hasColumnIteration = /row\.querySelectorAll\(['"]:scope\s*>\s*div['"]\)/i.test(jsContent) + || /row\.children\]/i.test(jsContent) + || /child\.children\]/i.test(jsContent) + || /li\.children\]/i.test(jsContent) + || /\[\.\.\.row\.children\]/i.test(jsContent) + || /\[\.\.\.child\.children\]/i.test(jsContent) + || /\[\.\.\.li\.children\]/i.test(jsContent); + + if (maxColumns === 1 && hasColumnIteration) { + maxColumns = 2; + } + + return { + rows: hasRowIteration ? 2 : 1, + columns: maxColumns, + }; +} + +export async function analyzeBlock(api, blockName) { + const result = { + blockName, + description: null, + variants: [], + hasJS: false, + hasCSS: false, + structure: { + classes: [], + hasImage: false, + hasHeading: false, + hasButton: false, + hasMultipleItems: false, + isBEM: false, + rows: 1, + columns: 1, + }, + }; + + try { + const jsContent = await api.fetchFileContents(`blocks/${blockName}/${blockName}.js`); + if (jsContent) { + result.hasJS = true; + result.description = extractDescriptionFromJS(jsContent); + + const exportMatch = jsContent.match(/export\s+default\s+(?:async\s+)?function\s+(\w+)/); + if (exportMatch) { + const [, functionName] = exportMatch; + result.structure.functionName = functionName; + } + + const rowColStructure = detectRowColumnStructure(jsContent); + result.structure.rows = rowColStructure.rows; + result.structure.columns = rowColStructure.columns; + } + } catch (error) { + // do nothing + } + + try { + const cssContent = await api.fetchFileContents(`blocks/${blockName}/${blockName}.css`); + if (cssContent) { + result.hasCSS = true; + result.structure.classes = extractClassesFromCSS(cssContent); + result.variants = extractVariantsFromCSS(cssContent, blockName); + Object.assign(result.structure, detectStructureFeatures(result.structure.classes)); + } + } catch (error) { + // do nothing + } + + return result; +} + +export function generateBlockPlaceholder(blockName, analysis) { + const autoDescription = analysis.description + || generateAutoDescription(blockName, analysis.structure, analysis.variants); + + return { + description: autoDescription, + variants: analysis.variants, + placeholder: generateStructuredPlaceholder(blockName, analysis.structure), + }; +} diff --git a/tools/library-setup/utils/content-extract.js b/tools/library-setup/utils/content-extract.js new file mode 100644 index 0000000..6595a66 --- /dev/null +++ b/tools/library-setup/utils/content-extract.js @@ -0,0 +1,148 @@ +import state from '../app/state.js'; + +const DA_SOURCE = 'https://admin.da.live/source'; + +async function fetchPageHTML(org, site, pagePath) { + const token = state.daToken; + const htmlPath = pagePath.endsWith('.html') ? pagePath : `${pagePath}.html`; + const cleanPath = htmlPath.startsWith('/') ? htmlPath.slice(1) : htmlPath; + const url = `${DA_SOURCE}/${cleanPath}`; + + // eslint-disable-next-line no-console + console.log('Fetching page content:', url); + + const response = await fetch(url, { + headers: token ? { Authorization: `Bearer ${token}` } : {}, + }); + + if (!response.ok) { + // eslint-disable-next-line no-console + console.error(`Failed to fetch ${htmlPath}: ${response.status}`); + throw new Error(`Failed to fetch page ${pagePath}: ${response.status}`); + } + + const html = await response.text(); + // eslint-disable-next-line no-console + console.log(`Fetched ${htmlPath}, length: ${html.length} chars`); + + return html; +} + +function extractBlocksFromHTML(html, blockName) { + const instances = []; + const openTagRegex = new RegExp(`]*class="[^"]*\\b${blockName}\\b[^"]*"[^>]*)>`, 'gi'); + + // eslint-disable-next-line no-console + console.log(`Looking for blocks with class: ${blockName}`); + + const matches = Array.from(html.matchAll(openTagRegex)); + + matches.forEach((match) => { + const openTag = match[0]; + const attributes = match[1]; + const startPos = match.index + openTag.length; + + const classMatch = attributes.match(/class="([^"]*)"/); + const classes = classMatch ? classMatch[1].split(/\s+/) : []; + const variant = classes.find((cls) => cls !== blockName && cls !== 'block' && cls !== 'section') || ''; + + let depth = 1; + let pos = startPos; + const divOpenRegex = /]*>/g; + const divCloseRegex = /<\/div>/g; + + while (depth > 0 && pos < html.length) { + divOpenRegex.lastIndex = pos; + divCloseRegex.lastIndex = pos; + + const nextOpen = divOpenRegex.exec(html); + const nextClose = divCloseRegex.exec(html); + + if (!nextClose) break; + + if (nextOpen && nextOpen.index < nextClose.index) { + depth += 1; + pos = nextOpen.index + nextOpen[0].length; + } else { + depth -= 1; + if (depth === 0) { + const content = html.substring(startPos, nextClose.index).trim(); + if (content) { + instances.push({ + html: content, + variant, + }); + // eslint-disable-next-line no-console + console.log(` Found ${blockName} (${variant || 'default'}), content length: ${content.length}`); + } + break; + } + pos = nextClose.index + nextClose[0].length; + } + } + }); + + return instances; +} + +export async function extractExamplesWithProgress(sitesWithPages, blockNames, onProgress) { + const examplesByBlock = {}; + + blockNames.forEach((blockName) => { + examplesByBlock[blockName] = []; + }); + + const pagesList = sitesWithPages + .filter(({ pages }) => pages && pages.length > 0) + .flatMap(({ org, site, pages }) => pages.map((pagePath) => ({ org, site, pagePath }))); + + const totalPages = pagesList.length; + let processed = 0; + + await pagesList.reduce(async (previousPromise, { org, site, pagePath }) => { + await previousPromise; + + try { + if (onProgress) { + onProgress({ + current: processed + 1, + total: totalPages, + site, + page: pagePath, + }); + } + + const html = await fetchPageHTML(org, site, pagePath); + + blockNames.forEach((blockName) => { + const instances = extractBlocksFromHTML(html, blockName); + + instances.forEach((instance) => { + examplesByBlock[blockName].push({ + ...instance, + source: { + site, + page: pagePath, + }, + }); + }); + }); + + processed += 1; + } catch (error) { + // eslint-disable-next-line no-console + console.error(`Error extracting from ${pagePath}:`, error.message); + processed += 1; + } + }, Promise.resolve()); + + // eslint-disable-next-line no-console + console.log('Extraction complete. Summary:'); + blockNames.forEach((blockName) => { + const count = examplesByBlock[blockName].length; + // eslint-disable-next-line no-console + console.log(` ${blockName}: ${count} examples found`); + }); + + return examplesByBlock; +} diff --git a/tools/library-setup/utils/da-api.js b/tools/library-setup/utils/da-api.js new file mode 100644 index 0000000..260281a --- /dev/null +++ b/tools/library-setup/utils/da-api.js @@ -0,0 +1,398 @@ +import state from '../app/state.js'; + +const DA_ADMIN = 'https://admin.da.live'; + +async function daFetch(url, options = {}) { + const token = state.daToken; + + // eslint-disable-next-line no-console + console.log('DA Fetch:', { + url, + method: options.method || 'GET', + hasToken: !!token, + }); + + const headers = { + ...options.headers, + }; + + if (token) { + headers.Authorization = `Bearer ${token}`; + } + + const response = await fetch(url, { ...options, headers }); + + // eslint-disable-next-line no-console + console.log('DA Response:', { + url, + status: response.status, + statusText: response.statusText, + ok: response.ok, + }); + + return response; +} + +export async function fetchSiteConfig(org, site) { + const url = `${DA_ADMIN}/config/${org}/${site}`; + + try { + const response = await daFetch(url); + + if (response.status === 404) { + return null; + } + + if (!response.ok) { + throw new Error(`Failed to fetch config.json: ${response.status}`); + } + + return response.json(); + } catch (error) { + return null; + } +} + +export async function uploadBlockDoc(org, site, blockName, htmlContent) { + const path = `/${org}/${site}/library/blocks/${blockName}`; + const url = `${DA_ADMIN}/source${path}.html`; + + try { + const formData = new FormData(); + const blob = new Blob([htmlContent], { type: 'text/html' }); + formData.set('data', blob); + + const response = await daFetch(url, { + method: 'POST', + body: formData, + }); + + if (!response.ok) { + throw new Error(`Upload failed: ${response.status} ${response.statusText}`); + } + + return { + success: true, + path, + error: null, + }; + } catch (error) { + return { + success: false, + path, + error: error.message, + }; + } +} + +export async function fetchBlocksJSON(org, site) { + let path = `${org}/${site}/library/blocks.json`; + + const config = await fetchSiteConfig(org, site); + if (config?.library?.data) { + const blocksEntry = config.library.data.find((entry) => entry.title === 'Blocks'); + if (blocksEntry?.path) { + path = blocksEntry.path.replace('https://content.da.live/', ''); + } + } + + const url = `${DA_ADMIN}/source/${path}`; + + try { + const response = await daFetch(url); + + if (response.status === 404) { + return null; + } + + if (!response.ok) { + throw new Error(`Failed to fetch blocks.json: ${response.status}`); + } + + return response.json(); + } catch (error) { + return null; + } +} + +export async function updateBlocksJSON(org, site, config) { + let path = `${org}/${site}/library/blocks.json`; + + const siteConfig = await fetchSiteConfig(org, site); + if (siteConfig?.library?.data) { + const blocksEntry = siteConfig.library.data.find((entry) => entry.title === 'Blocks'); + if (blocksEntry?.path) { + path = blocksEntry.path.replace('https://content.da.live/', ''); + } + } + + const url = `${DA_ADMIN}/source/${path}`; + + try { + const formData = new FormData(); + const blob = new Blob([JSON.stringify(config)], { type: 'application/json' }); + formData.set('data', blob); + + const response = await daFetch(url, { + method: 'POST', + body: formData, + }); + + if (!response.ok) { + throw new Error(`Failed to update blocks.json: ${response.status}`); + } + + return { + success: true, + error: null, + }; + } catch (error) { + return { + success: false, + error: error.message, + }; + } +} + +export async function batchUploadBlocks(org, site, blocks, onProgress, batchSize = 5) { + const results = []; + let processed = 0; + + const batches = []; + for (let i = 0; i < blocks.length; i += batchSize) { + batches.push({ + blocks: blocks.slice(i, i + batchSize), + startIndex: i, + }); + } + + await batches.reduce(async (previousPromise, { blocks: batch, startIndex }) => { + await previousPromise; + + const processBatch = async (block, batchIndex) => { + const currentIndex = startIndex + batchIndex; + if (onProgress) { + onProgress({ + current: currentIndex + 1, + total: blocks.length, + blockName: block.name, + status: 'uploading', + }); + } + + const result = await uploadBlockDoc(org, site, block.name, block.html); + processed += 1; + + if (onProgress) { + onProgress({ + current: processed, + total: blocks.length, + blockName: block.name, + status: result.success ? 'success' : 'error', + }); + } + + return { + name: block.name, + ...result, + }; + }; + + const batchResults = await Promise.all(batch.map(processBatch)); + results.push(...batchResults); + }, Promise.resolve()); + + return results; +} + +export async function validateSite(org, site) { + const url = `https://admin.hlx.page/config/${org}/sites/${site}.json`; + + try { + const response = await daFetch(url, { method: 'HEAD' }); + return response.ok; + } catch (error) { + return false; + } +} + +export async function updateSiteConfig(org, site, config) { + const url = `${DA_ADMIN}/config/${org}/${site}`; + + try { + const formData = new FormData(); + formData.append('config', JSON.stringify(config)); + + const response = await daFetch(url, { + method: 'PUT', + body: formData, + }); + + if (!response.ok) { + throw new Error(`Failed to update config.json: ${response.status}`); + } + + return { + success: true, + error: null, + }; + } catch (error) { + return { + success: false, + error: error.message, + }; + } +} + +export async function registerLibrary(org, site) { + try { + let config = await fetchSiteConfig(org, site); + const blocksPath = `https://content.da.live/${org}/${site}/library/blocks.json`; + let wasCreated = false; + + if (!config) { + config = { + ':version': 3, + ':names': ['library'], + ':type': 'multi-sheet', + library: { + total: 1, + limit: 1, + offset: 0, + data: [ + { + title: 'Blocks', + path: blocksPath, + }, + ], + }, + }; + + const result = await updateSiteConfig(org, site, config); + return { + success: result.success, + created: true, + error: result.error, + }; + } + + const configType = config[':type']; + + if (configType === 'sheet') { + const existingData = config.data || []; + const existingColWidths = config[':colWidths']; + + config = { + ':version': 3, + ':names': ['data', 'library'], + ':type': 'multi-sheet', + data: { + total: existingData.length, + limit: existingData.length, + offset: 0, + data: existingData, + }, + library: { + total: 1, + limit: 1, + offset: 0, + data: [ + { + title: 'Blocks', + path: blocksPath, + }, + ], + }, + }; + + if (existingColWidths) { + config.data[':colWidths'] = existingColWidths; + } + + wasCreated = true; + } else if (configType === 'multi-sheet') { + if (!config.library) { + if (!config[':names'].includes('library')) { + config[':names'].push('library'); + } + + config.library = { + total: 1, + limit: 1, + offset: 0, + data: [ + { + title: 'Blocks', + path: blocksPath, + }, + ], + }; + + wasCreated = true; + } else { + const libraryData = config.library.data || []; + const blocksIndex = libraryData.findIndex((entry) => entry.title === 'Blocks'); + + if (blocksIndex === -1) { + libraryData.push({ + title: 'Blocks', + path: blocksPath, + }); + + config.library.data = libraryData; + config.library.total = libraryData.length; + config.library.limit = libraryData.length; + wasCreated = true; + } else { + const existingPath = libraryData[blocksIndex].path; + if (existingPath === blocksPath) { + return { + success: true, + created: false, + error: null, + }; + } + + libraryData[blocksIndex].path = blocksPath; + config.library.data = libraryData; + } + } + } else { + config = { + ':version': 3, + ':names': ['library'], + ':type': 'multi-sheet', + library: { + total: 1, + limit: 1, + offset: 0, + data: [ + { + title: 'Blocks', + path: blocksPath, + }, + ], + }, + }; + + wasCreated = true; + } + + if (!config[':version']) { + config[':version'] = 3; + } + + const result = await updateSiteConfig(org, site, config); + return { + success: result.success, + created: wasCreated, + error: result.error, + }; + } catch (error) { + return { + success: false, + created: false, + error: error.message, + }; + } +} diff --git a/tools/library-setup/utils/doc-generator.js b/tools/library-setup/utils/doc-generator.js new file mode 100644 index 0000000..bdc9d4d --- /dev/null +++ b/tools/library-setup/utils/doc-generator.js @@ -0,0 +1,137 @@ +import { generateBlockPlaceholder, generateAutoDescription } from './block-analysis.js'; + +export function generateBlockHTML(block, examples = []) { + const { name, variants = [], description = '', analysis = null } = block; + + const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1); + + let autoDescription = description || `${capitalizedName} block`; + let detectedVariants = variants; + let placeholderContent = `
+
+

Add your ${name} content here

+
+
`; + + if (analysis && examples.length === 0) { + const blockData = generateBlockPlaceholder(name, analysis); + autoDescription = description || blockData.description; + detectedVariants = analysis.variants && analysis.variants.length > 0 + ? analysis.variants + : variants; + placeholderContent = blockData.placeholder; + } + + // eslint-disable-next-line no-console + console.log(`Generating HTML for ${name}:`, { + examplesCount: examples.length, + variants: detectedVariants, + hasAnalysis: !!analysis, + }); + + const variantsToGenerate = detectedVariants.length > 0 ? detectedVariants : ['']; + + const examplesByVariant = {}; + examples.forEach((example) => { + const variant = example.variant || ''; + if (!examplesByVariant[variant]) { + examplesByVariant[variant] = []; + } + examplesByVariant[variant].push(example); + }); + + const blockSections = variantsToGenerate.map((variant) => { + const variantName = variant ? `${capitalizedName} (${variant})` : capitalizedName; + const classAttr = variant ? ` ${variant}` : ''; + + const variantExamples = examplesByVariant[variant] || []; + + let content; + if (variantExamples.length > 0) { + content = variantExamples[0].html; + // eslint-disable-next-line no-console + console.log(`Using extracted content for ${name} (${variant || 'default'})`); + } else { + content = placeholderContent; + // eslint-disable-next-line no-console + console.log(`Using ${analysis ? 'analyzed' : 'generic'} placeholder for ${name} (${variant || 'default'})`); + } + + return `
+ +
+${content} +
+
`; + }).join('\n'); + + return ` +
+
+${blockSections} +
+
+`; +} + +export function generateBlocksJSON(blocks, org, site) { + const dataSheet = blocks.map((block) => ({ + name: block.name, + path: block.path || `https://content.da.live/${org}/${site}/library/blocks/${block.name}`, + })); + + const optionsSheet = [ + { + key: 'style', + blocks: 'section-metadata', + values: 'xxs-spacing | xs-spacing | s-spacing | m-spacing | l-spacing | xl-spacing | xxl-spacing | dark | light | quiet', + }, + { + key: 'gap', + blocks: 'ALL', + values: '100 | 200 | 300 | 400 | 500 | 600 | 700 | 800', + }, + { + key: 'background', + blocks: 'section-metadata', + values: 'dark-grey=#676767 | light-grey=#EFEFEF | adobe-red=#FF0000 | blue=#0077B6 | green=#00A36C', + }, + { + key: 'spacing', + blocks: 'section-metadata', + values: '400 | 500 | 600 | 700 | 800', + }, + { + key: 'template', + blocks: 'metadata', + values: 'blog-post | product-page | feature-page', + }, + ]; + + return { + ':version': 3, + ':names': ['data', 'options'], + ':type': 'multi-sheet', + data: { + total: dataSheet.length, + limit: dataSheet.length, + offset: 0, + data: dataSheet, + }, + options: { + total: optionsSheet.length, + limit: optionsSheet.length, + offset: 0, + data: optionsSheet, + }, + }; +} diff --git a/tools/library-setup/utils/github-api.js b/tools/library-setup/utils/github-api.js new file mode 100644 index 0000000..607b491 --- /dev/null +++ b/tools/library-setup/utils/github-api.js @@ -0,0 +1,183 @@ +import { buildTreeAPIURL, buildContentsAPIURL } from './github-parser.js'; +import TokenStorage from './token-storage.js'; + +export default class GitHubAPI { + constructor(org, repo, branch = 'main', token = null) { + this.org = org; + this.repo = repo; + this.branch = branch; + this.token = token || TokenStorage.get(); + } + + static getHeaders(token = null) { + const headers = { + Accept: 'application/vnd.github.v3+json', + }; + + const authToken = token || TokenStorage.get(); + if (authToken) { + headers.Authorization = `Bearer ${authToken}`; + } + + return headers; + } + + async validateAccess() { + try { + const response = await fetch( + `https://api.github.com/repos/${this.org}/${this.repo}`, + { headers: GitHubAPI.getHeaders(this.token) }, + ); + + if (!response.ok) { + if (response.status === 404 || response.status === 403) { + return { + valid: false, + rateLimit: 0, + error: 'private', + needsToken: !this.token, + }; + } + throw new Error(`GitHub API error: ${response.status}`); + } + + const data = await response.json(); + const rateLimit = parseInt(response.headers.get('X-RateLimit-Remaining') || '0', 10); + + if (data.private && !this.token) { + return { + valid: false, + rateLimit, + error: 'private', + needsToken: true, + }; + } + + return { + valid: true, + rateLimit, + error: null, + }; + } catch (error) { + return { + valid: false, + rateLimit: 0, + error: error.message, + }; + } + } + + /** + * Discovers blocks in the repository + * @returns {Promise>} + */ + async discoverBlocks() { + try { + const url = buildTreeAPIURL(this.org, this.repo, this.branch); + const response = await fetch(url, { headers: GitHubAPI.getHeaders(this.token) }); + + if (!response.ok) { + if (response.status === 403) { + const remaining = response.headers.get('X-RateLimit-Remaining'); + if (remaining === '0') { + throw new Error('GitHub API rate limit exceeded. Please add a GitHub token.'); + } + } + throw new Error(`Failed to fetch repository tree: ${response.status}`); + } + + const data = await response.json(); + + // Filter for files in /blocks/ directory + const blockFiles = data.tree.filter((item) => item.path.startsWith('blocks/') && item.type === 'tree'); + + // Extract block names + const blocks = blockFiles.map((item) => { + const pathParts = item.path.split('/'); + const blockName = pathParts[1]; // blocks/{blockName}/... + return { + name: blockName, + path: item.path, + }; + }); + + // Remove duplicates + const uniqueBlocks = Array.from( + new Map(blocks.map((block) => [block.name, block])).values(), + ); + + return uniqueBlocks; + } catch (error) { + throw new Error(`Failed to discover blocks: ${error.message}`); + } + } + + /** + * Fetches file contents from GitHub + * @param {string} path - File path in repository + * @returns {Promise} File contents + */ + async fetchFileContents(path) { + try { + const url = buildContentsAPIURL(this.org, this.repo, path, this.branch); + const response = await fetch(url, { headers: GitHubAPI.getHeaders(this.token) }); + + if (!response.ok) { + throw new Error(`Failed to fetch file ${path}: ${response.status}`); + } + + const data = await response.json(); + + // Decode base64 content + if (data.content) { + return atob(data.content); + } + + throw new Error(`No content found for ${path}`); + } catch (error) { + throw new Error(`Failed to fetch file ${path}: ${error.message}`); + } + } + + /** + * Fetches multiple files in parallel + * @param {Array} paths - Array of file paths + * @returns {Promise>} + */ + async fetchMultipleFiles(paths) { + const results = await Promise.allSettled( + paths.map(async (path) => { + try { + const content = await this.fetchFileContents(path); + return { path, content, error: null }; + } catch (error) { + return { path, content: null, error: error.message }; + } + }), + ); + + return results.map((result) => (result.status === 'fulfilled' ? result.value : result.reason)); + } + + /** + * Gets raw file URL for direct access + * @param {string} path - File path in repository + * @returns {string} Raw file URL + */ + getRawFileURL(path) { + return `https://raw.githubusercontent.com/${this.org}/${this.repo}/${this.branch}/${path}`; + } + + /** + * Alias for fetchFileContents to match MCP API conventions + * @param {string} path - File path in repository + * @returns {Promise} File contents or null if not found + */ + async getFileContent(path) { + try { + return await this.fetchFileContents(path); + } catch (error) { + return null; + } + } +} diff --git a/tools/library-setup/utils/github-parser.js b/tools/library-setup/utils/github-parser.js new file mode 100644 index 0000000..e54d30f --- /dev/null +++ b/tools/library-setup/utils/github-parser.js @@ -0,0 +1,44 @@ +export function parseGitHubURL(url) { + if (!url) { + return { org: '', repo: '', error: 'URL is required' }; + } + + const cleanUrl = url.trim(); + + const patterns = [ + /^https?:\/\/github\.com\/([^/]+)\/([^/\s.]+)/i, + /^git@github\.com:([^/]+)\/([^/\s.]+)/i, + /^([^/]+)\/([^/\s.]+)$/, + ]; + + const matchResult = patterns.reduce((result, pattern) => { + if (result) return result; + + const match = cleanUrl.match(pattern); + if (match) { + const org = match[1]; + let repo = match[2]; + + repo = repo.replace(/\.git$/, ''); + + if (org && repo && /^[a-zA-Z0-9._-]+$/.test(org) && /^[a-zA-Z0-9._-]+$/.test(repo)) { + return { org, repo, error: null }; + } + } + return null; + }, null); + + if (matchResult) { + return matchResult; + } + + return { org: '', repo: '', error: 'Invalid GitHub URL format' }; +} + +export function buildTreeAPIURL(org, repo, branch = 'main') { + return `https://api.github.com/repos/${org}/${repo}/git/trees/${branch}?recursive=1`; +} + +export function buildContentsAPIURL(org, repo, path, branch = 'main') { + return `https://api.github.com/repos/${org}/${repo}/contents/${path}?ref=${branch}`; +} diff --git a/tools/library-setup/utils/token-storage.js b/tools/library-setup/utils/token-storage.js new file mode 100644 index 0000000..571b307 --- /dev/null +++ b/tools/library-setup/utils/token-storage.js @@ -0,0 +1,21 @@ +const STORAGE_KEY = 'library-setup-github-token'; + +const TokenStorage = { + get() { + return localStorage.getItem(STORAGE_KEY); + }, + + set(token) { + localStorage.setItem(STORAGE_KEY, token); + }, + + clear() { + localStorage.removeItem(STORAGE_KEY); + }, + + exists() { + return !!this.get(); + }, +}; + +export default TokenStorage; From fa456fa59dbf64f9a389e07883315546df45fd9d Mon Sep 17 00:00:00 2001 From: Kiran Murugulla Date: Wed, 28 Jan 2026 06:36:36 -0500 Subject: [PATCH 2/3] fix: lint issues , adding readme --- tools/library-setup/README.md | 38 ++++++++++++++ tools/library-setup/app/main.js | 51 ++++++++----------- tools/library-setup/app/state.js | 6 +++ tools/library-setup/images/refresh-mode.png | Bin 0 -> 160760 bytes tools/library-setup/images/setup-mode.png | Bin 0 -> 173764 bytes tools/library-setup/operations/library.js | 2 +- tools/library-setup/utils/content-extract.js | 2 +- tools/library-setup/utils/doc-generator.js | 6 ++- 8 files changed, 71 insertions(+), 34 deletions(-) create mode 100644 tools/library-setup/README.md create mode 100644 tools/library-setup/images/refresh-mode.png create mode 100644 tools/library-setup/images/setup-mode.png diff --git a/tools/library-setup/README.md b/tools/library-setup/README.md new file mode 100644 index 0000000..37bee60 --- /dev/null +++ b/tools/library-setup/README.md @@ -0,0 +1,38 @@ +# Library Setup Tool + +Generate block documentation for your DA.live library from GitHub repositories. + +## Setup Mode + +![Library Setup Mode](./images/setup-mode.png) + +Use this mode to create a new block library from scratch: + +- Enter your GitHub repository URL to discover blocks +- Private repositories supported - enter a GitHub token when prompted +- Select which blocks to include in your library +- Blocks are automatically analyzed for structure, variants, and features +- Placeholder documentation generated based on block code analysis +- Optionally select sample pages to extract real content examples +- Creates library structure in DA.live with blocks.json configuration +- Updates site configuration to register the library + +## Refresh Documentation Mode + +![Refresh Documentation Mode](./images/refresh-mode.png) + +Use this mode to update existing block documentation with new content: + +- No GitHub repository required - reads from existing library +- Enter your DA.live organization and site name +- Select which blocks to update +- Add new sample pages to extract fresh content examples +- Only updates blocks found in the selected pages +- Preserves existing blocks not being updated +- Maintains all library configuration settings + +## Requirements + +- Must be run from within DA.live for authentication +- GitHub token needed only for private repositories (can be saved for future use) +- Sample pages optional - tool generates intelligent placeholders without them diff --git a/tools/library-setup/app/main.js b/tools/library-setup/app/main.js index 8371d38..c5540db 100644 --- a/tools/library-setup/app/main.js +++ b/tools/library-setup/app/main.js @@ -77,7 +77,7 @@ const app = { isValidated: state.repositoryValidated, validating: state.validating, githubUrl: state.githubUrl, - message: templates.messageTemplate(state.message, state.messageType), + message: state.errors.github ? templates.messageTemplate(state.errors.github, 'error') : '', })); if (state.needsToken && !state.repositoryValidated) { @@ -91,7 +91,7 @@ const app = { sections.push(templates.siteSectionTemplate({ org: state.org, site: state.site, - message: templates.messageTemplate(state.message, state.messageType), + message: state.errors.site ? templates.messageTemplate(state.errors.site, 'error') : '', mode: state.mode, })); } @@ -100,7 +100,7 @@ const app = { sections.push(templates.blocksListTemplate({ blocks: state.blocks, selectedBlocks: state.selectedBlocks, - message: state.mode === 'refresh' ? '' : templates.messageTemplate(state.message, state.messageType), + message: state.errors.blocks ? templates.messageTemplate(state.errors.blocks, 'error') : '', })); } @@ -108,7 +108,7 @@ const app = { sections.push(templates.pagesSelectionTemplate({ allSites: this.getAllSites(), pageSelections: state.pageSelections, - message: state.mode === 'refresh' ? '' : templates.messageTemplate(state.message, state.messageType), + message: state.errors.pages ? templates.messageTemplate(state.errors.pages, 'error') : '', daToken: state.daToken, org: state.org, mode: state.mode, @@ -151,6 +151,7 @@ const app = { if (githubUrlInput && !state.repositoryValidated) { githubUrlInput.addEventListener('input', (e) => { state.githubUrl = e.target.value; + state.errors.github = ''; }); githubUrlInput.addEventListener('blur', (e) => this.handleGitHubUrlChange(e.target.value)); @@ -167,6 +168,7 @@ const app = { if (orgInput) { orgInput.addEventListener('input', (e) => { state.org = e.target.value.trim(); + state.errors.site = ''; }); } @@ -174,6 +176,7 @@ const app = { if (siteInput) { siteInput.addEventListener('input', (e) => { state.site = e.target.value.trim(); + state.errors.site = ''; }); } @@ -234,6 +237,7 @@ const app = { state.mode = newMode; state.message = ''; state.messageType = 'info'; + state.errors = { github: '', site: '', blocks: '', pages: '' }; if (newMode === 'refresh') { state.repositoryValidated = false; @@ -296,15 +300,13 @@ const app = { if (!result.valid) { if (result.error === 'private' && result.needsToken) { state.needsToken = true; - state.message = 'Unable to access repository. If this is a private repository, please enter a GitHub token below.'; - state.messageType = 'error'; + state.errors.github = 'Unable to access repository. If this is a private repository, please enter a GitHub token below.'; state.validating = false; this.render(); return; } - state.message = result.error === 'private' ? 'Unable to access repository with provided token.' : result.error; - state.messageType = 'error'; + state.errors.github = result.error === 'private' ? 'Unable to access repository with provided token.' : result.error; state.validating = false; this.render(); return; @@ -337,8 +339,7 @@ const app = { const token = tokenInput?.value.trim(); if (!token) { - state.message = 'Please enter a GitHub token'; - state.messageType = 'error'; + state.errors.github = 'Please enter a GitHub token'; this.render(); return; } @@ -361,8 +362,7 @@ const app = { async handleLoadExistingBlocks() { if (!state.org || !state.site) { - state.message = 'Please enter both organization and site name'; - state.messageType = 'error'; + state.errors.site = 'Please enter both organization and site name'; this.render(); return; } @@ -374,8 +374,7 @@ const app = { const blocks = await libraryOps.fetchExistingBlocks(state.org, state.site); if (blocks.length === 0) { - state.message = 'No library found at this location. Please run "Library Setup" first to create the library.'; - state.messageType = 'error'; + state.errors.site = 'No library found at this location. Please run "Library Setup" first to create the library.'; state.discovering = false; this.render(); return; @@ -385,12 +384,10 @@ const app = { state.blocksDiscovered = true; state.discovering = false; state.selectedBlocks = new Set(blocks.map((b) => b.name)); - state.message = ''; - state.messageType = 'info'; + state.errors = { github: '', site: '', blocks: '', pages: '' }; this.render(); } catch (error) { - state.message = `Unable to load library: ${error.message}. Please run "Library Setup" first to create the library.`; - state.messageType = 'error'; + state.errors.site = `Unable to load library: ${error.message}. Please run "Library Setup" first to create the library.`; state.discovering = false; this.render(); } @@ -413,8 +410,7 @@ const app = { this.render(); } catch (error) { - state.message = `Block discovery failed: ${error.message}`; - state.messageType = 'error'; + state.errors.github = `Block discovery failed: ${error.message}`; state.discovering = false; this.render(); } @@ -422,16 +418,14 @@ const app = { async handleStartProcessing() { if (!state.daToken) { - state.message = 'DA.live authentication required. This tool must be run from within DA.live.'; - state.messageType = 'error'; + state.errors.pages = 'DA.live authentication required. This tool must be run from within DA.live.'; this.render(); return; } const siteValid = await this.validateSite(state.org, state.site, state.daToken); if (!siteValid) { - state.message = `Site "${state.org}/${state.site}" not found in DA.live. Cannot create library.`; - state.messageType = 'error'; + state.errors.site = `Site "${state.org}/${state.site}" not found in DA.live. Please verify the site name.`; this.render(); return; } @@ -622,16 +616,14 @@ const app = { async openPagePicker(site) { if (!state.daToken) { - state.message = 'DA.live authentication required. This tool must be run from within DA.live.'; - state.messageType = 'error'; + state.errors.pages = 'DA.live authentication required. This tool must be run from within DA.live.'; this.render(); return; } const siteValid = await this.validateSite(state.org, site, state.daToken); if (!siteValid) { - state.message = `Site "${state.org}/${site}" not found in DA.live. Please verify the site name.`; - state.messageType = 'error'; + state.errors.pages = `Site "${state.org}/${site}" not found in DA.live. Please verify the site name.`; this.render(); return; } @@ -654,8 +646,7 @@ const app = { ? 'Authentication failed. Please ensure you are logged in to DA.live.' : `Failed to load pages: ${error.message}`; - state.message = errorMsg; - state.messageType = 'error'; + state.errors.pages = errorMsg; state.loadingPages = false; state.showPagePicker = false; this.render(); diff --git a/tools/library-setup/app/state.js b/tools/library-setup/app/state.js index 8be8098..547f387 100644 --- a/tools/library-setup/app/state.js +++ b/tools/library-setup/app/state.js @@ -34,6 +34,12 @@ const state = { processResults: [], message: '', messageType: 'info', + errors: { + github: '', + site: '', + blocks: '', + pages: '', + }, }; export default state; diff --git a/tools/library-setup/images/refresh-mode.png b/tools/library-setup/images/refresh-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..37a5959cedad6d03823d352a11b2dd3b2623b150 GIT binary patch literal 160760 zcmeFZcT`i~_AeS63JQJ$gbqsRT}r3|eu2=W7$5;cKnXn*CG_go2BCy1B~lL#v9{}H{QALtnBPP_iA(Q&zgI!x!V3c{rer@ z4^u-EL%^w10Kh565Ab{W)U=7d{_R^5xbqjD|MA&2eMX?O#3}HDLG^fXZ z(UO1D=>MXx|4oMk-V0>Jx%D@VwXxD?(5?(x(&K-k(f%KlgfAjj= z{Vnk&H$S*F<9dPd7XSnRtN=y;y}zHIanEpfiva-jLjd4R%0K`$|`%gd7 zX8^$E#{j^Kk$?LA6O((+Sm%Facb0KJ?d}c$e69chSnUA-j<)~+i^D&{7^i# zPcw=}$Hw0?gSeHf?ff51h+xy}d6glmYU+9cLBS8}8XDh-s%W5H0+%0C#q{BiI*Uv9 z#SL8dN}9SDtOOV${6m!g7KEV+3|36%&R<}J-T*S*l+&k~E}S`kmVxCdz!}CZ@XT3u z4o+d1)j5#jpVp~GqssniU?mmj2X$|lY_NM=+i5s1i{JmA1zchzVx#~9bODEE z|K#x>>OTnl2Z8?|BXC|LY#CA)Yc)2`tsQLmqs%whouCDD z7r*1cEvDJVXJ2_dl$w;v#Sh0qQ7sMqrjWh<-+=RWAwMOQfAL?~c<1%=H(=T5z^CH4 zR=G#O)2nVPs+ybh?#vmmM!QOUmzi#@QSrQOzH~DDFMObhNp@>3T0_~-D@$5hYRchj z6xa5PvQK(fq}o1rI;I@4%7bSDlKb75@4XV%~8^(S^S;wr1g|5wGfw*J83y zDHIA5)>YN>cFcuqR+e?X&eN=RmdDv77`}hP!s?!3nDa!L?UDhGifxrimyi(Z70x7i z#iP+7L=I)uEMK!R4ptcma~LoGa;%!hwS!oevr;`8yV!lOc!W(#@|WI{%ll8dcDLg0 zPwKvn(rdCT-3|==(U|$N=fJ?dYx29YmA~ZM+&|5cW^bc~4P%A)(RvYReXRRbT>#XA zB=!AT4Zv9rQ;@;cC;Ow>NCRYL8|=4TndeO|xa0oln1mzLP$6b*lK$@BKp8m^>!HnD zG{xJrk!z~2e}UIy4**P@)$WDbYFr4Xa3mVT;=z7ak`^$Xe^k6)7|Q#Mp}0)v{MyW4 z5L34yUMCoz$7d(wlp&z!@9VTa!TUz8+aH^#WL2Y+APCuhld0E@JJ}yZ`#pgmUPZym z+$!U^fy$4was8wYYjHuo05=TTQ2qc**?V|Ln>+G{_ohlK(x=F_N4bDF&FsEz0)T=d%-?))jy<+%E6hToo8-;OW zu)K#hX0s9zLiw zwR{>Kdb>GvYZY2qruhCnzA$pn0}-va0gwTo_QkNk>-H_aafR!ob>HkGDn^5pgemu| zq!bs~yt;uqcu{NP8^z}@RBfD(w;=Y9mh@!hW`);_N)-D9z}26A(Y@g)T&Hv}_HeRf zsy2SXDeGElnr!Ln%Cdg+Ee1#Uc2Q=Y28lp^*Z?mdaRD%i{lzf9mTQd9AMhyA2LeBi zua#}H*R9)sdDfXYrTq#6UXS_T8Lb&^m>q|*I2lY+kiCPTjgF`XL6eE07kr~c%Z z`X$rP|33W}+wV-x6L_A*~OA-*F^kD1wN7DzX820 zAAbXy(|-fxyT;5f-^W2qex6bLCF*jQdrq zqLPg(i!}}Xs!t2Jx5YVBC8YhNT-nSy+b(4vdhcqNkL0!4L|4^v)RcaqM*&hTgEF8�j}( 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 BGFJcq literal 0 HcmV?d00001 diff --git a/tools/library-setup/images/setup-mode.png b/tools/library-setup/images/setup-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3ecfbaf96fe2b18ed153d9f187216fc8164a0d GIT binary patch literal 173764 zcmeFZcUY54w4YXFRFSO^5FsEWA#?-;A)!O);1;(CL2v`oLel_& zB!pf=6X{(DA#|j75Ri^~v-fw-?|k1M=bq<2&-vq?-`y*D->jKgGw+%;Yi8b=wI)A? ze|!d9d8nK;_kS@p zGymn>=YQn*GtJiC+vCsQ{{)!j?hXA}IsibE`cG*7chNsTaqzZh5`1A^LSD>=GnwUN z;+#+afs6f#+x-K-^C#}-n6~ zZ@(~;_?UdTGe1uOE&vC>F92PD8^9hQ&BWvYw*j&M#UEn;O~9Gcr~mvi;VkpZa-N0d z>{*rz=g$3fp7jDN>%|KfFJ5B1dgT%uJKM#JSGcaQb8rHIK-SCL*SI*ZUF8IF{#nSW zGt4|^S$<|=`I+<5#Y>$3$ME9=fc^YWvF8D2P6+@`v!6P{e(Fav;09CNr_Y@F6aKxr zXV0Jc=^V??r%zpArlYR_PMu-0e)i&ppDtZsISsfBICYv?ho8=|pTByG$*AnLdq!}i zZEW1z1lrGB+}8zQ2$T2yf^x>5&x^rI%J-jmd1K=7StZl*3W`3yrDcr+gF-5HVa=Mq z3)?q+(b9c6BdYD-=$F04d>9{-iNBcncUG9naQY0(PiN1aXQuwj&g?6vPcwNt_opEL z*)>v?hGPYPeS?w4@GKTZpVZJqlu3Sebs zV&-56XaJ7fYhMJM=i6yjS$zHTal6tV&-?D!XZU}}{5$$@nf$E~fA@yJhl2mRhsTlX z{G0MOaW8Ov?>bd@^`9aE+y6!*QJ>EuqT&8r(v-0^*WLp=9A7*wiz?9P_AJW#ZR6tbk>5`)XIgt2krHsb0z=Mvu+tF)7v`xWRMVL)#CH$EJS z@(mjK*EFy8IASu&OY(`j_d0a9O-VSl0G}Cs+wSH*&m7+OU;F-5p7v({tpfh9+DBqz zILOj$&!q9n(B1ST7d;Pz19hmxEsL%?7r2|n+e9wROO7PDo=>UR5BV2G__E3wgs-_j z+m-(&t7TwRAdpltW%n-fb@ZKw`94uU0M(s_A10UGLLW;sU-WI3ok59NMoLxe-n%M6 zt31$_EfLrUS~jE@>KMUpnq96K|L4Y44(+Hhvz;J$JYh&+)F?`wKy6D`Ioo-DUnBF8*zj|9hxpc833Kn)r{EJQIUuV%+yd`%ZRsj}5~Bf4HHYy^7eT;f0!HB!{R>#+yMUXDE$S-eEPRZ3z+yL0Xg8C$$d zH^!xKgd)j6o{a(-)72Tj~s6)IM56Wx3MF-duaUkB+_uX#x?xfU1+ z(ve3tQ;@mK0^(U$Q~INH1BvOIlrcZoH_t}Yll9)^n~ZgB>KS!XS_TBPV>g^@s^(Uw z*7q+Qnr+k#!5q}V7Psq4vTmBdJDam3w}tunF7;m*!c|-Dt6=)`h>c)`!TE+hUkAU` zgw=_~sqb2|lZ)XkCYN%Ie*hwjqalWMWBTj(7;N-O>WZjI7Txk2w|04f``Oh=PMY@b z2)KwNMdJRBi*0!wL!|`CZQuPdZUU84JlK$s7$^M1^TY5y9RWljg3`-ZKpUu_BL6tT zq0vt^(`q3=oD$iNT)Ww0Bqs{1G@nC*Pcjn@yIw^r%6@!1raq%z`hiAZt*{n;vYTLB zM-zDsM}jtGzQ5h#)RFpP(!+b(@yWiv!<%Jq-N8roV(SWu<$2HJNx5BKqzw%%MmQ-g z7~+H#ada_wYtC`|O$|%(-q`PY5gwHA-Cv^)v|(OvX`pAzp*y(D98!qj$e5F)N*Tct zW;d=pLd-(u1L0s*ud-4lsOh>g$P=O?YA)l9(Kc+L2KBW5SOylbRh~%R>L**^!X*;@n*oHPuAe^S`3BSK34>UL4tKHWv9Mf2oa=XxE z>f09(7M>vrha;(0UlTe=rP?YSVb1eXce_$DBfT?)JodmXia0&tkJ}?40X%+c-1Y8p zDo0WP0^@D|W_88u=G9GIkI^WUD#2J~06x?GYjKN!2&vslWJT=;a8!(Bsz zmn#E!f|LY=a8t*ZW7tn&&%TFLvnNnJy}Sl4yJ|eB=|aKjTCN+J))c(V%fqJAD%S%l zTDe9H7xtI4&l(A;ayr{%8~Re_;VWA3%`UDAbIkKg?vI+_}ckC=6eRz zFzn#SyyuhaE|LHmq<04e#*TVI4C+PutO~a#te?2bym6z`s@L?g%l<%7w>`8r3>0%0 z(6Fy7#$veDW3)3w;agHj!M>Gz82g?-NRHh@H zZ-*+D!={7vklSLb;!hA+q|nT{uU?zl^Xr~)>lNRFNyOq_tG_6Sa$vsr`-%+MEgS6y z+)WheGE(Sup9Tse-N9f44FfY^xzI`LmR3ejGl*$vYtj65H@4A3 zlRp=_L-lc-4FCQTDvWpI==#PxR|l_3UF^1O1rKtJyzB(x_cgQXk~KCZDQNFvTBA=o zjn@+@k_tz>Z_sCgLU6c!Foc)Lbs@!y*9d5Yp*JKSfh#bTm+d#bzb_`!l|x5F#PiF| z7WA5y1a=oBc>JVdB(eK|_o_uAWL`xpuwd^viHuQ=fo#-`iLF(0Bn=&hNGd2O zRAz@?K=}_S&)7R>YnM|D&POmIykSE=v~|IKd(dX$kCrS$M2^Fzs)<=$RYg|qTH$Xl zNn^qp;af0|0&^W5>&2{VgLXCWak$kp-2xZxio3T)X;W>6rt67rzb)K(qazvB>2)$2 z6co}$Z?A-^k-VSz-rP%Woa&SQ0q`M2Z%AXFp8EkP(Ky75$B^~PYL`b=)|rhldk5EB ziwvVAYqwZH9LWp)g9xgdvDO5H?q?l2w!t&$5mcDuw83uV(92)hp~t5`Uyx+-ptg)O zh}V$+HRpfE8KUKcvYy* ztbcu>lZ;n2O)Hpmt3%NtTI=FpsWBxNqlJL*QaL=%SMdQMvVEbBgv*MBQGnc5hQIS- z*1oxq^xa)8`j!+>!Lwqz;d?OWyOR~UvOop~1**T%+7h^F{H<3Xjf~zi_!w{UaCxD! z9_=T#OGgyf%&i{A8fn~n!-aJP4wM6->k4{0O?b_1_H&e$T#5wWKHh1QToD_f^oIt-v$pAMp(+lc) zB|r5+-^*GnH&sf?vt+E4b)EIQ(24YP|L@akz&}^ ze*jk63x5C}qn=Gq1{V(>D=x|DIa!Kg-3m<1ZPOoOOEAEc5t`$^(^5U=~+hP@F9 zmNT!W_>!&B@=xdad#e4k76izZewASOY)wHr{xV5#0U~7E-$quQ(Io%S-ikVl-?lt@f%-vNmJJ%JgcT-q1 zq2bnRlr)J%iX049?pS4Ub9cS?a_N_Bv)tOL8Jv?@3okE0SJMsp{_bAWyoQrGDfR8te%VAEoS`7~N_W+az$ts$XuO)UyUNxoYDXb;crTs(YHRF@M=&E^xQBOF0LwtMSnYV<~Yu<>-aSb3} z_oR;tbxh_`F2u186=PBd-VhLXQO&yVT$cmXTDI;(PTc5{Ozi-<+GUBm ziK;}QOG!w1 z1v6*#0Uh*f2UJ5C?xGSM)tm7_-Z3j8xbLa#MQokdvr2ksR|o8{`AW!Fg{(0M3kUc> z@5l&A=>^`-ZE2nn2}T$q6`Cj5IdX#TT0hO@&y}q_HiG>CT+KZ?_0gHYRr-vm`K|e` z^#ZaQlbYP1;>iWVQ*E^^+_;Ga>~g5(0eJL|L_c5TX}lU_h4D4hIRC9-#YmpG5ZveO z*RAGxcVn`71U2A-9UZ7;h7z#b_nau*PO0uFO_V8?6H2THAqujlN!k6uWwaeUC^UY? zSMMowN(i)t9UIWDxng@%!`jYpDweFNDRDm3_l9-m9^DAy735qe;@XF`SF8vl5Cv7gV#2^eq}a1Tpv;=Q?x}^AGQU>1?X&&RSJej zN&H85R2~$6SQKURmN^UG%2KMGU7a?m>p8(&l1Fe|MzC{&KF!h=6zy%Nb%sYI_YVL{ z;0ItsO8gZU1(Xvg@ad+^-tp+Fx*V^@O1`N*msI>EL&zm4r#eta4g>Y|T-?^Ao zO!D=dfmr(KGU9cCuq}-f%an|I7kYz(Hu=1IJK6 zZ8yj=LlkTT+sS;as5YE+d5z*kB$<~r*sbgdq6!M4Jc~;gX54}3AQGAM?bVBl&_+e8 z+=&~v%7)rr6}Q~cyvPzE{VnJ_}P2g>;uh*{jFz7)nyE z6~riQ%MZvsEHL>2kaP>vLU~08A(m_KD<0@|laIa@yBJC$tC^R%`72ru6lkS6lVU#a zw!{4vx=@hDUE!4QeZjh45mlWhw&s&i7AL*Bh_C(FZkU8%y& zKUkTrsuzZDkR$_h7iM5=B*#dC16XTW>tpwE(c2hGdm69Bx#`E)?{x2xmYRaxBpqh` z48_~k+k>fN;s-Nqsl6(z8l)z6MK6P zHp}xnc2)NYK0A?mZo4-6i7Z$}yV_?Gx=?71d%uHYb{K<2hl(v>aJ7pPihuXPs+o1M zKxJ8heJV*N68uf5U!jLXs{?M3_*Rn?L{Zs#S^To$!s8&8p^SAK2>j@XG4LQx=c zf9NjzMfHsUmsiogi2ZMyA4__WwAv=zSBO^J#`c}rXU{?voxht=oePb3ed$p4R|?H| z0Y`Gz0%0PPIxGJyo&Q^Frg??l=u?&j>wDAYBeIuRfCD40Vd2YAvq$aOSpO{ajdkEN zVCTe~^-QL)@7g!U_0*H4%?*Xss?71S?!YeoS63c`NUS=}H5Sg~I2`GH8U42EgXDc# zzcO?zunWJEra)J7d^m$65vH=TZKKy3AfjmGr6#FnbLuHUFc<5dE0;j;L`y`cDOtqq(; zck{VztCHiGUB9jjf5Ep=0_a58MWHBCW zJ^(!~F@i`Mi^SNEonbd8j>6$^#ZM08tEh;Wd4W{uhf|UNI~U7;dG`Obz!??{M!h5s zMXH`95MGiFMH1SFia9Dsb-zA6r39JgSt%AaxQU%Tn?!Ol#-q4uz7)4oo#qV| zI}OEGnMI#VvTNSUH{{n_M|?q+;GV*|i)w=6W64>#dIi`Z;MBYZ=cr(_rzyY3^U4%k z^Kc`HhVx4_N_+YT^*{Yl{|)SMc#vZjAt4rw!~i$6Al8cF)(wNwCU6MQb6)EPIFHyNxEXt z@7&jJr3`NCo~ev2QQBfw|IFZDbZxzM^M`DRw2IX6jBR)430l>kqG$Djw{RA>9-4Lt zooK7HV>i3gi{$>I|MM0qobX5Up^%sCYlwGR-Gj)XccG07wrhImmc-U^m)%d}PL_+Z zr61N8$T%tpJp-fte>wjrAtwBUfL@2EY&H(&bX}-z6?ubO>v<=mvlX2Mgq2a9e*mgV zTb_=F(fk`#qQbl#>2A1H9lI$4)tDx0CHl)Z%rmwDfx?A;*0&+^pwIjA@-kkcmu=@i zCO=Pp%Brg_N0E^}_?#ZuLX!Dov0)+zL?T+(V{tHhqJboD!W^74@AKPdunxk3KU#3{QUBm*p7^Un*E9VNfE;(R(uL>rImKZP)3J z-6KKC$!=4QwR&3RUlEEa=|XbFKrm_(R8SjuqSutSl~Q)Y-ch}G7nV>ZH{$WV) z(z*&Srq*kR%KaKK$J}+Let|QfJ{tZ*(iX14yf?N>pIt&I1=Kl{Gg~g~CnN@+NgRrr zKIRM1UfNg%z_s=e3+d1M>Yczx9HYH@J>=Q5d3$!uy16T)fG$LIj(vN( z%j9c}xzwRjPP_q8gICL7hR;t4BsZ!S%1`;||BBsSwNot`4C&nT$Os@V%}hc4Drwr) zT}@gW;^U=fZVngi4W)QuS62i0)I6JHatT#JZYJuR!8J?^-?yD0oBI2sic@a8?x8~y zL49eM*Rnl3m*=gyDkh!tuX=G`q|D^lzohxjMDxs9!LX>hGV3hQ_TW{^NhU#oV$!fI zB#h$ZHq@qmBUYERw4hc&pYXFWE{9>A$ndq~pr0J}p3EK_Jhi){`#UI?s%LZ0$h{!r zLSVa)cUsheg4Lo(9`3t$#hRZ(NoQ3ThpDR)P7TpX`GaQZj&RGch!>nXQH;@o8@^4$ zSYhDnKoZU_y$dEU*I4O5AClw!uMgtK0c(@x-sIcmBKgCh3PUyr}>`F zE{|@@i|F!c35uq8br1%Yo%i0GF}FQhZRE4Q6gjs3MZ>~(T)6CW8oL#X{HiFSg)?5q zkk>C=0>>c9GUrkvAwwSCm$uqu0hw02arVRZpw*^d(91jV_ecH8owDr9gR&7&c9``* z;Uj{KzO|BoBTa3LCF2JG@_0;7&K+DTWOAf`^OAl^p|Nc3L}&dyXxR-l;l2FpY#n9|+n!O`#tFqXcDlTMtEj5qQS6A6ZdU z2}v-uxjIdTCq+$)#frOD_|;%KR6*tIv9L0R0D;J8A{$Hd^zpSd1;oE9DtJ1rXGLYz zW++a1mgw)7sF+6{sId3?@gs;$2GRy)41?>Cq@>!EuJQO*WETdOm+$xUs&rX&wB^x* zMK1}yg}pK@Xb_gl|9!0N8=Kui41d%0Al(}x6`gH^*3x}3+HzqECstssLp^-%jZs2+ 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≀w6f!G{a*Qu>wH5e?rr7pE7 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 literal 0 HcmV?d00001 diff --git a/tools/library-setup/operations/library.js b/tools/library-setup/operations/library.js index caf3025..8f11c3c 100644 --- a/tools/library-setup/operations/library.js +++ b/tools/library-setup/operations/library.js @@ -5,7 +5,7 @@ import { batchUploadBlocks, } from '../utils/da-api.js'; import { generateBlockHTML, generateBlocksJSON } from '../utils/doc-generator.js'; -import { extractExamplesWithProgress } from '../utils/content-extract.js'; +import extractExamplesWithProgress from '../utils/content-extract.js'; import { analyzeBlock } from '../utils/block-analysis.js'; export async function checkLibraryExists(org, site) { diff --git a/tools/library-setup/utils/content-extract.js b/tools/library-setup/utils/content-extract.js index 6595a66..800b494 100644 --- a/tools/library-setup/utils/content-extract.js +++ b/tools/library-setup/utils/content-extract.js @@ -85,7 +85,7 @@ function extractBlocksFromHTML(html, blockName) { return instances; } -export async function extractExamplesWithProgress(sitesWithPages, blockNames, onProgress) { +export default async function extractExamplesWithProgress(sitesWithPages, blockNames, onProgress) { const examplesByBlock = {}; blockNames.forEach((blockName) => { diff --git a/tools/library-setup/utils/doc-generator.js b/tools/library-setup/utils/doc-generator.js index bdc9d4d..0109c38 100644 --- a/tools/library-setup/utils/doc-generator.js +++ b/tools/library-setup/utils/doc-generator.js @@ -1,7 +1,9 @@ -import { generateBlockPlaceholder, generateAutoDescription } from './block-analysis.js'; +import { generateBlockPlaceholder } from './block-analysis.js'; export function generateBlockHTML(block, examples = []) { - const { name, variants = [], description = '', analysis = null } = block; + const { + name, variants = [], description = '', analysis = null, + } = block; const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1); From 302506836e632d68b9a2d018b54bd42ceac90fda Mon Sep 17 00:00:00 2001 From: Kiran Murugulla Date: Wed, 28 Jan 2026 06:39:01 -0500 Subject: [PATCH 3/3] fix:lint issues --- tools/library-setup/app/main.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/library-setup/app/main.js b/tools/library-setup/app/main.js index c5540db..47bd237 100644 --- a/tools/library-setup/app/main.js +++ b/tools/library-setup/app/main.js @@ -237,7 +237,9 @@ const app = { state.mode = newMode; state.message = ''; state.messageType = 'info'; - state.errors = { github: '', site: '', blocks: '', pages: '' }; + state.errors = { + github: '', site: '', blocks: '', pages: '', + }; if (newMode === 'refresh') { state.repositoryValidated = false; @@ -384,7 +386,9 @@ const app = { state.blocksDiscovered = true; state.discovering = false; state.selectedBlocks = new Set(blocks.map((b) => b.name)); - state.errors = { github: '', site: '', blocks: '', pages: '' }; + state.errors = { + github: '', site: '', blocks: '', pages: '', + }; this.render(); } catch (error) { state.errors.site = `Unable to load library: ${error.message}. Please run "Library Setup" first to create the library.`;