fokus-styles 2.0.0 → 2.4.0

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.
Files changed (137) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +4 -3
  3. package/dist/css/components.css +532 -2
  4. package/dist/css/components.css.map +1 -1
  5. package/dist/css/components.min.css +1 -1
  6. package/dist/css/components.min.css.map +1 -1
  7. package/dist/css/fokus-components.css +4072 -0
  8. package/dist/css/fokus-components.css.map +1 -0
  9. package/dist/css/fokus-components.min.css +2 -0
  10. package/dist/css/fokus-components.min.css.map +1 -0
  11. package/dist/css/fokus-core.css +1585 -0
  12. package/dist/css/fokus-core.css.map +1 -0
  13. package/dist/css/fokus-core.min.css +2 -0
  14. package/dist/css/fokus-core.min.css.map +1 -0
  15. package/dist/css/fokus-dark.css +314 -0
  16. package/dist/css/fokus-dark.css.map +1 -0
  17. package/dist/css/fokus-dark.min.css +2 -0
  18. package/dist/css/fokus-dark.min.css.map +1 -0
  19. package/dist/css/fokus-rtl.css +8552 -0
  20. package/dist/css/fokus-rtl.css.map +1 -0
  21. package/dist/css/fokus-rtl.min.css +2 -0
  22. package/dist/css/fokus-rtl.min.css.map +1 -0
  23. package/dist/css/fokus-utilities.css +4198 -0
  24. package/dist/css/fokus-utilities.css.map +1 -0
  25. package/dist/css/fokus-utilities.min.css +2 -0
  26. package/dist/css/fokus-utilities.min.css.map +1 -0
  27. package/dist/css/fokus.css +1361 -53
  28. package/dist/css/fokus.css.map +1 -1
  29. package/dist/css/fokus.min.css +1 -1
  30. package/dist/css/fokus.min.css.map +1 -1
  31. package/dist/css/forms.css +137 -2
  32. package/dist/css/forms.css.map +1 -1
  33. package/dist/css/forms.min.css +1 -1
  34. package/dist/css/forms.min.css.map +1 -1
  35. package/dist/css/helpers.css +398 -2
  36. package/dist/css/helpers.css.map +1 -1
  37. package/dist/css/helpers.min.css +1 -1
  38. package/dist/css/helpers.min.css.map +1 -1
  39. package/dist/css/layout.css +582 -2
  40. package/dist/css/layout.css.map +1 -1
  41. package/dist/css/layout.min.css +1 -1
  42. package/dist/css/layout.min.css.map +1 -1
  43. package/dist/js/fokus.js +347 -12
  44. package/dist/js/fokus.js.map +4 -4
  45. package/dist/js/fokus.min.js +17 -17
  46. package/dist/js/fokus.min.js.map +4 -4
  47. package/docs/components/accordion.md +3 -0
  48. package/docs/components/avatar.md +13 -0
  49. package/docs/components/button-group.md +13 -0
  50. package/docs/components/close-button.md +13 -0
  51. package/docs/components/code.md +13 -0
  52. package/docs/components/icon-link.md +13 -0
  53. package/docs/components/list-group.md +13 -0
  54. package/docs/components/modal.md +3 -0
  55. package/docs/components/navbar.md +3 -0
  56. package/docs/components/pagination.md +3 -0
  57. package/docs/components/placeholder.md +13 -0
  58. package/docs/components/ratio.md +13 -0
  59. package/docs/components/scrollspy.md +13 -0
  60. package/docs/components/skeleton.md +3 -0
  61. package/docs/components/table.md +3 -0
  62. package/docs/guides/javascript-api.md +9 -0
  63. package/docs/guides/rtl-and-system-preferences.md +28 -0
  64. package/docs/guides/utility-api.md +9 -0
  65. package/docs/reference/size-baseline.json +13 -13
  66. package/mockup/assets/example-theme.css +3 -1
  67. package/mockup/assets/example-theme.js +2 -0
  68. package/mockup/assets/showcase-contracts.js +2 -2
  69. package/mockup/assets/showcase.css +4 -2
  70. package/mockup/assets/showcase.js +2 -0
  71. package/mockup/examples/js-foundation.html +25 -0
  72. package/mockup/examples/tables-navbar.html +12 -8
  73. package/mockup/examples/theming.html +2 -1
  74. package/mockup/foundations.html +2 -2
  75. package/package.json +15 -1
  76. package/packages/fokus-cli/bin/fokus.mjs +18 -1
  77. package/packages/fokus-cli/lib/build.mjs +12 -2
  78. package/packages/fokus-components/scss/components/_accordion.scss +19 -0
  79. package/packages/fokus-components/scss/components/_avatar.scss +22 -0
  80. package/packages/fokus-components/scss/components/_button-group.scss +14 -0
  81. package/packages/fokus-components/scss/components/_close-button.scss +22 -0
  82. package/packages/fokus-components/scss/components/_code.scss +19 -0
  83. package/packages/fokus-components/scss/components/_icon-link.scss +8 -0
  84. package/packages/fokus-components/scss/components/_index.scss +10 -0
  85. package/packages/fokus-components/scss/components/_list-group.scss +26 -0
  86. package/packages/fokus-components/scss/components/_modal.scss +36 -0
  87. package/packages/fokus-components/scss/components/_navbar.scss +48 -0
  88. package/packages/fokus-components/scss/components/_offcanvas.scss +19 -0
  89. package/packages/fokus-components/scss/components/_pagination.scss +10 -0
  90. package/packages/fokus-components/scss/components/_placeholder.scss +13 -0
  91. package/packages/fokus-components/scss/components/_progress.scss +8 -0
  92. package/packages/fokus-components/scss/components/_ratio.scss +10 -0
  93. package/packages/fokus-components/scss/components/_scrollspy.scss +5 -0
  94. package/packages/fokus-components/scss/components/_skeleton.scss +19 -0
  95. package/packages/fokus-components/scss/components/_spinner.scss +9 -53
  96. package/packages/fokus-components/scss/components/_tables.scss +20 -0
  97. package/packages/fokus-components/scss/forms/_forms.scss +29 -0
  98. package/packages/fokus-core/scss/base/_accessibility.scss +59 -0
  99. package/packages/fokus-core/scss/base/_index.scss +1 -0
  100. package/packages/fokus-core/scss/layout/_grid.scss +18 -0
  101. package/packages/fokus-core/scss/settings/_config.scss +43 -0
  102. package/packages/fokus-core/scss/settings/_index.scss +1 -0
  103. package/packages/fokus-core/scss/themes/_dark.scss +38 -2
  104. package/packages/fokus-core/scss/tokens/_root.scss +25 -0
  105. package/packages/fokus-core/scss/tools/_mixins.scss +8 -0
  106. package/packages/fokus-js/js/accordion.js +7 -1
  107. package/packages/fokus-js/js/core/focus.js +20 -0
  108. package/packages/fokus-js/js/core/overlay.d.ts +2 -0
  109. package/packages/fokus-js/js/core/overlay.js +10 -0
  110. package/packages/fokus-js/js/core/register.js +4 -2
  111. package/packages/fokus-js/js/focus-trap.d.ts +3 -0
  112. package/packages/fokus-js/js/focus-trap.js +1 -0
  113. package/packages/fokus-js/js/fokus.d.ts +7 -0
  114. package/packages/fokus-js/js/fokus.js +7 -0
  115. package/packages/fokus-js/js/form-validation.d.ts +7 -0
  116. package/packages/fokus-js/js/form-validation.js +20 -0
  117. package/packages/fokus-js/js/modal.js +16 -2
  118. package/packages/fokus-js/js/navbar.d.ts +10 -0
  119. package/packages/fokus-js/js/navbar.js +27 -0
  120. package/packages/fokus-js/js/offcanvas.d.ts +4 -0
  121. package/packages/fokus-js/js/offcanvas.js +16 -2
  122. package/packages/fokus-js/js/pagination.d.ts +7 -0
  123. package/packages/fokus-js/js/pagination.js +38 -0
  124. package/packages/fokus-js/js/scrollspy.d.ts +7 -0
  125. package/packages/fokus-js/js/scrollspy.js +26 -0
  126. package/packages/fokus-js/js/spinner.d.ts +9 -0
  127. package/packages/fokus-js/js/spinner.js +18 -0
  128. package/packages/fokus-js/js/theme.d.ts +9 -0
  129. package/packages/fokus-js/js/theme.js +19 -0
  130. package/packages/fokus-js/js/toast.js +4 -0
  131. package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
  132. package/packages/fokus-utilities/scss/utilities/_index.scss +2 -0
  133. package/packages/fokus-utilities/scss/utilities/_states.scss +19 -0
  134. package/packages/fokus-utilities/scss/utilities/_visibility.scss +24 -0
  135. package/scss/entries/core-entry.scss +5 -0
  136. package/scss/entries/dark-entry.scss +3 -0
  137. package/scss/entries/rtl-entry.scss +11 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../packages/fokus-js/js/fokus.js", "../../packages/fokus-js/js/core/index.js", "../../packages/fokus-js/js/core/positioning.js", "../../packages/fokus-js/js/core/overlay.js", "../../packages/fokus-js/js/core/focus.js", "../../packages/fokus-js/js/core/transition.js", "../../packages/fokus-js/js/core/register.js", "../../packages/fokus-js/js/dropdown.js", "../../packages/fokus-js/js/tooltip.js", "../../packages/fokus-js/js/popover.js", "../../packages/fokus-js/js/modal.js", "../../packages/fokus-js/js/confirm.js", "../../packages/fokus-js/js/tag.js", "../../packages/fokus-js/js/file-drop.js", "../../packages/fokus-js/js/offcanvas.js", "../../packages/fokus-js/js/select.js", "../../packages/fokus-js/js/accordion.js", "../../packages/fokus-js/js/collapse.js", "../../packages/fokus-js/js/tabs.js", "../../packages/fokus-js/js/toast.js", "../../packages/fokus-js/js/carousel.js", "../../packages/fokus-js/js/stepper.js", "../../packages/fokus-js/js/breadcrumb.js", "../../packages/fokus-js/js/notification-center.js", "../../packages/fokus-js/js/nested-menu.js", "../../packages/fokus-js/js/combobox.js", "../../packages/fokus-js/js/datepicker.js", "../../packages/fokus-js/js/datatable.js", "../../packages/fokus-js/js/command-palette.js", "../../packages/fokus-js/js/tree-view.js", "../../packages/fokus-js/js/range.js", "../../packages/fokus-js/js/file-upload-advanced.js"],
4
- "sourcesContent": ["export * as core from \"./core/index.js\";\nexport { Dropdown } from \"./dropdown.js\";\nexport { Tooltip } from \"./tooltip.js\";\nexport { Popover } from \"./popover.js\";\nexport { Modal } from \"./modal.js\";\nexport { confirm } from \"./confirm.js\";\nexport { Tag } from \"./tag.js\";\nexport { FileDrop } from \"./file-drop.js\";\nexport { Offcanvas } from \"./offcanvas.js\";\nexport { Select } from \"./select.js\";\nexport { Accordion } from \"./accordion.js\";\nexport { Collapse } from \"./collapse.js\";\nexport { Tabs } from \"./tabs.js\";\nexport { Toast } from \"./toast.js\";\nexport { Carousel } from \"./carousel.js\";\nexport { Stepper } from \"./stepper.js\";\nexport { Breadcrumb } from \"./breadcrumb.js\";\nexport { NotificationCenter } from \"./notification-center.js\";\nexport { NestedMenu } from \"./nested-menu.js\";\nexport { Combobox } from \"./combobox.js\";\nexport { Datepicker } from \"./datepicker.js\";\nexport { DataTable } from \"./datatable.js\";\nexport { CommandPalette } from \"./command-palette.js\";\nexport { TreeView } from \"./tree-view.js\";\nexport { RangeSlider } from \"./range.js\";\nexport { FileUploadAdvanced } from \"./file-upload-advanced.js\";\n", "export * from \"./positioning.js\";\nexport * from \"./overlay.js\";\nexport * from \"./focus.js\";\nexport * from \"./transition.js\";\nexport * from \"./register.js\";\n", "const OPPOSITE_PLACEMENT = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\nfunction fitsPlacement(placement, referenceRect, floatingRect, offset, viewportWidth, viewportHeight) {\n switch (placement) {\n case \"top\":\n return referenceRect.top - floatingRect.height - offset >= 0;\n case \"bottom\":\n return referenceRect.bottom + floatingRect.height + offset <= viewportHeight;\n case \"left\":\n return referenceRect.left - floatingRect.width - offset >= 0;\n case \"right\":\n return referenceRect.right + floatingRect.width + offset <= viewportWidth;\n default:\n return true;\n }\n}\n\nfunction alignCrossAxis(align, referenceStart, referenceSize, floatingSize) {\n switch (align) {\n case \"start\":\n return referenceStart;\n case \"end\":\n return referenceStart + referenceSize - floatingSize;\n default:\n return referenceStart + (referenceSize - floatingSize) / 2;\n }\n}\n\nexport function computePosition(referenceEl, floatingEl, options = {}) {\n const { placement = \"bottom\", align = \"center\", offset = 8, padding = 8 } = options;\n\n const referenceRect = referenceEl.getBoundingClientRect();\n const floatingRect = floatingEl.getBoundingClientRect();\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n let finalPlacement = placement;\n\n if (\n !fitsPlacement(placement, referenceRect, floatingRect, offset, viewportWidth, viewportHeight) &&\n fitsPlacement(OPPOSITE_PLACEMENT[placement], referenceRect, floatingRect, offset, viewportWidth, viewportHeight)\n ) {\n finalPlacement = OPPOSITE_PLACEMENT[placement];\n }\n\n let top;\n let left;\n\n if (finalPlacement === \"top\" || finalPlacement === \"bottom\") {\n top =\n finalPlacement === \"top\"\n ? referenceRect.top - floatingRect.height - offset\n : referenceRect.bottom + offset;\n left = alignCrossAxis(align, referenceRect.left, referenceRect.width, floatingRect.width);\n } else {\n left =\n finalPlacement === \"left\"\n ? referenceRect.left - floatingRect.width - offset\n : referenceRect.right + offset;\n top = alignCrossAxis(align, referenceRect.top, referenceRect.height, floatingRect.height);\n }\n\n const maxLeft = Math.max(padding, viewportWidth - floatingRect.width - padding);\n const maxTop = Math.max(padding, viewportHeight - floatingRect.height - padding);\n left = Math.min(Math.max(left, padding), maxLeft);\n top = Math.min(Math.max(top, padding), maxTop);\n\n return {\n top: top + window.scrollY,\n left: left + window.scrollX,\n placement: finalPlacement,\n };\n}\n\n// Mant\u00E9m overlays alinhados quando o viewport ou o pr\u00F3prio conte\u00FAdo muda.\n// O ResizeObserver \u00E9 opcional para preservar compatibilidade com navegadores\n// que n\u00E3o o implementam; scroll/resize continuam cobrindo o caso b\u00E1sico.\nexport function watchPosition(referenceEl, floatingEl, options = {}) {\n const update = () => applyPosition(floatingEl, computePosition(referenceEl, floatingEl, options));\n let frame = null;\n const schedule = () => {\n if (frame !== null) return;\n frame = requestAnimationFrame(() => {\n frame = null;\n update();\n });\n };\n\n window.addEventListener(\"resize\", schedule, { passive: true });\n window.addEventListener(\"scroll\", schedule, { passive: true, capture: true });\n const observer = typeof ResizeObserver === \"function\" ? new ResizeObserver(schedule) : null;\n observer?.observe(referenceEl);\n observer?.observe(floatingEl);\n\n return () => {\n window.removeEventListener(\"resize\", schedule);\n window.removeEventListener(\"scroll\", schedule, true);\n if (frame !== null) cancelAnimationFrame(frame);\n observer?.disconnect();\n };\n}\n\nexport function applyPosition(floatingEl, position) {\n floatingEl.style.position = \"absolute\";\n floatingEl.style.top = `${position.top}px`;\n floatingEl.style.left = `${position.left}px`;\n}\n", "let lockCount = 0;\nlet paddingCompensated = false;\nlet previousOverflow = \"\";\nlet previousPaddingRight = \"\";\n\nexport function lockScroll() {\n lockCount += 1;\n if (lockCount > 1) return;\n\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n previousOverflow = document.body.style.overflow;\n previousPaddingRight = document.body.style.paddingRight;\n document.body.style.overflow = \"hidden\";\n\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n paddingCompensated = true;\n }\n}\n\nexport function unlockScroll() {\n lockCount = Math.max(0, lockCount - 1);\n if (lockCount > 0) return;\n\n document.body.style.overflow = previousOverflow;\n\n if (paddingCompensated) {\n document.body.style.paddingRight = previousPaddingRight;\n paddingCompensated = false;\n }\n}\n\nexport function onClickOutside(el, callback) {\n const handler = (event) => {\n if (!el.contains(event.target)) callback(event);\n };\n\n // Listener de captura registrado imediatamente: o clique que abriu o\n // elemento j\u00E1 passou pelo document na fase de captura, ent\u00E3o n\u00E3o dispara\n // o fechamento \u2014 e um clique fora logo em seguida j\u00E1 encontra o listener\n // ativo (adiar com setTimeout criava uma janela em que ele era perdido).\n document.addEventListener(\"click\", handler, true);\n\n return () => {\n document.removeEventListener(\"click\", handler, true);\n };\n}\n", "const FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function getFocusableElements(container) {\n return Array.from(container.querySelectorAll(FOCUSABLE_SELECTOR)).filter((el) => el.offsetParent !== null);\n}\n\nexport function createFocusTrap(container) {\n function handleKeydown(event) {\n if (event.key !== \"Tab\") return;\n\n const focusable = getFocusableElements(container);\n\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n container.addEventListener(\"keydown\", handleKeydown);\n\n return {\n activate() {\n const focusable = getFocusableElements(container);\n if (focusable.length > 0) focusable[0].focus();\n },\n deactivate() {\n container.removeEventListener(\"keydown\", handleKeydown);\n },\n };\n}\n\nexport function onEscapeKey(callback) {\n const handler = (event) => {\n if (event.key === \"Escape\") callback(event);\n };\n\n document.addEventListener(\"keydown\", handler);\n\n return () => document.removeEventListener(\"keydown\", handler);\n}\n", "function prefersReducedMotion() {\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nfunction waitForHeightTransition(el) {\n return new Promise((resolve) => {\n let settled = false;\n const settle = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n el.removeEventListener(\"transitionend\", handleEnd);\n resolve();\n };\n const handleEnd = (event) => {\n if (event.target !== el || event.propertyName !== \"height\") return;\n settle();\n };\n\n el.addEventListener(\"transitionend\", handleEnd);\n const timeout = window.setTimeout(settle, 450);\n });\n}\n\nexport function collapse(el, options = {}) {\n if (prefersReducedMotion()) {\n el.style.display = \"none\";\n return Promise.resolve();\n }\n\n const duration = options.duration ?? 200;\n\n el.style.overflow = \"hidden\";\n el.style.height = `${el.scrollHeight}px`;\n el.style.transition = `height ${duration}ms ease`;\n\n const done = waitForHeightTransition(el).then(() => {\n el.style.display = \"none\";\n el.style.removeProperty(\"height\");\n el.style.removeProperty(\"overflow\");\n el.style.removeProperty(\"transition\");\n });\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.style.height = \"0px\";\n });\n });\n\n return done;\n}\n\nexport function expand(el, options = {}) {\n el.style.display = \"\";\n\n if (prefersReducedMotion()) {\n return Promise.resolve();\n }\n\n const duration = options.duration ?? 200;\n const targetHeight = `${el.scrollHeight}px`;\n\n el.style.overflow = \"hidden\";\n el.style.height = \"0px\";\n el.style.transition = `height ${duration}ms ease`;\n\n const done = waitForHeightTransition(el).then(() => {\n el.style.removeProperty(\"height\");\n el.style.removeProperty(\"overflow\");\n el.style.removeProperty(\"transition\");\n });\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.style.height = targetHeight;\n });\n });\n\n return done;\n}\n\nexport function onTransitionEnd(el, propertyName) {\n return new Promise((resolve) => {\n const handleEnd = (event) => {\n if (event.target !== el) return;\n if (propertyName && event.propertyName !== propertyName) return;\n el.removeEventListener(\"transitionend\", handleEnd);\n resolve();\n };\n\n el.addEventListener(\"transitionend\", handleEnd);\n });\n}\n", "export function createInstanceRegistry() {\n const instances = new WeakMap();\n\n return {\n get(el) {\n return instances.get(el);\n },\n set(el, instance) {\n instances.set(el, instance);\n },\n delete(el) {\n instances.delete(el);\n },\n };\n}\n\nexport function autoInit(name, Ctor) {\n if (typeof document === \"undefined\") return;\n\n const init = () => {\n document.querySelectorAll(`[data-fs=\"${name}\"]`).forEach((el) => {\n if (!Ctor.getInstance(el)) new Ctor(el);\n });\n };\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", init);\n } else {\n init();\n }\n}\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Dropdown {\n constructor(toggleEl, options = {}) {\n const targetSelector = toggleEl.getAttribute(\"data-fs-target\");\n const menuEl = targetSelector ? document.querySelector(targetSelector) : toggleEl.nextElementSibling;\n\n if (!menuEl) {\n throw new Error(\"FokusStyles.Dropdown: elemento do menu n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.toggleEl = toggleEl;\n this.menuEl = menuEl;\n this.placement = options.placement ?? toggleEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.align = options.align ?? toggleEl.getAttribute(\"data-align\") ?? \"start\";\n this.isOpen = false;\n this._outsideClickCleanup = null;\n this._positionCleanup = null;\n this._originalParent = this.menuEl.parentNode;\n this._originalNextSibling = this.menuEl.nextSibling;\n\n document.body.appendChild(this.menuEl);\n\n this.toggleEl.setAttribute(\"aria-haspopup\", \"menu\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n this.toggleEl.setAttribute(\"aria-controls\", this.menuEl.id || `fs-dropdown-${Math.random().toString(36).slice(2)}`);\n if (!this.menuEl.id) this.menuEl.id = this.toggleEl.getAttribute(\"aria-controls\");\n this.menuEl.setAttribute(\"role\", \"menu\");\n this.menuEl.querySelectorAll(\".fs-dropdown-item\").forEach((item) => {\n if (!item.hasAttribute(\"role\")) item.setAttribute(\"role\", \"menuitem\");\n });\n\n this._handleToggleClick = this._handleToggleClick.bind(this);\n this._handleMenuKeydown = this._handleMenuKeydown.bind(this);\n this._handleMenuClick = this._handleMenuClick.bind(this);\n\n this.toggleEl.addEventListener(\"click\", this._handleToggleClick);\n this.menuEl.addEventListener(\"keydown\", this._handleMenuKeydown);\n this.menuEl.addEventListener(\"click\", this._handleMenuClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.hide();\n this.toggleEl.focus();\n }\n });\n\n instances.set(toggleEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleToggleClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handleMenuClick(event) {\n if (event.target.closest(\".fs-dropdown-item\")) {\n this.hide();\n this.toggleEl.focus();\n }\n }\n\n _handleMenuKeydown(event) {\n const items = Array.from(this.menuEl.querySelectorAll(\".fs-dropdown-item:not(.is-disabled)\"));\n const currentIndex = items.indexOf(document.activeElement);\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n items[(currentIndex + 1) % items.length]?.focus();\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n items[(currentIndex - 1 + items.length) % items.length]?.focus();\n } else if (event.key === \"Home\") {\n event.preventDefault();\n items[0]?.focus();\n } else if (event.key === \"End\") {\n event.preventDefault();\n items[items.length - 1]?.focus();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n this.hide();\n this.toggleEl.focus();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.toggleEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.menuEl.setAttribute(\"data-theme\", theme);\n } else {\n this.menuEl.removeAttribute(\"data-theme\");\n }\n\n this.menuEl.classList.add(\"is-open\");\n\n const position = computePosition(this.toggleEl, this.menuEl, {\n placement: this.placement,\n align: this.align,\n offset: 4,\n });\n applyPosition(this.menuEl, position);\n this._positionCleanup = watchPosition(this.toggleEl, this.menuEl, {\n placement: this.placement,\n align: this.align,\n offset: 4,\n });\n\n this.toggleEl.setAttribute(\"aria-expanded\", \"true\");\n\n const firstItem = this.menuEl.querySelector(\".fs-dropdown-item:not(.is-disabled)\");\n firstItem?.focus();\n\n this._outsideClickCleanup = onClickOutside(this.menuEl, (event) => {\n if (this.toggleEl.contains(event.target)) return;\n this.hide();\n });\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:dropdown:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.menuEl.classList.remove(\"is-open\");\n this.menuEl.style.removeProperty(\"position\");\n this.menuEl.style.removeProperty(\"top\");\n this.menuEl.style.removeProperty(\"left\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n this._positionCleanup?.();\n this._positionCleanup = null;\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:dropdown:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.toggleEl.removeEventListener(\"click\", this._handleToggleClick);\n this.menuEl.removeEventListener(\"keydown\", this._handleMenuKeydown);\n this.menuEl.removeEventListener(\"click\", this._handleMenuClick);\n if (this._originalParent) {\n this._originalParent.insertBefore(this.menuEl, this._originalNextSibling);\n }\n instances.delete(this.toggleEl);\n }\n}\n\nautoInit(\"dropdown\", Dropdown);\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Tooltip {\n constructor(referenceEl, options = {}) {\n const title = referenceEl.getAttribute(\"title\") ?? referenceEl.getAttribute(\"data-title\") ?? options.title;\n\n if (!title) {\n throw new Error(\"FokusStyles.Tooltip: elemento sem texto (atributo title/data-title).\");\n }\n\n referenceEl.removeAttribute(\"title\");\n\n idCounter += 1;\n\n this.referenceEl = referenceEl;\n this.title = title;\n this.placement = options.placement ?? referenceEl.getAttribute(\"data-placement\") ?? \"top\";\n this.isOpen = false;\n this.id = `fokus-tooltip-${idCounter}`;\n this._positionCleanup = null;\n this._originalDescribedBy = referenceEl.getAttribute(\"aria-describedby\");\n\n this.tooltipEl = document.createElement(\"div\");\n this.tooltipEl.className = \"fs-tooltip\";\n this.tooltipEl.id = this.id;\n this.tooltipEl.setAttribute(\"role\", \"tooltip\");\n this.tooltipEl.innerHTML = '<div class=\"fs-tooltip-arrow\"></div><div class=\"fs-tooltip-inner\"></div>';\n this.tooltipEl.querySelector(\".fs-tooltip-inner\").textContent = this.title;\n document.body.appendChild(this.tooltipEl);\n\n referenceEl.setAttribute(\"aria-describedby\", this.id);\n\n this._handleShow = this.show.bind(this);\n this._handleHide = this.hide.bind(this);\n\n referenceEl.addEventListener(\"mouseenter\", this._handleShow);\n referenceEl.addEventListener(\"mouseleave\", this._handleHide);\n referenceEl.addEventListener(\"focus\", this._handleShow);\n referenceEl.addEventListener(\"blur\", this._handleHide);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) this.hide();\n });\n\n instances.set(referenceEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.referenceEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.tooltipEl.setAttribute(\"data-theme\", theme);\n } else {\n this.tooltipEl.removeAttribute(\"data-theme\");\n }\n\n this.tooltipEl.classList.add(\"is-open\");\n\n const position = computePosition(this.referenceEl, this.tooltipEl, { placement: this.placement, offset: 10 });\n applyPosition(this.tooltipEl, position);\n this._positionCleanup = watchPosition(this.referenceEl, this.tooltipEl, {\n placement: this.placement,\n offset: 10,\n });\n this.tooltipEl.setAttribute(\"data-placement\", position.placement);\n\n this.referenceEl.dispatchEvent(new CustomEvent(\"fs:tooltip:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.tooltipEl.classList.remove(\"is-open\");\n this._positionCleanup?.();\n this._positionCleanup = null;\n\n this.referenceEl.dispatchEvent(new CustomEvent(\"fs:tooltip:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this.referenceEl.removeEventListener(\"mouseenter\", this._handleShow);\n this.referenceEl.removeEventListener(\"mouseleave\", this._handleHide);\n this.referenceEl.removeEventListener(\"focus\", this._handleShow);\n this.referenceEl.removeEventListener(\"blur\", this._handleHide);\n this._removeEscapeListener();\n if (this._originalDescribedBy === null) this.referenceEl.removeAttribute(\"aria-describedby\");\n else this.referenceEl.setAttribute(\"aria-describedby\", this._originalDescribedBy);\n this.tooltipEl.remove();\n instances.delete(this.referenceEl);\n }\n}\n\nautoInit(\"tooltip\", Tooltip);\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\nconst HOVER_HIDE_DELAY = 100;\n\nexport class Popover {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const popoverEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!popoverEl) {\n throw new Error(\"FokusStyles.Popover: elemento n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.popoverEl = popoverEl;\n this.placement = options.placement ?? triggerEl.getAttribute(\"data-placement\") ?? \"top\";\n this.align = options.align ?? triggerEl.getAttribute(\"data-align\") ?? \"center\";\n this.trigger = options.trigger ?? triggerEl.getAttribute(\"data-trigger\") ?? \"click\";\n this.isOpen = false;\n this._outsideClickCleanup = null;\n this._removeEscapeListener = null;\n this._hideTimer = null;\n this._positionCleanup = null;\n this._originalParent = popoverEl.parentNode;\n this._originalNextSibling = popoverEl.nextSibling;\n\n document.body.appendChild(popoverEl);\n\n popoverEl.setAttribute(\"role\", \"dialog\");\n popoverEl.setAttribute(\"aria-modal\", \"false\");\n\n idCounter += 1;\n if (!popoverEl.id) popoverEl.id = `fokus-popover-${idCounter}`;\n\n const headerEl = popoverEl.querySelector(\".fs-popover-header\");\n if (headerEl) {\n if (!headerEl.id) headerEl.id = `fokus-popover-header-${idCounter}`;\n popoverEl.setAttribute(\"aria-labelledby\", headerEl.id);\n }\n\n triggerEl.setAttribute(\"aria-controls\", popoverEl.id);\n triggerEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._handleDismissClick = this._handleDismissClick.bind(this);\n popoverEl.addEventListener(\"click\", this._handleDismissClick);\n\n this._bindTrigger();\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _bindTrigger() {\n if (this.trigger === \"manual\") return;\n\n if (this.trigger === \"click\") {\n this._handleTriggerClick = (event) => {\n event.preventDefault();\n this.toggle();\n };\n this.triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n } else if (this.trigger === \"hover\") {\n this._handleMouseEnter = () => {\n clearTimeout(this._hideTimer);\n this.show();\n };\n this._handleMouseLeave = () => {\n this._hideTimer = setTimeout(() => this.hide(), HOVER_HIDE_DELAY);\n };\n this.triggerEl.addEventListener(\"mouseenter\", this._handleMouseEnter);\n this.triggerEl.addEventListener(\"mouseleave\", this._handleMouseLeave);\n this.popoverEl.addEventListener(\"mouseenter\", this._handleMouseEnter);\n this.popoverEl.addEventListener(\"mouseleave\", this._handleMouseLeave);\n } else if (this.trigger === \"focus\") {\n this._handleTriggerFocus = () => this.show();\n this._handleTriggerFocusOut = (event) => {\n if (this.popoverEl.contains(event.relatedTarget)) return;\n this.hide();\n };\n this._handlePopoverFocusOut = (event) => {\n if (this.triggerEl.contains(event.relatedTarget) || this.popoverEl.contains(event.relatedTarget)) return;\n this.hide();\n };\n this.triggerEl.addEventListener(\"focus\", this._handleTriggerFocus);\n this.triggerEl.addEventListener(\"focusout\", this._handleTriggerFocusOut);\n this.popoverEl.addEventListener(\"focusout\", this._handlePopoverFocusOut);\n }\n\n if (this.trigger !== \"manual\") {\n this._removeEscapeListener = onEscapeKey(() => {\n if (!this.isOpen) return;\n this.hide();\n this.triggerEl.focus();\n });\n }\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"popover\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.triggerEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.popoverEl.setAttribute(\"data-theme\", theme);\n } else {\n this.popoverEl.removeAttribute(\"data-theme\");\n }\n\n this.popoverEl.classList.add(\"is-open\");\n\n const position = computePosition(this.triggerEl, this.popoverEl, {\n placement: this.placement,\n align: this.align,\n offset: 10,\n });\n applyPosition(this.popoverEl, position);\n this._positionCleanup = watchPosition(this.triggerEl, this.popoverEl, {\n placement: this.placement,\n align: this.align,\n offset: 10,\n });\n this.popoverEl.setAttribute(\"data-placement\", position.placement);\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"true\");\n\n if (this.trigger === \"click\") {\n this._outsideClickCleanup = onClickOutside(this.popoverEl, (event) => {\n if (this.triggerEl.contains(event.target)) return;\n this.hide();\n });\n }\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:popover:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.popoverEl.classList.remove(\"is-open\");\n this._positionCleanup?.();\n this._positionCleanup = null;\n this.triggerEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:popover:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n clearTimeout(this._hideTimer);\n this._removeEscapeListener?.();\n this.popoverEl.removeEventListener(\"click\", this._handleDismissClick);\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.triggerEl.removeEventListener(\"mouseenter\", this._handleMouseEnter);\n this.triggerEl.removeEventListener(\"mouseleave\", this._handleMouseLeave);\n this.popoverEl.removeEventListener(\"mouseenter\", this._handleMouseEnter);\n this.popoverEl.removeEventListener(\"mouseleave\", this._handleMouseLeave);\n this.triggerEl.removeEventListener(\"focus\", this._handleTriggerFocus);\n this.triggerEl.removeEventListener(\"focusout\", this._handleTriggerFocusOut);\n this.popoverEl.removeEventListener(\"focusout\", this._handlePopoverFocusOut);\n if (this._originalParent) {\n this._originalParent.insertBefore(this.popoverEl, this._originalNextSibling);\n }\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"popover\", Popover);\n", "import { lockScroll, unlockScroll, onClickOutside } from \"./core/overlay.js\";\nimport { createFocusTrap, onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Modal {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const modalEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!modalEl) {\n throw new Error(\"FokusStyles.Modal: elemento do modal n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.modalEl = modalEl;\n this.dialogEl = modalEl.querySelector(\".fs-modal-dialog\") ?? modalEl;\n this.staticBackdrop = (options.backdrop ?? modalEl.getAttribute(\"data-backdrop\")) === \"static\";\n this.isOpen = false;\n this._focusTrap = null;\n this._outsideClickCleanup = null;\n\n modalEl.setAttribute(\"role\", \"dialog\");\n modalEl.setAttribute(\"aria-modal\", \"true\");\n modalEl.setAttribute(\"aria-hidden\", \"true\");\n const titleEl = modalEl.querySelector(\".fs-modal-title\");\n if (titleEl) {\n if (!titleEl.id) titleEl.id = `fs-modal-title-${Math.random().toString(36).slice(2)}`;\n modalEl.setAttribute(\"aria-labelledby\", titleEl.id);\n }\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handleDismissClick = this._handleDismissClick.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n modalEl.addEventListener(\"click\", this._handleDismissClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen && !this.staticBackdrop) this.hide();\n });\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.show();\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"modal\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n this.modalEl.classList.add(\"is-open\");\n this.modalEl.setAttribute(\"aria-hidden\", \"false\");\n lockScroll();\n\n this._focusTrap = createFocusTrap(this.dialogEl);\n this._focusTrap.activate();\n\n if (!this.staticBackdrop) {\n this._outsideClickCleanup = onClickOutside(this.dialogEl, () => this.hide());\n }\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:modal:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.modalEl.classList.remove(\"is-open\");\n this.modalEl.setAttribute(\"aria-hidden\", \"true\");\n unlockScroll();\n\n this._focusTrap?.deactivate();\n this._focusTrap = null;\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.focus();\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:modal:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.modalEl.removeEventListener(\"click\", this._handleDismissClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"modal\", Modal);\n", "import { Modal } from \"./modal.js\";\n\nlet idCounter = 0;\n\nfunction escapeHtml(value) {\n const div = document.createElement(\"div\");\n div.textContent = value;\n return div.innerHTML;\n}\n\n// Alert Dialog / Confirm: ao contr\u00E1rio dos demais componentes (auto-init\n// declarativo via data-fs), \u00E9 100% program\u00E1tico \u2014 monta o modal na hora,\n// reaproveitando js/modal.js (foco/teclado/overlay j\u00E1 prontos) sem precisar\n// de marca\u00E7\u00E3o pr\u00E9-declarada na p\u00E1gina. Resolve `true` (confirmado), `false`\n// (cancelado ou fechado por Escape/clique fora).\nexport function confirm(options = {}) {\n const { title = \"Tem certeza?\", message = \"\", confirmText = \"Confirmar\", cancelText = \"Cancelar\", variant = \"danger\" } = options;\n\n return new Promise((resolve) => {\n idCounter += 1;\n const modalId = `fokus-confirm-${idCounter}`;\n const invokerEl = document.activeElement instanceof HTMLElement ? document.activeElement : document.body;\n\n const modalEl = document.createElement(\"div\");\n modalEl.className = \"fs-modal fs-alert-dialog\";\n modalEl.id = modalId;\n modalEl.innerHTML = `\n <div class=\"fs-modal-dialog fs-modal-sm\">\n <div class=\"fs-modal-content\">\n <div class=\"fs-modal-body\">\n <h3 class=\"fs-modal-title\">${escapeHtml(title)}</h3>\n ${message ? `<p class=\"fs-alert-dialog-message\">${escapeHtml(message)}</p>` : \"\"}\n </div>\n <div class=\"fs-modal-footer\">\n <button type=\"button\" class=\"fs-btn\" data-action=\"cancel\">${escapeHtml(cancelText)}</button>\n <button type=\"button\" class=\"fs-btn fs-btn-${variant}\" data-action=\"confirm\">${escapeHtml(confirmText)}</button>\n </div>\n </div>\n </div>\n `;\n document.body.appendChild(modalEl);\n\n // Modal exige um gatilho com data-fs-target; sint\u00E9tico porque n\u00E3o h\u00E1 um\n // bot\u00E3o real \"abrindo\" este modal (ele nasce j\u00E1 aberto).\n const triggerEl = document.createElement(\"button\");\n triggerEl.type = \"button\";\n triggerEl.setAttribute(\"data-fs-target\", `#${modalId}`);\n triggerEl.style.display = \"none\";\n document.body.appendChild(triggerEl);\n\n const modal = new Modal(triggerEl);\n let settled = false;\n\n const finish = (result) => {\n if (settled) return;\n settled = true;\n\n modal.dispose();\n modalEl.remove();\n triggerEl.remove();\n invokerEl.focus?.();\n resolve(result);\n };\n\n modalEl.addEventListener(\"click\", (event) => {\n const action = event.target.closest(\"[data-action]\")?.dataset.action;\n if (action === \"confirm\") finish(true);\n else if (action === \"cancel\") finish(false);\n });\n\n // Escape e clique fora chamam modal.hide() internamente, que dispara\n // este evento no gatilho (n\u00E3o no modalEl) \u2014 conta como cancelamento.\n triggerEl.addEventListener(\"fs:modal:hidden\", () => finish(false));\n\n modal.show();\n });\n}\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Badge dismiss\u00EDvel / Tag: o \u00FAnico componente CSS-first desta leva que\n// precisa de JS \u2014 s\u00F3 o suficiente pra remover o elemento do DOM ao clicar\n// no .fs-btn-close, sem posicionamento/foco/overlay.\nexport class Tag {\n constructor(tagEl) {\n this.tagEl = tagEl;\n this._isLoading = tagEl.classList.contains(\"is-loading\") || tagEl.getAttribute(\"aria-busy\") === \"true\";\n\n this._handleClick = this._handleClick.bind(this);\n tagEl.addEventListener(\"click\", this._handleClick);\n\n this.setLoading(this._isLoading);\n\n instances.set(tagEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleClick(event) {\n if (!this._isLoading && event.target.closest('[data-fs-dismiss=\"tag\"]')) {\n this.dismiss();\n }\n }\n\n // Dispara um evento cancel\u00E1vel antes de remover (mesmo esp\u00EDrito de\n // fs:stepper:beforechange): preventDefault() bloqueia a remo\u00E7\u00E3o.\n dismiss() {\n if (this._isLoading) return false;\n\n const event = new CustomEvent(\"fs:tag:dismissed\", { bubbles: true, cancelable: true });\n this.tagEl.dispatchEvent(event);\n if (event.defaultPrevented) return false;\n\n this.tagEl.remove();\n return true;\n }\n\n // Estado \u00FAtil enquanto uma remo\u00E7\u00E3o ou atualiza\u00E7\u00E3o ass\u00EDncrona est\u00E1 pendente.\n // Al\u00E9m da apar\u00EAncia, bloqueia o dismiss e comunica o estado a AT.\n setLoading(loading) {\n this._isLoading = Boolean(loading);\n this.tagEl.classList.toggle(\"is-loading\", this._isLoading);\n if (this._isLoading) {\n this.tagEl.setAttribute(\"aria-busy\", \"true\");\n } else {\n this.tagEl.removeAttribute(\"aria-busy\");\n }\n\n const dismissButton = this.tagEl.querySelector('[data-fs-dismiss=\"tag\"]');\n if (dismissButton) dismissButton.disabled = this._isLoading;\n\n return this;\n }\n\n dispose() {\n this.tagEl.removeEventListener(\"click\", this._handleClick);\n instances.delete(this.tagEl);\n }\n}\n\nautoInit(\"tag\", Tag);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Evolui o upload de arquivo (scss/forms/_forms.scss, Fase 6) com\n// arrastar-e-soltar sobre o `.fs-file-label`. Auto-init com\n// `data-fs=\"file-drop\"` no pr\u00F3prio `<label for=\"...\">` \u2014 o input nativo\n// associado \u00E9 resolvido pelo atributo `for`, mesmo v\u00EDnculo que j\u00E1 existe\n// entre `.fs-file-input`/`.fs-file-label`.\nexport class FileDrop {\n constructor(labelEl) {\n const inputEl = document.getElementById(labelEl.getAttribute(\"for\"));\n\n if (!inputEl) {\n throw new Error(\"FokusStyles.FileDrop: input associado (via for=) n\u00E3o encontrado.\");\n }\n\n this.labelEl = labelEl;\n this.inputEl = inputEl;\n this._dragDepth = 0;\n\n this._handleDragEnter = this._handleDragEnter.bind(this);\n this._handleDragOver = this._handleDragOver.bind(this);\n this._handleDragLeave = this._handleDragLeave.bind(this);\n this._handleDrop = this._handleDrop.bind(this);\n\n labelEl.addEventListener(\"dragenter\", this._handleDragEnter);\n labelEl.addEventListener(\"dragover\", this._handleDragOver);\n labelEl.addEventListener(\"dragleave\", this._handleDragLeave);\n labelEl.addEventListener(\"drop\", this._handleDrop);\n\n instances.set(labelEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n // Conta entradas/sa\u00EDdas (dragenter/dragleave tamb\u00E9m disparam nos filhos do\n // label, ex. o texto do hint) \u2014 s\u00F3 remove o estado visual quando a\n // contagem volta a zero, sen\u00E3o `.is-dragover` pisca ao arrastar por cima\n // de um elemento interno.\n _handleDragEnter(event) {\n event.preventDefault();\n this._dragDepth += 1;\n this.labelEl.classList.add(\"is-dragover\");\n }\n\n _handleDragOver(event) {\n event.preventDefault();\n }\n\n _handleDragLeave(event) {\n event.preventDefault();\n this._dragDepth = Math.max(0, this._dragDepth - 1);\n if (this._dragDepth === 0) {\n this.labelEl.classList.remove(\"is-dragover\");\n }\n }\n\n _handleDrop(event) {\n event.preventDefault();\n this._dragDepth = 0;\n this.labelEl.classList.remove(\"is-dragover\");\n\n if (this.inputEl.disabled) return;\n\n const files = event.dataTransfer?.files;\n if (!files || files.length === 0) return;\n\n this.inputEl.files = files;\n this.inputEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n\n dispose() {\n this.labelEl.removeEventListener(\"dragenter\", this._handleDragEnter);\n this.labelEl.removeEventListener(\"dragover\", this._handleDragOver);\n this.labelEl.removeEventListener(\"dragleave\", this._handleDragLeave);\n this.labelEl.removeEventListener(\"drop\", this._handleDrop);\n instances.delete(this.labelEl);\n }\n}\n\nautoInit(\"file-drop\", FileDrop);\n", "import { lockScroll, unlockScroll, onClickOutside } from \"./core/overlay.js\";\nimport { createFocusTrap, onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Offcanvas {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const offcanvasEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!offcanvasEl) {\n throw new Error(\"FokusStyles.Offcanvas: elemento n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.offcanvasEl = offcanvasEl;\n this.hasBackdrop = (options.backdrop ?? offcanvasEl.getAttribute(\"data-backdrop\")) !== \"false\";\n this.staticBackdrop = (options.backdrop ?? offcanvasEl.getAttribute(\"data-backdrop\")) === \"static\";\n this.isOpen = false;\n this._focusTrap = null;\n this._outsideClickCleanup = null;\n this._backdropEl = null;\n\n offcanvasEl.setAttribute(\"role\", \"dialog\");\n offcanvasEl.setAttribute(\"aria-modal\", \"true\");\n offcanvasEl.setAttribute(\"aria-hidden\", \"true\");\n const titleEl = offcanvasEl.querySelector(\".fs-offcanvas-title\");\n if (titleEl) {\n if (!titleEl.id) titleEl.id = `fs-offcanvas-title-${Math.random().toString(36).slice(2)}`;\n offcanvasEl.setAttribute(\"aria-labelledby\", titleEl.id);\n }\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handleDismissClick = this._handleDismissClick.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n offcanvasEl.addEventListener(\"click\", this._handleDismissClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen && !this.staticBackdrop) this.hide();\n });\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.show();\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"offcanvas\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n if (this.hasBackdrop) {\n this._backdropEl = document.createElement(\"div\");\n this._backdropEl.className = \"fs-offcanvas-backdrop\";\n document.body.appendChild(this._backdropEl);\n // For\u00E7a reflow antes de adicionar `.is-open` para a transi\u00E7\u00E3o de opacidade\n // rodar (elemento rec\u00E9m-criado come\u00E7a sem a classe).\n void this._backdropEl.offsetHeight;\n this._backdropEl.classList.add(\"is-open\");\n }\n\n this.offcanvasEl.classList.add(\"is-open\");\n this.offcanvasEl.setAttribute(\"aria-hidden\", \"false\");\n lockScroll();\n\n this._focusTrap = createFocusTrap(this.offcanvasEl);\n // `visibility: hidden` mant\u00E9m `offsetParent` n\u00E3o nulo (diferente de\n // `display: none`), ent\u00E3o o elemento s\u00F3 fica de fato foc\u00E1vel depois que o\n // navegador processa a transi\u00E7\u00E3o de `visibility` para \"visible\" \u2014 em\n // Chromium isso s\u00F3 \u00E9 garantido ap\u00F3s um ciclo completo de paint, da\u00ED o\n // duplo requestAnimationFrame antes de mover o foco.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (this.isOpen) this._focusTrap.activate();\n });\n });\n\n if (!this.staticBackdrop) {\n this._outsideClickCleanup = onClickOutside(this.offcanvasEl, (event) => {\n if (this.triggerEl.contains(event.target)) return;\n this.hide();\n });\n }\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:offcanvas:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.offcanvasEl.classList.remove(\"is-open\");\n this.offcanvasEl.setAttribute(\"aria-hidden\", \"true\");\n unlockScroll();\n\n this._backdropEl?.remove();\n this._backdropEl = null;\n\n this._focusTrap?.deactivate();\n this._focusTrap = null;\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.focus();\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:offcanvas:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.offcanvasEl.removeEventListener(\"click\", this._handleDismissClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"offcanvas\", Offcanvas);\n", "import { Dropdown } from \"./dropdown.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Select {\n constructor(selectEl) {\n if (selectEl.tagName !== \"SELECT\") {\n throw new Error(\"FokusStyles.Select: elemento precisa ser um <select> nativo.\");\n }\n\n this.selectEl = selectEl;\n this.size = selectEl.getAttribute(\"data-size\");\n this._originalDisplay = selectEl.style.display;\n\n this._buildMarkup();\n this._syncFromNativeSelect();\n\n this.dropdown = new Dropdown(this.toggleEl);\n\n this.toggleEl.setAttribute(\"aria-haspopup\", \"listbox\");\n this.menuEl.setAttribute(\"role\", \"listbox\");\n\n this.toggleEl.addEventListener(\"fs:dropdown:shown\", () => {\n this.menuEl.style.width = `${this.toggleEl.offsetWidth}px`;\n });\n\n this._handleItemClick = this._handleItemClick.bind(this);\n this._handleNativeChange = this._handleNativeChange.bind(this);\n this.menuEl.addEventListener(\"click\", this._handleItemClick);\n this.selectEl.addEventListener(\"change\", this._handleNativeChange);\n\n instances.set(selectEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _buildMarkup() {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"fs-dropdown fs-form-select-dropdown\";\n\n const toggle = document.createElement(\"button\");\n toggle.type = \"button\";\n toggle.className = \"fs-form-select\";\n if (this.size === \"sm\" || this.size === \"lg\") {\n toggle.classList.add(`fs-form-select-${this.size}`);\n }\n toggle.disabled = this.selectEl.disabled;\n\n const menu = document.createElement(\"div\");\n menu.className = \"fs-dropdown-menu\";\n\n Array.from(this.selectEl.options).forEach((option) => {\n const item = document.createElement(\"button\");\n item.type = \"button\";\n item.className = \"fs-dropdown-item\";\n item.setAttribute(\"role\", \"option\");\n item.textContent = option.textContent;\n if (option.disabled) item.classList.add(\"is-disabled\");\n menu.appendChild(item);\n });\n\n this.selectEl.insertAdjacentElement(\"afterend\", wrapper);\n wrapper.appendChild(toggle);\n wrapper.appendChild(menu);\n\n this.selectEl.style.display = \"none\";\n this.wrapperEl = wrapper;\n this.toggleEl = toggle;\n this.menuEl = menu;\n }\n\n _syncFromNativeSelect() {\n const selectedOption = this.selectEl.options[this.selectEl.selectedIndex];\n this.toggleEl.textContent = selectedOption ? selectedOption.textContent : \"\";\n\n Array.from(this.menuEl.children).forEach((item, index) => {\n const isSelected = index === this.selectEl.selectedIndex;\n item.classList.toggle(\"is-active\", isSelected);\n item.setAttribute(\"aria-selected\", String(isSelected));\n });\n }\n\n _handleItemClick(event) {\n const item = event.target.closest(\".fs-dropdown-item:not(.is-disabled)\");\n if (!item) return;\n\n const index = Array.from(this.menuEl.children).indexOf(item);\n this.selectEl.selectedIndex = index;\n this._syncFromNativeSelect();\n\n this.selectEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n this.selectEl.dispatchEvent(\n new CustomEvent(\"fs:select:changed\", { bubbles: true, detail: { value: this.selectEl.value } }),\n );\n }\n\n _handleNativeChange() {\n this._syncFromNativeSelect();\n }\n\n show() {\n this.dropdown.show();\n }\n\n hide() {\n this.dropdown.hide();\n }\n\n toggle() {\n this.dropdown.toggle();\n }\n\n dispose() {\n this.dropdown.dispose();\n this.menuEl.removeEventListener(\"click\", this._handleItemClick);\n this.selectEl.removeEventListener(\"change\", this._handleNativeChange);\n this.wrapperEl.remove();\n this.selectEl.style.display = this._originalDisplay;\n instances.delete(this.selectEl);\n }\n}\n\nautoInit(\"select\", Select);\n", "import { collapse, expand } from \"./core/transition.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Accordion {\n constructor(accordionEl) {\n this.accordionEl = accordionEl;\n this.exclusive = accordionEl.getAttribute(\"data-multiple\") !== \"true\";\n this.items = [];\n\n const buttons = Array.from(accordionEl.querySelectorAll(\".fs-accordion-button\"));\n\n buttons.forEach((button) => {\n const panel = button.closest(\".fs-accordion-item\").querySelector(\".fs-accordion-collapse\");\n\n idCounter += 1;\n if (!panel.id) panel.id = `fokus-accordion-panel-${idCounter}`;\n if (!button.id) button.id = `fokus-accordion-button-${idCounter}`;\n\n button.setAttribute(\"aria-controls\", panel.id);\n panel.setAttribute(\"role\", \"region\");\n panel.setAttribute(\"aria-labelledby\", button.id);\n\n const startsOpen = button.getAttribute(\"aria-expanded\") === \"true\";\n button.setAttribute(\"aria-expanded\", String(startsOpen));\n if (!startsOpen) {\n panel.style.display = \"none\";\n }\n panel.hidden = !startsOpen;\n\n const entry = { button, panel, handleClick: () => this._toggle(entry) };\n this.items.push(entry);\n button.addEventListener(\"click\", entry.handleClick);\n });\n\n instances.set(accordionEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _toggle(entry) {\n const isOpen = entry.button.getAttribute(\"aria-expanded\") === \"true\";\n\n if (isOpen) {\n this._close(entry);\n return;\n }\n\n if (this.exclusive) {\n this.items\n .filter((other) => other !== entry && other.button.getAttribute(\"aria-expanded\") === \"true\")\n .forEach((other) => this._close(other));\n }\n\n this._open(entry);\n }\n\n _open(entry) {\n entry.button.setAttribute(\"aria-expanded\", \"true\");\n entry.panel.hidden = false;\n expand(entry.panel).then(() => {\n entry.button.dispatchEvent(new CustomEvent(\"fs:accordion:shown\", { bubbles: true }));\n });\n }\n\n _close(entry) {\n entry.button.setAttribute(\"aria-expanded\", \"false\");\n collapse(entry.panel).then(() => {\n entry.panel.hidden = true;\n entry.button.dispatchEvent(new CustomEvent(\"fs:accordion:hidden\", { bubbles: true }));\n });\n }\n\n dispose() {\n this.items.forEach((entry) => entry.button.removeEventListener(\"click\", entry.handleClick));\n instances.delete(this.accordionEl);\n }\n}\n\nautoInit(\"accordion\", Accordion);\n", "import { collapse, expand } from \"./core/transition.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Collapse {\n constructor(triggerEl) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const collapseEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!collapseEl) {\n throw new Error(\"FokusStyles.Collapse: elemento n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.collapseEl = collapseEl;\n this.isOpen = triggerEl.getAttribute(\"aria-expanded\") === \"true\";\n\n idCounter += 1;\n if (!collapseEl.id) collapseEl.id = `fokus-collapse-${idCounter}`;\n triggerEl.setAttribute(\"aria-controls\", collapseEl.id);\n triggerEl.setAttribute(\"aria-expanded\", String(this.isOpen));\n\n if (!this.isOpen) {\n collapseEl.style.display = \"none\";\n }\n\n this._handleClick = () => this.toggle();\n triggerEl.addEventListener(\"click\", this._handleClick);\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"true\");\n expand(this.collapseEl).then(() => {\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:collapse:shown\", { bubbles: true }));\n });\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"false\");\n collapse(this.collapseEl).then(() => {\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:collapse:hidden\", { bubbles: true }));\n });\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.triggerEl.removeEventListener(\"click\", this._handleClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"collapse\", Collapse);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Tabs {\n constructor(tablistEl) {\n this.tablistEl = tablistEl;\n this.tabs = Array.from(tablistEl.querySelectorAll(\".fs-nav-link\"));\n this.manualActivation = tablistEl.getAttribute(\"data-tabs-activation\") === \"manual\";\n\n tablistEl.setAttribute(\"role\", \"tablist\");\n\n this.tabs.forEach((tab) => {\n const isActive = tab.classList.contains(\"is-active\");\n\n idCounter += 1;\n if (!tab.id) tab.id = `fokus-tab-${idCounter}`;\n\n tab.setAttribute(\"role\", \"tab\");\n tab.setAttribute(\"aria-selected\", String(isActive));\n tab.setAttribute(\"tabindex\", isActive ? \"0\" : \"-1\");\n\n const paneSelector = tab.getAttribute(\"data-fs-target\");\n const pane = paneSelector ? document.querySelector(paneSelector) : null;\n\n if (pane) {\n pane.setAttribute(\"role\", \"tabpanel\");\n pane.setAttribute(\"aria-labelledby\", tab.id);\n pane.setAttribute(\"tabindex\", \"0\");\n pane.hidden = !isActive;\n }\n });\n\n this._handleClick = this._handleClick.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n\n tablistEl.addEventListener(\"click\", this._handleClick);\n tablistEl.addEventListener(\"keydown\", this._handleKeydown);\n\n instances.set(tablistEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleClick(event) {\n const tab = event.target.closest(\".fs-nav-link:not(.is-disabled)\");\n if (!tab || !this.tabs.includes(tab)) return;\n this.show(tab);\n }\n\n _handleKeydown(event) {\n const enabledTabs = this.tabs.filter((tab) => !tab.classList.contains(\"is-disabled\"));\n const currentIndex = enabledTabs.indexOf(document.activeElement);\n if (currentIndex === -1) return;\n\n let nextIndex = null;\n if (event.key === \"ArrowRight\") nextIndex = (currentIndex + 1) % enabledTabs.length;\n else if (event.key === \"ArrowLeft\") nextIndex = (currentIndex - 1 + enabledTabs.length) % enabledTabs.length;\n else if (event.key === \"Home\") nextIndex = 0;\n else if (event.key === \"End\") nextIndex = enabledTabs.length - 1;\n\n if (nextIndex === null) return;\n\n event.preventDefault();\n const nextTab = enabledTabs[nextIndex];\n nextTab.focus();\n if (!this.manualActivation) this.show(nextTab);\n }\n\n show(tab) {\n if (tab.classList.contains(\"is-active\")) return;\n\n this.tabs.forEach((otherTab) => {\n const isActive = otherTab === tab;\n\n otherTab.classList.toggle(\"is-active\", isActive);\n otherTab.setAttribute(\"aria-selected\", String(isActive));\n otherTab.setAttribute(\"tabindex\", isActive ? \"0\" : \"-1\");\n\n const paneSelector = otherTab.getAttribute(\"data-fs-target\");\n const pane = paneSelector ? document.querySelector(paneSelector) : null;\n pane?.classList.toggle(\"is-active\", isActive);\n if (pane) pane.hidden = !isActive;\n });\n\n tab.dispatchEvent(\n new CustomEvent(\"fs:tab:changed\", { bubbles: true, detail: { target: tab.getAttribute(\"data-fs-target\") } }),\n );\n }\n\n dispose() {\n this.tablistEl.removeEventListener(\"click\", this._handleClick);\n this.tablistEl.removeEventListener(\"keydown\", this._handleKeydown);\n instances.delete(this.tablistEl);\n }\n}\n\nautoInit(\"tabs\", Tabs);\n", "import { collapse, expand } from \"./core/transition.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Toast {\n constructor(toastEl) {\n this.toastEl = toastEl;\n this.delay = Number(toastEl.getAttribute(\"data-delay\")) || 4000;\n this.autohide = toastEl.getAttribute(\"data-autohide\") !== \"false\";\n this.isOpen = false;\n this._hideTimer = null;\n\n toastEl.setAttribute(\"role\", \"status\");\n toastEl.setAttribute(\"aria-live\", \"polite\");\n toastEl.style.display = \"none\";\n\n this._handleDismissClick = this._handleDismissClick.bind(this);\n toastEl.addEventListener(\"click\", this._handleDismissClick);\n\n instances.set(toastEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"toast\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n expand(this.toastEl).then(() => {\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:toast:shown\", { bubbles: true }));\n });\n\n if (this.autohide) {\n this._hideTimer = setTimeout(() => this.hide(), this.delay);\n }\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n clearTimeout(this._hideTimer);\n this._hideTimer = null;\n\n collapse(this.toastEl).then(() => {\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:toast:hidden\", { bubbles: true }));\n });\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n clearTimeout(this._hideTimer);\n this.toastEl.removeEventListener(\"click\", this._handleDismissClick);\n instances.delete(this.toastEl);\n }\n}\n\nautoInit(\"toast\", Toast);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nconst interactiveSelector = \"a, button, input, select, textarea, label, [contenteditable='true']\";\n\nexport class Carousel {\n constructor(carouselEl) {\n this.carouselEl = carouselEl;\n this.inner = carouselEl.querySelector(\".fs-carousel-inner\");\n this.items = Array.from(carouselEl.querySelectorAll(\".fs-carousel-item\"));\n this.indicators = Array.from(carouselEl.querySelectorAll(\".fs-carousel-indicators button\"));\n this.prevBtn = carouselEl.querySelector(\".fs-carousel-control-prev\");\n this.nextBtn = carouselEl.querySelector(\".fs-carousel-control-next\");\n this.toggleBtn = carouselEl.querySelector(\"[data-fs-carousel-toggle]\");\n this.counterEl = carouselEl.querySelector(\"[data-fs-carousel-counter]\");\n this.progressEl = carouselEl.querySelector(\"[data-fs-carousel-progress]\");\n\n this.interval = Number(carouselEl.getAttribute(\"data-interval\")) || 5000;\n this.autoplay = carouselEl.getAttribute(\"data-autoplay\") === \"true\";\n this.dragEnabled = carouselEl.getAttribute(\"data-drag\") !== \"false\";\n this.timer = null;\n this.userPaused = false;\n this.isHovering = false;\n this.isFocusWithin = false;\n this.drag = null;\n this.isStatic = this.items.length < 2;\n this.index = Math.max(this.items.findIndex((item) => item.classList.contains(\"is-active\")), 0);\n\n carouselEl.setAttribute(\"role\", \"group\");\n carouselEl.setAttribute(\"aria-roledescription\", \"carousel\");\n carouselEl.classList.toggle(\"is-static\", this.isStatic);\n carouselEl.classList.toggle(\"is-two-slides\", this.items.length === 2);\n if (!this.isStatic && !carouselEl.hasAttribute(\"tabindex\")) {\n carouselEl.setAttribute(\"tabindex\", \"0\");\n this.managesTabindex = true;\n }\n\n this._render();\n\n this._handlePrev = () => this.prev();\n this._handleNext = () => this.next();\n this._handleToggle = () => (this.userPaused ? this.play() : this.pause());\n this._handleIndicator = (event) => {\n const index = this.indicators.indexOf(event.currentTarget);\n if (index !== -1) this.goTo(index);\n };\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handlePointerDown = this._handlePointerDown.bind(this);\n this._handlePointerMove = this._handlePointerMove.bind(this);\n this._handlePointerEnd = this._handlePointerEnd.bind(this);\n this._handleVisibilityChange = this._handleVisibilityChange.bind(this);\n this._handleMouseEnter = () => {\n this.isHovering = true;\n this._syncAutoplay();\n };\n this._handleMouseLeave = () => {\n this.isHovering = false;\n this._syncAutoplay();\n };\n this._handleFocusIn = () => {\n this.isFocusWithin = true;\n this._syncAutoplay();\n };\n this._handleFocusOut = () => {\n queueMicrotask(() => {\n this.isFocusWithin = carouselEl.contains(document.activeElement);\n this._syncAutoplay();\n });\n };\n\n this.prevBtn?.addEventListener(\"click\", this._handlePrev);\n this.nextBtn?.addEventListener(\"click\", this._handleNext);\n this.toggleBtn?.addEventListener(\"click\", this._handleToggle);\n this.indicators.forEach((btn) => btn.addEventListener(\"click\", this._handleIndicator));\n carouselEl.addEventListener(\"keydown\", this._handleKeydown);\n carouselEl.addEventListener(\"pointerdown\", this._handlePointerDown);\n carouselEl.addEventListener(\"pointermove\", this._handlePointerMove);\n carouselEl.addEventListener(\"pointerup\", this._handlePointerEnd);\n carouselEl.addEventListener(\"pointercancel\", this._handlePointerEnd);\n carouselEl.addEventListener(\"mouseenter\", this._handleMouseEnter);\n carouselEl.addEventListener(\"mouseleave\", this._handleMouseLeave);\n carouselEl.addEventListener(\"focusin\", this._handleFocusIn);\n carouselEl.addEventListener(\"focusout\", this._handleFocusOut);\n document.addEventListener(\"visibilitychange\", this._handleVisibilityChange);\n\n instances.set(carouselEl, this);\n this._syncAutoplay();\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _isDocumentVisible() {\n return document.visibilityState !== \"hidden\";\n }\n\n _isTemporarilyPaused() {\n return this.isHovering || this.isFocusWithin || !this._isDocumentVisible() || Boolean(this.drag);\n }\n\n _isAutoplayEnabled() {\n return this.autoplay && !this.isStatic && !this.userPaused && !this._isTemporarilyPaused();\n }\n\n _syncAutoplay() {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n if (this._isAutoplayEnabled()) this.timer = setInterval(() => this.next(), this.interval);\n this._syncAutoplayA11y();\n }\n\n _syncAutoplayA11y() {\n if (this.inner) this.inner.setAttribute(\"aria-live\", this.timer ? \"off\" : \"polite\");\n this.carouselEl.classList.toggle(\n \"is-autoplay-paused\",\n this.autoplay && !this.isStatic && !this.timer,\n );\n if (this.progressEl) {\n this.progressEl.style.setProperty(\"--fs-carousel-progress-duration\", `${this.interval}ms`);\n this.progressEl.classList.remove(\"is-running\");\n if (this.timer) {\n void this.progressEl.offsetWidth;\n this.progressEl.classList.add(\"is-running\");\n }\n }\n if (!this.toggleBtn) return;\n\n const isPlaying = this.autoplay && !this.userPaused && !this.isStatic;\n this.toggleBtn.disabled = !this.autoplay || this.isStatic;\n this.toggleBtn.setAttribute(\"aria-pressed\", String(isPlaying));\n this.toggleBtn.setAttribute(\n \"aria-label\",\n isPlaying ? \"Pausar reprodu\u00E7\u00E3o autom\u00E1tica\" : \"Reproduzir reprodu\u00E7\u00E3o autom\u00E1tica\",\n );\n }\n\n _render() {\n if (this.inner && !this.carouselEl.classList.contains(\"fs-carousel-fade\")) {\n this.inner.style.transform = `translate3d(-${this.index * 100}%, 0, 0)`;\n }\n\n this.items.forEach((item, index) => {\n item.classList.toggle(\"is-active\", index === this.index);\n item.setAttribute(\"aria-hidden\", String(index !== this.index));\n item.toggleAttribute(\"inert\", index !== this.index);\n });\n this.indicators.forEach((btn, index) => {\n btn.classList.toggle(\"is-active\", index === this.index);\n btn.setAttribute(\"aria-current\", String(index === this.index));\n });\n if (this.counterEl) this.counterEl.textContent = `${this.index + 1} de ${this.items.length}`;\n this._syncAutoplayA11y();\n }\n\n _goToIndex(nextIndex) {\n const count = this.items.length;\n if (count < 2) return;\n\n const from = this.index;\n const to = ((nextIndex % count) + count) % count;\n if (to === from) return;\n\n this.index = to;\n this._render();\n this.carouselEl.dispatchEvent(\n new CustomEvent(\"fs:carousel:slid\", { bubbles: true, detail: { from, to } }),\n );\n }\n\n next() {\n this._goToIndex(this.index + 1);\n }\n\n prev() {\n this._goToIndex(this.index - 1);\n }\n\n goTo(index) {\n this._goToIndex(index);\n }\n\n pause() {\n if (!this.autoplay) return;\n this.userPaused = true;\n this._syncAutoplay();\n }\n\n play() {\n if (!this.autoplay || this.isStatic) return;\n this.userPaused = false;\n this._syncAutoplay();\n }\n\n _handleKeydown(event) {\n if (event.target !== this.carouselEl) return;\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n this.next();\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n this.prev();\n } else if (event.key === \"Home\") {\n event.preventDefault();\n this.goTo(0);\n } else if (event.key === \"End\") {\n event.preventDefault();\n this.goTo(this.items.length - 1);\n }\n }\n\n _handlePointerDown(event) {\n if (!this.dragEnabled || this.isStatic || this.carouselEl.classList.contains(\"fs-carousel-fade\")) return;\n if (event.isPrimary === false || (event.pointerType === \"mouse\" && event.button !== 0)) return;\n if (event.target.closest?.(interactiveSelector)) return;\n\n this.drag = { id: event.pointerId, startX: event.clientX, startY: event.clientY, deltaX: 0, horizontal: false };\n try {\n this.carouselEl.setPointerCapture?.(event.pointerId);\n } catch {\n // Alguns ambientes de teste n\u00E3o implementam pointer capture.\n }\n this._syncAutoplay();\n }\n\n _handlePointerMove(event) {\n if (!this.drag || event.pointerId !== this.drag.id) return;\n const deltaX = event.clientX - this.drag.startX;\n const deltaY = event.clientY - this.drag.startY;\n\n if (!this.drag.horizontal) {\n if (Math.abs(deltaY) > 8 && Math.abs(deltaY) >= Math.abs(deltaX)) {\n this._clearDrag();\n return;\n }\n if (Math.abs(deltaX) <= 8 || Math.abs(deltaX) < Math.abs(deltaY)) return;\n this.drag.horizontal = true;\n this.carouselEl.classList.add(\"is-dragging\");\n }\n\n this.drag.deltaX = deltaX;\n this.inner.style.transform = `translate3d(calc(-${this.index * 100}% + ${deltaX}px), 0, 0)`;\n event.preventDefault();\n }\n\n _handlePointerEnd(event) {\n if (!this.drag || event.pointerId !== this.drag.id) return;\n const { deltaX, horizontal } = this.drag;\n this._clearDrag();\n this._render();\n if (event.type === \"pointercancel\" || !horizontal) return;\n\n const width = this.carouselEl.getBoundingClientRect().width;\n const threshold = Math.min(80, Math.max(40, width * 0.12));\n if (Math.abs(deltaX) < threshold) return;\n if (deltaX < 0) this.next();\n else this.prev();\n }\n\n _clearDrag() {\n if (!this.drag) return;\n try {\n if (this.carouselEl.hasPointerCapture?.(this.drag.id)) this.carouselEl.releasePointerCapture(this.drag.id);\n } catch {\n // Pointer capture pode j\u00E1 ter sido liberado pelo navegador.\n }\n this.drag = null;\n this.carouselEl.classList.remove(\"is-dragging\");\n this._syncAutoplay();\n }\n\n _handleVisibilityChange() {\n this._syncAutoplay();\n }\n\n dispose() {\n this.userPaused = true;\n this._clearDrag();\n this._syncAutoplay();\n this.prevBtn?.removeEventListener(\"click\", this._handlePrev);\n this.nextBtn?.removeEventListener(\"click\", this._handleNext);\n this.toggleBtn?.removeEventListener(\"click\", this._handleToggle);\n this.indicators.forEach((btn) => btn.removeEventListener(\"click\", this._handleIndicator));\n this.carouselEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.carouselEl.removeEventListener(\"pointerdown\", this._handlePointerDown);\n this.carouselEl.removeEventListener(\"pointermove\", this._handlePointerMove);\n this.carouselEl.removeEventListener(\"pointerup\", this._handlePointerEnd);\n this.carouselEl.removeEventListener(\"pointercancel\", this._handlePointerEnd);\n this.carouselEl.removeEventListener(\"mouseenter\", this._handleMouseEnter);\n this.carouselEl.removeEventListener(\"mouseleave\", this._handleMouseLeave);\n this.carouselEl.removeEventListener(\"focusin\", this._handleFocusIn);\n this.carouselEl.removeEventListener(\"focusout\", this._handleFocusOut);\n document.removeEventListener(\"visibilitychange\", this._handleVisibilityChange);\n if (this.managesTabindex) this.carouselEl.removeAttribute(\"tabindex\");\n instances.delete(this.carouselEl);\n }\n}\n\nautoInit(\"carousel\", Carousel);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Stepper {\n constructor(stepperEl) {\n this.stepperEl = stepperEl;\n this.steps = Array.from(stepperEl.querySelectorAll(\".fs-step\"));\n this.linear = stepperEl.getAttribute(\"data-linear\") !== \"false\";\n\n const contentPanels = Array.from(stepperEl.querySelectorAll(\".fs-step-panel\"));\n this.panels = this.steps.map((step, i) =>\n step.dataset.fsTarget ? stepperEl.querySelector(step.dataset.fsTarget) : contentPanels[i],\n );\n\n this.prevBtn = stepperEl.querySelector('[data-stepper=\"prev\"]');\n this.nextBtn = stepperEl.querySelector('[data-stepper=\"next\"]');\n this.finished = false;\n\n this.current = Math.max(\n this.steps.findIndex((step) => step.classList.contains(\"fs-step-active\")),\n 0,\n );\n\n this.steps.forEach((step, i) => {\n step.setAttribute(\"role\", \"listitem\");\n step.handleClick = () => this._onStepClick(i);\n step.addEventListener(\"click\", step.handleClick);\n step.handleKeydown = (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this._onStepClick(i);\n }\n };\n step.addEventListener(\"keydown\", step.handleKeydown);\n });\n\n this._handlePrev = () => this.prev();\n this._handleNext = () => this.next();\n this.prevBtn?.addEventListener(\"click\", this._handlePrev);\n this.nextBtn?.addEventListener(\"click\", this._handleNext);\n\n this._render();\n instances.set(stepperEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _onStepClick(index) {\n // Modo linear: s\u00F3 permite voltar para passos j\u00E1 conclu\u00EDdos (ou o atual).\n if (this.linear && index > this.current) return;\n this.goTo(index);\n }\n\n _render() {\n this.steps.forEach((step, i) => {\n const isActive = i === this.current && !this.finished;\n const isCompleted = i < this.current || this.finished;\n\n step.classList.toggle(\"fs-step-active\", isActive);\n step.classList.toggle(\"fs-step-completed\", isCompleted);\n step.setAttribute(\"aria-current\", isActive ? \"step\" : \"false\");\n\n const clickable = this.linear ? isCompleted : true;\n step.classList.toggle(\"fs-step-clickable\", clickable);\n step.setAttribute(\"tabindex\", clickable ? \"0\" : \"-1\");\n\n const panel = this.panels[i];\n if (panel) panel.classList.toggle(\"is-active\", i === this.current);\n });\n\n if (this.prevBtn) this.prevBtn.disabled = this.current === 0 && !this.finished;\n }\n\n _change(to) {\n const from = this.current;\n const target = Math.max(0, Math.min(to, this.steps.length - 1));\n if (target === from && !this.finished) return false;\n\n const before = new CustomEvent(\"fs:stepper:beforechange\", {\n bubbles: true,\n cancelable: true,\n detail: { from, to: target },\n });\n this.stepperEl.dispatchEvent(before);\n if (before.defaultPrevented) return false;\n\n this.finished = false;\n this.current = target;\n this._render();\n\n this.stepperEl.dispatchEvent(\n new CustomEvent(\"fs:stepper:changed\", { bubbles: true, detail: { from, to: target } }),\n );\n return true;\n }\n\n next() {\n if (this.current < this.steps.length - 1) return this._change(this.current + 1);\n return this.complete();\n }\n\n prev() {\n return this._change(this.current - 1);\n }\n\n goTo(index) {\n return this._change(index);\n }\n\n setError(index, hasError = true) {\n const step = this.steps[index];\n if (step) step.classList.toggle(\"fs-step-error\", hasError);\n }\n\n complete() {\n const before = new CustomEvent(\"fs:stepper:beforechange\", {\n bubbles: true,\n cancelable: true,\n detail: { from: this.current, to: this.current, completing: true },\n });\n this.stepperEl.dispatchEvent(before);\n if (before.defaultPrevented) return false;\n\n this.finished = true;\n this._render();\n this.stepperEl.dispatchEvent(new CustomEvent(\"fs:stepper:completed\", { bubbles: true }));\n return true;\n }\n\n dispose() {\n this.steps.forEach((step) => {\n step.removeEventListener(\"click\", step.handleClick);\n step.removeEventListener(\"keydown\", step.handleKeydown);\n });\n this.prevBtn?.removeEventListener(\"click\", this._handlePrev);\n this.nextBtn?.removeEventListener(\"click\", this._handleNext);\n instances.delete(this.stepperEl);\n }\n}\n\nautoInit(\"stepper\", Stepper);\n", "import { Dropdown } from \"./dropdown.js\";\nimport { Tooltip } from \"./tooltip.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Breadcrumb {\n constructor(listEl, options = {}) {\n this.listEl = listEl;\n this.maxItems = Number(options.maxItems ?? listEl.getAttribute(\"data-max-items\") ?? 4);\n this.items = Array.from(listEl.children).filter((el) => el.classList.contains(\"fs-breadcrumb-item\"));\n this.isCollapsed = false;\n this._moreItem = null;\n this._dropdown = null;\n // Abaixo do breakpoint `sm` (scss/settings/_breakpoints.scss, 640px). Por\n // inst\u00E2ncia (em vez de m\u00F3dulo) para poder ser mockado por teste e para o\n // listener ser removido de forma isolada em dispose().\n this._collapseQuery = window.matchMedia(\"(max-width: 639.98px)\");\n\n this._setupTruncation();\n\n this._handleMediaChange = () => this._render();\n this._collapseQuery.addEventListener(\"change\", this._handleMediaChange);\n\n this._render();\n\n instances.set(listEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n // Trunca com retic\u00EAncias (CSS) e s\u00F3 anexa tooltip (js/tooltip.js) nos itens\n // cujo texto realmente transborda \u2014 evita tooltip redundante em labels\n // curtos que j\u00E1 cabem inteiros. Mede depois de `document.fonts.ready`: como\n // a tipografia \u00E9 self-hosted (docs/definitions.md, se\u00E7\u00E3o 18.2), medir antes\n // da fonte carregar poderia usar a m\u00E9trica do fallback do sistema e errar o\n // corte.\n _setupTruncation() {\n const targets = this.items.map((item) => item.querySelector(\"a\") ?? item);\n targets.forEach((target) => target.classList.add(\"fs-breadcrumb-item-truncate\"));\n\n const measure = () => {\n targets.forEach((target) => {\n if (target.scrollWidth > target.clientWidth) {\n target.setAttribute(\"data-title\", target.textContent.trim());\n new Tooltip(target);\n }\n });\n };\n\n if (document.fonts?.ready) {\n document.fonts.ready.then(measure);\n } else {\n requestAnimationFrame(measure);\n }\n }\n\n _render() {\n const shouldCollapse = this._collapseQuery.matches && this.items.length > this.maxItems;\n\n if (shouldCollapse === this.isCollapsed) return;\n this.isCollapsed = shouldCollapse;\n\n if (shouldCollapse) {\n this._collapse();\n } else {\n this._expand();\n }\n }\n\n // Mant\u00E9m o primeiro e o \u00FAltimo n\u00EDvel vis\u00EDveis; os intermedi\u00E1rios viram um\n // \u00FAnico item \"\u2026\" com dropdown (mesma composi\u00E7\u00E3o de js/select.js: monta o\n // toggle + `.fs-dropdown-menu` como irm\u00E3os e deixa o Dropdown reposicionar).\n _collapse() {\n const hiddenItems = this.items.slice(1, -1);\n hiddenItems.forEach((item) => {\n item.style.display = \"none\";\n });\n\n const moreItem = document.createElement(\"li\");\n moreItem.className = \"fs-breadcrumb-item\";\n\n const toggle = document.createElement(\"button\");\n toggle.type = \"button\";\n toggle.className = \"fs-breadcrumb-more\";\n toggle.setAttribute(\"aria-label\", \"Mostrar n\u00EDveis ocultos\");\n toggle.textContent = \"\u2026\";\n\n const menu = document.createElement(\"div\");\n menu.className = \"fs-dropdown-menu\";\n\n hiddenItems.forEach((item) => {\n const source = item.querySelector(\"a\") ?? item;\n const isLink = source.tagName === \"A\";\n const link = document.createElement(isLink ? \"a\" : \"span\");\n link.className = \"fs-dropdown-item\";\n link.textContent = source.textContent.trim();\n if (isLink) link.href = source.getAttribute(\"href\");\n menu.appendChild(link);\n });\n\n moreItem.appendChild(toggle);\n moreItem.appendChild(menu);\n this.items[0].insertAdjacentElement(\"afterend\", moreItem);\n\n this._moreItem = moreItem;\n this._dropdown = new Dropdown(toggle);\n }\n\n _expand() {\n this.items.slice(1, -1).forEach((item) => {\n item.style.removeProperty(\"display\");\n });\n\n this._dropdown?.dispose();\n this._dropdown = null;\n\n this._moreItem?.remove();\n this._moreItem = null;\n }\n\n dispose() {\n this._collapseQuery.removeEventListener(\"change\", this._handleMediaChange);\n this._expand();\n instances.delete(this.listEl);\n }\n}\n\nautoInit(\"breadcrumb\", Breadcrumb);\n", "import { Toast } from \"./toast.js\";\nimport { computePosition, applyPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction escapeHtml(value) {\n const div = document.createElement(\"div\");\n div.textContent = value == null ? \"\" : String(value);\n return div.innerHTML;\n}\n\nfunction formatTime(time) {\n const date = new Date(time);\n const hh = String(date.getHours()).padStart(2, \"0\");\n const mm = String(date.getMinutes()).padStart(2, \"0\");\n return `${hh}:${mm}`;\n}\n\n// Notification Center (Etapa 10): n\u00E3o \u00E9 um \"componente visual\" novo \u2014 orquestra\n// m\u00FAltiplas inst\u00E2ncias de FokusStyles.Toast (js/toast.js) e mant\u00E9m um hist\u00F3rico. Um\n// `push()` cria um toast na hora (mesma marca\u00E7\u00E3o de mockup/accordion-tabs-toast)\n// e registra a notifica\u00E7\u00E3o; o painel (posicionado como o Dropdown, via\n// js/core/positioning.js) lista o hist\u00F3rico, com contador de n\u00E3o-lidas no\n// gatilho. Persist\u00EAncia opcional em localStorage (`data-storage=\"local\"`).\nexport class NotificationCenter {\n constructor(triggerEl, options = {}) {\n const panelSelector = options.target ?? triggerEl.getAttribute(\"data-fs-target\");\n const panelEl = panelSelector ? document.querySelector(panelSelector) : null;\n\n if (!panelEl) {\n throw new Error(\"FokusStyles.NotificationCenter: painel n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.panelEl = panelEl;\n this.storage = options.storage ?? triggerEl.getAttribute(\"data-storage\") ?? \"memory\";\n this.storageKey = options.storageKey ?? triggerEl.getAttribute(\"data-storage-key\") ?? \"fokus-notifications\";\n\n const containerSelector = options.toastContainer ?? triggerEl.getAttribute(\"data-toast-container\");\n this.toastContainer = containerSelector ? document.querySelector(containerSelector) : this._ensureToastContainer();\n\n this.isOpen = false;\n this._outsideClickCleanup = null;\n this.history = this._load();\n\n this.badgeEl = triggerEl.querySelector(\".fs-notification-badge\");\n this.listEl = panelEl.querySelector(\".fs-notification-list\");\n this.emptyEl = panelEl.querySelector(\".fs-notification-empty\");\n\n document.body.appendChild(this.panelEl);\n\n triggerEl.setAttribute(\"aria-haspopup\", \"dialog\");\n triggerEl.setAttribute(\"aria-expanded\", \"false\");\n if (panelEl.id) triggerEl.setAttribute(\"aria-controls\", panelEl.id);\n if (!panelEl.getAttribute(\"role\")) panelEl.setAttribute(\"role\", \"region\");\n if (!panelEl.getAttribute(\"aria-label\")) panelEl.setAttribute(\"aria-label\", \"Notifica\u00E7\u00F5es\");\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handlePanelClick = this._handlePanelClick.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n panelEl.addEventListener(\"click\", this._handlePanelClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.close();\n this.triggerEl.focus();\n }\n });\n\n this._render();\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _ensureToastContainer() {\n let container = document.querySelector(\".fs-toast-container\");\n if (!container) {\n container = document.createElement(\"div\");\n container.className = \"fs-toast-container\";\n document.body.appendChild(container);\n }\n return container;\n }\n\n _load() {\n if (this.storage !== \"local\") return [];\n try {\n return JSON.parse(localStorage.getItem(this.storageKey)) || [];\n } catch {\n return [];\n }\n }\n\n _persist() {\n if (this.storage !== \"local\") return;\n try {\n localStorage.setItem(this.storageKey, JSON.stringify(this.history));\n } catch {\n // Cota cheia ou storage indispon\u00EDvel: hist\u00F3rico segue em mem\u00F3ria.\n }\n }\n\n get unreadCount() {\n return this.history.filter((record) => !record.read).length;\n }\n\n // Empilha um toast e registra a notifica\u00E7\u00E3o. Retorna o id do registro.\n push(options = {}) {\n const { title = \"\", body = \"\", variant = \"primary\", autohide = true, delay } = options;\n\n idCounter += 1;\n const record = { id: `n-${idCounter}`, title, body, variant, time: Date.now(), read: this.isOpen };\n this.history.unshift(record);\n this._persist();\n this._render();\n\n this._showToast({ title, body, variant, autohide, delay });\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:pushed\", { bubbles: true, detail: { record } }));\n return record.id;\n }\n\n _showToast({ title, body, variant, autohide, delay }) {\n const toastEl = document.createElement(\"div\");\n toastEl.className = `fs-toast fs-toast-${variant}`;\n if (delay != null) toastEl.setAttribute(\"data-delay\", String(delay));\n if (!autohide) toastEl.setAttribute(\"data-autohide\", \"false\");\n toastEl.innerHTML = `\n <div class=\"fs-toast-header\">\n <span>${escapeHtml(title)}</span>\n <button type=\"button\" class=\"fs-btn-close\" data-fs-dismiss=\"toast\" aria-label=\"Fechar\"></button>\n </div>\n ${body ? `<div class=\"fs-toast-body\">${escapeHtml(body)}</div>` : \"\"}\n `;\n this.toastContainer.appendChild(toastEl);\n\n const toast = new Toast(toastEl);\n toastEl.addEventListener(\"fs:toast:hidden\", () => {\n toast.dispose();\n toastEl.remove();\n });\n toast.show();\n }\n\n remove(id) {\n this.history = this.history.filter((record) => record.id !== id);\n this._persist();\n this._render();\n }\n\n clear() {\n this.history = [];\n this._persist();\n this._render();\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:cleared\", { bubbles: true }));\n }\n\n getAll() {\n return this.history.slice();\n }\n\n _updateBadge() {\n if (!this.badgeEl) return;\n const count = this.unreadCount;\n this.badgeEl.textContent = String(count);\n this.badgeEl.toggleAttribute(\"hidden\", count === 0);\n }\n\n _render() {\n if (this.listEl) {\n this.listEl.innerHTML = this.history\n .map(\n (record) => `\n <li class=\"fs-notification-item fs-notification-item-${record.variant}${record.read ? \"\" : \" fs-notification-item-unread\"}\" data-id=\"${record.id}\">\n <div class=\"fs-notification-item-content\">\n <p class=\"fs-notification-item-title\">${escapeHtml(record.title)}</p>\n ${record.body ? `<p class=\"fs-notification-item-text\">${escapeHtml(record.body)}</p>` : \"\"}\n <span class=\"fs-notification-item-time\">${formatTime(record.time)}</span>\n </div>\n <button type=\"button\" class=\"fs-btn-close\" data-notification-dismiss aria-label=\"Remover notifica\u00E7\u00E3o\"></button>\n </li>`,\n )\n .join(\"\");\n }\n this.emptyEl?.toggleAttribute(\"hidden\", this.history.length > 0);\n this._updateBadge();\n }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handlePanelClick(event) {\n if (event.target.closest('[data-notification=\"clear\"]')) {\n this.clear();\n return;\n }\n\n const dismissBtn = event.target.closest(\"[data-notification-dismiss]\");\n if (dismissBtn) {\n const id = dismissBtn.closest(\".fs-notification-item\")?.dataset.id;\n if (id) this.remove(id);\n }\n }\n\n open() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.triggerEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.panelEl.setAttribute(\"data-theme\", theme);\n } else {\n this.panelEl.removeAttribute(\"data-theme\");\n }\n\n this.panelEl.classList.add(\"is-open\");\n\n const position = computePosition(this.triggerEl, this.panelEl, {\n placement: \"bottom\",\n align: \"end\",\n offset: 4,\n });\n applyPosition(this.panelEl, position);\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"true\");\n\n // Abrir = ler tudo.\n this.history.forEach((record) => {\n record.read = true;\n });\n this._persist();\n this._render();\n\n this._outsideClickCleanup = onClickOutside(this.panelEl, (event) => {\n if (this.triggerEl.contains(event.target)) return;\n this.close();\n });\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:opened\", { bubbles: true }));\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.panelEl.classList.remove(\"is-open\");\n this.panelEl.style.removeProperty(\"position\");\n this.panelEl.style.removeProperty(\"top\");\n this.panelEl.style.removeProperty(\"left\");\n this.triggerEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:closed\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n dispose() {\n this.close();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.panelEl.removeEventListener(\"click\", this._handlePanelClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"notification-center\", NotificationCenter);\n", "import { computePosition, applyPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Itens foc\u00E1veis de um n\u00EDvel de menu: `.fs-dropdown-item` diretos (folhas) e o\n// item de cada `.fs-dropdown-submenu` (que abre o pr\u00F3ximo n\u00EDvel). Ignora\n// divisores/headers e itens desabilitados.\nfunction levelItems(menuEl) {\n const items = [];\n for (const child of menuEl.children) {\n let item = null;\n if (child.classList.contains(\"fs-dropdown-item\")) {\n item = child;\n } else if (child.classList.contains(\"fs-dropdown-submenu\")) {\n item = child.querySelector(\":scope > .fs-dropdown-item\");\n }\n if (item && !item.classList.contains(\"is-disabled\")) items.push(item);\n }\n return items;\n}\n\nfunction isSubmenuParent(item) {\n return item.classList.contains(\"fs-dropdown-item-submenu\");\n}\n\n// Nested Menu (Etapa 10): Dropdown com submenus recursivos. Reaproveita a\n// marca\u00E7\u00E3o/estilo do Dropdown (`.fs-dropdown-menu`/`.fs-dropdown-item`); cada submenu\n// \u00E9 um `.fs-dropdown-menu` dentro de um `.fs-dropdown-submenu`. Hover abre por CSS\n// (scss/components/_nested-menu.scss); aqui ficam clique, teclado (setas entre\n// n\u00EDveis) e o flip de borda. Componente pr\u00F3prio (n\u00E3o estende o Dropdown) porque\n// a navega\u00E7\u00E3o por teclado \u00E9 por n\u00EDvel, n\u00E3o linear sobre todos os itens.\nexport class NestedMenu {\n constructor(toggleEl, options = {}) {\n const targetSelector = toggleEl.getAttribute(\"data-fs-target\");\n const rootMenu = targetSelector ? document.querySelector(targetSelector) : toggleEl.nextElementSibling;\n\n if (!rootMenu) {\n throw new Error(\"FokusStyles.NestedMenu: elemento do menu n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.toggleEl = toggleEl;\n this.rootMenu = rootMenu;\n this.placement = options.placement ?? toggleEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.align = options.align ?? toggleEl.getAttribute(\"data-align\") ?? \"start\";\n this.isOpen = false;\n this._outsideClickCleanup = null;\n\n document.body.appendChild(this.rootMenu);\n\n this.toggleEl.setAttribute(\"aria-haspopup\", \"menu\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n this.rootMenu.setAttribute(\"role\", \"menu\");\n this.rootMenu.querySelectorAll(\".fs-dropdown-menu\").forEach((menu) => menu.setAttribute(\"role\", \"menu\"));\n this.rootMenu.querySelectorAll(\".fs-dropdown-item-submenu\").forEach((item) => {\n item.setAttribute(\"aria-haspopup\", \"menu\");\n item.setAttribute(\"aria-expanded\", \"false\");\n });\n\n this._handleToggleClick = this._handleToggleClick.bind(this);\n this._handleMenuClick = this._handleMenuClick.bind(this);\n this._handleMenuKeydown = this._handleMenuKeydown.bind(this);\n this._handleMenuMouseover = this._handleMenuMouseover.bind(this);\n\n this.toggleEl.addEventListener(\"click\", this._handleToggleClick);\n this.rootMenu.addEventListener(\"click\", this._handleMenuClick);\n this.rootMenu.addEventListener(\"keydown\", this._handleMenuKeydown);\n this.rootMenu.addEventListener(\"mouseover\", this._handleMenuMouseover);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.hide();\n this.toggleEl.focus();\n }\n });\n\n instances.set(toggleEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _submenuOf(parentItem) {\n const submenu = parentItem.nextElementSibling;\n return submenu && submenu.classList.contains(\"fs-dropdown-menu\") ? submenu : null;\n }\n\n _applyFlip(parentItem) {\n const submenu = this._submenuOf(parentItem);\n if (!submenu) return;\n\n const rect = parentItem.getBoundingClientRect();\n const width = submenu.offsetWidth || 180;\n const viewportWidth = document.documentElement.clientWidth;\n parentItem.parentElement.classList.toggle(\"fs-dropdown-submenu-left\", rect.right + width > viewportWidth);\n }\n\n _openSubmenu(parentItem, focusFirst) {\n const submenu = this._submenuOf(parentItem);\n if (!submenu) return;\n\n // Fecha submenus irm\u00E3os abertos no mesmo n\u00EDvel (s\u00F3 um por n\u00EDvel).\n const level = parentItem.closest(\".fs-dropdown-menu\");\n level.querySelectorAll(\":scope > .fs-dropdown-submenu > .fs-dropdown-menu.is-open\").forEach((sibling) => {\n if (sibling !== submenu) {\n sibling.classList.remove(\"is-open\");\n sibling.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n }\n });\n\n this._applyFlip(parentItem);\n submenu.classList.add(\"is-open\");\n parentItem.setAttribute(\"aria-expanded\", \"true\");\n if (focusFirst) levelItems(submenu)[0]?.focus();\n }\n\n _closeSubmenu(parentItem) {\n const submenu = this._submenuOf(parentItem);\n if (!submenu) return;\n\n submenu.querySelectorAll(\".fs-dropdown-menu.is-open\").forEach((nested) => {\n nested.classList.remove(\"is-open\");\n nested.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n });\n submenu.classList.remove(\"is-open\");\n parentItem.parentElement.classList.remove(\"fs-dropdown-submenu-left\");\n parentItem.setAttribute(\"aria-expanded\", \"false\");\n }\n\n _closeAllSubmenus() {\n this.rootMenu.querySelectorAll(\".fs-dropdown-menu.is-open\").forEach((submenu) => {\n submenu.classList.remove(\"is-open\");\n submenu.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n });\n this.rootMenu.querySelectorAll(\".fs-dropdown-submenu-left\").forEach((wrapper) => wrapper.classList.remove(\"fs-dropdown-submenu-left\"));\n }\n\n _handleToggleClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handleMenuClick(event) {\n const item = event.target.closest(\".fs-dropdown-item\");\n if (!item || item.classList.contains(\"is-disabled\")) return;\n\n if (isSubmenuParent(item)) {\n event.preventDefault();\n if (this._submenuOf(item)?.classList.contains(\"is-open\")) {\n this._closeSubmenu(item);\n } else {\n this._openSubmenu(item, false);\n }\n return;\n }\n\n // Folha: fecha o menu inteiro e devolve o foco ao gatilho.\n this.hide();\n this.toggleEl.focus();\n }\n\n _handleMenuMouseover(event) {\n const hoveredParent = event.target.closest(\".fs-dropdown-item-submenu\");\n\n // Fecha submenus abertos por teclado (`.is-open`) que n\u00E3o est\u00E3o no caminho do\n // item sob o mouse, pra hover e teclado n\u00E3o deixarem dois ramos abertos.\n this.rootMenu.querySelectorAll(\".fs-dropdown-menu.is-open\").forEach((submenu) => {\n if (!submenu.contains(event.target) && submenu !== hoveredParent?.nextElementSibling) {\n submenu.classList.remove(\"is-open\");\n submenu.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n }\n });\n\n if (hoveredParent) this._applyFlip(hoveredParent);\n }\n\n _handleMenuKeydown(event) {\n const active = document.activeElement;\n if (!active?.classList?.contains(\"fs-dropdown-item\")) return;\n\n const menu = active.closest(\".fs-dropdown-menu\");\n const items = levelItems(menu);\n const index = items.indexOf(active);\n const parentWrapper = menu.parentElement;\n const inSubmenu = parentWrapper?.classList.contains(\"fs-dropdown-submenu\");\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n items[(index + 1) % items.length]?.focus();\n break;\n case \"ArrowUp\":\n event.preventDefault();\n items[(index - 1 + items.length) % items.length]?.focus();\n break;\n case \"ArrowRight\":\n if (isSubmenuParent(active)) {\n event.preventDefault();\n this._openSubmenu(active, true);\n }\n break;\n case \"ArrowLeft\":\n if (inSubmenu) {\n event.preventDefault();\n const parentItem = parentWrapper.querySelector(\":scope > .fs-dropdown-item\");\n this._closeSubmenu(parentItem);\n parentItem.focus();\n }\n break;\n case \"Enter\":\n case \" \":\n if (isSubmenuParent(active)) {\n event.preventDefault();\n if (this._submenuOf(active)?.classList.contains(\"is-open\")) {\n this._closeSubmenu(active);\n } else {\n this._openSubmenu(active, true);\n }\n }\n break;\n case \"Escape\":\n if (inSubmenu) {\n event.preventDefault();\n event.stopPropagation();\n const parentItem = parentWrapper.querySelector(\":scope > .fs-dropdown-item\");\n this._closeSubmenu(parentItem);\n parentItem.focus();\n } else {\n event.preventDefault();\n this.hide();\n this.toggleEl.focus();\n }\n break;\n default:\n break;\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.toggleEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.rootMenu.setAttribute(\"data-theme\", theme);\n } else {\n this.rootMenu.removeAttribute(\"data-theme\");\n }\n\n this.rootMenu.classList.add(\"is-open\");\n\n const position = computePosition(this.toggleEl, this.rootMenu, {\n placement: this.placement,\n align: this.align,\n offset: 4,\n });\n applyPosition(this.rootMenu, position);\n\n this.toggleEl.setAttribute(\"aria-expanded\", \"true\");\n levelItems(this.rootMenu)[0]?.focus();\n\n this._outsideClickCleanup = onClickOutside(this.rootMenu, (event) => {\n if (this.toggleEl.contains(event.target)) return;\n this.hide();\n });\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:nested-menu:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this._closeAllSubmenus();\n this.rootMenu.classList.remove(\"is-open\");\n this.rootMenu.style.removeProperty(\"position\");\n this.rootMenu.style.removeProperty(\"top\");\n this.rootMenu.style.removeProperty(\"left\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:nested-menu:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.toggleEl.removeEventListener(\"click\", this._handleToggleClick);\n this.rootMenu.removeEventListener(\"click\", this._handleMenuClick);\n this.rootMenu.removeEventListener(\"keydown\", this._handleMenuKeydown);\n this.rootMenu.removeEventListener(\"mouseover\", this._handleMenuMouseover);\n instances.delete(this.toggleEl);\n }\n}\n\nautoInit(\"nested-menu\", NestedMenu);\n", "import { computePosition, applyPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction uniqueId(prefix) {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nexport class Combobox {\n constructor(inputEl, options = {}) {\n const targetSelector = inputEl.getAttribute(\"data-fs-target\");\n const listboxEl = targetSelector ? document.querySelector(targetSelector) : inputEl.nextElementSibling;\n\n if (!listboxEl) {\n throw new Error(\"FokusStyles.Combobox: listbox n\u00E3o encontrada (data-fs-target).\");\n }\n\n this.inputEl = inputEl;\n this.listboxEl = listboxEl;\n this.placement = options.placement ?? inputEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.isOpen = false;\n this.activeIndex = -1;\n this.value = null;\n this._outsideClickCleanup = null;\n\n if (!this.listboxEl.id) this.listboxEl.id = uniqueId(\"fs-combobox-listbox\");\n\n document.body.appendChild(this.listboxEl);\n\n this.inputEl.setAttribute(\"role\", \"combobox\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n this.inputEl.setAttribute(\"aria-autocomplete\", \"list\");\n this.inputEl.setAttribute(\"aria-controls\", this.listboxEl.id);\n this.inputEl.setAttribute(\"autocomplete\", \"off\");\n this.listboxEl.setAttribute(\"role\", \"listbox\");\n\n this._getOptions().forEach((option) => {\n if (!option.id) option.id = uniqueId(\"fs-combobox-option\");\n option.setAttribute(\"role\", \"option\");\n option.setAttribute(\"aria-selected\", \"false\");\n });\n\n this._handleInput = this._handleInput.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleOptionMousedown = this._handleOptionMousedown.bind(this);\n this._handleOptionClick = this._handleOptionClick.bind(this);\n\n this.inputEl.addEventListener(\"input\", this._handleInput);\n this.inputEl.addEventListener(\"keydown\", this._handleKeydown);\n this.listboxEl.addEventListener(\"mousedown\", this._handleOptionMousedown);\n this.listboxEl.addEventListener(\"click\", this._handleOptionClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) this.hide();\n });\n\n instances.set(inputEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _getOptions() {\n return Array.from(this.listboxEl.querySelectorAll(\".fs-dropdown-item\"));\n }\n\n _getSelectableOptions() {\n return this._getOptions().filter(\n (option) => !option.hidden && !option.hasAttribute(\"data-fs-empty\") && !option.classList.contains(\"is-disabled\"),\n );\n }\n\n _filter(query) {\n const normalized = query.trim().toLowerCase();\n\n this._getOptions().forEach((option) => {\n if (option.hasAttribute(\"data-fs-empty\")) return;\n option.hidden = normalized.length > 0 && !option.textContent.toLowerCase().includes(normalized);\n });\n\n const emptyEl = this.listboxEl.querySelector(\"[data-fs-empty]\");\n if (emptyEl) emptyEl.hidden = this._getSelectableOptions().length > 0;\n }\n\n _setActiveIndex(index) {\n const options = this._getSelectableOptions();\n if (options.length === 0) {\n this.activeIndex = -1;\n this.inputEl.removeAttribute(\"aria-activedescendant\");\n return;\n }\n\n const previous = options[this.activeIndex];\n previous?.classList.remove(\"is-active\");\n\n this.activeIndex = ((index % options.length) + options.length) % options.length;\n const current = options[this.activeIndex];\n current.classList.add(\"is-active\");\n current.scrollIntoView({ block: \"nearest\" });\n this.inputEl.setAttribute(\"aria-activedescendant\", current.id);\n }\n\n _selectOption(option) {\n const label = option.textContent.trim();\n this.value = option.getAttribute(\"data-value\") ?? label;\n this.inputEl.value = label;\n\n this._getOptions().forEach((item) => item.setAttribute(\"aria-selected\", String(item === option)));\n\n this.hide();\n this.inputEl.focus();\n\n this.inputEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n this.inputEl.dispatchEvent(\n new CustomEvent(\"fs:combobox:changed\", { bubbles: true, detail: { value: this.value, label } }),\n );\n }\n\n _handleInput() {\n this._filter(this.inputEl.value);\n this.show();\n this._setActiveIndex(-1);\n }\n\n _handleKeydown(event) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (!this.isOpen) {\n this.show();\n } else {\n this._setActiveIndex(this.activeIndex + 1);\n }\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!this.isOpen) {\n this.show();\n } else {\n this._setActiveIndex(this.activeIndex - 1);\n }\n } else if (event.key === \"Home\" && this.isOpen) {\n event.preventDefault();\n this._setActiveIndex(0);\n } else if (event.key === \"End\" && this.isOpen) {\n event.preventDefault();\n this._setActiveIndex(this._getSelectableOptions().length - 1);\n } else if (event.key === \"Enter\") {\n if (this.isOpen && this.activeIndex >= 0) {\n event.preventDefault();\n this._selectOption(this._getSelectableOptions()[this.activeIndex]);\n }\n }\n }\n\n _handleOptionMousedown(event) {\n // Impede que o input perca foco antes do `click` do item ser processado\n // (perder foco fecharia a listbox via `onClickOutside` antes da sele\u00E7\u00E3o).\n if (event.target.closest(\".fs-dropdown-item\")) event.preventDefault();\n }\n\n _handleOptionClick(event) {\n const option = event.target.closest(\".fs-dropdown-item:not(.is-disabled)\");\n if (!option || option.hasAttribute(\"data-fs-empty\")) return;\n\n this._selectOption(option);\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.inputEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.listboxEl.setAttribute(\"data-theme\", theme);\n } else {\n this.listboxEl.removeAttribute(\"data-theme\");\n }\n\n this.listboxEl.classList.add(\"is-open\");\n this.listboxEl.style.width = `${this.inputEl.offsetWidth}px`;\n\n const position = computePosition(this.inputEl, this.listboxEl, {\n placement: this.placement,\n align: \"start\",\n offset: 4,\n });\n applyPosition(this.listboxEl, position);\n\n this.inputEl.setAttribute(\"aria-expanded\", \"true\");\n\n this._outsideClickCleanup = onClickOutside(this.listboxEl, (event) => {\n if (this.inputEl.contains(event.target)) return;\n this.hide();\n });\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:combobox:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this._getSelectableOptions()[this.activeIndex]?.classList.remove(\"is-active\");\n this.activeIndex = -1;\n this.inputEl.removeAttribute(\"aria-activedescendant\");\n\n this.listboxEl.classList.remove(\"is-open\");\n this.listboxEl.style.removeProperty(\"position\");\n this.listboxEl.style.removeProperty(\"top\");\n this.listboxEl.style.removeProperty(\"left\");\n this.listboxEl.style.removeProperty(\"width\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:combobox:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.inputEl.removeEventListener(\"input\", this._handleInput);\n this.inputEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.listboxEl.removeEventListener(\"mousedown\", this._handleOptionMousedown);\n this.listboxEl.removeEventListener(\"click\", this._handleOptionClick);\n instances.delete(this.inputEl);\n }\n}\n\nautoInit(\"combobox\", Combobox);\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nconst WEEKDAY_FORMATTER = new Intl.DateTimeFormat(\"pt-BR\", { weekday: \"narrow\" });\nconst HEADER_FORMATTER = new Intl.DateTimeFormat(\"pt-BR\", { month: \"long\", year: \"numeric\" });\n\nlet idCounter = 0;\n\nfunction uniqueId(prefix) {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nfunction pad(value) {\n return String(value).padStart(2, \"0\");\n}\n\nfunction toISO(date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nfunction toDisplay(date) {\n return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${date.getFullYear()}`;\n}\n\nfunction parseDisplay(value) {\n const match = value.trim().match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (!match) return null;\n\n const [, day, month, year] = match;\n const date = new Date(Number(year), Number(month) - 1, Number(day));\n if (Number.isNaN(date.getTime())) return null;\n return date.getFullYear() === Number(year) && date.getMonth() === Number(month) - 1 && date.getDate() === Number(day)\n ? date\n : null;\n}\n\nfunction isSameDay(a, b) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\nfunction buildMonthCells(viewDate) {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstWeekday = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n const cells = [];\n\n for (let i = firstWeekday - 1; i >= 0; i -= 1) {\n const day = daysInPrevMonth - i;\n const prevMonth = month === 0 ? 11 : month - 1;\n cells.push({ year: month === 0 ? year - 1 : year, month: prevMonth, day, outside: true });\n }\n\n for (let day = 1; day <= daysInMonth; day += 1) {\n cells.push({ year, month, day, outside: false });\n }\n\n let nextDay = 1;\n while (cells.length % 7 !== 0) {\n const nextMonth = month === 11 ? 0 : month + 1;\n cells.push({ year: month === 11 ? year + 1 : year, month: nextMonth, day: nextDay, outside: true });\n nextDay += 1;\n }\n\n return cells;\n}\n\nexport class Datepicker {\n constructor(inputEl, options = {}) {\n const targetSelector = inputEl.getAttribute(\"data-fs-target\");\n const panelEl = targetSelector ? document.querySelector(targetSelector) : inputEl.nextElementSibling;\n\n if (!panelEl) {\n throw new Error(\"FokusStyles.Datepicker: painel n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.inputEl = inputEl;\n this.panelEl = panelEl;\n this.placement = options.placement ?? inputEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.isOpen = false;\n this._suppressNextFocus = false;\n\n const initial = parseDisplay(inputEl.value);\n this.selectedDate = initial;\n this.viewDate = initial ? new Date(initial) : new Date();\n this.value = initial ? toISO(initial) : null;\n this._outsideClickCleanup = null;\n this._positionCleanup = null;\n this._originalParent = panelEl.parentNode;\n this._originalNextSibling = panelEl.nextSibling;\n\n if (!this.panelEl.id) this.panelEl.id = uniqueId(\"fs-datepicker-panel\");\n\n document.body.appendChild(this.panelEl);\n\n // `role=\"combobox\"` \u00E9 obrigat\u00F3rio aqui: `aria-expanded` n\u00E3o \u00E9 permitido\n // no role impl\u00EDcito de `<input type=\"text\">` (\"textbox\"), s\u00F3 em roles\n // como combobox/button \u2014 sem isso o axe reprova (aria-allowed-attr).\n this.inputEl.setAttribute(\"role\", \"combobox\");\n this.inputEl.setAttribute(\"aria-haspopup\", \"grid\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n this.inputEl.setAttribute(\"aria-controls\", this.panelEl.id);\n this.inputEl.setAttribute(\"autocomplete\", \"off\");\n\n this.panelEl.classList.add(\"fs-datepicker-panel\");\n this.panelEl.innerHTML =\n '<div class=\"fs-datepicker-header\">' +\n '<button type=\"button\" class=\"fs-datepicker-nav\" data-fs-datepicker-prev aria-label=\"M\u00EAs anterior\">\u2039</button>' +\n '<span class=\"fs-datepicker-title\" aria-live=\"polite\"></span>' +\n '<button type=\"button\" class=\"fs-datepicker-nav\" data-fs-datepicker-next aria-label=\"Pr\u00F3ximo m\u00EAs\">\u203A</button>' +\n \"</div>\" +\n '<div class=\"fs-datepicker-grid\" role=\"grid\"></div>';\n\n this.titleEl = this.panelEl.querySelector(\".fs-datepicker-title\");\n this.gridEl = this.panelEl.querySelector(\".fs-datepicker-grid\");\n this.prevBtn = this.panelEl.querySelector(\"[data-fs-datepicker-prev]\");\n this.nextBtn = this.panelEl.querySelector(\"[data-fs-datepicker-next]\");\n\n this._handleInputFocus = this._handleInputFocus.bind(this);\n this._handleInputKeydown = this._handleInputKeydown.bind(this);\n this._handleInputChange = this._handleInputChange.bind(this);\n this._handlePrev = this._handlePrev.bind(this);\n this._handleNext = this._handleNext.bind(this);\n this._handleGridClick = this._handleGridClick.bind(this);\n this._handleGridKeydown = this._handleGridKeydown.bind(this);\n\n this.inputEl.addEventListener(\"focus\", this._handleInputFocus);\n this.inputEl.addEventListener(\"keydown\", this._handleInputKeydown);\n this.inputEl.addEventListener(\"change\", this._handleInputChange);\n this.prevBtn.addEventListener(\"click\", this._handlePrev);\n this.nextBtn.addEventListener(\"click\", this._handleNext);\n this.gridEl.addEventListener(\"click\", this._handleGridClick);\n this.gridEl.addEventListener(\"keydown\", this._handleGridKeydown);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.hide();\n this._refocusInputWithoutReopening();\n }\n });\n\n instances.set(inputEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleInputFocus() {\n // Depois de selecionar uma data ou fechar com Escape, devolvemos o foco\n // pro input programaticamente \u2014 sem essa guarda, o pr\u00F3prio `.focus()`\n // disparia este handler de novo e reabriria o painel na hora.\n if (this._suppressNextFocus) {\n this._suppressNextFocus = false;\n return;\n }\n\n this.show();\n }\n\n _refocusInputWithoutReopening() {\n this._suppressNextFocus = true;\n this.inputEl.focus();\n }\n\n // O foco fica no input ao abrir (ver `_handleInputFocus`) \u2014 sem este\n // handler, `ArrowDown`/`ArrowUp` n\u00E3o teriam efeito nenhum, porque o\n // keydown do grid (`_handleGridKeydown`) s\u00F3 reage quando o foco real j\u00E1\n // est\u00E1 num bot\u00E3o de dia. `ArrowDown` move o foco pro dia \"tab\u00E1vel\";\n // depois disso, o keydown do pr\u00F3prio grid assume a navega\u00E7\u00E3o.\n _handleInputKeydown(event) {\n if (event.key !== \"ArrowDown\" && event.key !== \"ArrowUp\") return;\n\n event.preventDefault();\n if (!this.isOpen) this.show();\n this._focusTabbable();\n }\n\n _handleInputChange() {\n const parsed = parseDisplay(this.inputEl.value);\n if (!parsed) return;\n\n this.selectedDate = parsed;\n this.viewDate = new Date(parsed);\n this.value = toISO(parsed);\n if (this.isOpen) this._render();\n }\n\n _handlePrev(event) {\n event.preventDefault();\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() - 1, 1);\n this._render();\n }\n\n _handleNext(event) {\n event.preventDefault();\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() + 1, 1);\n this._render();\n }\n\n _handleGridClick(event) {\n const day = event.target.closest(\".fs-datepicker-day:not(:disabled)\");\n if (!day) return;\n\n this._selectDate(new Date(Number(day.dataset.year), Number(day.dataset.month), Number(day.dataset.day)));\n }\n\n _handleGridKeydown(event) {\n const current = event.target.closest(\".fs-datepicker-day\");\n if (!current) return;\n\n const currentDate = new Date(Number(current.dataset.year), Number(current.dataset.month), Number(current.dataset.day));\n let nextDate = null;\n\n switch (event.key) {\n case \"ArrowRight\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n case \"ArrowLeft\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() - 1);\n break;\n case \"ArrowDown\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case \"ArrowUp\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() - 7);\n break;\n case \"Home\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() - nextDate.getDay());\n break;\n case \"End\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() + (6 - nextDate.getDay()));\n break;\n case \"PageUp\":\n nextDate = event.shiftKey\n ? new Date(currentDate.getFullYear() - 1, currentDate.getMonth(), currentDate.getDate())\n : new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, currentDate.getDate());\n break;\n case \"PageDown\":\n nextDate = event.shiftKey\n ? new Date(currentDate.getFullYear() + 1, currentDate.getMonth(), currentDate.getDate())\n : new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, currentDate.getDate());\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n this._selectDate(currentDate);\n return;\n default:\n return;\n }\n\n event.preventDefault();\n this._moveTo(nextDate);\n }\n\n _moveTo(date) {\n const sameMonth = date.getFullYear() === this.viewDate.getFullYear() && date.getMonth() === this.viewDate.getMonth();\n if (!sameMonth) this.viewDate = new Date(date.getFullYear(), date.getMonth(), 1);\n\n this._render(date);\n this._focusTabbable();\n }\n\n _selectDate(date) {\n this.selectedDate = date;\n this.viewDate = new Date(date);\n this.value = toISO(date);\n this.inputEl.value = toDisplay(date);\n\n this.hide();\n this._refocusInputWithoutReopening();\n\n this.inputEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n this.inputEl.dispatchEvent(\n new CustomEvent(\"fs:datepicker:changed\", { bubbles: true, detail: { value: this.value, date: new Date(date) } }),\n );\n }\n\n _focusTabbable() {\n this.gridEl.querySelector('.fs-datepicker-day[tabindex=\"0\"]')?.focus();\n }\n\n _render(preferredDate) {\n this.titleEl.textContent = HEADER_FORMATTER.format(this.viewDate);\n\n const cells = buildMonthCells(this.viewDate);\n const today = new Date();\n const focusTarget = preferredDate ?? this.selectedDate ?? today;\n\n let tabbable = cells.find((cell) => !cell.outside && isSameDay(new Date(cell.year, cell.month, cell.day), focusTarget));\n if (!tabbable) tabbable = cells.find((cell) => !cell.outside) ?? cells[0];\n\n const weekdaysHtml = Array.from({ length: 7 }, (_, i) => {\n const base = new Date(2024, 0, 7 + i); // 2024-01-07 \u00E9 um domingo \u2014 s\u00F3 uma refer\u00EAncia pra formatar os r\u00F3tulos.\n return `<div class=\"fs-datepicker-weekday\" role=\"columnheader\">${WEEKDAY_FORMATTER.format(base)}</div>`;\n }).join(\"\");\n\n const rows = [];\n for (let i = 0; i < cells.length; i += 7) rows.push(cells.slice(i, i + 7));\n\n const weeksHtml = rows\n .map((row) => {\n const rowHtml = row\n .map((cell) => {\n const cellDate = new Date(cell.year, cell.month, cell.day);\n const isSelected = this.selectedDate ? isSameDay(cellDate, this.selectedDate) : false;\n const isToday = isSameDay(cellDate, today);\n const isTabbable = cell === tabbable;\n const classes = [\"fs-datepicker-day\"];\n if (cell.outside) classes.push(\"is-outside\");\n if (isToday) classes.push(\"is-today\");\n if (isSelected) classes.push(\"is-selected\");\n\n return (\n `<button type=\"button\" class=\"${classes.join(\" \")}\" role=\"gridcell\" ` +\n `tabindex=\"${isTabbable ? \"0\" : \"-1\"}\" aria-selected=\"${isSelected}\" ` +\n `data-year=\"${cell.year}\" data-month=\"${cell.month}\" data-day=\"${cell.day}\">${cell.day}</button>`\n );\n })\n .join(\"\");\n\n return `<div class=\"fs-datepicker-week\" role=\"row\">${rowHtml}</div>`;\n })\n .join(\"\");\n\n this.gridEl.innerHTML = `<div class=\"fs-datepicker-weekdays\" role=\"row\">${weekdaysHtml}</div>${weeksHtml}`;\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.inputEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.panelEl.setAttribute(\"data-theme\", theme);\n } else {\n this.panelEl.removeAttribute(\"data-theme\");\n }\n\n this.panelEl.classList.add(\"is-open\");\n\n const position = computePosition(this.inputEl, this.panelEl, {\n placement: this.placement,\n align: \"start\",\n offset: 4,\n });\n applyPosition(this.panelEl, position);\n this._positionCleanup = watchPosition(this.inputEl, this.panelEl, {\n placement: this.placement,\n align: \"start\",\n offset: 4,\n });\n\n this.inputEl.setAttribute(\"aria-expanded\", \"true\");\n\n this._render(this.selectedDate ?? new Date());\n\n this._outsideClickCleanup = onClickOutside(this.panelEl, (event) => {\n if (this.inputEl.contains(event.target)) return;\n this.hide();\n });\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:datepicker:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.panelEl.classList.remove(\"is-open\");\n this.panelEl.style.removeProperty(\"position\");\n this.panelEl.style.removeProperty(\"top\");\n this.panelEl.style.removeProperty(\"left\");\n this._positionCleanup?.();\n this._positionCleanup = null;\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:datepicker:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.inputEl.removeEventListener(\"focus\", this._handleInputFocus);\n this.inputEl.removeEventListener(\"keydown\", this._handleInputKeydown);\n this.inputEl.removeEventListener(\"change\", this._handleInputChange);\n this.prevBtn.removeEventListener(\"click\", this._handlePrev);\n this.nextBtn.removeEventListener(\"click\", this._handleNext);\n this.gridEl.removeEventListener(\"click\", this._handleGridClick);\n this.gridEl.removeEventListener(\"keydown\", this._handleGridKeydown);\n if (this._originalParent) {\n this._originalParent.insertBefore(this.panelEl, this._originalNextSibling);\n }\n instances.delete(this.inputEl);\n }\n}\n\nautoInit(\"datepicker\", Datepicker);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Quantos n\u00FAmeros de p\u00E1gina exibir ao redor da atual (fora prev/next).\nconst PAGE_WINDOW = 5;\n\n// \u00CDcones de anterior/pr\u00F3xima (Lucide chevron-left/chevron-right), embutidos\n// como string em vez de importados de `fokus-styles/icons` \u2014 esse subpath \u00E9\n// opcional, e o m\u00F3dulo JavaScript n\u00E3o pode depender dele em runtime.\n// `aria-hidden` porque o r\u00F3tulo acess\u00EDvel real j\u00E1 vem do `aria-label` do\n// bot\u00E3o (ver `_pageItem`).\nconst ICON_CHEVRON_LEFT =\n '<svg class=\"fs-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"/></svg>';\nconst ICON_CHEVRON_RIGHT =\n '<svg class=\"fs-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\"/></svg>';\n\nfunction compareValues(a, b) {\n const numA = Number(a);\n const numB = Number(b);\n if (a !== \"\" && b !== \"\" && !Number.isNaN(numA) && !Number.isNaN(numB)) {\n return numA - numB;\n }\n return a.localeCompare(b, \"pt-BR\", { sensitivity: \"base\" });\n}\n\nfunction compareTypedValues(a, b, type) {\n if (type === \"date\") {\n return new Date(a).getTime() - new Date(b).getTime();\n }\n if (type === \"number\" || type === \"currency\") {\n const normalize = (value) => Number(String(value).replace(/[^\\d,-]/g, \"\").replace(/\\./g, \"\").replace(\",\", \".\"));\n return normalize(a) - normalize(b);\n }\n return compareValues(a, b);\n}\n\nexport class DataTable {\n constructor(rootEl, options = {}) {\n const tableEl = rootEl.querySelector(\".fs-table\");\n if (!tableEl) {\n throw new Error(\"FokusStyles.DataTable: tabela n\u00E3o encontrada (.fs-table).\");\n }\n\n const tbodyEl = tableEl.querySelector(\"tbody\");\n if (!tbodyEl) {\n throw new Error(\"FokusStyles.DataTable: <tbody> n\u00E3o encontrado.\");\n }\n\n this.rootEl = rootEl;\n this.tableEl = tableEl;\n this.theadEl = tableEl.querySelector(\"thead\");\n this.tbodyEl = tbodyEl;\n this.pageSize = Number(rootEl.getAttribute(\"data-fs-page-size\")) || options.pageSize || 10;\n\n this.filterInput = rootEl.querySelector(\"[data-fs-datatable-filter]\");\n this.emptyEl = rootEl.querySelector(\"[data-fs-datatable-empty]\");\n this.loadingEl = rootEl.querySelector(\"[data-fs-datatable-loading]\");\n this.errorEl = rootEl.querySelector(\"[data-fs-datatable-error]\");\n\n this.paginationEl = rootEl.querySelector(\"[data-fs-datatable-pagination]\");\n if (!this.paginationEl) {\n this.paginationEl = document.createElement(\"nav\");\n this.paginationEl.setAttribute(\"data-fs-datatable-pagination\", \"\");\n this.paginationEl.setAttribute(\"aria-label\", \"Pagina\u00E7\u00E3o da tabela\");\n rootEl.appendChild(this.paginationEl);\n }\n\n this.sortKey = null;\n this.sortDirection = \"none\";\n this.filterQuery = \"\";\n this.currentPage = 1;\n this._loading = false;\n this._error = null;\n this._rows = [];\n this._sortButtons = [];\n\n this._buildSortHeaders();\n this._readRows();\n\n this._handleSortClick = this._handleSortClick.bind(this);\n this._handleFilterInput = this._handleFilterInput.bind(this);\n this._handlePaginationClick = this._handlePaginationClick.bind(this);\n this._handleCellKeydown = this._handleCellKeydown.bind(this);\n this._handleCellFocusIn = this._handleCellFocusIn.bind(this);\n\n if (this.theadEl) this.theadEl.addEventListener(\"click\", this._handleSortClick);\n if (this.filterInput) this.filterInput.addEventListener(\"input\", this._handleFilterInput);\n this.paginationEl.addEventListener(\"click\", this._handlePaginationClick);\n this.tbodyEl.addEventListener(\"keydown\", this._handleCellKeydown);\n this.tbodyEl.addEventListener(\"focusin\", this._handleCellFocusIn);\n\n this._render();\n this.tableEl.setAttribute(\"aria-busy\", \"false\");\n\n instances.set(rootEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n get pageCount() {\n return Math.max(1, Math.ceil(this._matchedRows().length / this.pageSize));\n }\n\n get rowCount() {\n return this._matchedRows().length;\n }\n\n _buildSortHeaders() {\n if (!this.theadEl) return;\n\n this._sortButtons = Array.from(this.theadEl.querySelectorAll(\"th[data-fs-sort]\")).map((th) => {\n const key = th.getAttribute(\"data-fs-sort\");\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = \"fs-datatable-sort-btn\";\n btn.setAttribute(\"data-fs-sort-key\", key);\n while (th.firstChild) btn.appendChild(th.firstChild);\n th.appendChild(btn);\n th.setAttribute(\"aria-sort\", \"none\");\n return { th, key };\n });\n }\n\n _readRows() {\n this._rows = Array.from(this.tbodyEl.querySelectorAll(\":scope > tr\")).map((el, order) => ({\n el,\n order,\n cells: Array.from(el.children).map((cell) => (cell.getAttribute(\"data-fs-sort-value\") ?? cell.textContent).trim()),\n }));\n }\n\n refresh() {\n this._readRows();\n this.currentPage = 1;\n this._render();\n }\n\n _matchedRows() {\n let rows = this._rows;\n\n if (this.filterQuery) {\n const query = this.filterQuery.toLowerCase();\n rows = rows.filter((row) => row.cells.some((cell) => cell.toLowerCase().includes(query)));\n }\n\n if (this.sortKey && this.sortDirection !== \"none\") {\n const th = this._sortButtons.find((entry) => entry.key === this.sortKey)?.th;\n const columnIndex = th ? Array.from(this.theadEl.querySelectorAll(\"th\")).indexOf(th) : -1;\n const type = th?.getAttribute(\"data-fs-sort-type\") ?? \"text\";\n\n if (columnIndex >= 0) {\n const direction = this.sortDirection === \"asc\" ? 1 : -1;\n rows = [...rows].sort((a, b) => direction * compareTypedValues(a.cells[columnIndex] ?? \"\", b.cells[columnIndex] ?? \"\", type));\n }\n } else {\n rows = [...rows].sort((a, b) => a.order - b.order);\n }\n\n return rows;\n }\n\n _nextDirection(key) {\n if (this.sortKey !== key) return \"asc\";\n if (this.sortDirection === \"asc\") return \"desc\";\n if (this.sortDirection === \"desc\") return \"none\";\n return \"asc\";\n }\n\n sort(key, direction = \"asc\") {\n this.sortKey = direction === \"none\" ? null : key;\n this.sortDirection = direction;\n this.currentPage = 1;\n this._render();\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:datatable:sorted\", { bubbles: true, detail: { key: this.sortKey, direction: this.sortDirection } }),\n );\n }\n\n filter(query) {\n this.filterQuery = (query ?? \"\").trim();\n if (this.filterInput) this.filterInput.value = this.filterQuery;\n this.currentPage = 1;\n this._render();\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:datatable:filtered\", { bubbles: true, detail: { query: this.filterQuery, matched: this.rowCount } }),\n );\n }\n\n goToPage(page) {\n const pageCount = this.pageCount;\n const next = Math.min(Math.max(1, page), pageCount);\n if (next === this.currentPage) return;\n\n this.currentPage = next;\n this._render();\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:datatable:paged\", { bubbles: true, detail: { page: this.currentPage, pageCount } }));\n }\n\n setLoading(isLoading) {\n this._loading = Boolean(isLoading);\n this.tableEl.setAttribute(\"aria-busy\", String(this._loading));\n if (this._loading) this._error = null;\n this._syncVisibility();\n }\n\n setError(message) {\n this._error = message || null;\n if (this._error) this._loading = false;\n this.tableEl.setAttribute(\"aria-busy\", String(this._loading));\n if (this.errorEl) {\n const messageEl = this.errorEl.querySelector(\"[data-fs-datatable-error-message]\");\n if (messageEl) messageEl.textContent = this._error ?? \"\";\n }\n this._syncVisibility();\n }\n\n _syncVisibility() {\n const showLoading = this._loading;\n const showError = !this._loading && Boolean(this._error);\n const showTable = !showLoading && !showError;\n\n this.tableEl.hidden = !showTable;\n if (this.filterInput) this.filterInput.disabled = !showTable;\n if (this.loadingEl) this.loadingEl.hidden = !showLoading;\n if (this.errorEl) this.errorEl.hidden = !showError;\n\n if (!showTable) {\n this.paginationEl.hidden = true;\n if (this.emptyEl) this.emptyEl.hidden = true;\n } else {\n this._render();\n }\n }\n\n _render() {\n if (this._loading || this._error) return;\n\n const matched = this._matchedRows();\n const pageCount = Math.max(1, Math.ceil(matched.length / this.pageSize));\n this.currentPage = Math.min(Math.max(1, this.currentPage), pageCount);\n\n const start = (this.currentPage - 1) * this.pageSize;\n const pageRows = matched.slice(start, start + this.pageSize);\n\n // Reordena o DOM na ordem final (filtro + ordena\u00E7\u00E3o + p\u00E1gina) movendo os\n // <tr> existentes em vez de recri\u00E1-los \u2014 preserva listeners/estado de\n // cada linha. As demais linhas (fora da p\u00E1gina ou filtradas) s\u00F3 ficam\n // ocultas, sem sair da \u00E1rvore.\n pageRows.forEach((row) => this.tbodyEl.appendChild(row.el));\n this._rows.forEach((row) => {\n row.el.hidden = !pageRows.includes(row);\n });\n\n const isEmpty = matched.length === 0;\n this.tableEl.hidden = isEmpty && Boolean(this.emptyEl);\n if (this.emptyEl) this.emptyEl.hidden = !isEmpty;\n\n this._renderPagination(pageCount);\n this._syncAriaSort();\n this._resetRovingTabindex();\n }\n\n _syncAriaSort() {\n this._sortButtons.forEach(({ th, key }) => {\n const direction = key === this.sortKey ? this.sortDirection : \"none\";\n th.setAttribute(\"aria-sort\", direction === \"asc\" ? \"ascending\" : direction === \"desc\" ? \"descending\" : \"none\");\n });\n }\n\n _renderPagination(pageCount) {\n this.paginationEl.hidden = pageCount <= 1;\n if (pageCount <= 1) {\n this.paginationEl.innerHTML = \"\";\n return;\n }\n\n const end = Math.min(pageCount, Math.max(PAGE_WINDOW, this.currentPage + Math.floor(PAGE_WINDOW / 2)));\n const start = Math.max(1, end - PAGE_WINDOW + 1);\n\n const items = [this._pageItem(ICON_CHEVRON_LEFT, this.currentPage - 1, this.currentPage === 1, \"P\u00E1gina anterior\")];\n for (let page = start; page <= end; page += 1) {\n items.push(this._pageItem(String(page), page, false, `P\u00E1gina ${page}`, page === this.currentPage));\n }\n items.push(this._pageItem(ICON_CHEVRON_RIGHT, this.currentPage + 1, this.currentPage === pageCount, \"Pr\u00F3xima p\u00E1gina\"));\n\n this.paginationEl.innerHTML = `<ul class=\"fs-pagination\">${items.join(\"\")}</ul>`;\n }\n\n _pageItem(label, page, disabled, ariaLabel, isActive = false) {\n const classes = [\"fs-page-item\"];\n if (disabled) classes.push(\"is-disabled\");\n if (isActive) classes.push(\"is-active\");\n\n return (\n `<li class=\"${classes.join(\" \")}\"><button type=\"button\" class=\"fs-page-link\" data-fs-page=\"${page}\" ` +\n `aria-label=\"${ariaLabel}\"${isActive ? ' aria-current=\"page\"' : \"\"}${disabled ? \" disabled\" : \"\"}>${label}</button></li>`\n );\n }\n\n _handleSortClick(event) {\n const btn = event.target.closest(\"[data-fs-sort-key]\");\n if (!btn) return;\n\n const key = btn.dataset.fsSortKey;\n this.sort(key, this._nextDirection(key));\n }\n\n _handleFilterInput() {\n this.filter(this.filterInput.value);\n }\n\n _handlePaginationClick(event) {\n const btn = event.target.closest(\"[data-fs-page]\");\n if (!btn || btn.disabled) return;\n\n this.goToPage(Number(btn.dataset.fsPage));\n }\n\n _visibleCells() {\n return Array.from(this.tbodyEl.querySelectorAll(\"tr:not([hidden]) > td, tr:not([hidden]) > th\"));\n }\n\n _resetRovingTabindex() {\n this._visibleCells().forEach((cell, index) => cell.setAttribute(\"tabindex\", index === 0 ? \"0\" : \"-1\"));\n }\n\n _handleCellFocusIn(event) {\n const cell = event.target.closest(\"td, th\");\n if (!cell || cell.parentElement.hidden) return;\n\n this._visibleCells().forEach((c) => c.setAttribute(\"tabindex\", c === cell ? \"0\" : \"-1\"));\n }\n\n _handleCellKeydown(event) {\n const cell = event.target.closest(\"td, th\");\n if (!cell) return;\n\n const rows = Array.from(this.tbodyEl.querySelectorAll(\"tr:not([hidden])\"));\n const rowIndex = rows.indexOf(cell.parentElement);\n if (rowIndex === -1) return;\n\n const cellsInRow = Array.from(cell.parentElement.children);\n const colIndex = cellsInRow.indexOf(cell);\n const lastRow = rows[rows.length - 1];\n\n let target = null;\n switch (event.key) {\n case \"ArrowRight\":\n target = cellsInRow[colIndex + 1];\n break;\n case \"ArrowLeft\":\n target = cellsInRow[colIndex - 1];\n break;\n case \"ArrowDown\":\n target = rows[rowIndex + 1]?.children[colIndex];\n break;\n case \"ArrowUp\":\n target = rows[rowIndex - 1]?.children[colIndex];\n break;\n case \"Home\":\n target = event.ctrlKey ? rows[0]?.children[0] : cellsInRow[0];\n break;\n case \"End\":\n target = event.ctrlKey ? lastRow?.children[lastRow.children.length - 1] : cellsInRow[cellsInRow.length - 1];\n break;\n default:\n return;\n }\n\n if (!target) return;\n event.preventDefault();\n target.focus();\n }\n\n dispose() {\n if (this.theadEl) this.theadEl.removeEventListener(\"click\", this._handleSortClick);\n if (this.filterInput) this.filterInput.removeEventListener(\"input\", this._handleFilterInput);\n this.paginationEl.removeEventListener(\"click\", this._handlePaginationClick);\n this.tbodyEl.removeEventListener(\"keydown\", this._handleCellKeydown);\n this.tbodyEl.removeEventListener(\"focusin\", this._handleCellFocusIn);\n instances.delete(this.rootEl);\n }\n}\n\nautoInit(\"datatable\", DataTable);\n", "import { lockScroll, unlockScroll, onClickOutside } from \"./core/overlay.js\";\nimport { createFocusTrap, onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction uniqueId(prefix) {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nfunction parseShortcut(spec) {\n const parts = spec.toLowerCase().split(\"+\").map((part) => part.trim());\n return {\n mod: parts.includes(\"mod\"),\n shift: parts.includes(\"shift\"),\n alt: parts.includes(\"alt\"),\n key: parts[parts.length - 1],\n };\n}\n\nfunction matchesShortcut(event, shortcut) {\n const modPressed = event.ctrlKey || event.metaKey;\n return (\n event.key.toLowerCase() === shortcut.key &&\n shortcut.mod === modPressed &&\n shortcut.shift === event.shiftKey &&\n shortcut.alt === event.altKey\n );\n}\n\n// Command Palette: combina o filtro/navega\u00E7\u00E3o do Combobox (`.fs-dropdown-item`\n// reaproveitado da listbox) com o overlay/focus trap do Modal \u2014 mas \u00E9\n// componente pr\u00F3prio (n\u00E3o estende nenhum dos dois) porque a combina\u00E7\u00E3o\n// espec\u00EDfica (di\u00E1logo sempre com listbox vis\u00EDvel + atalho global) n\u00E3o\n// corresponde a nenhum dos dois padr\u00F5es isoladamente.\nexport class CommandPalette {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const paletteEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!paletteEl) {\n throw new Error(\"FokusStyles.CommandPalette: painel n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.paletteEl = paletteEl;\n this.dialogEl = paletteEl.querySelector(\".fs-command-palette-dialog\") ?? paletteEl;\n this.inputEl = paletteEl.querySelector(\".fs-command-palette-input\");\n this.listEl = paletteEl.querySelector(\".fs-command-palette-list\");\n this.isOpen = false;\n this.activeIndex = -1;\n this._focusTrap = null;\n this._outsideClickCleanup = null;\n\n if (!this.listEl.id) this.listEl.id = uniqueId(\"fs-command-palette-listbox\");\n\n paletteEl.setAttribute(\"role\", \"dialog\");\n paletteEl.setAttribute(\"aria-modal\", \"true\");\n\n this.inputEl.setAttribute(\"role\", \"combobox\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n this.inputEl.setAttribute(\"aria-autocomplete\", \"list\");\n this.inputEl.setAttribute(\"aria-controls\", this.listEl.id);\n this.inputEl.setAttribute(\"autocomplete\", \"off\");\n this.listEl.setAttribute(\"role\", \"listbox\");\n\n this._getItems().forEach((item) => {\n if (!item.id) item.id = uniqueId(\"fs-command-palette-option\");\n item.setAttribute(\"role\", \"option\");\n item.setAttribute(\"aria-selected\", \"false\");\n });\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handleInput = this._handleInput.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleItemMousedown = this._handleItemMousedown.bind(this);\n this._handleItemClick = this._handleItemClick.bind(this);\n this._handleGlobalShortcut = this._handleGlobalShortcut.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n this.inputEl.addEventListener(\"input\", this._handleInput);\n this.inputEl.addEventListener(\"keydown\", this._handleKeydown);\n this.listEl.addEventListener(\"mousedown\", this._handleItemMousedown);\n this.listEl.addEventListener(\"click\", this._handleItemClick);\n\n const shortcut = options.shortcut ?? triggerEl.getAttribute(\"data-fs-shortcut\");\n this._shortcut = shortcut ? parseShortcut(shortcut) : null;\n if (this._shortcut) document.addEventListener(\"keydown\", this._handleGlobalShortcut);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) this.hide();\n });\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _getItems() {\n return Array.from(this.listEl.querySelectorAll(\".fs-dropdown-item\"));\n }\n\n _getSelectableItems() {\n return this._getItems().filter((item) => !item.hidden && !item.hasAttribute(\"data-fs-empty\") && !item.classList.contains(\"is-disabled\"));\n }\n\n _filter(query) {\n const normalized = query.trim().toLowerCase();\n\n this._getItems().forEach((item) => {\n if (item.hasAttribute(\"data-fs-empty\")) return;\n item.hidden = normalized.length > 0 && !item.textContent.toLowerCase().includes(normalized);\n });\n\n const emptyEl = this.listEl.querySelector(\"[data-fs-empty]\");\n if (emptyEl) emptyEl.hidden = this._getSelectableItems().length > 0;\n }\n\n _setActiveIndex(index) {\n const items = this._getSelectableItems();\n if (items.length === 0) {\n this.activeIndex = -1;\n this.inputEl.removeAttribute(\"aria-activedescendant\");\n return;\n }\n\n const previous = items[this.activeIndex];\n previous?.classList.remove(\"is-active\");\n\n this.activeIndex = ((index % items.length) + items.length) % items.length;\n const current = items[this.activeIndex];\n current.classList.add(\"is-active\");\n current.scrollIntoView({ block: \"nearest\" });\n this.inputEl.setAttribute(\"aria-activedescendant\", current.id);\n }\n\n _selectItem(item) {\n const label = item.textContent.trim();\n const value = item.getAttribute(\"data-value\") ?? label;\n\n this.hide();\n\n this.triggerEl.dispatchEvent(\n new CustomEvent(\"fs:command-palette:selected\", { bubbles: true, detail: { value, label } }),\n );\n }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handleInput() {\n this._filter(this.inputEl.value);\n this._setActiveIndex(0);\n }\n\n _handleKeydown(event) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n this._setActiveIndex(this.activeIndex + 1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n this._setActiveIndex(this.activeIndex - 1);\n } else if (event.key === \"Enter\") {\n if (this.activeIndex >= 0) {\n event.preventDefault();\n this._selectItem(this._getSelectableItems()[this.activeIndex]);\n }\n }\n }\n\n _handleItemMousedown(event) {\n if (event.target.closest(\".fs-dropdown-item\")) event.preventDefault();\n }\n\n _handleItemClick(event) {\n const item = event.target.closest(\".fs-dropdown-item:not(.is-disabled)\");\n if (!item || item.hasAttribute(\"data-fs-empty\")) return;\n\n this._selectItem(item);\n }\n\n _handleGlobalShortcut(event) {\n if (!matchesShortcut(event, this._shortcut)) return;\n event.preventDefault();\n this.toggle();\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.triggerEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.paletteEl.setAttribute(\"data-theme\", theme);\n } else {\n this.paletteEl.removeAttribute(\"data-theme\");\n }\n\n this.paletteEl.classList.add(\"is-open\");\n lockScroll();\n\n this.inputEl.value = \"\";\n this._filter(\"\");\n this._setActiveIndex(0);\n this.inputEl.setAttribute(\"aria-expanded\", \"true\");\n\n this._focusTrap = createFocusTrap(this.dialogEl);\n this._focusTrap.activate();\n\n this._outsideClickCleanup = onClickOutside(this.dialogEl, () => this.hide());\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:command-palette:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.paletteEl.classList.remove(\"is-open\");\n unlockScroll();\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._focusTrap?.deactivate();\n this._focusTrap = null;\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.focus();\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:command-palette:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.inputEl.removeEventListener(\"input\", this._handleInput);\n this.inputEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.listEl.removeEventListener(\"mousedown\", this._handleItemMousedown);\n this.listEl.removeEventListener(\"click\", this._handleItemClick);\n if (this._shortcut) document.removeEventListener(\"keydown\", this._handleGlobalShortcut);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"command-palette\", CommandPalette);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Tree View: padr\u00E3o WAI-ARIA Tree View\n// (https://www.w3.org/WAI/ARIA/apg/patterns/treeview/). Cada n\u00F3 \u00E9 um `<li\n// role=\"treeitem\">` com `<span class=\"fs-tree-label\">` (obrigat\u00F3rio) seguido,\n// se houver filhos, de um `<ul>`/`<ol>` (`role=\"group\"`, auto-anexado) \u2014\n// o bot\u00E3o `.fs-tree-toggle` \u00E9 injetado automaticamente pelo JS nos n\u00F3s com\n// filhos, igual ao bot\u00E3o de ordena\u00E7\u00E3o do DataTable.\nexport class TreeView {\n constructor(rootEl) {\n this.rootEl = rootEl;\n rootEl.setAttribute(\"role\", \"tree\");\n\n this._setupItems();\n\n this._handleClick = this._handleClick.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleFocusIn = this._handleFocusIn.bind(this);\n\n rootEl.addEventListener(\"click\", this._handleClick);\n rootEl.addEventListener(\"keydown\", this._handleKeydown);\n rootEl.addEventListener(\"focusin\", this._handleFocusIn);\n\n this._resetRovingTabindex();\n\n instances.set(rootEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _setupItems() {\n Array.from(this.rootEl.querySelectorAll(\"li\")).forEach((li) => {\n li.setAttribute(\"role\", \"treeitem\");\n\n const group = this._group(li);\n if (!group) return;\n\n group.setAttribute(\"role\", \"group\");\n if (!li.hasAttribute(\"aria-expanded\")) li.setAttribute(\"aria-expanded\", \"false\");\n group.hidden = li.getAttribute(\"aria-expanded\") !== \"true\";\n\n const label = li.querySelector(\":scope > .fs-tree-label\") ?? li;\n if (!label.querySelector(\":scope > .fs-tree-toggle\")) {\n const toggle = document.createElement(\"span\");\n toggle.className = \"fs-tree-toggle\";\n toggle.setAttribute(\"aria-hidden\", \"true\");\n label.insertBefore(toggle, label.firstChild);\n }\n });\n }\n\n _group(item) {\n return item.querySelector(\":scope > ul, :scope > ol\");\n }\n\n _isExpanded(item) {\n return item.getAttribute(\"aria-expanded\") === \"true\";\n }\n\n _isVisible(item) {\n let group = item.parentElement.closest('[role=\"group\"]');\n while (group) {\n if (group.hidden) return false;\n group = group.parentElement.closest('[role=\"group\"]');\n }\n return true;\n }\n\n _visibleItems() {\n return Array.from(this.rootEl.querySelectorAll('[role=\"treeitem\"]')).filter((item) => this._isVisible(item));\n }\n\n _resetRovingTabindex() {\n const items = this._visibleItems();\n const current = items.find((item) => item.getAttribute(\"tabindex\") === \"0\") ?? items[0];\n items.forEach((item) => item.setAttribute(\"tabindex\", item === current ? \"0\" : \"-1\"));\n }\n\n expand(item) {\n const group = this._group(item);\n if (!group || this._isExpanded(item)) return;\n\n item.setAttribute(\"aria-expanded\", \"true\");\n group.hidden = false;\n this._resetRovingTabindex();\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:tree:expanded\", { bubbles: true, detail: { item } }));\n }\n\n collapse(item) {\n const group = this._group(item);\n if (!group || !this._isExpanded(item)) return;\n\n item.setAttribute(\"aria-expanded\", \"false\");\n group.hidden = true;\n this._resetRovingTabindex();\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:tree:collapsed\", { bubbles: true, detail: { item } }));\n }\n\n toggle(item) {\n if (this._isExpanded(item)) {\n this.collapse(item);\n } else {\n this.expand(item);\n }\n }\n\n select(item) {\n this.rootEl.querySelectorAll('[aria-selected=\"true\"]').forEach((el) => el.setAttribute(\"aria-selected\", \"false\"));\n item.setAttribute(\"aria-selected\", \"true\");\n\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:tree:selected\", { bubbles: true, detail: { value: item.dataset.value ?? item.textContent.trim(), item } }),\n );\n }\n\n _handleClick(event) {\n const item = event.target.closest('[role=\"treeitem\"]');\n if (!item) return;\n\n if (this._group(item)) this.toggle(item);\n this.select(item);\n item.focus();\n }\n\n _handleFocusIn(event) {\n const item = event.target.closest('[role=\"treeitem\"]');\n if (!item || !this._isVisible(item)) return;\n\n this._visibleItems().forEach((el) => el.setAttribute(\"tabindex\", el === item ? \"0\" : \"-1\"));\n }\n\n _handleKeydown(event) {\n const item = event.target.closest('[role=\"treeitem\"]');\n if (!item) return;\n\n const items = this._visibleItems();\n const index = items.indexOf(item);\n const group = this._group(item);\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n items[index + 1]?.focus();\n break;\n case \"ArrowUp\":\n event.preventDefault();\n items[index - 1]?.focus();\n break;\n case \"ArrowRight\":\n event.preventDefault();\n if (group) {\n if (this._isExpanded(item)) items[index + 1]?.focus();\n else this.expand(item);\n }\n break;\n case \"ArrowLeft\":\n event.preventDefault();\n if (group && this._isExpanded(item)) {\n this.collapse(item);\n } else {\n item.parentElement.closest('[role=\"treeitem\"]')?.focus();\n }\n break;\n case \"Home\":\n event.preventDefault();\n items[0]?.focus();\n break;\n case \"End\":\n event.preventDefault();\n items[items.length - 1]?.focus();\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n if (group) this.toggle(item);\n this.select(item);\n break;\n default:\n return;\n }\n }\n\n dispose() {\n this.rootEl.removeEventListener(\"click\", this._handleClick);\n this.rootEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.rootEl.removeEventListener(\"focusin\", this._handleFocusIn);\n instances.delete(this.rootEl);\n }\n}\n\nautoInit(\"tree-view\", TreeView);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nfunction computePercent(inputEl) {\n const min = Number(inputEl.min || 0);\n const max = Number(inputEl.max || 100);\n const value = Number(inputEl.value);\n\n if (max === min) return 0;\n return ((value - min) / (max - min)) * 100;\n}\n\n// Range/Slider: o <input type=\"range\"> nativo j\u00E1 cobre teclado (setas,\n// Home/End, PageUp/Down) e ARIA (role=slider impl\u00EDcito, aria-valuenow\n// autom\u00E1tico) sem nenhum JS \u2014 este componente s\u00F3 resolve dois pontos que\n// o CSS puro n\u00E3o alcan\u00E7a: (1) pintar a trilha preenchida at\u00E9 o valor atual\n// via `--fs-range-percent` (truque necess\u00E1rio porque s\u00F3 o Firefox suporta\n// `::-moz-range-progress`; ver _range.scss); (2) espelhar o valor num\n// `<output>` associado (`data-fs-target`), pra quem n\u00E3o consegue perceber\n// a posi\u00E7\u00E3o do thumb s\u00F3 visualmente.\nexport class RangeSlider {\n constructor(inputEl) {\n const targetSelector = inputEl.getAttribute(\"data-fs-target\");\n const outputEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n this.inputEl = inputEl;\n this.outputEl = outputEl;\n\n this._handleInput = this._handleInput.bind(this);\n inputEl.addEventListener(\"input\", this._handleInput);\n\n this._render();\n\n instances.set(inputEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleInput() {\n this._render();\n }\n\n _render() {\n this.inputEl.style.setProperty(\"--fs-range-percent\", `${computePercent(this.inputEl)}%`);\n if (this.outputEl) this.outputEl.textContent = this.inputEl.value;\n }\n\n dispose() {\n this.inputEl.removeEventListener(\"input\", this._handleInput);\n instances.delete(this.inputEl);\n }\n}\n\nautoInit(\"range\", RangeSlider);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction escapeHtml(value) {\n const div = document.createElement(\"div\");\n div.textContent = value;\n return div.innerHTML;\n}\n\nfunction formatBytes(bytes) {\n if (bytes < 1024) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\"];\n let value = bytes;\n let unitIndex = -1;\n\n do {\n value /= 1024;\n unitIndex += 1;\n } while (value >= 1024 && unitIndex < units.length - 1);\n\n return `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nfunction fileExtension(name) {\n const dot = name.lastIndexOf(\".\");\n return dot === -1 ? \"\" : name.slice(dot + 1, dot + 5).toUpperCase();\n}\n\n// Upload avan\u00E7ado: evolu\u00E7\u00E3o de js/file-drop.js \u2014 m\u00FAltiplos arquivos,\n// preview por arquivo (thumbnail de imagem via createObjectURL, nome,\n// tamanho), progresso individual e remo\u00E7\u00E3o por item. N\u00E3o faz upload de\n// verdade (agn\u00F3stico de backend/protocolo): s\u00F3 mant\u00E9m a lista de arquivos\n// e exp\u00F5e `setProgress`/`setError` pro consumidor chamar a partir do\n// pr\u00F3prio XHR/fetch. Comp\u00F5e com data-fs=\"file-drop\" na mesma label (ver\n// mockup/file-upload-advanced.html) pra ganhar arrastar-e-soltar de gra\u00E7a.\nexport class FileUploadAdvanced {\n constructor(rootEl) {\n const inputEl = rootEl.querySelector(\".fs-file-input\");\n if (!inputEl) {\n throw new Error(\"FokusStyles.FileUploadAdvanced: .fs-file-input n\u00E3o encontrado.\");\n }\n\n this.rootEl = rootEl;\n this.inputEl = inputEl;\n this.listEl = rootEl.querySelector(\".fs-file-upload-list\");\n if (!this.listEl) {\n this.listEl = document.createElement(\"ul\");\n this.listEl.className = \"fs-file-upload-list\";\n rootEl.appendChild(this.listEl);\n }\n\n this._items = new Map();\n\n this._handleChange = this._handleChange.bind(this);\n this._handleListClick = this._handleListClick.bind(this);\n\n inputEl.addEventListener(\"change\", this._handleChange);\n this.listEl.addEventListener(\"click\", this._handleListClick);\n\n instances.set(rootEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n getFiles() {\n return Array.from(this._items.values()).map((item) => item.file);\n }\n\n setProgress(id, percent) {\n const item = this._items.get(id);\n if (!item) return;\n\n item.progress = Math.min(100, Math.max(0, percent));\n item.error = null;\n this._renderItem(id);\n }\n\n setError(id, message) {\n const item = this._items.get(id);\n if (!item) return;\n\n item.error = message;\n this._renderItem(id);\n }\n\n remove(id) {\n const item = this._items.get(id);\n if (!item) return;\n\n if (item.thumbUrl) URL.revokeObjectURL(item.thumbUrl);\n this._items.delete(id);\n\n const itemEl = this.listEl.querySelector(`[data-file-id=\"${id}\"]`);\n itemEl?.remove();\n\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:file-upload:removed\", { bubbles: true, detail: { id, file: item.file } }),\n );\n }\n\n _handleChange() {\n const files = Array.from(this.inputEl.files ?? []);\n if (files.length === 0) return;\n\n const added = [];\n for (const file of files) {\n idCounter += 1;\n const id = `file-${idCounter}`;\n const thumbUrl = file.type.startsWith(\"image/\") ? URL.createObjectURL(file) : null;\n this._items.set(id, { file, progress: 0, error: null, thumbUrl });\n added.push({ id, file });\n this._appendItem(id);\n }\n\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:file-upload:added\", { bubbles: true, detail: { items: added } }));\n }\n\n _handleListClick(event) {\n const removeBtn = event.target.closest(\"[data-file-upload-remove]\");\n if (!removeBtn) return;\n\n const itemEl = removeBtn.closest(\"[data-file-id]\");\n if (itemEl) this.remove(itemEl.getAttribute(\"data-file-id\"));\n }\n\n _appendItem(id) {\n const item = this._items.get(id);\n const li = document.createElement(\"li\");\n li.className = \"fs-file-upload-item\";\n li.setAttribute(\"data-file-id\", id);\n this.listEl.appendChild(li);\n this._renderItem(id, item);\n }\n\n _renderItem(id, itemArg) {\n const item = itemArg ?? this._items.get(id);\n if (!item) return;\n\n const li = this.listEl.querySelector(`[data-file-id=\"${id}\"]`);\n if (!li) return;\n\n const { file, progress, error, thumbUrl } = item;\n const thumb = thumbUrl\n ? `<img src=\"${thumbUrl}\" alt=\"\">`\n : escapeHtml(fileExtension(file.name) || \"?\");\n\n li.classList.toggle(\"is-error\", Boolean(error));\n li.innerHTML = `\n <div class=\"fs-file-upload-thumb\">${thumb}</div>\n <div class=\"fs-file-upload-info\">\n <p class=\"fs-file-upload-name\">${escapeHtml(file.name)}</p>\n <p class=\"fs-file-upload-size\">${error ? escapeHtml(error) : formatBytes(file.size)}</p>\n <div class=\"fs-progress fs-progress-sm\" role=\"progressbar\" aria-valuenow=\"${progress}\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Progresso de ${escapeHtml(file.name)}\">\n <div class=\"fs-progress-bar${error ? \" fs-progress-bar-danger\" : \"\"}\" style=\"--fs-progress-value: ${progress};\"></div>\n </div>\n </div>\n <button type=\"button\" class=\"fs-btn-close fs-file-upload-remove\" data-file-upload-remove aria-label=\"Remover ${escapeHtml(file.name)}\"></button>\n `;\n }\n\n dispose() {\n this.inputEl.removeEventListener(\"change\", this._handleChange);\n this.listEl.removeEventListener(\"click\", this._handleListClick);\n\n for (const item of this._items.values()) {\n if (item.thumbUrl) URL.revokeObjectURL(item.thumbUrl);\n }\n this._items.clear();\n\n instances.delete(this.rootEl);\n }\n}\n\nautoInit(\"file-upload-advanced\", FileUploadAdvanced);\n"],
5
- "mappings": "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",
6
- "names": ["instances", "instances", "instances", "idCounter", "instances", "idCounter", "instances", "instances", "instances", "instances", "instances", "idCounter", "instances", "idCounter", "instances", "idCounter", "instances", "instances", "instances", "instances", "_a", "instances", "idCounter", "escapeHtml", "instances", "_a", "instances", "idCounter", "instances", "idCounter", "uniqueId", "instances", "_a", "_b", "instances", "idCounter", "uniqueId", "instances", "instances", "instances", "idCounter", "escapeHtml"]
3
+ "sources": ["../../packages/fokus-js/js/fokus.js", "../../packages/fokus-js/js/core/index.js", "../../packages/fokus-js/js/core/positioning.js", "../../packages/fokus-js/js/core/overlay.js", "../../packages/fokus-js/js/core/focus.js", "../../packages/fokus-js/js/core/transition.js", "../../packages/fokus-js/js/core/register.js", "../../packages/fokus-js/js/dropdown.js", "../../packages/fokus-js/js/tooltip.js", "../../packages/fokus-js/js/popover.js", "../../packages/fokus-js/js/modal.js", "../../packages/fokus-js/js/confirm.js", "../../packages/fokus-js/js/tag.js", "../../packages/fokus-js/js/file-drop.js", "../../packages/fokus-js/js/offcanvas.js", "../../packages/fokus-js/js/select.js", "../../packages/fokus-js/js/accordion.js", "../../packages/fokus-js/js/collapse.js", "../../packages/fokus-js/js/tabs.js", "../../packages/fokus-js/js/toast.js", "../../packages/fokus-js/js/carousel.js", "../../packages/fokus-js/js/stepper.js", "../../packages/fokus-js/js/breadcrumb.js", "../../packages/fokus-js/js/notification-center.js", "../../packages/fokus-js/js/nested-menu.js", "../../packages/fokus-js/js/combobox.js", "../../packages/fokus-js/js/datepicker.js", "../../packages/fokus-js/js/datatable.js", "../../packages/fokus-js/js/command-palette.js", "../../packages/fokus-js/js/tree-view.js", "../../packages/fokus-js/js/range.js", "../../packages/fokus-js/js/file-upload-advanced.js", "../../packages/fokus-js/js/theme.js", "../../packages/fokus-js/js/navbar.js", "../../packages/fokus-js/js/scrollspy.js", "../../packages/fokus-js/js/form-validation.js", "../../packages/fokus-js/js/spinner.js", "../../packages/fokus-js/js/pagination.js"],
4
+ "sourcesContent": ["export * as core from \"./core/index.js\";\nexport { Dropdown } from \"./dropdown.js\";\nexport { Tooltip } from \"./tooltip.js\";\nexport { Popover } from \"./popover.js\";\nexport { Modal } from \"./modal.js\";\nexport { confirm } from \"./confirm.js\";\nexport { Tag } from \"./tag.js\";\nexport { FileDrop } from \"./file-drop.js\";\nexport { Offcanvas } from \"./offcanvas.js\";\nexport { Select } from \"./select.js\";\nexport { Accordion } from \"./accordion.js\";\nexport { Collapse } from \"./collapse.js\";\nexport { Tabs } from \"./tabs.js\";\nexport { Toast } from \"./toast.js\";\nexport { Carousel } from \"./carousel.js\";\nexport { Stepper } from \"./stepper.js\";\nexport { Breadcrumb } from \"./breadcrumb.js\";\nexport { NotificationCenter } from \"./notification-center.js\";\nexport { NestedMenu } from \"./nested-menu.js\";\nexport { Combobox } from \"./combobox.js\";\nexport { Datepicker } from \"./datepicker.js\";\nexport { DataTable } from \"./datatable.js\";\nexport { CommandPalette } from \"./command-palette.js\";\nexport { TreeView } from \"./tree-view.js\";\nexport { RangeSlider } from \"./range.js\";\nexport { FileUploadAdvanced } from \"./file-upload-advanced.js\";\nexport { Theme } from \"./theme.js\";\nexport { Navbar } from \"./navbar.js\";\nexport { Scrollspy } from \"./scrollspy.js\";\nexport { FormValidation } from \"./form-validation.js\";\nexport { Spinner } from \"./spinner.js\";\nexport { Pagination } from \"./pagination.js\";\nexport { createFocusTrap, getFocusableElements, onEscapeKey } from \"./focus-trap.js\";\n", "export * from \"./positioning.js\";\nexport * from \"./overlay.js\";\nexport * from \"./focus.js\";\nexport * from \"./transition.js\";\nexport * from \"./register.js\";\n", "const OPPOSITE_PLACEMENT = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\nfunction fitsPlacement(placement, referenceRect, floatingRect, offset, viewportWidth, viewportHeight) {\n switch (placement) {\n case \"top\":\n return referenceRect.top - floatingRect.height - offset >= 0;\n case \"bottom\":\n return referenceRect.bottom + floatingRect.height + offset <= viewportHeight;\n case \"left\":\n return referenceRect.left - floatingRect.width - offset >= 0;\n case \"right\":\n return referenceRect.right + floatingRect.width + offset <= viewportWidth;\n default:\n return true;\n }\n}\n\nfunction alignCrossAxis(align, referenceStart, referenceSize, floatingSize) {\n switch (align) {\n case \"start\":\n return referenceStart;\n case \"end\":\n return referenceStart + referenceSize - floatingSize;\n default:\n return referenceStart + (referenceSize - floatingSize) / 2;\n }\n}\n\nexport function computePosition(referenceEl, floatingEl, options = {}) {\n const { placement = \"bottom\", align = \"center\", offset = 8, padding = 8 } = options;\n\n const referenceRect = referenceEl.getBoundingClientRect();\n const floatingRect = floatingEl.getBoundingClientRect();\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n let finalPlacement = placement;\n\n if (\n !fitsPlacement(placement, referenceRect, floatingRect, offset, viewportWidth, viewportHeight) &&\n fitsPlacement(OPPOSITE_PLACEMENT[placement], referenceRect, floatingRect, offset, viewportWidth, viewportHeight)\n ) {\n finalPlacement = OPPOSITE_PLACEMENT[placement];\n }\n\n let top;\n let left;\n\n if (finalPlacement === \"top\" || finalPlacement === \"bottom\") {\n top =\n finalPlacement === \"top\"\n ? referenceRect.top - floatingRect.height - offset\n : referenceRect.bottom + offset;\n left = alignCrossAxis(align, referenceRect.left, referenceRect.width, floatingRect.width);\n } else {\n left =\n finalPlacement === \"left\"\n ? referenceRect.left - floatingRect.width - offset\n : referenceRect.right + offset;\n top = alignCrossAxis(align, referenceRect.top, referenceRect.height, floatingRect.height);\n }\n\n const maxLeft = Math.max(padding, viewportWidth - floatingRect.width - padding);\n const maxTop = Math.max(padding, viewportHeight - floatingRect.height - padding);\n left = Math.min(Math.max(left, padding), maxLeft);\n top = Math.min(Math.max(top, padding), maxTop);\n\n return {\n top: top + window.scrollY,\n left: left + window.scrollX,\n placement: finalPlacement,\n };\n}\n\n// Mant\u00E9m overlays alinhados quando o viewport ou o pr\u00F3prio conte\u00FAdo muda.\n// O ResizeObserver \u00E9 opcional para preservar compatibilidade com navegadores\n// que n\u00E3o o implementam; scroll/resize continuam cobrindo o caso b\u00E1sico.\nexport function watchPosition(referenceEl, floatingEl, options = {}) {\n const update = () => applyPosition(floatingEl, computePosition(referenceEl, floatingEl, options));\n let frame = null;\n const schedule = () => {\n if (frame !== null) return;\n frame = requestAnimationFrame(() => {\n frame = null;\n update();\n });\n };\n\n window.addEventListener(\"resize\", schedule, { passive: true });\n window.addEventListener(\"scroll\", schedule, { passive: true, capture: true });\n const observer = typeof ResizeObserver === \"function\" ? new ResizeObserver(schedule) : null;\n observer?.observe(referenceEl);\n observer?.observe(floatingEl);\n\n return () => {\n window.removeEventListener(\"resize\", schedule);\n window.removeEventListener(\"scroll\", schedule, true);\n if (frame !== null) cancelAnimationFrame(frame);\n observer?.disconnect();\n };\n}\n\nexport function applyPosition(floatingEl, position) {\n floatingEl.style.position = \"absolute\";\n floatingEl.style.top = `${position.top}px`;\n floatingEl.style.left = `${position.left}px`;\n}\n", "let lockCount = 0;\nlet paddingCompensated = false;\nlet previousOverflow = \"\";\nlet previousPaddingRight = \"\";\nconst activeOverlays = [];\n\nexport function registerOverlay(instance) {\n if (!activeOverlays.includes(instance)) activeOverlays.push(instance);\n}\n\nexport function unregisterOverlay(instance) {\n const index = activeOverlays.lastIndexOf(instance);\n if (index >= 0) activeOverlays.splice(index, 1);\n}\n\nexport function lockScroll() {\n lockCount += 1;\n if (lockCount > 1) return;\n\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n previousOverflow = document.body.style.overflow;\n previousPaddingRight = document.body.style.paddingRight;\n document.body.style.overflow = \"hidden\";\n\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n paddingCompensated = true;\n }\n}\n\nexport function unlockScroll() {\n lockCount = Math.max(0, lockCount - 1);\n if (lockCount > 0) return;\n\n document.body.style.overflow = previousOverflow;\n\n if (paddingCompensated) {\n document.body.style.paddingRight = previousPaddingRight;\n paddingCompensated = false;\n }\n}\n\nexport function onClickOutside(el, callback) {\n const handler = (event) => {\n if (!el.contains(event.target)) callback(event);\n };\n\n // Listener de captura registrado imediatamente: o clique que abriu o\n // elemento j\u00E1 passou pelo document na fase de captura, ent\u00E3o n\u00E3o dispara\n // o fechamento \u2014 e um clique fora logo em seguida j\u00E1 encontra o listener\n // ativo (adiar com setTimeout criava uma janela em que ele era perdido).\n document.addEventListener(\"click\", handler, true);\n\n return () => {\n document.removeEventListener(\"click\", handler, true);\n };\n}\n", "const FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function getFocusableElements(container) {\n return Array.from(container.querySelectorAll(FOCUSABLE_SELECTOR)).filter((el) => el.offsetParent !== null);\n}\n\nexport function createFocusTrap(container) {\n const inertSiblings = [];\n const setSiblingsInert = (value) => {\n if (!container.parentElement) return;\n [...container.parentElement.children].filter((el) => el !== container).forEach((el) => {\n if (value) {\n inertSiblings.push({ el, value: el.inert, ariaHidden: el.getAttribute(\"aria-hidden\") });\n el.inert = true;\n el.setAttribute(\"aria-hidden\", \"true\");\n } else {\n const previous = inertSiblings.find((item) => item.el === el);\n if (previous) {\n el.inert = previous.value;\n previous.ariaHidden === null ? el.removeAttribute(\"aria-hidden\") : el.setAttribute(\"aria-hidden\", previous.ariaHidden);\n }\n }\n });\n };\n function handleKeydown(event) {\n if (event.key !== \"Tab\") return;\n\n const focusable = getFocusableElements(container);\n\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n container.addEventListener(\"keydown\", handleKeydown);\n\n return {\n activate() {\n setSiblingsInert(true);\n const focusable = getFocusableElements(container);\n if (focusable.length > 0) focusable[0].focus();\n },\n deactivate() {\n container.removeEventListener(\"keydown\", handleKeydown);\n setSiblingsInert(false);\n inertSiblings.length = 0;\n },\n };\n}\n\nexport function onEscapeKey(callback) {\n const handler = (event) => {\n if (event.key === \"Escape\") callback(event);\n };\n\n document.addEventListener(\"keydown\", handler);\n\n return () => document.removeEventListener(\"keydown\", handler);\n}\n", "function prefersReducedMotion() {\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nfunction waitForHeightTransition(el) {\n return new Promise((resolve) => {\n let settled = false;\n const settle = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n el.removeEventListener(\"transitionend\", handleEnd);\n resolve();\n };\n const handleEnd = (event) => {\n if (event.target !== el || event.propertyName !== \"height\") return;\n settle();\n };\n\n el.addEventListener(\"transitionend\", handleEnd);\n const timeout = window.setTimeout(settle, 450);\n });\n}\n\nexport function collapse(el, options = {}) {\n if (prefersReducedMotion()) {\n el.style.display = \"none\";\n return Promise.resolve();\n }\n\n const duration = options.duration ?? 200;\n\n el.style.overflow = \"hidden\";\n el.style.height = `${el.scrollHeight}px`;\n el.style.transition = `height ${duration}ms ease`;\n\n const done = waitForHeightTransition(el).then(() => {\n el.style.display = \"none\";\n el.style.removeProperty(\"height\");\n el.style.removeProperty(\"overflow\");\n el.style.removeProperty(\"transition\");\n });\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.style.height = \"0px\";\n });\n });\n\n return done;\n}\n\nexport function expand(el, options = {}) {\n el.style.display = \"\";\n\n if (prefersReducedMotion()) {\n return Promise.resolve();\n }\n\n const duration = options.duration ?? 200;\n const targetHeight = `${el.scrollHeight}px`;\n\n el.style.overflow = \"hidden\";\n el.style.height = \"0px\";\n el.style.transition = `height ${duration}ms ease`;\n\n const done = waitForHeightTransition(el).then(() => {\n el.style.removeProperty(\"height\");\n el.style.removeProperty(\"overflow\");\n el.style.removeProperty(\"transition\");\n });\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.style.height = targetHeight;\n });\n });\n\n return done;\n}\n\nexport function onTransitionEnd(el, propertyName) {\n return new Promise((resolve) => {\n const handleEnd = (event) => {\n if (event.target !== el) return;\n if (propertyName && event.propertyName !== propertyName) return;\n el.removeEventListener(\"transitionend\", handleEnd);\n resolve();\n };\n\n el.addEventListener(\"transitionend\", handleEnd);\n });\n}\n", "export function createInstanceRegistry() {\n const instances = new WeakMap();\n\n return {\n get(el) {\n return instances.get(el);\n },\n set(el, instance) {\n instances.set(el, instance);\n },\n delete(el) {\n instances.delete(el);\n },\n };\n}\n\nexport function autoInit(name, Ctor, options = {}) {\n if (typeof document === \"undefined\") return;\n\n const selector = options.selector ?? `[data-fs=\"${name}\"]`;\n\n const init = () => {\n document.querySelectorAll(selector).forEach((el) => {\n if (!Ctor.getInstance(el)) new Ctor(el);\n });\n };\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", init);\n } else {\n init();\n }\n}\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Dropdown {\n constructor(toggleEl, options = {}) {\n const targetSelector = toggleEl.getAttribute(\"data-fs-target\");\n const menuEl = targetSelector ? document.querySelector(targetSelector) : toggleEl.nextElementSibling;\n\n if (!menuEl) {\n throw new Error(\"FokusStyles.Dropdown: elemento do menu n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.toggleEl = toggleEl;\n this.menuEl = menuEl;\n this.placement = options.placement ?? toggleEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.align = options.align ?? toggleEl.getAttribute(\"data-align\") ?? \"start\";\n this.isOpen = false;\n this._outsideClickCleanup = null;\n this._positionCleanup = null;\n this._originalParent = this.menuEl.parentNode;\n this._originalNextSibling = this.menuEl.nextSibling;\n\n document.body.appendChild(this.menuEl);\n\n this.toggleEl.setAttribute(\"aria-haspopup\", \"menu\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n this.toggleEl.setAttribute(\"aria-controls\", this.menuEl.id || `fs-dropdown-${Math.random().toString(36).slice(2)}`);\n if (!this.menuEl.id) this.menuEl.id = this.toggleEl.getAttribute(\"aria-controls\");\n this.menuEl.setAttribute(\"role\", \"menu\");\n this.menuEl.querySelectorAll(\".fs-dropdown-item\").forEach((item) => {\n if (!item.hasAttribute(\"role\")) item.setAttribute(\"role\", \"menuitem\");\n });\n\n this._handleToggleClick = this._handleToggleClick.bind(this);\n this._handleMenuKeydown = this._handleMenuKeydown.bind(this);\n this._handleMenuClick = this._handleMenuClick.bind(this);\n\n this.toggleEl.addEventListener(\"click\", this._handleToggleClick);\n this.menuEl.addEventListener(\"keydown\", this._handleMenuKeydown);\n this.menuEl.addEventListener(\"click\", this._handleMenuClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.hide();\n this.toggleEl.focus();\n }\n });\n\n instances.set(toggleEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleToggleClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handleMenuClick(event) {\n if (event.target.closest(\".fs-dropdown-item\")) {\n this.hide();\n this.toggleEl.focus();\n }\n }\n\n _handleMenuKeydown(event) {\n const items = Array.from(this.menuEl.querySelectorAll(\".fs-dropdown-item:not(.is-disabled)\"));\n const currentIndex = items.indexOf(document.activeElement);\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n items[(currentIndex + 1) % items.length]?.focus();\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n items[(currentIndex - 1 + items.length) % items.length]?.focus();\n } else if (event.key === \"Home\") {\n event.preventDefault();\n items[0]?.focus();\n } else if (event.key === \"End\") {\n event.preventDefault();\n items[items.length - 1]?.focus();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n this.hide();\n this.toggleEl.focus();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.toggleEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.menuEl.setAttribute(\"data-theme\", theme);\n } else {\n this.menuEl.removeAttribute(\"data-theme\");\n }\n\n this.menuEl.classList.add(\"is-open\");\n\n const position = computePosition(this.toggleEl, this.menuEl, {\n placement: this.placement,\n align: this.align,\n offset: 4,\n });\n applyPosition(this.menuEl, position);\n this._positionCleanup = watchPosition(this.toggleEl, this.menuEl, {\n placement: this.placement,\n align: this.align,\n offset: 4,\n });\n\n this.toggleEl.setAttribute(\"aria-expanded\", \"true\");\n\n const firstItem = this.menuEl.querySelector(\".fs-dropdown-item:not(.is-disabled)\");\n firstItem?.focus();\n\n this._outsideClickCleanup = onClickOutside(this.menuEl, (event) => {\n if (this.toggleEl.contains(event.target)) return;\n this.hide();\n });\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:dropdown:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.menuEl.classList.remove(\"is-open\");\n this.menuEl.style.removeProperty(\"position\");\n this.menuEl.style.removeProperty(\"top\");\n this.menuEl.style.removeProperty(\"left\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n this._positionCleanup?.();\n this._positionCleanup = null;\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:dropdown:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.toggleEl.removeEventListener(\"click\", this._handleToggleClick);\n this.menuEl.removeEventListener(\"keydown\", this._handleMenuKeydown);\n this.menuEl.removeEventListener(\"click\", this._handleMenuClick);\n if (this._originalParent) {\n this._originalParent.insertBefore(this.menuEl, this._originalNextSibling);\n }\n instances.delete(this.toggleEl);\n }\n}\n\nautoInit(\"dropdown\", Dropdown);\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Tooltip {\n constructor(referenceEl, options = {}) {\n const title = referenceEl.getAttribute(\"title\") ?? referenceEl.getAttribute(\"data-title\") ?? options.title;\n\n if (!title) {\n throw new Error(\"FokusStyles.Tooltip: elemento sem texto (atributo title/data-title).\");\n }\n\n referenceEl.removeAttribute(\"title\");\n\n idCounter += 1;\n\n this.referenceEl = referenceEl;\n this.title = title;\n this.placement = options.placement ?? referenceEl.getAttribute(\"data-placement\") ?? \"top\";\n this.isOpen = false;\n this.id = `fokus-tooltip-${idCounter}`;\n this._positionCleanup = null;\n this._originalDescribedBy = referenceEl.getAttribute(\"aria-describedby\");\n\n this.tooltipEl = document.createElement(\"div\");\n this.tooltipEl.className = \"fs-tooltip\";\n this.tooltipEl.id = this.id;\n this.tooltipEl.setAttribute(\"role\", \"tooltip\");\n this.tooltipEl.innerHTML = '<div class=\"fs-tooltip-arrow\"></div><div class=\"fs-tooltip-inner\"></div>';\n this.tooltipEl.querySelector(\".fs-tooltip-inner\").textContent = this.title;\n document.body.appendChild(this.tooltipEl);\n\n referenceEl.setAttribute(\"aria-describedby\", this.id);\n\n this._handleShow = this.show.bind(this);\n this._handleHide = this.hide.bind(this);\n\n referenceEl.addEventListener(\"mouseenter\", this._handleShow);\n referenceEl.addEventListener(\"mouseleave\", this._handleHide);\n referenceEl.addEventListener(\"focus\", this._handleShow);\n referenceEl.addEventListener(\"blur\", this._handleHide);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) this.hide();\n });\n\n instances.set(referenceEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.referenceEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.tooltipEl.setAttribute(\"data-theme\", theme);\n } else {\n this.tooltipEl.removeAttribute(\"data-theme\");\n }\n\n this.tooltipEl.classList.add(\"is-open\");\n\n const position = computePosition(this.referenceEl, this.tooltipEl, { placement: this.placement, offset: 10 });\n applyPosition(this.tooltipEl, position);\n this._positionCleanup = watchPosition(this.referenceEl, this.tooltipEl, {\n placement: this.placement,\n offset: 10,\n });\n this.tooltipEl.setAttribute(\"data-placement\", position.placement);\n\n this.referenceEl.dispatchEvent(new CustomEvent(\"fs:tooltip:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.tooltipEl.classList.remove(\"is-open\");\n this._positionCleanup?.();\n this._positionCleanup = null;\n\n this.referenceEl.dispatchEvent(new CustomEvent(\"fs:tooltip:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this.referenceEl.removeEventListener(\"mouseenter\", this._handleShow);\n this.referenceEl.removeEventListener(\"mouseleave\", this._handleHide);\n this.referenceEl.removeEventListener(\"focus\", this._handleShow);\n this.referenceEl.removeEventListener(\"blur\", this._handleHide);\n this._removeEscapeListener();\n if (this._originalDescribedBy === null) this.referenceEl.removeAttribute(\"aria-describedby\");\n else this.referenceEl.setAttribute(\"aria-describedby\", this._originalDescribedBy);\n this.tooltipEl.remove();\n instances.delete(this.referenceEl);\n }\n}\n\nautoInit(\"tooltip\", Tooltip);\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\nconst HOVER_HIDE_DELAY = 100;\n\nexport class Popover {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const popoverEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!popoverEl) {\n throw new Error(\"FokusStyles.Popover: elemento n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.popoverEl = popoverEl;\n this.placement = options.placement ?? triggerEl.getAttribute(\"data-placement\") ?? \"top\";\n this.align = options.align ?? triggerEl.getAttribute(\"data-align\") ?? \"center\";\n this.trigger = options.trigger ?? triggerEl.getAttribute(\"data-trigger\") ?? \"click\";\n this.isOpen = false;\n this._outsideClickCleanup = null;\n this._removeEscapeListener = null;\n this._hideTimer = null;\n this._positionCleanup = null;\n this._originalParent = popoverEl.parentNode;\n this._originalNextSibling = popoverEl.nextSibling;\n\n document.body.appendChild(popoverEl);\n\n popoverEl.setAttribute(\"role\", \"dialog\");\n popoverEl.setAttribute(\"aria-modal\", \"false\");\n\n idCounter += 1;\n if (!popoverEl.id) popoverEl.id = `fokus-popover-${idCounter}`;\n\n const headerEl = popoverEl.querySelector(\".fs-popover-header\");\n if (headerEl) {\n if (!headerEl.id) headerEl.id = `fokus-popover-header-${idCounter}`;\n popoverEl.setAttribute(\"aria-labelledby\", headerEl.id);\n }\n\n triggerEl.setAttribute(\"aria-controls\", popoverEl.id);\n triggerEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._handleDismissClick = this._handleDismissClick.bind(this);\n popoverEl.addEventListener(\"click\", this._handleDismissClick);\n\n this._bindTrigger();\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _bindTrigger() {\n if (this.trigger === \"manual\") return;\n\n if (this.trigger === \"click\") {\n this._handleTriggerClick = (event) => {\n event.preventDefault();\n this.toggle();\n };\n this.triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n } else if (this.trigger === \"hover\") {\n this._handleMouseEnter = () => {\n clearTimeout(this._hideTimer);\n this.show();\n };\n this._handleMouseLeave = () => {\n this._hideTimer = setTimeout(() => this.hide(), HOVER_HIDE_DELAY);\n };\n this.triggerEl.addEventListener(\"mouseenter\", this._handleMouseEnter);\n this.triggerEl.addEventListener(\"mouseleave\", this._handleMouseLeave);\n this.popoverEl.addEventListener(\"mouseenter\", this._handleMouseEnter);\n this.popoverEl.addEventListener(\"mouseleave\", this._handleMouseLeave);\n } else if (this.trigger === \"focus\") {\n this._handleTriggerFocus = () => this.show();\n this._handleTriggerFocusOut = (event) => {\n if (this.popoverEl.contains(event.relatedTarget)) return;\n this.hide();\n };\n this._handlePopoverFocusOut = (event) => {\n if (this.triggerEl.contains(event.relatedTarget) || this.popoverEl.contains(event.relatedTarget)) return;\n this.hide();\n };\n this.triggerEl.addEventListener(\"focus\", this._handleTriggerFocus);\n this.triggerEl.addEventListener(\"focusout\", this._handleTriggerFocusOut);\n this.popoverEl.addEventListener(\"focusout\", this._handlePopoverFocusOut);\n }\n\n if (this.trigger !== \"manual\") {\n this._removeEscapeListener = onEscapeKey(() => {\n if (!this.isOpen) return;\n this.hide();\n this.triggerEl.focus();\n });\n }\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"popover\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.triggerEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.popoverEl.setAttribute(\"data-theme\", theme);\n } else {\n this.popoverEl.removeAttribute(\"data-theme\");\n }\n\n this.popoverEl.classList.add(\"is-open\");\n\n const position = computePosition(this.triggerEl, this.popoverEl, {\n placement: this.placement,\n align: this.align,\n offset: 10,\n });\n applyPosition(this.popoverEl, position);\n this._positionCleanup = watchPosition(this.triggerEl, this.popoverEl, {\n placement: this.placement,\n align: this.align,\n offset: 10,\n });\n this.popoverEl.setAttribute(\"data-placement\", position.placement);\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"true\");\n\n if (this.trigger === \"click\") {\n this._outsideClickCleanup = onClickOutside(this.popoverEl, (event) => {\n if (this.triggerEl.contains(event.target)) return;\n this.hide();\n });\n }\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:popover:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.popoverEl.classList.remove(\"is-open\");\n this._positionCleanup?.();\n this._positionCleanup = null;\n this.triggerEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:popover:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n clearTimeout(this._hideTimer);\n this._removeEscapeListener?.();\n this.popoverEl.removeEventListener(\"click\", this._handleDismissClick);\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.triggerEl.removeEventListener(\"mouseenter\", this._handleMouseEnter);\n this.triggerEl.removeEventListener(\"mouseleave\", this._handleMouseLeave);\n this.popoverEl.removeEventListener(\"mouseenter\", this._handleMouseEnter);\n this.popoverEl.removeEventListener(\"mouseleave\", this._handleMouseLeave);\n this.triggerEl.removeEventListener(\"focus\", this._handleTriggerFocus);\n this.triggerEl.removeEventListener(\"focusout\", this._handleTriggerFocusOut);\n this.popoverEl.removeEventListener(\"focusout\", this._handlePopoverFocusOut);\n if (this._originalParent) {\n this._originalParent.insertBefore(this.popoverEl, this._originalNextSibling);\n }\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"popover\", Popover);\n", "import { lockScroll, unlockScroll, onClickOutside, registerOverlay, unregisterOverlay } from \"./core/overlay.js\";\nimport { createFocusTrap, onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Modal {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const modalEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!modalEl) {\n throw new Error(\"FokusStyles.Modal: elemento do modal n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.modalEl = modalEl;\n this.dialogEl = modalEl.querySelector(\".fs-modal-dialog\") ?? modalEl;\n this.staticBackdrop = (options.backdrop ?? modalEl.getAttribute(\"data-backdrop\")) === \"static\";\n this.isOpen = false;\n this._focusTrap = null;\n this._outsideClickCleanup = null;\n\n modalEl.setAttribute(\"role\", \"dialog\");\n modalEl.setAttribute(\"aria-modal\", \"true\");\n modalEl.setAttribute(\"aria-hidden\", \"true\");\n const titleEl = modalEl.querySelector(\".fs-modal-title\");\n if (titleEl) {\n if (!titleEl.id) titleEl.id = `fs-modal-title-${Math.random().toString(36).slice(2)}`;\n modalEl.setAttribute(\"aria-labelledby\", titleEl.id);\n }\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handleDismissClick = this._handleDismissClick.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n modalEl.addEventListener(\"click\", this._handleDismissClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen && !this.staticBackdrop) this.hide();\n });\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n static getOrCreateInstance(el, options = {}) {\n return this.getInstance(el) ?? new Modal(el, options);\n }\n\n static show(el, options = {}) { return this.getOrCreateInstance(el, options).show(); }\n static hide(el) { return this.getInstance(el)?.hide(); }\n static toggle(el, options = {}) { return this.getOrCreateInstance(el, options).toggle(); }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.show();\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"modal\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:show\", { bubbles: true }));\n this.isOpen = true;\n registerOverlay(this);\n\n this.modalEl.classList.add(\"is-open\");\n this.modalEl.setAttribute(\"aria-hidden\", \"false\");\n lockScroll();\n\n this._focusTrap = createFocusTrap(this.dialogEl);\n this._focusTrap.activate();\n\n if (!this.staticBackdrop) {\n this._outsideClickCleanup = onClickOutside(this.dialogEl, () => this.hide());\n }\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:shown\", { bubbles: true }));\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:modal:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:hide\", { bubbles: true }));\n this.isOpen = false;\n unregisterOverlay(this);\n\n this.modalEl.classList.remove(\"is-open\");\n this.modalEl.setAttribute(\"aria-hidden\", \"true\");\n unlockScroll();\n\n this._focusTrap?.deactivate();\n this._focusTrap = null;\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.focus();\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:hidden\", { bubbles: true }));\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:modal:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.modalEl.removeEventListener(\"click\", this._handleDismissClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"modal\", Modal, { selector: '[data-fs=\"modal\"], [data-fs-toggle=\"modal\"]' });\n", "import { Modal } from \"./modal.js\";\n\nlet idCounter = 0;\n\nfunction escapeHtml(value) {\n const div = document.createElement(\"div\");\n div.textContent = value;\n return div.innerHTML;\n}\n\n// Alert Dialog / Confirm: ao contr\u00E1rio dos demais componentes (auto-init\n// declarativo via data-fs), \u00E9 100% program\u00E1tico \u2014 monta o modal na hora,\n// reaproveitando js/modal.js (foco/teclado/overlay j\u00E1 prontos) sem precisar\n// de marca\u00E7\u00E3o pr\u00E9-declarada na p\u00E1gina. Resolve `true` (confirmado), `false`\n// (cancelado ou fechado por Escape/clique fora).\nexport function confirm(options = {}) {\n const { title = \"Tem certeza?\", message = \"\", confirmText = \"Confirmar\", cancelText = \"Cancelar\", variant = \"danger\" } = options;\n\n return new Promise((resolve) => {\n idCounter += 1;\n const modalId = `fokus-confirm-${idCounter}`;\n const invokerEl = document.activeElement instanceof HTMLElement ? document.activeElement : document.body;\n\n const modalEl = document.createElement(\"div\");\n modalEl.className = \"fs-modal fs-alert-dialog\";\n modalEl.id = modalId;\n modalEl.innerHTML = `\n <div class=\"fs-modal-dialog fs-modal-sm\">\n <div class=\"fs-modal-content\">\n <div class=\"fs-modal-body\">\n <h3 class=\"fs-modal-title\">${escapeHtml(title)}</h3>\n ${message ? `<p class=\"fs-alert-dialog-message\">${escapeHtml(message)}</p>` : \"\"}\n </div>\n <div class=\"fs-modal-footer\">\n <button type=\"button\" class=\"fs-btn\" data-action=\"cancel\">${escapeHtml(cancelText)}</button>\n <button type=\"button\" class=\"fs-btn fs-btn-${variant}\" data-action=\"confirm\">${escapeHtml(confirmText)}</button>\n </div>\n </div>\n </div>\n `;\n document.body.appendChild(modalEl);\n\n // Modal exige um gatilho com data-fs-target; sint\u00E9tico porque n\u00E3o h\u00E1 um\n // bot\u00E3o real \"abrindo\" este modal (ele nasce j\u00E1 aberto).\n const triggerEl = document.createElement(\"button\");\n triggerEl.type = \"button\";\n triggerEl.setAttribute(\"data-fs-target\", `#${modalId}`);\n triggerEl.style.display = \"none\";\n document.body.appendChild(triggerEl);\n\n const modal = new Modal(triggerEl);\n let settled = false;\n\n const finish = (result) => {\n if (settled) return;\n settled = true;\n\n modal.dispose();\n modalEl.remove();\n triggerEl.remove();\n invokerEl.focus?.();\n resolve(result);\n };\n\n modalEl.addEventListener(\"click\", (event) => {\n const action = event.target.closest(\"[data-action]\")?.dataset.action;\n if (action === \"confirm\") finish(true);\n else if (action === \"cancel\") finish(false);\n });\n\n // Escape e clique fora chamam modal.hide() internamente, que dispara\n // este evento no gatilho (n\u00E3o no modalEl) \u2014 conta como cancelamento.\n triggerEl.addEventListener(\"fs:modal:hidden\", () => finish(false));\n\n modal.show();\n });\n}\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Badge dismiss\u00EDvel / Tag: o \u00FAnico componente CSS-first desta leva que\n// precisa de JS \u2014 s\u00F3 o suficiente pra remover o elemento do DOM ao clicar\n// no .fs-btn-close, sem posicionamento/foco/overlay.\nexport class Tag {\n constructor(tagEl) {\n this.tagEl = tagEl;\n this._isLoading = tagEl.classList.contains(\"is-loading\") || tagEl.getAttribute(\"aria-busy\") === \"true\";\n\n this._handleClick = this._handleClick.bind(this);\n tagEl.addEventListener(\"click\", this._handleClick);\n\n this.setLoading(this._isLoading);\n\n instances.set(tagEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleClick(event) {\n if (!this._isLoading && event.target.closest('[data-fs-dismiss=\"tag\"]')) {\n this.dismiss();\n }\n }\n\n // Dispara um evento cancel\u00E1vel antes de remover (mesmo esp\u00EDrito de\n // fs:stepper:beforechange): preventDefault() bloqueia a remo\u00E7\u00E3o.\n dismiss() {\n if (this._isLoading) return false;\n\n const event = new CustomEvent(\"fs:tag:dismissed\", { bubbles: true, cancelable: true });\n this.tagEl.dispatchEvent(event);\n if (event.defaultPrevented) return false;\n\n this.tagEl.remove();\n return true;\n }\n\n // Estado \u00FAtil enquanto uma remo\u00E7\u00E3o ou atualiza\u00E7\u00E3o ass\u00EDncrona est\u00E1 pendente.\n // Al\u00E9m da apar\u00EAncia, bloqueia o dismiss e comunica o estado a AT.\n setLoading(loading) {\n this._isLoading = Boolean(loading);\n this.tagEl.classList.toggle(\"is-loading\", this._isLoading);\n if (this._isLoading) {\n this.tagEl.setAttribute(\"aria-busy\", \"true\");\n } else {\n this.tagEl.removeAttribute(\"aria-busy\");\n }\n\n const dismissButton = this.tagEl.querySelector('[data-fs-dismiss=\"tag\"]');\n if (dismissButton) dismissButton.disabled = this._isLoading;\n\n return this;\n }\n\n dispose() {\n this.tagEl.removeEventListener(\"click\", this._handleClick);\n instances.delete(this.tagEl);\n }\n}\n\nautoInit(\"tag\", Tag);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Evolui o upload de arquivo (scss/forms/_forms.scss, Fase 6) com\n// arrastar-e-soltar sobre o `.fs-file-label`. Auto-init com\n// `data-fs=\"file-drop\"` no pr\u00F3prio `<label for=\"...\">` \u2014 o input nativo\n// associado \u00E9 resolvido pelo atributo `for`, mesmo v\u00EDnculo que j\u00E1 existe\n// entre `.fs-file-input`/`.fs-file-label`.\nexport class FileDrop {\n constructor(labelEl) {\n const inputEl = document.getElementById(labelEl.getAttribute(\"for\"));\n\n if (!inputEl) {\n throw new Error(\"FokusStyles.FileDrop: input associado (via for=) n\u00E3o encontrado.\");\n }\n\n this.labelEl = labelEl;\n this.inputEl = inputEl;\n this._dragDepth = 0;\n\n this._handleDragEnter = this._handleDragEnter.bind(this);\n this._handleDragOver = this._handleDragOver.bind(this);\n this._handleDragLeave = this._handleDragLeave.bind(this);\n this._handleDrop = this._handleDrop.bind(this);\n\n labelEl.addEventListener(\"dragenter\", this._handleDragEnter);\n labelEl.addEventListener(\"dragover\", this._handleDragOver);\n labelEl.addEventListener(\"dragleave\", this._handleDragLeave);\n labelEl.addEventListener(\"drop\", this._handleDrop);\n\n instances.set(labelEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n // Conta entradas/sa\u00EDdas (dragenter/dragleave tamb\u00E9m disparam nos filhos do\n // label, ex. o texto do hint) \u2014 s\u00F3 remove o estado visual quando a\n // contagem volta a zero, sen\u00E3o `.is-dragover` pisca ao arrastar por cima\n // de um elemento interno.\n _handleDragEnter(event) {\n event.preventDefault();\n this._dragDepth += 1;\n this.labelEl.classList.add(\"is-dragover\");\n }\n\n _handleDragOver(event) {\n event.preventDefault();\n }\n\n _handleDragLeave(event) {\n event.preventDefault();\n this._dragDepth = Math.max(0, this._dragDepth - 1);\n if (this._dragDepth === 0) {\n this.labelEl.classList.remove(\"is-dragover\");\n }\n }\n\n _handleDrop(event) {\n event.preventDefault();\n this._dragDepth = 0;\n this.labelEl.classList.remove(\"is-dragover\");\n\n if (this.inputEl.disabled) return;\n\n const files = event.dataTransfer?.files;\n if (!files || files.length === 0) return;\n\n this.inputEl.files = files;\n this.inputEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n\n dispose() {\n this.labelEl.removeEventListener(\"dragenter\", this._handleDragEnter);\n this.labelEl.removeEventListener(\"dragover\", this._handleDragOver);\n this.labelEl.removeEventListener(\"dragleave\", this._handleDragLeave);\n this.labelEl.removeEventListener(\"drop\", this._handleDrop);\n instances.delete(this.labelEl);\n }\n}\n\nautoInit(\"file-drop\", FileDrop);\n", "import { lockScroll, unlockScroll, onClickOutside, registerOverlay, unregisterOverlay } from \"./core/overlay.js\";\nimport { createFocusTrap, onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Offcanvas {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const offcanvasEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!offcanvasEl) {\n throw new Error(\"FokusStyles.Offcanvas: elemento n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.offcanvasEl = offcanvasEl;\n this.hasBackdrop = (options.backdrop ?? offcanvasEl.getAttribute(\"data-backdrop\")) !== \"false\";\n this.staticBackdrop = (options.backdrop ?? offcanvasEl.getAttribute(\"data-backdrop\")) === \"static\";\n this.isOpen = false;\n this._focusTrap = null;\n this._outsideClickCleanup = null;\n this._backdropEl = null;\n\n offcanvasEl.setAttribute(\"role\", \"dialog\");\n offcanvasEl.setAttribute(\"aria-modal\", \"true\");\n offcanvasEl.setAttribute(\"aria-hidden\", \"true\");\n const titleEl = offcanvasEl.querySelector(\".fs-offcanvas-title\");\n if (titleEl) {\n if (!titleEl.id) titleEl.id = `fs-offcanvas-title-${Math.random().toString(36).slice(2)}`;\n offcanvasEl.setAttribute(\"aria-labelledby\", titleEl.id);\n }\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handleDismissClick = this._handleDismissClick.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n offcanvasEl.addEventListener(\"click\", this._handleDismissClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen && !this.staticBackdrop) this.hide();\n });\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n static getOrCreateInstance(el, options = {}) {\n return this.getInstance(el) ?? new Offcanvas(el, options);\n }\n\n static show(el, options = {}) { return this.getOrCreateInstance(el, options).show(); }\n static hide(el) { return this.getInstance(el)?.hide(); }\n static toggle(el, options = {}) { return this.getOrCreateInstance(el, options).toggle(); }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.show();\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"offcanvas\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:show\", { bubbles: true }));\n this.isOpen = true;\n registerOverlay(this);\n\n if (this.hasBackdrop) {\n this._backdropEl = document.createElement(\"div\");\n this._backdropEl.className = \"fs-offcanvas-backdrop\";\n document.body.appendChild(this._backdropEl);\n // For\u00E7a reflow antes de adicionar `.is-open` para a transi\u00E7\u00E3o de opacidade\n // rodar (elemento rec\u00E9m-criado come\u00E7a sem a classe).\n void this._backdropEl.offsetHeight;\n this._backdropEl.classList.add(\"is-open\");\n }\n\n this.offcanvasEl.classList.add(\"is-open\");\n this.offcanvasEl.setAttribute(\"aria-hidden\", \"false\");\n lockScroll();\n\n this._focusTrap = createFocusTrap(this.offcanvasEl);\n // `visibility: hidden` mant\u00E9m `offsetParent` n\u00E3o nulo (diferente de\n // `display: none`), ent\u00E3o o elemento s\u00F3 fica de fato foc\u00E1vel depois que o\n // navegador processa a transi\u00E7\u00E3o de `visibility` para \"visible\" \u2014 em\n // Chromium isso s\u00F3 \u00E9 garantido ap\u00F3s um ciclo completo de paint, da\u00ED o\n // duplo requestAnimationFrame antes de mover o foco.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (this.isOpen) this._focusTrap.activate();\n });\n });\n\n if (!this.staticBackdrop) {\n this._outsideClickCleanup = onClickOutside(this.offcanvasEl, (event) => {\n if (this.triggerEl.contains(event.target)) return;\n this.hide();\n });\n }\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:shown\", { bubbles: true }));\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:offcanvas:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:hide\", { bubbles: true }));\n this.isOpen = false;\n unregisterOverlay(this);\n\n this.offcanvasEl.classList.remove(\"is-open\");\n this.offcanvasEl.setAttribute(\"aria-hidden\", \"true\");\n unlockScroll();\n\n this._backdropEl?.remove();\n this._backdropEl = null;\n\n this._focusTrap?.deactivate();\n this._focusTrap = null;\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.focus();\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:hidden\", { bubbles: true }));\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:offcanvas:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.offcanvasEl.removeEventListener(\"click\", this._handleDismissClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"offcanvas\", Offcanvas, { selector: '[data-fs=\"offcanvas\"], [data-fs-toggle=\"offcanvas\"]' });\n", "import { Dropdown } from \"./dropdown.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Select {\n constructor(selectEl) {\n if (selectEl.tagName !== \"SELECT\") {\n throw new Error(\"FokusStyles.Select: elemento precisa ser um <select> nativo.\");\n }\n\n this.selectEl = selectEl;\n this.size = selectEl.getAttribute(\"data-size\");\n this._originalDisplay = selectEl.style.display;\n\n this._buildMarkup();\n this._syncFromNativeSelect();\n\n this.dropdown = new Dropdown(this.toggleEl);\n\n this.toggleEl.setAttribute(\"aria-haspopup\", \"listbox\");\n this.menuEl.setAttribute(\"role\", \"listbox\");\n\n this.toggleEl.addEventListener(\"fs:dropdown:shown\", () => {\n this.menuEl.style.width = `${this.toggleEl.offsetWidth}px`;\n });\n\n this._handleItemClick = this._handleItemClick.bind(this);\n this._handleNativeChange = this._handleNativeChange.bind(this);\n this.menuEl.addEventListener(\"click\", this._handleItemClick);\n this.selectEl.addEventListener(\"change\", this._handleNativeChange);\n\n instances.set(selectEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _buildMarkup() {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"fs-dropdown fs-form-select-dropdown\";\n\n const toggle = document.createElement(\"button\");\n toggle.type = \"button\";\n toggle.className = \"fs-form-select\";\n if (this.size === \"sm\" || this.size === \"lg\") {\n toggle.classList.add(`fs-form-select-${this.size}`);\n }\n toggle.disabled = this.selectEl.disabled;\n\n const menu = document.createElement(\"div\");\n menu.className = \"fs-dropdown-menu\";\n\n Array.from(this.selectEl.options).forEach((option) => {\n const item = document.createElement(\"button\");\n item.type = \"button\";\n item.className = \"fs-dropdown-item\";\n item.setAttribute(\"role\", \"option\");\n item.textContent = option.textContent;\n if (option.disabled) item.classList.add(\"is-disabled\");\n menu.appendChild(item);\n });\n\n this.selectEl.insertAdjacentElement(\"afterend\", wrapper);\n wrapper.appendChild(toggle);\n wrapper.appendChild(menu);\n\n this.selectEl.style.display = \"none\";\n this.wrapperEl = wrapper;\n this.toggleEl = toggle;\n this.menuEl = menu;\n }\n\n _syncFromNativeSelect() {\n const selectedOption = this.selectEl.options[this.selectEl.selectedIndex];\n this.toggleEl.textContent = selectedOption ? selectedOption.textContent : \"\";\n\n Array.from(this.menuEl.children).forEach((item, index) => {\n const isSelected = index === this.selectEl.selectedIndex;\n item.classList.toggle(\"is-active\", isSelected);\n item.setAttribute(\"aria-selected\", String(isSelected));\n });\n }\n\n _handleItemClick(event) {\n const item = event.target.closest(\".fs-dropdown-item:not(.is-disabled)\");\n if (!item) return;\n\n const index = Array.from(this.menuEl.children).indexOf(item);\n this.selectEl.selectedIndex = index;\n this._syncFromNativeSelect();\n\n this.selectEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n this.selectEl.dispatchEvent(\n new CustomEvent(\"fs:select:changed\", { bubbles: true, detail: { value: this.selectEl.value } }),\n );\n }\n\n _handleNativeChange() {\n this._syncFromNativeSelect();\n }\n\n show() {\n this.dropdown.show();\n }\n\n hide() {\n this.dropdown.hide();\n }\n\n toggle() {\n this.dropdown.toggle();\n }\n\n dispose() {\n this.dropdown.dispose();\n this.menuEl.removeEventListener(\"click\", this._handleItemClick);\n this.selectEl.removeEventListener(\"change\", this._handleNativeChange);\n this.wrapperEl.remove();\n this.selectEl.style.display = this._originalDisplay;\n instances.delete(this.selectEl);\n }\n}\n\nautoInit(\"select\", Select);\n", "import { collapse, expand } from \"./core/transition.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Accordion {\n constructor(accordionEl) {\n this.accordionEl = accordionEl;\n this.exclusive = accordionEl.getAttribute(\"data-multiple\") !== \"true\" && accordionEl.getAttribute(\"data-fs-always-open\") !== \"true\";\n this.alwaysOpen = accordionEl.getAttribute(\"data-fs-always-open\") === \"true\";\n this.items = [];\n\n const buttons = Array.from(accordionEl.querySelectorAll(\".fs-accordion-button\"));\n\n buttons.forEach((button) => {\n const panel = button.closest(\".fs-accordion-item\").querySelector(\".fs-accordion-collapse\");\n\n idCounter += 1;\n if (!panel.id) panel.id = `fokus-accordion-panel-${idCounter}`;\n if (!button.id) button.id = `fokus-accordion-button-${idCounter}`;\n\n button.setAttribute(\"aria-controls\", panel.id);\n panel.setAttribute(\"role\", \"region\");\n panel.setAttribute(\"aria-labelledby\", button.id);\n\n const startsOpen = button.getAttribute(\"aria-expanded\") === \"true\";\n button.setAttribute(\"aria-expanded\", String(startsOpen));\n if (!startsOpen) {\n panel.style.display = \"none\";\n }\n panel.hidden = !startsOpen;\n\n const entry = { button, panel, handleClick: () => this._toggle(entry) };\n this.items.push(entry);\n button.addEventListener(\"click\", entry.handleClick);\n });\n\n instances.set(accordionEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _toggle(entry) {\n const isOpen = entry.button.getAttribute(\"aria-expanded\") === \"true\";\n\n if (isOpen) {\n if (this.alwaysOpen) return;\n this._close(entry);\n return;\n }\n\n if (this.exclusive) {\n this.items\n .filter((other) => other !== entry && other.button.getAttribute(\"aria-expanded\") === \"true\")\n .forEach((other) => this._close(other));\n }\n\n this._open(entry);\n }\n\n _open(entry) {\n entry.button.dispatchEvent(new CustomEvent(\"fs:show\", { bubbles: true }));\n entry.button.setAttribute(\"aria-expanded\", \"true\");\n entry.panel.hidden = false;\n expand(entry.panel).then(() => {\n entry.button.dispatchEvent(new CustomEvent(\"fs:shown\", { bubbles: true }));\n entry.button.dispatchEvent(new CustomEvent(\"fs:accordion:shown\", { bubbles: true }));\n });\n }\n\n _close(entry) {\n entry.button.dispatchEvent(new CustomEvent(\"fs:hide\", { bubbles: true }));\n entry.button.setAttribute(\"aria-expanded\", \"false\");\n collapse(entry.panel).then(() => {\n entry.panel.hidden = true;\n entry.button.dispatchEvent(new CustomEvent(\"fs:hidden\", { bubbles: true }));\n entry.button.dispatchEvent(new CustomEvent(\"fs:accordion:hidden\", { bubbles: true }));\n });\n }\n\n dispose() {\n this.items.forEach((entry) => entry.button.removeEventListener(\"click\", entry.handleClick));\n instances.delete(this.accordionEl);\n }\n}\n\nautoInit(\"accordion\", Accordion);\n", "import { collapse, expand } from \"./core/transition.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Collapse {\n constructor(triggerEl) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const collapseEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!collapseEl) {\n throw new Error(\"FokusStyles.Collapse: elemento n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.collapseEl = collapseEl;\n this.isOpen = triggerEl.getAttribute(\"aria-expanded\") === \"true\";\n\n idCounter += 1;\n if (!collapseEl.id) collapseEl.id = `fokus-collapse-${idCounter}`;\n triggerEl.setAttribute(\"aria-controls\", collapseEl.id);\n triggerEl.setAttribute(\"aria-expanded\", String(this.isOpen));\n\n if (!this.isOpen) {\n collapseEl.style.display = \"none\";\n }\n\n this._handleClick = () => this.toggle();\n triggerEl.addEventListener(\"click\", this._handleClick);\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"true\");\n expand(this.collapseEl).then(() => {\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:collapse:shown\", { bubbles: true }));\n });\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"false\");\n collapse(this.collapseEl).then(() => {\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:collapse:hidden\", { bubbles: true }));\n });\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.triggerEl.removeEventListener(\"click\", this._handleClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"collapse\", Collapse);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nlet idCounter = 0;\n\nexport class Tabs {\n constructor(tablistEl) {\n this.tablistEl = tablistEl;\n this.tabs = Array.from(tablistEl.querySelectorAll(\".fs-nav-link\"));\n this.manualActivation = tablistEl.getAttribute(\"data-tabs-activation\") === \"manual\";\n\n tablistEl.setAttribute(\"role\", \"tablist\");\n\n this.tabs.forEach((tab) => {\n const isActive = tab.classList.contains(\"is-active\");\n\n idCounter += 1;\n if (!tab.id) tab.id = `fokus-tab-${idCounter}`;\n\n tab.setAttribute(\"role\", \"tab\");\n tab.setAttribute(\"aria-selected\", String(isActive));\n tab.setAttribute(\"tabindex\", isActive ? \"0\" : \"-1\");\n\n const paneSelector = tab.getAttribute(\"data-fs-target\");\n const pane = paneSelector ? document.querySelector(paneSelector) : null;\n\n if (pane) {\n pane.setAttribute(\"role\", \"tabpanel\");\n pane.setAttribute(\"aria-labelledby\", tab.id);\n pane.setAttribute(\"tabindex\", \"0\");\n pane.hidden = !isActive;\n }\n });\n\n this._handleClick = this._handleClick.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n\n tablistEl.addEventListener(\"click\", this._handleClick);\n tablistEl.addEventListener(\"keydown\", this._handleKeydown);\n\n instances.set(tablistEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleClick(event) {\n const tab = event.target.closest(\".fs-nav-link:not(.is-disabled)\");\n if (!tab || !this.tabs.includes(tab)) return;\n this.show(tab);\n }\n\n _handleKeydown(event) {\n const enabledTabs = this.tabs.filter((tab) => !tab.classList.contains(\"is-disabled\"));\n const currentIndex = enabledTabs.indexOf(document.activeElement);\n if (currentIndex === -1) return;\n\n let nextIndex = null;\n if (event.key === \"ArrowRight\") nextIndex = (currentIndex + 1) % enabledTabs.length;\n else if (event.key === \"ArrowLeft\") nextIndex = (currentIndex - 1 + enabledTabs.length) % enabledTabs.length;\n else if (event.key === \"Home\") nextIndex = 0;\n else if (event.key === \"End\") nextIndex = enabledTabs.length - 1;\n\n if (nextIndex === null) return;\n\n event.preventDefault();\n const nextTab = enabledTabs[nextIndex];\n nextTab.focus();\n if (!this.manualActivation) this.show(nextTab);\n }\n\n show(tab) {\n if (tab.classList.contains(\"is-active\")) return;\n\n this.tabs.forEach((otherTab) => {\n const isActive = otherTab === tab;\n\n otherTab.classList.toggle(\"is-active\", isActive);\n otherTab.setAttribute(\"aria-selected\", String(isActive));\n otherTab.setAttribute(\"tabindex\", isActive ? \"0\" : \"-1\");\n\n const paneSelector = otherTab.getAttribute(\"data-fs-target\");\n const pane = paneSelector ? document.querySelector(paneSelector) : null;\n pane?.classList.toggle(\"is-active\", isActive);\n if (pane) pane.hidden = !isActive;\n });\n\n tab.dispatchEvent(\n new CustomEvent(\"fs:tab:changed\", { bubbles: true, detail: { target: tab.getAttribute(\"data-fs-target\") } }),\n );\n }\n\n dispose() {\n this.tablistEl.removeEventListener(\"click\", this._handleClick);\n this.tablistEl.removeEventListener(\"keydown\", this._handleKeydown);\n instances.delete(this.tablistEl);\n }\n}\n\nautoInit(\"tabs\", Tabs);\n", "import { collapse, expand } from \"./core/transition.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Toast {\n constructor(toastEl) {\n this.toastEl = toastEl;\n this.delay = Number(toastEl.getAttribute(\"data-delay\")) || 4000;\n this.autohide = toastEl.getAttribute(\"data-autohide\") !== \"false\";\n this.isOpen = false;\n this._hideTimer = null;\n\n toastEl.setAttribute(\"role\", \"status\");\n toastEl.setAttribute(\"aria-live\", \"polite\");\n toastEl.style.display = \"none\";\n\n this._handleDismissClick = this._handleDismissClick.bind(this);\n toastEl.addEventListener(\"click\", this._handleDismissClick);\n\n instances.set(toastEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleDismissClick(event) {\n if (event.target.closest('[data-fs-dismiss=\"toast\"]')) {\n this.hide();\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:show\", { bubbles: true }));\n this.isOpen = true;\n\n expand(this.toastEl).then(() => {\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:shown\", { bubbles: true }));\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:toast:shown\", { bubbles: true }));\n });\n\n if (this.autohide) {\n this._hideTimer = setTimeout(() => this.hide(), this.delay);\n }\n }\n\n hide() {\n if (!this.isOpen) return;\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:hide\", { bubbles: true }));\n this.isOpen = false;\n\n clearTimeout(this._hideTimer);\n this._hideTimer = null;\n\n collapse(this.toastEl).then(() => {\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:hidden\", { bubbles: true }));\n this.toastEl.dispatchEvent(new CustomEvent(\"fs:toast:hidden\", { bubbles: true }));\n });\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n clearTimeout(this._hideTimer);\n this.toastEl.removeEventListener(\"click\", this._handleDismissClick);\n instances.delete(this.toastEl);\n }\n}\n\nautoInit(\"toast\", Toast);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nconst interactiveSelector = \"a, button, input, select, textarea, label, [contenteditable='true']\";\n\nexport class Carousel {\n constructor(carouselEl) {\n this.carouselEl = carouselEl;\n this.inner = carouselEl.querySelector(\".fs-carousel-inner\");\n this.items = Array.from(carouselEl.querySelectorAll(\".fs-carousel-item\"));\n this.indicators = Array.from(carouselEl.querySelectorAll(\".fs-carousel-indicators button\"));\n this.prevBtn = carouselEl.querySelector(\".fs-carousel-control-prev\");\n this.nextBtn = carouselEl.querySelector(\".fs-carousel-control-next\");\n this.toggleBtn = carouselEl.querySelector(\"[data-fs-carousel-toggle]\");\n this.counterEl = carouselEl.querySelector(\"[data-fs-carousel-counter]\");\n this.progressEl = carouselEl.querySelector(\"[data-fs-carousel-progress]\");\n\n this.interval = Number(carouselEl.getAttribute(\"data-interval\")) || 5000;\n this.autoplay = carouselEl.getAttribute(\"data-autoplay\") === \"true\";\n this.dragEnabled = carouselEl.getAttribute(\"data-drag\") !== \"false\";\n this.timer = null;\n this.userPaused = false;\n this.isHovering = false;\n this.isFocusWithin = false;\n this.drag = null;\n this.isStatic = this.items.length < 2;\n this.index = Math.max(this.items.findIndex((item) => item.classList.contains(\"is-active\")), 0);\n\n carouselEl.setAttribute(\"role\", \"group\");\n carouselEl.setAttribute(\"aria-roledescription\", \"carousel\");\n carouselEl.classList.toggle(\"is-static\", this.isStatic);\n carouselEl.classList.toggle(\"is-two-slides\", this.items.length === 2);\n if (!this.isStatic && !carouselEl.hasAttribute(\"tabindex\")) {\n carouselEl.setAttribute(\"tabindex\", \"0\");\n this.managesTabindex = true;\n }\n\n this._render();\n\n this._handlePrev = () => this.prev();\n this._handleNext = () => this.next();\n this._handleToggle = () => (this.userPaused ? this.play() : this.pause());\n this._handleIndicator = (event) => {\n const index = this.indicators.indexOf(event.currentTarget);\n if (index !== -1) this.goTo(index);\n };\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handlePointerDown = this._handlePointerDown.bind(this);\n this._handlePointerMove = this._handlePointerMove.bind(this);\n this._handlePointerEnd = this._handlePointerEnd.bind(this);\n this._handleVisibilityChange = this._handleVisibilityChange.bind(this);\n this._handleMouseEnter = () => {\n this.isHovering = true;\n this._syncAutoplay();\n };\n this._handleMouseLeave = () => {\n this.isHovering = false;\n this._syncAutoplay();\n };\n this._handleFocusIn = () => {\n this.isFocusWithin = true;\n this._syncAutoplay();\n };\n this._handleFocusOut = () => {\n queueMicrotask(() => {\n this.isFocusWithin = carouselEl.contains(document.activeElement);\n this._syncAutoplay();\n });\n };\n\n this.prevBtn?.addEventListener(\"click\", this._handlePrev);\n this.nextBtn?.addEventListener(\"click\", this._handleNext);\n this.toggleBtn?.addEventListener(\"click\", this._handleToggle);\n this.indicators.forEach((btn) => btn.addEventListener(\"click\", this._handleIndicator));\n carouselEl.addEventListener(\"keydown\", this._handleKeydown);\n carouselEl.addEventListener(\"pointerdown\", this._handlePointerDown);\n carouselEl.addEventListener(\"pointermove\", this._handlePointerMove);\n carouselEl.addEventListener(\"pointerup\", this._handlePointerEnd);\n carouselEl.addEventListener(\"pointercancel\", this._handlePointerEnd);\n carouselEl.addEventListener(\"mouseenter\", this._handleMouseEnter);\n carouselEl.addEventListener(\"mouseleave\", this._handleMouseLeave);\n carouselEl.addEventListener(\"focusin\", this._handleFocusIn);\n carouselEl.addEventListener(\"focusout\", this._handleFocusOut);\n document.addEventListener(\"visibilitychange\", this._handleVisibilityChange);\n\n instances.set(carouselEl, this);\n this._syncAutoplay();\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _isDocumentVisible() {\n return document.visibilityState !== \"hidden\";\n }\n\n _isTemporarilyPaused() {\n return this.isHovering || this.isFocusWithin || !this._isDocumentVisible() || Boolean(this.drag);\n }\n\n _isAutoplayEnabled() {\n return this.autoplay && !this.isStatic && !this.userPaused && !this._isTemporarilyPaused();\n }\n\n _syncAutoplay() {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n if (this._isAutoplayEnabled()) this.timer = setInterval(() => this.next(), this.interval);\n this._syncAutoplayA11y();\n }\n\n _syncAutoplayA11y() {\n if (this.inner) this.inner.setAttribute(\"aria-live\", this.timer ? \"off\" : \"polite\");\n this.carouselEl.classList.toggle(\n \"is-autoplay-paused\",\n this.autoplay && !this.isStatic && !this.timer,\n );\n if (this.progressEl) {\n this.progressEl.style.setProperty(\"--fs-carousel-progress-duration\", `${this.interval}ms`);\n this.progressEl.classList.remove(\"is-running\");\n if (this.timer) {\n void this.progressEl.offsetWidth;\n this.progressEl.classList.add(\"is-running\");\n }\n }\n if (!this.toggleBtn) return;\n\n const isPlaying = this.autoplay && !this.userPaused && !this.isStatic;\n this.toggleBtn.disabled = !this.autoplay || this.isStatic;\n this.toggleBtn.setAttribute(\"aria-pressed\", String(isPlaying));\n this.toggleBtn.setAttribute(\n \"aria-label\",\n isPlaying ? \"Pausar reprodu\u00E7\u00E3o autom\u00E1tica\" : \"Reproduzir reprodu\u00E7\u00E3o autom\u00E1tica\",\n );\n }\n\n _render() {\n if (this.inner && !this.carouselEl.classList.contains(\"fs-carousel-fade\")) {\n this.inner.style.transform = `translate3d(-${this.index * 100}%, 0, 0)`;\n }\n\n this.items.forEach((item, index) => {\n item.classList.toggle(\"is-active\", index === this.index);\n item.setAttribute(\"aria-hidden\", String(index !== this.index));\n item.toggleAttribute(\"inert\", index !== this.index);\n });\n this.indicators.forEach((btn, index) => {\n btn.classList.toggle(\"is-active\", index === this.index);\n btn.setAttribute(\"aria-current\", String(index === this.index));\n });\n if (this.counterEl) this.counterEl.textContent = `${this.index + 1} de ${this.items.length}`;\n this._syncAutoplayA11y();\n }\n\n _goToIndex(nextIndex) {\n const count = this.items.length;\n if (count < 2) return;\n\n const from = this.index;\n const to = ((nextIndex % count) + count) % count;\n if (to === from) return;\n\n this.index = to;\n this._render();\n this.carouselEl.dispatchEvent(\n new CustomEvent(\"fs:carousel:slid\", { bubbles: true, detail: { from, to } }),\n );\n }\n\n next() {\n this._goToIndex(this.index + 1);\n }\n\n prev() {\n this._goToIndex(this.index - 1);\n }\n\n goTo(index) {\n this._goToIndex(index);\n }\n\n pause() {\n if (!this.autoplay) return;\n this.userPaused = true;\n this._syncAutoplay();\n }\n\n play() {\n if (!this.autoplay || this.isStatic) return;\n this.userPaused = false;\n this._syncAutoplay();\n }\n\n _handleKeydown(event) {\n if (event.target !== this.carouselEl) return;\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n this.next();\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n this.prev();\n } else if (event.key === \"Home\") {\n event.preventDefault();\n this.goTo(0);\n } else if (event.key === \"End\") {\n event.preventDefault();\n this.goTo(this.items.length - 1);\n }\n }\n\n _handlePointerDown(event) {\n if (!this.dragEnabled || this.isStatic || this.carouselEl.classList.contains(\"fs-carousel-fade\")) return;\n if (event.isPrimary === false || (event.pointerType === \"mouse\" && event.button !== 0)) return;\n if (event.target.closest?.(interactiveSelector)) return;\n\n this.drag = { id: event.pointerId, startX: event.clientX, startY: event.clientY, deltaX: 0, horizontal: false };\n try {\n this.carouselEl.setPointerCapture?.(event.pointerId);\n } catch {\n // Alguns ambientes de teste n\u00E3o implementam pointer capture.\n }\n this._syncAutoplay();\n }\n\n _handlePointerMove(event) {\n if (!this.drag || event.pointerId !== this.drag.id) return;\n const deltaX = event.clientX - this.drag.startX;\n const deltaY = event.clientY - this.drag.startY;\n\n if (!this.drag.horizontal) {\n if (Math.abs(deltaY) > 8 && Math.abs(deltaY) >= Math.abs(deltaX)) {\n this._clearDrag();\n return;\n }\n if (Math.abs(deltaX) <= 8 || Math.abs(deltaX) < Math.abs(deltaY)) return;\n this.drag.horizontal = true;\n this.carouselEl.classList.add(\"is-dragging\");\n }\n\n this.drag.deltaX = deltaX;\n this.inner.style.transform = `translate3d(calc(-${this.index * 100}% + ${deltaX}px), 0, 0)`;\n event.preventDefault();\n }\n\n _handlePointerEnd(event) {\n if (!this.drag || event.pointerId !== this.drag.id) return;\n const { deltaX, horizontal } = this.drag;\n this._clearDrag();\n this._render();\n if (event.type === \"pointercancel\" || !horizontal) return;\n\n const width = this.carouselEl.getBoundingClientRect().width;\n const threshold = Math.min(80, Math.max(40, width * 0.12));\n if (Math.abs(deltaX) < threshold) return;\n if (deltaX < 0) this.next();\n else this.prev();\n }\n\n _clearDrag() {\n if (!this.drag) return;\n try {\n if (this.carouselEl.hasPointerCapture?.(this.drag.id)) this.carouselEl.releasePointerCapture(this.drag.id);\n } catch {\n // Pointer capture pode j\u00E1 ter sido liberado pelo navegador.\n }\n this.drag = null;\n this.carouselEl.classList.remove(\"is-dragging\");\n this._syncAutoplay();\n }\n\n _handleVisibilityChange() {\n this._syncAutoplay();\n }\n\n dispose() {\n this.userPaused = true;\n this._clearDrag();\n this._syncAutoplay();\n this.prevBtn?.removeEventListener(\"click\", this._handlePrev);\n this.nextBtn?.removeEventListener(\"click\", this._handleNext);\n this.toggleBtn?.removeEventListener(\"click\", this._handleToggle);\n this.indicators.forEach((btn) => btn.removeEventListener(\"click\", this._handleIndicator));\n this.carouselEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.carouselEl.removeEventListener(\"pointerdown\", this._handlePointerDown);\n this.carouselEl.removeEventListener(\"pointermove\", this._handlePointerMove);\n this.carouselEl.removeEventListener(\"pointerup\", this._handlePointerEnd);\n this.carouselEl.removeEventListener(\"pointercancel\", this._handlePointerEnd);\n this.carouselEl.removeEventListener(\"mouseenter\", this._handleMouseEnter);\n this.carouselEl.removeEventListener(\"mouseleave\", this._handleMouseLeave);\n this.carouselEl.removeEventListener(\"focusin\", this._handleFocusIn);\n this.carouselEl.removeEventListener(\"focusout\", this._handleFocusOut);\n document.removeEventListener(\"visibilitychange\", this._handleVisibilityChange);\n if (this.managesTabindex) this.carouselEl.removeAttribute(\"tabindex\");\n instances.delete(this.carouselEl);\n }\n}\n\nautoInit(\"carousel\", Carousel);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Stepper {\n constructor(stepperEl) {\n this.stepperEl = stepperEl;\n this.steps = Array.from(stepperEl.querySelectorAll(\".fs-step\"));\n this.linear = stepperEl.getAttribute(\"data-linear\") !== \"false\";\n\n const contentPanels = Array.from(stepperEl.querySelectorAll(\".fs-step-panel\"));\n this.panels = this.steps.map((step, i) =>\n step.dataset.fsTarget ? stepperEl.querySelector(step.dataset.fsTarget) : contentPanels[i],\n );\n\n this.prevBtn = stepperEl.querySelector('[data-stepper=\"prev\"]');\n this.nextBtn = stepperEl.querySelector('[data-stepper=\"next\"]');\n this.finished = false;\n\n this.current = Math.max(\n this.steps.findIndex((step) => step.classList.contains(\"fs-step-active\")),\n 0,\n );\n\n this.steps.forEach((step, i) => {\n step.setAttribute(\"role\", \"listitem\");\n step.handleClick = () => this._onStepClick(i);\n step.addEventListener(\"click\", step.handleClick);\n step.handleKeydown = (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this._onStepClick(i);\n }\n };\n step.addEventListener(\"keydown\", step.handleKeydown);\n });\n\n this._handlePrev = () => this.prev();\n this._handleNext = () => this.next();\n this.prevBtn?.addEventListener(\"click\", this._handlePrev);\n this.nextBtn?.addEventListener(\"click\", this._handleNext);\n\n this._render();\n instances.set(stepperEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _onStepClick(index) {\n // Modo linear: s\u00F3 permite voltar para passos j\u00E1 conclu\u00EDdos (ou o atual).\n if (this.linear && index > this.current) return;\n this.goTo(index);\n }\n\n _render() {\n this.steps.forEach((step, i) => {\n const isActive = i === this.current && !this.finished;\n const isCompleted = i < this.current || this.finished;\n\n step.classList.toggle(\"fs-step-active\", isActive);\n step.classList.toggle(\"fs-step-completed\", isCompleted);\n step.setAttribute(\"aria-current\", isActive ? \"step\" : \"false\");\n\n const clickable = this.linear ? isCompleted : true;\n step.classList.toggle(\"fs-step-clickable\", clickable);\n step.setAttribute(\"tabindex\", clickable ? \"0\" : \"-1\");\n\n const panel = this.panels[i];\n if (panel) panel.classList.toggle(\"is-active\", i === this.current);\n });\n\n if (this.prevBtn) this.prevBtn.disabled = this.current === 0 && !this.finished;\n }\n\n _change(to) {\n const from = this.current;\n const target = Math.max(0, Math.min(to, this.steps.length - 1));\n if (target === from && !this.finished) return false;\n\n const before = new CustomEvent(\"fs:stepper:beforechange\", {\n bubbles: true,\n cancelable: true,\n detail: { from, to: target },\n });\n this.stepperEl.dispatchEvent(before);\n if (before.defaultPrevented) return false;\n\n this.finished = false;\n this.current = target;\n this._render();\n\n this.stepperEl.dispatchEvent(\n new CustomEvent(\"fs:stepper:changed\", { bubbles: true, detail: { from, to: target } }),\n );\n return true;\n }\n\n next() {\n if (this.current < this.steps.length - 1) return this._change(this.current + 1);\n return this.complete();\n }\n\n prev() {\n return this._change(this.current - 1);\n }\n\n goTo(index) {\n return this._change(index);\n }\n\n setError(index, hasError = true) {\n const step = this.steps[index];\n if (step) step.classList.toggle(\"fs-step-error\", hasError);\n }\n\n complete() {\n const before = new CustomEvent(\"fs:stepper:beforechange\", {\n bubbles: true,\n cancelable: true,\n detail: { from: this.current, to: this.current, completing: true },\n });\n this.stepperEl.dispatchEvent(before);\n if (before.defaultPrevented) return false;\n\n this.finished = true;\n this._render();\n this.stepperEl.dispatchEvent(new CustomEvent(\"fs:stepper:completed\", { bubbles: true }));\n return true;\n }\n\n dispose() {\n this.steps.forEach((step) => {\n step.removeEventListener(\"click\", step.handleClick);\n step.removeEventListener(\"keydown\", step.handleKeydown);\n });\n this.prevBtn?.removeEventListener(\"click\", this._handlePrev);\n this.nextBtn?.removeEventListener(\"click\", this._handleNext);\n instances.delete(this.stepperEl);\n }\n}\n\nautoInit(\"stepper\", Stepper);\n", "import { Dropdown } from \"./dropdown.js\";\nimport { Tooltip } from \"./tooltip.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Breadcrumb {\n constructor(listEl, options = {}) {\n this.listEl = listEl;\n this.maxItems = Number(options.maxItems ?? listEl.getAttribute(\"data-max-items\") ?? 4);\n this.items = Array.from(listEl.children).filter((el) => el.classList.contains(\"fs-breadcrumb-item\"));\n this.isCollapsed = false;\n this._moreItem = null;\n this._dropdown = null;\n // Abaixo do breakpoint `sm` (scss/settings/_breakpoints.scss, 640px). Por\n // inst\u00E2ncia (em vez de m\u00F3dulo) para poder ser mockado por teste e para o\n // listener ser removido de forma isolada em dispose().\n this._collapseQuery = window.matchMedia(\"(max-width: 639.98px)\");\n\n this._setupTruncation();\n\n this._handleMediaChange = () => this._render();\n this._collapseQuery.addEventListener(\"change\", this._handleMediaChange);\n\n this._render();\n\n instances.set(listEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n // Trunca com retic\u00EAncias (CSS) e s\u00F3 anexa tooltip (js/tooltip.js) nos itens\n // cujo texto realmente transborda \u2014 evita tooltip redundante em labels\n // curtos que j\u00E1 cabem inteiros. Mede depois de `document.fonts.ready`: como\n // a tipografia \u00E9 self-hosted (docs/definitions.md, se\u00E7\u00E3o 18.2), medir antes\n // da fonte carregar poderia usar a m\u00E9trica do fallback do sistema e errar o\n // corte.\n _setupTruncation() {\n const targets = this.items.map((item) => item.querySelector(\"a\") ?? item);\n targets.forEach((target) => target.classList.add(\"fs-breadcrumb-item-truncate\"));\n\n const measure = () => {\n targets.forEach((target) => {\n if (target.scrollWidth > target.clientWidth) {\n target.setAttribute(\"data-title\", target.textContent.trim());\n new Tooltip(target);\n }\n });\n };\n\n if (document.fonts?.ready) {\n document.fonts.ready.then(measure);\n } else {\n requestAnimationFrame(measure);\n }\n }\n\n _render() {\n const shouldCollapse = this._collapseQuery.matches && this.items.length > this.maxItems;\n\n if (shouldCollapse === this.isCollapsed) return;\n this.isCollapsed = shouldCollapse;\n\n if (shouldCollapse) {\n this._collapse();\n } else {\n this._expand();\n }\n }\n\n // Mant\u00E9m o primeiro e o \u00FAltimo n\u00EDvel vis\u00EDveis; os intermedi\u00E1rios viram um\n // \u00FAnico item \"\u2026\" com dropdown (mesma composi\u00E7\u00E3o de js/select.js: monta o\n // toggle + `.fs-dropdown-menu` como irm\u00E3os e deixa o Dropdown reposicionar).\n _collapse() {\n const hiddenItems = this.items.slice(1, -1);\n hiddenItems.forEach((item) => {\n item.style.display = \"none\";\n });\n\n const moreItem = document.createElement(\"li\");\n moreItem.className = \"fs-breadcrumb-item\";\n\n const toggle = document.createElement(\"button\");\n toggle.type = \"button\";\n toggle.className = \"fs-breadcrumb-more\";\n toggle.setAttribute(\"aria-label\", \"Mostrar n\u00EDveis ocultos\");\n toggle.textContent = \"\u2026\";\n\n const menu = document.createElement(\"div\");\n menu.className = \"fs-dropdown-menu\";\n\n hiddenItems.forEach((item) => {\n const source = item.querySelector(\"a\") ?? item;\n const isLink = source.tagName === \"A\";\n const link = document.createElement(isLink ? \"a\" : \"span\");\n link.className = \"fs-dropdown-item\";\n link.textContent = source.textContent.trim();\n if (isLink) link.href = source.getAttribute(\"href\");\n menu.appendChild(link);\n });\n\n moreItem.appendChild(toggle);\n moreItem.appendChild(menu);\n this.items[0].insertAdjacentElement(\"afterend\", moreItem);\n\n this._moreItem = moreItem;\n this._dropdown = new Dropdown(toggle);\n }\n\n _expand() {\n this.items.slice(1, -1).forEach((item) => {\n item.style.removeProperty(\"display\");\n });\n\n this._dropdown?.dispose();\n this._dropdown = null;\n\n this._moreItem?.remove();\n this._moreItem = null;\n }\n\n dispose() {\n this._collapseQuery.removeEventListener(\"change\", this._handleMediaChange);\n this._expand();\n instances.delete(this.listEl);\n }\n}\n\nautoInit(\"breadcrumb\", Breadcrumb);\n", "import { Toast } from \"./toast.js\";\nimport { computePosition, applyPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction escapeHtml(value) {\n const div = document.createElement(\"div\");\n div.textContent = value == null ? \"\" : String(value);\n return div.innerHTML;\n}\n\nfunction formatTime(time) {\n const date = new Date(time);\n const hh = String(date.getHours()).padStart(2, \"0\");\n const mm = String(date.getMinutes()).padStart(2, \"0\");\n return `${hh}:${mm}`;\n}\n\n// Notification Center (Etapa 10): n\u00E3o \u00E9 um \"componente visual\" novo \u2014 orquestra\n// m\u00FAltiplas inst\u00E2ncias de FokusStyles.Toast (js/toast.js) e mant\u00E9m um hist\u00F3rico. Um\n// `push()` cria um toast na hora (mesma marca\u00E7\u00E3o de mockup/accordion-tabs-toast)\n// e registra a notifica\u00E7\u00E3o; o painel (posicionado como o Dropdown, via\n// js/core/positioning.js) lista o hist\u00F3rico, com contador de n\u00E3o-lidas no\n// gatilho. Persist\u00EAncia opcional em localStorage (`data-storage=\"local\"`).\nexport class NotificationCenter {\n constructor(triggerEl, options = {}) {\n const panelSelector = options.target ?? triggerEl.getAttribute(\"data-fs-target\");\n const panelEl = panelSelector ? document.querySelector(panelSelector) : null;\n\n if (!panelEl) {\n throw new Error(\"FokusStyles.NotificationCenter: painel n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.panelEl = panelEl;\n this.storage = options.storage ?? triggerEl.getAttribute(\"data-storage\") ?? \"memory\";\n this.storageKey = options.storageKey ?? triggerEl.getAttribute(\"data-storage-key\") ?? \"fokus-notifications\";\n\n const containerSelector = options.toastContainer ?? triggerEl.getAttribute(\"data-toast-container\");\n this.toastContainer = containerSelector ? document.querySelector(containerSelector) : this._ensureToastContainer();\n\n this.isOpen = false;\n this._outsideClickCleanup = null;\n this.history = this._load();\n\n this.badgeEl = triggerEl.querySelector(\".fs-notification-badge\");\n this.listEl = panelEl.querySelector(\".fs-notification-list\");\n this.emptyEl = panelEl.querySelector(\".fs-notification-empty\");\n\n document.body.appendChild(this.panelEl);\n\n triggerEl.setAttribute(\"aria-haspopup\", \"dialog\");\n triggerEl.setAttribute(\"aria-expanded\", \"false\");\n if (panelEl.id) triggerEl.setAttribute(\"aria-controls\", panelEl.id);\n if (!panelEl.getAttribute(\"role\")) panelEl.setAttribute(\"role\", \"region\");\n if (!panelEl.getAttribute(\"aria-label\")) panelEl.setAttribute(\"aria-label\", \"Notifica\u00E7\u00F5es\");\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handlePanelClick = this._handlePanelClick.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n panelEl.addEventListener(\"click\", this._handlePanelClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.close();\n this.triggerEl.focus();\n }\n });\n\n this._render();\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _ensureToastContainer() {\n let container = document.querySelector(\".fs-toast-container\");\n if (!container) {\n container = document.createElement(\"div\");\n container.className = \"fs-toast-container\";\n document.body.appendChild(container);\n }\n return container;\n }\n\n _load() {\n if (this.storage !== \"local\") return [];\n try {\n return JSON.parse(localStorage.getItem(this.storageKey)) || [];\n } catch {\n return [];\n }\n }\n\n _persist() {\n if (this.storage !== \"local\") return;\n try {\n localStorage.setItem(this.storageKey, JSON.stringify(this.history));\n } catch {\n // Cota cheia ou storage indispon\u00EDvel: hist\u00F3rico segue em mem\u00F3ria.\n }\n }\n\n get unreadCount() {\n return this.history.filter((record) => !record.read).length;\n }\n\n // Empilha um toast e registra a notifica\u00E7\u00E3o. Retorna o id do registro.\n push(options = {}) {\n const { title = \"\", body = \"\", variant = \"primary\", autohide = true, delay } = options;\n\n idCounter += 1;\n const record = { id: `n-${idCounter}`, title, body, variant, time: Date.now(), read: this.isOpen };\n this.history.unshift(record);\n this._persist();\n this._render();\n\n this._showToast({ title, body, variant, autohide, delay });\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:pushed\", { bubbles: true, detail: { record } }));\n return record.id;\n }\n\n _showToast({ title, body, variant, autohide, delay }) {\n const toastEl = document.createElement(\"div\");\n toastEl.className = `fs-toast fs-toast-${variant}`;\n if (delay != null) toastEl.setAttribute(\"data-delay\", String(delay));\n if (!autohide) toastEl.setAttribute(\"data-autohide\", \"false\");\n toastEl.innerHTML = `\n <div class=\"fs-toast-header\">\n <span>${escapeHtml(title)}</span>\n <button type=\"button\" class=\"fs-btn-close\" data-fs-dismiss=\"toast\" aria-label=\"Fechar\"></button>\n </div>\n ${body ? `<div class=\"fs-toast-body\">${escapeHtml(body)}</div>` : \"\"}\n `;\n this.toastContainer.appendChild(toastEl);\n\n const toast = new Toast(toastEl);\n toastEl.addEventListener(\"fs:toast:hidden\", () => {\n toast.dispose();\n toastEl.remove();\n });\n toast.show();\n }\n\n remove(id) {\n this.history = this.history.filter((record) => record.id !== id);\n this._persist();\n this._render();\n }\n\n clear() {\n this.history = [];\n this._persist();\n this._render();\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:cleared\", { bubbles: true }));\n }\n\n getAll() {\n return this.history.slice();\n }\n\n _updateBadge() {\n if (!this.badgeEl) return;\n const count = this.unreadCount;\n this.badgeEl.textContent = String(count);\n this.badgeEl.toggleAttribute(\"hidden\", count === 0);\n }\n\n _render() {\n if (this.listEl) {\n this.listEl.innerHTML = this.history\n .map(\n (record) => `\n <li class=\"fs-notification-item fs-notification-item-${record.variant}${record.read ? \"\" : \" fs-notification-item-unread\"}\" data-id=\"${record.id}\">\n <div class=\"fs-notification-item-content\">\n <p class=\"fs-notification-item-title\">${escapeHtml(record.title)}</p>\n ${record.body ? `<p class=\"fs-notification-item-text\">${escapeHtml(record.body)}</p>` : \"\"}\n <span class=\"fs-notification-item-time\">${formatTime(record.time)}</span>\n </div>\n <button type=\"button\" class=\"fs-btn-close\" data-notification-dismiss aria-label=\"Remover notifica\u00E7\u00E3o\"></button>\n </li>`,\n )\n .join(\"\");\n }\n this.emptyEl?.toggleAttribute(\"hidden\", this.history.length > 0);\n this._updateBadge();\n }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handlePanelClick(event) {\n if (event.target.closest('[data-notification=\"clear\"]')) {\n this.clear();\n return;\n }\n\n const dismissBtn = event.target.closest(\"[data-notification-dismiss]\");\n if (dismissBtn) {\n const id = dismissBtn.closest(\".fs-notification-item\")?.dataset.id;\n if (id) this.remove(id);\n }\n }\n\n open() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.triggerEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.panelEl.setAttribute(\"data-theme\", theme);\n } else {\n this.panelEl.removeAttribute(\"data-theme\");\n }\n\n this.panelEl.classList.add(\"is-open\");\n\n const position = computePosition(this.triggerEl, this.panelEl, {\n placement: \"bottom\",\n align: \"end\",\n offset: 4,\n });\n applyPosition(this.panelEl, position);\n\n this.triggerEl.setAttribute(\"aria-expanded\", \"true\");\n\n // Abrir = ler tudo.\n this.history.forEach((record) => {\n record.read = true;\n });\n this._persist();\n this._render();\n\n this._outsideClickCleanup = onClickOutside(this.panelEl, (event) => {\n if (this.triggerEl.contains(event.target)) return;\n this.close();\n });\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:opened\", { bubbles: true }));\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.panelEl.classList.remove(\"is-open\");\n this.panelEl.style.removeProperty(\"position\");\n this.panelEl.style.removeProperty(\"top\");\n this.panelEl.style.removeProperty(\"left\");\n this.triggerEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:notification:closed\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n dispose() {\n this.close();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.panelEl.removeEventListener(\"click\", this._handlePanelClick);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"notification-center\", NotificationCenter);\n", "import { computePosition, applyPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Itens foc\u00E1veis de um n\u00EDvel de menu: `.fs-dropdown-item` diretos (folhas) e o\n// item de cada `.fs-dropdown-submenu` (que abre o pr\u00F3ximo n\u00EDvel). Ignora\n// divisores/headers e itens desabilitados.\nfunction levelItems(menuEl) {\n const items = [];\n for (const child of menuEl.children) {\n let item = null;\n if (child.classList.contains(\"fs-dropdown-item\")) {\n item = child;\n } else if (child.classList.contains(\"fs-dropdown-submenu\")) {\n item = child.querySelector(\":scope > .fs-dropdown-item\");\n }\n if (item && !item.classList.contains(\"is-disabled\")) items.push(item);\n }\n return items;\n}\n\nfunction isSubmenuParent(item) {\n return item.classList.contains(\"fs-dropdown-item-submenu\");\n}\n\n// Nested Menu (Etapa 10): Dropdown com submenus recursivos. Reaproveita a\n// marca\u00E7\u00E3o/estilo do Dropdown (`.fs-dropdown-menu`/`.fs-dropdown-item`); cada submenu\n// \u00E9 um `.fs-dropdown-menu` dentro de um `.fs-dropdown-submenu`. Hover abre por CSS\n// (scss/components/_nested-menu.scss); aqui ficam clique, teclado (setas entre\n// n\u00EDveis) e o flip de borda. Componente pr\u00F3prio (n\u00E3o estende o Dropdown) porque\n// a navega\u00E7\u00E3o por teclado \u00E9 por n\u00EDvel, n\u00E3o linear sobre todos os itens.\nexport class NestedMenu {\n constructor(toggleEl, options = {}) {\n const targetSelector = toggleEl.getAttribute(\"data-fs-target\");\n const rootMenu = targetSelector ? document.querySelector(targetSelector) : toggleEl.nextElementSibling;\n\n if (!rootMenu) {\n throw new Error(\"FokusStyles.NestedMenu: elemento do menu n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.toggleEl = toggleEl;\n this.rootMenu = rootMenu;\n this.placement = options.placement ?? toggleEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.align = options.align ?? toggleEl.getAttribute(\"data-align\") ?? \"start\";\n this.isOpen = false;\n this._outsideClickCleanup = null;\n\n document.body.appendChild(this.rootMenu);\n\n this.toggleEl.setAttribute(\"aria-haspopup\", \"menu\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n this.rootMenu.setAttribute(\"role\", \"menu\");\n this.rootMenu.querySelectorAll(\".fs-dropdown-menu\").forEach((menu) => menu.setAttribute(\"role\", \"menu\"));\n this.rootMenu.querySelectorAll(\".fs-dropdown-item-submenu\").forEach((item) => {\n item.setAttribute(\"aria-haspopup\", \"menu\");\n item.setAttribute(\"aria-expanded\", \"false\");\n });\n\n this._handleToggleClick = this._handleToggleClick.bind(this);\n this._handleMenuClick = this._handleMenuClick.bind(this);\n this._handleMenuKeydown = this._handleMenuKeydown.bind(this);\n this._handleMenuMouseover = this._handleMenuMouseover.bind(this);\n\n this.toggleEl.addEventListener(\"click\", this._handleToggleClick);\n this.rootMenu.addEventListener(\"click\", this._handleMenuClick);\n this.rootMenu.addEventListener(\"keydown\", this._handleMenuKeydown);\n this.rootMenu.addEventListener(\"mouseover\", this._handleMenuMouseover);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.hide();\n this.toggleEl.focus();\n }\n });\n\n instances.set(toggleEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _submenuOf(parentItem) {\n const submenu = parentItem.nextElementSibling;\n return submenu && submenu.classList.contains(\"fs-dropdown-menu\") ? submenu : null;\n }\n\n _applyFlip(parentItem) {\n const submenu = this._submenuOf(parentItem);\n if (!submenu) return;\n\n const rect = parentItem.getBoundingClientRect();\n const width = submenu.offsetWidth || 180;\n const viewportWidth = document.documentElement.clientWidth;\n parentItem.parentElement.classList.toggle(\"fs-dropdown-submenu-left\", rect.right + width > viewportWidth);\n }\n\n _openSubmenu(parentItem, focusFirst) {\n const submenu = this._submenuOf(parentItem);\n if (!submenu) return;\n\n // Fecha submenus irm\u00E3os abertos no mesmo n\u00EDvel (s\u00F3 um por n\u00EDvel).\n const level = parentItem.closest(\".fs-dropdown-menu\");\n level.querySelectorAll(\":scope > .fs-dropdown-submenu > .fs-dropdown-menu.is-open\").forEach((sibling) => {\n if (sibling !== submenu) {\n sibling.classList.remove(\"is-open\");\n sibling.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n }\n });\n\n this._applyFlip(parentItem);\n submenu.classList.add(\"is-open\");\n parentItem.setAttribute(\"aria-expanded\", \"true\");\n if (focusFirst) levelItems(submenu)[0]?.focus();\n }\n\n _closeSubmenu(parentItem) {\n const submenu = this._submenuOf(parentItem);\n if (!submenu) return;\n\n submenu.querySelectorAll(\".fs-dropdown-menu.is-open\").forEach((nested) => {\n nested.classList.remove(\"is-open\");\n nested.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n });\n submenu.classList.remove(\"is-open\");\n parentItem.parentElement.classList.remove(\"fs-dropdown-submenu-left\");\n parentItem.setAttribute(\"aria-expanded\", \"false\");\n }\n\n _closeAllSubmenus() {\n this.rootMenu.querySelectorAll(\".fs-dropdown-menu.is-open\").forEach((submenu) => {\n submenu.classList.remove(\"is-open\");\n submenu.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n });\n this.rootMenu.querySelectorAll(\".fs-dropdown-submenu-left\").forEach((wrapper) => wrapper.classList.remove(\"fs-dropdown-submenu-left\"));\n }\n\n _handleToggleClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handleMenuClick(event) {\n const item = event.target.closest(\".fs-dropdown-item\");\n if (!item || item.classList.contains(\"is-disabled\")) return;\n\n if (isSubmenuParent(item)) {\n event.preventDefault();\n if (this._submenuOf(item)?.classList.contains(\"is-open\")) {\n this._closeSubmenu(item);\n } else {\n this._openSubmenu(item, false);\n }\n return;\n }\n\n // Folha: fecha o menu inteiro e devolve o foco ao gatilho.\n this.hide();\n this.toggleEl.focus();\n }\n\n _handleMenuMouseover(event) {\n const hoveredParent = event.target.closest(\".fs-dropdown-item-submenu\");\n\n // Fecha submenus abertos por teclado (`.is-open`) que n\u00E3o est\u00E3o no caminho do\n // item sob o mouse, pra hover e teclado n\u00E3o deixarem dois ramos abertos.\n this.rootMenu.querySelectorAll(\".fs-dropdown-menu.is-open\").forEach((submenu) => {\n if (!submenu.contains(event.target) && submenu !== hoveredParent?.nextElementSibling) {\n submenu.classList.remove(\"is-open\");\n submenu.previousElementSibling?.setAttribute(\"aria-expanded\", \"false\");\n }\n });\n\n if (hoveredParent) this._applyFlip(hoveredParent);\n }\n\n _handleMenuKeydown(event) {\n const active = document.activeElement;\n if (!active?.classList?.contains(\"fs-dropdown-item\")) return;\n\n const menu = active.closest(\".fs-dropdown-menu\");\n const items = levelItems(menu);\n const index = items.indexOf(active);\n const parentWrapper = menu.parentElement;\n const inSubmenu = parentWrapper?.classList.contains(\"fs-dropdown-submenu\");\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n items[(index + 1) % items.length]?.focus();\n break;\n case \"ArrowUp\":\n event.preventDefault();\n items[(index - 1 + items.length) % items.length]?.focus();\n break;\n case \"ArrowRight\":\n if (isSubmenuParent(active)) {\n event.preventDefault();\n this._openSubmenu(active, true);\n }\n break;\n case \"ArrowLeft\":\n if (inSubmenu) {\n event.preventDefault();\n const parentItem = parentWrapper.querySelector(\":scope > .fs-dropdown-item\");\n this._closeSubmenu(parentItem);\n parentItem.focus();\n }\n break;\n case \"Enter\":\n case \" \":\n if (isSubmenuParent(active)) {\n event.preventDefault();\n if (this._submenuOf(active)?.classList.contains(\"is-open\")) {\n this._closeSubmenu(active);\n } else {\n this._openSubmenu(active, true);\n }\n }\n break;\n case \"Escape\":\n if (inSubmenu) {\n event.preventDefault();\n event.stopPropagation();\n const parentItem = parentWrapper.querySelector(\":scope > .fs-dropdown-item\");\n this._closeSubmenu(parentItem);\n parentItem.focus();\n } else {\n event.preventDefault();\n this.hide();\n this.toggleEl.focus();\n }\n break;\n default:\n break;\n }\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.toggleEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.rootMenu.setAttribute(\"data-theme\", theme);\n } else {\n this.rootMenu.removeAttribute(\"data-theme\");\n }\n\n this.rootMenu.classList.add(\"is-open\");\n\n const position = computePosition(this.toggleEl, this.rootMenu, {\n placement: this.placement,\n align: this.align,\n offset: 4,\n });\n applyPosition(this.rootMenu, position);\n\n this.toggleEl.setAttribute(\"aria-expanded\", \"true\");\n levelItems(this.rootMenu)[0]?.focus();\n\n this._outsideClickCleanup = onClickOutside(this.rootMenu, (event) => {\n if (this.toggleEl.contains(event.target)) return;\n this.hide();\n });\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:nested-menu:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this._closeAllSubmenus();\n this.rootMenu.classList.remove(\"is-open\");\n this.rootMenu.style.removeProperty(\"position\");\n this.rootMenu.style.removeProperty(\"top\");\n this.rootMenu.style.removeProperty(\"left\");\n this.toggleEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.toggleEl.dispatchEvent(new CustomEvent(\"fs:nested-menu:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.toggleEl.removeEventListener(\"click\", this._handleToggleClick);\n this.rootMenu.removeEventListener(\"click\", this._handleMenuClick);\n this.rootMenu.removeEventListener(\"keydown\", this._handleMenuKeydown);\n this.rootMenu.removeEventListener(\"mouseover\", this._handleMenuMouseover);\n instances.delete(this.toggleEl);\n }\n}\n\nautoInit(\"nested-menu\", NestedMenu);\n", "import { computePosition, applyPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction uniqueId(prefix) {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nexport class Combobox {\n constructor(inputEl, options = {}) {\n const targetSelector = inputEl.getAttribute(\"data-fs-target\");\n const listboxEl = targetSelector ? document.querySelector(targetSelector) : inputEl.nextElementSibling;\n\n if (!listboxEl) {\n throw new Error(\"FokusStyles.Combobox: listbox n\u00E3o encontrada (data-fs-target).\");\n }\n\n this.inputEl = inputEl;\n this.listboxEl = listboxEl;\n this.placement = options.placement ?? inputEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.isOpen = false;\n this.activeIndex = -1;\n this.value = null;\n this._outsideClickCleanup = null;\n\n if (!this.listboxEl.id) this.listboxEl.id = uniqueId(\"fs-combobox-listbox\");\n\n document.body.appendChild(this.listboxEl);\n\n this.inputEl.setAttribute(\"role\", \"combobox\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n this.inputEl.setAttribute(\"aria-autocomplete\", \"list\");\n this.inputEl.setAttribute(\"aria-controls\", this.listboxEl.id);\n this.inputEl.setAttribute(\"autocomplete\", \"off\");\n this.listboxEl.setAttribute(\"role\", \"listbox\");\n\n this._getOptions().forEach((option) => {\n if (!option.id) option.id = uniqueId(\"fs-combobox-option\");\n option.setAttribute(\"role\", \"option\");\n option.setAttribute(\"aria-selected\", \"false\");\n });\n\n this._handleInput = this._handleInput.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleOptionMousedown = this._handleOptionMousedown.bind(this);\n this._handleOptionClick = this._handleOptionClick.bind(this);\n\n this.inputEl.addEventListener(\"input\", this._handleInput);\n this.inputEl.addEventListener(\"keydown\", this._handleKeydown);\n this.listboxEl.addEventListener(\"mousedown\", this._handleOptionMousedown);\n this.listboxEl.addEventListener(\"click\", this._handleOptionClick);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) this.hide();\n });\n\n instances.set(inputEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _getOptions() {\n return Array.from(this.listboxEl.querySelectorAll(\".fs-dropdown-item\"));\n }\n\n _getSelectableOptions() {\n return this._getOptions().filter(\n (option) => !option.hidden && !option.hasAttribute(\"data-fs-empty\") && !option.classList.contains(\"is-disabled\"),\n );\n }\n\n _filter(query) {\n const normalized = query.trim().toLowerCase();\n\n this._getOptions().forEach((option) => {\n if (option.hasAttribute(\"data-fs-empty\")) return;\n option.hidden = normalized.length > 0 && !option.textContent.toLowerCase().includes(normalized);\n });\n\n const emptyEl = this.listboxEl.querySelector(\"[data-fs-empty]\");\n if (emptyEl) emptyEl.hidden = this._getSelectableOptions().length > 0;\n }\n\n _setActiveIndex(index) {\n const options = this._getSelectableOptions();\n if (options.length === 0) {\n this.activeIndex = -1;\n this.inputEl.removeAttribute(\"aria-activedescendant\");\n return;\n }\n\n const previous = options[this.activeIndex];\n previous?.classList.remove(\"is-active\");\n\n this.activeIndex = ((index % options.length) + options.length) % options.length;\n const current = options[this.activeIndex];\n current.classList.add(\"is-active\");\n current.scrollIntoView({ block: \"nearest\" });\n this.inputEl.setAttribute(\"aria-activedescendant\", current.id);\n }\n\n _selectOption(option) {\n const label = option.textContent.trim();\n this.value = option.getAttribute(\"data-value\") ?? label;\n this.inputEl.value = label;\n\n this._getOptions().forEach((item) => item.setAttribute(\"aria-selected\", String(item === option)));\n\n this.hide();\n this.inputEl.focus();\n\n this.inputEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n this.inputEl.dispatchEvent(\n new CustomEvent(\"fs:combobox:changed\", { bubbles: true, detail: { value: this.value, label } }),\n );\n }\n\n _handleInput() {\n this._filter(this.inputEl.value);\n this.show();\n this._setActiveIndex(-1);\n }\n\n _handleKeydown(event) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (!this.isOpen) {\n this.show();\n } else {\n this._setActiveIndex(this.activeIndex + 1);\n }\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!this.isOpen) {\n this.show();\n } else {\n this._setActiveIndex(this.activeIndex - 1);\n }\n } else if (event.key === \"Home\" && this.isOpen) {\n event.preventDefault();\n this._setActiveIndex(0);\n } else if (event.key === \"End\" && this.isOpen) {\n event.preventDefault();\n this._setActiveIndex(this._getSelectableOptions().length - 1);\n } else if (event.key === \"Enter\") {\n if (this.isOpen && this.activeIndex >= 0) {\n event.preventDefault();\n this._selectOption(this._getSelectableOptions()[this.activeIndex]);\n }\n }\n }\n\n _handleOptionMousedown(event) {\n // Impede que o input perca foco antes do `click` do item ser processado\n // (perder foco fecharia a listbox via `onClickOutside` antes da sele\u00E7\u00E3o).\n if (event.target.closest(\".fs-dropdown-item\")) event.preventDefault();\n }\n\n _handleOptionClick(event) {\n const option = event.target.closest(\".fs-dropdown-item:not(.is-disabled)\");\n if (!option || option.hasAttribute(\"data-fs-empty\")) return;\n\n this._selectOption(option);\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.inputEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.listboxEl.setAttribute(\"data-theme\", theme);\n } else {\n this.listboxEl.removeAttribute(\"data-theme\");\n }\n\n this.listboxEl.classList.add(\"is-open\");\n this.listboxEl.style.width = `${this.inputEl.offsetWidth}px`;\n\n const position = computePosition(this.inputEl, this.listboxEl, {\n placement: this.placement,\n align: \"start\",\n offset: 4,\n });\n applyPosition(this.listboxEl, position);\n\n this.inputEl.setAttribute(\"aria-expanded\", \"true\");\n\n this._outsideClickCleanup = onClickOutside(this.listboxEl, (event) => {\n if (this.inputEl.contains(event.target)) return;\n this.hide();\n });\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:combobox:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this._getSelectableOptions()[this.activeIndex]?.classList.remove(\"is-active\");\n this.activeIndex = -1;\n this.inputEl.removeAttribute(\"aria-activedescendant\");\n\n this.listboxEl.classList.remove(\"is-open\");\n this.listboxEl.style.removeProperty(\"position\");\n this.listboxEl.style.removeProperty(\"top\");\n this.listboxEl.style.removeProperty(\"left\");\n this.listboxEl.style.removeProperty(\"width\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:combobox:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.inputEl.removeEventListener(\"input\", this._handleInput);\n this.inputEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.listboxEl.removeEventListener(\"mousedown\", this._handleOptionMousedown);\n this.listboxEl.removeEventListener(\"click\", this._handleOptionClick);\n instances.delete(this.inputEl);\n }\n}\n\nautoInit(\"combobox\", Combobox);\n", "import { computePosition, applyPosition, watchPosition } from \"./core/positioning.js\";\nimport { onClickOutside } from \"./core/overlay.js\";\nimport { onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nconst WEEKDAY_FORMATTER = new Intl.DateTimeFormat(\"pt-BR\", { weekday: \"narrow\" });\nconst HEADER_FORMATTER = new Intl.DateTimeFormat(\"pt-BR\", { month: \"long\", year: \"numeric\" });\n\nlet idCounter = 0;\n\nfunction uniqueId(prefix) {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nfunction pad(value) {\n return String(value).padStart(2, \"0\");\n}\n\nfunction toISO(date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nfunction toDisplay(date) {\n return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${date.getFullYear()}`;\n}\n\nfunction parseDisplay(value) {\n const match = value.trim().match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (!match) return null;\n\n const [, day, month, year] = match;\n const date = new Date(Number(year), Number(month) - 1, Number(day));\n if (Number.isNaN(date.getTime())) return null;\n return date.getFullYear() === Number(year) && date.getMonth() === Number(month) - 1 && date.getDate() === Number(day)\n ? date\n : null;\n}\n\nfunction isSameDay(a, b) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\nfunction buildMonthCells(viewDate) {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstWeekday = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n const cells = [];\n\n for (let i = firstWeekday - 1; i >= 0; i -= 1) {\n const day = daysInPrevMonth - i;\n const prevMonth = month === 0 ? 11 : month - 1;\n cells.push({ year: month === 0 ? year - 1 : year, month: prevMonth, day, outside: true });\n }\n\n for (let day = 1; day <= daysInMonth; day += 1) {\n cells.push({ year, month, day, outside: false });\n }\n\n let nextDay = 1;\n while (cells.length % 7 !== 0) {\n const nextMonth = month === 11 ? 0 : month + 1;\n cells.push({ year: month === 11 ? year + 1 : year, month: nextMonth, day: nextDay, outside: true });\n nextDay += 1;\n }\n\n return cells;\n}\n\nexport class Datepicker {\n constructor(inputEl, options = {}) {\n const targetSelector = inputEl.getAttribute(\"data-fs-target\");\n const panelEl = targetSelector ? document.querySelector(targetSelector) : inputEl.nextElementSibling;\n\n if (!panelEl) {\n throw new Error(\"FokusStyles.Datepicker: painel n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.inputEl = inputEl;\n this.panelEl = panelEl;\n this.placement = options.placement ?? inputEl.getAttribute(\"data-placement\") ?? \"bottom\";\n this.isOpen = false;\n this._suppressNextFocus = false;\n\n const initial = parseDisplay(inputEl.value);\n this.selectedDate = initial;\n this.viewDate = initial ? new Date(initial) : new Date();\n this.value = initial ? toISO(initial) : null;\n this._outsideClickCleanup = null;\n this._positionCleanup = null;\n this._originalParent = panelEl.parentNode;\n this._originalNextSibling = panelEl.nextSibling;\n\n if (!this.panelEl.id) this.panelEl.id = uniqueId(\"fs-datepicker-panel\");\n\n document.body.appendChild(this.panelEl);\n\n // `role=\"combobox\"` \u00E9 obrigat\u00F3rio aqui: `aria-expanded` n\u00E3o \u00E9 permitido\n // no role impl\u00EDcito de `<input type=\"text\">` (\"textbox\"), s\u00F3 em roles\n // como combobox/button \u2014 sem isso o axe reprova (aria-allowed-attr).\n this.inputEl.setAttribute(\"role\", \"combobox\");\n this.inputEl.setAttribute(\"aria-haspopup\", \"grid\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n this.inputEl.setAttribute(\"aria-controls\", this.panelEl.id);\n this.inputEl.setAttribute(\"autocomplete\", \"off\");\n\n this.panelEl.classList.add(\"fs-datepicker-panel\");\n this.panelEl.innerHTML =\n '<div class=\"fs-datepicker-header\">' +\n '<button type=\"button\" class=\"fs-datepicker-nav\" data-fs-datepicker-prev aria-label=\"M\u00EAs anterior\">\u2039</button>' +\n '<span class=\"fs-datepicker-title\" aria-live=\"polite\"></span>' +\n '<button type=\"button\" class=\"fs-datepicker-nav\" data-fs-datepicker-next aria-label=\"Pr\u00F3ximo m\u00EAs\">\u203A</button>' +\n \"</div>\" +\n '<div class=\"fs-datepicker-grid\" role=\"grid\"></div>';\n\n this.titleEl = this.panelEl.querySelector(\".fs-datepicker-title\");\n this.gridEl = this.panelEl.querySelector(\".fs-datepicker-grid\");\n this.prevBtn = this.panelEl.querySelector(\"[data-fs-datepicker-prev]\");\n this.nextBtn = this.panelEl.querySelector(\"[data-fs-datepicker-next]\");\n\n this._handleInputFocus = this._handleInputFocus.bind(this);\n this._handleInputKeydown = this._handleInputKeydown.bind(this);\n this._handleInputChange = this._handleInputChange.bind(this);\n this._handlePrev = this._handlePrev.bind(this);\n this._handleNext = this._handleNext.bind(this);\n this._handleGridClick = this._handleGridClick.bind(this);\n this._handleGridKeydown = this._handleGridKeydown.bind(this);\n\n this.inputEl.addEventListener(\"focus\", this._handleInputFocus);\n this.inputEl.addEventListener(\"keydown\", this._handleInputKeydown);\n this.inputEl.addEventListener(\"change\", this._handleInputChange);\n this.prevBtn.addEventListener(\"click\", this._handlePrev);\n this.nextBtn.addEventListener(\"click\", this._handleNext);\n this.gridEl.addEventListener(\"click\", this._handleGridClick);\n this.gridEl.addEventListener(\"keydown\", this._handleGridKeydown);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) {\n this.hide();\n this._refocusInputWithoutReopening();\n }\n });\n\n instances.set(inputEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleInputFocus() {\n // Depois de selecionar uma data ou fechar com Escape, devolvemos o foco\n // pro input programaticamente \u2014 sem essa guarda, o pr\u00F3prio `.focus()`\n // disparia este handler de novo e reabriria o painel na hora.\n if (this._suppressNextFocus) {\n this._suppressNextFocus = false;\n return;\n }\n\n this.show();\n }\n\n _refocusInputWithoutReopening() {\n this._suppressNextFocus = true;\n this.inputEl.focus();\n }\n\n // O foco fica no input ao abrir (ver `_handleInputFocus`) \u2014 sem este\n // handler, `ArrowDown`/`ArrowUp` n\u00E3o teriam efeito nenhum, porque o\n // keydown do grid (`_handleGridKeydown`) s\u00F3 reage quando o foco real j\u00E1\n // est\u00E1 num bot\u00E3o de dia. `ArrowDown` move o foco pro dia \"tab\u00E1vel\";\n // depois disso, o keydown do pr\u00F3prio grid assume a navega\u00E7\u00E3o.\n _handleInputKeydown(event) {\n if (event.key !== \"ArrowDown\" && event.key !== \"ArrowUp\") return;\n\n event.preventDefault();\n if (!this.isOpen) this.show();\n this._focusTabbable();\n }\n\n _handleInputChange() {\n const parsed = parseDisplay(this.inputEl.value);\n if (!parsed) return;\n\n this.selectedDate = parsed;\n this.viewDate = new Date(parsed);\n this.value = toISO(parsed);\n if (this.isOpen) this._render();\n }\n\n _handlePrev(event) {\n event.preventDefault();\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() - 1, 1);\n this._render();\n }\n\n _handleNext(event) {\n event.preventDefault();\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() + 1, 1);\n this._render();\n }\n\n _handleGridClick(event) {\n const day = event.target.closest(\".fs-datepicker-day:not(:disabled)\");\n if (!day) return;\n\n this._selectDate(new Date(Number(day.dataset.year), Number(day.dataset.month), Number(day.dataset.day)));\n }\n\n _handleGridKeydown(event) {\n const current = event.target.closest(\".fs-datepicker-day\");\n if (!current) return;\n\n const currentDate = new Date(Number(current.dataset.year), Number(current.dataset.month), Number(current.dataset.day));\n let nextDate = null;\n\n switch (event.key) {\n case \"ArrowRight\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n case \"ArrowLeft\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() - 1);\n break;\n case \"ArrowDown\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case \"ArrowUp\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() - 7);\n break;\n case \"Home\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() - nextDate.getDay());\n break;\n case \"End\":\n nextDate = new Date(currentDate);\n nextDate.setDate(nextDate.getDate() + (6 - nextDate.getDay()));\n break;\n case \"PageUp\":\n nextDate = event.shiftKey\n ? new Date(currentDate.getFullYear() - 1, currentDate.getMonth(), currentDate.getDate())\n : new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, currentDate.getDate());\n break;\n case \"PageDown\":\n nextDate = event.shiftKey\n ? new Date(currentDate.getFullYear() + 1, currentDate.getMonth(), currentDate.getDate())\n : new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, currentDate.getDate());\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n this._selectDate(currentDate);\n return;\n default:\n return;\n }\n\n event.preventDefault();\n this._moveTo(nextDate);\n }\n\n _moveTo(date) {\n const sameMonth = date.getFullYear() === this.viewDate.getFullYear() && date.getMonth() === this.viewDate.getMonth();\n if (!sameMonth) this.viewDate = new Date(date.getFullYear(), date.getMonth(), 1);\n\n this._render(date);\n this._focusTabbable();\n }\n\n _selectDate(date) {\n this.selectedDate = date;\n this.viewDate = new Date(date);\n this.value = toISO(date);\n this.inputEl.value = toDisplay(date);\n\n this.hide();\n this._refocusInputWithoutReopening();\n\n this.inputEl.dispatchEvent(new Event(\"change\", { bubbles: true }));\n this.inputEl.dispatchEvent(\n new CustomEvent(\"fs:datepicker:changed\", { bubbles: true, detail: { value: this.value, date: new Date(date) } }),\n );\n }\n\n _focusTabbable() {\n this.gridEl.querySelector('.fs-datepicker-day[tabindex=\"0\"]')?.focus();\n }\n\n _render(preferredDate) {\n this.titleEl.textContent = HEADER_FORMATTER.format(this.viewDate);\n\n const cells = buildMonthCells(this.viewDate);\n const today = new Date();\n const focusTarget = preferredDate ?? this.selectedDate ?? today;\n\n let tabbable = cells.find((cell) => !cell.outside && isSameDay(new Date(cell.year, cell.month, cell.day), focusTarget));\n if (!tabbable) tabbable = cells.find((cell) => !cell.outside) ?? cells[0];\n\n const weekdaysHtml = Array.from({ length: 7 }, (_, i) => {\n const base = new Date(2024, 0, 7 + i); // 2024-01-07 \u00E9 um domingo \u2014 s\u00F3 uma refer\u00EAncia pra formatar os r\u00F3tulos.\n return `<div class=\"fs-datepicker-weekday\" role=\"columnheader\">${WEEKDAY_FORMATTER.format(base)}</div>`;\n }).join(\"\");\n\n const rows = [];\n for (let i = 0; i < cells.length; i += 7) rows.push(cells.slice(i, i + 7));\n\n const weeksHtml = rows\n .map((row) => {\n const rowHtml = row\n .map((cell) => {\n const cellDate = new Date(cell.year, cell.month, cell.day);\n const isSelected = this.selectedDate ? isSameDay(cellDate, this.selectedDate) : false;\n const isToday = isSameDay(cellDate, today);\n const isTabbable = cell === tabbable;\n const classes = [\"fs-datepicker-day\"];\n if (cell.outside) classes.push(\"is-outside\");\n if (isToday) classes.push(\"is-today\");\n if (isSelected) classes.push(\"is-selected\");\n\n return (\n `<button type=\"button\" class=\"${classes.join(\" \")}\" role=\"gridcell\" ` +\n `tabindex=\"${isTabbable ? \"0\" : \"-1\"}\" aria-selected=\"${isSelected}\" ` +\n `data-year=\"${cell.year}\" data-month=\"${cell.month}\" data-day=\"${cell.day}\">${cell.day}</button>`\n );\n })\n .join(\"\");\n\n return `<div class=\"fs-datepicker-week\" role=\"row\">${rowHtml}</div>`;\n })\n .join(\"\");\n\n this.gridEl.innerHTML = `<div class=\"fs-datepicker-weekdays\" role=\"row\">${weekdaysHtml}</div>${weeksHtml}`;\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.inputEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.panelEl.setAttribute(\"data-theme\", theme);\n } else {\n this.panelEl.removeAttribute(\"data-theme\");\n }\n\n this.panelEl.classList.add(\"is-open\");\n\n const position = computePosition(this.inputEl, this.panelEl, {\n placement: this.placement,\n align: \"start\",\n offset: 4,\n });\n applyPosition(this.panelEl, position);\n this._positionCleanup = watchPosition(this.inputEl, this.panelEl, {\n placement: this.placement,\n align: \"start\",\n offset: 4,\n });\n\n this.inputEl.setAttribute(\"aria-expanded\", \"true\");\n\n this._render(this.selectedDate ?? new Date());\n\n this._outsideClickCleanup = onClickOutside(this.panelEl, (event) => {\n if (this.inputEl.contains(event.target)) return;\n this.hide();\n });\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:datepicker:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.panelEl.classList.remove(\"is-open\");\n this.panelEl.style.removeProperty(\"position\");\n this.panelEl.style.removeProperty(\"top\");\n this.panelEl.style.removeProperty(\"left\");\n this._positionCleanup?.();\n this._positionCleanup = null;\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.inputEl.dispatchEvent(new CustomEvent(\"fs:datepicker:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.inputEl.removeEventListener(\"focus\", this._handleInputFocus);\n this.inputEl.removeEventListener(\"keydown\", this._handleInputKeydown);\n this.inputEl.removeEventListener(\"change\", this._handleInputChange);\n this.prevBtn.removeEventListener(\"click\", this._handlePrev);\n this.nextBtn.removeEventListener(\"click\", this._handleNext);\n this.gridEl.removeEventListener(\"click\", this._handleGridClick);\n this.gridEl.removeEventListener(\"keydown\", this._handleGridKeydown);\n if (this._originalParent) {\n this._originalParent.insertBefore(this.panelEl, this._originalNextSibling);\n }\n instances.delete(this.inputEl);\n }\n}\n\nautoInit(\"datepicker\", Datepicker);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Quantos n\u00FAmeros de p\u00E1gina exibir ao redor da atual (fora prev/next).\nconst PAGE_WINDOW = 5;\n\n// \u00CDcones de anterior/pr\u00F3xima (Lucide chevron-left/chevron-right), embutidos\n// como string em vez de importados de `fokus-styles/icons` \u2014 esse subpath \u00E9\n// opcional, e o m\u00F3dulo JavaScript n\u00E3o pode depender dele em runtime.\n// `aria-hidden` porque o r\u00F3tulo acess\u00EDvel real j\u00E1 vem do `aria-label` do\n// bot\u00E3o (ver `_pageItem`).\nconst ICON_CHEVRON_LEFT =\n '<svg class=\"fs-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"/></svg>';\nconst ICON_CHEVRON_RIGHT =\n '<svg class=\"fs-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\"/></svg>';\n\nfunction compareValues(a, b) {\n const numA = Number(a);\n const numB = Number(b);\n if (a !== \"\" && b !== \"\" && !Number.isNaN(numA) && !Number.isNaN(numB)) {\n return numA - numB;\n }\n return a.localeCompare(b, \"pt-BR\", { sensitivity: \"base\" });\n}\n\nfunction compareTypedValues(a, b, type) {\n if (type === \"date\") {\n return new Date(a).getTime() - new Date(b).getTime();\n }\n if (type === \"number\" || type === \"currency\") {\n const normalize = (value) => Number(String(value).replace(/[^\\d,-]/g, \"\").replace(/\\./g, \"\").replace(\",\", \".\"));\n return normalize(a) - normalize(b);\n }\n return compareValues(a, b);\n}\n\nexport class DataTable {\n constructor(rootEl, options = {}) {\n const tableEl = rootEl.querySelector(\".fs-table\");\n if (!tableEl) {\n throw new Error(\"FokusStyles.DataTable: tabela n\u00E3o encontrada (.fs-table).\");\n }\n\n const tbodyEl = tableEl.querySelector(\"tbody\");\n if (!tbodyEl) {\n throw new Error(\"FokusStyles.DataTable: <tbody> n\u00E3o encontrado.\");\n }\n\n this.rootEl = rootEl;\n this.tableEl = tableEl;\n this.theadEl = tableEl.querySelector(\"thead\");\n this.tbodyEl = tbodyEl;\n this.pageSize = Number(rootEl.getAttribute(\"data-fs-page-size\")) || options.pageSize || 10;\n\n this.filterInput = rootEl.querySelector(\"[data-fs-datatable-filter]\");\n this.emptyEl = rootEl.querySelector(\"[data-fs-datatable-empty]\");\n this.loadingEl = rootEl.querySelector(\"[data-fs-datatable-loading]\");\n this.errorEl = rootEl.querySelector(\"[data-fs-datatable-error]\");\n\n this.paginationEl = rootEl.querySelector(\"[data-fs-datatable-pagination]\");\n if (!this.paginationEl) {\n this.paginationEl = document.createElement(\"nav\");\n this.paginationEl.setAttribute(\"data-fs-datatable-pagination\", \"\");\n this.paginationEl.setAttribute(\"aria-label\", \"Pagina\u00E7\u00E3o da tabela\");\n rootEl.appendChild(this.paginationEl);\n }\n\n this.sortKey = null;\n this.sortDirection = \"none\";\n this.filterQuery = \"\";\n this.currentPage = 1;\n this._loading = false;\n this._error = null;\n this._rows = [];\n this._sortButtons = [];\n\n this._buildSortHeaders();\n this._readRows();\n\n this._handleSortClick = this._handleSortClick.bind(this);\n this._handleFilterInput = this._handleFilterInput.bind(this);\n this._handlePaginationClick = this._handlePaginationClick.bind(this);\n this._handleCellKeydown = this._handleCellKeydown.bind(this);\n this._handleCellFocusIn = this._handleCellFocusIn.bind(this);\n\n if (this.theadEl) this.theadEl.addEventListener(\"click\", this._handleSortClick);\n if (this.filterInput) this.filterInput.addEventListener(\"input\", this._handleFilterInput);\n this.paginationEl.addEventListener(\"click\", this._handlePaginationClick);\n this.tbodyEl.addEventListener(\"keydown\", this._handleCellKeydown);\n this.tbodyEl.addEventListener(\"focusin\", this._handleCellFocusIn);\n\n this._render();\n this.tableEl.setAttribute(\"aria-busy\", \"false\");\n\n instances.set(rootEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n get pageCount() {\n return Math.max(1, Math.ceil(this._matchedRows().length / this.pageSize));\n }\n\n get rowCount() {\n return this._matchedRows().length;\n }\n\n _buildSortHeaders() {\n if (!this.theadEl) return;\n\n this._sortButtons = Array.from(this.theadEl.querySelectorAll(\"th[data-fs-sort]\")).map((th) => {\n const key = th.getAttribute(\"data-fs-sort\");\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = \"fs-datatable-sort-btn\";\n btn.setAttribute(\"data-fs-sort-key\", key);\n while (th.firstChild) btn.appendChild(th.firstChild);\n th.appendChild(btn);\n th.setAttribute(\"aria-sort\", \"none\");\n return { th, key };\n });\n }\n\n _readRows() {\n this._rows = Array.from(this.tbodyEl.querySelectorAll(\":scope > tr\")).map((el, order) => ({\n el,\n order,\n cells: Array.from(el.children).map((cell) => (cell.getAttribute(\"data-fs-sort-value\") ?? cell.textContent).trim()),\n }));\n }\n\n refresh() {\n this._readRows();\n this.currentPage = 1;\n this._render();\n }\n\n _matchedRows() {\n let rows = this._rows;\n\n if (this.filterQuery) {\n const query = this.filterQuery.toLowerCase();\n rows = rows.filter((row) => row.cells.some((cell) => cell.toLowerCase().includes(query)));\n }\n\n if (this.sortKey && this.sortDirection !== \"none\") {\n const th = this._sortButtons.find((entry) => entry.key === this.sortKey)?.th;\n const columnIndex = th ? Array.from(this.theadEl.querySelectorAll(\"th\")).indexOf(th) : -1;\n const type = th?.getAttribute(\"data-fs-sort-type\") ?? \"text\";\n\n if (columnIndex >= 0) {\n const direction = this.sortDirection === \"asc\" ? 1 : -1;\n rows = [...rows].sort((a, b) => direction * compareTypedValues(a.cells[columnIndex] ?? \"\", b.cells[columnIndex] ?? \"\", type));\n }\n } else {\n rows = [...rows].sort((a, b) => a.order - b.order);\n }\n\n return rows;\n }\n\n _nextDirection(key) {\n if (this.sortKey !== key) return \"asc\";\n if (this.sortDirection === \"asc\") return \"desc\";\n if (this.sortDirection === \"desc\") return \"none\";\n return \"asc\";\n }\n\n sort(key, direction = \"asc\") {\n this.sortKey = direction === \"none\" ? null : key;\n this.sortDirection = direction;\n this.currentPage = 1;\n this._render();\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:datatable:sorted\", { bubbles: true, detail: { key: this.sortKey, direction: this.sortDirection } }),\n );\n }\n\n filter(query) {\n this.filterQuery = (query ?? \"\").trim();\n if (this.filterInput) this.filterInput.value = this.filterQuery;\n this.currentPage = 1;\n this._render();\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:datatable:filtered\", { bubbles: true, detail: { query: this.filterQuery, matched: this.rowCount } }),\n );\n }\n\n goToPage(page) {\n const pageCount = this.pageCount;\n const next = Math.min(Math.max(1, page), pageCount);\n if (next === this.currentPage) return;\n\n this.currentPage = next;\n this._render();\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:datatable:paged\", { bubbles: true, detail: { page: this.currentPage, pageCount } }));\n }\n\n setLoading(isLoading) {\n this._loading = Boolean(isLoading);\n this.tableEl.setAttribute(\"aria-busy\", String(this._loading));\n if (this._loading) this._error = null;\n this._syncVisibility();\n }\n\n setError(message) {\n this._error = message || null;\n if (this._error) this._loading = false;\n this.tableEl.setAttribute(\"aria-busy\", String(this._loading));\n if (this.errorEl) {\n const messageEl = this.errorEl.querySelector(\"[data-fs-datatable-error-message]\");\n if (messageEl) messageEl.textContent = this._error ?? \"\";\n }\n this._syncVisibility();\n }\n\n _syncVisibility() {\n const showLoading = this._loading;\n const showError = !this._loading && Boolean(this._error);\n const showTable = !showLoading && !showError;\n\n this.tableEl.hidden = !showTable;\n if (this.filterInput) this.filterInput.disabled = !showTable;\n if (this.loadingEl) this.loadingEl.hidden = !showLoading;\n if (this.errorEl) this.errorEl.hidden = !showError;\n\n if (!showTable) {\n this.paginationEl.hidden = true;\n if (this.emptyEl) this.emptyEl.hidden = true;\n } else {\n this._render();\n }\n }\n\n _render() {\n if (this._loading || this._error) return;\n\n const matched = this._matchedRows();\n const pageCount = Math.max(1, Math.ceil(matched.length / this.pageSize));\n this.currentPage = Math.min(Math.max(1, this.currentPage), pageCount);\n\n const start = (this.currentPage - 1) * this.pageSize;\n const pageRows = matched.slice(start, start + this.pageSize);\n\n // Reordena o DOM na ordem final (filtro + ordena\u00E7\u00E3o + p\u00E1gina) movendo os\n // <tr> existentes em vez de recri\u00E1-los \u2014 preserva listeners/estado de\n // cada linha. As demais linhas (fora da p\u00E1gina ou filtradas) s\u00F3 ficam\n // ocultas, sem sair da \u00E1rvore.\n pageRows.forEach((row) => this.tbodyEl.appendChild(row.el));\n this._rows.forEach((row) => {\n row.el.hidden = !pageRows.includes(row);\n });\n\n const isEmpty = matched.length === 0;\n this.tableEl.hidden = isEmpty && Boolean(this.emptyEl);\n if (this.emptyEl) this.emptyEl.hidden = !isEmpty;\n\n this._renderPagination(pageCount);\n this._syncAriaSort();\n this._resetRovingTabindex();\n }\n\n _syncAriaSort() {\n this._sortButtons.forEach(({ th, key }) => {\n const direction = key === this.sortKey ? this.sortDirection : \"none\";\n th.setAttribute(\"aria-sort\", direction === \"asc\" ? \"ascending\" : direction === \"desc\" ? \"descending\" : \"none\");\n });\n }\n\n _renderPagination(pageCount) {\n this.paginationEl.hidden = pageCount <= 1;\n if (pageCount <= 1) {\n this.paginationEl.innerHTML = \"\";\n return;\n }\n\n const end = Math.min(pageCount, Math.max(PAGE_WINDOW, this.currentPage + Math.floor(PAGE_WINDOW / 2)));\n const start = Math.max(1, end - PAGE_WINDOW + 1);\n\n const items = [this._pageItem(ICON_CHEVRON_LEFT, this.currentPage - 1, this.currentPage === 1, \"P\u00E1gina anterior\")];\n for (let page = start; page <= end; page += 1) {\n items.push(this._pageItem(String(page), page, false, `P\u00E1gina ${page}`, page === this.currentPage));\n }\n items.push(this._pageItem(ICON_CHEVRON_RIGHT, this.currentPage + 1, this.currentPage === pageCount, \"Pr\u00F3xima p\u00E1gina\"));\n\n this.paginationEl.innerHTML = `<ul class=\"fs-pagination\">${items.join(\"\")}</ul>`;\n }\n\n _pageItem(label, page, disabled, ariaLabel, isActive = false) {\n const classes = [\"fs-page-item\"];\n if (disabled) classes.push(\"is-disabled\");\n if (isActive) classes.push(\"is-active\");\n\n return (\n `<li class=\"${classes.join(\" \")}\"><button type=\"button\" class=\"fs-page-link\" data-fs-page=\"${page}\" ` +\n `aria-label=\"${ariaLabel}\"${isActive ? ' aria-current=\"page\"' : \"\"}${disabled ? \" disabled\" : \"\"}>${label}</button></li>`\n );\n }\n\n _handleSortClick(event) {\n const btn = event.target.closest(\"[data-fs-sort-key]\");\n if (!btn) return;\n\n const key = btn.dataset.fsSortKey;\n this.sort(key, this._nextDirection(key));\n }\n\n _handleFilterInput() {\n this.filter(this.filterInput.value);\n }\n\n _handlePaginationClick(event) {\n const btn = event.target.closest(\"[data-fs-page]\");\n if (!btn || btn.disabled) return;\n\n this.goToPage(Number(btn.dataset.fsPage));\n }\n\n _visibleCells() {\n return Array.from(this.tbodyEl.querySelectorAll(\"tr:not([hidden]) > td, tr:not([hidden]) > th\"));\n }\n\n _resetRovingTabindex() {\n this._visibleCells().forEach((cell, index) => cell.setAttribute(\"tabindex\", index === 0 ? \"0\" : \"-1\"));\n }\n\n _handleCellFocusIn(event) {\n const cell = event.target.closest(\"td, th\");\n if (!cell || cell.parentElement.hidden) return;\n\n this._visibleCells().forEach((c) => c.setAttribute(\"tabindex\", c === cell ? \"0\" : \"-1\"));\n }\n\n _handleCellKeydown(event) {\n const cell = event.target.closest(\"td, th\");\n if (!cell) return;\n\n const rows = Array.from(this.tbodyEl.querySelectorAll(\"tr:not([hidden])\"));\n const rowIndex = rows.indexOf(cell.parentElement);\n if (rowIndex === -1) return;\n\n const cellsInRow = Array.from(cell.parentElement.children);\n const colIndex = cellsInRow.indexOf(cell);\n const lastRow = rows[rows.length - 1];\n\n let target = null;\n switch (event.key) {\n case \"ArrowRight\":\n target = cellsInRow[colIndex + 1];\n break;\n case \"ArrowLeft\":\n target = cellsInRow[colIndex - 1];\n break;\n case \"ArrowDown\":\n target = rows[rowIndex + 1]?.children[colIndex];\n break;\n case \"ArrowUp\":\n target = rows[rowIndex - 1]?.children[colIndex];\n break;\n case \"Home\":\n target = event.ctrlKey ? rows[0]?.children[0] : cellsInRow[0];\n break;\n case \"End\":\n target = event.ctrlKey ? lastRow?.children[lastRow.children.length - 1] : cellsInRow[cellsInRow.length - 1];\n break;\n default:\n return;\n }\n\n if (!target) return;\n event.preventDefault();\n target.focus();\n }\n\n dispose() {\n if (this.theadEl) this.theadEl.removeEventListener(\"click\", this._handleSortClick);\n if (this.filterInput) this.filterInput.removeEventListener(\"input\", this._handleFilterInput);\n this.paginationEl.removeEventListener(\"click\", this._handlePaginationClick);\n this.tbodyEl.removeEventListener(\"keydown\", this._handleCellKeydown);\n this.tbodyEl.removeEventListener(\"focusin\", this._handleCellFocusIn);\n instances.delete(this.rootEl);\n }\n}\n\nautoInit(\"datatable\", DataTable);\n", "import { lockScroll, unlockScroll, onClickOutside } from \"./core/overlay.js\";\nimport { createFocusTrap, onEscapeKey } from \"./core/focus.js\";\nimport { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction uniqueId(prefix) {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nfunction parseShortcut(spec) {\n const parts = spec.toLowerCase().split(\"+\").map((part) => part.trim());\n return {\n mod: parts.includes(\"mod\"),\n shift: parts.includes(\"shift\"),\n alt: parts.includes(\"alt\"),\n key: parts[parts.length - 1],\n };\n}\n\nfunction matchesShortcut(event, shortcut) {\n const modPressed = event.ctrlKey || event.metaKey;\n return (\n event.key.toLowerCase() === shortcut.key &&\n shortcut.mod === modPressed &&\n shortcut.shift === event.shiftKey &&\n shortcut.alt === event.altKey\n );\n}\n\n// Command Palette: combina o filtro/navega\u00E7\u00E3o do Combobox (`.fs-dropdown-item`\n// reaproveitado da listbox) com o overlay/focus trap do Modal \u2014 mas \u00E9\n// componente pr\u00F3prio (n\u00E3o estende nenhum dos dois) porque a combina\u00E7\u00E3o\n// espec\u00EDfica (di\u00E1logo sempre com listbox vis\u00EDvel + atalho global) n\u00E3o\n// corresponde a nenhum dos dois padr\u00F5es isoladamente.\nexport class CommandPalette {\n constructor(triggerEl, options = {}) {\n const targetSelector = triggerEl.getAttribute(\"data-fs-target\");\n const paletteEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n if (!paletteEl) {\n throw new Error(\"FokusStyles.CommandPalette: painel n\u00E3o encontrado (data-fs-target).\");\n }\n\n this.triggerEl = triggerEl;\n this.paletteEl = paletteEl;\n this.dialogEl = paletteEl.querySelector(\".fs-command-palette-dialog\") ?? paletteEl;\n this.inputEl = paletteEl.querySelector(\".fs-command-palette-input\");\n this.listEl = paletteEl.querySelector(\".fs-command-palette-list\");\n this.isOpen = false;\n this.activeIndex = -1;\n this._focusTrap = null;\n this._outsideClickCleanup = null;\n\n if (!this.listEl.id) this.listEl.id = uniqueId(\"fs-command-palette-listbox\");\n\n paletteEl.setAttribute(\"role\", \"dialog\");\n paletteEl.setAttribute(\"aria-modal\", \"true\");\n\n this.inputEl.setAttribute(\"role\", \"combobox\");\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n this.inputEl.setAttribute(\"aria-autocomplete\", \"list\");\n this.inputEl.setAttribute(\"aria-controls\", this.listEl.id);\n this.inputEl.setAttribute(\"autocomplete\", \"off\");\n this.listEl.setAttribute(\"role\", \"listbox\");\n\n this._getItems().forEach((item) => {\n if (!item.id) item.id = uniqueId(\"fs-command-palette-option\");\n item.setAttribute(\"role\", \"option\");\n item.setAttribute(\"aria-selected\", \"false\");\n });\n\n this._handleTriggerClick = this._handleTriggerClick.bind(this);\n this._handleInput = this._handleInput.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleItemMousedown = this._handleItemMousedown.bind(this);\n this._handleItemClick = this._handleItemClick.bind(this);\n this._handleGlobalShortcut = this._handleGlobalShortcut.bind(this);\n\n triggerEl.addEventListener(\"click\", this._handleTriggerClick);\n this.inputEl.addEventListener(\"input\", this._handleInput);\n this.inputEl.addEventListener(\"keydown\", this._handleKeydown);\n this.listEl.addEventListener(\"mousedown\", this._handleItemMousedown);\n this.listEl.addEventListener(\"click\", this._handleItemClick);\n\n const shortcut = options.shortcut ?? triggerEl.getAttribute(\"data-fs-shortcut\");\n this._shortcut = shortcut ? parseShortcut(shortcut) : null;\n if (this._shortcut) document.addEventListener(\"keydown\", this._handleGlobalShortcut);\n\n this._removeEscapeListener = onEscapeKey(() => {\n if (this.isOpen) this.hide();\n });\n\n instances.set(triggerEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _getItems() {\n return Array.from(this.listEl.querySelectorAll(\".fs-dropdown-item\"));\n }\n\n _getSelectableItems() {\n return this._getItems().filter((item) => !item.hidden && !item.hasAttribute(\"data-fs-empty\") && !item.classList.contains(\"is-disabled\"));\n }\n\n _filter(query) {\n const normalized = query.trim().toLowerCase();\n\n this._getItems().forEach((item) => {\n if (item.hasAttribute(\"data-fs-empty\")) return;\n item.hidden = normalized.length > 0 && !item.textContent.toLowerCase().includes(normalized);\n });\n\n const emptyEl = this.listEl.querySelector(\"[data-fs-empty]\");\n if (emptyEl) emptyEl.hidden = this._getSelectableItems().length > 0;\n }\n\n _setActiveIndex(index) {\n const items = this._getSelectableItems();\n if (items.length === 0) {\n this.activeIndex = -1;\n this.inputEl.removeAttribute(\"aria-activedescendant\");\n return;\n }\n\n const previous = items[this.activeIndex];\n previous?.classList.remove(\"is-active\");\n\n this.activeIndex = ((index % items.length) + items.length) % items.length;\n const current = items[this.activeIndex];\n current.classList.add(\"is-active\");\n current.scrollIntoView({ block: \"nearest\" });\n this.inputEl.setAttribute(\"aria-activedescendant\", current.id);\n }\n\n _selectItem(item) {\n const label = item.textContent.trim();\n const value = item.getAttribute(\"data-value\") ?? label;\n\n this.hide();\n\n this.triggerEl.dispatchEvent(\n new CustomEvent(\"fs:command-palette:selected\", { bubbles: true, detail: { value, label } }),\n );\n }\n\n _handleTriggerClick(event) {\n event.preventDefault();\n this.toggle();\n }\n\n _handleInput() {\n this._filter(this.inputEl.value);\n this._setActiveIndex(0);\n }\n\n _handleKeydown(event) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n this._setActiveIndex(this.activeIndex + 1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n this._setActiveIndex(this.activeIndex - 1);\n } else if (event.key === \"Enter\") {\n if (this.activeIndex >= 0) {\n event.preventDefault();\n this._selectItem(this._getSelectableItems()[this.activeIndex]);\n }\n }\n }\n\n _handleItemMousedown(event) {\n if (event.target.closest(\".fs-dropdown-item\")) event.preventDefault();\n }\n\n _handleItemClick(event) {\n const item = event.target.closest(\".fs-dropdown-item:not(.is-disabled)\");\n if (!item || item.hasAttribute(\"data-fs-empty\")) return;\n\n this._selectItem(item);\n }\n\n _handleGlobalShortcut(event) {\n if (!matchesShortcut(event, this._shortcut)) return;\n event.preventDefault();\n this.toggle();\n }\n\n show() {\n if (this.isOpen) return;\n this.isOpen = true;\n\n const theme = this.triggerEl.closest(\"[data-theme]\")?.getAttribute(\"data-theme\");\n if (theme) {\n this.paletteEl.setAttribute(\"data-theme\", theme);\n } else {\n this.paletteEl.removeAttribute(\"data-theme\");\n }\n\n this.paletteEl.classList.add(\"is-open\");\n lockScroll();\n\n this.inputEl.value = \"\";\n this._filter(\"\");\n this._setActiveIndex(0);\n this.inputEl.setAttribute(\"aria-expanded\", \"true\");\n\n this._focusTrap = createFocusTrap(this.dialogEl);\n this._focusTrap.activate();\n\n this._outsideClickCleanup = onClickOutside(this.dialogEl, () => this.hide());\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:command-palette:shown\", { bubbles: true }));\n }\n\n hide() {\n if (!this.isOpen) return;\n this.isOpen = false;\n\n this.paletteEl.classList.remove(\"is-open\");\n unlockScroll();\n this.inputEl.setAttribute(\"aria-expanded\", \"false\");\n\n this._focusTrap?.deactivate();\n this._focusTrap = null;\n\n this._outsideClickCleanup?.();\n this._outsideClickCleanup = null;\n\n this.triggerEl.focus();\n\n this.triggerEl.dispatchEvent(new CustomEvent(\"fs:command-palette:hidden\", { bubbles: true }));\n }\n\n toggle() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n dispose() {\n this.hide();\n this._removeEscapeListener();\n this.triggerEl.removeEventListener(\"click\", this._handleTriggerClick);\n this.inputEl.removeEventListener(\"input\", this._handleInput);\n this.inputEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.listEl.removeEventListener(\"mousedown\", this._handleItemMousedown);\n this.listEl.removeEventListener(\"click\", this._handleItemClick);\n if (this._shortcut) document.removeEventListener(\"keydown\", this._handleGlobalShortcut);\n instances.delete(this.triggerEl);\n }\n}\n\nautoInit(\"command-palette\", CommandPalette);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\n// Tree View: padr\u00E3o WAI-ARIA Tree View\n// (https://www.w3.org/WAI/ARIA/apg/patterns/treeview/). Cada n\u00F3 \u00E9 um `<li\n// role=\"treeitem\">` com `<span class=\"fs-tree-label\">` (obrigat\u00F3rio) seguido,\n// se houver filhos, de um `<ul>`/`<ol>` (`role=\"group\"`, auto-anexado) \u2014\n// o bot\u00E3o `.fs-tree-toggle` \u00E9 injetado automaticamente pelo JS nos n\u00F3s com\n// filhos, igual ao bot\u00E3o de ordena\u00E7\u00E3o do DataTable.\nexport class TreeView {\n constructor(rootEl) {\n this.rootEl = rootEl;\n rootEl.setAttribute(\"role\", \"tree\");\n\n this._setupItems();\n\n this._handleClick = this._handleClick.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleFocusIn = this._handleFocusIn.bind(this);\n\n rootEl.addEventListener(\"click\", this._handleClick);\n rootEl.addEventListener(\"keydown\", this._handleKeydown);\n rootEl.addEventListener(\"focusin\", this._handleFocusIn);\n\n this._resetRovingTabindex();\n\n instances.set(rootEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _setupItems() {\n Array.from(this.rootEl.querySelectorAll(\"li\")).forEach((li) => {\n li.setAttribute(\"role\", \"treeitem\");\n\n const group = this._group(li);\n if (!group) return;\n\n group.setAttribute(\"role\", \"group\");\n if (!li.hasAttribute(\"aria-expanded\")) li.setAttribute(\"aria-expanded\", \"false\");\n group.hidden = li.getAttribute(\"aria-expanded\") !== \"true\";\n\n const label = li.querySelector(\":scope > .fs-tree-label\") ?? li;\n if (!label.querySelector(\":scope > .fs-tree-toggle\")) {\n const toggle = document.createElement(\"span\");\n toggle.className = \"fs-tree-toggle\";\n toggle.setAttribute(\"aria-hidden\", \"true\");\n label.insertBefore(toggle, label.firstChild);\n }\n });\n }\n\n _group(item) {\n return item.querySelector(\":scope > ul, :scope > ol\");\n }\n\n _isExpanded(item) {\n return item.getAttribute(\"aria-expanded\") === \"true\";\n }\n\n _isVisible(item) {\n let group = item.parentElement.closest('[role=\"group\"]');\n while (group) {\n if (group.hidden) return false;\n group = group.parentElement.closest('[role=\"group\"]');\n }\n return true;\n }\n\n _visibleItems() {\n return Array.from(this.rootEl.querySelectorAll('[role=\"treeitem\"]')).filter((item) => this._isVisible(item));\n }\n\n _resetRovingTabindex() {\n const items = this._visibleItems();\n const current = items.find((item) => item.getAttribute(\"tabindex\") === \"0\") ?? items[0];\n items.forEach((item) => item.setAttribute(\"tabindex\", item === current ? \"0\" : \"-1\"));\n }\n\n expand(item) {\n const group = this._group(item);\n if (!group || this._isExpanded(item)) return;\n\n item.setAttribute(\"aria-expanded\", \"true\");\n group.hidden = false;\n this._resetRovingTabindex();\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:tree:expanded\", { bubbles: true, detail: { item } }));\n }\n\n collapse(item) {\n const group = this._group(item);\n if (!group || !this._isExpanded(item)) return;\n\n item.setAttribute(\"aria-expanded\", \"false\");\n group.hidden = true;\n this._resetRovingTabindex();\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:tree:collapsed\", { bubbles: true, detail: { item } }));\n }\n\n toggle(item) {\n if (this._isExpanded(item)) {\n this.collapse(item);\n } else {\n this.expand(item);\n }\n }\n\n select(item) {\n this.rootEl.querySelectorAll('[aria-selected=\"true\"]').forEach((el) => el.setAttribute(\"aria-selected\", \"false\"));\n item.setAttribute(\"aria-selected\", \"true\");\n\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:tree:selected\", { bubbles: true, detail: { value: item.dataset.value ?? item.textContent.trim(), item } }),\n );\n }\n\n _handleClick(event) {\n const item = event.target.closest('[role=\"treeitem\"]');\n if (!item) return;\n\n if (this._group(item)) this.toggle(item);\n this.select(item);\n item.focus();\n }\n\n _handleFocusIn(event) {\n const item = event.target.closest('[role=\"treeitem\"]');\n if (!item || !this._isVisible(item)) return;\n\n this._visibleItems().forEach((el) => el.setAttribute(\"tabindex\", el === item ? \"0\" : \"-1\"));\n }\n\n _handleKeydown(event) {\n const item = event.target.closest('[role=\"treeitem\"]');\n if (!item) return;\n\n const items = this._visibleItems();\n const index = items.indexOf(item);\n const group = this._group(item);\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n items[index + 1]?.focus();\n break;\n case \"ArrowUp\":\n event.preventDefault();\n items[index - 1]?.focus();\n break;\n case \"ArrowRight\":\n event.preventDefault();\n if (group) {\n if (this._isExpanded(item)) items[index + 1]?.focus();\n else this.expand(item);\n }\n break;\n case \"ArrowLeft\":\n event.preventDefault();\n if (group && this._isExpanded(item)) {\n this.collapse(item);\n } else {\n item.parentElement.closest('[role=\"treeitem\"]')?.focus();\n }\n break;\n case \"Home\":\n event.preventDefault();\n items[0]?.focus();\n break;\n case \"End\":\n event.preventDefault();\n items[items.length - 1]?.focus();\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n if (group) this.toggle(item);\n this.select(item);\n break;\n default:\n return;\n }\n }\n\n dispose() {\n this.rootEl.removeEventListener(\"click\", this._handleClick);\n this.rootEl.removeEventListener(\"keydown\", this._handleKeydown);\n this.rootEl.removeEventListener(\"focusin\", this._handleFocusIn);\n instances.delete(this.rootEl);\n }\n}\n\nautoInit(\"tree-view\", TreeView);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nfunction computePercent(inputEl) {\n const min = Number(inputEl.min || 0);\n const max = Number(inputEl.max || 100);\n const value = Number(inputEl.value);\n\n if (max === min) return 0;\n return ((value - min) / (max - min)) * 100;\n}\n\n// Range/Slider: o <input type=\"range\"> nativo j\u00E1 cobre teclado (setas,\n// Home/End, PageUp/Down) e ARIA (role=slider impl\u00EDcito, aria-valuenow\n// autom\u00E1tico) sem nenhum JS \u2014 este componente s\u00F3 resolve dois pontos que\n// o CSS puro n\u00E3o alcan\u00E7a: (1) pintar a trilha preenchida at\u00E9 o valor atual\n// via `--fs-range-percent` (truque necess\u00E1rio porque s\u00F3 o Firefox suporta\n// `::-moz-range-progress`; ver _range.scss); (2) espelhar o valor num\n// `<output>` associado (`data-fs-target`), pra quem n\u00E3o consegue perceber\n// a posi\u00E7\u00E3o do thumb s\u00F3 visualmente.\nexport class RangeSlider {\n constructor(inputEl) {\n const targetSelector = inputEl.getAttribute(\"data-fs-target\");\n const outputEl = targetSelector ? document.querySelector(targetSelector) : null;\n\n this.inputEl = inputEl;\n this.outputEl = outputEl;\n\n this._handleInput = this._handleInput.bind(this);\n inputEl.addEventListener(\"input\", this._handleInput);\n\n this._render();\n\n instances.set(inputEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n _handleInput() {\n this._render();\n }\n\n _render() {\n this.inputEl.style.setProperty(\"--fs-range-percent\", `${computePercent(this.inputEl)}%`);\n if (this.outputEl) this.outputEl.textContent = this.inputEl.value;\n }\n\n dispose() {\n this.inputEl.removeEventListener(\"input\", this._handleInput);\n instances.delete(this.inputEl);\n }\n}\n\nautoInit(\"range\", RangeSlider);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nlet idCounter = 0;\n\nfunction escapeHtml(value) {\n const div = document.createElement(\"div\");\n div.textContent = value;\n return div.innerHTML;\n}\n\nfunction formatBytes(bytes) {\n if (bytes < 1024) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\"];\n let value = bytes;\n let unitIndex = -1;\n\n do {\n value /= 1024;\n unitIndex += 1;\n } while (value >= 1024 && unitIndex < units.length - 1);\n\n return `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nfunction fileExtension(name) {\n const dot = name.lastIndexOf(\".\");\n return dot === -1 ? \"\" : name.slice(dot + 1, dot + 5).toUpperCase();\n}\n\n// Upload avan\u00E7ado: evolu\u00E7\u00E3o de js/file-drop.js \u2014 m\u00FAltiplos arquivos,\n// preview por arquivo (thumbnail de imagem via createObjectURL, nome,\n// tamanho), progresso individual e remo\u00E7\u00E3o por item. N\u00E3o faz upload de\n// verdade (agn\u00F3stico de backend/protocolo): s\u00F3 mant\u00E9m a lista de arquivos\n// e exp\u00F5e `setProgress`/`setError` pro consumidor chamar a partir do\n// pr\u00F3prio XHR/fetch. Comp\u00F5e com data-fs=\"file-drop\" na mesma label (ver\n// mockup/file-upload-advanced.html) pra ganhar arrastar-e-soltar de gra\u00E7a.\nexport class FileUploadAdvanced {\n constructor(rootEl) {\n const inputEl = rootEl.querySelector(\".fs-file-input\");\n if (!inputEl) {\n throw new Error(\"FokusStyles.FileUploadAdvanced: .fs-file-input n\u00E3o encontrado.\");\n }\n\n this.rootEl = rootEl;\n this.inputEl = inputEl;\n this.listEl = rootEl.querySelector(\".fs-file-upload-list\");\n if (!this.listEl) {\n this.listEl = document.createElement(\"ul\");\n this.listEl.className = \"fs-file-upload-list\";\n rootEl.appendChild(this.listEl);\n }\n\n this._items = new Map();\n\n this._handleChange = this._handleChange.bind(this);\n this._handleListClick = this._handleListClick.bind(this);\n\n inputEl.addEventListener(\"change\", this._handleChange);\n this.listEl.addEventListener(\"click\", this._handleListClick);\n\n instances.set(rootEl, this);\n }\n\n static getInstance(el) {\n return instances.get(el);\n }\n\n getFiles() {\n return Array.from(this._items.values()).map((item) => item.file);\n }\n\n setProgress(id, percent) {\n const item = this._items.get(id);\n if (!item) return;\n\n item.progress = Math.min(100, Math.max(0, percent));\n item.error = null;\n this._renderItem(id);\n }\n\n setError(id, message) {\n const item = this._items.get(id);\n if (!item) return;\n\n item.error = message;\n this._renderItem(id);\n }\n\n remove(id) {\n const item = this._items.get(id);\n if (!item) return;\n\n if (item.thumbUrl) URL.revokeObjectURL(item.thumbUrl);\n this._items.delete(id);\n\n const itemEl = this.listEl.querySelector(`[data-file-id=\"${id}\"]`);\n itemEl?.remove();\n\n this.rootEl.dispatchEvent(\n new CustomEvent(\"fs:file-upload:removed\", { bubbles: true, detail: { id, file: item.file } }),\n );\n }\n\n _handleChange() {\n const files = Array.from(this.inputEl.files ?? []);\n if (files.length === 0) return;\n\n const added = [];\n for (const file of files) {\n idCounter += 1;\n const id = `file-${idCounter}`;\n const thumbUrl = file.type.startsWith(\"image/\") ? URL.createObjectURL(file) : null;\n this._items.set(id, { file, progress: 0, error: null, thumbUrl });\n added.push({ id, file });\n this._appendItem(id);\n }\n\n this.rootEl.dispatchEvent(new CustomEvent(\"fs:file-upload:added\", { bubbles: true, detail: { items: added } }));\n }\n\n _handleListClick(event) {\n const removeBtn = event.target.closest(\"[data-file-upload-remove]\");\n if (!removeBtn) return;\n\n const itemEl = removeBtn.closest(\"[data-file-id]\");\n if (itemEl) this.remove(itemEl.getAttribute(\"data-file-id\"));\n }\n\n _appendItem(id) {\n const item = this._items.get(id);\n const li = document.createElement(\"li\");\n li.className = \"fs-file-upload-item\";\n li.setAttribute(\"data-file-id\", id);\n this.listEl.appendChild(li);\n this._renderItem(id, item);\n }\n\n _renderItem(id, itemArg) {\n const item = itemArg ?? this._items.get(id);\n if (!item) return;\n\n const li = this.listEl.querySelector(`[data-file-id=\"${id}\"]`);\n if (!li) return;\n\n const { file, progress, error, thumbUrl } = item;\n const thumb = thumbUrl\n ? `<img src=\"${thumbUrl}\" alt=\"\">`\n : escapeHtml(fileExtension(file.name) || \"?\");\n\n li.classList.toggle(\"is-error\", Boolean(error));\n li.innerHTML = `\n <div class=\"fs-file-upload-thumb\">${thumb}</div>\n <div class=\"fs-file-upload-info\">\n <p class=\"fs-file-upload-name\">${escapeHtml(file.name)}</p>\n <p class=\"fs-file-upload-size\">${error ? escapeHtml(error) : formatBytes(file.size)}</p>\n <div class=\"fs-progress fs-progress-sm\" role=\"progressbar\" aria-valuenow=\"${progress}\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Progresso de ${escapeHtml(file.name)}\">\n <div class=\"fs-progress-bar${error ? \" fs-progress-bar-danger\" : \"\"}\" style=\"--fs-progress-value: ${progress};\"></div>\n </div>\n </div>\n <button type=\"button\" class=\"fs-btn-close fs-file-upload-remove\" data-file-upload-remove aria-label=\"Remover ${escapeHtml(file.name)}\"></button>\n `;\n }\n\n dispose() {\n this.inputEl.removeEventListener(\"change\", this._handleChange);\n this.listEl.removeEventListener(\"click\", this._handleListClick);\n\n for (const item of this._items.values()) {\n if (item.thumbUrl) URL.revokeObjectURL(item.thumbUrl);\n }\n this._items.clear();\n\n instances.delete(this.rootEl);\n }\n}\n\nautoInit(\"file-upload-advanced\", FileUploadAdvanced);\n", "import { createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Theme {\n constructor(root = document.documentElement) { this.root = root; instances.set(root, this); }\n static getInstance(root = document.documentElement) { return instances.get(root); }\n static getOrCreateInstance(root = document.documentElement) { return this.getInstance(root) ?? new Theme(root); }\n static set(mode, root = document.documentElement) { return this.getOrCreateInstance(root).set(mode); }\n get() { return this.root.getAttribute(\"data-fs-theme\") ?? this.root.getAttribute(\"data-theme\") ?? \"light\"; }\n set(mode) {\n if (![\"light\", \"dark\", \"auto\"].includes(mode)) throw new TypeError(\"FokusStyles.Theme: modo inv\u00E1lido.\");\n this.root.setAttribute(\"data-fs-theme\", mode);\n this.root.setAttribute(\"data-theme\", mode === \"dark\" ? \"dark\" : \"light\");\n this.root.dispatchEvent(new CustomEvent(\"fs:theme:change\", { bubbles: true, detail: { mode } }));\n return this;\n }\n dispose() { instances.delete(this.root); }\n}\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Navbar {\n constructor(navbarEl) {\n this.navbarEl = navbarEl;\n this.toggleEl = navbarEl.querySelector('[data-fs-toggle=\"navbar\"]');\n const target = this.toggleEl?.getAttribute(\"data-fs-target\");\n this.menuEl = target ? document.querySelector(target) : navbarEl.querySelector(\".fs-navbar-collapse\");\n if (!this.toggleEl || !this.menuEl) return;\n this._toggle = () => this.toggle();\n this._escape = (event) => { if (event.key === \"Escape\" && this.isOpen()) this.hide(); };\n this.toggleEl.addEventListener(\"click\", this._toggle);\n this.menuEl.addEventListener(\"keydown\", this._escape);\n instances.set(navbarEl, this);\n }\n static getInstance(el) { return instances.get(el); }\n static getOrCreateInstance(el) { return this.getInstance(el) ?? new Navbar(el); }\n isOpen() { return this.menuEl?.classList.contains(\"is-open\"); }\n show() { this.menuEl.classList.add(\"is-open\"); this.menuEl.hidden = false; this.toggleEl.setAttribute(\"aria-expanded\", \"true\"); this.navbarEl.dispatchEvent(new CustomEvent(\"fs:shown\", { bubbles: true })); }\n hide() { this.menuEl.classList.remove(\"is-open\"); this.menuEl.hidden = true; this.toggleEl.setAttribute(\"aria-expanded\", \"false\"); this.toggleEl.focus(); this.navbarEl.dispatchEvent(new CustomEvent(\"fs:hidden\", { bubbles: true })); }\n toggle() { this.isOpen() ? this.hide() : this.show(); }\n dispose() { this.toggleEl?.removeEventListener(\"click\", this._toggle); this.menuEl?.removeEventListener(\"keydown\", this._escape); instances.delete(this.navbarEl); }\n}\n\nautoInit(\"navbar\", Navbar);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class Scrollspy {\n constructor(navEl) {\n this.navEl = navEl;\n this.links = [...navEl.querySelectorAll('a[href^=\"#\"]')];\n this.sections = this.links.map((link) => document.querySelector(link.getAttribute(\"href\"))).filter(Boolean);\n this.observer = typeof IntersectionObserver === \"undefined\" ? null : new IntersectionObserver((entries) => entries.forEach((entry) => entry.isIntersecting && this.activate(entry.target)), { rootMargin: \"-20% 0px -65%\" });\n this.sections.forEach((section) => this.observer?.observe(section));\n this._onScroll = () => {\n if (this.observer) return;\n const current = this.sections.filter((section) => section.getBoundingClientRect().top <= window.innerHeight * 0.35).at(-1);\n if (current) this.activate(current);\n };\n if (!this.observer) window.addEventListener(\"scroll\", this._onScroll, { passive: true });\n instances.set(navEl, this);\n }\n static getInstance(el) { return instances.get(el); }\n static getOrCreateInstance(el) { return this.getInstance(el) ?? new Scrollspy(el); }\n activate(section) { this.links.forEach((link) => link.classList.toggle(\"is-active\", link.getAttribute(\"href\") === `#${section.id}`)); this.navEl.dispatchEvent(new CustomEvent(\"fs:scrollspy:activate\", { bubbles: true, detail: { section } })); }\n dispose() { this.observer?.disconnect(); window.removeEventListener(\"scroll\", this._onScroll); instances.delete(this.navEl); }\n}\n\nautoInit(\"scrollspy\", Scrollspy);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\n\nexport class FormValidation {\n constructor(form) { this.form = form; this._submit = (event) => this.validate(event); form.addEventListener(\"submit\", this._submit); instances.set(form, this); }\n static getInstance(el) { return instances.get(el); }\n static getOrCreateInstance(el) { return this.getInstance(el) ?? new FormValidation(el); }\n validate(event) {\n const valid = this.form.checkValidity();\n this.form.classList.add(\"fs-was-validated\");\n this.form.querySelectorAll('[required], [aria-required=\"true\"]').forEach((field) => field.setAttribute(\"aria-invalid\", String(!field.checkValidity())));\n if (!valid) { event.preventDefault(); event.stopPropagation(); }\n this.form.dispatchEvent(new CustomEvent(\"fs:form:validated\", { bubbles: true, detail: { valid } }));\n return valid;\n }\n dispose() { this.form.removeEventListener(\"submit\", this._submit); instances.delete(this.form); }\n}\n\nautoInit(\"form-validation\", FormValidation);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nexport class Spinner {\n constructor(element) {\n this.element = element;\n this._setLoading(element.hasAttribute(\"data-fs-loading\") && element.getAttribute(\"data-fs-loading\") !== \"false\");\n instances.set(element, this);\n }\n static getInstance(el) { return instances.get(el); }\n static getOrCreateInstance(el) { return this.getInstance(el) ?? new Spinner(el); }\n _setLoading(value) { this.loading = value; this.element.toggleAttribute(\"aria-busy\", value); this.element.toggleAttribute(\"data-fs-loading\", value); }\n start() { this._setLoading(true); this.element.dispatchEvent(new CustomEvent(\"fs:loading:start\", { bubbles: true })); }\n stop() { this._setLoading(false); this.element.dispatchEvent(new CustomEvent(\"fs:loading:stop\", { bubbles: true })); }\n toggle() { this.loading ? this.stop() : this.start(); }\n dispose() { instances.delete(this.element); }\n}\nautoInit(\"spinner\", Spinner);\n", "import { autoInit, createInstanceRegistry } from \"./core/register.js\";\n\nconst instances = createInstanceRegistry();\nexport class Pagination {\n constructor(element) {\n this.element = element;\n this.current = Number(element.getAttribute(\"data-fs-page\")) || 1;\n this.total = Number(element.getAttribute(\"data-fs-pages\")) || element.querySelectorAll(\"[data-fs-page]\").length || 1;\n this._click = (event) => {\n const button = event.target.closest(\"[data-fs-page]\");\n if (!button || !this.element.contains(button)) return;\n event.preventDefault();\n this.goTo(Number(button.getAttribute(\"data-fs-page\")));\n };\n element.addEventListener(\"click\", this._click);\n instances.set(element, this);\n this._render();\n }\n static getInstance(el) { return instances.get(el); }\n static getOrCreateInstance(el) { return this.getInstance(el) ?? new Pagination(el); }\n goTo(page) {\n const next = Math.max(1, Math.min(this.total, page));\n if (next === this.current) return;\n this.current = next;\n this.element.setAttribute(\"data-fs-page\", String(next));\n this._render();\n this.element.dispatchEvent(new CustomEvent(\"fs:pagination:change\", { bubbles: true, detail: { page: next, total: this.total } }));\n }\n _render() {\n this.element.querySelectorAll(\"[data-fs-page]\").forEach((item) => {\n const active = Number(item.getAttribute(\"data-fs-page\")) === this.current;\n item.classList.toggle(\"is-active\", active);\n item.setAttribute(\"aria-current\", active ? \"page\" : \"false\");\n });\n }\n dispose() { this.element.removeEventListener(\"click\", this._click); instances.delete(this.element); }\n}\nautoInit(\"pagination\", Pagination);\n"],
5
+ "mappings": "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",
6
+ "names": ["instances", "instances", "instances", "idCounter", "instances", "idCounter", "instances", "instances", "instances", "instances", "instances", "idCounter", "instances", "idCounter", "instances", "idCounter", "instances", "instances", "instances", "instances", "_a", "instances", "idCounter", "escapeHtml", "instances", "_a", "instances", "idCounter", "instances", "idCounter", "uniqueId", "instances", "_a", "_b", "instances", "idCounter", "uniqueId", "instances", "instances", "instances", "idCounter", "escapeHtml", "instances", "instances", "instances", "instances", "instances", "instances"]
7
7
  }