@vireo-ai/trellis-ui 0.1.59 → 0.1.61

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 (239) hide show
  1. package/README.md +0 -1
  2. package/THIRD_PARTY_NOTICES.md +2 -0
  3. package/package.json +49 -40
  4. package/packages/client/src/components/field/styles.css +2 -1
  5. package/packages/client/src/styles/components.css +1 -0
  6. package/packages/client/src/styles/static.css +0 -1
  7. package/packages/client/types/assets/full-runtime.generated.d.ts +1 -1
  8. package/packages/client/types/capabilities/anchor.d.ts +7 -0
  9. package/packages/client/types/capabilities/anchor.entry.generated.d.ts +3 -0
  10. package/packages/client/types/components/accordion/runtime-docs.d.ts +1 -0
  11. package/packages/client/types/components/checkbox/runtime-docs.d.ts +1 -0
  12. package/packages/client/types/components/data-grid/runtime-docs.d.ts +1 -0
  13. package/packages/client/types/components/date-picker/runtime-docs.d.ts +1 -0
  14. package/packages/client/types/components/direct-upload/runtime-docs.d.ts +1 -0
  15. package/packages/client/types/components/dropdown/runtime-docs.d.ts +1 -0
  16. package/packages/client/types/components/entry.generated.d.ts +1 -0
  17. package/packages/client/types/components/field/runtime-docs.d.ts +1 -0
  18. package/packages/client/types/components/file-upload/index.d.ts +3 -2
  19. package/packages/client/types/components/file-upload/runtime-docs.d.ts +1 -0
  20. package/packages/client/types/components/formset/runtime-docs.d.ts +1 -0
  21. package/packages/client/types/components/image/contract.d.ts +1 -1
  22. package/packages/client/types/components/modal/runtime-docs.d.ts +1 -0
  23. package/packages/client/types/components/panels/runtime-docs.d.ts +1 -0
  24. package/packages/client/types/components/radio/runtime-docs.d.ts +1 -0
  25. package/packages/client/types/components/scroll-area/runtime-docs.d.ts +1 -0
  26. package/packages/client/types/components/select/index.d.ts +3 -2
  27. package/packages/client/types/components/select/runtime-docs.d.ts +1 -0
  28. package/packages/client/types/components/sidebar/runtime-docs.d.ts +1 -0
  29. package/packages/client/types/components/slider/runtime-docs.d.ts +1 -0
  30. package/packages/client/types/components/switch/runtime-docs.d.ts +1 -0
  31. package/packages/client/types/components/tabs/runtime-docs.d.ts +1 -0
  32. package/packages/client/types/components/toast/runtime-docs.d.ts +1 -0
  33. package/packages/client/types/components/tooltip/runtime-docs.d.ts +1 -0
  34. package/packages/client/types/components/virtualizer/runtime-docs.d.ts +1 -0
  35. package/packages/client/types/directives/anchor.d.ts +26 -0
  36. package/packages/client/types/directives/index.d.ts +1 -0
  37. package/packages/client/types/runtime/anchored-popover.d.ts +4 -2
  38. package/packages/client/types/runtime/item-template.d.ts +13 -0
  39. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis-103fb43eb5e1.css +14030 -0
  40. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +23 -23
  41. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min-584dec82495c.css +2 -0
  42. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
  43. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-COxhbtRZ.js +1 -0
  44. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge.js +1 -1
  45. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +386 -346
  46. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor-B-CbpFFU.js +2 -0
  47. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor-B-CbpFFU.js.map +1 -0
  48. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor.js +2 -0
  49. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js +2 -0
  50. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js.map +1 -0
  51. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +2 -2
  52. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-Ctqx_OoS.js +2 -0
  53. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-Ctqx_OoS.js.map +1 -0
  54. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable.js +2 -2
  55. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut-D2NgvMgw.js +2 -0
  56. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut-D2NgvMgw.js.map +1 -0
  57. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +2 -2
  58. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable-CbIOS4Lm.js +2 -0
  59. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable-CbIOS4Lm.js.map +1 -0
  60. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +2 -2
  61. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js +2 -0
  62. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js.map +1 -0
  63. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-B32HePGn.js +2 -0
  64. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-D_BJBnwB.js.map → capability-motion-B32HePGn.js.map} +1 -1
  65. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bl6ng6Hd.js +5 -0
  66. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-BDbURlVO.js.map → capability-sortable-Bl6ng6Hd.js.map} +1 -1
  67. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-C8xqwkr0.js.map +1 -1
  68. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BxNepYBE.js +2 -0
  69. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-Ybm_WmKr.js.map → core-BxNepYBE.js.map} +1 -1
  70. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js +2 -0
  71. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js.map +1 -0
  72. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DDrayI_M.js → entry.generated-BRaKxvab.js} +2 -2
  73. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DDrayI_M.js.map → entry.generated-BRaKxvab.js.map} +1 -1
  74. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js.map +1 -1
  75. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-OT_bt7F2.js → entry.generated-BzLNUDzF.js} +2 -2
  76. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BzLNUDzF.js.map +1 -0
  77. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js +2 -0
  78. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js.map +1 -0
  79. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js +2 -0
  80. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js.map +1 -0
  81. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BgGSoQFS.js → entry.generated-Cbyseoex.js} +2 -2
  82. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cbyseoex.js.map +1 -0
  83. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js +2 -0
  84. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js.map +1 -0
  85. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js.map +1 -1
  86. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js +2 -0
  87. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js.map +1 -0
  88. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-dcqwycC7.js → entry.generated-Ct9H8Hlf.js} +2 -2
  89. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ct9H8Hlf.js.map +1 -0
  90. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D2es_Wi2.js.map +1 -1
  91. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js +2 -0
  92. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js.map +1 -0
  93. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js +2 -0
  94. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js.map +1 -0
  95. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js +2 -0
  96. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js.map +1 -0
  97. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-crNQSZEa.js → flip-BKThFI4L.js} +2 -2
  98. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-crNQSZEa.js.map → flip-BKThFI4L.js.map} +1 -1
  99. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/item-template-DSfME41Q.js +2 -0
  100. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/item-template-DSfME41Q.js.map +1 -0
  101. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B90yNOaV.js → motion-RwlK04Cy.js} +2 -2
  102. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B90yNOaV.js.map → motion-RwlK04Cy.js.map} +1 -1
  103. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CQDZhwd_.js.map +1 -1
  104. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-CTQoglp3.js → ui-Bg44ZmC3.js} +4 -4
  105. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-Bg44ZmC3.js.map +1 -0
  106. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/warn-BbGtqbh1.js +2 -0
  107. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/warn-BbGtqbh1.js.map +1 -0
  108. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DpoqsP_I.js +1 -0
  109. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +2 -1
  110. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-Dnf0aKac.js +1 -0
  111. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button.js +2 -1
  112. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-BpFFtrfY.js +1 -0
  113. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +2 -1
  114. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-CCPYnOuT.js +1 -0
  115. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +2 -1
  116. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-BCkP5gtC.js +1 -0
  117. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +2 -1
  118. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-DaT6-YFL.js +1 -0
  119. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +2 -1
  120. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-Cc84envj.js +1 -0
  121. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +2 -1
  122. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-CtQbyblj.js +1 -0
  123. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +2 -1
  124. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DARtpJDT.js +1 -0
  125. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +2 -1
  126. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-CPO4XZkB.js +1 -0
  127. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset.js +2 -1
  128. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-C-3lKsKm.js +1 -0
  129. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper.js +2 -1
  130. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js +2 -0
  131. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js.map +1 -0
  132. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +2 -2
  133. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-BKEbDkKa.js +1 -0
  134. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +2 -1
  135. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-RIi2q1IT.js +1 -0
  136. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +2 -1
  137. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-MUHGUsup.js +1 -0
  138. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +2 -1
  139. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-DNAroAhk.js +1 -0
  140. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +2 -1
  141. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-DrGFMWGq.js +1 -0
  142. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +2 -1
  143. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-CyUCAbgG.js +1 -0
  144. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +2 -1
  145. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-BjLF548F.js +1 -0
  146. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +2 -1
  147. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-GpvEBW3K.js +1 -0
  148. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +2 -1
  149. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-OztnTlqr.js +1 -0
  150. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +2 -1
  151. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CZ7aiASg.js +1 -0
  152. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +2 -1
  153. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-G3G5d2Eo.js +1 -0
  154. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table.js +2 -1
  155. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-bq7j1uwx.js +1 -0
  156. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +2 -1
  157. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-DkP0-rBO.js +1 -0
  158. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +2 -1
  159. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-OITEWczP.js +1 -0
  160. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +2 -1
  161. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-CkRX2qVO.js +1 -0
  162. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +2 -1
  163. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-Z4zMCScs.js +1 -0
  164. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +2 -1
  165. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js +2 -0
  166. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js.map +1 -0
  167. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +2 -2
  168. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +160 -132
  169. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis-ecb43dfd3b7b.js +11 -0
  170. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +7 -7
  171. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min-ecb43dfd3b7b.js +11 -0
  172. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +7 -7
  173. package/packages/theme-engine/README.md +221 -0
  174. package/packages/theme-engine/THEME_AUTHORING.md +44 -0
  175. package/packages/theme-engine/dist/trellis.js +16935 -0
  176. package/packages/theme-engine/generated/knobs/v1/color-alpha.json +2426 -0
  177. package/packages/theme-engine/generated/knobs/v1/color-foundations.json +1582 -0
  178. package/packages/theme-engine/generated/knobs/v1/color-ink.json +6541 -0
  179. package/packages/theme-engine/generated/knobs/v1/color-lighting.json +3056 -0
  180. package/packages/theme-engine/generated/knobs/v1/color-normalization.json +1685 -0
  181. package/packages/theme-engine/generated/knobs/v1/color-ramps.json +14304 -0
  182. package/packages/theme-engine/generated/knobs/v1/composition.json +881 -0
  183. package/packages/theme-engine/generated/knobs/v1/depth.json +1705 -0
  184. package/packages/theme-engine/generated/knobs/v1/edges.json +326 -0
  185. package/packages/theme-engine/generated/knobs/v1/index.json +20096 -0
  186. package/packages/theme-engine/generated/knobs/v1/manifest.json +719 -0
  187. package/packages/theme-engine/generated/knobs/v1/motion.json +128 -0
  188. package/packages/theme-engine/generated/knobs/v1/radii.json +331 -0
  189. package/packages/theme-engine/generated/knobs/v1/semantic-actions.json +1814 -0
  190. package/packages/theme-engine/generated/knobs/v1/semantic-disabled.json +759 -0
  191. package/packages/theme-engine/generated/knobs/v1/semantic-disclosure.json +59 -0
  192. package/packages/theme-engine/generated/knobs/v1/semantic-intents.json +4841 -0
  193. package/packages/theme-engine/generated/knobs/v1/semantic-scrim.json +308 -0
  194. package/packages/theme-engine/generated/knobs/v1/semantic-selection.json +940 -0
  195. package/packages/theme-engine/generated/knobs/v1/semantic-structure.json +365 -0
  196. package/packages/theme-engine/generated/knobs/v1/sizing-anatomy.json +3112 -0
  197. package/packages/theme-engine/generated/knobs/v1/sizing-controls.json +599 -0
  198. package/packages/theme-engine/generated/knobs/v1/sizing-measures.json +1089 -0
  199. package/packages/theme-engine/generated/knobs/v1/spacing.json +1246 -0
  200. package/packages/theme-engine/generated/knobs/v1/substrates.json +315 -0
  201. package/packages/theme-engine/generated/knobs/v1/surfaces.json +870 -0
  202. package/packages/theme-engine/generated/knobs/v1/typography-anatomy.json +1754 -0
  203. package/packages/theme-engine/generated/knobs/v1/typography-fonts.json +711 -0
  204. package/packages/theme-engine/generated/knobs/v1/typography-scale.json +329 -0
  205. package/packages/theme-engine/generated/schemas/theme-config-v1.json +3987 -0
  206. package/packages/theme-engine/generated/schemas/theme-manifest-v1.json +79 -0
  207. package/packages/theme-engine/skills/create-trellis-theme/SKILL.md +108 -0
  208. package/packages/client/types/components/runtime-docs.d.ts +0 -2
  209. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js.map +0 -1
  210. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable.js.map +0 -1
  211. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js.map +0 -1
  212. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js.map +0 -1
  213. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js +0 -2
  214. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js.map +0 -1
  215. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-D_BJBnwB.js +0 -2
  216. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-BDbURlVO.js +0 -5
  217. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-Ybm_WmKr.js +0 -2
  218. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-18lXAVBg.js +0 -2
  219. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-18lXAVBg.js.map +0 -1
  220. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2YvnuzOD.js +0 -2
  221. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2YvnuzOD.js.map +0 -1
  222. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BITa8xFV.js +0 -2
  223. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BITa8xFV.js.map +0 -1
  224. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BSVJpGWu.js +0 -2
  225. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BSVJpGWu.js.map +0 -1
  226. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BgGSoQFS.js.map +0 -1
  227. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bp3Npe3t.js +0 -2
  228. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bp3Npe3t.js.map +0 -1
  229. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ce_fpT15.js +0 -2
  230. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ce_fpT15.js.map +0 -1
  231. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DDJEGHq-.js +0 -2
  232. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DDJEGHq-.js.map +0 -1
  233. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-OT_bt7F2.js.map +0 -1
  234. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-WRveW7p9.js +0 -2
  235. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-WRveW7p9.js.map +0 -1
  236. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-dcqwycC7.js.map +0 -1
  237. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CTQoglp3.js.map +0 -1
  238. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js.map +0 -1
  239. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"entry.generated-DDJEGHq-.js","names":["bind","bindAll"],"sources":["../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.2/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/public-utils/external/file.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.2/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/util/changing-window/is-entering-window.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.2/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/adapter/external-adapter.js","../../../../../../../../client/src/components/file-upload/contract.ts","../../../../../../../../client/src/components/file-upload/machine.ts","../../../../../../../../client/src/components/file-upload/styles.ts","../../../../../../../../client/src/components/file-upload/index.ts","../../../../../../../../client/src/components/file-upload/entry.generated.ts"],"sourcesContent":["export function containsFiles(_ref) {\n var source = _ref.source;\n return source.types.includes('Files');\n}\n\n/** Obtain an array of the dragged `File`s */\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function getFiles(_ref2) {\n var source = _ref2.source;\n return source.items\n // unlike other media types, for files:\n // item.kind is 'file'\n // item.type is the type of file eg 'image/jpg'\n // for other media types, item.type is the mime format\n .filter(function (item) {\n return item.kind === 'file';\n }).map(function (item) {\n return item.getAsFile();\n }).filter(function (file) {\n return file != null;\n });\n}","import { isFirefox } from '../is-firefox';\nimport { isSafari } from '../is-safari';\nimport { isEnteringWindowInSafari } from './count-events-for-safari';\nimport { isFromAnotherWindow } from './is-from-another-window';\nexport function isEnteringWindow(_ref) {\n var dragEnter = _ref.dragEnter;\n var type = dragEnter.type,\n relatedTarget = dragEnter.relatedTarget;\n if (type !== 'dragenter') {\n return false;\n }\n if (isSafari()) {\n return isEnteringWindowInSafari({\n dragEnter: dragEnter\n });\n }\n\n // standard check\n if (relatedTarget == null) {\n return true;\n }\n\n /**\n * 🦊 Exception: `iframe` in Firefox (`125.0`)\n *\n * Case 1: parent `window` → child `iframe`\n * `relatedTarget` is the `iframe` element in the parent `window`\n * (foreign element)\n *\n * Case 2: child `iframe` → parent `window`\n * `relatedTarget` is an element inside the child `iframe`\n * (foreign element)\n */\n\n if (isFirefox()) {\n return isFromAnotherWindow(relatedTarget);\n }\n\n /**\n * 🌏 Exception: `iframe` in Chrome (`124.0`)\n *\n * Case 1: parent `window` → child `iframe`\n * `relatedTarget` is `null` *(standard check)*\n *\n * Case 2: child `iframe` → parent `window`\n * `relatedTarget` is the `iframe` element in the parent `window`\n */\n\n // Case 2\n // Using `instanceof` check as the element will be in the same `window`\n return relatedTarget instanceof HTMLIFrameElement;\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport { bind, bindAll } from 'bind-event-listener';\nimport { makeAdapter } from '../make-adapter/make-adapter';\nimport { androidFallbackText } from '../util/android';\nimport { isEnteringWindow } from '../util/changing-window/is-entering-window';\nimport { getBindingsForBrokenDrags } from '../util/detect-broken-drag';\nimport { textMediaType } from '../util/media-types/text-media-type';\nimport { elementAdapterNativeDataKey } from './element-adapter-native-data-key';\nexport function isAnAvailableType(_ref) {\n var type = _ref.type,\n value = _ref.value;\n // We don't want to expose our private elementAdapter key / value\n if (type === elementAdapterNativeDataKey) {\n return false;\n }\n // Not exposing \"text/plain\" if it contains the android fallback text\n // We _could_ add an `isAndroid()` check, but it's probably safest\n // to trim this data out, regardless of what OS we see it on.\n if (type === textMediaType && value === androidFallbackText) {\n return false;\n }\n return true;\n}\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function getAvailableTypes(transfer) {\n return Array.from(transfer.types).filter(function (type) {\n return isAnAvailableType({\n type: type,\n value: transfer.getData(type)\n });\n });\n}\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function getAvailableItems(dataTransfer) {\n // item.kind is 'string' | 'file'\n // For 'string' item.type is the mimeType (eg 'text/plain')\n // For 'file' item.type is the file type (eg 'image/jpg')\n\n return Array.from(dataTransfer.items).filter(function (item) {\n return item.kind === 'file' || isAnAvailableType({\n type: item.type,\n value: dataTransfer.getData(item.type)\n });\n });\n}\nvar didDragStartLocally = false;\nvar adapter = makeAdapter({\n typeKey: 'external',\n // for external drags, we are generally making a copy of something that is being dragged\n defaultDropEffect: 'copy',\n mount: function mount(api) {\n // Binding to the `window` so that the element adapter\n // has a chance to get in first on the`document`.\n // We are giving preference to the element adapter.\n return bind(window, {\n type: 'dragenter',\n listener: function listener(event) {\n // drag operation was started within the document, it won't be an \"external\" drag\n if (didDragStartLocally) {\n return;\n }\n\n // Note: not checking if event was cancelled (`event.defaultPrevented`) as\n // cancelling a \"dragenter\" accepts the drag operation (not prevent it)\n\n // Something has gone wrong with our drag event\n if (!event.dataTransfer) {\n // Including this code on \"test\" and \"development\" environments:\n // - Browser tests commonly run against \"development\" builds\n // - Unit tests commonly run in \"test\"\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\"\\n It appears as though you have are not testing DragEvents correctly.\\n\\n - If you are unit testing, ensure you have polyfilled DragEvent.\\n - If you are browser testing, ensure you are dispatching drag events correctly.\\n\\n Please see our testing guides for more information:\\n https://atlassian.design/components/pragmatic-drag-and-drop/core-package/testing\\n \".replace(/ {2}/g, ''));\n }\n return;\n }\n if (!api.canStart(event)) {\n return;\n }\n if (!isEnteringWindow({\n dragEnter: event\n })) {\n return;\n }\n\n // Note: not checking types for `elementAdapterNativeDataKey` as we expect to see that\n // key when pdnd started the drag in another document\n var types = getAvailableTypes(event.dataTransfer);\n if (!types.length) {\n return;\n }\n var locked = {\n types: types,\n items: [],\n getStringData: function getStringData() {\n return null;\n }\n };\n api.start({\n event: event,\n dragType: {\n type: 'external',\n startedFrom: 'external',\n payload: locked,\n getDropPayload: function getDropPayload(event) {\n // this would be a platform error\n // trying to handle it gracefully rather than throwing (for now)\n if (!event.dataTransfer) {\n return locked;\n }\n var items = getAvailableItems(event.dataTransfer);\n // need to use `.bind` as `getData` is required\n // to be run with `event.dataTransfer` as the \"this\" context\n var nativeGetData = event.dataTransfer.getData.bind(event.dataTransfer);\n return {\n types: types,\n items: items,\n // return `null` if there is no result, otherwise string\n getStringData: function getStringData(mediaType) {\n // not dragging the requested type\n // return `null` (no result)\n if (!types.includes(mediaType)) {\n return null;\n }\n\n // nativeGetData will return `\"\"` when there is no value,\n // but at this point we know we will only get explicitly set\n // values back as we have checked the `types`.\n // `\"\"` can be an explicitly set value.\n var value = nativeGetData(mediaType);\n\n // not exposing data for unavailable types\n if (!isAnAvailableType({\n type: mediaType,\n value: value\n })) {\n return null;\n }\n return value;\n }\n };\n }\n }\n });\n }\n });\n }\n});\n\n/**\n * Some events don't make sense for the external adapter\n *\n * `onGenerateDragPreview`\n * The browser creates the drag preview for external drags, so we don't\n * need an event to generate the preview for _monitors_ or the _dropTarget_\n *\n * `onDragStart`\n * An external drag can never start from in the `window`, so _dropTarget_'s\n * don't need `onDragStart`\n */\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function dropTargetForExternal(args) {\n // not removing unused events, just leaning on the type system\n return adapter.dropTarget(args);\n}\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function monitorForExternal(args) {\n // not removing unused events, just leaning on the type system\n return adapter.monitor(args);\n}\n(function startup() {\n // server side rendering check\n if (typeof window === 'undefined') {\n return;\n }\n\n // A shared single usage registration as we want to capture\n // all external drag operations, even if there are no drop targets\n // on the page yet\n adapter.registerUsage();\n // independent of pdnd, we need to keep track of\n // all drag operations so that we can know if a drag operation\n // has started locally\n\n var idle = {\n type: 'idle'\n };\n var state = idle;\n function clear() {\n if (state.type !== 'dragging') {\n return;\n }\n didDragStartLocally = false;\n state.cleanup();\n state = idle;\n }\n function bindEndEvents() {\n return bindAll(window, [{\n type: 'dragend',\n listener: clear\n }].concat(_toConsumableArray(getBindingsForBrokenDrags({\n onDragEnd: clear\n }))),\n // we want to make sure we get all the events,\n // and this helps avoid not seeing events when folks stop\n // them later on the event path\n {\n capture: true\n });\n }\n\n // we always keep this event listener active\n bind(window, {\n type: 'dragstart',\n listener: function listener() {\n // something bad has happened if this is true!\n if (state.type !== 'idle') {\n return;\n }\n // set our global flag\n didDragStartLocally = true;\n state = {\n type: 'dragging',\n cleanup: bindEndEvents()\n };\n },\n // binding in the capture phase so these listeners are called\n // before our listeners in the adapters `mount` function\n options: {\n capture: true\n }\n });\n})();\n\n/** Common event payload for all events */\n\n/** A map containing payloads for all events */\n\n/** Common event payload for all drop target events */\n\n/** A map containing payloads for all events on drop targets */\n\n/** Arguments given to all feedback functions (eg `canDrop()`) on a `dropTargetForExternal` */\n\n/** Arguments given to all monitor feedback functions (eg `canMonitor()`) for a `monitorForExternal` */","import {attribute, bool, number, oneOf, string, type SchemaToProps} from '../../runtime';\n\nconst FILE_UPLOAD_LAYOUTS = ['stack', 'inline'] as const;\nconst FILE_UPLOAD_PREVIEWS = ['auto', 'image', 'none'] as const;\nconst FILE_UPLOAD_SIZES = ['sm', 'md', 'lg'] as const;\nconst FILE_UPLOAD_TRANSPORTS = ['native', 'direct'] as const;\n\ntype FileUploadLayout = (typeof FILE_UPLOAD_LAYOUTS)[number];\ntype FileUploadPreview = (typeof FILE_UPLOAD_PREVIEWS)[number];\ntype FileUploadSize = (typeof FILE_UPLOAD_SIZES)[number];\ntype FileUploadTransport = (typeof FILE_UPLOAD_TRANSPORTS)[number];\n\nconst fileUploadSchema = {\n name: string,\n accept: string,\n capture: string,\n multiple: bool,\n required: bool,\n disabled: bool,\n invalid: bool,\n preview: oneOf(FILE_UPLOAD_PREVIEWS, 'auto' as FileUploadPreview),\n layout: oneOf(FILE_UPLOAD_LAYOUTS, 'stack' as FileUploadLayout),\n size: oneOf(FILE_UPLOAD_SIZES, 'md' as FileUploadSize),\n heading: string.default('Drop files here or browse'),\n text: string,\n browseLabel: string,\n empty: attribute(string, 'empty-label'),\n maxItems: number.min(0).default(0),\n clearable: bool.default(true),\n transport: oneOf(FILE_UPLOAD_TRANSPORTS, 'native' as FileUploadTransport),\n rootClass: string,\n dropzoneClass: string,\n listClass: string,\n itemClass: string,\n class: string,\n};\n\nconst fileUploadDropzoneSchema = {\n heading: string.default('Drop files here or browse'),\n text: string,\n icon: string.default('cloud__upload'),\n layout: oneOf(FILE_UPLOAD_LAYOUTS, 'stack' as FileUploadLayout),\n size: oneOf(FILE_UPLOAD_SIZES, 'md' as FileUploadSize),\n disabled: bool,\n invalid: bool,\n class: string,\n};\n\nconst fileUploadListSchema = {\n class: string,\n};\n\nconst fileUploadItemSchema = {\n filename: string,\n filesize: string,\n mime: string,\n preview: string,\n icon: string.default('document__blank'),\n invalid: bool,\n error: string,\n class: string,\n};\n\nconst fileUploadRemoveSchema = {\n label: string.default('Remove file'),\n class: string,\n};\n\ntype FileUploadProps = SchemaToProps<typeof fileUploadSchema>;\n\nexport {\n FILE_UPLOAD_LAYOUTS,\n FILE_UPLOAD_PREVIEWS,\n FILE_UPLOAD_SIZES,\n FILE_UPLOAD_TRANSPORTS,\n fileUploadDropzoneSchema,\n fileUploadItemSchema,\n fileUploadListSchema,\n fileUploadRemoveSchema,\n fileUploadSchema,\n};\nexport type {\n FileUploadLayout,\n FileUploadPreview,\n FileUploadProps,\n FileUploadSize,\n FileUploadTransport,\n};\n","import {\n createMachine,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {FileUploadProps} from './contract';\n\ntype FileSelectionSource = 'picker' | 'drop' | 'remove' | 'props' | 'clear';\ntype FileTransferStatus = 'selected' | 'uploading' | 'complete' | 'failed' | 'canceled';\n\ntype FileUploadMetadata = {\n id: string;\n name: string;\n bytes: number;\n size: string;\n type: string;\n};\n\ntype FileUploadRecord = FileUploadMetadata & {\n status: FileTransferStatus;\n progress: number;\n};\n\ntype FileUploadContext = {\n selection: {\n records: FileUploadRecord[];\n limitReached: boolean;\n rejectedCount: number;\n limitRejectedCount: number;\n source: FileSelectionSource;\n };\n existing: string[];\n transfer: {\n status: 'native' | 'idle' | 'uploading' | 'complete' | 'failed' | 'canceled';\n error: string;\n };\n};\n\ntype FileUploadMachineEffects = {\n commitSelection(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n reconcileSelection(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n resetSelection(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n syncProps(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n syncDragging(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n clearExisting(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n commitExistingReplacement(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n syncTransfer(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n emitComplete(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n emitError(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n emitCancel(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n};\n\ntype CreateFileUploadMachineOptions = {\n props: FileUploadProps;\n context: FileUploadContext;\n effects: FileUploadMachineEffects;\n};\n\ntype FileRecordsEvent = MachineEventObject & {\n records: FileUploadMetadata[];\n append?: boolean;\n source?: FileSelectionSource;\n};\n\ntype ExistingFileEvent = MachineEventObject & {id?: unknown};\n\nconst uploadingHook = defineHook({\n name: 'uploading',\n state: 'transfer.direct.uploading',\n project: (snapshot) => ({\n files: snapshot.context.selection.records.filter(({status}) => status === 'uploading'),\n }),\n onDone: 'UPLOADING_DONE',\n onError: 'UPLOADING_ERROR',\n required: true,\n sends: {\n progress: (id: string, loaded: number, total: number) => ({type: 'UPLOAD_PROGRESS', id, loaded, total}),\n cancel: () => ({type: 'CANCEL_UPLOAD'}),\n fail: (error: unknown) => ({type: 'UPLOADING_ERROR', error}),\n },\n} satisfies TransitionHookDefinition<\n FileUploadContext,\n FileUploadProps,\n {files: FileUploadMetadata[]},\n 'uploading'\n>);\n\nconst fileUploadHooks = [uploadingHook] as const;\n\nconst recordsEvent = (event: MachineEventObject): FileRecordsEvent => event as FileRecordsEvent;\nconst existingFileId = (event: MachineEventObject): string => {\n const id = (event as ExistingFileEvent).id;\n return typeof id === 'string' ? id : '';\n};\nconst eventSource = (event: MachineEventObject): FileSelectionSource => {\n const source = event.source;\n return source === 'picker' || source === 'drop' || source === 'remove' || source === 'props' ? source : 'clear';\n};\n\nconst acceptedByAccept = (file: FileUploadMetadata, accept: string): boolean => {\n const tokens = accept.split(',').map((token) => token.trim().toLowerCase()).filter(Boolean);\n if (tokens.length === 0) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return tokens.some((token) => {\n if (token === '*/*') return true;\n if (token.startsWith('.')) return name.endsWith(token);\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, -1));\n return token.includes('/') && type === token;\n });\n};\n\nconst selectionPlan = (\n context: Readonly<FileUploadContext>,\n props: Readonly<FileUploadProps>,\n event: MachineEventObject,\n): FileUploadContext['selection'] => {\n const candidate = recordsEvent(event).records ?? [];\n const accepted = candidate.filter((file) => acceptedByAccept(file, props.accept));\n const base = recordsEvent(event).append && props.multiple ? [...context.selection.records] : [];\n const combined = props.multiple ? [...base, ...accepted] : accepted.slice(0, 1);\n const selected = props.maxItems > 0 ? combined.slice(0, props.maxItems) : combined;\n const currentById = new Map(context.selection.records.map((record) => [record.id, record]));\n const startsUpload = props.transport === 'direct'\n && (eventSource(event) === 'picker' || eventSource(event) === 'drop');\n const records = selected.map((file) => currentById.get(file.id) ?? {\n ...file,\n status: startsUpload ? 'uploading' as const : 'selected' as const,\n progress: 0,\n });\n return {\n records,\n limitReached: props.maxItems > 0 && records.length >= props.maxItems,\n rejectedCount: candidate.length - accepted.length + combined.length - records.length,\n limitRejectedCount: combined.length - records.length,\n source: eventSource(event),\n };\n};\n\nconst plannedRecords = ({context, props, event}: MachineScope<FileUploadContext, FileUploadProps>): FileUploadRecord[] => (\n selectionPlan(context, props, event).records\n);\nconst planIsEmpty = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => plannedRecords(scope).length === 0;\nconst planIsCapped = ({context, props, event}: MachineScope<FileUploadContext, FileUploadProps>): boolean => (\n selectionPlan(context, props, event).limitReached\n);\nconst canMutate = ({context, props}: MachineScope<FileUploadContext, FileUploadProps>): boolean => (\n !props.disabled && context.transfer.status !== 'uploading'\n);\nconst isDirect = ({props}: MachineScope<FileUploadContext, FileUploadProps>): boolean => props.transport === 'direct';\nconst isNative = ({props}: MachineScope<FileUploadContext, FileUploadProps>): boolean => props.transport === 'native';\nconst shouldUpload = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => (\n isDirect(scope)\n && (eventSource(scope.event) === 'picker' || eventSource(scope.event) === 'drop')\n && plannedRecords(scope).some(({status}) => status === 'uploading')\n);\n\nconst planSelection = ({context, props, event}: MachineScope<FileUploadContext, FileUploadProps>) => ({\n context: {selection: selectionPlan(context, props, event)},\n});\nconst clearSelection = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => ({\n context: {selection: {...context.selection, records: [], limitReached: false, rejectedCount: 0, limitRejectedCount: 0, source: 'clear' as const}},\n});\nconst beginUpload = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => {\n return {context: {transfer: {\n ...context.transfer,\n status: 'uploading' as const,\n error: '',\n }}};\n};\nconst setTransferStatus = (\n context: Readonly<FileUploadContext>,\n status: 'native' | 'idle' | 'complete' | 'failed' | 'canceled',\n error = '',\n): FileUploadContext['transfer'] => ({...context.transfer, status, error});\nconst updateUploadingRecords = (\n context: Readonly<FileUploadContext>,\n status: Extract<FileTransferStatus, 'complete' | 'failed' | 'canceled'>,\n): FileUploadRecord[] => context.selection.records.map((record) => record.status === 'uploading' ? {\n ...record,\n status,\n progress: status === 'complete' ? 1 : record.progress,\n} : record);\nconst finishUpload = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => ({context: {\n selection: {...context.selection, records: updateUploadingRecords(context, 'complete')},\n existing: [],\n transfer: setTransferStatus(context, 'complete'),\n}});\nconst failUpload = ({context, event}: MachineScope<FileUploadContext, FileUploadProps>) => ({context: {\n selection: {...context.selection, records: updateUploadingRecords(context, 'failed')},\n transfer: setTransferStatus(context, 'failed', event.error instanceof Error ? event.error.message : String(event.error ?? 'Upload failed.')),\n}});\nconst cancelUpload = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => ({context: {\n selection: {...context.selection, records: updateUploadingRecords(context, 'canceled')},\n transfer: setTransferStatus(context, 'canceled'),\n}});\nconst updateProgress = ({context, event}: MachineScope<FileUploadContext, FileUploadProps>) => {\n const id = typeof event.id === 'string' ? event.id : '';\n const loaded = Number(event.loaded);\n const total = Number(event.total);\n const progress = Number.isFinite(loaded) && Number.isFinite(total) && total > 0 ? Math.min(1, Math.max(0, loaded / total)) : 0;\n const record = context.selection.records.find((candidate) => candidate.id === id);\n if (record?.status !== 'uploading') return;\n return {context: {selection: {\n ...context.selection,\n records: context.selection.records.map((candidate) => candidate.id === id ? {...candidate, progress} : candidate),\n }}};\n};\n\nconst canMutateToEmpty = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => canMutate(scope) && planIsEmpty(scope);\nconst canMutateToCapped = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => canMutate(scope) && planIsCapped(scope);\n\nconst inventoryTransitions = (effect: 'commitSelection' | 'reconcileSelection') => [\n {target: '#inventory-empty', guard: canMutateToEmpty, reduce: 'planSelection', effects: effect},\n {target: '#inventory-capped', guard: canMutateToCapped, reduce: 'planSelection', effects: effect},\n {target: '#inventory-populated', guard: canMutate, reduce: 'planSelection', effects: effect},\n];\n\nconst createFileUploadMachine = ({props, context, effects}: CreateFileUploadMachineOptions): Machine<FileUploadContext, FileUploadProps> => createMachine<FileUploadContext, FileUploadProps>({\n type: 'parallel',\n on: {PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'}},\n states: {\n interaction: {\n initial: 'idle',\n states: {\n idle: {on: {DRAG_ENTER: {target: 'dragging', guard: canMutate, effects: 'syncDragging'}}},\n dragging: {tags: ['dragging'], on: {\n DRAG_LEAVE: {target: 'idle', effects: 'syncDragging'},\n DROP: {target: 'idle', effects: 'syncDragging'},\n RECONCILE: {target: 'idle', guard: ({props: currentProps}) => currentProps.disabled, effects: 'syncDragging'},\n }},\n },\n },\n inventory: {\n initial: 'empty',\n on: {\n FILES_CHANGED: inventoryTransitions('commitSelection'),\n RECONCILE: inventoryTransitions('reconcileSelection'),\n FILES_RESET: {target: '#inventory-empty', guard: canMutate, reduce: 'clearSelection', effects: 'resetSelection'},\n REMOVE_EXISTING: {guard: canMutate, reduce: 'removeExisting', effects: 'clearExisting'},\n CLEAR_EXISTING: {guard: canMutate, reduce: 'clearExisting', effects: 'clearExisting'},\n },\n states: {\n empty: {id: 'inventory-empty', tags: ['empty']},\n populated: {id: 'inventory-populated', tags: ['has-files']},\n capped: {id: 'inventory-capped', tags: ['has-files', 'limit-reached']},\n },\n },\n transfer: {\n initial: 'inactive',\n states: {\n inactive: {on: {\n RECONCILE: [{target: '#transfer-direct-idle', guard: isDirect, reduce: 'setDirectIdle', effects: 'syncTransfer'}, {target: '#transfer-native', reduce: 'setNative', effects: 'syncTransfer'}],\n }},\n native: {id: 'transfer-native', on: {\n RECONCILE: {target: '#transfer-direct-idle', guard: isDirect, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n }},\n direct: {\n initial: 'idle',\n on: {RECONCILE: {target: '#transfer-native', guard: isNative, reduce: 'setNative', effects: 'syncTransfer'}},\n states: {\n idle: {id: 'transfer-direct-idle', on: {FILES_CHANGED: {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'}}},\n uploading: {id: 'transfer-uploading', tags: ['uploading'], on: {\n UPLOAD_PROGRESS: {reduce: 'updateProgress', effects: 'syncTransfer'},\n UPLOADING_DONE: {target: 'complete', reduce: 'finishUpload', effects: ['commitExistingReplacement', 'syncTransfer', 'emitComplete']},\n UPLOADING_ERROR: {target: 'failed', reduce: 'failUpload', effects: ['syncTransfer', 'emitError']},\n CANCEL_UPLOAD: {target: 'canceled', reduce: 'cancelUpload', effects: ['syncTransfer', 'emitCancel']},\n RECONCILE: {target: 'canceled', guard: ({props: currentProps}) => currentProps.disabled || currentProps.transport !== 'direct', reduce: 'cancelUpload', effects: ['syncTransfer', 'emitCancel']},\n }},\n complete: {on: {FILES_CHANGED: [\n {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'},\n {target: '#transfer-direct-idle', guard: planIsEmpty, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n ]}},\n failed: {tags: ['upload-failed'], on: {\n RETRY_UPLOAD: {target: 'uploading', reduce: 'retryUpload', effects: 'syncTransfer'},\n FILES_CHANGED: [\n {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'},\n {target: '#transfer-direct-idle', guard: planIsEmpty, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n ],\n }},\n canceled: {on: {\n RETRY_UPLOAD: {target: 'uploading', reduce: 'retryUpload', effects: 'syncTransfer'},\n FILES_CHANGED: [\n {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'},\n {target: '#transfer-direct-idle', guard: planIsEmpty, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n ],\n }},\n },\n },\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n replaceProps: ({event, props: currentProps}) => ({props: event.props as FileUploadProps ?? currentProps}),\n planSelection,\n clearSelection,\n removeExisting: ({context: current, event}) => ({\n context: {existing: current.existing.filter((id) => id !== existingFileId(event))},\n }),\n clearExisting: () => ({context: {existing: []}}),\n beginUpload,\n retryUpload: ({context: current}) => ({context: {\n selection: {\n ...current.selection,\n records: current.selection.records.map((record) => (\n record.status === 'failed' || record.status === 'canceled'\n ? {...record, status: 'uploading' as const, progress: 0}\n : record\n )),\n },\n transfer: {...current.transfer, status: 'uploading', error: ''},\n }}),\n finishUpload,\n failUpload,\n cancelUpload,\n updateProgress,\n setNative: ({context: current}) => ({context: {transfer: setTransferStatus(current, 'native')}}),\n setDirectIdle: ({context: current}) => ({context: {transfer: setTransferStatus(current, 'idle')}}),\n },\n effects: {\n commitSelection: effects.commitSelection,\n reconcileSelection: effects.reconcileSelection,\n resetSelection: effects.resetSelection,\n syncProps: effects.syncProps,\n syncDragging: effects.syncDragging,\n clearExisting: effects.clearExisting,\n commitExistingReplacement: effects.commitExistingReplacement,\n syncTransfer: effects.syncTransfer,\n emitComplete: effects.emitComplete,\n emitError: effects.emitError,\n emitCancel: effects.emitCancel,\n },\n});\n\nexport {createFileUploadMachine, fileUploadHooks};\nexport type {\n CreateFileUploadMachineOptions,\n FileSelectionSource,\n FileTransferStatus,\n FileUploadContext,\n FileUploadMachineEffects,\n FileUploadMetadata,\n FileUploadRecord,\n};\n","import {defineStyles} from '../../runtime';\n\nconst fileUploadStyles = defineStyles({definition: {\n component: 'ui.file-upload',\n parts: {\n root: {\n base: [\n 'grid w-full min-w-0 gap-3',\n ],\n },\n control: {\n base: 'relative grid min-w-0 gap-3',\n },\n input: {\n base: 'sr-only',\n },\n dropzone: {\n base: [\n 'relative grid min-w-0 overflow-hidden rounded-surface-md text-inherit outline-none',\n ],\n variants: {\n layout: {\n stack: 'justify-items-center text-center',\n inline: 'grid-cols-[auto_minmax(0,1fr)_auto] items-center text-left',\n },\n size: {\n sm: 'gap-2 p-3',\n md: 'gap-3 p-4',\n lg: 'gap-3 p-5',\n },\n },\n defaults: {\n layout: 'stack',\n size: 'md',\n },\n },\n icon: {\n base: 'size-icon-lg shrink-0 fill-current text-surface-ink-muted',\n },\n body: {\n base: 'grid min-w-0 gap-1',\n },\n heading: {\n base: 'text-sm font-medium text-inherit',\n },\n text: {\n base: 'text-xs font-normal text-surface-ink-muted',\n },\n browse: {\n base: [\n 'inline-flex min-w-0 items-center justify-center rounded-control-md px-2 py-1 text-xs font-medium',\n ],\n },\n list: {\n base: 'grid min-w-0 gap-2',\n },\n empty: {\n base: 'text-xs text-surface-ink-muted',\n },\n item: {\n base: [\n 'grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 rounded-surface-sm px-3 py-2',\n ],\n },\n preview: {\n base: 'flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-surface-xs bg-interaction-hover text-surface-ink-muted',\n },\n previewImage: {\n base: 'size-full',\n },\n itemIcon: {\n base: 'size-icon fill-current',\n },\n itemBody: {\n base: 'grid min-w-0 gap-0.5',\n },\n itemName: {\n base: 'truncate text-sm font-medium text-inherit',\n },\n itemMeta: {\n base: 'truncate text-xs font-normal text-surface-ink-muted',\n },\n itemError: {\n base: 'truncate text-xs font-normal text-intent-danger-text',\n },\n remove: {\n base: [\n 'relative z-20 inline-flex size-control-sm shrink-0 items-center justify-center rounded-control-md border-0 bg-transparent',\n 'text-surface-ink-muted outline-none',\n ],\n },\n removeIcon: {\n base: 'size-icon-xs fill-current leading-none',\n },\n clear: {\n base: 'sr-only',\n },\n },\n}});\n\nexport {fileUploadStyles};\n","import {containsFiles, getFiles} from '@atlaskit/pragmatic-drag-and-drop/external/file';\nimport {dropTargetForExternal, monitorForExternal, type ExternalDropTargetEventPayloadMap} from '@atlaskit/pragmatic-drag-and-drop/external/adapter';\nimport type Alpine from 'alpinejs';\n\nimport {\n createAlpineMachine,\n defineAlpineData,\n type AlpineMachine,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport type {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {syncControlPresence, syncNativeControl} from '@client/runtime/form-control';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, dispatch, setPresence} from '@client/utils';\nimport {fileUploadSchema, type FileUploadProps} from './contract';\nimport {\n createFileUploadMachine,\n fileUploadHooks,\n type FileSelectionSource,\n type FileTransferStatus,\n type FileUploadContext,\n type FileUploadMetadata,\n type FileUploadRecord,\n} from './machine';\nimport {fileUploadStyles} from './styles';\n\ntype FileUploadTransitionName = (typeof fileUploadHooks)[number]['name'];\ntype FileUploadTransition<TName extends FileUploadTransitionName = FileUploadTransitionName> = TransitionForHook<\n Extract<(typeof fileUploadHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\n/**\n * Public Alpine API for `ui.file-upload`.\n *\n * @public\n */\ninterface UiFileUploadApi {\n /** Serializable metadata for the current pending or transferred files. */\n readonly files: readonly FileUploadRecord[];\n /** Whether pending or existing file content is present. */\n readonly hasFiles: boolean;\n /** Whether an external file is over the drop target. */\n readonly isDragging: boolean;\n /** Whether the direct transport hook is pending. */\n readonly isUploading: boolean;\n /** Whether the configured client-side item limit is full. */\n readonly isLimitReached: boolean;\n /** Opens the native file picker when interaction is available. */\n browse(): void;\n /** Removes a pending file by its stable record id. */\n remove(id: string): void;\n /** Retries failed or canceled direct-upload records. */\n retry(): void;\n /** Cancels the active direct-upload batch. */\n cancel(): void;\n /** Returns the original browser File for transport code without cloning it. */\n file(id: string): File | null;\n /** Returns a component-managed preview URL when the selected file is previewable. */\n preview(id: string): string | null;\n}\n\ntype FileUploadData = AlpineMachine<FileUploadContext, FileUploadProps, typeof fileUploadHooks> & UiFileUploadApi & {\n init(): void;\n destroy(): void;\n};\n\nconst formatBytes = (bytes: number): string => {\n if (bytes === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB'];\n const unitIndex = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const value = bytes / (1024 ** unitIndex);\n const display = value >= 10 || unitIndex === 0 ? Math.round(value) : Number(value.toFixed(1));\n return `${display} ${units[unitIndex]}`;\n};\n\nconst filesFromList = (list: FileList | null): File[] => list ? Array.from(list) : [];\nconst isImageFile = (file: File): boolean => file.type.startsWith('image/');\nconst canPreviewFile = (file: File, preview: FileUploadProps['preview']): boolean => preview !== 'none' && (preview === 'image' || isImageFile(file));\n\nconst toFileList = (files: File[]): FileList | null => {\n if (typeof DataTransfer === 'undefined') return null;\n const transfer = new DataTransfer();\n files.forEach((file) => transfer.items.add(file));\n return transfer.files;\n};\n\nconst setInputFiles = (input: HTMLInputElement, files: File[]): boolean => {\n const list = toFileList(files);\n if (!list) return false;\n try {\n input.files = list;\n return true;\n } catch {\n return false;\n }\n};\n\nconst iconSvg = (pathData: string, className: string): SVGSVGElement => {\n const namespace = 'http://www.w3.org/2000/svg';\n const icon = document.createElementNS(namespace, 'svg');\n const path = document.createElementNS(namespace, 'path');\n icon.setAttribute('viewBox', '0 0 32 32');\n icon.setAttribute('aria-hidden', 'true');\n icon.setAttribute('class', className);\n path.setAttribute('d', pathData);\n icon.append(path);\n return icon;\n};\n\nconst closeIcon = (className: string): SVGSVGElement => {\n const namespace = 'http://www.w3.org/2000/svg';\n const icon = document.createElementNS(namespace, 'svg');\n const polygon = document.createElementNS(namespace, 'polygon');\n icon.setAttribute('viewBox', '0 0 32 32');\n icon.setAttribute('aria-hidden', 'true');\n icon.setAttribute('class', className);\n polygon.setAttribute('points', '17.4141 16 24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16');\n icon.append(polygon);\n return icon;\n};\n\nconst UiFileUpload = (): TrellisAlpineComponent<FileUploadData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let cleanup: CleanupManager;\n let ignoreNativeChange = false;\n let fileSequence = 0;\n const rawFiles = new Map<string, File>();\n const previewUrls = new Map<string, string>();\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('File upload has not been initialized.');\n return rootEl;\n };\n const input = (): HTMLInputElement => {\n const control = root().querySelector<HTMLInputElement>('[data-ui-file-upload-input]');\n if (!control) throw new Error('File upload requires a native file input.');\n return control;\n };\n const dropzone = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-file-upload-dropzone]');\n const list = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-file-upload-list]');\n const currentProps = (): Readonly<FileUploadProps> => bridge.getSnapshot().props;\n const currentContext = (): Readonly<FileUploadContext> => bridge.getSnapshot().context;\n\n const metadataFor = (file: File): FileUploadMetadata => ({\n id: `file-${++fileSequence}`,\n name: file.name,\n bytes: file.size,\n size: formatBytes(file.size),\n type: file.type || 'File',\n });\n const registerFiles = (files: File[]): FileUploadMetadata[] => files.map((file) => {\n const metadata = metadataFor(file);\n rawFiles.set(metadata.id, file);\n return metadata;\n });\n const revokePreview = (id: string): void => {\n const url = previewUrls.get(id);\n if (url) URL.revokeObjectURL(url);\n previewUrls.delete(id);\n };\n const previewFor = (id: string): string | null => {\n const file = rawFiles.get(id);\n if (!file || !canPreviewFile(file, currentProps().preview)) return null;\n const existing = previewUrls.get(id);\n if (existing) return existing;\n const url = URL.createObjectURL(file);\n previewUrls.set(id, url);\n return url;\n };\n const dispatchNativeChange = (): void => {\n if (currentProps().transport === 'direct') return;\n ignoreNativeChange = true;\n input().dispatchEvent(new Event('input', {bubbles: true}));\n input().dispatchEvent(new Event('change', {bubbles: true}));\n };\n const sendFiles = (records: FileUploadMetadata[], source: FileSelectionSource, append = false): void => {\n if (currentProps().disabled || bridge.hasTag('uploading')) return;\n bridge.send({type: 'FILES_CHANGED', records, source, append});\n };\n\n const identifyExistingItems = (): string[] => {\n const used = new Set<string>();\n return [...root().querySelectorAll<HTMLElement>('[data-ui-file-upload-item][data-existing-file]')]\n .map((item, index) => {\n const authored = item.dataset.fileId || item.dataset.uploadKey || `existing-${index + 1}`;\n let id = authored;\n let suffix = 2;\n while (used.has(id)) id = `${authored}-${suffix++}`;\n used.add(id);\n item.dataset.fileId = id;\n item.querySelectorAll<HTMLElement>('[data-ui-file-upload-remove][data-existing-file]')\n .forEach((remove) => { remove.dataset.fileId = id; });\n return id;\n });\n };\n\n const renderFiles = (context: Readonly<FileUploadContext>, props: Readonly<FileUploadProps>): void => {\n const container = list();\n if (!container) return;\n container.querySelectorAll('[data-ui-file-upload-pending]').forEach((item) => item.remove());\n const records = context.selection.records;\n const selectedIds = new Set(records.map(({id}) => id));\n [...previewUrls.keys()].filter((id) => !selectedIds.has(id)).forEach(revokePreview);\n [...rawFiles.keys()].filter((id) => !selectedIds.has(id)).forEach((id) => rawFiles.delete(id));\n const activeExistingIds = new Set(context.existing);\n container.querySelectorAll<HTMLElement>('[data-ui-file-upload-item][data-existing-file]')\n .forEach((item) => { item.hidden = !activeExistingIds.has(item.dataset.fileId ?? ''); });\n const empty = container.querySelector<HTMLElement>('[data-ui-file-upload-empty]');\n if (empty) empty.hidden = records.length > 0 || context.existing.length > 0;\n\n const itemClass = resolveStyle({part: fileUploadStyles.parts.item, className: props.itemClass});\n const previewClass = resolveStyle({part: fileUploadStyles.parts.preview});\n const imageClass = resolveStyle({part: fileUploadStyles.parts.previewImage});\n const bodyClass = resolveStyle({part: fileUploadStyles.parts.itemBody});\n const nameClass = resolveStyle({part: fileUploadStyles.parts.itemName});\n const metaClass = resolveStyle({part: fileUploadStyles.parts.itemMeta});\n const removeClass = resolveStyle({part: fileUploadStyles.parts.remove});\n const removeIconClass = resolveStyle({part: fileUploadStyles.parts.removeIcon});\n const itemIconClass = resolveStyle({part: fileUploadStyles.parts.itemIcon});\n\n records.forEach((record) => {\n const item = document.createElement('li');\n item.dataset.uiFileUploadItem = '';\n item.dataset.uiFileUploadPending = '';\n item.dataset.fileId = record.id;\n item.dataset.status = record.status;\n item.dataset.progress = String(record.progress);\n item.className = itemClass;\n\n const preview = document.createElement('span');\n preview.dataset.uiFileUploadPreview = '';\n preview.className = previewClass;\n preview.setAttribute('aria-hidden', 'true');\n const url = previewFor(record.id);\n if (url) {\n const image = document.createElement('img');\n image.src = url;\n image.alt = '';\n image.loading = 'lazy';\n image.decoding = 'async';\n image.className = `outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10 block size-full object-cover ${imageClass}`;\n preview.append(image);\n } else {\n preview.append(iconSvg('M25.7,9.3l-7-7A.9078.9078,0,0,0,18,2H8A2.0059,2.0059,0,0,0,6,4V28a2.0059,2.0059,0,0,0,2,2H24a2.0059,2.0059,0,0,0,2-2V10A.9078.9078,0,0,0,25.7,9.3ZM18,4.4,23.6,10H18ZM24,28H8V4h8v6a2.0059,2.0059,0,0,0,2,2h6Z', itemIconClass));\n }\n\n const body = document.createElement('span');\n body.className = bodyClass;\n const name = document.createElement('span');\n name.dataset.uiFileUploadItemName = '';\n name.className = nameClass;\n name.textContent = record.name;\n const meta = document.createElement('span');\n meta.dataset.uiFileUploadItemMeta = '';\n meta.className = metaClass;\n meta.textContent = [record.size, record.type].filter(Boolean).join(' · ');\n body.append(name, meta);\n\n const remove = document.createElement('button');\n remove.type = 'button';\n remove.dataset.uiFileUploadRemove = '';\n remove.dataset.fileId = record.id;\n remove.className = removeClass;\n remove.disabled = bridge.hasTag('uploading');\n remove.setAttribute('aria-label', `Remove ${record.name}`);\n remove.append(closeIcon(removeIconClass));\n item.append(preview, body, remove);\n container.append(item);\n });\n };\n\n const syncDom = (\n context: Readonly<FileUploadContext> = currentContext(),\n props: Readonly<FileUploadProps> = currentProps(),\n ): void => {\n const records = context.selection.records;\n const existing = context.existing.length > 0;\n const hasFiles = records.length > 0 || existing;\n const unavailable = props.disabled || context.selection.limitReached || context.transfer.status === 'uploading';\n const control = input();\n syncNativeControl({input: control, state: {disabled: props.disabled, required: props.required, invalid: props.invalid}});\n if (props.transport === 'native' && props.name) control.name = props.name;\n else control.removeAttribute('name');\n control.multiple = props.multiple;\n props.accept ? control.setAttribute('accept', props.accept) : control.removeAttribute('accept');\n props.capture ? control.setAttribute('capture', props.capture) : control.removeAttribute('capture');\n if (unavailable && !props.disabled) {\n control.setAttribute('aria-disabled', 'true');\n control.tabIndex = -1;\n } else if (!props.disabled) {\n control.removeAttribute('aria-disabled');\n control.removeAttribute('tabindex');\n }\n if (control.form) control.form.enctype = 'multipart/form-data';\n\n syncControlPresence({el: root(), state: props, value: 'true'});\n setPresence({el: root(), attr: 'data-empty', present: !hasFiles, value: 'true'});\n setPresence({el: root(), attr: 'data-has-files', present: hasFiles, value: 'true'});\n setPresence({el: root(), attr: 'data-multiple', present: props.multiple, value: 'true'});\n setPresence({el: root(), attr: 'data-max-items-reached', present: context.selection.limitReached, value: 'true'});\n setPresence({el: root(), attr: 'data-has-existing-file', present: existing, value: 'true'});\n root().dataset.transport = props.transport;\n root().dataset.transferState = context.transfer.status;\n const zone = dropzone();\n if (zone) {\n syncControlPresence({el: zone, state: {disabled: unavailable, invalid: props.invalid}, value: 'true'});\n setPresence({el: zone, attr: 'data-multiple', present: props.multiple, value: 'true'});\n setPresence({el: zone, attr: 'data-has-files', present: hasFiles, value: 'true'});\n setPresence({el: zone, attr: 'data-max-items-reached', present: context.selection.limitReached, value: 'true'});\n }\n renderFiles(context, props);\n };\n\n const initialContext = (props: FileUploadProps): FileUploadContext => ({\n selection: {records: [], limitReached: false, rejectedCount: 0, limitRejectedCount: 0, source: 'clear'},\n existing: identifyExistingItems(),\n transfer: {status: props.transport === 'native' ? 'native' : 'idle', error: ''},\n });\n const syncSelection = (scope: {context: Readonly<FileUploadContext>; props: Readonly<FileUploadProps>}): boolean => {\n const selectedFiles = scope.context.selection.records.flatMap(({id}) => rawFiles.get(id) ?? []);\n if (!setInputFiles(input(), selectedFiles)) {\n input().value = '';\n bridge.send('FILES_RESET');\n return false;\n }\n syncDom(scope.context, scope.props);\n return true;\n };\n\n const bridge = createAlpineMachine({\n schema: fileUploadSchema,\n hooks: fileUploadHooks,\n createMachine: ({props}) => createFileUploadMachine({\n props,\n context: initialContext(props),\n effects: {\n commitSelection: (scope) => {\n if (!syncSelection(scope)) return;\n if (scope.context.selection.limitRejectedCount > 0) {\n dispatch({el: root(), name: 'ui:file-upload-limit', detail: {rejectedCount: scope.context.selection.limitRejectedCount}});\n }\n if (scope.context.selection.source !== 'picker') dispatchNativeChange();\n dispatch({\n el: root(),\n name: 'ui:file-upload-change',\n detail: {files: scope.context.selection.records, source: scope.context.selection.source},\n });\n },\n reconcileSelection: (scope) => { syncSelection(scope); },\n resetSelection: (scope) => { input().value = ''; syncDom(scope.context, scope.props); },\n syncProps: (scope) => {\n syncDom(scope.context, scope.props);\n bridge.send({type: 'RECONCILE', records: scope.context.selection.records, source: 'props'});\n },\n syncDragging: (scope) => {\n const dragging = scope.snapshot.tags.includes('dragging');\n setPresence({el: root(), attr: 'data-dragging', present: dragging, value: 'true'});\n const zone = dropzone();\n if (zone) setPresence({el: zone, attr: 'data-dragging', present: dragging, value: 'true'});\n },\n clearExisting: (scope) => {\n const activeIds = new Set(scope.context.existing);\n const removedIds = [...root().querySelectorAll<HTMLElement>(\n '[data-ui-file-upload-item][data-existing-file]:not([hidden])',\n )].flatMap((item) => {\n const id = item.dataset.fileId;\n if (!id || activeIds.has(id)) return [];\n item.querySelectorAll<HTMLInputElement>('[data-ui-file-upload-clear]')\n .forEach((clear) => {\n clear.checked = true;\n clear.dispatchEvent(new Event('change', {bubbles: true}));\n });\n return [id];\n });\n syncDom(scope.context, scope.props);\n dispatch({\n el: root(),\n name: 'ui:file-upload-change',\n detail: {\n files: scope.context.selection.records,\n source: scope.context.selection.source,\n removedExistingIds: removedIds,\n },\n });\n },\n commitExistingReplacement: (scope) => {\n const removedIds = [...root().querySelectorAll<HTMLElement>(\n '[data-ui-file-upload-item][data-existing-file]:not([hidden])',\n )].flatMap((item) => item.dataset.fileId ?? []);\n syncDom(scope.context, scope.props);\n if (removedIds.length === 0) return;\n dispatch({\n el: root(),\n name: 'ui:file-upload-change',\n detail: {\n files: scope.context.selection.records,\n source: scope.context.selection.source,\n removedExistingIds: removedIds,\n },\n });\n },\n syncTransfer: (scope) => syncDom(scope.context, scope.props),\n emitComplete: (scope) => dispatch({el: root(), name: 'ui:file-upload-complete', detail: {files: scope.context.selection.records}}),\n emitError: (scope) => dispatch({el: root(), name: 'ui:file-upload-error', detail: {files: scope.context.selection.records, error: scope.context.transfer.error}}),\n emitCancel: (scope) => dispatch({el: root(), name: 'ui:file-upload-cancel', detail: {files: scope.context.selection.records}}),\n },\n }),\n });\n\n const component: TrellisAlpineComponent<FileUploadData> = {\n ...bridge,\n get files() { return this.snapshot.current?.context.selection.records ?? []; },\n get hasFiles() { return (this.snapshot.current?.context.selection.records.length ?? 0) > 0 || (this.snapshot.current?.context.existing.length ?? 0) > 0; },\n get isDragging() { return this.snapshot.current?.tags.includes('dragging') ?? false; },\n get isUploading() { return this.snapshot.current?.tags.includes('uploading') ?? false; },\n get isLimitReached() { return this.snapshot.current?.context.selection.limitReached ?? false; },\n init() {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n const control = input();\n addListener({target: control, event: 'input', handler: (event) => {\n if (currentProps().transport === 'direct') event.stopPropagation();\n }, cleanup});\n addListener({target: control, event: 'change', handler: (event) => {\n if (currentProps().transport === 'direct') event.stopPropagation();\n if (ignoreNativeChange) { ignoreNativeChange = false; return; }\n sendFiles(registerFiles(filesFromList(control.files)), 'picker');\n }, cleanup});\n addListener({target: root(), event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const existing = target.closest<HTMLElement>('[data-ui-file-upload-remove][data-existing-file][data-file-id]');\n if (existing?.dataset.fileId) {\n event.preventDefault();\n bridge.send({type: 'REMOVE_EXISTING', id: existing.dataset.fileId});\n return;\n }\n const remove = target.closest<HTMLElement>('[data-ui-file-upload-remove][data-file-id]');\n if (remove?.dataset.fileId) { event.preventDefault(); component.remove(remove.dataset.fileId); }\n }, cleanup});\n addListener({target: root(), event: 'trellis:file-upload-clear-existing', handler: () => {\n bridge.send('CLEAR_EXISTING');\n }, cleanup});\n const zone = dropzone();\n if (zone) {\n cleanup.add(dropTargetForExternal({\n element: zone,\n canDrop: ({source}) => !currentProps().disabled && !bridge.hasTag('uploading') && containsFiles({source}),\n getDropEffect: () => 'copy',\n onDragEnter: () => bridge.send('DRAG_ENTER'),\n onDragLeave: () => bridge.send('DRAG_LEAVE'),\n onDrop: ({source}: ExternalDropTargetEventPayloadMap['onDrop']) => {\n bridge.send('DROP');\n if (!containsFiles({source})) return;\n sendFiles(registerFiles(getFiles({source})), 'drop', currentProps().multiple);\n },\n }));\n cleanup.add(monitorForExternal({canMonitor: ({source}) => containsFiles({source}), onDrop: () => bridge.send('DRAG_LEAVE')}));\n }\n syncDom();\n bridge.send({type: 'RECONCILE', records: [], source: 'props'});\n },\n destroy() {\n previewUrls.forEach((url) => URL.revokeObjectURL(url));\n previewUrls.clear();\n rawFiles.clear();\n bridge.disconnect();\n rootEl = null;\n },\n browse() { if (!currentProps().disabled && !bridge.hasTag('uploading')) input().click(); },\n remove(id) {\n if (currentProps().disabled || bridge.hasTag('uploading') || !rawFiles.has(id)) return;\n const records = currentContext().selection.records.filter((record) => record.id !== id);\n sendFiles(records, 'remove');\n },\n retry() { bridge.send('RETRY_UPLOAD'); },\n cancel() { bridge.send('CANCEL_UPLOAD'); },\n file(id) { return rawFiles.get(id) ?? null; },\n preview(id) { return previewFor(id); },\n };\n return component;\n};\n\nconst registerFileUpload = defineAlpineData('UiFileUpload', UiFileUpload);\n\nexport {registerFileUpload, UiFileUpload};\nexport type {\n FileTransferStatus,\n FileUploadData,\n FileUploadMetadata,\n FileUploadRecord,\n FileUploadTransition,\n UiFileUploadApi,\n};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerFileUpload as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerFileUpload = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerFileUpload};\nexport default registerFileUpload;\nexport * from './index';\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"entry.generated-OT_bt7F2.js","names":[],"sources":["../../../../../../../../client/src/runtime/shell-breakpoint.ts","../../../../../../../../client/src/components/sidebar/contract.ts","../../../../../../../../client/src/components/sidebar/machine.ts","../../../../../../../../client/src/components/sidebar/styles.ts","../../../../../../../../client/src/components/sidebar/index.ts","../../../../../../../../client/src/components/sidebar/entry.generated.ts"],"sourcesContent":["const shellBreakpointPixels = (reference: HTMLElement): number => {\n const value = getComputedStyle(reference).getPropertyValue('--ui-shell-sidebar-breakpoint');\n const pixels = Number.parseFloat(value);\n return Number.isFinite(pixels) ? pixels : Number.POSITIVE_INFINITY;\n};\n\nexport {shellBreakpointPixels};\n","import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n ELEVATION_REFERENCES,\n SURFACE_REFERENCES,\n type ElevationReference,\n type SurfaceReference,\n} from '../common';\n\nconst SIDEBAR_SIDES = ['left', 'right'] as const;\nconst SIDEBAR_PLACEMENTS = ['side', 'top'] as const;\nconst SIDEBAR_MOBILE_PRESENTATIONS = ['drawer', 'fullscreen'] as const;\nconst SIDEBAR_AS = ['div', 'aside', 'header'] as const;\nconst SIDEBAR_COLLAPSES = ['none', 'mobile', 'desktop', 'both'] as const;\nconst SIDEBAR_TOGGLE_ACTIONS = ['toggle', 'open', 'close', 'stash', 'expand'] as const;\nconst SIDEBAR_ITEM_AS = ['a', 'button'] as const;\nconst SIDEBAR_ITEM_VARIANTS = ['ghost', 'surface'] as const;\nconst SIDEBAR_ITEM_COLORS = ['neutral', 'accent'] as const;\nconst SIDEBAR_SURFACES = SURFACE_REFERENCES;\nconst SIDEBAR_ELEVATIONS = ELEVATION_REFERENCES;\n\nconst sidebarSchema = {\n as: oneOf(SIDEBAR_AS, 'div'),\n id: string.default('ui-sidebar'),\n placement: oneOf(SIDEBAR_PLACEMENTS, 'side'),\n mobilePresentation: oneOf(SIDEBAR_MOBILE_PRESENTATIONS, 'drawer'),\n side: oneOf(SIDEBAR_SIDES, 'left'),\n surface: oneOf(SIDEBAR_SURFACES, 'inherit'),\n elevation: oneOf(SIDEBAR_ELEVATIONS, 'none'),\n drawerElevation: oneOf(SIDEBAR_ELEVATIONS, '2'),\n divider: bool.default(true),\n sticky: bool.default(true),\n collapse: oneOf(SIDEBAR_COLLAPSES, 'mobile'),\n open: bool,\n stashed: bool,\n persist: bool.default(true),\n edgeReveal: bool.default(true),\n resizable: bool,\n class: string,\n};\n\nconst sidebarItemSchema = {\n as: oneOf(SIDEBAR_ITEM_AS, 'a'),\n variant: oneOf(SIDEBAR_ITEM_VARIANTS, 'ghost'),\n color: oneOf(SIDEBAR_ITEM_COLORS, 'neutral'),\n href: string,\n current: bool,\n disabled: bool,\n icon: string,\n iconTrailing: string,\n badge: string,\n class: string,\n};\n\nconst sidebarGroupSchema = {\n heading: string,\n expandable: bool,\n expanded: bool.default(true),\n icon: string,\n class: string,\n};\n\nconst sidebarToggleSchema = {\n target: string,\n icon: string.default('side_panel'),\n label: string.default('Toggle sidebar'),\n action: oneOf(SIDEBAR_TOGGLE_ACTIONS, 'toggle'),\n class: string,\n};\n\nconst sidebarPanelSchema = {\n class: string,\n};\n\nconst sidebarNavSchema = {\n label: string,\n labelled: string,\n class: string,\n};\n\ntype SidebarProps = SchemaToProps<typeof sidebarSchema>;\ntype SidebarAs = typeof SIDEBAR_AS[number];\ntype SidebarToggleAction = typeof SIDEBAR_TOGGLE_ACTIONS[number];\ntype SidebarCollapse = typeof SIDEBAR_COLLAPSES[number];\ntype SidebarItemColor = typeof SIDEBAR_ITEM_COLORS[number];\ntype SidebarItemVariant = typeof SIDEBAR_ITEM_VARIANTS[number];\ntype SidebarSide = typeof SIDEBAR_SIDES[number];\ntype SidebarPlacement = typeof SIDEBAR_PLACEMENTS[number];\ntype SidebarMobilePresentation = typeof SIDEBAR_MOBILE_PRESENTATIONS[number];\ntype SidebarSurface = SurfaceReference;\ntype SidebarElevation = ElevationReference;\n\nexport {\n SIDEBAR_AS,\n SIDEBAR_COLLAPSES,\n SIDEBAR_ITEM_AS,\n SIDEBAR_ITEM_COLORS,\n SIDEBAR_ITEM_VARIANTS,\n SIDEBAR_ELEVATIONS,\n SIDEBAR_SIDES,\n SIDEBAR_PLACEMENTS,\n SIDEBAR_MOBILE_PRESENTATIONS,\n SIDEBAR_TOGGLE_ACTIONS,\n SIDEBAR_SURFACES,\n sidebarGroupSchema,\n sidebarItemSchema,\n sidebarNavSchema,\n sidebarPanelSchema,\n sidebarSchema,\n sidebarToggleSchema,\n};\nexport type {\n SidebarAs,\n SidebarCollapse,\n SidebarElevation,\n SidebarItemColor,\n SidebarItemVariant,\n SidebarMobilePresentation,\n SidebarPlacement,\n SidebarProps,\n SidebarSide,\n SidebarSurface,\n SidebarToggleAction,\n};\n","import {createMachine, type Machine, type MachineEventObject, type MachineScope} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {SidebarPlacement, SidebarProps} from './contract';\n\ntype SidebarMode = 'mobile' | 'desktop';\ntype SidebarPresentation = 'drawer' | 'layout';\ntype SidebarTarget = 'mobileClosed' | 'mobileOpen' | 'desktopExpanded' | 'desktopStashed' | 'desktopDrawer' | 'desktopTop';\n\ntype SidebarContext = {\n responsive: {mode: SidebarMode};\n layout: {desktopStashed: boolean; desktopDrawerOpen: boolean; width: string; height: string};\n transition: {target: SidebarTarget; presentation: SidebarPresentation};\n};\n\ntype SidebarMachineEffects = {\n prepareOpen(scope: MachineScope<SidebarContext, SidebarProps>): void;\n finishOpen(): void;\n prepareClose(scope: MachineScope<SidebarContext, SidebarProps>): void;\n finishClose(): void;\n sync(): void;\n syncProps(): void;\n};\n\ntype CreateSidebarMachineOptions = {\n props: SidebarProps;\n mode: SidebarMode;\n desktopStashed: boolean;\n effects: SidebarMachineEffects;\n};\n\nconst projectTransition = ({context}: {context: Readonly<SidebarContext>}) => ({\n mode: context.responsive.mode,\n presentation: context.transition.presentation,\n width: context.layout.width,\n height: context.layout.height,\n});\n\ntype SidebarTransitionData = ReturnType<typeof projectTransition>;\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'opening',\n project: projectTransition,\n onDone: 'OPENING_DONE',\n onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<SidebarContext, SidebarProps, SidebarTransitionData, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'closing',\n project: projectTransition,\n onDone: 'CLOSING_DONE',\n onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<SidebarContext, SidebarProps, SidebarTransitionData, 'closing'>);\n\nconst sidebarHooks = [openingHook, closingHook] as const;\n\nconst targetFrom = (event: MachineEventObject, fallback: SidebarTarget): SidebarTarget => (\n typeof event.target === 'string' ? event.target as SidebarTarget : fallback\n);\nconst presentationFrom = (event: MachineEventObject): SidebarPresentation => event.presentation === 'layout' ? 'layout' : 'drawer';\n\nconst createSidebarMachine = ({props, mode, desktopStashed, effects}: CreateSidebarMachineOptions): Machine<SidebarContext, SidebarProps> => {\n const initial: SidebarTarget = mode === 'mobile'\n ? props.open ? 'mobileOpen' : 'mobileClosed'\n : props.placement === 'top' ? 'desktopTop' : desktopStashed ? 'desktopStashed' : 'desktopExpanded';\n\n const beginOpen = {target: 'opening', reduce: 'beginOpen', effects: 'prepareOpen'} as const;\n const beginClose = {target: 'closing', reduce: 'beginClose', effects: 'prepareClose'} as const;\n const syncProps = {reduce: 'replaceProps', effects: 'syncProps'} as const;\n\n return createMachine<SidebarContext, SidebarProps>({\n initial,\n on: {\n MODE: [\n {target: 'desktopTop', guard: 'toTop', reduce: 'setMode', effects: 'sync'},\n {target: 'desktopDrawer', guard: 'toDesktopDrawer', reduce: 'setMode', effects: 'sync'},\n {target: 'desktopStashed', guard: 'toDesktopStashed', reduce: 'setMode', effects: 'sync'},\n {target: 'desktopExpanded', guard: 'toDesktop', reduce: 'setMode', effects: 'sync'},\n {target: 'mobileOpen', guard: 'toMobileOpen', reduce: 'setMode', effects: 'sync'},\n {target: 'mobileClosed', reduce: 'setMode', effects: 'sync'},\n ],\n RESIZE: {reduce: 'resize', effects: 'sync'},\n },\n states: {\n mobileClosed: {tags: ['mobile', 'closed'], on: {OPEN: beginOpen, EXPAND: beginOpen, PROPS_CHANGED: syncProps}},\n mobileOpen: {tags: ['mobile', 'visible', 'expanded', 'open'], on: {CLOSE: beginClose, STASH: beginClose, TOGGLE: beginClose, PROPS_CHANGED: syncProps}},\n desktopExpanded: {tags: ['desktop', 'visible', 'expanded', 'open', 'layout'], on: {CLOSE: beginClose, STASH: beginClose, TOGGLE: beginClose, OPEN: {}, EXPAND: {}, PROPS_CHANGED: syncProps}},\n desktopStashed: {tags: ['desktop', 'stashed', 'closed'], on: {OPEN: beginOpen, EXPAND: beginOpen, TOGGLE: beginOpen, PROPS_CHANGED: syncProps}},\n desktopDrawer: {tags: ['desktop', 'stashed', 'visible', 'expanded', 'open', 'drawer'], on: {CLOSE: beginClose, STASH: beginClose, TOGGLE: beginClose, EXPAND: beginOpen, PROPS_CHANGED: syncProps}},\n desktopTop: {tags: ['desktop', 'top', 'visible', 'expanded', 'open', 'layout'], on: {PROPS_CHANGED: syncProps}},\n opening: {\n tags: ['visible', 'expanded', 'transitioning'],\n on: {\n OPENING_DONE: [\n {target: 'mobileOpen', guard: 'targetsMobileOpen', effects: 'finishOpen'},\n {target: 'desktopDrawer', guard: 'targetsDesktopDrawer', effects: 'finishOpen'},\n {target: 'desktopTop', guard: 'targetsDesktopTop', effects: 'finishOpen'},\n {target: 'desktopExpanded', effects: 'finishOpen'},\n ],\n OPENING_ERROR: [\n {target: 'mobileOpen', guard: 'targetsMobileOpen', effects: 'finishOpen'},\n {target: 'desktopDrawer', guard: 'targetsDesktopDrawer', effects: 'finishOpen'},\n {target: 'desktopTop', guard: 'targetsDesktopTop', effects: 'finishOpen'},\n {target: 'desktopExpanded', effects: 'finishOpen'},\n ],\n CLOSE: beginClose,\n STASH: beginClose,\n TOGGLE: beginClose,\n PROPS_CHANGED: syncProps,\n },\n },\n closing: {\n tags: ['visible', 'transitioning'],\n on: {\n CLOSING_DONE: [\n {target: 'mobileClosed', guard: 'targetsMobileClosed', effects: 'finishClose'},\n {target: 'desktopStashed', effects: 'finishClose'},\n ],\n CLOSING_ERROR: [\n {target: 'mobileClosed', guard: 'targetsMobileClosed', effects: 'finishClose'},\n {target: 'desktopStashed', effects: 'finishClose'},\n ],\n OPEN: beginOpen,\n EXPAND: beginOpen,\n TOGGLE: beginOpen,\n PROPS_CHANGED: syncProps,\n },\n },\n },\n }, {\n props,\n context: {\n responsive: {mode},\n layout: {\n desktopStashed,\n desktopDrawerOpen: false,\n width: 'var(--spacing-sidebar-width)',\n height: '',\n },\n transition: {target: initial, presentation: initial === 'desktopExpanded' || initial === 'desktopTop' ? 'layout' : 'drawer'},\n },\n reducers: {\n beginOpen: ({context, event}) => {\n const target = targetFrom(event, 'mobileOpen');\n return {context: {\n ...context,\n layout: {\n ...context.layout,\n desktopStashed: target === 'desktopDrawer'\n ? true\n : target === 'desktopExpanded' ? false : context.layout.desktopStashed,\n desktopDrawerOpen: target === 'desktopDrawer'\n || (target === 'mobileOpen' && context.layout.desktopStashed),\n },\n transition: {target, presentation: presentationFrom(event)},\n }};\n },\n beginClose: ({context, event}) => {\n const target = targetFrom(event, 'mobileClosed');\n const closesDesktopDrawer = target === 'desktopStashed'\n || (target === 'mobileClosed' && context.layout.desktopStashed);\n return {context: {\n ...context,\n layout: {\n ...context.layout,\n desktopStashed: target === 'desktopStashed' ? true : context.layout.desktopStashed,\n desktopDrawerOpen: closesDesktopDrawer ? false : context.layout.desktopDrawerOpen,\n },\n transition: {target, presentation: presentationFrom(event)},\n }};\n },\n setMode: ({context, event}) => ({context: {...context, responsive: {mode: event.mode === 'desktop' ? 'desktop' : 'mobile'}}}),\n replaceProps: ({context, event}) => ({\n props: event.props as SidebarProps,\n context,\n }),\n resize: ({context, event}) => ({context: {\n ...context,\n layout: {\n ...context.layout,\n width: typeof event.width === 'string' ? event.width : context.layout.width,\n height: typeof event.height === 'string' ? event.height : context.layout.height,\n },\n }}),\n },\n guards: {\n toTop: ({event}) => event.mode === 'desktop' && event.placement === 'top',\n toDesktopDrawer: ({event}) => event.mode === 'desktop' && event.stashed === true && event.open === true,\n toDesktopStashed: ({event}) => event.mode === 'desktop' && event.stashed === true,\n toDesktop: ({event}) => event.mode === 'desktop',\n toMobileOpen: ({event}) => event.mode === 'mobile' && event.open === true,\n targetsMobileOpen: ({context}) => context.transition.target === 'mobileOpen',\n targetsMobileClosed: ({context}) => context.transition.target === 'mobileClosed',\n targetsDesktopDrawer: ({context}) => context.transition.target === 'desktopDrawer',\n targetsDesktopTop: ({context}) => context.transition.target === 'desktopTop',\n },\n effects: {\n prepareOpen: effects.prepareOpen,\n finishOpen: effects.finishOpen,\n prepareClose: effects.prepareClose,\n finishClose: effects.finishClose,\n sync: effects.sync,\n syncProps: effects.syncProps,\n },\n });\n};\n\nexport {createSidebarMachine, sidebarHooks};\nexport type {CreateSidebarMachineOptions, SidebarContext, SidebarMachineEffects, SidebarMode, SidebarPresentation, SidebarTarget};\n","import {defineStyles} from '../../runtime';\nimport {elevationReferenceClasses} from '../common';\n\nconst SIDEBAR_ELEVATION_CLASSES = elevationReferenceClasses('--ui-sidebar-resting-elevation');\nconst SIDEBAR_DRAWER_ELEVATION_CLASSES = elevationReferenceClasses('--ui-sidebar-drawer-elevation');\n\nconst sidebarStyles = defineStyles({definition: {\n component: 'ui.sidebar',\n parts: {\n root: {\n base: [\n 'fixed inset-y-2 z-dialog flex min-h-0 w-[var(--spacing-sidebar-drawer-width)] flex-col overflow-hidden rounded-overlay-md',\n 'border-separator outline-none',\n 'data-[drawer-state=open]:bg-surface',\n 'data-[mobile-state=closed]:-translate-x-full data-[mobile-state=open]:translate-x-0',\n 'data-[responsive-mode=desktop]:z-auto data-[responsive-mode=desktop]:w-[var(--ui-sidebar-width,var(--spacing-sidebar-width))] data-[responsive-mode=desktop]:translate-x-0 data-[responsive-mode=desktop]:data-[mobile-state=closed]:translate-x-0 data-[responsive-mode=desktop]:data-[mobile-state=open]:translate-x-0',\n 'data-[responsive-mode=desktop]:data-[desktop-state=expanded]:inset-y-0 data-[responsive-mode=desktop]:data-[desktop-state=expanded]:w-full data-[responsive-mode=desktop]:data-[desktop-state=expanded]:rounded-none',\n 'data-[responsive-mode=desktop]:data-[desktop-state=stashed]:data-[drawer-state=closed]:data-[sidebar-exiting=false]:hidden',\n 'data-[responsive-mode=desktop]:data-[desktop-state=stashed]:data-[drawer-state=open]:fixed',\n 'data-[responsive-mode=desktop]:data-[desktop-state=stashed]:data-[drawer-state=open]:z-dialog data-[responsive-mode=desktop]:data-[desktop-state=stashed]:data-[drawer-state=open]:h-auto',\n '[grid-area:sidebar]',\n 'data-[placement=top]:data-[responsive-mode=desktop]:relative data-[placement=top]:data-[responsive-mode=desktop]:inset-auto data-[placement=top]:data-[responsive-mode=desktop]:z-auto data-[placement=top]:data-[responsive-mode=desktop]:h-[var(--ui-sidebar-height,auto)] data-[placement=top]:data-[responsive-mode=desktop]:w-full data-[placement=top]:data-[responsive-mode=desktop]:max-w-none data-[placement=top]:data-[responsive-mode=desktop]:translate-x-0 data-[placement=top]:data-[responsive-mode=desktop]:flex-row data-[placement=top]:data-[responsive-mode=desktop]:overflow-visible',\n 'data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-content]]:overflow-visible data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-content]]:flex-1',\n 'data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-content]>[data-ui-scroll-area]]:overflow-visible data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-content-inner]]:flex data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-content-inner]]:items-center',\n 'data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-nav]]:flex data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-nav]]:items-center',\n 'data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-item]]:w-auto',\n 'data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-footer]]:flex data-[placement=top]:data-[responsive-mode=desktop]:[&_[data-ui-sidebar-footer]]:items-center',\n ],\n variants: {\n elevation: SIDEBAR_ELEVATION_CLASSES,\n drawerElevation: SIDEBAR_DRAWER_ELEVATION_CLASSES,\n mobilePresentation: {\n drawer: '',\n fullscreen: [\n '[&:not([data-responsive-mode=desktop])]:inset-0',\n '[&:not([data-responsive-mode=desktop])]:h-dvh',\n '[&:not([data-responsive-mode=desktop])]:w-full',\n '[&:not([data-responsive-mode=desktop])]:max-w-none',\n '[&:not([data-responsive-mode=desktop])]:rounded-none',\n '[&:not([data-responsive-mode=desktop])]:border-0',\n ].join(' '),\n },\n divider: {\n true: 'data-[placement=side][data-side=left]:border-r-edge-divider data-[placement=side][data-side=right]:border-l-edge-divider data-[placement=top]:border-b-edge-divider',\n false: '',\n },\n side: {\n left: 'left-2 border-r-edge-divider data-[responsive-mode=desktop]:data-[desktop-state=expanded]:left-auto',\n right: 'right-2 border-l-edge-divider data-[mobile-state=closed]:translate-x-full data-[mobile-state=open]:translate-x-0 data-[responsive-mode=desktop]:data-[desktop-state=expanded]:right-auto',\n },\n sticky: {\n true: 'data-[responsive-mode=desktop]:sticky data-[responsive-mode=desktop]:h-screen',\n false: 'data-[responsive-mode=desktop]:relative data-[responsive-mode=desktop]:h-auto data-[responsive-mode=desktop]:data-[sticky=false]:relative data-[responsive-mode=desktop]:data-[sticky=False]:relative data-[responsive-mode=desktop]:data-[sticky=false]:h-auto data-[responsive-mode=desktop]:data-[sticky=False]:h-auto',\n },\n },\n defaults: {\n elevation: 'none',\n drawerElevation: '2',\n mobilePresentation: 'drawer',\n divider: true,\n side: 'left',\n sticky: true,\n },\n },\n header: {\n base: 'flex min-h-control-xlg shrink-0 items-center gap-sidebar-header-gap px-sidebar-header-padding-inline py-sidebar-header-padding-block',\n },\n content: {\n base: [\n 'min-h-0 flex-1 overflow-hidden',\n ],\n },\n contentInner: {\n base: [\n 'grid min-w-0 content-start gap-sidebar-content-gap px-sidebar-content-padding-inline py-sidebar-content-padding-block',\n '[&>[data-ui-separator]]:-mx-sidebar-content-padding-inline [&>[data-ui-separator]]:w-auto',\n ],\n },\n footer: {\n base: 'grid shrink-0 gap-sidebar-content-gap px-sidebar-content-padding-inline py-sidebar-content-padding-block',\n },\n nav: {\n base: 'grid gap-sidebar-content-gap',\n },\n item: {\n base: [\n 'group/sidebar-item flex h-control-md w-full min-w-0 select-none items-center gap-2 rounded-control-md px-2',\n 'border border-transparent text-left text-sm font-medium outline-none',\n 'cursor-default',\n 'data-disabled:pointer-events-none',\n ],\n variants: {\n variant: {\n ghost: '',\n surface: 'data-current:border-transparent data-current:shadow-none',\n },\n color: {\n neutral: '',\n accent: '',\n },\n withActions: {\n true: 'pr-9',\n false: '',\n },\n },\n defaults: {\n variant: 'ghost',\n color: 'neutral',\n withActions: false,\n },\n },\n itemRow: {\n base: 'group/sidebar-item-row relative min-w-0',\n },\n itemIcon: {\n base: 'size-icon-xs shrink-0 fill-current text-icon',\n variants: {\n position: {\n leading: '',\n trailing: 'ml-auto',\n },\n },\n defaults: {\n position: 'leading',\n },\n },\n itemLabel: {\n base: 'min-w-0 flex-1',\n },\n itemBadge: {\n base: 'ml-auto shrink-0 rounded-control-sm bg-interaction-hover px-1.5 py-0.5 text-xs text-surface-ink-muted',\n },\n itemActions: {\n base: 'absolute right-1 top-1/2 z-10 flex -translate-y-1/2 items-center gap-1',\n },\n group: {\n base: 'relative grid gap-sidebar-content-gap',\n },\n groupSummary: {\n base: [\n 'block h-control-md cursor-default select-none list-none rounded-control-md text-xs font-medium text-surface-ink-muted outline-none',\n 'hover:bg-interaction-hover hover:text-surface-ink focus-visible:ui-focus-ring',\n '[&::-webkit-details-marker]:hidden',\n ],\n variants: {\n hasActions: {\n true: '',\n false: '',\n },\n },\n defaults: {\n hasActions: false,\n },\n },\n groupSummaryInner: {\n base: 'flex h-full min-w-0 items-center gap-2 px-2',\n },\n groupHeading: {\n base: 'flex min-h-control-md min-w-0 select-none items-center gap-2 px-2 py-1 cursor-default',\n },\n groupIcon: {\n base: 'size-icon-xs shrink-0 fill-current text-icon group-open/sidebar-group:rotate-90',\n },\n groupLabel: {\n base: 'min-w-0 flex-1',\n },\n groupHeadingLabel: {\n base: 'min-w-0 flex-1',\n },\n groupActions: {\n base: 'ml-auto flex shrink-0 items-center gap-1',\n },\n groupContent: {\n base: 'grid gap-sidebar-content-gap',\n },\n toggle: {\n base: [\n 'inline-flex h-control-md w-control-md shrink-0 items-center justify-center rounded-control-md text-surface-ink-muted outline-none',\n 'hover:bg-interaction-hover hover:text-surface-ink focus-visible:ui-focus-ring',\n ],\n },\n toggleIcon: {\n base: 'size-icon fill-current text-current',\n },\n edge: {\n base: [\n 'fixed inset-y-0 z-30 hidden w-4 bg-transparent outline-none data-[state=visible]:block',\n 'focus-visible:ui-focus-ring-inset',\n 'data-[state=hidden]:hidden',\n ],\n variants: {\n side: {\n left: 'left-0',\n right: 'right-0',\n },\n },\n defaults: {\n side: 'left',\n },\n },\n resizeHandle: {\n base: [\n 'absolute inset-y-0 z-10 hidden w-3 cursor-col-resize touch-none outline-none group-data-[responsive-mode=desktop]/sidebar:block',\n 'data-disabled:hidden',\n 'group-data-[placement=top]/sidebar:inset-x-0 group-data-[placement=top]/sidebar:bottom-0 group-data-[placement=top]/sidebar:top-auto group-data-[placement=top]/sidebar:h-3 group-data-[placement=top]/sidebar:w-auto group-data-[placement=top]/sidebar:cursor-row-resize',\n ],\n variants: {\n side: {\n left: 'right-0',\n right: 'left-0',\n },\n },\n defaults: {\n side: 'left',\n },\n },\n },\n}});\n\nexport {sidebarStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n focusElement,\n type MachineScope,\n reflectSchemaProp,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport type {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {decodeProps, type SchemaToProps} from '@client/runtime/codecs';\nimport {addDismissableLayer} from '@client/runtime/dismissable-layer';\nimport {type ResizeEvent} from '@client/runtime/drag-and-drop';\nimport {focusFirst, trapFocus} from '@client/runtime/focus-scope';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {acquireDocumentScrollLock} from '@client/runtime/scroll-lock';\nimport {shellBreakpointPixels} from '@client/runtime/shell-breakpoint';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {\n createMotionPlan,\n flip,\n type MotionHandle,\n type MotionTransitionSubject,\n} from '@client/motion';\nimport {stopOwnedMotion} from '@client/motion/owned';\nimport {addListener, dispatch} from '@client/utils';\nimport {sidebarSchema, sidebarToggleSchema, type SidebarProps, type SidebarToggleAction} from './contract';\nimport {\n createSidebarMachine,\n sidebarHooks,\n type SidebarContext,\n type SidebarMode,\n type SidebarTarget,\n} from './machine';\nimport {sidebarStyles} from './styles';\n\ntype SidebarTransitionName = (typeof sidebarHooks)[number]['name'];\ntype SidebarTransition<TName extends SidebarTransitionName = SidebarTransitionName> = TransitionForHook<\n Extract<(typeof sidebarHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype SidebarController = {\n readonly id: string;\n isExpanded(): boolean;\n perform(action: SidebarToggleAction, trigger?: HTMLElement | null): void;\n syncToggles(): void;\n};\n\ntype SidebarEventDetail = {id?: string; action?: SidebarToggleAction; trigger?: HTMLElement | null};\nconst togglePropsSchema = {target: sidebarToggleSchema.target, action: sidebarToggleSchema.action, class: sidebarToggleSchema.class};\ntype SidebarToggleProps = SchemaToProps<typeof togglePropsSchema>;\ntype SidebarEdgeProps = SidebarToggleProps;\n\n/** Public Alpine API for `ui.sidebar`. @public */\ninterface UiSidebarApi {\n /** Sidebar id used by external controls. */\n readonly id: string;\n /** Whether the sidebar is fully open or currently opening. */\n readonly isOpen: boolean;\n /** Whether the observed shell is at or above the theme-generated shell breakpoint. */\n readonly isDesktop: boolean;\n /** Whether side placement is persistently stashed on desktop. */\n readonly isStashed: boolean;\n /** Current side-placement track width. */\n readonly width: string;\n /** Current top-placement track height. */\n readonly height: string;\n /** Opens the responsive drawer or temporarily reveals a stashed desktop sidebar. */\n open(event?: Event): void;\n /** Closes the responsive drawer or stashes an expanded desktop sidebar. */\n close(event?: Event): void;\n /** Reverses the current visibility intent, including an in-flight transition. */\n toggle(event?: Event): void;\n /** Permanently removes side placement from the desktop layout track. */\n stash(event?: Event): void;\n /** Permanently restores side placement to the desktop layout track. */\n expand(event?: Event): void;\n}\n\ntype SidebarData = AlpineMachine<SidebarContext, SidebarProps, typeof sidebarHooks> & UiSidebarApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n perform(action: SidebarToggleAction, trigger?: HTMLElement | null): void;\n syncToggles(): void;\n isExpanded(): boolean;\n transitionSidebar(transition: SidebarMotionTransition): MotionHandle;\n};\n\ntype SidebarMotionTransition = MotionTransitionSubject & Readonly<{\n data: {mode: SidebarMode; presentation: 'drawer' | 'layout'};\n to: string;\n}>;\n\nconst controllers = new Set<SidebarController>();\n\nconst eventDetail = (event: Event): SidebarEventDetail => event instanceof CustomEvent && event.detail && typeof event.detail === 'object'\n ? event.detail as SidebarEventDetail\n : {};\n\nconst registerDocumentListeners = (() => {\n let registered = false;\n return (): void => {\n if (registered || typeof document === 'undefined') return;\n const route = (action: SidebarToggleAction) => (event: Event): void => {\n if (event.target instanceof Element && event.target.hasAttribute('data-ui-sidebar')) return;\n const detail = eventDetail(event);\n controllers.forEach((controller) => {\n if (!detail.id || detail.id === controller.id) controller.perform(detail.action ?? action, detail.trigger);\n });\n };\n document.addEventListener('ui:sidebar-open', route('open'));\n document.addEventListener('ui:sidebar-close', route('close'));\n document.addEventListener('ui:sidebar-toggle', route('toggle'));\n registered = true;\n };\n})();\n\nconst UiSidebar = (): TrellisAlpineComponent<SidebarData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let cleanup: CleanupManager;\n let resizeObserver: ResizeObserver | null = null;\n let responsiveMode: SidebarMode = 'mobile';\n let activeTrigger: HTMLElement | null = null;\n let releaseScrollLock: (() => void) | null = null;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Sidebar has not been initialized.');\n return rootEl;\n };\n const appEl = (): HTMLElement | null => root().closest<HTMLElement>('[data-ui-app]');\n const backdropEl = (): HTMLElement | null => appEl()?.querySelector<HTMLElement>('[data-ui-app-backdrop]') ?? null;\n const currentProps = (): Readonly<SidebarProps> => bridge.getSnapshot().props;\n const context = (): Readonly<SidebarContext> => bridge.getSnapshot().context;\n const target = (): SidebarTarget => context().transition.target;\n const isDrawer = (): boolean => bridge.hasTag('visible') && (\n bridge.hasTag('drawer')\n || responsiveMode === 'mobile'\n || (bridge.hasTag('transitioning') && context().transition.presentation === 'drawer')\n );\n const isModalDrawer = (): boolean => isDrawer() && responsiveMode === 'mobile';\n const isExpanded = (): boolean => bridge.hasTag('expanded');\n const isMobileDrawerClosing = (): boolean => responsiveMode === 'mobile' && bridge.matches('closing');\n\n const storageKey = (): string => `trellis-ui-sidebar:${root().id || currentProps().id}:stashed`;\n const storedStashed = (props: SidebarProps): boolean | null => {\n if (!props.persist) return null;\n try {\n const value = localStorage.getItem(`trellis-ui-sidebar:${root().id || props.id}:stashed`);\n return value === null ? null : value === 'true';\n } catch { return null; }\n };\n const persist = (): void => {\n const props = currentProps();\n if (!props.persist || props.placement === 'top') return;\n try { localStorage.setItem(storageKey(), context().layout.desktopStashed ? 'true' : 'false'); } catch { /* storage is optional */ }\n };\n const setCanvasTransitioning = (active: boolean): void => {\n const app = appEl();\n if (active) app?.setAttribute('data-sidebar-transitioning', 'true');\n else app?.removeAttribute('data-sidebar-transitioning');\n };\n\n const restoreFocus = (): void => {\n const active = document.activeElement;\n if (!(active instanceof HTMLElement) || !root().contains(active)) return;\n const fallback = activeTrigger ?? Array.from(document.querySelectorAll<HTMLElement>('[data-ui-sidebar-toggle]'))\n .find((el) => !root().contains(el) && (!el.dataset.target || el.dataset.target === root().id));\n if (fallback && document.contains(fallback)) focusElement(fallback, {showIndicator: false});\n else active.blur();\n };\n\n const syncToggles = (): void => {\n const expanded = isExpanded();\n document.querySelectorAll<HTMLElement>('[data-ui-sidebar-toggle], [data-ui-sidebar-state-icon], [data-ui-sidebar-edge]').forEach((el) => {\n if (el.dataset.target && el.dataset.target !== root().id) return;\n if (!el.matches('[data-ui-sidebar-edge]')) el.dataset.state = expanded ? 'open' : 'closed';\n if (el.matches('[data-ui-sidebar-toggle], [data-ui-sidebar-edge]')) {\n el.setAttribute('aria-controls', root().id);\n el.setAttribute('aria-expanded', String(expanded));\n }\n });\n };\n\n const sync = ({reflectControlled = true}: {reflectControlled?: boolean} = {}): void => {\n const props = currentProps();\n const visible = bridge.hasTag('visible');\n const expanded = isExpanded();\n const stashed = context().layout.desktopStashed;\n const drawer = isDrawer();\n const el = root();\n if (reflectControlled) {\n if (responsiveMode === 'mobile') {\n reflectSchemaProp({el, schema: sidebarSchema, key: 'open', value: expanded});\n } else {\n reflectSchemaProp({el, schema: sidebarSchema, key: 'stashed', value: stashed});\n }\n }\n el.dataset.state = expanded ? 'open' : 'closed';\n el.dataset.mobileState = responsiveMode === 'mobile' && (expanded || isMobileDrawerClosing()) ? 'open' : 'closed';\n el.dataset.desktopState = stashed ? 'stashed' : 'expanded';\n el.dataset.drawerState = drawer ? 'open' : 'closed';\n el.dataset.responsiveMode = responsiveMode;\n el.dataset.placement = props.placement;\n el.dataset.mobilePresentation = props.mobilePresentation;\n el.dataset.side = props.side;\n el.hidden = !visible && !(responsiveMode === 'desktop' && props.placement === 'top');\n el.toggleAttribute('inert', !expanded);\n if (expanded) el.removeAttribute('aria-hidden'); else el.setAttribute('aria-hidden', 'true');\n const resizeDisabled = !props.resizable || responsiveMode !== 'desktop' || drawer;\n el.toggleAttribute('data-resize-disabled', resizeDisabled);\n const resizeHandle = el.querySelector<HTMLElement>('[data-ui-sidebar-resize-handle]');\n resizeHandle?.toggleAttribute('data-disabled', resizeDisabled);\n resizeHandle?.setAttribute('aria-disabled', String(resizeDisabled));\n el.style.setProperty('--ui-sidebar-width', context().layout.width);\n if (context().layout.height) el.style.setProperty('--ui-sidebar-height', context().layout.height);\n\n const app = appEl();\n if (app) {\n app.style.setProperty('--ui-app-sidebar-width', context().layout.width);\n if (context().layout.height) app.style.setProperty('--ui-app-sidebar-height', context().layout.height);\n app.dataset.sidebarState = stashed ? 'stashed' : 'expanded';\n app.dataset.sidebarSide = props.side;\n if (!bridge.hasTag('transitioning')) app.style.gridTemplateColumns = '';\n }\n const backdrop = backdropEl();\n if (backdrop) {\n const modalDrawer = isModalDrawer();\n backdrop.hidden = !modalDrawer;\n backdrop.dataset.state = modalDrawer ? 'open' : 'closed';\n }\n if (!drawer && !bridge.hasTag('transitioning')) {\n stopOwnedMotion(el);\n el.style.opacity = '';\n el.style.transform = '';\n if (backdrop) {\n stopOwnedMotion(backdrop);\n backdrop.style.opacity = '';\n }\n }\n const modalDrawer = isModalDrawer();\n if (modalDrawer) releaseScrollLock ??= acquireDocumentScrollLock(el.ownerDocument);\n else {\n releaseScrollLock?.();\n releaseScrollLock = null;\n }\n document.querySelectorAll<HTMLElement>('[data-ui-sidebar-edge]').forEach((edge) => {\n if (edge.dataset.target && edge.dataset.target !== root().id) return;\n const ownsEdgeReveal = drawer && activeTrigger === edge;\n const show = props.edgeReveal && responsiveMode === 'desktop' && props.placement === 'side' && stashed && (!drawer || ownsEdgeReveal);\n edge.dataset.state = show ? 'visible' : 'hidden';\n edge.hidden = !show;\n });\n syncToggles();\n persist();\n };\n\n const prepareOpen = ({context: next}: MachineScope<SidebarContext, SidebarProps>): void => {\n const {presentation} = next.transition;\n setCanvasTransitioning(presentation === 'layout');\n root().hidden = false;\n if (presentation !== 'layout') sync();\n if (isModalDrawer()) queueMicrotask(() => {\n if (isModalDrawer()) focusFirst(root(), {showIndicator: false});\n });\n };\n const finishOpen = (): void => {\n setCanvasTransitioning(false);\n root().dataset.sidebarExiting = 'false';\n sync();\n dispatch({el: root(), name: 'ui:sidebar-open', detail: {id: root().id}});\n };\n const prepareClose = ({context: next}: MachineScope<SidebarContext, SidebarProps>): void => {\n const {presentation} = next.transition;\n setCanvasTransitioning(presentation === 'layout');\n restoreFocus();\n if (presentation === 'layout') root().dataset.sidebarExiting = 'true';\n if (presentation !== 'layout') sync();\n };\n const finishClose = (): void => {\n setCanvasTransitioning(false);\n root().dataset.sidebarExiting = 'false';\n sync();\n dispatch({el: root(), name: 'ui:sidebar-close', detail: {id: root().id}});\n activeTrigger = null;\n };\n\n const syncProps = (): void => {\n sync({reflectControlled: false});\n queueMicrotask(() => {\n const next = currentProps();\n if (responsiveMode === 'desktop') {\n if (next.placement === 'top') {\n if (!bridge.hasTag('top')) bridge.send({type: 'MODE', mode: 'desktop', placement: 'top', stashed: false, open: true});\n } else if (next.stashed !== context().layout.desktopStashed) {\n if (next.stashed) stash(); else expand();\n }\n } else if (next.open !== isExpanded()) {\n if (next.open) open(); else close();\n }\n });\n };\n\n const initialProps = (): SidebarProps => decodeProps({el: root(), schema: sidebarSchema});\n const bridge = createAlpineMachine({\n schema: sidebarSchema,\n hooks: sidebarHooks,\n createMachine: ({props}) => createSidebarMachine({\n props,\n mode: responsiveMode,\n desktopStashed: storedStashed(props) ?? props.stashed,\n effects: {prepareOpen, finishOpen, prepareClose, finishClose, sync, syncProps},\n }),\n });\n\n const desiredOpenTarget = (): {target: SidebarTarget; presentation: 'drawer' | 'layout'} | null => {\n const props = currentProps();\n if (responsiveMode === 'mobile') return {target: 'mobileOpen', presentation: 'drawer'};\n if (props.placement === 'top') return null;\n return context().layout.desktopStashed\n ? {target: 'desktopDrawer', presentation: 'drawer'}\n : {target: 'desktopExpanded', presentation: 'layout'};\n };\n const open = (event?: Event): void => {\n event?.preventDefault();\n if (event?.currentTarget instanceof HTMLElement) activeTrigger = event.currentTarget;\n const desired = desiredOpenTarget();\n if (desired) bridge.send({type: 'OPEN', ...desired});\n };\n const close = (event?: Event): void => {\n event?.preventDefault();\n if (currentProps().placement === 'top' && responsiveMode === 'desktop') return;\n bridge.send({type: 'CLOSE', target: responsiveMode === 'mobile' ? 'mobileClosed' : 'desktopStashed', presentation: isDrawer() ? 'drawer' : 'layout'});\n };\n const expand = (event?: Event): void => {\n event?.preventDefault();\n if (responsiveMode === 'mobile') { open(event); return; }\n if (currentProps().placement === 'side') bridge.send({type: 'EXPAND', target: 'desktopExpanded', presentation: 'layout'});\n };\n const stash = (event?: Event): void => {\n event?.preventDefault();\n if (responsiveMode === 'mobile') { close(event); return; }\n if (currentProps().placement === 'side') bridge.send({type: 'STASH', target: 'desktopStashed', presentation: isDrawer() ? 'drawer' : 'layout'});\n };\n const toggle = (event?: Event): void => {\n event?.preventDefault();\n if (currentProps().placement === 'top' && responsiveMode === 'desktop') return;\n if (responsiveMode === 'desktop' && currentProps().placement === 'side' && context().layout.desktopStashed && !isDrawer()) { expand(event); return; }\n if (isExpanded()) close(event); else open(event);\n };\n\n const reconcileMode = (width: number): void => {\n const props = currentProps();\n const observed = appEl() ?? root();\n const next: SidebarMode = width >= shellBreakpointPixels(observed) ? 'desktop' : 'mobile';\n if (next === responsiveMode) return;\n responsiveMode = next;\n const desktopStashed = context().layout.desktopStashed;\n bridge.send({\n type: 'MODE',\n mode: next,\n placement: props.placement,\n stashed: desktopStashed,\n open: next === 'desktop' && desktopStashed && context().layout.desktopDrawerOpen,\n });\n };\n\n const handleResize = (event: Event): void => {\n const detail = event instanceof CustomEvent ? event.detail as ResizeEvent : null;\n if (!detail || responsiveMode !== 'desktop' || isDrawer()) return;\n const props = currentProps();\n if (props.placement === 'top' && Number.isFinite(detail.height)) {\n bridge.send({type: 'RESIZE', height: `${Math.round(detail.height)}px`});\n root().style.setProperty('--ui-sidebar-height', `${Math.round(detail.height)}px`);\n appEl()?.style.setProperty('--ui-app-sidebar-height', `${Math.round(detail.height)}px`);\n } else if (Number.isFinite(detail.width)) {\n bridge.send({type: 'RESIZE', width: `${Math.round(detail.width)}px`});\n root().style.setProperty('--ui-sidebar-width', `${Math.round(detail.width)}px`);\n appEl()?.style.setProperty('--ui-app-sidebar-width', `${Math.round(detail.width)}px`);\n }\n };\n\n const closeEdgeReveal = (event: Event): void => {\n if (!(event instanceof PointerEvent)) return;\n if (responsiveMode !== 'desktop' || !isDrawer()) return;\n if (!activeTrigger?.matches('[data-ui-sidebar-edge]')) return;\n const next = event.relatedTarget;\n if (next instanceof Node && (root().contains(next) || activeTrigger.contains(next))) return;\n close(event);\n };\n\n const closeAfterMobileNavigation = (event: Event): void => {\n if (!(event instanceof MouseEvent) || responsiveMode !== 'mobile' || !isExpanded()) return;\n if (event.defaultPrevented || event.button !== 0 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n const item = event.target instanceof Element ? event.target.closest<HTMLAnchorElement>('a[data-ui-sidebar-item]') : null;\n if (!item || !root().contains(item) || item.getAttribute('aria-disabled') === 'true') return;\n if (item.hasAttribute('download') || item.hasAttribute('target')) return;\n close();\n };\n\n let component!: TrellisAlpineComponent<SidebarData>;\n component = {\n ...bridge,\n get id() { return root().id || currentProps().id; },\n get isOpen() { return isExpanded(); },\n get isDesktop() { return responsiveMode === 'desktop'; },\n get isStashed() { return context().layout.desktopStashed; },\n get width() { return context().layout.width; },\n get height() { return context().layout.height; },\n init(): void {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n const observed = appEl() ?? root();\n responsiveMode = observed.getBoundingClientRect().width >= shellBreakpointPixels(observed) ? 'desktop' : 'mobile';\n bridge.connect(this.$el, this.snapshot);\n root().id ||= currentProps().id;\n controllers.add(component);\n registerDocumentListeners();\n resizeObserver = new ResizeObserver((entries) => reconcileMode(entries[0]?.contentRect.width ?? observed.clientWidth));\n resizeObserver.observe(observed);\n cleanup.add(addDismissableLayer({isEnabled: isDrawer, roots: () => [root()], onDismiss: close}));\n addListener({target: document, event: 'keydown', handler: (event) => {\n if (!(event instanceof KeyboardEvent) || !isDrawer()) return;\n if (event.key === 'Escape') close(event);\n else if (isModalDrawer()) trapFocus(event, root());\n }, cleanup});\n addListener({target: root(), event: 'ui:resize', handler: handleResize, cleanup});\n addListener({target: root(), event: 'ui:resize-end', handler: handleResize, cleanup});\n addListener({target: root(), event: 'pointerleave', handler: closeEdgeReveal, cleanup});\n addListener({target: root(), event: 'click', handler: closeAfterMobileNavigation, cleanup});\n root().querySelectorAll<HTMLDetailsElement>('details[data-ui-sidebar-group]').forEach((group) => addListener({target: group, event: 'toggle', handler: () => {\n group.dataset.state = group.open ? 'open' : 'closed';\n dispatch({el: group, name: 'ui:sidebar-group-change', detail: {open: group.open}});\n }, cleanup}));\n sync();\n },\n destroy(): void {\n setCanvasTransitioning(false);\n controllers.delete(component);\n resizeObserver?.disconnect();\n resizeObserver = null;\n releaseScrollLock?.();\n releaseScrollLock = null;\n bridge.disconnect();\n rootEl = null;\n },\n transitionSidebar(transition: SidebarMotionTransition): MotionHandle {\n if (transition.data.presentation === 'layout') {\n const canvas = Array.from(appEl()?.querySelectorAll<HTMLElement>(\n ':scope > [data-ui-app-header], :scope > [data-ui-app-main], :scope > [data-ui-app-footer]',\n ) ?? []);\n return flip(transition, {\n target: canvas,\n update: sync,\n role: 'layoutSpring',\n });\n }\n const side = root().dataset.side === 'right' ? 1 : -1;\n const opening = transition.to === 'opening';\n const outside = side === 1\n ? 'translateX(calc(100% + 0.5rem))'\n : 'translateX(calc(-100% - 0.5rem))';\n let plan = createMotionPlan(transition).animate({\n opacity: opening ? [0, 1] : 1,\n transform: opening ? [outside, 'none'] : outside,\n }).role('presence');\n const backdrop = backdropEl();\n if (backdrop && transition.data.mode === 'mobile') plan = plan.with(backdrop, {\n opacity: opening ? [0, 1] : 0,\n }).role('feedback');\n return plan.play();\n },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? initialProps();\n return mergeBindings({inputs: [resolveStyle({part: sidebarStyles.parts.root, props, className: props.class}), {'data-ui-sidebar': ''}]});\n },\n open, close, toggle, stash, expand,\n isExpanded,\n perform(action, trigger) {\n if (action === 'open' || (action === 'toggle' && !isExpanded())) activeTrigger = trigger ?? null;\n ({open, close, toggle, stash, expand})[action]?.();\n },\n syncToggles,\n };\n return component;\n};\n\nconst UiSidebarToggle = (): TrellisAlpineComponent<{props: SidebarToggleProps; readonly root: BindingObject; trigger(event?: Event): void}> => {\n let props = {} as SidebarToggleProps;\n return {\n get props() { return props; },\n init() { props = decodeProps({el: this.$el, schema: togglePropsSchema}); },\n destroy() {},\n get root() { return mergeBindings({inputs: [resolveStyle({part: sidebarStyles.parts.toggle, props: {}, className: props.class}), {'data-ui-sidebar-toggle': '', ':data-target': () => props.target, ':data-action': () => props.action, '@click': (event: Event) => this.trigger(event)}]}); },\n trigger(event?: Event) {\n event?.preventDefault();\n document.dispatchEvent(new CustomEvent('ui:sidebar-toggle', {detail: {id: props.target || 'ui-sidebar', action: props.action, trigger: this.$el}}));\n },\n } as TrellisAlpineComponent<{props: SidebarToggleProps; readonly root: BindingObject; trigger(event?: Event): void}>;\n};\n\nconst UiSidebarEdge = (): TrellisAlpineComponent<{props: SidebarEdgeProps; readonly root: BindingObject; trigger(event?: Event): void; leave(event?: Event): void}> => {\n let props = {} as SidebarEdgeProps;\n return {\n get props() { return props; },\n init() { props = decodeProps({el: this.$el, schema: togglePropsSchema}); },\n destroy() {},\n get root() { return mergeBindings({inputs: [resolveStyle({part: sidebarStyles.parts.edge, props: {side: this.$el.dataset.side || 'left'}, className: props.class}), {'data-ui-sidebar-edge': '', ':data-target': () => props.target, '@pointerenter': (event: Event) => this.trigger(event), '@pointerleave': (event: Event) => this.leave(event), '@focus': (event: Event) => this.trigger(event), '@click': (event: Event) => this.trigger(event)}]}); },\n trigger(event?: Event) {\n event?.preventDefault();\n document.dispatchEvent(new CustomEvent('ui:sidebar-open', {detail: {id: props.target || 'ui-sidebar', action: 'open', trigger: this.$el}}));\n },\n leave(event?: Event) {\n const next = event instanceof PointerEvent ? event.relatedTarget : null;\n const sidebar = document.getElementById(props.target || 'ui-sidebar');\n if (next instanceof Node && sidebar?.contains(next)) return;\n document.dispatchEvent(new CustomEvent('ui:sidebar-close', {detail: {id: props.target || 'ui-sidebar', action: 'close', trigger: this.$el}}));\n },\n } as TrellisAlpineComponent<{props: SidebarEdgeProps; readonly root: BindingObject; trigger(event?: Event): void; leave(event?: Event): void}>;\n};\n\nconst registerSidebar = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiSidebar', UiSidebar)(AlpineInstance);\n defineAlpineData('UiSidebarEdge', UiSidebarEdge)(AlpineInstance);\n defineAlpineData('UiSidebarToggle', UiSidebarToggle)(AlpineInstance);\n};\n\nexport {registerSidebar, UiSidebar, UiSidebarEdge, UiSidebarToggle};\nexport type {SidebarController, SidebarData, SidebarTransition, UiSidebarApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerSidebar as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerSidebar = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerSidebar};\nexport default registerSidebar;\nexport * from './index';\n"],"mappings":"iyBAAA,IAAM,EAAyB,GAAmC,CAC9D,IAAM,EAAQ,iBAAiB,CAAS,CAAC,CAAC,iBAAiB,+BAA+B,EACpF,EAAS,OAAO,WAAW,CAAK,EACtC,OAAO,OAAO,SAAS,CAAM,EAAI,EAAS,GAC9C,ECIM,EAAgB,CAAC,OAAQ,OAAO,EAChC,EAAqB,CAAC,OAAQ,KAAK,EACnC,EAA+B,CAAC,SAAU,YAAY,EACtD,EAAa,CAAC,MAAO,QAAS,QAAQ,EACtC,EAAoB,CAAC,OAAQ,SAAU,UAAW,MAAM,EACxD,EAAyB,CAAC,SAAU,OAAQ,QAAS,QAAS,QAAQ,EACtE,EAAkB,CAAC,IAAK,QAAQ,EAChC,EAAwB,CAAC,QAAS,SAAS,EAC3C,EAAsB,CAAC,UAAW,QAAQ,EAC1C,EAAmB,EACnB,EAAqB,EAErB,EAAgB,CAClB,GAAI,EAAM,EAAY,KAAK,EAC3B,GAAI,EAAO,QAAQ,YAAY,EAC/B,UAAW,EAAM,EAAoB,MAAM,EAC3C,mBAAoB,EAAM,EAA8B,QAAQ,EAChE,KAAM,EAAM,EAAe,MAAM,EACjC,QAAS,EAAM,EAAkB,SAAS,EAC1C,UAAW,EAAM,EAAoB,MAAM,EAC3C,gBAAiB,EAAM,EAAoB,GAAG,EAC9C,QAAS,EAAK,QAAQ,EAAI,EAC1B,OAAQ,EAAK,QAAQ,EAAI,EACzB,SAAU,EAAM,EAAmB,QAAQ,EAC3C,KAAM,EACN,QAAS,EACT,QAAS,EAAK,QAAQ,EAAI,EAC1B,WAAY,EAAK,QAAQ,EAAI,EAC7B,UAAW,EACX,MAAO,CACX,EAGQ,EAAM,EAAiB,GAAG,EACrB,EAAM,EAAuB,OAAO,EACtC,EAAM,EAAqB,SAAS,EAajC,EAAK,QAAQ,EAAI,EAK/B,IAAM,EAAsB,CACxB,OAAQ,EACR,KAAM,EAAO,QAAQ,YAAY,EACjC,MAAO,EAAO,QAAQ,gBAAgB,EACtC,OAAQ,EAAM,EAAwB,QAAQ,EAC9C,MAAO,CACX,ECrCM,GAAqB,CAAC,cAAmD,CAC3E,KAAM,EAAQ,WAAW,KACzB,aAAc,EAAQ,WAAW,aACjC,MAAO,EAAQ,OAAO,MACtB,OAAQ,EAAQ,OAAO,MAC3B,GAoBM,GAAe,CAhBD,EAAW,CAC3B,KAAM,UACN,MAAO,UACP,QAAS,EACT,OAAQ,eACR,QAAS,eACb,CAUsB,EARF,EAAW,CAC3B,KAAM,UACN,MAAO,UACP,QAAS,EACT,OAAQ,eACR,QAAS,eACb,CAEmC,CAAW,EAExC,GAAc,EAA2B,IAC3C,OAAO,EAAM,QAAW,SAAW,EAAM,OAA0B,EAEjE,EAAoB,GAAmD,EAAM,eAAiB,SAAW,SAAW,SAEpH,IAAwB,CAAC,QAAO,OAAM,iBAAgB,aAAiF,CACzI,IAAM,EAAyB,IAAS,SAClC,EAAM,KAAO,aAAe,eAC5B,EAAM,YAAc,MAAQ,aAAe,EAAiB,iBAAmB,kBAE/E,EAAY,CAAC,OAAQ,UAAW,OAAQ,YAAa,QAAS,aAAa,EAC3E,EAAa,CAAC,OAAQ,UAAW,OAAQ,aAAc,QAAS,cAAc,EAC9E,EAAY,CAAC,OAAQ,eAAgB,QAAS,WAAW,EAE/D,OAAO,EAA4C,CAC/C,UACA,GAAI,CACA,KAAM,CACF,CAAC,OAAQ,aAAc,MAAO,QAAS,OAAQ,UAAW,QAAS,MAAM,EACzE,CAAC,OAAQ,gBAAiB,MAAO,kBAAmB,OAAQ,UAAW,QAAS,MAAM,EACtF,CAAC,OAAQ,iBAAkB,MAAO,mBAAoB,OAAQ,UAAW,QAAS,MAAM,EACxF,CAAC,OAAQ,kBAAmB,MAAO,YAAa,OAAQ,UAAW,QAAS,MAAM,EAClF,CAAC,OAAQ,aAAc,MAAO,eAAgB,OAAQ,UAAW,QAAS,MAAM,EAChF,CAAC,OAAQ,eAAgB,OAAQ,UAAW,QAAS,MAAM,CAC/D,EACA,OAAQ,CAAC,OAAQ,SAAU,QAAS,MAAM,CAC9C,EACA,OAAQ,CACJ,aAAc,CAAC,KAAM,CAAC,SAAU,QAAQ,EAAG,GAAI,CAAC,KAAM,EAAW,OAAQ,EAAW,cAAe,CAAS,CAAC,EAC7G,WAAY,CAAC,KAAM,CAAC,SAAU,UAAW,WAAY,MAAM,EAAG,GAAI,CAAC,MAAO,EAAY,MAAO,EAAY,OAAQ,EAAY,cAAe,CAAS,CAAC,EACtJ,gBAAiB,CAAC,KAAM,CAAC,UAAW,UAAW,WAAY,OAAQ,QAAQ,EAAG,GAAI,CAAC,MAAO,EAAY,MAAO,EAAY,OAAQ,EAAY,KAAM,CAAC,EAAG,OAAQ,CAAC,EAAG,cAAe,CAAS,CAAC,EAC5L,eAAgB,CAAC,KAAM,CAAC,UAAW,UAAW,QAAQ,EAAG,GAAI,CAAC,KAAM,EAAW,OAAQ,EAAW,OAAQ,EAAW,cAAe,CAAS,CAAC,EAC9I,cAAe,CAAC,KAAM,CAAC,UAAW,UAAW,UAAW,WAAY,OAAQ,QAAQ,EAAG,GAAI,CAAC,MAAO,EAAY,MAAO,EAAY,OAAQ,EAAY,OAAQ,EAAW,cAAe,CAAS,CAAC,EAClM,WAAY,CAAC,KAAM,CAAC,UAAW,MAAO,UAAW,WAAY,OAAQ,QAAQ,EAAG,GAAI,CAAC,cAAe,CAAS,CAAC,EAC9G,QAAS,CACL,KAAM,CAAC,UAAW,WAAY,eAAe,EAC7C,GAAI,CACA,aAAc,CACV,CAAC,OAAQ,aAAc,MAAO,oBAAqB,QAAS,YAAY,EACxE,CAAC,OAAQ,gBAAiB,MAAO,uBAAwB,QAAS,YAAY,EAC9E,CAAC,OAAQ,aAAc,MAAO,oBAAqB,QAAS,YAAY,EACxE,CAAC,OAAQ,kBAAmB,QAAS,YAAY,CACrD,EACA,cAAe,CACX,CAAC,OAAQ,aAAc,MAAO,oBAAqB,QAAS,YAAY,EACxE,CAAC,OAAQ,gBAAiB,MAAO,uBAAwB,QAAS,YAAY,EAC9E,CAAC,OAAQ,aAAc,MAAO,oBAAqB,QAAS,YAAY,EACxE,CAAC,OAAQ,kBAAmB,QAAS,YAAY,CACrD,EACA,MAAO,EACP,MAAO,EACP,OAAQ,EACR,cAAe,CACnB,CACJ,EACA,QAAS,CACL,KAAM,CAAC,UAAW,eAAe,EACjC,GAAI,CACA,aAAc,CACV,CAAC,OAAQ,eAAgB,MAAO,sBAAuB,QAAS,aAAa,EAC7E,CAAC,OAAQ,iBAAkB,QAAS,aAAa,CACrD,EACA,cAAe,CACX,CAAC,OAAQ,eAAgB,MAAO,sBAAuB,QAAS,aAAa,EAC7E,CAAC,OAAQ,iBAAkB,QAAS,aAAa,CACrD,EACA,KAAM,EACN,OAAQ,EACR,OAAQ,EACR,cAAe,CACnB,CACJ,CACJ,CACJ,EAAG,CACC,QACA,QAAS,CACL,WAAY,CAAC,MAAI,EACjB,OAAQ,CACJ,iBACA,kBAAmB,GACnB,MAAO,+BACP,OAAQ,EACZ,EACA,WAAY,CAAC,OAAQ,EAAS,aAAc,IAAY,mBAAqB,IAAY,aAAe,SAAW,QAAQ,CAC/H,EACA,SAAU,CACN,WAAY,CAAC,UAAS,WAAW,CAC7B,IAAM,EAAS,EAAW,EAAO,YAAY,EAC7C,MAAO,CAAC,QAAS,CACb,GAAG,EACH,OAAQ,CACJ,GAAG,EAAQ,OACX,eAAgB,IAAW,iBAErB,IAAW,mBAA4B,EAAQ,OAAO,eAC5D,kBAAmB,IAAW,iBACtB,IAAW,cAAgB,EAAQ,OAAO,cACtD,EACA,WAAY,CAAC,SAAQ,aAAc,EAAiB,CAAK,CAAC,CAC9D,CAAC,CACL,EACA,YAAa,CAAC,UAAS,WAAW,CAC9B,IAAM,EAAS,EAAW,EAAO,cAAc,EACzC,EAAsB,IAAW,kBAC/B,IAAW,gBAAkB,EAAQ,OAAO,eACpD,MAAO,CAAC,QAAS,CACb,GAAG,EACH,OAAQ,CACJ,GAAG,EAAQ,OACX,eAAgB,IAAW,kBAA0B,EAAQ,OAAO,eACpE,kBAAmB,IAA8B,EAAQ,OAAO,iBACpE,EACA,WAAY,CAAC,SAAQ,aAAc,EAAiB,CAAK,CAAC,CAC9D,CAAC,CACL,EACA,SAAU,CAAC,UAAS,YAAY,CAAC,QAAS,CAAC,GAAG,EAAS,WAAY,CAAC,KAAM,EAAM,OAAS,UAAY,UAAY,QAAQ,CAAC,CAAC,GAC3H,cAAe,CAAC,UAAS,YAAY,CACjC,MAAO,EAAM,MACb,SACJ,GACA,QAAS,CAAC,UAAS,YAAY,CAAC,QAAS,CACrC,GAAG,EACH,OAAQ,CACJ,GAAG,EAAQ,OACX,MAAO,OAAO,EAAM,OAAU,SAAW,EAAM,MAAQ,EAAQ,OAAO,MACtE,OAAQ,OAAO,EAAM,QAAW,SAAW,EAAM,OAAS,EAAQ,OAAO,MAC7E,CACJ,CAAC,EACL,EACA,OAAQ,CACJ,OAAQ,CAAC,WAAW,EAAM,OAAS,WAAa,EAAM,YAAc,MACpE,iBAAkB,CAAC,WAAW,EAAM,OAAS,WAAa,EAAM,UAAY,IAAQ,EAAM,OAAS,GACnG,kBAAmB,CAAC,WAAW,EAAM,OAAS,WAAa,EAAM,UAAY,GAC7E,WAAY,CAAC,WAAW,EAAM,OAAS,UACvC,cAAe,CAAC,WAAW,EAAM,OAAS,UAAY,EAAM,OAAS,GACrE,mBAAoB,CAAC,aAAa,EAAQ,WAAW,SAAW,aAChE,qBAAsB,CAAC,aAAa,EAAQ,WAAW,SAAW,eAClE,sBAAuB,CAAC,aAAa,EAAQ,WAAW,SAAW,gBACnE,mBAAoB,CAAC,aAAa,EAAQ,WAAW,SAAW,YACpE,EACA,QAAS,CACL,YAAa,EAAQ,YACrB,WAAY,EAAQ,WACpB,aAAc,EAAQ,aACtB,YAAa,EAAQ,YACrB,KAAM,EAAQ,KACd,UAAW,EAAQ,SACvB,CACJ,CAAC,CACL,EC3MM,EAA4B,EAA0B,gCAAgC,EACtF,EAAmC,EAA0B,+BAA+B,EAE5F,EAAgB,EAAa,CAAC,WAAY,CAC5C,UAAW,aACX,MAAO,CACH,KAAM,CACF,KAAM,CACF,4HACA,gCACA,sCACA,sFACA,2TACA,uNACA,6HACA,6FACA,4LACA,sBACA,6kBACA,8LACA,6TACA,gLACA,wFACA,qLACJ,EACA,SAAU,CACN,UAAW,EACX,gBAAiB,EACjB,mBAAoB,CAChB,OAAQ,GACR,WAAY,CACR,kDACA,gDACA,iDACA,qDACA,uDACA,kDACJ,CAAC,CAAC,KAAK,GAAG,CACd,EACA,QAAS,CACL,KAAM,sKACN,MAAO,EACX,EACA,KAAM,CACF,KAAM,sGACN,MAAO,0LACX,EACA,OAAQ,CACJ,KAAM,gFACN,MAAO,2TACX,CACJ,EACA,SAAU,CACN,UAAW,OACX,gBAAiB,IACjB,mBAAoB,SACpB,QAAS,GACT,KAAM,OACN,OAAQ,EACZ,CACJ,EACA,OAAQ,CACJ,KAAM,sIACV,EACA,QAAS,CACL,KAAM,CACF,gCACJ,CACJ,EACA,aAAc,CACV,KAAM,CACF,wHACA,2FACJ,CACJ,EACA,OAAQ,CACJ,KAAM,0GACV,EACA,IAAK,CACD,KAAM,8BACV,EACA,KAAM,CACF,KAAM,CACF,6GACA,uEACA,iBACA,mCACJ,EACA,SAAU,CACN,QAAS,CACL,MAAO,GACP,QAAS,0DACb,EACA,MAAO,CACH,QAAS,GACT,OAAQ,EACZ,EACA,YAAa,CACT,KAAM,OACN,MAAO,EACX,CACJ,EACA,SAAU,CACN,QAAS,QACT,MAAO,UACP,YAAa,EACjB,CACJ,EACA,QAAS,CACL,KAAM,yCACV,EACA,SAAU,CACN,KAAM,+CACN,SAAU,CACN,SAAU,CACN,QAAS,GACT,SAAU,SACd,CACJ,EACA,SAAU,CACN,SAAU,SACd,CACJ,EACA,UAAW,CACP,KAAM,gBACV,EACA,UAAW,CACP,KAAM,uGACV,EACA,YAAa,CACT,KAAM,wEACV,EACA,MAAO,CACH,KAAM,uCACV,EACA,aAAc,CACV,KAAM,CACF,qIACA,gFACA,oCACJ,EACA,SAAU,CACN,WAAY,CACR,KAAM,GACN,MAAO,EACX,CACJ,EACA,SAAU,CACN,WAAY,EAChB,CACJ,EACA,kBAAmB,CACf,KAAM,6CACV,EACA,aAAc,CACV,KAAM,uFACV,EACA,UAAW,CACP,KAAM,iFACV,EACA,WAAY,CACR,KAAM,gBACV,EACA,kBAAmB,CACf,KAAM,gBACV,EACA,aAAc,CACV,KAAM,0CACV,EACA,aAAc,CACV,KAAM,8BACV,EACA,OAAQ,CACJ,KAAM,CACF,oIACA,+EACJ,CACJ,EACA,WAAY,CACR,KAAM,qCACV,EACA,KAAM,CACF,KAAM,CACF,yFACA,oCACA,4BACJ,EACA,SAAU,CACN,KAAM,CACF,KAAM,SACN,MAAO,SACX,CACJ,EACA,SAAU,CACN,KAAM,MACV,CACJ,EACA,aAAc,CACV,KAAM,CACF,kIACA,uBACA,4QACJ,EACA,SAAU,CACN,KAAM,CACF,KAAM,UACN,MAAO,QACX,CACJ,EACA,SAAU,CACN,KAAM,MACV,CACJ,CACJ,CACJ,CAAC,CAAC,ECnKI,EAAoB,CAAC,OAAQ,EAAoB,OAAQ,OAAQ,EAAoB,OAAQ,MAAO,EAAoB,KAAK,EA6C7H,EAAc,IAAI,IAElB,EAAe,GAAqC,aAAiB,aAAe,EAAM,QAAU,OAAO,EAAM,QAAW,SAC5H,EAAM,OACN,CAAC,EAED,QAAmC,CACrC,IAAI,EAAa,GACjB,UAAmB,CACf,GAAI,GAAc,OAAO,SAAa,IAAa,OACnD,IAAM,EAAS,GAAiC,GAAuB,CACnE,GAAI,EAAM,kBAAkB,SAAW,EAAM,OAAO,aAAa,iBAAiB,EAAG,OACrF,IAAM,EAAS,EAAY,CAAK,EAChC,EAAY,QAAS,GAAe,EAC5B,CAAC,EAAO,IAAM,EAAO,KAAO,EAAW,KAAI,EAAW,QAAQ,EAAO,QAAU,EAAQ,EAAO,OAAO,CAC7G,CAAC,CACL,EACA,SAAS,iBAAiB,kBAAmB,EAAM,MAAM,CAAC,EAC1D,SAAS,iBAAiB,mBAAoB,EAAM,OAAO,CAAC,EAC5D,SAAS,iBAAiB,oBAAqB,EAAM,QAAQ,CAAC,EAC9D,EAAa,EACjB,CACJ,EAAA,CAAG,EAEG,MAAuD,CACzD,IAAI,EAA+D,KAC/D,EACA,EAAwC,KACxC,EAA8B,SAC9B,EAAoC,KACpC,EAAyC,KAEvC,MAA0B,CAC5B,GAAI,CAAC,EAAQ,MAAU,MAAM,mCAAmC,EAChE,OAAO,CACX,EACM,MAAkC,EAAK,CAAC,CAAC,QAAqB,eAAe,EAC7E,MAAuC,EAAM,CAAC,EAAE,cAA2B,wBAAwB,GAAK,KACxG,MAA6C,EAAO,YAAY,CAAC,CAAC,MAClE,MAA0C,EAAO,YAAY,CAAC,CAAC,QAE/D,MAA0B,EAAO,OAAO,SAAS,IACnD,EAAO,OAAO,QAAQ,GACnB,IAAmB,UAClB,EAAO,OAAO,eAAe,GAAK,EAAQ,CAAC,CAAC,WAAW,eAAiB,UAE1E,MAA+B,EAAS,GAAK,IAAmB,SAChE,MAA4B,EAAO,OAAO,UAAU,EACpD,MAAuC,IAAmB,UAAY,EAAO,QAAQ,SAAS,EAE9F,MAA2B,sBAAsB,EAAK,CAAC,CAAC,IAAM,EAAa,CAAC,CAAC,GAAG,UAChF,EAAiB,GAAwC,CAC3D,GAAI,CAAC,EAAM,QAAS,OAAO,KAC3B,GAAI,CACA,IAAM,EAAQ,aAAa,QAAQ,sBAAsB,EAAK,CAAC,CAAC,IAAM,EAAM,GAAG,SAAS,EACxF,OAAO,IAAU,KAAO,KAAO,IAAU,MAC7C,MAAQ,CAAE,OAAO,IAAM,CAC3B,EACM,MAAsB,CACxB,IAAM,EAAQ,EAAa,EACvB,GAAC,EAAM,SAAW,EAAM,YAAc,MAC1C,GAAI,CAAE,aAAa,QAAQ,EAAW,EAAG,EAAQ,CAAC,CAAC,OAAO,eAAiB,OAAS,OAAO,CAAG,MAAQ,CAA4B,CACtI,EACM,EAA0B,GAA0B,CACtD,IAAM,EAAM,EAAM,EACd,EAAQ,GAAK,aAAa,6BAA8B,MAAM,EAC7D,GAAK,gBAAgB,4BAA4B,CAC1D,EAEM,MAA2B,CAC7B,IAAM,EAAS,SAAS,cACxB,GAAI,EAAE,aAAkB,cAAgB,CAAC,EAAK,CAAC,CAAC,SAAS,CAAM,EAAG,OAClE,IAAM,EAAW,GAAiB,MAAM,KAAK,SAAS,iBAA8B,0BAA0B,CAAC,CAAC,CAC3G,KAAM,GAAO,CAAC,EAAK,CAAC,CAAC,SAAS,CAAE,IAAM,CAAC,EAAG,QAAQ,QAAU,EAAG,QAAQ,SAAW,EAAK,CAAC,CAAC,GAAG,EAC7F,GAAY,SAAS,SAAS,CAAQ,EAAG,EAAa,EAAU,CAAC,cAAe,EAAK,CAAC,EACrF,EAAO,KAAK,CACrB,EAEM,MAA0B,CAC5B,IAAM,EAAW,EAAW,EAC5B,SAAS,iBAA8B,gFAAgF,CAAC,CAAC,QAAS,GAAO,CACjI,EAAG,QAAQ,QAAU,EAAG,QAAQ,SAAW,EAAK,CAAC,CAAC,KACjD,EAAG,QAAQ,wBAAwB,IAAG,EAAG,QAAQ,MAAQ,EAAW,OAAS,UAC9E,EAAG,QAAQ,kDAAkD,IAC7D,EAAG,aAAa,gBAAiB,EAAK,CAAC,CAAC,EAAE,EAC1C,EAAG,aAAa,gBAAiB,OAAO,CAAQ,CAAC,GAEzD,CAAC,CACL,EAEM,GAAQ,CAAC,oBAAoB,IAAuC,CAAC,IAAY,CACnF,IAAM,EAAQ,EAAa,EACrB,EAAU,EAAO,OAAO,SAAS,EACjC,EAAW,EAAW,EACtB,EAAU,EAAQ,CAAC,CAAC,OAAO,eAC3B,EAAS,EAAS,EAClB,EAAK,EAAK,EACZ,GAEI,GADA,IAAmB,SACD,CAAC,KAAI,OAAQ,EAAe,IAAK,OAAQ,MAAO,CAAQ,EAExD,CAAC,KAAI,OAAQ,EAAe,IAAK,UAAW,MAAO,CAAO,CAAC,EAGrF,EAAG,QAAQ,MAAQ,EAAW,OAAS,SACvC,EAAG,QAAQ,YAAc,IAAmB,WAAa,GAAY,EAAsB,GAAK,OAAS,SACzG,EAAG,QAAQ,aAAe,EAAU,UAAY,WAChD,EAAG,QAAQ,YAAc,EAAS,OAAS,SAC3C,EAAG,QAAQ,eAAiB,EAC5B,EAAG,QAAQ,UAAY,EAAM,UAC7B,EAAG,QAAQ,mBAAqB,EAAM,mBACtC,EAAG,QAAQ,KAAO,EAAM,KACxB,EAAG,OAAS,CAAC,IAAa,IAAmB,WAAa,EAAM,YAAc,OAC9E,EAAG,gBAAgB,QAAS,CAAC,CAAQ,EACjC,EAAU,EAAG,gBAAgB,aAAa,EAAQ,EAAG,aAAa,cAAe,MAAM,EAC3F,IAAM,EAAiB,CAAC,EAAM,WAAa,IAAmB,WAAa,EAC3E,EAAG,gBAAgB,uBAAwB,CAAc,EACzD,IAAM,EAAe,EAAG,cAA2B,iCAAiC,EACpF,GAAc,gBAAgB,gBAAiB,CAAc,EAC7D,GAAc,aAAa,gBAAiB,OAAO,CAAc,CAAC,EAClE,EAAG,MAAM,YAAY,qBAAsB,EAAQ,CAAC,CAAC,OAAO,KAAK,EAC7D,EAAQ,CAAC,CAAC,OAAO,QAAQ,EAAG,MAAM,YAAY,sBAAuB,EAAQ,CAAC,CAAC,OAAO,MAAM,EAEhG,IAAM,EAAM,EAAM,EACd,IACA,EAAI,MAAM,YAAY,yBAA0B,EAAQ,CAAC,CAAC,OAAO,KAAK,EAClE,EAAQ,CAAC,CAAC,OAAO,QAAQ,EAAI,MAAM,YAAY,0BAA2B,EAAQ,CAAC,CAAC,OAAO,MAAM,EACrG,EAAI,QAAQ,aAAe,EAAU,UAAY,WACjD,EAAI,QAAQ,YAAc,EAAM,KAC3B,EAAO,OAAO,eAAe,IAAG,EAAI,MAAM,oBAAsB,KAEzE,IAAM,EAAW,EAAW,EAC5B,GAAI,EAAU,CACV,IAAM,EAAc,EAAc,EAClC,EAAS,OAAS,CAAC,EACnB,EAAS,QAAQ,MAAQ,EAAc,OAAS,QACpD,CACI,CAAC,GAAU,CAAC,EAAO,OAAO,eAAe,IACzC,EAAgB,CAAE,EAClB,EAAG,MAAM,QAAU,GACnB,EAAG,MAAM,UAAY,GACjB,IACA,EAAgB,CAAQ,EACxB,EAAS,MAAM,QAAU,KAGb,EAChB,EAAa,IAAsB,GAA0B,EAAG,aAAa,GAE7E,IAAoB,EACpB,EAAoB,MAExB,SAAS,iBAA8B,wBAAwB,CAAC,CAAC,QAAS,GAAS,CAC/E,GAAI,EAAK,QAAQ,QAAU,EAAK,QAAQ,SAAW,EAAK,CAAC,CAAC,GAAI,OAC9D,IAAM,EAAiB,GAAU,IAAkB,EAC7C,EAAO,EAAM,YAAc,IAAmB,WAAa,EAAM,YAAc,QAAU,IAAY,CAAC,GAAU,GACtH,EAAK,QAAQ,MAAQ,EAAO,UAAY,SACxC,EAAK,OAAS,CAAC,CACnB,CAAC,EACD,EAAY,EACZ,EAAQ,CACZ,EAEM,GAAe,CAAC,QAAS,KAA4D,CACvF,GAAM,CAAC,gBAAgB,EAAK,WAC5B,EAAuB,IAAiB,QAAQ,EAChD,EAAK,CAAC,CAAC,OAAS,GACZ,IAAiB,UAAU,EAAK,EAChC,EAAc,GAAG,mBAAqB,CAClC,EAAc,GAAG,GAAW,EAAK,EAAG,CAAC,cAAe,EAAK,CAAC,CAClE,CAAC,CACL,EACM,MAAyB,CAC3B,EAAuB,EAAK,EAC5B,EAAK,CAAC,CAAC,QAAQ,eAAiB,QAChC,EAAK,EACL,EAAS,CAAC,GAAI,EAAK,EAAG,KAAM,kBAAmB,OAAQ,CAAC,GAAI,EAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAC3E,EACM,GAAgB,CAAC,QAAS,KAA4D,CACxF,GAAM,CAAC,gBAAgB,EAAK,WAC5B,EAAuB,IAAiB,QAAQ,EAChD,EAAa,EACT,IAAiB,WAAU,EAAK,CAAC,CAAC,QAAQ,eAAiB,QAC3D,IAAiB,UAAU,EAAK,CACxC,EACM,MAA0B,CAC5B,EAAuB,EAAK,EAC5B,EAAK,CAAC,CAAC,QAAQ,eAAiB,QAChC,EAAK,EACL,EAAS,CAAC,GAAI,EAAK,EAAG,KAAM,mBAAoB,OAAQ,CAAC,GAAI,EAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACxE,EAAgB,IACpB,EAEM,MAAwB,CAC1B,EAAK,CAAC,kBAAmB,EAAK,CAAC,EAC/B,mBAAqB,CACjB,IAAM,EAAO,EAAa,EACtB,IAAmB,UACf,EAAK,YAAc,MACd,EAAO,OAAO,KAAK,GAAG,EAAO,KAAK,CAAC,KAAM,OAAQ,KAAM,UAAW,UAAW,MAAO,QAAS,GAAO,KAAM,EAAI,CAAC,EAC7G,EAAK,UAAY,EAAQ,CAAC,CAAC,OAAO,iBACrC,EAAK,QAAS,EAAM,EAAQ,EAAO,GAEpC,EAAK,OAAS,EAAW,IAC5B,EAAK,KAAM,EAAK,EAAQ,EAAM,EAE1C,CAAC,CACL,EAEM,MAAmC,EAAY,CAAC,GAAI,EAAK,EAAG,OAAQ,CAAa,CAAC,EAClF,EAAS,EAAoB,CAC/B,OAAQ,EACR,MAAO,GACP,eAAgB,CAAC,WAAW,GAAqB,CAC7C,QACA,KAAM,EACN,eAAgB,EAAc,CAAK,GAAK,EAAM,QAC9C,QAAS,CAAC,cAAa,aAAY,eAAc,cAAa,OAAM,WAAS,CACjF,CAAC,CACL,CAAC,EAEK,MAA6F,CAC/F,IAAM,EAAQ,EAAa,EAG3B,OAFI,IAAmB,SAAiB,CAAC,OAAQ,aAAc,aAAc,QAAQ,EACjF,EAAM,YAAc,MAAc,KAC/B,EAAQ,CAAC,CAAC,OAAO,eAClB,CAAC,OAAQ,gBAAiB,aAAc,QAAQ,EAChD,CAAC,OAAQ,kBAAmB,aAAc,QAAQ,CAC5D,EACM,EAAQ,GAAwB,CAClC,GAAO,eAAe,EAClB,GAAO,yBAAyB,cAAa,EAAgB,EAAM,eACvE,IAAM,EAAU,EAAkB,EAC9B,GAAS,EAAO,KAAK,CAAC,KAAM,OAAQ,GAAG,CAAO,CAAC,CACvD,EACM,EAAS,GAAwB,CACnC,GAAO,eAAe,GAClB,EAAa,CAAC,CAAC,YAAc,OAAS,IAAmB,YAC7D,EAAO,KAAK,CAAC,KAAM,QAAS,OAAQ,IAAmB,SAAW,eAAiB,iBAAkB,aAAc,EAAS,EAAI,SAAW,QAAQ,CAAC,CACxJ,EACM,EAAU,GAAwB,CAEpC,GADA,GAAO,eAAe,EAClB,IAAmB,SAAU,CAAE,EAAK,CAAK,EAAG,MAAQ,CACpD,EAAa,CAAC,CAAC,YAAc,QAAQ,EAAO,KAAK,CAAC,KAAM,SAAU,OAAQ,kBAAmB,aAAc,QAAQ,CAAC,CAC5H,EACM,EAAS,GAAwB,CAEnC,GADA,GAAO,eAAe,EAClB,IAAmB,SAAU,CAAE,EAAM,CAAK,EAAG,MAAQ,CACrD,EAAa,CAAC,CAAC,YAAc,QAAQ,EAAO,KAAK,CAAC,KAAM,QAAS,OAAQ,iBAAkB,aAAc,EAAS,EAAI,SAAW,QAAQ,CAAC,CAClJ,EACM,EAAU,GAAwB,CACpC,MAAO,eAAe,EAClB,EAAa,CAAC,CAAC,YAAc,OAAS,IAAmB,UAC7D,IAAI,IAAmB,WAAa,EAAa,CAAC,CAAC,YAAc,QAAU,EAAQ,CAAC,CAAC,OAAO,gBAAkB,CAAC,EAAS,EAAG,CAAE,EAAO,CAAK,EAAG,MAAQ,CAChJ,EAAW,EAAG,EAAM,CAAK,EAAQ,EAAK,CAAK,CADqG,CAExJ,EAEM,EAAiB,GAAwB,CAC3C,IAAM,EAAQ,EAAa,EAErB,EAAoB,GAAS,EADlB,EAAM,GAAK,EAAK,CACgC,EAAI,UAAY,SACjF,GAAI,IAAS,EAAgB,OAC7B,EAAiB,EACjB,IAAM,EAAiB,EAAQ,CAAC,CAAC,OAAO,eACxC,EAAO,KAAK,CACR,KAAM,OACN,KAAM,EACN,UAAW,EAAM,UACjB,QAAS,EACT,KAAM,IAAS,WAAa,GAAkB,EAAQ,CAAC,CAAC,OAAO,iBACnE,CAAC,CACL,EAEM,EAAgB,GAAuB,CACzC,IAAM,EAAS,aAAiB,YAAc,EAAM,OAAwB,KACvE,GAAU,IAAmB,WAAa,GAAS,IAC1C,EACV,CAAA,CAAM,YAAc,OAAS,OAAO,SAAS,EAAO,MAAM,GAC1D,EAAO,KAAK,CAAC,KAAM,SAAU,OAAQ,GAAG,KAAK,MAAM,EAAO,MAAM,EAAE,GAAG,CAAC,EACtE,EAAK,CAAC,CAAC,MAAM,YAAY,sBAAuB,GAAG,KAAK,MAAM,EAAO,MAAM,EAAE,GAAG,EAChF,EAAM,CAAC,EAAE,MAAM,YAAY,0BAA2B,GAAG,KAAK,MAAM,EAAO,MAAM,EAAE,GAAG,GAC/E,OAAO,SAAS,EAAO,KAAK,IACnC,EAAO,KAAK,CAAC,KAAM,SAAU,MAAO,GAAG,KAAK,MAAM,EAAO,KAAK,EAAE,GAAG,CAAC,EACpE,EAAK,CAAC,CAAC,MAAM,YAAY,qBAAsB,GAAG,KAAK,MAAM,EAAO,KAAK,EAAE,GAAG,EAC9E,EAAM,CAAC,EAAE,MAAM,YAAY,yBAA0B,GAAG,KAAK,MAAM,EAAO,KAAK,EAAE,GAAG,GAE5F,EAEM,GAAmB,GAAuB,CAG5C,GAFI,EAAE,aAAiB,eACnB,IAAmB,WAAa,CAAC,EAAS,GAC1C,CAAC,GAAe,QAAQ,wBAAwB,EAAG,OACvD,IAAM,EAAO,EAAM,cACf,aAAgB,OAAS,EAAK,CAAC,CAAC,SAAS,CAAI,GAAK,EAAc,SAAS,CAAI,IACjF,EAAM,CAAK,CACf,EAEM,GAA8B,GAAuB,CAEvD,GADI,EAAE,aAAiB,aAAe,IAAmB,UAAY,CAAC,EAAW,GAC7E,EAAM,kBAAoB,EAAM,SAAW,GAAK,EAAM,QAAU,EAAM,SAAW,EAAM,SAAW,EAAM,SAAU,OACtH,IAAM,EAAO,EAAM,kBAAkB,QAAU,EAAM,OAAO,QAA2B,yBAAyB,EAAI,KAC/G,GAAS,EAAK,CAAC,CAAC,SAAS,CAAI,GAAK,EAAK,aAAa,eAAe,IAAM,SAC1E,EAAK,aAAa,UAAU,GAAK,EAAK,aAAa,QAAQ,GAC/D,EAAM,EACV,EAEI,EAoFJ,MAnFA,GAAY,CACR,GAAG,EACH,IAAI,IAAK,CAAE,OAAO,EAAK,CAAC,CAAC,IAAM,EAAa,CAAC,CAAC,EAAI,EAClD,IAAI,QAAS,CAAE,OAAO,EAAW,CAAG,EACpC,IAAI,WAAY,CAAE,OAAO,IAAmB,SAAW,EACvD,IAAI,WAAY,CAAE,OAAO,EAAQ,CAAC,CAAC,OAAO,cAAgB,EAC1D,IAAI,OAAQ,CAAE,OAAO,EAAQ,CAAC,CAAC,OAAO,KAAO,EAC7C,IAAI,QAAS,CAAE,OAAO,EAAQ,CAAC,CAAC,OAAO,MAAQ,EAC/C,MAAa,CACT,EAAU,EAAkB,IAAI,EAChC,EAAS,KAAK,IACd,IAAM,EAAW,EAAM,GAAK,EAAK,EACjC,EAAiB,EAAS,sBAAsB,CAAC,CAAC,OAAS,EAAsB,CAAQ,EAAI,UAAY,SACzG,EAAO,QAAQ,KAAK,IAAK,KAAK,QAAQ,EACtC,EAAK,CAAC,CAAC,KAAO,EAAa,CAAC,CAAC,GAC7B,EAAY,IAAI,CAAS,EACzB,GAA0B,EAC1B,EAAiB,IAAI,eAAgB,GAAY,EAAc,EAAQ,EAAE,EAAE,YAAY,OAAS,EAAS,WAAW,CAAC,EACrH,EAAe,QAAQ,CAAQ,EAC/B,EAAQ,IAAI,GAAoB,CAAC,UAAW,EAAU,UAAa,CAAC,EAAK,CAAC,EAAG,UAAW,CAAK,CAAC,CAAC,EAC/F,EAAY,CAAC,OAAQ,SAAU,MAAO,UAAW,QAAU,GAAU,CAC3D,aAAiB,eAAmB,EAAS,IAC/C,EAAM,MAAQ,SAAU,EAAM,CAAK,EAC9B,EAAc,GAAG,EAAU,EAAO,EAAK,CAAC,EACrD,EAAG,SAAO,CAAC,EACX,EAAY,CAAC,OAAQ,EAAK,EAAG,MAAO,YAAa,QAAS,EAAc,SAAO,CAAC,EAChF,EAAY,CAAC,OAAQ,EAAK,EAAG,MAAO,gBAAiB,QAAS,EAAc,SAAO,CAAC,EACpF,EAAY,CAAC,OAAQ,EAAK,EAAG,MAAO,eAAgB,QAAS,GAAiB,SAAO,CAAC,EACtF,EAAY,CAAC,OAAQ,EAAK,EAAG,MAAO,QAAS,QAAS,GAA4B,SAAO,CAAC,EAC1F,EAAK,CAAC,CAAC,iBAAqC,gCAAgC,CAAC,CAAC,QAAS,GAAU,EAAY,CAAC,OAAQ,EAAO,MAAO,SAAU,YAAe,CACzJ,EAAM,QAAQ,MAAQ,EAAM,KAAO,OAAS,SAC5C,EAAS,CAAC,GAAI,EAAO,KAAM,0BAA2B,OAAQ,CAAC,KAAM,EAAM,IAAI,CAAC,CAAC,CACrF,EAAG,SAAO,CAAC,CAAC,EACZ,EAAK,CACT,EACA,SAAgB,CACZ,EAAuB,EAAK,EAC5B,EAAY,OAAO,CAAS,EAC5B,GAAgB,WAAW,EAC3B,EAAiB,KACjB,IAAoB,EACpB,EAAoB,KACpB,EAAO,WAAW,EAClB,EAAS,IACb,EACA,kBAAkB,EAAmD,CACjE,GAAI,EAAW,KAAK,eAAiB,SAAU,CAC3C,IAAM,EAAS,MAAM,KAAK,EAAM,CAAC,EAAE,iBAC/B,2FACJ,GAAK,CAAC,CAAC,EACP,OAAO,EAAK,EAAY,CACpB,OAAQ,EACR,OAAQ,EACR,KAAM,cACV,CAAC,CACL,CACA,IAAM,EAAO,EAAK,CAAC,CAAC,QAAQ,OAAS,QAAU,EAAI,GAC7C,EAAU,EAAW,KAAO,UAC5B,EAAU,IAAS,EACnB,kCACA,mCACF,EAAO,EAAiB,CAAU,CAAC,CAAC,QAAQ,CAC5C,QAAS,EAAU,CAAC,EAAG,CAAC,EAAI,EAC5B,UAAW,EAAU,CAAC,EAAS,MAAM,EAAI,CAC7C,CAAC,CAAC,CAAC,KAAK,UAAU,EACZ,EAAW,EAAW,EAI5B,OAHI,GAAY,EAAW,KAAK,OAAS,WAAU,EAAO,EAAK,KAAK,EAAU,CAC1E,QAAS,EAAU,CAAC,EAAG,CAAC,EAAI,CAChC,CAAC,CAAC,CAAC,KAAK,UAAU,GACX,EAAK,KAAK,CACrB,EACA,IAAI,MAAsB,CACtB,IAAM,EAAQ,KAAK,SAAS,SAAS,OAAS,EAAa,EAC3D,OAAO,EAAc,CAAC,OAAQ,CAAC,EAAa,CAAC,KAAM,EAAc,MAAM,KAAM,QAAO,UAAW,EAAM,KAAK,CAAC,EAAG,CAAC,kBAAmB,EAAE,CAAC,CAAC,CAAC,CAC3I,EACA,OAAM,QAAO,SAAQ,QAAO,SAC5B,aACA,QAAQ,EAAQ,EAAS,EACjB,IAAW,QAAW,IAAW,UAAY,CAAC,EAAW,KAAI,EAAgB,GAAW,MAC3F,CAAC,OAAM,QAAO,SAAQ,QAAO,QAAM,EAAG,EAAO,GAAG,CACrD,EACA,aACJ,EACO,CACX,EAEM,MAAyI,CAC3I,IAAI,EAAQ,CAAC,EACb,MAAO,CACH,IAAI,OAAQ,CAAE,OAAO,CAAO,EAC5B,MAAO,CAAE,EAAQ,EAAY,CAAC,GAAI,KAAK,IAAK,OAAQ,CAAiB,CAAC,CAAG,EACzE,SAAU,CAAC,EACX,IAAI,MAAO,CAAE,OAAO,EAAc,CAAC,OAAQ,CAAC,EAAa,CAAC,KAAM,EAAc,MAAM,OAAQ,MAAO,CAAC,EAAG,UAAW,EAAM,KAAK,CAAC,EAAG,CAAC,yBAA0B,GAAI,mBAAsB,EAAM,OAAQ,mBAAsB,EAAM,OAAQ,SAAW,GAAiB,KAAK,QAAQ,CAAK,CAAC,CAAC,CAAC,CAAC,CAAG,EAC7R,QAAQ,EAAe,CACnB,GAAO,eAAe,EACtB,SAAS,cAAc,IAAI,YAAY,oBAAqB,CAAC,OAAQ,CAAC,GAAI,EAAM,QAAU,aAAc,OAAQ,EAAM,OAAQ,QAAS,KAAK,GAAG,CAAC,CAAC,CAAC,CACtJ,CACJ,CACJ,EAEM,MAAiK,CACnK,IAAI,EAAQ,CAAC,EACb,MAAO,CACH,IAAI,OAAQ,CAAE,OAAO,CAAO,EAC5B,MAAO,CAAE,EAAQ,EAAY,CAAC,GAAI,KAAK,IAAK,OAAQ,CAAiB,CAAC,CAAG,EACzE,SAAU,CAAC,EACX,IAAI,MAAO,CAAE,OAAO,EAAc,CAAC,OAAQ,CAAC,EAAa,CAAC,KAAM,EAAc,MAAM,KAAM,MAAO,CAAC,KAAM,KAAK,IAAI,QAAQ,MAAQ,MAAM,EAAG,UAAW,EAAM,KAAK,CAAC,EAAG,CAAC,uBAAwB,GAAI,mBAAsB,EAAM,OAAQ,gBAAkB,GAAiB,KAAK,QAAQ,CAAK,EAAG,gBAAkB,GAAiB,KAAK,MAAM,CAAK,EAAG,SAAW,GAAiB,KAAK,QAAQ,CAAK,EAAG,SAAW,GAAiB,KAAK,QAAQ,CAAK,CAAC,CAAC,CAAC,CAAC,CAAG,EACzb,QAAQ,EAAe,CACnB,GAAO,eAAe,EACtB,SAAS,cAAc,IAAI,YAAY,kBAAmB,CAAC,OAAQ,CAAC,GAAI,EAAM,QAAU,aAAc,OAAQ,OAAQ,QAAS,KAAK,GAAG,CAAC,CAAC,CAAC,CAC9I,EACA,MAAM,EAAe,CACjB,IAAM,EAAO,aAAiB,aAAe,EAAM,cAAgB,KAC7D,EAAU,SAAS,eAAe,EAAM,QAAU,YAAY,EAChE,aAAgB,MAAQ,GAAS,SAAS,CAAI,GAClD,SAAS,cAAc,IAAI,YAAY,mBAAoB,CAAC,OAAQ,CAAC,GAAI,EAAM,QAAU,aAAc,OAAQ,QAAS,QAAS,KAAK,GAAG,CAAC,CAAC,CAAC,CAChJ,CACJ,CACJ,EAEM,EAAmB,GAAwC,CAC7D,EAAiB,YAAa,CAAS,CAAC,CAAC,CAAc,EACvD,EAAiB,gBAAiB,CAAa,CAAC,CAAC,CAAc,EAC/D,EAAiB,kBAAmB,CAAe,CAAC,CAAC,CAAc,CACvE,EC3gBM,EAAa,IAAI,QAEjB,EAAmB,GAAqC,CACtD,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAC7B,EAAyB,CAAc,EACvC,EAA4B,CAAc,EAC1C,EAAkB,CAAc,EACpC"}
