@rhavenside/baseline-ui 1.0.16 → 1.0.17

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
@@ -179,6 +179,199 @@ function dismissAlert(alertElement) {
179
179
  }, 300);
180
180
  }
181
181
 
182
+ // src/js/components/sidebar.js
183
+ function initSidebar(sidebarElement) {
184
+ if (!sidebarElement)
185
+ return;
186
+ const sidebarId = sidebarElement.id;
187
+ if (!sidebarId)
188
+ return;
189
+ let backdrop = document.querySelector(".bl-sidebar-backdrop");
190
+ if (!backdrop) {
191
+ backdrop = document.createElement("div");
192
+ backdrop.className = "bl-sidebar-backdrop";
193
+ document.body.appendChild(backdrop);
194
+ }
195
+ const closeButton = sidebarElement.querySelector(".bl-sidebar-close");
196
+ if (closeButton) {
197
+ closeButton.addEventListener("click", () => {
198
+ closeSidebar(sidebarId);
199
+ });
200
+ }
201
+ const toggleButtons = document.querySelectorAll(`[data-sidebar-toggle="${sidebarId}"]`);
202
+ toggleButtons.forEach((btn) => {
203
+ btn.addEventListener("click", () => {
204
+ toggleSidebar(sidebarId);
205
+ });
206
+ });
207
+ backdrop.addEventListener("click", () => {
208
+ if (isMobile() && sidebarElement.classList.contains("bl-sidebar-open")) {
209
+ closeSidebar(sidebarId);
210
+ }
211
+ });
212
+ const escHandler = (e) => {
213
+ if (e.key === "Escape" && isMobile() && sidebarElement.classList.contains("bl-sidebar-open")) {
214
+ closeSidebar(sidebarId);
215
+ }
216
+ };
217
+ document.addEventListener("keydown", escHandler);
218
+ sidebarElement._escHandler = escHandler;
219
+ const resizeHandler = () => {
220
+ if (!isMobile() && sidebarElement.classList.contains("bl-sidebar-open")) {
221
+ sidebarElement.classList.remove("bl-sidebar-open");
222
+ }
223
+ };
224
+ window.addEventListener("resize", resizeHandler);
225
+ sidebarElement._resizeHandler = resizeHandler;
226
+ }
227
+ function toggleSidebar(sidebarId) {
228
+ const sidebar = document.getElementById(sidebarId);
229
+ if (!sidebar)
230
+ return;
231
+ if (sidebar.classList.contains("bl-sidebar-open")) {
232
+ closeSidebar(sidebarId);
233
+ } else {
234
+ openSidebar(sidebarId);
235
+ }
236
+ }
237
+ function openSidebar(sidebarId) {
238
+ const sidebar = document.getElementById(sidebarId);
239
+ if (!sidebar)
240
+ return;
241
+ sidebar.classList.add("bl-sidebar-open");
242
+ if (isMobile()) {
243
+ document.body.style.overflow = "hidden";
244
+ }
245
+ }
246
+ function closeSidebar(sidebarId) {
247
+ const sidebar = document.getElementById(sidebarId);
248
+ if (!sidebar)
249
+ return;
250
+ sidebar.classList.remove("bl-sidebar-open");
251
+ document.body.style.overflow = "";
252
+ }
253
+ function isMobile() {
254
+ return window.innerWidth < 768;
255
+ }
256
+
257
+ // src/js/components/accordion.js
258
+ function initAccordion(accordionElement) {
259
+ if (!accordionElement)
260
+ return;
261
+ const items = accordionElement.querySelectorAll(".bl-accordion-item");
262
+ const isSingleMode = accordionElement.classList.contains("bl-accordion-single");
263
+ items.forEach((item) => {
264
+ const header = item.querySelector(".bl-accordion-header");
265
+ if (!header)
266
+ return;
267
+ header.addEventListener("click", () => {
268
+ toggleAccordionItem(item, isSingleMode, accordionElement);
269
+ });
270
+ });
271
+ }
272
+ function toggleAccordionItem(itemElement, closeOthers = false, accordionElement = null) {
273
+ if (!itemElement)
274
+ return;
275
+ const isOpen = itemElement.classList.contains("bl-accordion-open");
276
+ if (closeOthers && accordionElement) {
277
+ const allItems = accordionElement.querySelectorAll(".bl-accordion-item");
278
+ allItems.forEach((item) => {
279
+ if (item !== itemElement && item.classList.contains("bl-accordion-open")) {
280
+ item.classList.remove("bl-accordion-open");
281
+ }
282
+ });
283
+ }
284
+ if (isOpen) {
285
+ itemElement.classList.remove("bl-accordion-open");
286
+ } else {
287
+ itemElement.classList.add("bl-accordion-open");
288
+ }
289
+ }
290
+
291
+ // src/js/components/toast.js
292
+ var defaultOptions = {
293
+ type: "info",
294
+ position: "top-right",
295
+ duration: 5e3,
296
+ title: null,
297
+ closable: true
298
+ };
299
+ function getToastContainer(position) {
300
+ const containerId = `bl-toast-container-${position}`;
301
+ let container = document.getElementById(containerId);
302
+ if (!container) {
303
+ container = document.createElement("div");
304
+ container.id = containerId;
305
+ container.className = `bl-toast-container bl-toast-${position}`;
306
+ document.body.appendChild(container);
307
+ }
308
+ return container;
309
+ }
310
+ function createToastElement(message, type, title, closable) {
311
+ const toast = document.createElement("div");
312
+ toast.className = `bl-toast bl-toast-${type}`;
313
+ const content = document.createElement("div");
314
+ content.className = "bl-toast-content";
315
+ if (title) {
316
+ const titleEl = document.createElement("div");
317
+ titleEl.className = "bl-toast-title";
318
+ titleEl.textContent = title;
319
+ content.appendChild(titleEl);
320
+ }
321
+ const messageEl = document.createElement("div");
322
+ messageEl.className = "bl-toast-message";
323
+ messageEl.textContent = message;
324
+ content.appendChild(messageEl);
325
+ toast.appendChild(content);
326
+ if (closable) {
327
+ const closeBtn = document.createElement("button");
328
+ closeBtn.className = "bl-toast-close";
329
+ closeBtn.setAttribute("aria-label", "Close");
330
+ closeBtn.innerHTML = "\xD7";
331
+ closeBtn.addEventListener("click", () => {
332
+ removeToast(toast);
333
+ });
334
+ toast.appendChild(closeBtn);
335
+ }
336
+ return toast;
337
+ }
338
+ function removeToast(toast) {
339
+ toast.classList.add("bl-toast-closing");
340
+ toast.addEventListener("animationend", () => {
341
+ toast.remove();
342
+ const container = toast.parentElement;
343
+ if (container && container.classList.contains("bl-toast-container") && container.children.length === 0) {
344
+ container.remove();
345
+ }
346
+ }, { once: true });
347
+ }
348
+ function showToast(message, type = "info", options = {}) {
349
+ const opts = { ...defaultOptions, ...options, type };
350
+ const container = getToastContainer(opts.position);
351
+ const toast = createToastElement(message, opts.type, opts.title, opts.closable);
352
+ container.appendChild(toast);
353
+ if (opts.duration > 0) {
354
+ setTimeout(() => {
355
+ if (toast.parentElement) {
356
+ removeToast(toast);
357
+ }
358
+ }, opts.duration);
359
+ }
360
+ return toast;
361
+ }
362
+ function showToastSuccess(message, options = {}) {
363
+ return showToast(message, "success", { ...options, title: options.title || "Success" });
364
+ }
365
+ function showToastError(message, options = {}) {
366
+ return showToast(message, "error", { ...options, title: options.title || "Error" });
367
+ }
368
+ function showToastWarning(message, options = {}) {
369
+ return showToast(message, "warning", { ...options, title: options.title || "Warning" });
370
+ }
371
+ function showToastInfo(message, options = {}) {
372
+ return showToast(message, "info", { ...options, title: options.title || "Info" });
373
+ }
374
+
182
375
  // src/js/baseline.js
