diff --git a/changelog.md b/changelog.md index 995e56f..c559be0 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,14 @@ # Changelog +## 2026-04-05 - 3.59.0 - feat(input) +extract datepicker popup into a window-layer overlay and enhance the code editor modal status UI + +- move the datepicker calendar, time, timezone, and event rendering into a dedicated popup component exported from the input module +- render the datepicker popup in a window-layer overlay with reposition and cleanup handling for scroll, resize, and close events +- preserve timezone-aware value formatting for selected dates +- add a footer to the code editor modal showing cursor position, line count, and selected language +- apply modal-specific Monaco background themes that react to light and dark mode + ## 2026-04-05 - 3.58.0 - feat(dees-input-code) add editor status footer with cursor position, line count, and language display diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts index 037e3de..7038857 100644 --- a/ts_web/00_commitinfo_data.ts +++ b/ts_web/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@design.estate/dees-catalog', - version: '3.58.0', + version: '3.59.0', description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.' } diff --git a/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts b/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts index d503405..dcaeba8 100644 --- a/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts +++ b/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts @@ -508,23 +508,15 @@ export class DeesInputCode extends DeesInputBase { const toolbar = modal.shadowRoot?.querySelector('.modal-toolbar'); if (!toolbar) return; - // Update language button text const langBtn = toolbar.querySelector('.language-button span'); if (langBtn) langBtn.textContent = getLanguageLabel(); - // Update word wrap button const wrapBtn = toolbar.querySelector('.wrap-btn') as HTMLElement; - if (wrapBtn) { - wrapBtn.classList.toggle('active', modalWordWrap === 'on'); - } + if (wrapBtn) wrapBtn.classList.toggle('active', modalWordWrap === 'on'); - // Update line numbers button const linesBtn = toolbar.querySelector('.lines-btn') as HTMLElement; - if (linesBtn) { - linesBtn.classList.toggle('active', modalShowLineNumbers); - } + if (linesBtn) linesBtn.classList.toggle('active', modalShowLineNumbers); - // Update copy button const copyBtn = toolbar.querySelector('.copy-btn') as HTMLElement; const copyIcon = copyBtn?.querySelector('dees-icon') as any; if (copyBtn && copyIcon) { @@ -532,13 +524,28 @@ export class DeesInputCode extends DeesInputBase { copyIcon.icon = modalCopySuccess ? 'lucide:Check' : 'lucide:Copy'; } - // Update dropdown visibility const dropdown = toolbar.querySelector('.language-dropdown') as HTMLElement; - if (dropdown) { - dropdown.style.display = modalLanguageDropdownOpen ? 'block' : 'none'; - } + if (dropdown) dropdown.style.display = modalLanguageDropdownOpen ? 'block' : 'none'; }; + // Helper to update footer UI + const updateFooterUI = (modal: DeesModal) => { + const footer = modal.shadowRoot?.querySelector('.modal-footer'); + if (!footer) return; + + const cursorEl = footer.querySelector('.footer-cursor'); + const linesEl = footer.querySelector('.footer-lines'); + const langEl = footer.querySelector('.footer-lang'); + + if (cursorEl) cursorEl.textContent = `Ln ${modalCursorLine}, Col ${modalCursorCol}`; + if (linesEl) linesEl.textContent = `${modalLineCount} line${modalLineCount !== 1 ? 's' : ''}`; + if (langEl) langEl.textContent = getLanguageLabel(); + }; + + let modalCursorLine = 1; + let modalCursorCol = 1; + let modalLineCount = currentValue.split('\n').length; + const modal = await DeesModal.createAndShow({ heading: this.label || 'Code Editor', width: 'fullscreen', @@ -549,9 +556,7 @@ export class DeesInputCode extends DeesInputBase { display: flex; align-items: center; justify-content: space-between; - padding: 8px 12px; - background: ${cssManager.bdTheme('hsl(0 0% 97%)', 'hsl(0 0% 7%)')}; - border-bottom: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; + padding: 4px 12px; gap: 8px; } .modal-toolbar .toolbar-left { @@ -644,9 +649,30 @@ export class DeesInputCode extends DeesInputBase { } .modal-editor-wrapper { position: relative; - height: calc(100vh - 175px); + height: calc(100vh - 200px); width: 100%; } + .modal-footer { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 12px; + height: 28px; + font-size: 11px; + color: ${cssManager.bdTheme('hsl(0 0% 45%)', 'hsl(0 0% 55%)')}; + border-top: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; + } + .modal-footer .footer-left, + .modal-footer .footer-right { + display: flex; + align-items: center; + gap: 12px; + } + .modal-footer .footer-separator { + width: 1px; + height: 12px; + background: ${cssManager.bdTheme('hsl(0 0% 85%)', 'hsl(0 0% 20%)')}; + } `; - + };