@@ -1,2 +0,0 @@
1
- import{n as e,r as t,t as n}from"./dom-DiTFTWeR.js";import{t as r}from"./capability-motion-D_BJBnwB.js";import{c as i,f as a,l as o,n as s,u as c}from"./codecs-CQ7olTJL.js";import{i as l,t as ee}from"./alpine-machine-CE2UN4Qu.js";import{t as u}from"./focus-pk_lz9sg.js";import{n as d,t as te}from"./alpine-data-Dvc_bXq6.js";import{n as f}from"./anchored-popover-BwQbt4V2.js";import{t as p}from"./collection-navigation-hTbwy6oQ.js";import{n as ne,t as m}from"./styles-CX2j92ex.js";import{t as h}from"./merge-bindings-BtqW3UgP.js";import{t as g}from"./machine-CNnHDbyo.js";import{t as re}from"./dismissable-layer-BROE-Ln2.js";import{D as _,I as v,L as y,N as b,P as x,j as S,t as C}from"./common-CBK89mIt.js";import{t as w}from"./controlled-open-Hy4-OT-6.js";var T={auto:``,"3xs":`w-[var(--container-3xs)]`,"2xs":`w-[var(--container-2xs)]`,xs:`w-[var(--container-xs)]`},E=e=>`min-w-[min(var(${e}),var(--ui-popover-available-width,var(${e})))]`,D={auto:E(`--spacing-menu-min-width`),"3xs":E(`--container-3xs`),"2xs":E(`--container-2xs`),xs:E(`--container-xs`)},O={auto:`p-popover-padding`,..._},ie=m({definition:{component:`ui.menu`,parts:{menu:{base:[v,`auto-rows-min content-start max-w-[var(--ui-popover-available-width,none)] gap-1 overflow-hidden rounded-overlay-sm bg-surface`],variants:{width:T,minWidth:D,padding:O},defaults:{width:`auto`,minWidth:`auto`,padding:`auto`}},item:{base:[b],variants:{variant:{default:``,subtle:``,filled:``,ghost:``},color:{neutral:``,accent:``,success:``,warning:``,danger:``}},defaults:{variant:`default`,color:`neutral`}},itemLabel:{base:`min-w-0 flex-1 truncate`},itemMeta:{base:x},itemIcon:{base:S,variants:{position:{leading:``,trailing:`ml-auto`}},defaults:{position:`leading`}},submenu:{base:`contents`},submenuPanel:{base:``},group:{base:`grid auto-rows-min content-start gap-1`},label:{base:`px-menu-item-padding-inline py-1 font-label text-label [font-weight:var(--font-weight-label)]`},separatorRoot:{variants:{orientation:{vertical:`self-stretch self-center`,horizontal:`-mx-popover my-popover h-[var(--border-width-edge-separator)]`}},defaults:{orientation:`horizontal`}},separatorRule:{variants:{orientation:{vertical:`h-full w-[var(--border-width-edge-separator)] border-0`,horizontal:`h-[var(--border-width-edge-separator)] w-full border-0`}},defaults:{orientation:`horizontal`}}}}}),k=(e,t,n)=>(e.x-n.x)*(t.y-n.y)-(t.x-n.x)*(e.y-n.y),ae=({origin:e,panel:t})=>{let n=t.left>=e.x?t.left:t.right,r={x:n,y:t.top},i={x:n,y:t.bottom},a=Math.min(e.x,n),o=Math.max(e.x,n);return{contains(t){if(t.x<=a||t.x>=o)return!1;let n=k(t,e,r),s=k(t,r,i),c=k(t,i,e);return!((n<0||s<0||c<0)&&(n>0||s>0||c>0))}}},A=y,j=C,M={side:o(A,`bottom`),align:o(j,`start`),offset:i.clamp(-100,100).default(0),gap:i.clamp(0,50).default(4),open:s,disabled:s,class:a},oe=[l({name:`opening`,state:`opening`,project:()=>({}),onDone:`OPENING_DONE`,onError:`OPENING_ERROR`}),l({name:`closing`,state:`closing`,project:()=>({}),onDone:`CLOSING_DONE`,onError:`CLOSING_ERROR`})],N=w(),P=e=>e.focus===`first`?`first`:`menu`,F=e=>e.restoreFocus===!0,I=e=>Array.isArray(e.path)?e.path.filter(e=>typeof e==`string`):[],se=({props:e,effects:t})=>g({initial:`closed`,states:{closed:{tags:[`closed`],on:{OPEN:{target:`opening`,guard:`canOpen`,effects:`prepareOpen`},TOGGLE:{target:`opening`,guard:`canOpen`,effects:`prepareOpen`},PROPS_CHANGED:[{target:`opening`,guard:N.shouldOpen,reduce:`replaceProps`,effects:[`syncProps`,`prepareOpen`]},{reduce:`replaceProps`,effects:`syncProps`}]}},opening:{tags:[`visible`,`expanded`,`interactive`,`transitioning`],on:{OPENING_DONE:{target:`open`,effects:`finishOpen`},OPENING_ERROR:{target:`open`,effects:`finishOpen`},CLOSE:{target:`closing`,reduce:`clearSubmenus`,effects:[`syncSubmenus`,`prepareClose`]},TOGGLE:{target:`closing`,reduce:`clearSubmenus`,effects:[`syncSubmenus`,`prepareClose`]},SUBMENU_PATH_CHANGED:{reduce:`replaceSubmenuPath`,effects:`syncSubmenus`},PROPS_CHANGED:[{target:`closing`,guard:N.shouldClose,reduce:`replacePropsAndClearSubmenus`,effects:[`syncSubmenus`,`prepareClose`,`syncProps`]},{reduce:`replaceProps`,effects:`syncProps`}]}},open:{tags:[`visible`,`expanded`,`interactive`,`open`],on:{CLOSE:{target:`closing`,reduce:`clearSubmenus`,effects:[`syncSubmenus`,`prepareClose`]},TOGGLE:{target:`closing`,reduce:`clearSubmenus`,effects:[`syncSubmenus`,`prepareClose`]},SUBMENU_PATH_CHANGED:{reduce:`replaceSubmenuPath`,effects:`syncSubmenus`},PROPS_CHANGED:[{target:`closing`,guard:N.shouldClose,reduce:`replacePropsAndClearSubmenus`,effects:[`syncSubmenus`,`prepareClose`,`syncProps`]},{reduce:`replaceProps`,effects:`syncProps`}]}},closing:{tags:[`visible`,`transitioning`],on:{CLOSING_DONE:{target:`closed`,effects:`finishClose`},CLOSING_ERROR:{target:`closed`,effects:`finishClose`},OPEN:{target:`opening`,guard:`canOpen`,effects:`prepareOpen`},TOGGLE:{target:`opening`,guard:`canOpen`,effects:`prepareOpen`},PROPS_CHANGED:[{target:`opening`,guard:N.shouldOpen,reduce:`replaceProps`,effects:[`syncProps`,`prepareOpen`]},{reduce:`replaceProps`,effects:`syncProps`}]}}}},{context:{openSubmenuIds:[]},props:e,reducers:{replaceProps:N.replace,replaceSubmenuPath:e=>({context:{...e.context,openSubmenuIds:I(e.event)}}),clearSubmenus:e=>({context:{...e.context,openSubmenuIds:[]}}),replacePropsAndClearSubmenus:e=>{let t=N.replace(e);return t?{...t,context:{...e.context,openSubmenuIds:[]}}:void 0}},guards:{canOpen:({props:e})=>!e.disabled},effects:{prepareOpen:({event:e})=>t.prepareOpen(P(e)),finishOpen:t.finishOpen,prepareClose:({event:e})=>t.prepareClose(F(e),e.type!==`PROPS_CHANGED`),finishClose:t.finishClose,syncProps:t.syncProps,syncSubmenus:({context:e})=>t.syncSubmenus(e.openSubmenuIds)}}),ce=m({definition:{component:`ui.dropdown`,parts:{root:{base:`contents`}}}}),L=new Set([`BUTTON`,`DETAILS`,`EMBED`,`IFRAME`,`INPUT`,`LABEL`,`OBJECT`,`SELECT`,`SUMMARY`,`TEXTAREA`]),R=new Set([`button`,`checkbox`,`combobox`,`gridcell`,`link`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`radio`,`scrollbar`,`searchbox`,`slider`,`spinbutton`,`switch`,`tab`,`textbox`,`treeitem`]),z=e=>{let t=e.tagName,n=e.getAttribute(`role`)?.trim().toLowerCase().split(/\s+/)??[];return L.has(t)||(t===`A`||t===`AREA`)&&e.hasAttribute(`href`)||(t===`AUDIO`||t===`VIDEO`)&&e.hasAttribute(`controls`)||t===`IMG`&&e.hasAttribute(`usemap`)||e.hasAttribute(`tabindex`)||e.isContentEditable||e.hasAttribute(`data-ui-interactive`)||n.some(e=>R.has(e))},B=e=>{let t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=[],r=t.nextNode();for(;r;){let i=r.parentElement,a=i?.closest(`[aria-hidden="true"], [hidden], script, style, template`);i&&(!a||!e.contains(a))&&n.push(r.textContent??``),r=t.nextNode()}return n.join(` `).replace(/\s+/g,` `).trim()},le=e=>{let t=e.querySelector(`:scope > [data-ui-submenu-trigger]`),n=e.querySelector(`:scope > [data-ui-menu-submenu-panel]`);if(!t||!n)throw Error(`Menu submenu requires a trigger and nested menu panel.`);let r=Array.from(e.children);if(r.length!==2||r[0]!==t||r[1]!==n)throw Error(`Menu submenu trigger content produced invalid button structure; nested interactive content is not allowed.`);let i=e.dataset.uiSubmenuTriggerSource;if(!i||i===`missing`)throw Error(`Menu submenu requires heading or a trigger slot.`);if(i===`conflict`)throw Error(`Menu submenu accepts heading or a trigger slot, not both.`);let a=t.querySelector(`:scope > [data-ui-submenu-trigger-content]`);if(!a)throw Error(`Menu submenu requires an owned trigger-content wrapper.`);if(Array.from(a.querySelectorAll(`*`)).some(z))throw Error(`Menu submenu trigger content must not contain interactive or focusable descendants.`);if(!(t.dataset.textValue?.trim()??``)&&!B(a))throw Error(`Menu submenu trigger content requires accessible text or text_value.`);return{trigger:t,panel:n}},ue=0,V=()=>{let r=null,i=!1,a=!0,o=``,s=``,l=null,d=null,m=null,g=new Map,_=null,v=!1,y=null,b,x=()=>{if(!r)throw Error(`Dropdown has not been initialized.`);return r},S=()=>{let e=Array.from(x().children).find(e=>e instanceof HTMLElement&&!e.matches(`[data-ui-menu]`));if(!(e instanceof HTMLElement))throw Error(`Dropdown requires a trigger element before the menu.`);return e},C=()=>{let e=Array.from(x().children).find(e=>e instanceof HTMLElement&&e.matches(`[data-ui-menu]`));if(!(e instanceof HTMLElement))throw Error(`Dropdown requires a menu element.`);return e},w=()=>Z.getSnapshot().props,T=()=>Z.hasTag(`expanded`),E=()=>Z.hasTag(`visible`),D=e=>{if(!(e instanceof Element))return null;let t=e.closest(`[data-ui-menu-item]`);return t&&x().contains(t)?t:null},O=t=>e({value:t.dataset.disabled})||t.getAttribute(`aria-disabled`)===`true`||t.hasAttribute(`disabled`),k=()=>{if(!d)throw Error(`Dropdown navigation has not been initialized.`);return d},A=()=>{[k(),...Array.from(g.values(),({collection:e})=>e)].forEach(e=>e.allItems().forEach(e=>{e.hasAttribute(`role`)||e.setAttribute(`role`,`menuitem`),e.tabIndex=-1,O(e)&&e.setAttribute(`aria-disabled`,`true`)}))},j=e=>e?Array.from(g.values()).find(({trigger:t})=>t===e)??null:null,N=e=>Array.from(g.values()).find(t=>t.id===e)??null,P=e=>e?Array.from(g.values()).find(({panel:t})=>t===e)??null:null,F=e=>{let t=e.root.parentElement?.closest(`[data-ui-menu-submenu-panel]`)??null;return P(t)},I=e=>{let t=[],n=e;for(;n;)t.unshift(n.id),n=F(n);return t},L=()=>Z.getSnapshot().context.openSubmenuIds,R=e=>{y=null,g.forEach(t=>{let n=e.includes(t.id);t.root.dataset.state=n?`open`:`closed`,t.trigger.dataset.state=n?`open`:`closed`,t.trigger.setAttribute(`aria-expanded`,n?`true`:`false`),t.panel.dataset.state=n?`open`:`closed`,t.panel.hidden=!n,n?t.popover.open():(t.collection.clearActiveItem(),t.popover.close())})},z=e=>{let t=e.trigger.id||`${e.id}-trigger`,n=e.panel.id||`${e.id}-menu`;e.root.dataset.submenuId=e.id,e.trigger.id=t,e.trigger.setAttribute(`aria-controls`,n),e.panel.id=n,e.panel.setAttribute(`aria-labelledby`,t),e.panel.setAttribute(`popover`,`manual`),e.panel.setAttribute(`role`,`menu`),e.panel.tabIndex=-1},B=t=>{let{trigger:n,panel:r}=le(t),i=g.get(t);if(i?.trigger===n&&i.panel===r){z(i);return}let a=i?.id;i&&V(t);let o=a||t.dataset.submenuId||`ui-submenu-${++ue}`;t.dataset.state=`closed`,n.dataset.state=`closed`,n.setAttribute(`aria-expanded`,`false`),r.dataset.state=`closed`,r.hidden=!0;let s=p({root:()=>r,itemSelector:`[data-ui-menu-item]`,ownsItem:e=>e.closest(`[data-ui-menu]`)===r,isDisabled:O,loop:()=>e({value:r.dataset.loop})}),c={id:o,root:t,trigger:n,panel:r,popover:f({reference:()=>n,floating:()=>r,position:()=>`right`,align:()=>`start`,gap:()=>4,offset:()=>0}),collection:s};g.set(t,c),z(c)},V=e=>{let t=g.get(e);t&&(t.collection.clearActiveItem(),t.popover.destroy(),g.delete(e),y=null)},H=()=>{let e=L(),t=[];for(let n=e.length-1;n>=0;--n){let r=N(e[n]);if(r){t=I(r);break}}t.length===e.length&&t.every((t,n)=>t===e[n])||Z.send({type:`SUBMENU_PATH_CHANGED`,path:t})},U=()=>{let e=Array.from(x().querySelectorAll(`[data-ui-menu-submenu]`)),t=new Set(e),n=!1;Array.from(g.keys()).forEach(e=>{t.has(e)||(V(e),n=!0)}),n&&H(),e.forEach(B),H(),R(L()),A()},W=()=>{v||(v=!0,queueMicrotask(()=>{v=!1,r&&U()}))},de=e=>{e.some(e=>e.type===`childList`||e.target instanceof Element&&e.target.closest(`[data-ui-submenu-trigger-content]`)!==null)&&W()},G=e=>{let t=e.items().find(e=>e.hasAttribute(`data-selected`)||[`true`,`mixed`].includes(e.getAttribute(`aria-checked`)??``));return t?(e.activateItem({el:t}),!0):!1},K=(e,t=!1)=>{O(e.trigger)||(Z.send({type:`SUBMENU_PATH_CHANGED`,path:I(e)}),queueMicrotask(()=>{t?e.collection.focusFirst():G(e.collection)}))},q=(e,t=!1)=>{let n=I(e);Z.send({type:`SUBMENU_PATH_CHANGED`,path:n.slice(0,-1)}),t&&u(e.trigger,{showIndicator:!1})},fe=()=>{let e=S(),t=e.getAttribute(`tabindex`);l={ariaDisabled:e.getAttribute(`aria-disabled`),dataDisabled:e.getAttribute(`data-disabled`),disabled:e instanceof HTMLButtonElement?e.disabled:null,tabIndex:t??(e.tabIndex<0?`0`:null)}},J=(e,t,n)=>{n===null?e.removeAttribute(t):e.setAttribute(t,n)},Y=()=>{i&&(T()||a)&&c({el:x(),schema:M,key:`open`,value:T()});let e=S(),t=l;if(t){if(e.id||=o,e.setAttribute(`data-ui-dropdown-trigger`,``),e.setAttribute(`aria-expanded`,T()?`true`:`false`),e.setAttribute(`aria-controls`,s),e.setAttribute(`data-state`,T()?`open`:`closed`),w().disabled){e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`data-disabled`,``),e.tabIndex=-1,e instanceof HTMLButtonElement&&(e.disabled=!0);return}J(e,`aria-disabled`,t.ariaDisabled),J(e,`data-disabled`,t.dataDisabled),J(e,`tabindex`,t.tabIndex),e instanceof HTMLButtonElement&&t.disabled!==null&&(e.disabled=t.disabled)}},X=()=>{let e=C();e.id=s,e.setAttribute(`popover`,`manual`),e.setAttribute(`role`,`menu`),e.tabIndex=-1,e.hidden=!E(),e.setAttribute(`data-state`,T()?`open`:`closed`),A()},pe=e=>{a=!0,Y(),X(),m?.open(),queueMicrotask(()=>{Z.hasTag(`interactive`)&&(e===`first`?k().focusFirst():(G(k()),u(C())))})},me=()=>{Y(),X(),t({el:x(),name:`ui:open`})},he=(e,t)=>{a=t,k().clearActiveItem(),Y(),X(),e&&u(S(),{showIndicator:!1})},ge=()=>{m?.close(),Y(),X(),a=!0,t({el:x(),name:`ui:close`})},_e=()=>{Y(),X(),m?.sync()},Z=ee({schema:M,hooks:oe,createMachine:({props:e})=>se({props:e,effects:{prepareOpen:pe,finishOpen:me,prepareClose:he,finishClose:ge,syncProps:_e,syncSubmenus:R}})}),ve=(e=`menu`,t)=>{if(t?.preventDefault(),!w().disabled){if(Z.hasTag(`expanded`)){e===`first`&&k().focusFirst();return}Z.send({type:`OPEN`,focus:e})}},Q=(e,t)=>{t?.preventDefault(),Z.send({type:`CLOSE`,restoreFocus:e})},ye=(t,n)=>{if(O(t)){n.preventDefault();return}let r=e({value:C().dataset.keepOpen});(t.dataset.keepOpen===void 0||t.dataset.keepOpen===``?r:e({value:t.dataset.keepOpen}))||Q(!1)},be=e=>{let t=D(e.target);if(t){let n=j(t);if(n){e.preventDefault(),K(n);return}ye(t,e);return}let n=e.target;n instanceof Node&&S().contains(n)&&(e.preventDefault(),w().disabled||Z.send(`TOGGLE`))},xe=e=>{if(!(e instanceof KeyboardEvent))return;if(e.key===`Escape`&&E()){e.preventDefault(),e.stopPropagation();let t=N(L().at(-1)??``);if(t){q(t,!0);return}Q(!0);return}let t=e.target;if(t instanceof Node&&S().contains(t)){if(e.key===`ArrowDown`){ve(`first`,e);return}let t=S();!(t instanceof HTMLButtonElement)&&!(t instanceof HTMLAnchorElement)&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),w().disabled||Z.send(`TOGGLE`));return}let n=D(e.target),r=j(n);if(r&&(e.key===`ArrowRight`||e.key===`Enter`||e.key===` `)){e.preventDefault(),K(r,!0);return}let i=e.target instanceof Element?e.target.closest(`[data-ui-menu-submenu-panel]`):null,a=P(i);if(a&&e.key===`ArrowLeft`){e.preventDefault(),q(a,!0);return}if(n&&(e.key===`Enter`||e.key===` `)&&n.matches(`[role="menuitemcheckbox"], [role="menuitemradio"]`)){e.preventDefault(),n.querySelector(`input[type="checkbox"], input[type="radio"]`)?.click();return}a?a.collection.handleKeydown({event:e}):C().contains(e.target)&&k().handleKeydown({event:e})},Se=e=>{let t=D(e.target);t&&!O(t)&&k().activateItem({el:t})},Ce=e=>{if(!(e instanceof PointerEvent)||y?.contains({x:e.clientX,y:e.clientY}))return;let t=D(e.target);if(!t||O(t))return;y=null;let n=j(t),r=t.closest(`[data-ui-menu-submenu-panel]`),i=P(r);if((i?.collection??k()).activateItem({el:t}),n){K(n);return}Z.send({type:`SUBMENU_PATH_CHANGED`,path:i?I(i):[]})},we=e=>{if(!(e instanceof PointerEvent)||!window.matchMedia(`(hover: hover) and (pointer: fine)`).matches)return;let t=D(e.target),n=j(t);if(!n||!L().includes(n.id)||e.relatedTarget instanceof Node&&n.panel.contains(e.relatedTarget))return;let r=n.panel.getBoundingClientRect();y=ae({origin:{x:e.clientX,y:e.clientY},panel:{left:r.left,right:r.right,top:r.top,bottom:r.bottom}})},Te=e=>{if(`newState`in e){if(e.newState===`open`){E()||Z.send(`OPEN`);return}E()&&Z.send(`CLOSE`)}},$;return $={...Z,get isOpen(){return this.snapshot.current?.tags.includes(`expanded`)??!1},init(){b=te(this),r=this.$el,Z.connect(this.$el,this.snapshot),o=S().id||this.$id(`dropdown-trigger`),s=C().id||this.$id(`dropdown-menu`),fe(),d=p({root:()=>C(),itemSelector:`[data-ui-menu-item]`,ownsItem:e=>e.closest(`[data-ui-menu]`)===C(),isDisabled:O,loop:()=>e({value:C().dataset.loop})}),m=f({reference:S,floating:C,position:()=>w().side,align:()=>w().align,gap:()=>w().gap,offset:()=>w().offset}),U(),_=new MutationObserver(de),_.observe(x(),{attributeFilter:[`contenteditable`,`controls`,`data-ui-interactive`,`href`,`role`,`tabindex`,`usemap`],attributes:!0,childList:!0,subtree:!0}),b.add(re({isEnabled:()=>Z.hasTag(`interactive`),roots:()=>[x(),C()],onDismiss:()=>Q(!1)}));let t=()=>{y=null};n({target:window,event:`blur`,handler:t,cleanup:b}),n({target:window,event:`resize`,handler:t,cleanup:b}),n({target:window,event:`scroll`,handler:t,cleanup:b,options:{capture:!0}}),Y(),X(),R([]),i=!0,w().open&&queueMicrotask(()=>Z.send(`OPEN`))},destroy(){_?.disconnect(),_=null,v=!1,Z.disconnect(),m?.destroy(),Array.from(g.keys()).forEach(V),y=null,m=null,d=null,l=null,r=null},get root(){let e=this.snapshot.current?.props??w();return h({inputs:[ne({part:ce.parts.root,props:e,className:e.class}),{"data-ui-dropdown":``,":data-state":()=>Z.hasTag(`expanded`)?`open`:`closed`,"@click":be,"@keydown":xe,"@focusin":Se,"@pointermove":Ce,"@pointerout":we}]})},get menu(){let e=C();return h({inputs:[ne({part:ie.parts.menu,props:{width:e.dataset.width,minWidth:e.dataset.minWidth,padding:e.dataset.padding},className:e.dataset.class}),{id:s,popover:`manual`,role:`menu`,tabindex:`-1`,"data-ui-menu":``,":hidden":()=>!Z.hasTag(`visible`),":data-state":()=>Z.hasTag(`expanded`)?`open`:`closed`,"@toggle":Te}]})},open(e){ve(`menu`,e)},close(e){Q(e instanceof KeyboardEvent,e)},toggle(e){e?.preventDefault(),!w().disabled&&Z.send({type:`TOGGLE`,restoreFocus:e instanceof KeyboardEvent})}},$},H=d(`UiDropdown`,V),U=new WeakSet,W=e=>{U.has(e)||(U.add(e),r(e),H(e))};export{V as n,W as t};
2
- //# sourceMappingURL=entry.generated-WRveW7p9.js.map