183
376
  function autoInit() {
184
377
  document.querySelectorAll(".bl-modal").forEach((modal) => {
@@ -196,6 +389,12 @@ function autoInit() {
196
389
  document.querySelectorAll(".bl-alert-dismissible").forEach((alert) => {
197
390
  initAlert(alert);
198
391
  });
392
+ document.querySelectorAll(".bl-sidebar").forEach((sidebar) => {
393
+ initSidebar(sidebar);
394
+ });
395
+ document.querySelectorAll(".bl-accordion").forEach((accordion) => {
396
+ initAccordion(accordion);
397
+ });
199
398
  }
200
399
  if (document.readyState === "loading") {
201
400
  document.addEventListener("DOMContentLoaded", () => {
@@ -210,12 +409,23 @@ if (document.readyState === "loading") {
210
409
  }
211
410
  export {
212
411
  closeModal,
412
+ closeSidebar,
213
413
  dismissAlert,
414
+ initAccordion,
214
415
  initAlert,
215
416
  initDropdown,
216
417
  initModal,
418
+ initSidebar,
217
419
  initTabs,
218
420
  initTooltip,
219
- openModal
421
+ openModal,
422
+ openSidebar,
423
+ showToast,
424
+ showToastError,
425
+ showToastInfo,
426
+ showToastSuccess,
427
+ showToastWarning,
428
+ toggleAccordionItem,
429
+ toggleSidebar
220
430
  };
221
431
  //# sourceMappingURL=baseline.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 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.classList.contains('bl-modal-open')) {\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 // Remove closing class if present\n modal.classList.remove('bl-modal-closing');\n // Add open class to trigger animation\n modal.classList.add('bl-modal-open');\n document.body.style.overflow = 'hidden';\n }\n}\n\nexport function closeModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n // Add closing class to trigger close animation\n modal.classList.add('bl-modal-closing');\n modal.classList.remove('bl-modal-open');\n \n // WICHTIG: Overflow sofort zur\u00FCcksetzen, wenn keine anderen Modals offen sind\n // (Animation l\u00E4uft weiter, aber Scrollen ist wieder m\u00F6glich)\n const openModals = document.querySelectorAll('.bl-modal.bl-modal-open');\n if (openModals.length === 0) {\n document.body.style.overflow = '';\n }\n \n // Wait for animation to complete before cleaning up\n const handleAnimationEnd = () => {\n modal.classList.remove('bl-modal-closing');\n };\n \n // Listen for animation end on dialog (which has the slide animation)\n const dialog = modal.querySelector('.bl-modal-dialog');\n if (dialog) {\n dialog.addEventListener('animationend', handleAnimationEnd, { once: true });\n } else {\n // Fallback: use backdrop animation or timeout\n const backdrop = modal.querySelector('.bl-modal-backdrop');\n if (backdrop) {\n backdrop.addEventListener('animationend', handleAnimationEnd, { once: true });\n } else {\n // Fallback timeout if no animation\n setTimeout(handleAnimationEnd, 200);\n }\n }\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\n// Use requestAnimationFrame for better timing with ES modules\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n // Wait for next frame to ensure all elements are rendered\n requestAnimationFrame(() => {\n requestAnimationFrame(autoInit);\n });\n });\n} else {\n // DOM already loaded, but wait for next frame to ensure everything is ready\n requestAnimationFrame(() => {\n requestAnimationFrame(autoInit);\n });\n}\n\n"],
5
- "mappings": "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",
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/components/sidebar.js", "../src/js/components/accordion.js", "../src/js/components/toast.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.classList.contains('bl-modal-open')) {\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 // Remove closing class if present\n modal.classList.remove('bl-modal-closing');\n // Add open class to trigger animation\n modal.classList.add('bl-modal-open');\n document.body.style.overflow = 'hidden';\n }\n}\n\nexport function closeModal(modalId) {\n const modal = document.getElementById(modalId);\n if (modal) {\n // Add closing class to trigger close animation\n modal.classList.add('bl-modal-closing');\n modal.classList.remove('bl-modal-open');\n \n // WICHTIG: Overflow sofort zur\u00FCcksetzen, wenn keine anderen Modals offen sind\n // (Animation l\u00E4uft weiter, aber Scrollen ist wieder m\u00F6glich)\n const openModals = document.querySelectorAll('.bl-modal.bl-modal-open');\n if (openModals.length === 0) {\n document.body.style.overflow = '';\n }\n \n // Wait for animation to complete before cleaning up\n const handleAnimationEnd = () => {\n modal.classList.remove('bl-modal-closing');\n };\n \n // Listen for animation end on dialog (which has the slide animation)\n const dialog = modal.querySelector('.bl-modal-dialog');\n if (dialog) {\n dialog.addEventListener('animationend', handleAnimationEnd, { once: true });\n } else {\n // Fallback: use backdrop animation or timeout\n const backdrop = modal.querySelector('.bl-modal-backdrop');\n if (backdrop) {\n backdrop.addEventListener('animationend', handleAnimationEnd, { once: true });\n } else {\n // Fallback timeout if no animation\n setTimeout(handleAnimationEnd, 200);\n }\n }\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// Sidebar Component JavaScript\n// ============================================================================\n\nexport function initSidebar(sidebarElement) {\n if (!sidebarElement) return;\n\n const sidebarId = sidebarElement.id;\n if (!sidebarId) return;\n\n // Create backdrop if it doesn't exist (mobile only)\n let backdrop = document.querySelector('.bl-sidebar-backdrop');\n if (!backdrop) {\n backdrop = document.createElement('div');\n backdrop.className = 'bl-sidebar-backdrop';\n document.body.appendChild(backdrop);\n }\n\n // Close button\n const closeButton = sidebarElement.querySelector('.bl-sidebar-close');\n if (closeButton) {\n closeButton.addEventListener('click', () => {\n closeSidebar(sidebarId);\n });\n }\n\n // Toggle buttons\n const toggleButtons = document.querySelectorAll(`[data-sidebar-toggle=\"${sidebarId}\"]`);\n toggleButtons.forEach(btn => {\n btn.addEventListener('click', () => {\n toggleSidebar(sidebarId);\n });\n });\n\n // Close on backdrop click (mobile only)\n backdrop.addEventListener('click', () => {\n if (isMobile() && sidebarElement.classList.contains('bl-sidebar-open')) {\n closeSidebar(sidebarId);\n }\n });\n\n // Close on ESC key (mobile only)\n const escHandler = (e) => {\n if (e.key === 'Escape' && isMobile() && sidebarElement.classList.contains('bl-sidebar-open')) {\n closeSidebar(sidebarId);\n }\n };\n document.addEventListener('keydown', escHandler);\n \n // Store handler for cleanup if needed\n sidebarElement._escHandler = escHandler;\n\n // Handle window resize (responsive behavior)\n const resizeHandler = () => {\n if (!isMobile() && sidebarElement.classList.contains('bl-sidebar-open')) {\n // On desktop, sidebar is always visible, remove open class\n sidebarElement.classList.remove('bl-sidebar-open');\n }\n };\n window.addEventListener('resize', resizeHandler);\n sidebarElement._resizeHandler = resizeHandler;\n}\n\nexport function toggleSidebar(sidebarId) {\n const sidebar = document.getElementById(sidebarId);\n if (!sidebar) return;\n\n if (sidebar.classList.contains('bl-sidebar-open')) {\n closeSidebar(sidebarId);\n } else {\n openSidebar(sidebarId);\n }\n}\n\nexport function openSidebar(sidebarId) {\n const sidebar = document.getElementById(sidebarId);\n if (!sidebar) return;\n\n sidebar.classList.add('bl-sidebar-open');\n \n // Lock body scroll on mobile\n if (isMobile()) {\n document.body.style.overflow = 'hidden';\n }\n}\n\nexport function closeSidebar(sidebarId) {\n const sidebar = document.getElementById(sidebarId);\n if (!sidebar) return;\n\n sidebar.classList.remove('bl-sidebar-open');\n \n // Unlock body scroll\n document.body.style.overflow = '';\n}\n\n// Helper function to check if mobile\nfunction isMobile() {\n return window.innerWidth < 768;\n}\n\n", "// ============================================================================\n// Accordion Component JavaScript\n// ============================================================================\n\nexport function initAccordion(accordionElement) {\n if (!accordionElement) return;\n\n const items = accordionElement.querySelectorAll('.bl-accordion-item');\n const isSingleMode = accordionElement.classList.contains('bl-accordion-single');\n\n items.forEach(item => {\n const header = item.querySelector('.bl-accordion-header');\n if (!header) return;\n\n header.addEventListener('click', () => {\n toggleAccordionItem(item, isSingleMode, accordionElement);\n });\n });\n}\n\nexport function toggleAccordionItem(itemElement, closeOthers = false, accordionElement = null) {\n if (!itemElement) return;\n\n const isOpen = itemElement.classList.contains('bl-accordion-open');\n\n if (closeOthers && accordionElement) {\n // Close all other items\n const allItems = accordionElement.querySelectorAll('.bl-accordion-item');\n allItems.forEach(item => {\n if (item !== itemElement && item.classList.contains('bl-accordion-open')) {\n item.classList.remove('bl-accordion-open');\n }\n });\n }\n\n // Toggle current item\n if (isOpen) {\n itemElement.classList.remove('bl-accordion-open');\n } else {\n itemElement.classList.add('bl-accordion-open');\n }\n}\n\n", "// ============================================================================\n// Toast Component JavaScript\n// ============================================================================\n\n// Default options\nconst defaultOptions = {\n type: 'info',\n position: 'top-right',\n duration: 5000,\n title: null,\n closable: true\n};\n\n// Get or create toast container\nfunction getToastContainer(position) {\n const containerId = `bl-toast-container-${position}`;\n let container = document.getElementById(containerId);\n \n if (!container) {\n container = document.createElement('div');\n container.id = containerId;\n container.className = `bl-toast-container bl-toast-${position}`;\n document.body.appendChild(container);\n }\n \n return container;\n}\n\n// Create toast element\nfunction createToastElement(message, type, title, closable) {\n const toast = document.createElement('div');\n toast.className = `bl-toast bl-toast-${type}`;\n \n const content = document.createElement('div');\n content.className = 'bl-toast-content';\n \n if (title) {\n const titleEl = document.createElement('div');\n titleEl.className = 'bl-toast-title';\n titleEl.textContent = title;\n content.appendChild(titleEl);\n }\n \n const messageEl = document.createElement('div');\n messageEl.className = 'bl-toast-message';\n messageEl.textContent = message;\n content.appendChild(messageEl);\n \n toast.appendChild(content);\n \n if (closable) {\n const closeBtn = document.createElement('button');\n closeBtn.className = 'bl-toast-close';\n closeBtn.setAttribute('aria-label', 'Close');\n closeBtn.innerHTML = '\u00D7';\n closeBtn.addEventListener('click', () => {\n removeToast(toast);\n });\n toast.appendChild(closeBtn);\n }\n \n return toast;\n}\n\n// Remove toast with animation\nfunction removeToast(toast) {\n toast.classList.add('bl-toast-closing');\n \n toast.addEventListener('animationend', () => {\n toast.remove();\n \n // Remove container if empty\n const container = toast.parentElement;\n if (container && container.classList.contains('bl-toast-container') && container.children.length === 0) {\n container.remove();\n }\n }, { once: true });\n}\n\n// Main showToast function\nexport function showToast(message, type = 'info', options = {}) {\n const opts = { ...defaultOptions, ...options, type };\n const container = getToastContainer(opts.position);\n const toast = createToastElement(message, opts.type, opts.title, opts.closable);\n \n container.appendChild(toast);\n \n // Auto-dismiss after duration\n if (opts.duration > 0) {\n setTimeout(() => {\n if (toast.parentElement) {\n removeToast(toast);\n }\n }, opts.duration);\n }\n \n return toast;\n}\n\n// Convenience functions\nexport function showToastSuccess(message, options = {}) {\n return showToast(message, 'success', { ...options, title: options.title || 'Success' });\n}\n\nexport function showToastError(message, options = {}) {\n return showToast(message, 'error', { ...options, title: options.title || 'Error' });\n}\n\nexport function showToastWarning(message, options = {}) {\n return showToast(message, 'warning', { ...options, title: options.title || 'Warning' });\n}\n\nexport function showToastInfo(message, options = {}) {\n return showToast(message, 'info', { ...options, title: options.title || 'Info' });\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';\nimport { initSidebar, toggleSidebar, openSidebar, closeSidebar } from './components/sidebar.js';\nimport { initAccordion, toggleAccordionItem } from './components/accordion.js';\nimport { showToast, showToastSuccess, showToastError, showToastWarning, showToastInfo } from './components/toast.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 initSidebar,\n toggleSidebar,\n openSidebar,\n closeSidebar,\n initAccordion,\n toggleAccordionItem,\n showToast,\n showToastSuccess,\n showToastError,\n showToastWarning,\n showToastInfo\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 // Initialize all sidebars\n document.querySelectorAll('.bl-sidebar').forEach(sidebar => {\n initSidebar(sidebar);\n });\n\n // Initialize all accordions\n document.querySelectorAll('.bl-accordion').forEach(accordion => {\n initAccordion(accordion);\n });\n}\n\n// Initialize when DOM is ready\n// Use requestAnimationFrame for better timing with ES modules\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n // Wait for next frame to ensure all elements are rendered\n requestAnimationFrame(() => {\n requestAnimationFrame(autoInit);\n });\n });\n} else {\n // DOM already loaded, but wait for next frame to ensure everything is ready\n requestAnimationFrame(() => {\n requestAnimationFrame(autoInit);\n });\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,UAAU,SAAS,eAAe,GAAG;AAC1E,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;AAET,UAAM,UAAU,OAAO,kBAAkB;AAEzC,UAAM,UAAU,IAAI,eAAe;AACnC,aAAS,KAAK,MAAM,WAAW;AAAA,EACjC;AACF;AAEO,SAAS,WAAW,SAAS;AAClC,QAAM,QAAQ,SAAS,eAAe,OAAO;AAC7C,MAAI,OAAO;AAET,UAAM,UAAU,IAAI,kBAAkB;AACtC,UAAM,UAAU,OAAO,eAAe;AAItC,UAAM,aAAa,SAAS,iBAAiB,yBAAyB;AACtE,QAAI,WAAW,WAAW,GAAG;AAC3B,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAGA,UAAM,qBAAqB,MAAM;AAC/B,YAAM,UAAU,OAAO,kBAAkB;AAAA,IAC3C;AAGA,UAAM,SAAS,MAAM,cAAc,kBAAkB;AACrD,QAAI,QAAQ;AACV,aAAO,iBAAiB,gBAAgB,oBAAoB,EAAE,MAAM,KAAK,CAAC;AAAA,IAC5E,OAAO;AAEL,YAAM,WAAW,MAAM,cAAc,oBAAoB;AACzD,UAAI,UAAU;AACZ,iBAAS,iBAAiB,gBAAgB,oBAAoB,EAAE,MAAM,KAAK,CAAC;AAAA,MAC9E,OAAO;AAEL,mBAAW,oBAAoB,GAAG;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AACF;;;AC5FO,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,eAAe;AAAqB;AAGxC,QAAM,eAAe,CAAC,MAAM;AAC1B,YAAQ,UAAU,IAAI,SAAS;AAAA,EACjC;AAEA,QAAM,eAAe,CAAC,MAAM;AAE1B,QAAI,CAAC,eAAe,SAAS,EAAE,aAAa,GAAG;AAC7C,cAAQ,UAAU,OAAO,SAAS;AAAA,IACpC;AAAA,EACF;AAGA,UAAQ,iBAAiB,cAAc,YAAY;AACnD,UAAQ,iBAAiB,cAAc,YAAY;AAGnD,iBAAe,iBAAiB,cAAc,YAAY;AAG1D,iBAAe,sBAAsB;AACrC,iBAAe,uBAAuB;AACtC,iBAAe,uBAAuB;AACxC;;;ACrCO,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;;;ACnBO,SAAS,YAAY,gBAAgB;AAC1C,MAAI,CAAC;AAAgB;AAErB,QAAM,YAAY,eAAe;AACjC,MAAI,CAAC;AAAW;AAGhB,MAAI,WAAW,SAAS,cAAc,sBAAsB;AAC5D,MAAI,CAAC,UAAU;AACb,eAAW,SAAS,cAAc,KAAK;AACvC,aAAS,YAAY;AACrB,aAAS,KAAK,YAAY,QAAQ;AAAA,EACpC;AAGA,QAAM,cAAc,eAAe,cAAc,mBAAmB;AACpE,MAAI,aAAa;AACf,gBAAY,iBAAiB,SAAS,MAAM;AAC1C,mBAAa,SAAS;AAAA,IACxB,CAAC;AAAA,EACH;AAGA,QAAM,gBAAgB,SAAS,iBAAiB,yBAAyB,SAAS,IAAI;AACtF,gBAAc,QAAQ,SAAO;AAC3B,QAAI,iBAAiB,SAAS,MAAM;AAClC,oBAAc,SAAS;AAAA,IACzB,CAAC;AAAA,EACH,CAAC;AAGD,WAAS,iBAAiB,SAAS,MAAM;AACvC,QAAI,SAAS,KAAK,eAAe,UAAU,SAAS,iBAAiB,GAAG;AACtE,mBAAa,SAAS;AAAA,IACxB;AAAA,EACF,CAAC;AAGD,QAAM,aAAa,CAAC,MAAM;AACxB,QAAI,EAAE,QAAQ,YAAY,SAAS,KAAK,eAAe,UAAU,SAAS,iBAAiB,GAAG;AAC5F,mBAAa,SAAS;AAAA,IACxB;AAAA,EACF;AACA,WAAS,iBAAiB,WAAW,UAAU;AAG/C,iBAAe,cAAc;AAG7B,QAAM,gBAAgB,MAAM;AAC1B,QAAI,CAAC,SAAS,KAAK,eAAe,UAAU,SAAS,iBAAiB,GAAG;AAEvE,qBAAe,UAAU,OAAO,iBAAiB;AAAA,IACnD;AAAA,EACF;AACA,SAAO,iBAAiB,UAAU,aAAa;AAC/C,iBAAe,iBAAiB;AAClC;AAEO,SAAS,cAAc,WAAW;AACvC,QAAM,UAAU,SAAS,eAAe,SAAS;AACjD,MAAI,CAAC;AAAS;AAEd,MAAI,QAAQ,UAAU,SAAS,iBAAiB,GAAG;AACjD,iBAAa,SAAS;AAAA,EACxB,OAAO;AACL,gBAAY,SAAS;AAAA,EACvB;AACF;AAEO,SAAS,YAAY,WAAW;AACrC,QAAM,UAAU,SAAS,eAAe,SAAS;AACjD,MAAI,CAAC;AAAS;AAEd,UAAQ,UAAU,IAAI,iBAAiB;AAGvC,MAAI,SAAS,GAAG;AACd,aAAS,KAAK,MAAM,WAAW;AAAA,EACjC;AACF;AAEO,SAAS,aAAa,WAAW;AACtC,QAAM,UAAU,SAAS,eAAe,SAAS;AACjD,MAAI,CAAC;AAAS;AAEd,UAAQ,UAAU,OAAO,iBAAiB;AAG1C,WAAS,KAAK,MAAM,WAAW;AACjC;AAGA,SAAS,WAAW;AAClB,SAAO,OAAO,aAAa;AAC7B;;;AC/FO,SAAS,cAAc,kBAAkB;AAC9C,MAAI,CAAC;AAAkB;AAEvB,QAAM,QAAQ,iBAAiB,iBAAiB,oBAAoB;AACpE,QAAM,eAAe,iBAAiB,UAAU,SAAS,qBAAqB;AAE9E,QAAM,QAAQ,UAAQ;AACpB,UAAM,SAAS,KAAK,cAAc,sBAAsB;AACxD,QAAI,CAAC;AAAQ;AAEb,WAAO,iBAAiB,SAAS,MAAM;AACrC,0BAAoB,MAAM,cAAc,gBAAgB;AAAA,IAC1D,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,oBAAoB,aAAa,cAAc,OAAO,mBAAmB,MAAM;AAC7F,MAAI,CAAC;AAAa;AAElB,QAAM,SAAS,YAAY,UAAU,SAAS,mBAAmB;AAEjE,MAAI,eAAe,kBAAkB;AAEnC,UAAM,WAAW,iBAAiB,iBAAiB,oBAAoB;AACvE,aAAS,QAAQ,UAAQ;AACvB,UAAI,SAAS,eAAe,KAAK,UAAU,SAAS,mBAAmB,GAAG;AACxE,aAAK,UAAU,OAAO,mBAAmB;AAAA,MAC3C;AAAA,IACF,CAAC;AAAA,EACH;AAGA,MAAI,QAAQ;AACV,gBAAY,UAAU,OAAO,mBAAmB;AAAA,EAClD,OAAO;AACL,gBAAY,UAAU,IAAI,mBAAmB;AAAA,EAC/C;AACF;;;ACpCA,IAAM,iBAAiB;AAAA,EACrB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AACZ;AAGA,SAAS,kBAAkB,UAAU;AACnC,QAAM,cAAc,sBAAsB,QAAQ;AAClD,MAAI,YAAY,SAAS,eAAe,WAAW;AAEnD,MAAI,CAAC,WAAW;AACd,gBAAY,SAAS,cAAc,KAAK;AACxC,cAAU,KAAK;AACf,cAAU,YAAY,+BAA+B,QAAQ;AAC7D,aAAS,KAAK,YAAY,SAAS;AAAA,EACrC;AAEA,SAAO;AACT;AAGA,SAAS,mBAAmB,SAAS,MAAM,OAAO,UAAU;AAC1D,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,YAAY,qBAAqB,IAAI;AAE3C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,UAAQ,YAAY;AAEpB,MAAI,OAAO;AACT,UAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,YAAQ,YAAY;AACpB,YAAQ,cAAc;AACtB,YAAQ,YAAY,OAAO;AAAA,EAC7B;AAEA,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,YAAU,YAAY;AACtB,YAAU,cAAc;AACxB,UAAQ,YAAY,SAAS;AAE7B,QAAM,YAAY,OAAO;AAEzB,MAAI,UAAU;AACZ,UAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,aAAS,YAAY;AACrB,aAAS,aAAa,cAAc,OAAO;AAC3C,aAAS,YAAY;AACrB,aAAS,iBAAiB,SAAS,MAAM;AACvC,kBAAY,KAAK;AAAA,IACnB,CAAC;AACD,UAAM,YAAY,QAAQ;AAAA,EAC5B;AAEA,SAAO;AACT;AAGA,SAAS,YAAY,OAAO;AAC1B,QAAM,UAAU,IAAI,kBAAkB;AAEtC,QAAM,iBAAiB,gBAAgB,MAAM;AAC3C,UAAM,OAAO;AAGb,UAAM,YAAY,MAAM;AACxB,QAAI,aAAa,UAAU,UAAU,SAAS,oBAAoB,KAAK,UAAU,SAAS,WAAW,GAAG;AACtG,gBAAU,OAAO;AAAA,IACnB;AAAA,EACF,GAAG,EAAE,MAAM,KAAK,CAAC;AACnB;AAGO,SAAS,UAAU,SAAS,OAAO,QAAQ,UAAU,CAAC,GAAG;AAC9D,QAAM,OAAO,EAAE,GAAG,gBAAgB,GAAG,SAAS,KAAK;AACnD,QAAM,YAAY,kBAAkB,KAAK,QAAQ;AACjD,QAAM,QAAQ,mBAAmB,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ;AAE9E,YAAU,YAAY,KAAK;AAG3B,MAAI,KAAK,WAAW,GAAG;AACrB,eAAW,MAAM;AACf,UAAI,MAAM,eAAe;AACvB,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF,GAAG,KAAK,QAAQ;AAAA,EAClB;AAEA,SAAO;AACT;AAGO,SAAS,iBAAiB,SAAS,UAAU,CAAC,GAAG;AACtD,SAAO,UAAU,SAAS,WAAW,EAAE,GAAG,SAAS,OAAO,QAAQ,SAAS,UAAU,CAAC;AACxF;AAEO,SAAS,eAAe,SAAS,UAAU,CAAC,GAAG;AACpD,SAAO,UAAU,SAAS,SAAS,EAAE,GAAG,SAAS,OAAO,QAAQ,SAAS,QAAQ,CAAC;AACpF;AAEO,SAAS,iBAAiB,SAAS,UAAU,CAAC,GAAG;AACtD,SAAO,UAAU,SAAS,WAAW,EAAE,GAAG,SAAS,OAAO,QAAQ,SAAS,UAAU,CAAC;AACxF;AAEO,SAAS,cAAc,SAAS,UAAU,CAAC,GAAG;AACnD,SAAO,UAAU,SAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,QAAQ,SAAS,OAAO,CAAC;AAClF;;;AC5EA,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;AAGD,WAAS,iBAAiB,aAAa,EAAE,QAAQ,aAAW;AAC1D,gBAAY,OAAO;AAAA,EACrB,CAAC;AAGD,WAAS,iBAAiB,eAAe,EAAE,QAAQ,eAAa;AAC9D,kBAAc,SAAS;AAAA,EACzB,CAAC;AACH;AAIA,IAAI,SAAS,eAAe,WAAW;AACrC,WAAS,iBAAiB,oBAAoB,MAAM;AAElD,0BAAsB,MAAM;AAC1B,4BAAsB,QAAQ;AAAA,IAChC,CAAC;AAAA,EACH,CAAC;AACH,OAAO;AAEL,wBAAsB,MAAM;AAC1B,0BAAsB,QAAQ;AAAA,EAChC,CAAC;AACH;",
6
6
  "names": []
7
7
  }