@rhavenside/baseline-ui 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/baseline.js CHANGED
@@ -87,19 +87,22 @@ function initTooltip(tooltipElement) {
87
87
  console.warn("Baseline UI: Tooltip missing trigger or content", tooltipElement);
88
88
  return;
89
89
  }
90
- if (trigger._tooltipInitialized)
90
+ if (tooltipElement._tooltipInitialized)
91
91
  return;
92
- const enterHandler = () => {
92
+ const enterHandler = (e) => {
93
93
  content.classList.add("bl-show");
94
94
  };
95
- const leaveHandler = () => {
96
- content.classList.remove("bl-show");
95
+ const leaveHandler = (e) => {
96
+ if (!tooltipElement.contains(e.relatedTarget)) {
97
+ content.classList.remove("bl-show");
98
+ }
97
99
  };
98
100
  trigger.addEventListener("mouseenter", enterHandler);
99
101
  trigger.addEventListener("mouseleave", leaveHandler);
100
- trigger._tooltipInitialized = true;
101
- trigger._tooltipEnterHandler = enterHandler;
102
- trigger._tooltipLeaveHandler = leaveHandler;
102
+ tooltipElement.addEventListener("mouseleave", leaveHandler);
103
+ tooltipElement._tooltipInitialized = true;
104
+ tooltipElement._tooltipEnterHandler = enterHandler;
105
+ tooltipElement._tooltipLeaveHandler = leaveHandler;
103
106
  }
104
107
 
105
108
  // src/js/components/tabs.js
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/js/components/modal.js", "../src/js/components/dropdown.js", "../src/js/components/tooltip.js", "../src/js/components/tabs.js", "../src/js/components/alert.js", "../src/js/baseline.js"],
4
- "sourcesContent": ["// ============================================================================\n// Modal Component JavaScript\n// ============================================================================\n\nexport function initModal(modalElement) {\n if (!modalElement) return;\n\n const backdrop = modalElement.querySelector('.bl-modal-backdrop') || document.createElement('div');\n if (!backdrop.classList.contains('bl-modal-backdrop')) {\n backdrop.className = 'bl-modal-backdrop';\n modalElement.insertBefore(backdrop, modalElement.firstChild);\n }\n\n // Open modal buttons\n const modalId = modalElement.id;\n if (modalId) {\n const openButtons = document.querySelectorAll(`[data-modal-open=\"${modalId}\"]`);\n openButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n openModal(modalId);\n });\n });\n }\n\n // Close modal buttons\n const closeButtons = modalElement.querySelectorAll('.bl-modal-close, [data-modal-close]');\n closeButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n closeModal(modalId);\n });\n });\n\n // Close on backdrop click\n backdrop.addEventListener('click', (e) => {\n if (e.target === backdrop) {\n closeModal(modalId);\n }\n });\n\n // Close on ESC key\n const escHandler = (e) => {\n if (e.key === 'Escape' && modalElement.style.display === 'block') {\n closeModal(modalId);\n }\n };\n document.addEventListener('keydown', escHandler);\n \n // Store handler for cleanup if needed\n modalElement._escHandler = escHandler;\n}\n\nexport function openModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'block';\n document.body.style.overflow = 'hidden';\n }\n}\n\nexport function closeModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'none';\n document.body.style.overflow = '';\n }\n}\n\n", "// ============================================================================\n// Dropdown Component JavaScript\n// ============================================================================\n\nexport function initDropdown(dropdownElement) {\n if (!dropdownElement) return;\n\n const toggle = dropdownElement.querySelector('.bl-dropdown-toggle');\n const menu = dropdownElement.querySelector('.bl-dropdown-menu');\n\n if (!toggle || !menu) return;\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Close all other dropdowns\n document.querySelectorAll('.bl-dropdown-menu.bl-show').forEach(otherMenu => {\n if (otherMenu !== menu) {\n otherMenu.classList.remove('bl-show');\n }\n });\n\n // Toggle current dropdown\n menu.classList.toggle('bl-show');\n });\n\n // Close on outside click\n const outsideClickHandler = (e) => {\n if (!dropdownElement.contains(e.target)) {\n menu.classList.remove('bl-show');\n }\n };\n \n document.addEventListener('click', outsideClickHandler);\n \n // Store handler for cleanup if needed\n dropdownElement._outsideClickHandler = outsideClickHandler;\n}\n\n", "// ============================================================================\n// Tooltip Component JavaScript\n// ============================================================================\n\nexport function initTooltip(tooltipElement) {\n if (!tooltipElement) return;\n\n const trigger = tooltipElement.querySelector('.bl-tooltip-trigger');\n const content = tooltipElement.querySelector('.bl-tooltip-content');\n\n if (!trigger || !content) {\n console.warn('Baseline UI: Tooltip missing trigger or content', tooltipElement);\n return;\n }\n\n // Skip if already initialized\n if (trigger._tooltipInitialized) return;\n\n // Create handlers\n const enterHandler = () => {\n content.classList.add('bl-show');\n };\n\n const leaveHandler = () => {\n content.classList.remove('bl-show');\n };\n\n // Add event listeners\n trigger.addEventListener('mouseenter', enterHandler);\n trigger.addEventListener('mouseleave', leaveHandler);\n\n // Mark as initialized\n trigger._tooltipInitialized = true;\n trigger._tooltipEnterHandler = enterHandler;\n trigger._tooltipLeaveHandler = leaveHandler;\n}\n\n", "// ============================================================================\n// Tabs Component JavaScript\n// ============================================================================\n\nexport function initTabs(tabsContainer) {\n if (!tabsContainer) return;\n\n const tabLinks = tabsContainer.querySelectorAll('.bl-nav-link[data-tab-target]');\n const tabGroup = tabsContainer.getAttribute('data-tab-group');\n\n tabLinks.forEach(link => {\n link.addEventListener('click', (e) => {\n e.preventDefault();\n\n // Remove active from all tabs in group\n if (tabGroup) {\n document.querySelectorAll(`[data-tab-group=\"${tabGroup}\"] .bl-nav-link`).forEach(l => {\n l.classList.remove('bl-active');\n });\n } else {\n tabsContainer.querySelectorAll('.bl-nav-link').forEach(l => {\n l.classList.remove('bl-active');\n });\n }\n\n // Add active to clicked tab\n link.classList.add('bl-active');\n\n // Show/hide tab content\n const targetId = link.getAttribute('data-tab-target');\n if (targetId) {\n // Find all tab contents - search in parent container or document\n const container = tabsContainer.closest('.docs-example-preview') || \n tabsContainer.parentElement || \n document;\n \n container.querySelectorAll('[data-tab-content]').forEach(content => {\n content.style.display = 'none';\n });\n\n const targetContent = document.getElementById(targetId);\n if (targetContent) {\n targetContent.style.display = 'block';\n }\n }\n });\n });\n}\n\n", "// ============================================================================\n// Alert Component JavaScript\n// ============================================================================\n\nexport function initAlert(alertElement) {\n if (!alertElement) return;\n\n const closeBtn = alertElement.querySelector('.bl-alert-close');\n if (!closeBtn) return;\n\n closeBtn.addEventListener('click', () => {\n dismissAlert(alertElement);\n });\n}\n\nexport function dismissAlert(alertElement) {\n if (!alertElement) return;\n \n alertElement.style.transition = 'opacity 0.3s ease-out';\n alertElement.style.opacity = '0';\n setTimeout(() => {\n alertElement.remove();\n }, 300);\n}\n\n", "// ============================================================================\n// Baseline UI JavaScript\n// Main Entry Point\n// ============================================================================\n\nimport { initModal, openModal, closeModal } from './components/modal.js';\nimport { initDropdown } from './components/dropdown.js';\nimport { initTooltip } from './components/tooltip.js';\nimport { initTabs } from './components/tabs.js';\nimport { initAlert, dismissAlert } from './components/alert.js';\n\n// Export all functions for manual use\nexport {\n initModal,\n openModal,\n closeModal,\n initDropdown,\n initTooltip,\n initTabs,\n initAlert,\n dismissAlert\n};\n\n// Auto-initialize on DOM ready\nfunction autoInit() {\n // Initialize all modals\n document.querySelectorAll('.bl-modal').forEach(modal => {\n initModal(modal);\n });\n\n // Initialize all dropdowns\n document.querySelectorAll('.bl-dropdown').forEach(dropdown => {\n initDropdown(dropdown);\n });\n\n // Initialize all tooltips\n document.querySelectorAll('.bl-tooltip').forEach(tooltip => {\n initTooltip(tooltip);\n });\n\n // Initialize all tabs\n document.querySelectorAll('.bl-nav-tabs').forEach(tabs => {\n initTabs(tabs);\n });\n\n // Initialize all dismissible alerts\n document.querySelectorAll('.bl-alert-dismissible').forEach(alert => {\n initAlert(alert);\n });\n}\n\n// Initialize when DOM is ready\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInit);\n} else {\n // Use setTimeout to ensure DOM is fully ready\n setTimeout(autoInit, 0);\n}\n\n"],
5
- "mappings": ";AAIO,SAAS,UAAU,cAAc;AACtC,MAAI,CAAC;AAAc;AAEnB,QAAM,WAAW,aAAa,cAAc,oBAAoB,KAAK,SAAS,cAAc,KAAK;AACjG,MAAI,CAAC,SAAS,UAAU,SAAS,mBAAmB,GAAG;AACrD,aAAS,YAAY;AACrB,iBAAa,aAAa,UAAU,aAAa,UAAU;AAAA,EAC7D;AAGA,QAAM,UAAU,aAAa;AAC7B,MAAI,SAAS;AACX,UAAM,cAAc,SAAS,iBAAiB,qBAAqB,OAAO,IAAI;AAC9E,gBAAY,QAAQ,SAAO;AACzB,UAAI,iBAAiB,SAAS,MAAM;AAClC,kBAAU,OAAO;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAGA,QAAM,eAAe,aAAa,iBAAiB,qCAAqC;AACxF,eAAa,QAAQ,SAAO;AAC1B,QAAI,iBAAiB,SAAS,MAAM;AAClC,iBAAW,OAAO;AAAA,IACpB,CAAC;AAAA,EACH,CAAC;AAGD,WAAS,iBAAiB,SAAS,CAAC,MAAM;AACxC,QAAI,EAAE,WAAW,UAAU;AACzB,iBAAW,OAAO;AAAA,IACpB;AAAA,EACF,CAAC;AAGD,QAAM,aAAa,CAAC,MAAM;AACxB,QAAI,EAAE,QAAQ,YAAY,aAAa,MAAM,YAAY,SAAS;AAChE,iBAAW,OAAO;AAAA,IACpB;AAAA,EACF;AACA,WAAS,iBAAiB,WAAW,UAAU;AAG/C,eAAa,cAAc;AAC7B;AAEO,SAAS,UAAU,SAAS;AACjC,QAAM,QAAQ,SAAS,eAAe,OAAO;AAC7C,MAAI,OAAO;AACT,UAAM,MAAM,UAAU;AACtB,aAAS,KAAK,MAAM,WAAW;AAAA,EACjC;AACF;AAEO,SAAS,WAAW,SAAS;AAClC,QAAM,QAAQ,SAAS,eAAe,OAAO;AAC7C,MAAI,OAAO;AACT,UAAM,MAAM,UAAU;AACtB,aAAS,KAAK,MAAM,WAAW;AAAA,EACjC;AACF;;;AC7DO,SAAS,aAAa,iBAAiB;AAC5C,MAAI,CAAC;AAAiB;AAEtB,QAAM,SAAS,gBAAgB,cAAc,qBAAqB;AAClE,QAAM,OAAO,gBAAgB,cAAc,mBAAmB;AAE9D,MAAI,CAAC,UAAU,CAAC;AAAM;AAEtB,SAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAGlB,aAAS,iBAAiB,2BAA2B,EAAE,QAAQ,eAAa;AAC1E,UAAI,cAAc,MAAM;AACtB,kBAAU,UAAU,OAAO,SAAS;AAAA,MACtC;AAAA,IACF,CAAC;AAGD,SAAK,UAAU,OAAO,SAAS;AAAA,EACjC,CAAC;AAGD,QAAM,sBAAsB,CAAC,MAAM;AACjC,QAAI,CAAC,gBAAgB,SAAS,EAAE,MAAM,GAAG;AACvC,WAAK,UAAU,OAAO,SAAS;AAAA,IACjC;AAAA,EACF;AAEA,WAAS,iBAAiB,SAAS,mBAAmB;AAGtD,kBAAgB,uBAAuB;AACzC;;;AClCO,SAAS,YAAY,gBAAgB;AAC1C,MAAI,CAAC;AAAgB;AAErB,QAAM,UAAU,eAAe,cAAc,qBAAqB;AAClE,QAAM,UAAU,eAAe,cAAc,qBAAqB;AAElE,MAAI,CAAC,WAAW,CAAC,SAAS;AACxB,YAAQ,KAAK,mDAAmD,cAAc;AAC9E;AAAA,EACF;AAGA,MAAI,QAAQ;AAAqB;AAGjC,QAAM,eAAe,MAAM;AACzB,YAAQ,UAAU,IAAI,SAAS;AAAA,EACjC;AAEA,QAAM,eAAe,MAAM;AACzB,YAAQ,UAAU,OAAO,SAAS;AAAA,EACpC;AAGA,UAAQ,iBAAiB,cAAc,YAAY;AACnD,UAAQ,iBAAiB,cAAc,YAAY;AAGnD,UAAQ,sBAAsB;AAC9B,UAAQ,uBAAuB;AAC/B,UAAQ,uBAAuB;AACjC;;;AC/BO,SAAS,SAAS,eAAe;AACtC,MAAI,CAAC;AAAe;AAEpB,QAAM,WAAW,cAAc,iBAAiB,+BAA+B;AAC/E,QAAM,WAAW,cAAc,aAAa,gBAAgB;AAE5D,WAAS,QAAQ,UAAQ;AACvB,SAAK,iBAAiB,SAAS,CAAC,MAAM;AACpC,QAAE,eAAe;AAGjB,UAAI,UAAU;AACZ,iBAAS,iBAAiB,oBAAoB,QAAQ,iBAAiB,EAAE,QAAQ,OAAK;AACpF,YAAE,UAAU,OAAO,WAAW;AAAA,QAChC,CAAC;AAAA,MACH,OAAO;AACL,sBAAc,iBAAiB,cAAc,EAAE,QAAQ,OAAK;AAC1D,YAAE,UAAU,OAAO,WAAW;AAAA,QAChC,CAAC;AAAA,MACH;AAGA,WAAK,UAAU,IAAI,WAAW;AAG9B,YAAM,WAAW,KAAK,aAAa,iBAAiB;AACpD,UAAI,UAAU;AAEZ,cAAM,YAAY,cAAc,QAAQ,uBAAuB,KAC9C,cAAc,iBACd;AAEjB,kBAAU,iBAAiB,oBAAoB,EAAE,QAAQ,aAAW;AAClE,kBAAQ,MAAM,UAAU;AAAA,QAC1B,CAAC;AAED,cAAM,gBAAgB,SAAS,eAAe,QAAQ;AACtD,YAAI,eAAe;AACjB,wBAAc,MAAM,UAAU;AAAA,QAChC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AC3CO,SAAS,UAAU,cAAc;AACtC,MAAI,CAAC;AAAc;AAEnB,QAAM,WAAW,aAAa,cAAc,iBAAiB;AAC7D,MAAI,CAAC;AAAU;AAEf,WAAS,iBAAiB,SAAS,MAAM;AACvC,iBAAa,YAAY;AAAA,EAC3B,CAAC;AACH;AAEO,SAAS,aAAa,cAAc;AACzC,MAAI,CAAC;AAAc;AAEnB,eAAa,MAAM,aAAa;AAChC,eAAa,MAAM,UAAU;AAC7B,aAAW,MAAM;AACf,iBAAa,OAAO;AAAA,EACtB,GAAG,GAAG;AACR;;;ACCA,SAAS,WAAW;AAElB,WAAS,iBAAiB,WAAW,EAAE,QAAQ,WAAS;AACtD,cAAU,KAAK;AAAA,EACjB,CAAC;AAGD,WAAS,iBAAiB,cAAc,EAAE,QAAQ,cAAY;AAC5D,iBAAa,QAAQ;AAAA,EACvB,CAAC;AAGD,WAAS,iBAAiB,aAAa,EAAE,QAAQ,aAAW;AAC1D,gBAAY,OAAO;AAAA,EACrB,CAAC;AAGD,WAAS,iBAAiB,cAAc,EAAE,QAAQ,UAAQ;AACxD,aAAS,IAAI;AAAA,EACf,CAAC;AAGD,WAAS,iBAAiB,uBAAuB,EAAE,QAAQ,WAAS;AAClE,cAAU,KAAK;AAAA,EACjB,CAAC;AACH;AAGA,IAAI,SAAS,eAAe,WAAW;AACrC,WAAS,iBAAiB,oBAAoB,QAAQ;AACxD,OAAO;AAEL,aAAW,UAAU,CAAC;AACxB;",
4
+ "sourcesContent": ["// ============================================================================\n// Modal Component JavaScript\n// ============================================================================\n\nexport function initModal(modalElement) {\n if (!modalElement) return;\n\n const backdrop = modalElement.querySelector('.bl-modal-backdrop') || document.createElement('div');\n if (!backdrop.classList.contains('bl-modal-backdrop')) {\n backdrop.className = 'bl-modal-backdrop';\n modalElement.insertBefore(backdrop, modalElement.firstChild);\n }\n\n // Open modal buttons\n const modalId = modalElement.id;\n if (modalId) {\n const openButtons = document.querySelectorAll(`[data-modal-open=\"${modalId}\"]`);\n openButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n openModal(modalId);\n });\n });\n }\n\n // Close modal buttons\n const closeButtons = modalElement.querySelectorAll('.bl-modal-close, [data-modal-close]');\n closeButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n closeModal(modalId);\n });\n });\n\n // Close on backdrop click\n backdrop.addEventListener('click', (e) => {\n if (e.target === backdrop) {\n closeModal(modalId);\n }\n });\n\n // Close on ESC key\n const escHandler = (e) => {\n if (e.key === 'Escape' && modalElement.style.display === 'block') {\n closeModal(modalId);\n }\n };\n document.addEventListener('keydown', escHandler);\n \n // Store handler for cleanup if needed\n modalElement._escHandler = escHandler;\n}\n\nexport function openModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'block';\n document.body.style.overflow = 'hidden';\n }\n}\n\nexport function closeModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'none';\n document.body.style.overflow = '';\n }\n}\n\n", "// ============================================================================\n// Dropdown Component JavaScript\n// ============================================================================\n\nexport function initDropdown(dropdownElement) {\n if (!dropdownElement) return;\n\n const toggle = dropdownElement.querySelector('.bl-dropdown-toggle');\n const menu = dropdownElement.querySelector('.bl-dropdown-menu');\n\n if (!toggle || !menu) return;\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Close all other dropdowns\n document.querySelectorAll('.bl-dropdown-menu.bl-show').forEach(otherMenu => {\n if (otherMenu !== menu) {\n otherMenu.classList.remove('bl-show');\n }\n });\n\n // Toggle current dropdown\n menu.classList.toggle('bl-show');\n });\n\n // Close on outside click\n const outsideClickHandler = (e) => {\n if (!dropdownElement.contains(e.target)) {\n menu.classList.remove('bl-show');\n }\n };\n \n document.addEventListener('click', outsideClickHandler);\n \n // Store handler for cleanup if needed\n dropdownElement._outsideClickHandler = outsideClickHandler;\n}\n\n", "// ============================================================================\n// Tooltip Component JavaScript\n// ============================================================================\n\nexport function initTooltip(tooltipElement) {\n if (!tooltipElement) return;\n\n const trigger = tooltipElement.querySelector('.bl-tooltip-trigger');\n const content = tooltipElement.querySelector('.bl-tooltip-content');\n\n if (!trigger || !content) {\n console.warn('Baseline UI: Tooltip missing trigger or content', tooltipElement);\n return;\n }\n\n // Skip if already initialized\n if (tooltipElement._tooltipInitialized) return;\n\n // Create handlers - use tooltipElement to handle hover on entire tooltip\n const enterHandler = (e) => {\n content.classList.add('bl-show');\n };\n\n const leaveHandler = (e) => {\n // Only hide if mouse leaves the tooltip element (not just the trigger)\n if (!tooltipElement.contains(e.relatedTarget)) {\n content.classList.remove('bl-show');\n }\n };\n\n // Add event listeners to trigger\n trigger.addEventListener('mouseenter', enterHandler);\n trigger.addEventListener('mouseleave', leaveHandler);\n \n // Also handle mouseleave on tooltip element to hide when leaving tooltip area\n tooltipElement.addEventListener('mouseleave', leaveHandler);\n\n // Mark as initialized\n tooltipElement._tooltipInitialized = true;\n tooltipElement._tooltipEnterHandler = enterHandler;\n tooltipElement._tooltipLeaveHandler = leaveHandler;\n}\n\n", "// ============================================================================\n// Tabs Component JavaScript\n// ============================================================================\n\nexport function initTabs(tabsContainer) {\n if (!tabsContainer) return;\n\n const tabLinks = tabsContainer.querySelectorAll('.bl-nav-link[data-tab-target]');\n const tabGroup = tabsContainer.getAttribute('data-tab-group');\n\n tabLinks.forEach(link => {\n link.addEventListener('click', (e) => {\n e.preventDefault();\n\n // Remove active from all tabs in group\n if (tabGroup) {\n document.querySelectorAll(`[data-tab-group=\"${tabGroup}\"] .bl-nav-link`).forEach(l => {\n l.classList.remove('bl-active');\n });\n } else {\n tabsContainer.querySelectorAll('.bl-nav-link').forEach(l => {\n l.classList.remove('bl-active');\n });\n }\n\n // Add active to clicked tab\n link.classList.add('bl-active');\n\n // Show/hide tab content\n const targetId = link.getAttribute('data-tab-target');\n if (targetId) {\n // Find all tab contents - search in parent container or document\n const container = tabsContainer.closest('.docs-example-preview') || \n tabsContainer.parentElement || \n document;\n \n container.querySelectorAll('[data-tab-content]').forEach(content => {\n content.style.display = 'none';\n });\n\n const targetContent = document.getElementById(targetId);\n if (targetContent) {\n targetContent.style.display = 'block';\n }\n }\n });\n });\n}\n\n", "// ============================================================================\n// Alert Component JavaScript\n// ============================================================================\n\nexport function initAlert(alertElement) {\n if (!alertElement) return;\n\n const closeBtn = alertElement.querySelector('.bl-alert-close');\n if (!closeBtn) return;\n\n closeBtn.addEventListener('click', () => {\n dismissAlert(alertElement);\n });\n}\n\nexport function dismissAlert(alertElement) {\n if (!alertElement) return;\n \n alertElement.style.transition = 'opacity 0.3s ease-out';\n alertElement.style.opacity = '0';\n setTimeout(() => {\n alertElement.remove();\n }, 300);\n}\n\n", "// ============================================================================\n// Baseline UI JavaScript\n// Main Entry Point\n// ============================================================================\n\nimport { initModal, openModal, closeModal } from './components/modal.js';\nimport { initDropdown } from './components/dropdown.js';\nimport { initTooltip } from './components/tooltip.js';\nimport { initTabs } from './components/tabs.js';\nimport { initAlert, dismissAlert } from './components/alert.js';\n\n// Export all functions for manual use\nexport {\n initModal,\n openModal,\n closeModal,\n initDropdown,\n initTooltip,\n initTabs,\n initAlert,\n dismissAlert\n};\n\n// Auto-initialize on DOM ready\nfunction autoInit() {\n // Initialize all modals\n document.querySelectorAll('.bl-modal').forEach(modal => {\n initModal(modal);\n });\n\n // Initialize all dropdowns\n document.querySelectorAll('.bl-dropdown').forEach(dropdown => {\n initDropdown(dropdown);\n });\n\n // Initialize all tooltips\n document.querySelectorAll('.bl-tooltip').forEach(tooltip => {\n initTooltip(tooltip);\n });\n\n // Initialize all tabs\n document.querySelectorAll('.bl-nav-tabs').forEach(tabs => {\n initTabs(tabs);\n });\n\n // Initialize all dismissible alerts\n document.querySelectorAll('.bl-alert-dismissible').forEach(alert => {\n initAlert(alert);\n });\n}\n\n// Initialize when DOM is ready\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInit);\n} else {\n // Use setTimeout to ensure DOM is fully ready\n setTimeout(autoInit, 0);\n}\n\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- function a(t){if(!t)return;let e=t.querySelector(".bl-modal-backdrop")||document.createElement("div");e.classList.contains("bl-modal-backdrop")||(e.className="bl-modal-backdrop",t.insertBefore(e,t.firstChild));let o=t.id;o&&document.querySelectorAll(`[data-modal-open="${o}"]`).forEach(i=>{i.addEventListener("click",()=>{d(o)})}),t.querySelectorAll(".bl-modal-close, [data-modal-close]").forEach(n=>{n.addEventListener("click",()=>{c(o)})}),e.addEventListener("click",n=>{n.target===e&&c(o)});let r=n=>{n.key==="Escape"&&t.style.display==="block"&&c(o)};document.addEventListener("keydown",r),t._escHandler=r}function d(t){let e=document.getElementById(t);e&&(e.style.display="block",document.body.style.overflow="hidden")}function c(t){let e=document.getElementById(t);e&&(e.style.display="none",document.body.style.overflow="")}function u(t){if(!t)return;let e=t.querySelector(".bl-dropdown-toggle"),o=t.querySelector(".bl-dropdown-menu");if(!e||!o)return;e.addEventListener("click",r=>{r.preventDefault(),r.stopPropagation(),document.querySelectorAll(".bl-dropdown-menu.bl-show").forEach(n=>{n!==o&&n.classList.remove("bl-show")}),o.classList.toggle("bl-show")});let l=r=>{t.contains(r.target)||o.classList.remove("bl-show")};document.addEventListener("click",l),t._outsideClickHandler=l}function f(t){if(!t)return;let e=t.querySelector(".bl-tooltip-trigger"),o=t.querySelector(".bl-tooltip-content");if(!e||!o){console.warn("Baseline UI: Tooltip missing trigger or content",t);return}if(e._tooltipInitialized)return;let l=()=>{o.classList.add("bl-show")},r=()=>{o.classList.remove("bl-show")};e.addEventListener("mouseenter",l),e.addEventListener("mouseleave",r),e._tooltipInitialized=!0,e._tooltipEnterHandler=l,e._tooltipLeaveHandler=r}function p(t){if(!t)return;let e=t.querySelectorAll(".bl-nav-link[data-tab-target]"),o=t.getAttribute("data-tab-group");e.forEach(l=>{l.addEventListener("click",r=>{r.preventDefault(),o?document.querySelectorAll(`[data-tab-group="${o}"] .bl-nav-link`).forEach(i=>{i.classList.remove("bl-active")}):t.querySelectorAll(".bl-nav-link").forEach(i=>{i.classList.remove("bl-active")}),l.classList.add("bl-active");let n=l.getAttribute("data-tab-target");if(n){(t.closest(".docs-example-preview")||t.parentElement||document).querySelectorAll("[data-tab-content]").forEach(v=>{v.style.display="none"});let s=document.getElementById(n);s&&(s.style.display="block")}})})}function b(t){if(!t)return;let e=t.querySelector(".bl-alert-close");e&&e.addEventListener("click",()=>{y(t)})}function y(t){t&&(t.style.transition="opacity 0.3s ease-out",t.style.opacity="0",setTimeout(()=>{t.remove()},300))}function m(){document.querySelectorAll(".bl-modal").forEach(t=>{a(t)}),document.querySelectorAll(".bl-dropdown").forEach(t=>{u(t)}),document.querySelectorAll(".bl-tooltip").forEach(t=>{f(t)}),document.querySelectorAll(".bl-nav-tabs").forEach(t=>{p(t)}),document.querySelectorAll(".bl-alert-dismissible").forEach(t=>{b(t)})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",m):setTimeout(m,0);export{c as closeModal,y as dismissAlert,b as initAlert,u as initDropdown,a as initModal,p as initTabs,f as initTooltip,d as openModal};
1
+ function a(e){if(!e)return;let t=e.querySelector(".bl-modal-backdrop")||document.createElement("div");t.classList.contains("bl-modal-backdrop")||(t.className="bl-modal-backdrop",e.insertBefore(t,e.firstChild));let o=e.id;o&&document.querySelectorAll(`[data-modal-open="${o}"]`).forEach(i=>{i.addEventListener("click",()=>{d(o)})}),e.querySelectorAll(".bl-modal-close, [data-modal-close]").forEach(r=>{r.addEventListener("click",()=>{l(o)})}),t.addEventListener("click",r=>{r.target===t&&l(o)});let n=r=>{r.key==="Escape"&&e.style.display==="block"&&l(o)};document.addEventListener("keydown",n),e._escHandler=n}function d(e){let t=document.getElementById(e);t&&(t.style.display="block",document.body.style.overflow="hidden")}function l(e){let t=document.getElementById(e);t&&(t.style.display="none",document.body.style.overflow="")}function u(e){if(!e)return;let t=e.querySelector(".bl-dropdown-toggle"),o=e.querySelector(".bl-dropdown-menu");if(!t||!o)return;t.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),document.querySelectorAll(".bl-dropdown-menu.bl-show").forEach(r=>{r!==o&&r.classList.remove("bl-show")}),o.classList.toggle("bl-show")});let c=n=>{e.contains(n.target)||o.classList.remove("bl-show")};document.addEventListener("click",c),e._outsideClickHandler=c}function f(e){if(!e)return;let t=e.querySelector(".bl-tooltip-trigger"),o=e.querySelector(".bl-tooltip-content");if(!t||!o){console.warn("Baseline UI: Tooltip missing trigger or content",e);return}if(e._tooltipInitialized)return;let c=r=>{o.classList.add("bl-show")},n=r=>{e.contains(r.relatedTarget)||o.classList.remove("bl-show")};t.addEventListener("mouseenter",c),t.addEventListener("mouseleave",n),e.addEventListener("mouseleave",n),e._tooltipInitialized=!0,e._tooltipEnterHandler=c,e._tooltipLeaveHandler=n}function b(e){if(!e)return;let t=e.querySelectorAll(".bl-nav-link[data-tab-target]"),o=e.getAttribute("data-tab-group");t.forEach(c=>{c.addEventListener("click",n=>{n.preventDefault(),o?document.querySelectorAll(`[data-tab-group="${o}"] .bl-nav-link`).forEach(i=>{i.classList.remove("bl-active")}):e.querySelectorAll(".bl-nav-link").forEach(i=>{i.classList.remove("bl-active")}),c.classList.add("bl-active");let r=c.getAttribute("data-tab-target");if(r){(e.closest(".docs-example-preview")||e.parentElement||document).querySelectorAll("[data-tab-content]").forEach(m=>{m.style.display="none"});let s=document.getElementById(r);s&&(s.style.display="block")}})})}function p(e){if(!e)return;let t=e.querySelector(".bl-alert-close");t&&t.addEventListener("click",()=>{y(e)})}function y(e){e&&(e.style.transition="opacity 0.3s ease-out",e.style.opacity="0",setTimeout(()=>{e.remove()},300))}function v(){document.querySelectorAll(".bl-modal").forEach(e=>{a(e)}),document.querySelectorAll(".bl-dropdown").forEach(e=>{u(e)}),document.querySelectorAll(".bl-tooltip").forEach(e=>{f(e)}),document.querySelectorAll(".bl-nav-tabs").forEach(e=>{b(e)}),document.querySelectorAll(".bl-alert-dismissible").forEach(e=>{p(e)})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",v):setTimeout(v,0);export{l as closeModal,y as dismissAlert,p as initAlert,u as initDropdown,a as initModal,b as initTabs,f as initTooltip,d as openModal};
2
2
  //# sourceMappingURL=baseline.min.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/js/components/modal.js", "../src/js/components/dropdown.js", "../src/js/components/tooltip.js", "../src/js/components/tabs.js", "../src/js/components/alert.js", "../src/js/baseline.js"],
4
- "sourcesContent": ["// ============================================================================\n// Modal Component JavaScript\n// ============================================================================\n\nexport function initModal(modalElement) {\n if (!modalElement) return;\n\n const backdrop = modalElement.querySelector('.bl-modal-backdrop') || document.createElement('div');\n if (!backdrop.classList.contains('bl-modal-backdrop')) {\n backdrop.className = 'bl-modal-backdrop';\n modalElement.insertBefore(backdrop, modalElement.firstChild);\n }\n\n // Open modal buttons\n const modalId = modalElement.id;\n if (modalId) {\n const openButtons = document.querySelectorAll(`[data-modal-open=\"${modalId}\"]`);\n openButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n openModal(modalId);\n });\n });\n }\n\n // Close modal buttons\n const closeButtons = modalElement.querySelectorAll('.bl-modal-close, [data-modal-close]');\n closeButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n closeModal(modalId);\n });\n });\n\n // Close on backdrop click\n backdrop.addEventListener('click', (e) => {\n if (e.target === backdrop) {\n closeModal(modalId);\n }\n });\n\n // Close on ESC key\n const escHandler = (e) => {\n if (e.key === 'Escape' && modalElement.style.display === 'block') {\n closeModal(modalId);\n }\n };\n document.addEventListener('keydown', escHandler);\n \n // Store handler for cleanup if needed\n modalElement._escHandler = escHandler;\n}\n\nexport function openModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'block';\n document.body.style.overflow = 'hidden';\n }\n}\n\nexport function closeModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'none';\n document.body.style.overflow = '';\n }\n}\n\n", "// ============================================================================\n// Dropdown Component JavaScript\n// ============================================================================\n\nexport function initDropdown(dropdownElement) {\n if (!dropdownElement) return;\n\n const toggle = dropdownElement.querySelector('.bl-dropdown-toggle');\n const menu = dropdownElement.querySelector('.bl-dropdown-menu');\n\n if (!toggle || !menu) return;\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Close all other dropdowns\n document.querySelectorAll('.bl-dropdown-menu.bl-show').forEach(otherMenu => {\n if (otherMenu !== menu) {\n otherMenu.classList.remove('bl-show');\n }\n });\n\n // Toggle current dropdown\n menu.classList.toggle('bl-show');\n });\n\n // Close on outside click\n const outsideClickHandler = (e) => {\n if (!dropdownElement.contains(e.target)) {\n menu.classList.remove('bl-show');\n }\n };\n \n document.addEventListener('click', outsideClickHandler);\n \n // Store handler for cleanup if needed\n dropdownElement._outsideClickHandler = outsideClickHandler;\n}\n\n", "// ============================================================================\n// Tooltip Component JavaScript\n// ============================================================================\n\nexport function initTooltip(tooltipElement) {\n if (!tooltipElement) return;\n\n const trigger = tooltipElement.querySelector('.bl-tooltip-trigger');\n const content = tooltipElement.querySelector('.bl-tooltip-content');\n\n if (!trigger || !content) {\n console.warn('Baseline UI: Tooltip missing trigger or content', tooltipElement);\n return;\n }\n\n // Skip if already initialized\n if (trigger._tooltipInitialized) return;\n\n // Create handlers\n const enterHandler = () => {\n content.classList.add('bl-show');\n };\n\n const leaveHandler = () => {\n content.classList.remove('bl-show');\n };\n\n // Add event listeners\n trigger.addEventListener('mouseenter', enterHandler);\n trigger.addEventListener('mouseleave', leaveHandler);\n\n // Mark as initialized\n trigger._tooltipInitialized = true;\n trigger._tooltipEnterHandler = enterHandler;\n trigger._tooltipLeaveHandler = leaveHandler;\n}\n\n", "// ============================================================================\n// Tabs Component JavaScript\n// ============================================================================\n\nexport function initTabs(tabsContainer) {\n if (!tabsContainer) return;\n\n const tabLinks = tabsContainer.querySelectorAll('.bl-nav-link[data-tab-target]');\n const tabGroup = tabsContainer.getAttribute('data-tab-group');\n\n tabLinks.forEach(link => {\n link.addEventListener('click', (e) => {\n e.preventDefault();\n\n // Remove active from all tabs in group\n if (tabGroup) {\n document.querySelectorAll(`[data-tab-group=\"${tabGroup}\"] .bl-nav-link`).forEach(l => {\n l.classList.remove('bl-active');\n });\n } else {\n tabsContainer.querySelectorAll('.bl-nav-link').forEach(l => {\n l.classList.remove('bl-active');\n });\n }\n\n // Add active to clicked tab\n link.classList.add('bl-active');\n\n // Show/hide tab content\n const targetId = link.getAttribute('data-tab-target');\n if (targetId) {\n // Find all tab contents - search in parent container or document\n const container = tabsContainer.closest('.docs-example-preview') || \n tabsContainer.parentElement || \n document;\n \n container.querySelectorAll('[data-tab-content]').forEach(content => {\n content.style.display = 'none';\n });\n\n const targetContent = document.getElementById(targetId);\n if (targetContent) {\n targetContent.style.display = 'block';\n }\n }\n });\n });\n}\n\n", "// ============================================================================\n// Alert Component JavaScript\n// ============================================================================\n\nexport function initAlert(alertElement) {\n if (!alertElement) return;\n\n const closeBtn = alertElement.querySelector('.bl-alert-close');\n if (!closeBtn) return;\n\n closeBtn.addEventListener('click', () => {\n dismissAlert(alertElement);\n });\n}\n\nexport function dismissAlert(alertElement) {\n if (!alertElement) return;\n \n alertElement.style.transition = 'opacity 0.3s ease-out';\n alertElement.style.opacity = '0';\n setTimeout(() => {\n alertElement.remove();\n }, 300);\n}\n\n", "// ============================================================================\n// Baseline UI JavaScript\n// Main Entry Point\n// ============================================================================\n\nimport { initModal, openModal, closeModal } from './components/modal.js';\nimport { initDropdown } from './components/dropdown.js';\nimport { initTooltip } from './components/tooltip.js';\nimport { initTabs } from './components/tabs.js';\nimport { initAlert, dismissAlert } from './components/alert.js';\n\n// Export all functions for manual use\nexport {\n initModal,\n openModal,\n closeModal,\n initDropdown,\n initTooltip,\n initTabs,\n initAlert,\n dismissAlert\n};\n\n// Auto-initialize on DOM ready\nfunction autoInit() {\n // Initialize all modals\n document.querySelectorAll('.bl-modal').forEach(modal => {\n initModal(modal);\n });\n\n // Initialize all dropdowns\n document.querySelectorAll('.bl-dropdown').forEach(dropdown => {\n initDropdown(dropdown);\n });\n\n // Initialize all tooltips\n document.querySelectorAll('.bl-tooltip').forEach(tooltip => {\n initTooltip(tooltip);\n });\n\n // Initialize all tabs\n document.querySelectorAll('.bl-nav-tabs').forEach(tabs => {\n initTabs(tabs);\n });\n\n // Initialize all dismissible alerts\n document.querySelectorAll('.bl-alert-dismissible').forEach(alert => {\n initAlert(alert);\n });\n}\n\n// Initialize when DOM is ready\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInit);\n} else {\n // Use setTimeout to ensure DOM is fully ready\n setTimeout(autoInit, 0);\n}\n\n"],
5
- "mappings": "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",
6
- "names": ["initModal", "modalElement", "backdrop", "modalId", "btn", "openModal", "closeModal", "e", "escHandler", "modal", "initDropdown", "dropdownElement", "toggle", "menu", "e", "otherMenu", "outsideClickHandler", "initTooltip", "tooltipElement", "trigger", "content", "enterHandler", "leaveHandler", "initTabs", "tabsContainer", "tabLinks", "tabGroup", "link", "e", "l", "targetId", "content", "targetContent", "initAlert", "alertElement", "closeBtn", "dismissAlert", "autoInit", "modal", "initModal", "dropdown", "initDropdown", "tooltip", "initTooltip", "tabs", "initTabs", "alert", "initAlert"]
4
+ "sourcesContent": ["// ============================================================================\n// Modal Component JavaScript\n// ============================================================================\n\nexport function initModal(modalElement) {\n if (!modalElement) return;\n\n const backdrop = modalElement.querySelector('.bl-modal-backdrop') || document.createElement('div');\n if (!backdrop.classList.contains('bl-modal-backdrop')) {\n backdrop.className = 'bl-modal-backdrop';\n modalElement.insertBefore(backdrop, modalElement.firstChild);\n }\n\n // Open modal buttons\n const modalId = modalElement.id;\n if (modalId) {\n const openButtons = document.querySelectorAll(`[data-modal-open=\"${modalId}\"]`);\n openButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n openModal(modalId);\n });\n });\n }\n\n // Close modal buttons\n const closeButtons = modalElement.querySelectorAll('.bl-modal-close, [data-modal-close]');\n closeButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n closeModal(modalId);\n });\n });\n\n // Close on backdrop click\n backdrop.addEventListener('click', (e) => {\n if (e.target === backdrop) {\n closeModal(modalId);\n }\n });\n\n // Close on ESC key\n const escHandler = (e) => {\n if (e.key === 'Escape' && modalElement.style.display === 'block') {\n closeModal(modalId);\n }\n };\n document.addEventListener('keydown', escHandler);\n \n // Store handler for cleanup if needed\n modalElement._escHandler = escHandler;\n}\n\nexport function openModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'block';\n document.body.style.overflow = 'hidden';\n }\n}\n\nexport function closeModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n modal.style.display = 'none';\n document.body.style.overflow = '';\n }\n}\n\n", "// ============================================================================\n// Dropdown Component JavaScript\n// ============================================================================\n\nexport function initDropdown(dropdownElement) {\n if (!dropdownElement) return;\n\n const toggle = dropdownElement.querySelector('.bl-dropdown-toggle');\n const menu = dropdownElement.querySelector('.bl-dropdown-menu');\n\n if (!toggle || !menu) return;\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Close all other dropdowns\n document.querySelectorAll('.bl-dropdown-menu.bl-show').forEach(otherMenu => {\n if (otherMenu !== menu) {\n otherMenu.classList.remove('bl-show');\n }\n });\n\n // Toggle current dropdown\n menu.classList.toggle('bl-show');\n });\n\n // Close on outside click\n const outsideClickHandler = (e) => {\n if (!dropdownElement.contains(e.target)) {\n menu.classList.remove('bl-show');\n }\n };\n \n document.addEventListener('click', outsideClickHandler);\n \n // Store handler for cleanup if needed\n dropdownElement._outsideClickHandler = outsideClickHandler;\n}\n\n", "// ============================================================================\n// Tooltip Component JavaScript\n// ============================================================================\n\nexport function initTooltip(tooltipElement) {\n if (!tooltipElement) return;\n\n const trigger = tooltipElement.querySelector('.bl-tooltip-trigger');\n const content = tooltipElement.querySelector('.bl-tooltip-content');\n\n if (!trigger || !content) {\n console.warn('Baseline UI: Tooltip missing trigger or content', tooltipElement);\n return;\n }\n\n // Skip if already initialized\n if (tooltipElement._tooltipInitialized) return;\n\n // Create handlers - use tooltipElement to handle hover on entire tooltip\n const enterHandler = (e) => {\n content.classList.add('bl-show');\n };\n\n const leaveHandler = (e) => {\n // Only hide if mouse leaves the tooltip element (not just the trigger)\n if (!tooltipElement.contains(e.relatedTarget)) {\n content.classList.remove('bl-show');\n }\n };\n\n // Add event listeners to trigger\n trigger.addEventListener('mouseenter', enterHandler);\n trigger.addEventListener('mouseleave', leaveHandler);\n \n // Also handle mouseleave on tooltip element to hide when leaving tooltip area\n tooltipElement.addEventListener('mouseleave', leaveHandler);\n\n // Mark as initialized\n tooltipElement._tooltipInitialized = true;\n tooltipElement._tooltipEnterHandler = enterHandler;\n tooltipElement._tooltipLeaveHandler = leaveHandler;\n}\n\n", "// ============================================================================\n// Tabs Component JavaScript\n// ============================================================================\n\nexport function initTabs(tabsContainer) {\n if (!tabsContainer) return;\n\n const tabLinks = tabsContainer.querySelectorAll('.bl-nav-link[data-tab-target]');\n const tabGroup = tabsContainer.getAttribute('data-tab-group');\n\n tabLinks.forEach(link => {\n link.addEventListener('click', (e) => {\n e.preventDefault();\n\n // Remove active from all tabs in group\n if (tabGroup) {\n document.querySelectorAll(`[data-tab-group=\"${tabGroup}\"] .bl-nav-link`).forEach(l => {\n l.classList.remove('bl-active');\n });\n } else {\n tabsContainer.querySelectorAll('.bl-nav-link').forEach(l => {\n l.classList.remove('bl-active');\n });\n }\n\n // Add active to clicked tab\n link.classList.add('bl-active');\n\n // Show/hide tab content\n const targetId = link.getAttribute('data-tab-target');\n if (targetId) {\n // Find all tab contents - search in parent container or document\n const container = tabsContainer.closest('.docs-example-preview') || \n tabsContainer.parentElement || \n document;\n \n container.querySelectorAll('[data-tab-content]').forEach(content => {\n content.style.display = 'none';\n });\n\n const targetContent = document.getElementById(targetId);\n if (targetContent) {\n targetContent.style.display = 'block';\n }\n }\n });\n });\n}\n\n", "// ============================================================================\n// Alert Component JavaScript\n// ============================================================================\n\nexport function initAlert(alertElement) {\n if (!alertElement) return;\n\n const closeBtn = alertElement.querySelector('.bl-alert-close');\n if (!closeBtn) return;\n\n closeBtn.addEventListener('click', () => {\n dismissAlert(alertElement);\n });\n}\n\nexport function dismissAlert(alertElement) {\n if (!alertElement) return;\n \n alertElement.style.transition = 'opacity 0.3s ease-out';\n alertElement.style.opacity = '0';\n setTimeout(() => {\n alertElement.remove();\n }, 300);\n}\n\n", "// ============================================================================\n// Baseline UI JavaScript\n// Main Entry Point\n// ============================================================================\n\nimport { initModal, openModal, closeModal } from './components/modal.js';\nimport { initDropdown } from './components/dropdown.js';\nimport { initTooltip } from './components/tooltip.js';\nimport { initTabs } from './components/tabs.js';\nimport { initAlert, dismissAlert } from './components/alert.js';\n\n// Export all functions for manual use\nexport {\n initModal,\n openModal,\n closeModal,\n initDropdown,\n initTooltip,\n initTabs,\n initAlert,\n dismissAlert\n};\n\n// Auto-initialize on DOM ready\nfunction autoInit() {\n // Initialize all modals\n document.querySelectorAll('.bl-modal').forEach(modal => {\n initModal(modal);\n });\n\n // Initialize all dropdowns\n document.querySelectorAll('.bl-dropdown').forEach(dropdown => {\n initDropdown(dropdown);\n });\n\n // Initialize all tooltips\n document.querySelectorAll('.bl-tooltip').forEach(tooltip => {\n initTooltip(tooltip);\n });\n\n // Initialize all tabs\n document.querySelectorAll('.bl-nav-tabs').forEach(tabs => {\n initTabs(tabs);\n });\n\n // Initialize all dismissible alerts\n document.querySelectorAll('.bl-alert-dismissible').forEach(alert => {\n initAlert(alert);\n });\n}\n\n// Initialize when DOM is ready\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInit);\n} else {\n // Use setTimeout to ensure DOM is fully ready\n setTimeout(autoInit, 0);\n}\n\n"],
5
+ "mappings": "AAIO,SAASA,EAAUC,EAAc,CACtC,GAAI,CAACA,EAAc,OAEnB,IAAMC,EAAWD,EAAa,cAAc,oBAAoB,GAAK,SAAS,cAAc,KAAK,EAC5FC,EAAS,UAAU,SAAS,mBAAmB,IAClDA,EAAS,UAAY,oBACrBD,EAAa,aAAaC,EAAUD,EAAa,UAAU,GAI7D,IAAME,EAAUF,EAAa,GACzBE,GACkB,SAAS,iBAAiB,qBAAqBA,CAAO,IAAI,EAClE,QAAQC,GAAO,CACzBA,EAAI,iBAAiB,QAAS,IAAM,CAClCC,EAAUF,CAAO,CACnB,CAAC,CACH,CAAC,EAIkBF,EAAa,iBAAiB,qCAAqC,EAC3E,QAAQG,GAAO,CAC1BA,EAAI,iBAAiB,QAAS,IAAM,CAClCE,EAAWH,CAAO,CACpB,CAAC,CACH,CAAC,EAGDD,EAAS,iBAAiB,QAAUK,GAAM,CACpCA,EAAE,SAAWL,GACfI,EAAWH,CAAO,CAEtB,CAAC,EAGD,IAAMK,EAAcD,GAAM,CACpBA,EAAE,MAAQ,UAAYN,EAAa,MAAM,UAAY,SACvDK,EAAWH,CAAO,CAEtB,EACA,SAAS,iBAAiB,UAAWK,CAAU,EAG/CP,EAAa,YAAcO,CAC7B,CAEO,SAASH,EAAUF,EAAS,CACjC,IAAMM,EAAQ,SAAS,eAAeN,CAAO,EACzCM,IACFA,EAAM,MAAM,QAAU,QACtB,SAAS,KAAK,MAAM,SAAW,SAEnC,CAEO,SAASH,EAAWH,EAAS,CAClC,IAAMM,EAAQ,SAAS,eAAeN,CAAO,EACzCM,IACFA,EAAM,MAAM,QAAU,OACtB,SAAS,KAAK,MAAM,SAAW,GAEnC,CC7DO,SAASC,EAAaC,EAAiB,CAC5C,GAAI,CAACA,EAAiB,OAEtB,IAAMC,EAASD,EAAgB,cAAc,qBAAqB,EAC5DE,EAAOF,EAAgB,cAAc,mBAAmB,EAE9D,GAAI,CAACC,GAAU,CAACC,EAAM,OAEtBD,EAAO,iBAAiB,QAAUE,GAAM,CACtCA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAGlB,SAAS,iBAAiB,2BAA2B,EAAE,QAAQC,GAAa,CACtEA,IAAcF,GAChBE,EAAU,UAAU,OAAO,SAAS,CAExC,CAAC,EAGDF,EAAK,UAAU,OAAO,SAAS,CACjC,CAAC,EAGD,IAAMG,EAAuBF,GAAM,CAC5BH,EAAgB,SAASG,EAAE,MAAM,GACpCD,EAAK,UAAU,OAAO,SAAS,CAEnC,EAEA,SAAS,iBAAiB,QAASG,CAAmB,EAGtDL,EAAgB,qBAAuBK,CACzC,CClCO,SAASC,EAAYC,EAAgB,CAC1C,GAAI,CAACA,EAAgB,OAErB,IAAMC,EAAUD,EAAe,cAAc,qBAAqB,EAC5DE,EAAUF,EAAe,cAAc,qBAAqB,EAElE,GAAI,CAACC,GAAW,CAACC,EAAS,CACxB,QAAQ,KAAK,kDAAmDF,CAAc,EAC9E,MACF,CAGA,GAAIA,EAAe,oBAAqB,OAGxC,IAAMG,EAAgBC,GAAM,CAC1BF,EAAQ,UAAU,IAAI,SAAS,CACjC,EAEMG,EAAgBD,GAAM,CAErBJ,EAAe,SAASI,EAAE,aAAa,GAC1CF,EAAQ,UAAU,OAAO,SAAS,CAEtC,EAGAD,EAAQ,iBAAiB,aAAcE,CAAY,EACnDF,EAAQ,iBAAiB,aAAcI,CAAY,EAGnDL,EAAe,iBAAiB,aAAcK,CAAY,EAG1DL,EAAe,oBAAsB,GACrCA,EAAe,qBAAuBG,EACtCH,EAAe,qBAAuBK,CACxC,CCrCO,SAASC,EAASC,EAAe,CACtC,GAAI,CAACA,EAAe,OAEpB,IAAMC,EAAWD,EAAc,iBAAiB,+BAA+B,EACzEE,EAAWF,EAAc,aAAa,gBAAgB,EAE5DC,EAAS,QAAQE,GAAQ,CACvBA,EAAK,iBAAiB,QAAUC,GAAM,CACpCA,EAAE,eAAe,EAGbF,EACF,SAAS,iBAAiB,oBAAoBA,CAAQ,iBAAiB,EAAE,QAAQG,GAAK,CACpFA,EAAE,UAAU,OAAO,WAAW,CAChC,CAAC,EAEDL,EAAc,iBAAiB,cAAc,EAAE,QAAQK,GAAK,CAC1DA,EAAE,UAAU,OAAO,WAAW,CAChC,CAAC,EAIHF,EAAK,UAAU,IAAI,WAAW,EAG9B,IAAMG,EAAWH,EAAK,aAAa,iBAAiB,EACpD,GAAIG,EAAU,EAEMN,EAAc,QAAQ,uBAAuB,GAC9CA,EAAc,eACd,UAEP,iBAAiB,oBAAoB,EAAE,QAAQO,GAAW,CAClEA,EAAQ,MAAM,QAAU,MAC1B,CAAC,EAED,IAAMC,EAAgB,SAAS,eAAeF,CAAQ,EAClDE,IACFA,EAAc,MAAM,QAAU,QAElC,CACF,CAAC,CACH,CAAC,CACH,CC3CO,SAASC,EAAUC,EAAc,CACtC,GAAI,CAACA,EAAc,OAEnB,IAAMC,EAAWD,EAAa,cAAc,iBAAiB,EACxDC,GAELA,EAAS,iBAAiB,QAAS,IAAM,CACvCC,EAAaF,CAAY,CAC3B,CAAC,CACH,CAEO,SAASE,EAAaF,EAAc,CACpCA,IAELA,EAAa,MAAM,WAAa,wBAChCA,EAAa,MAAM,QAAU,IAC7B,WAAW,IAAM,CACfA,EAAa,OAAO,CACtB,EAAG,GAAG,EACR,CCCA,SAASG,GAAW,CAElB,SAAS,iBAAiB,WAAW,EAAE,QAAQC,GAAS,CACtDC,EAAUD,CAAK,CACjB,CAAC,EAGD,SAAS,iBAAiB,cAAc,EAAE,QAAQE,GAAY,CAC5DC,EAAaD,CAAQ,CACvB,CAAC,EAGD,SAAS,iBAAiB,aAAa,EAAE,QAAQE,GAAW,CAC1DC,EAAYD,CAAO,CACrB,CAAC,EAGD,SAAS,iBAAiB,cAAc,EAAE,QAAQE,GAAQ,CACxDC,EAASD,CAAI,CACf,CAAC,EAGD,SAAS,iBAAiB,uBAAuB,EAAE,QAAQE,GAAS,CAClEC,EAAUD,CAAK,CACjB,CAAC,CACH,CAGI,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoBT,CAAQ,EAGtD,WAAWA,EAAU,CAAC",
6
+ "names": ["initModal", "modalElement", "backdrop", "modalId", "btn", "openModal", "closeModal", "e", "escHandler", "modal", "initDropdown", "dropdownElement", "toggle", "menu", "e", "otherMenu", "outsideClickHandler", "initTooltip", "tooltipElement", "trigger", "content", "enterHandler", "e", "leaveHandler", "initTabs", "tabsContainer", "tabLinks", "tabGroup", "link", "e", "l", "targetId", "content", "targetContent", "initAlert", "alertElement", "closeBtn", "dismissAlert", "autoInit", "modal", "initModal", "dropdown", "initDropdown", "tooltip", "initTooltip", "tabs", "initTabs", "alert", "initAlert"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhavenside/baseline-ui",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "type": "module",
5
5
  "description": "A technical glass design framework with SCSS source and compiled CSS - minimalist, rectangular forms with milky glass effects",
6
6
  "main": "dist/baseline.css",
@@ -14,24 +14,30 @@ export function initTooltip(tooltipElement) {
14
14
  }
15
15
 
16
16
  // Skip if already initialized
17
- if (trigger._tooltipInitialized) return;
17
+ if (tooltipElement._tooltipInitialized) return;
18
18
 
19
- // Create handlers
20
- const enterHandler = () => {
19
+ // Create handlers - use tooltipElement to handle hover on entire tooltip
20
+ const enterHandler = (e) => {
21
21
  content.classList.add('bl-show');
22
22
  };
23
23
 
24
- const leaveHandler = () => {
25
- content.classList.remove('bl-show');
24
+ const leaveHandler = (e) => {
25
+ // Only hide if mouse leaves the tooltip element (not just the trigger)
26
+ if (!tooltipElement.contains(e.relatedTarget)) {
27
+ content.classList.remove('bl-show');
28
+ }
26
29
  };
27
30
 
28
- // Add event listeners
31
+ // Add event listeners to trigger
29
32
  trigger.addEventListener('mouseenter', enterHandler);
30
33
  trigger.addEventListener('mouseleave', leaveHandler);
34
+
35
+ // Also handle mouseleave on tooltip element to hide when leaving tooltip area
36
+ tooltipElement.addEventListener('mouseleave', leaveHandler);
31
37
 
32
38
  // Mark as initialized
33
- trigger._tooltipInitialized = true;
34
- trigger._tooltipEnterHandler = enterHandler;
35
- trigger._tooltipLeaveHandler = leaveHandler;
39
+ tooltipElement._tooltipInitialized = true;
40
+ tooltipElement._tooltipEnterHandler = enterHandler;
41
+ tooltipElement._tooltipLeaveHandler = leaveHandler;
36
42
  }
37
43