@vireo-ai/trellis-ui 0.1.60 → 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 (202) hide show
  1. package/README.md +0 -1
  2. package/THIRD_PARTY_NOTICES.md +2 -0
  3. package/package.json +45 -36
  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/runtime-docs.d.ts +1 -0
  19. package/packages/client/types/components/formset/runtime-docs.d.ts +1 -0
  20. package/packages/client/types/components/modal/runtime-docs.d.ts +1 -0
  21. package/packages/client/types/components/panels/runtime-docs.d.ts +1 -0
  22. package/packages/client/types/components/radio/runtime-docs.d.ts +1 -0
  23. package/packages/client/types/components/scroll-area/runtime-docs.d.ts +1 -0
  24. package/packages/client/types/components/select/runtime-docs.d.ts +1 -0
  25. package/packages/client/types/components/sidebar/runtime-docs.d.ts +1 -0
  26. package/packages/client/types/components/slider/runtime-docs.d.ts +1 -0
  27. package/packages/client/types/components/switch/runtime-docs.d.ts +1 -0
  28. package/packages/client/types/components/tabs/runtime-docs.d.ts +1 -0
  29. package/packages/client/types/components/toast/runtime-docs.d.ts +1 -0
  30. package/packages/client/types/components/tooltip/runtime-docs.d.ts +1 -0
  31. package/packages/client/types/components/virtualizer/runtime-docs.d.ts +1 -0
  32. package/packages/client/types/directives/anchor.d.ts +26 -0
  33. package/packages/client/types/directives/index.d.ts +1 -0
  34. package/packages/client/types/runtime/anchored-popover.d.ts +4 -2
  35. package/packages/server/trellis_ui/static/trellis_ui/assets/css/{trellis-a1130be0a833.css → trellis-103fb43eb5e1.css} +23 -23
  36. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +23 -23
  37. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min-584dec82495c.css +2 -0
  38. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
  39. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +346 -318
  40. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor-B-CbpFFU.js +2 -0
  41. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor-B-CbpFFU.js.map +1 -0
  42. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor.js +2 -0
  43. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js +2 -0
  44. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{motion-B0MINJTL.js.map → motion-CKiK3BQA.js.map} +1 -1
  45. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +2 -2
  46. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{sortable-DQ4eUO2l.js → sortable-CbIOS4Lm.js} +2 -2
  47. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{sortable-DQ4eUO2l.js.map → sortable-CbIOS4Lm.js.map} +1 -1
  48. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +2 -2
  49. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js +2 -0
  50. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js.map +1 -0
  51. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-B32HePGn.js +2 -0
  52. 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
  53. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bl6ng6Hd.js +5 -0
  54. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-BDbURlVO.js.map → capability-sortable-Bl6ng6Hd.js.map} +1 -1
  55. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-C8xqwkr0.js.map +1 -1
  56. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BxNepYBE.js +2 -0
  57. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-Ybm_WmKr.js.map → core-BxNepYBE.js.map} +1 -1
  58. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js +2 -0
  59. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js.map +1 -0
  60. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DDrayI_M.js → entry.generated-BRaKxvab.js} +2 -2
  61. 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
  62. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js.map +1 -1
  63. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-OT_bt7F2.js → entry.generated-BzLNUDzF.js} +2 -2
  64. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BzLNUDzF.js.map +1 -0
  65. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js +2 -0
  66. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js.map +1 -0
  67. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ChoqPigj.js → entry.generated-CL4bjCqf.js} +2 -2
  68. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js.map +1 -0
  69. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BgGSoQFS.js → entry.generated-Cbyseoex.js} +2 -2
  70. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cbyseoex.js.map +1 -0
  71. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js +2 -0
  72. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js.map +1 -0
  73. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js.map +1 -1
  74. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CqtsPVJy.js → entry.generated-Cl8rInnJ.js} +2 -2
  75. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CqtsPVJy.js.map → entry.generated-Cl8rInnJ.js.map} +1 -1
  76. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-dcqwycC7.js → entry.generated-Ct9H8Hlf.js} +2 -2
  77. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ct9H8Hlf.js.map +1 -0
  78. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D2es_Wi2.js.map +1 -1
  79. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js.map +1 -1
  80. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js +2 -0
  81. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js.map +1 -0
  82. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js +2 -0
  83. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js.map +1 -0
  84. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-crNQSZEa.js → flip-BKThFI4L.js} +2 -2
  85. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-crNQSZEa.js.map → flip-BKThFI4L.js.map} +1 -1
  86. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B90yNOaV.js → motion-RwlK04Cy.js} +2 -2
  87. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B90yNOaV.js.map → motion-RwlK04Cy.js.map} +1 -1
  88. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CQDZhwd_.js.map +1 -1
  89. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-CTQoglp3.js → ui-Bg44ZmC3.js} +4 -4
  90. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-Bg44ZmC3.js.map +1 -0
  91. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/warn-BbGtqbh1.js +2 -0
  92. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/warn-BbGtqbh1.js.map +1 -0
  93. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DpoqsP_I.js +1 -0
  94. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +2 -2
  95. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-CCPYnOuT.js +1 -0
  96. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +2 -2
  97. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-BCkP5gtC.js +1 -0
  98. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +2 -2
  99. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-Cc84envj.js +1 -0
  100. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +2 -2
  101. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js +2 -0
  102. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js.map +1 -0
  103. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +2 -2
  104. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-MUHGUsup.js +1 -0
  105. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +2 -2
  106. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-DNAroAhk.js +1 -0
  107. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +2 -2
  108. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-BjLF548F.js +1 -0
  109. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +2 -2
  110. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-GpvEBW3K.js +1 -0
  111. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +2 -2
  112. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-bq7j1uwx.js +1 -0
  113. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +2 -2
  114. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-DkP0-rBO.js +1 -0
  115. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +2 -2
  116. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-OITEWczP.js +1 -0
  117. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +2 -2
  118. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/{core-CRIj89v5.js → core-Z4zMCScs.js} +1 -1
  119. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +2 -2
  120. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js +2 -0
  121. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js.map +1 -0
  122. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +2 -2
  123. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +134 -111
  124. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis-ecb43dfd3b7b.js +11 -0
  125. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +6 -6
  126. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min-ecb43dfd3b7b.js +11 -0
  127. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +6 -6
  128. package/packages/theme-engine/README.md +221 -0
  129. package/packages/theme-engine/THEME_AUTHORING.md +44 -0
  130. package/packages/theme-engine/dist/trellis.js +16935 -0
  131. package/packages/theme-engine/generated/knobs/v1/color-alpha.json +2426 -0
  132. package/packages/theme-engine/generated/knobs/v1/color-foundations.json +1582 -0
  133. package/packages/theme-engine/generated/knobs/v1/color-ink.json +6541 -0
  134. package/packages/theme-engine/generated/knobs/v1/color-lighting.json +3056 -0
  135. package/packages/theme-engine/generated/knobs/v1/color-normalization.json +1685 -0
  136. package/packages/theme-engine/generated/knobs/v1/color-ramps.json +14304 -0
  137. package/packages/theme-engine/generated/knobs/v1/composition.json +881 -0
  138. package/packages/theme-engine/generated/knobs/v1/depth.json +1705 -0
  139. package/packages/theme-engine/generated/knobs/v1/edges.json +326 -0
  140. package/packages/theme-engine/generated/knobs/v1/index.json +20096 -0
  141. package/packages/theme-engine/generated/knobs/v1/manifest.json +719 -0
  142. package/packages/theme-engine/generated/knobs/v1/motion.json +128 -0
  143. package/packages/theme-engine/generated/knobs/v1/radii.json +331 -0
  144. package/packages/theme-engine/generated/knobs/v1/semantic-actions.json +1814 -0
  145. package/packages/theme-engine/generated/knobs/v1/semantic-disabled.json +759 -0
  146. package/packages/theme-engine/generated/knobs/v1/semantic-disclosure.json +59 -0
  147. package/packages/theme-engine/generated/knobs/v1/semantic-intents.json +4841 -0
  148. package/packages/theme-engine/generated/knobs/v1/semantic-scrim.json +308 -0
  149. package/packages/theme-engine/generated/knobs/v1/semantic-selection.json +940 -0
  150. package/packages/theme-engine/generated/knobs/v1/semantic-structure.json +365 -0
  151. package/packages/theme-engine/generated/knobs/v1/sizing-anatomy.json +3112 -0
  152. package/packages/theme-engine/generated/knobs/v1/sizing-controls.json +599 -0
  153. package/packages/theme-engine/generated/knobs/v1/sizing-measures.json +1089 -0
  154. package/packages/theme-engine/generated/knobs/v1/spacing.json +1246 -0
  155. package/packages/theme-engine/generated/knobs/v1/substrates.json +315 -0
  156. package/packages/theme-engine/generated/knobs/v1/surfaces.json +870 -0
  157. package/packages/theme-engine/generated/knobs/v1/typography-anatomy.json +1754 -0
  158. package/packages/theme-engine/generated/knobs/v1/typography-fonts.json +711 -0
  159. package/packages/theme-engine/generated/knobs/v1/typography-scale.json +329 -0
  160. package/packages/theme-engine/generated/schemas/theme-config-v1.json +3987 -0
  161. package/packages/theme-engine/generated/schemas/theme-manifest-v1.json +79 -0
  162. package/packages/theme-engine/skills/create-trellis-theme/SKILL.md +108 -0
  163. package/packages/client/types/components/runtime-docs.d.ts +0 -2
  164. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min-d053936d467f.css +0 -2
  165. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-B0MINJTL.js +0 -2
  166. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js +0 -2
  167. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js.map +0 -1
  168. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-D_BJBnwB.js +0 -2
  169. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-BDbURlVO.js +0 -5
  170. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-Ybm_WmKr.js +0 -2
  171. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2YvnuzOD.js +0 -2
  172. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2YvnuzOD.js.map +0 -1
  173. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B986Ob4f.js +0 -2
  174. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B986Ob4f.js.map +0 -1
  175. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BITa8xFV.js +0 -2
  176. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BITa8xFV.js.map +0 -1
  177. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BSVJpGWu.js +0 -2
  178. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BSVJpGWu.js.map +0 -1
  179. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BgGSoQFS.js.map +0 -1
  180. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ChoqPigj.js.map +0 -1
  181. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-OT_bt7F2.js.map +0 -1
  182. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-WRveW7p9.js +0 -2
  183. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-WRveW7p9.js.map +0 -1
  184. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-dcqwycC7.js.map +0 -1
  185. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CTQoglp3.js.map +0 -1
  186. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-CKh9jOQc.js +0 -1
  187. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-DHqf4lhn.js +0 -1
  188. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-DhNrvLv7.js +0 -1
  189. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-CDPdgATy.js +0 -1
  190. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DzOKmgfj.js +0 -2
  191. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DzOKmgfj.js.map +0 -1
  192. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-1D2WtmlK.js +0 -1
  193. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-BXtMr9cv.js +0 -1
  194. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-B_b2uwfv.js +0 -1
  195. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-D8y44c-J.js +0 -1
  196. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-CBjcV5_z.js +0 -1
  197. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-DSduFsxK.js +0 -1
  198. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-B3vA5YAi.js +0 -1
  199. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-CL7BWKcd.js +0 -2
  200. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-CL7BWKcd.js.map +0 -1
  201. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis-acc1b62a38b1.js +0 -11
  202. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min-acc1b62a38b1.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"controller-C8xqwkr0.js","names":[],"sources":["../../../../../../../../client/src/components/keybinding/styles.ts","../../../../../../../../client/src/components/keybinding/controller.ts"],"sourcesContent":["import {defineStyles} from '../../runtime';\n\nconst KEYCAP_TYPOGRAPHY = 'font-body text-1 [font-weight:var(--font-weight-normal)]';\n\nconst keybindingStyles = defineStyles({definition: {\n component: 'ui.keybinding',\n parts: {\n root: {\n base: 'inline-flex shrink-0 items-center gap-1 whitespace-nowrap text-inherit',\n variants: {\n variant: {\n outline: KEYCAP_TYPOGRAPHY,\n plain: '',\n surface: KEYCAP_TYPOGRAPHY,\n },\n },\n defaults: {variant: 'outline'},\n },\n key: {\n base: 'inline-flex items-center justify-center',\n },\n separator: {\n base: '[font:inherit] text-current',\n },\n },\n}});\n\nexport {keybindingStyles};\n","import {formatShortcutKeys, observePressedShortcutKeys} from '@client/capabilities/shortcut';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {keybindingStyles} from './styles';\n\ntype KeybindingController = {\n setValue(value: unknown): void;\n destroy(): void;\n};\n\nconst createKeybindingController = (root: HTMLElement): KeybindingController => {\n let value = '';\n let pressedKeys: ReadonlySet<string> = new Set();\n\n const syncPressed = (): void => {\n root.querySelectorAll<HTMLElement>('[data-ui-keybinding-key]').forEach((key) => {\n key.toggleAttribute('data-pressed', pressedKeys.has(key.dataset.key ?? ''));\n });\n };\n const render = (): void => {\n root.replaceChildren();\n formatShortcutKeys(value).forEach((step, index) => {\n if (index > 0) {\n const separator = root.ownerDocument.createElement('span');\n separator.textContent = 'then';\n separator.setAttribute('data-ui-keybinding-separator', '');\n separator.className = resolveStyle({part: keybindingStyles.parts.separator});\n root.append(separator);\n }\n step.forEach(({label, token}) => {\n const key = root.ownerDocument.createElement('kbd');\n key.setAttribute('data-ui-keybinding-key', '');\n key.dataset.key = token;\n key.className = resolveStyle({part: keybindingStyles.parts.key});\n key.textContent = label;\n root.append(key);\n });\n });\n root.hidden = root.childElementCount === 0;\n syncPressed();\n };\n const stopObserving = observePressedShortcutKeys(root.ownerDocument, (keys) => {\n pressedKeys = keys;\n syncPressed();\n });\n\n return {\n setValue(nextValue): void {\n const next = typeof nextValue === 'string' ? nextValue.trim() : '';\n if (next === value && root.childElementCount > 0) return;\n value = next;\n render();\n },\n destroy: stopObserving,\n };\n};\n\nexport {createKeybindingController};\nexport type {KeybindingController};\n"],"mappings":"mGAEA,IAAM,EAAoB,2DAEpB,EAAmB,EAAa,CAAC,WAAY,CAC/C,UAAW,gBACX,MAAO,CACH,KAAM,CACF,KAAM,yEACN,SAAU,CACN,QAAS,CACL,QAAS,EACT,MAAO,GACP,QAAS,CACb,CACJ,EACA,SAAU,CAAC,QAAS,SAAS,CACjC,EACA,IAAK,CACD,KAAM,yCACV,EACA,UAAW,CACP,KAAM,6BACV,CACJ,CACJ,CAAC,CAAC,EChBI,EAA8B,GAA4C,CAC5E,IAAI,EAAQ,GACR,EAAmC,IAAI,IAErC,MAA0B,CAC5B,EAAK,iBAA8B,0BAA0B,CAAC,CAAC,QAAS,GAAQ,CAC5E,EAAI,gBAAgB,eAAgB,EAAY,IAAI,EAAI,QAAQ,KAAO,EAAE,CAAC,CAC9E,CAAC,CACL,EACM,MAAqB,CACvB,EAAK,gBAAgB,EACrB,EAAmB,CAAK,CAAC,CAAC,SAAS,EAAM,IAAU,CAC/C,GAAI,EAAQ,EAAG,CACX,IAAM,EAAY,EAAK,cAAc,cAAc,MAAM,EACzD,EAAU,YAAc,OACxB,EAAU,aAAa,+BAAgC,EAAE,EACzD,EAAU,UAAY,EAAa,CAAC,KAAM,EAAiB,MAAM,SAAS,CAAC,EAC3E,EAAK,OAAO,CAAS,CACzB,CACA,EAAK,SAAS,CAAC,QAAO,WAAW,CAC7B,IAAM,EAAM,EAAK,cAAc,cAAc,KAAK,EAClD,EAAI,aAAa,yBAA0B,EAAE,EAC7C,EAAI,QAAQ,IAAM,EAClB,EAAI,UAAY,EAAa,CAAC,KAAM,EAAiB,MAAM,GAAG,CAAC,EAC/D,EAAI,YAAc,EAClB,EAAK,OAAO,CAAG,CACnB,CAAC,CACL,CAAC,EACD,EAAK,OAAS,EAAK,oBAAsB,EACzC,EAAY,CAChB,EAMA,MAAO,CACH,SAAS,EAAiB,CACtB,IAAM,EAAO,OAAO,GAAc,SAAW,EAAU,KAAK,EAAI,GAC5D,IAAS,GAAS,EAAK,kBAAoB,IAC/C,EAAQ,EACR,EAAO,EACX,EACA,QAZkB,EAA2B,EAAK,cAAgB,GAAS,CAC3E,EAAc,EACd,EAAY,CAChB,CASa,CACb,CACJ"}
1
+ {"version":3,"file":"controller-C8xqwkr0.js","names":[],"sources":["../../../../../../../../client/src/components/keybinding/styles.ts","../../../../../../../../client/src/components/keybinding/controller.ts"],"sourcesContent":["import {defineStyles} from '../../runtime';\n\nconst KEYCAP_TYPOGRAPHY = 'font-body text-1 [font-weight:var(--font-weight-normal)]';\n\nconst keybindingStyles = defineStyles({definition: {\n component: 'ui.keybinding',\n parts: {\n root: {\n base: 'inline-flex shrink-0 items-center gap-1 whitespace-nowrap text-inherit',\n variants: {\n variant: {\n outline: KEYCAP_TYPOGRAPHY,\n plain: '',\n surface: KEYCAP_TYPOGRAPHY,\n },\n },\n defaults: {variant: 'outline'},\n },\n key: {\n base: 'inline-flex items-center justify-center',\n },\n separator: {\n base: '[font:inherit] text-current',\n },\n },\n}});\n\nexport {keybindingStyles};\n\nexport const styles = [keybindingStyles] as const;\n","import {formatShortcutKeys, observePressedShortcutKeys} from '@client/capabilities/shortcut';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {keybindingStyles} from './styles';\n\ntype KeybindingController = {\n setValue(value: unknown): void;\n destroy(): void;\n};\n\nconst createKeybindingController = (root: HTMLElement): KeybindingController => {\n let value = '';\n let pressedKeys: ReadonlySet<string> = new Set();\n\n const syncPressed = (): void => {\n root.querySelectorAll<HTMLElement>('[data-ui-keybinding-key]').forEach((key) => {\n key.toggleAttribute('data-pressed', pressedKeys.has(key.dataset.key ?? ''));\n });\n };\n const render = (): void => {\n root.replaceChildren();\n formatShortcutKeys(value).forEach((step, index) => {\n if (index > 0) {\n const separator = root.ownerDocument.createElement('span');\n separator.textContent = 'then';\n separator.setAttribute('data-ui-keybinding-separator', '');\n separator.className = resolveStyle({part: keybindingStyles.parts.separator});\n root.append(separator);\n }\n step.forEach(({label, token}) => {\n const key = root.ownerDocument.createElement('kbd');\n key.setAttribute('data-ui-keybinding-key', '');\n key.dataset.key = token;\n key.className = resolveStyle({part: keybindingStyles.parts.key});\n key.textContent = label;\n root.append(key);\n });\n });\n root.hidden = root.childElementCount === 0;\n syncPressed();\n };\n const stopObserving = observePressedShortcutKeys(root.ownerDocument, (keys) => {\n pressedKeys = keys;\n syncPressed();\n });\n\n return {\n setValue(nextValue): void {\n const next = typeof nextValue === 'string' ? nextValue.trim() : '';\n if (next === value && root.childElementCount > 0) return;\n value = next;\n render();\n },\n destroy: stopObserving,\n };\n};\n\nexport {createKeybindingController};\nexport type {KeybindingController};\n"],"mappings":"mGAEA,IAAM,EAAoB,2DAEpB,EAAmB,EAAa,CAAC,WAAY,CAC/C,UAAW,gBACX,MAAO,CACH,KAAM,CACF,KAAM,yEACN,SAAU,CACN,QAAS,CACL,QAAS,EACT,MAAO,GACP,QAAS,CACb,CACJ,EACA,SAAU,CAAC,QAAS,SAAS,CACjC,EACA,IAAK,CACD,KAAM,yCACV,EACA,UAAW,CACP,KAAM,6BACV,CACJ,CACJ,CAAC,CAAC,EChBI,EAA8B,GAA4C,CAC5E,IAAI,EAAQ,GACR,EAAmC,IAAI,IAErC,MAA0B,CAC5B,EAAK,iBAA8B,0BAA0B,CAAC,CAAC,QAAS,GAAQ,CAC5E,EAAI,gBAAgB,eAAgB,EAAY,IAAI,EAAI,QAAQ,KAAO,EAAE,CAAC,CAC9E,CAAC,CACL,EACM,MAAqB,CACvB,EAAK,gBAAgB,EACrB,EAAmB,CAAK,CAAC,CAAC,SAAS,EAAM,IAAU,CAC/C,GAAI,EAAQ,EAAG,CACX,IAAM,EAAY,EAAK,cAAc,cAAc,MAAM,EACzD,EAAU,YAAc,OACxB,EAAU,aAAa,+BAAgC,EAAE,EACzD,EAAU,UAAY,EAAa,CAAC,KAAM,EAAiB,MAAM,SAAS,CAAC,EAC3E,EAAK,OAAO,CAAS,CACzB,CACA,EAAK,SAAS,CAAC,QAAO,WAAW,CAC7B,IAAM,EAAM,EAAK,cAAc,cAAc,KAAK,EAClD,EAAI,aAAa,yBAA0B,EAAE,EAC7C,EAAI,QAAQ,IAAM,EAClB,EAAI,UAAY,EAAa,CAAC,KAAM,EAAiB,MAAM,GAAG,CAAC,EAC/D,EAAI,YAAc,EAClB,EAAK,OAAO,CAAG,CACnB,CAAC,CACL,CAAC,EACD,EAAK,OAAS,EAAK,oBAAsB,EACzC,EAAY,CAChB,EAMA,MAAO,CACH,SAAS,EAAiB,CACtB,IAAM,EAAO,OAAO,GAAc,SAAW,EAAU,KAAK,EAAI,GAC5D,IAAS,GAAS,EAAK,kBAAoB,IAC/C,EAAQ,EACR,EAAO,EACX,EACA,QAZkB,EAA2B,EAAK,cAAgB,GAAS,CAC3E,EAAc,EACd,EAAY,CAChB,CASa,CACb,CACJ"}
@@ -0,0 +1,2 @@
1
+ import{n as e}from"./object-SRW-YaCA.js";import{t}from"./warn-BbGtqbh1.js";import{n}from"./morph-Cq3V_23_.js";import{a as r,c as i,f as a,l as o,m as s,o as c,p as l,s as u,t as d,u as f}from"./ui-Bg44ZmC3.js";import{d as p}from"./codecs-CQ7olTJL.js";import{n as m}from"./alpine-machine-CE2UN4Qu.js";var h=`Are you sure?`,ee=null,g=new WeakSet,te=e=>e instanceof HTMLButtonElement||e instanceof HTMLInputElement,ne=({form:e,submitter:t})=>{let n=t?.dataset.uiConfirm;if(n!==void 0)return n||h;let r=e.dataset.uiConfirm;return r===void 0?null:r||h},re=({form:e,submitter:t})=>{window.setTimeout(()=>{if(!(!e.isConnected||t&&t.form!==e)){g.add(e);try{e.requestSubmit(t??void 0)}finally{g.delete(e)}}},0)},_=e=>{let t=e.target;if(!(t instanceof HTMLFormElement))return;if(g.has(t)){g.delete(t);return}let n=te(e.submitter)?e.submitter:null,r=ne({form:t,submitter:n});if(r===null)return;e.preventDefault();let i=!1,a=()=>{i||(i=!0,re({form:t,submitter:n}))},o=()=>{i=!0},s=new CustomEvent(`ui:confirm`,{bubbles:!0,cancelable:!0,detail:{form:t,message:r,submitter:n,triggeringEvent:e,proceed:a,cancel:o}});t.dispatchEvent(s),!s.defaultPrevented&&(window.confirm(r)?a():o())},ie=({root:e=document}={})=>{ee||=(e.addEventListener(`submit`,_,{capture:!0}),()=>e.removeEventListener(`submit`,_,{capture:!0}))},ae=e=>e.replace(/([A-Z])/g,`_$1`).toLowerCase(),oe=({manifest:e})=>{if(`propSchema`in e)throw Error(`Manual manifests cannot supply propSchema.`);return Object.freeze(e)},v=({schema:e,details:t})=>{let n={};return Object.entries(e).forEach(([e,r])=>{let i=t[e]??{},a=r.meta,o=i.name??ae(e);if(o in n)throw Error(`Schema property ${e} resolves to duplicate manifest property ${o}.`);let s={type:a.type,default:a.default};a.values&&(s.values=a.values),i.description&&(s.description=i.description),i.initialOnly&&(s.initialOnly=!0),n[o]=s}),n},y=({schema:e,details:t,templateProps:n={},templatePropsPosition:r=`after`,manifest:i})=>{let a=v({schema:e,details:t});Object.keys(n).forEach(e=>{if(e in a)throw Error(`Template prop ${e} collides with schema property ${e}.`)});let o=r===`before`?{...n,...a}:{...a,...n},{name:s,title:c,description:l,meta:u,...d}=i,f={name:s,title:c,description:l,...u?{meta:u}:{},propSchema:e,props:o,...d};return Object.freeze(f)},se=[`light`,`dark`,`system`],ce=e=>typeof e==`string`&&se.includes(e),b=e=>ce(e)?e:`system`,x=()=>document.documentElement.dataset.themeStorageKey||`trellis-ui-theme`,S=()=>b(document.documentElement.dataset.theme),C=()=>{try{return b(window.localStorage.getItem(x())||S())}catch{return S()}},w=e=>{try{window.localStorage.setItem(x(),e)}catch{}},le=()=>window.matchMedia(`(prefers-color-scheme: dark)`).matches,ue=e=>e===`dark`||e===`system`&&le(),T=e=>{let t=ue(e),n=t?`dark`:`light`,r=document.documentElement;return r.classList.toggle(`dark`,t),r.dataset.theme=e,r.dataset.resolvedTheme=n,r.dispatchEvent(new CustomEvent(`ui:theme-change`,{detail:{mode:e,resolved:n,dark:t,on:t},bubbles:!0})),{mode:e,resolved:n,dark:t,on:t}},de=()=>{let e=T(C());return{mode:e.mode,resolved:e.resolved,get dark(){return this.resolved===`dark`},get on(){return this.dark},set(e){let t=b(e);w(t);let n=T(t);this.mode=n.mode,this.resolved=n.resolved},toggle(){this.set(this.resolved===`dark`?`light`:`dark`)}}},fe=e=>{if(typeof e.store!=`function`)return;let t=e.store(`theme`)??de();e.store(`theme`,t),window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{if(t.mode!==`system`)return;let e=T(`system`);t.resolved=e.resolved})},pe=(e,t)=>{if(e&&typeof t.evaluate==`function`)return t.evaluate(e)},me=e=>{if(typeof e==`string`)return{key:e};if(typeof e==`object`&&e){let t=e.key??e.id;return t?{key:t}:{}}return{}},E=e=>{e.directive(`ui-layout`,(e,{expression:t},r)=>{if(!(e instanceof Element))return;let i=pe(t,r),o=s(e,me(i));n(e,a,l),r.cleanup?.(()=>{o()})})},D=`[x-ui-request], [x-ui-request\\.navigate]`,O=new Set([`data`,`extra`,`headers`,`history`,`method`]),k=[`altKey`,`ctrlKey`,`metaKey`,`shiftKey`],A=new WeakSet,j=(n,{expression:r},i)=>{if(!r?.trim())return{};let a=i.Alpine.evaluate(n,r);return e(a)?(Object.keys(a).forEach(e=>{O.has(e)||t(`x-ui-request: unknown option key`,e)}),a):(t(`x-ui-request: expression must evaluate to an object`),null)},M=e=>e.submitter instanceof HTMLElement?e.submitter:null,N=(e,t,n)=>t.defaultPrevented||(n?.getAttribute(`formmethod`)||e.getAttribute(`method`))?.toLowerCase()===`dialog`||e.getAttribute(`target`)||n?.getAttribute(`formtarget`)?!1:!e.noValidate&&!e.checkValidity()?(e.reportValidity(),!1):!0,P=e=>e.hash!==``&&e.origin===window.location.origin&&e.pathname===window.location.pathname&&e.search===window.location.search,F=(e,t,n)=>{if(t.defaultPrevented||t.button!==0||n&&k.some(e=>t[e])||e.hasAttribute(`download`)||e.getAttribute(`target`))return null;let r=new URL(e.href,document.baseURI);return r.origin===window.location.origin?P(r)?n?{destination:r,type:`native-fragment`}:null:{destination:r,type:`enhance`}:null},I=(e,n,i,a,s)=>{let c=c=>{if(A.delete(n))return;let l=M(c);if(!N(n,c,l))return;let u=j(n,i,a);if(u){if(c.preventDefault(),s.navigate){r(e,n.action,n,{...u,source:n,submitter:l});return}o(e,void 0,{...u,source:n,submitter:l}).then(e=>{e.type===`unavailable`&&(A.add(n),n.requestSubmit(l??void 0))}).catch(e=>t(`x-ui-request: request failed`,e))}};n.addEventListener(`submit`,c),a.cleanup?.(()=>n.removeEventListener(`submit`,c))},L=(e,n,i,a,s)=>{let l=l=>{let u=F(n,l,s.navigate);if(!u)return;if(u.type===`native-fragment`){c(u.destination);return}let d=j(n,i,a);if(d){if(l.preventDefault(),s.navigate){r(e,u.destination,n,d);return}o(e,n.href,{...d,method:d.method??`GET`,source:n}).then(e=>{e.type===`unavailable`&&window.location.assign(n.href)}).catch(e=>t(`x-ui-request: request failed`,e))}};n.addEventListener(`click`,l),a.cleanup?.(()=>n.removeEventListener(`click`,l))},R=e=>{e.addRootSelector(()=>D),i(e),u(e),e.directive(`ui-request`,(n,{expression:r,modifiers:i},a)=>{let o={expression:r};if(n instanceof HTMLFormElement){I(e,n,o,a,{navigate:i.includes(`navigate`)});return}if(n instanceof HTMLAnchorElement){L(e,n,o,a,{navigate:i.includes(`navigate`)});return}t(`x-ui-request: directive only supports forms and anchors`,n)})},z=(e,t)=>{let n=!0,r=!1,i,a,o=new Promise(e=>{a=e});return e(e=>{if(n){r=!0,i=e;return}a(e)},{scope:{$transition:t}}),n=!1,r?i:o},B=e=>{e.directive(`ui-transition`,e.skipDuringClone((n,{value:r,expression:i},a)=>{if(!r){t(`x-ui-transition requires a transition name`,n);return}let o=m(e,n);if(!o){t(`x-ui-transition:${r} requires an owning Trellis machine`,n);return}let s=i?.trim()?a.evaluateLater(i):null,c=o.onTransition(r,e=>s?z(s,e):void 0,n);a.cleanup(c)}))},V=()=>{},H,U=class{startComment;endComment;constructor(e,t){this.startComment=e,this.endComment=t}get children(){let e=[],t=this.startComment.nextSibling;for(;t&&t!==this.endComment;)t instanceof Element&&e.push(t),t=t.nextSibling;return e}get firstChild(){let e=this.startComment.nextSibling;return e===this.endComment?null:e}appendChild(e){return this.endComment.before(e),e}insertBefore(e,t){return(t??this.endComment).before(e),e}nextNode(e){let t=e.nextSibling;return t===this.endComment?null:t}},W=(e,t)=>e instanceof U?e.nextNode(t):t.nextSibling,he=e=>{let t=document.createElement(`template`);t.innerHTML=e;let n=t.content.firstElementChild;if(!n)throw Error(`Morph HTML must contain a root element.`);return n},ge=(e,t)=>{t.namespaceURI?e.setAttributeNodeNS(t.cloneNode()):t.name.includes(`@`)?e.setAttributeNode(t.cloneNode()):e.setAttribute(t.name,t.value)},G=(e,t)=>{let n=!1;return e(t,()=>{n=!0}),n},K=e=>e?.nodeType===Node.COMMENT_NODE&&e.textContent===`[if BLOCK]><![endif]`,q=e=>e?.nodeType===Node.COMMENT_NODE&&e.textContent===`[if ENDBLOCK]><![endif]`,J=(e,t)=>{let n=0,r=t;for(;r=W(e,r);)if(K(r))n+=1;else if(q(r)&&n>0)--n;else if(q(r))return r;throw Error(`Unclosed conditional morph block.`)},Y=e=>{let t=e;if(e._x_lastRenderedEl)t=e._x_lastRenderedEl;else if(e._x_currentIfEl)t=Y(e._x_currentIfEl).end;else if(e._x_lookup?.size){let n=new Set(e._x_lookup.values()),r=e.nextSibling;for(;r&&n.has(r);)t=Y(r).end,r=t.nextSibling}return{start:e,end:t}},X=(e,t)=>W(e,t.end),Z=(e,t)=>{if(e.nodeType!==t.nodeType||e.nodeName!==t.nodeName)return!1;if(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.COMMENT_NODE)return e.nodeValue===t.nodeValue;if(e instanceof HTMLTemplateElement&&t instanceof HTMLTemplateElement){let n=e,r=t;if(n._x_teleport){let e=r._x_teleport??t.content.firstElementChild;return!!(e&&Z(n._x_teleport,e))}return e.isEqualNode(t)}if(e instanceof Element&&t instanceof Element){if(e.attributes.length!==t.attributes.length)return!1;for(let{name:n,value:r}of e.attributes)if(t.getAttribute(n)!==r)return!1}let n=e.firstChild,r=t.firstChild;for(;n&&r;){if(!Z(n,r))return!1;n=Y(n).end.nextSibling,r=r.nextSibling}return n===null&&r===null},_e=(e,t,n)=>{if(t.start===n||X(e,t)===n)return;let r=t.start;for(;r;){let i=r.nextSibling;if(e.insertBefore(r,n),r===t.end)break;r=i}},ve=(e,t)=>{let n=t?._x_bindings?.id;n&&e instanceof Element&&(e.setAttribute(`id`,n),e.id=n)},ye=(e,t,n)=>{let r=new WeakMap,i=e.map(n).filter(Boolean),a=t.map(n).filter(Boolean);if(!(i.length>=2&&i.length===a.length&&new Set(i).size===i.length&&i.some((e,t)=>e!==a[t])&&i.every(e=>a.includes(e))))return r;let o=e=>{let t=new Map,n=e=>{e.id&&t.set(e.id,(t.get(e.id)??0)+1)};for(let t of e)n(t),t.querySelectorAll(`[id]`).forEach(n);return t},s=o(e),c=o(t),l=new Map;for(let[e,t]of s)t===1&&c.get(e)===1&&l.set(e,Symbol(e));let u=e=>{if(!n(e))for(let t of e.querySelectorAll(`[id]`)){let n=l.get(t.id);if(n){r.set(e,n);return}}};return e.forEach(u),t.forEach(u),r},Q=(e={})=>{let t={key:e.key??(e=>e.getAttribute(`key`)),lookahead:e.lookahead??!1,updating:e.updating??V,updated:e.updated??V,removing:e.removing??V,removed:e.removed??V,adding:e.adding??V,added:e.added??V,skipUntilCondition:null},n=e=>e instanceof Element?t.key(e):null,r=(e,t)=>e.nodeType!==t.nodeType||e.nodeName!==t.nodeName||n(e)!==n(t)||e instanceof Element&&t instanceof Element&&e.getAttribute(`x-data`)!==t.getAttribute(`x-data`),i=(e,n,r)=>{if(G(t.adding,n))return{inserted:!1,node:null};let i=n.cloneNode(!0);return e.insertBefore(i,r),t.added(i),{inserted:!0,node:i}},a=e=>!G(t.removing,e)&&(e.parentNode?.removeChild(e),t.removed(e),!0),o=e=>!G(t.removing,e.start)&&(e.start.parentNode?.removeChild(e.start),t.removed(e.start),!0),s=(e,n)=>{if(G(t.removing,e))return!1;let r=n.cloneNode(!0);return!G(t.adding,r)&&(e.parentNode?.replaceChild(r,e),t.removed(e),t.added(r),!0)},c=(e,t)=>{if(e._x_transitioning||e._x_isShown&&!t._x_isShown||!e._x_isShown&&t._x_isShown)return!1;let n=!1,r=Array.from(e.attributes);for(let i=r.length-1;i>=0;--i){let a=r[i].name;t.hasAttribute(a)||(a===`open`&&e instanceof HTMLDialogElement&&e.open?e.close():e.removeAttribute(a),n=!0)}let i=Array.from(t.attributes);for(let t=i.length-1;t>=0;--t){let r=i[t],{name:a,value:o}=r;e.getAttribute(a)!==o&&(ge(e,r),n=!0)}return n},l,u=(e,n,i)=>{if(e instanceof Element&&e.hasAttribute(`data-ui-ignore-morph`))return!1;if(r(e,n))return s(e,n);if(i===`before-descendant-hook`&&e.nodeType!==Node.COMMENT_NODE&&Z(e,n))return!1;let a=!1,o=!1,u=!1;if(t.updating(e,n,()=>{a=!0},()=>{u=!0},()=>{o=!0},e=>{t.skipUntilCondition=e}),u||Z(e,n))return!1;let f=!1;return e.nodeType===Node.ELEMENT_NODE&&H&&(H.cloneNode(e,n),e._x_teleport&&n._x_teleport&&(f=d(e._x_teleport,n._x_teleport)||f)),n.nodeType===Node.TEXT_NODE||n.nodeType===Node.COMMENT_NODE?e.nodeValue!==n.nodeValue&&(e.nodeValue=n.nodeValue,t.updated(e,n),!0):(a||(f=c(e,n)||f),o||(f=l(e,n)||f),f&&t.updated(e,n),f)},d=(e,t)=>u(e,t,`before-descendant-hook`);return l=(e,r)=>{let s=Array.from(e.children),c=ye(s,Array.from(r.children),n),u=e=>e?n(e)||c.get(e):null,f=new Map;for(let e of s){let t=u(e);t&&f.set(t,e)}let p=!1,m=e.firstChild,h=r.firstChild;incoming:for(;h;){if(ve(h,m),t.skipUntilCondition){let n=!m||t.skipUntilCondition(m),i=t.skipUntilCondition(h);if(n&&i)t.skipUntilCondition=null;else{!n&&m&&(m=X(e,Y(m))),i||(h=W(r,h));continue}}if(!m){p=i(e,h,null).inserted||p,h=W(r,h);continue}if(K(m)&&K(h)){let t=J(e,m),n=J(r,h);p=l(new U(m,t),new U(h,n))||p,m=W(e,t),h=W(r,n);continue}{if(t.lookahead&&m instanceof Element&&!m.isEqualNode(h)){let t=W(r,h);for(;t;){if(t instanceof Element&&m.isEqualNode(t)){let t=i(e,h,m);if(!t.inserted){h=W(r,h);continue incoming}m=t.node,p=!0;break}t=W(r,t)}}let n=u(h),a=u(m);if(n!==a){let t=n?f.get(n):void 0;if(t)_e(e,Y(t),m),m=t,p=!0;else if(n||a){let t=i(e,h,m);if(!t.inserted){h=W(r,h);continue}m=t.node,p=!0}}let o=X(e,Y(m));p=d(m,h)||p,m=o}h=W(r,h)}for(;m;){let t=Y(m),n=X(e,t);p=(t.end===t.start?a(m):o(t))||p,m=n}return p},{patchChildren:l,patchRoot:(e,t)=>u(e,t,`after-root-hook`)}},be=(e,t,n={})=>{let r=typeof t==`string`?he(t):t,i=e;return H?.closestDataStack&&!i._x_dataStack&&(r._x_dataStack=H.closestDataStack(i),r._x_dataStack&&H.cloneNode(i,r)),Q(n).patchRoot(i,r),e},xe=(e,t,n,r={})=>{let i=e.parentNode,a=typeof n==`string`?(()=>{let e=document.createElement(`div`);return e.insertAdjacentHTML(`beforeend`,n),e})():n,o=document.createComment(`[morph-start]`),s=document.createComment(`[morph-end]`);a.insertBefore(o,a.firstChild),a.appendChild(s),H?.closestDataStack&&(a._x_dataStack=H.closestDataStack(i),a._x_dataStack&&H.cloneNode(i,a)),Q(r).patchChildren(new U(e,t),new U(o,s))},Se=e=>{let t=e;H=t,t.morph=be,t.morphBetween=xe},$=new WeakSet,Ce=e=>{$.has(e)||($.add(e),p(e.reactive),e.plugin(Se),E(e),d(e),B(e),fe(e),ie(),R(e),f(e))};export{v as a,y as i,B as n,oe as r,Ce as t};
2
+ //# sourceMappingURL=core-BxNepYBE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core-Ybm_WmKr.js","names":[],"sources":["../../../../../../../../client/src/runtime/confirm.ts","../../../../../../../../client/src/runtime/manifest.ts","../../../../../../../../client/src/runtime/theme.ts","../../../../../../../../client/src/directives/layout.ts","../../../../../../../../client/src/directives/request.ts","../../../../../../../../client/src/directives/transition.ts","../../../../../../../../client/src/runtime/morph-engine.ts","../../../../../../../../client/src/core.ts"],"sourcesContent":["type SubmitterElement = HTMLButtonElement | HTMLInputElement;\n\ntype ConfirmProceed = () => void;\ntype ConfirmCancel = () => void;\n\ntype ConfirmEventDetail = {\n form: HTMLFormElement;\n message: string;\n submitter: SubmitterElement | null;\n triggeringEvent: SubmitEvent;\n proceed: ConfirmProceed;\n cancel: ConfirmCancel;\n};\n\ntype ConfirmRuntimeOptions = {\n root?: Document;\n};\n\nconst DEFAULT_CONFIRM_MESSAGE = 'Are you sure?';\n\nlet removeSubmitListener: (() => void) | null = null;\nconst bypassedForms = new WeakSet<HTMLFormElement>();\n\nconst isSubmitterElement = (value: unknown): value is SubmitterElement => (\n value instanceof HTMLButtonElement || value instanceof HTMLInputElement\n);\n\nconst confirmMessageFor = ({form, submitter}: {\n form: HTMLFormElement;\n submitter: SubmitterElement | null;\n}): string | null => {\n const submitterMessage = submitter?.dataset.uiConfirm;\n if (submitterMessage !== undefined) return submitterMessage || DEFAULT_CONFIRM_MESSAGE;\n\n const formMessage = form.dataset.uiConfirm;\n if (formMessage !== undefined) return formMessage || DEFAULT_CONFIRM_MESSAGE;\n\n return null;\n};\n\nconst queueConfirmedSubmit = ({form, submitter}: {\n form: HTMLFormElement;\n submitter: SubmitterElement | null;\n}): void => {\n // Chromium can retain the form's submission guard through the current microtask checkpoint.\n window.setTimeout(() => {\n if (!form.isConnected || (submitter && submitter.form !== form)) return;\n\n bypassedForms.add(form);\n try {\n form.requestSubmit(submitter ?? undefined);\n } finally {\n bypassedForms.delete(form);\n }\n }, 0);\n};\n\nconst handleSubmit = (event: SubmitEvent): void => {\n const form = event.target;\n if (!(form instanceof HTMLFormElement)) return;\n\n if (bypassedForms.has(form)) {\n bypassedForms.delete(form);\n return;\n }\n\n const submitter = isSubmitterElement(event.submitter) ? event.submitter : null;\n const message = confirmMessageFor({form, submitter});\n if (message === null) return;\n\n event.preventDefault();\n\n let settled = false;\n const proceed = (): void => {\n if (settled) return;\n settled = true;\n queueConfirmedSubmit({form, submitter});\n };\n const cancel = (): void => {\n settled = true;\n };\n const confirmEvent = new CustomEvent<ConfirmEventDetail>('ui:confirm', {\n bubbles: true,\n cancelable: true,\n detail: {\n form,\n message,\n submitter,\n triggeringEvent: event,\n proceed,\n cancel,\n },\n });\n\n form.dispatchEvent(confirmEvent);\n if (confirmEvent.defaultPrevented) return;\n\n if (window.confirm(message)) {\n proceed();\n } else {\n cancel();\n }\n};\n\nconst registerConfirm = ({root = document}: ConfirmRuntimeOptions = {}): void => {\n if (removeSubmitListener) return;\n\n root.addEventListener('submit', handleSubmit as EventListener, {capture: true});\n removeSubmitListener = (): void => root.removeEventListener('submit', handleSubmit as EventListener, {capture: true});\n};\n\nconst unregisterConfirm = (): void => {\n removeSubmitListener?.();\n removeSubmitListener = null;\n};\n\nexport {registerConfirm, unregisterConfirm};\nexport type {ConfirmCancel, ConfirmEventDetail, ConfirmProceed, ConfirmRuntimeOptions};\n","import type {CodecFn} from './codecs';\n\ntype PropKind = 'string' | 'number' | 'boolean' | 'enum' | 'json';\n\ntype ManifestProp = {\n type: PropKind;\n default?: unknown;\n values?: readonly string[];\n description?: string;\n initialOnly?: boolean;\n};\n\ntype ManifestPart = {\n selector: string;\n description: string;\n};\n\ntype ManifestToken = {\n name: string;\n description: string;\n};\n\ntype ManifestAcceptedEvent = {\n description: string;\n detail?: Record<string, string>;\n};\n\ntype ComponentManifestMeta = {\n group?: string;\n};\n\ntype ComponentManifestFields = {\n name: string;\n title: string;\n description: string;\n meta?: ComponentManifestMeta;\n slots?: Record<string, string>;\n events?: Record<string, string>;\n acceptedEvents?: Record<string, ManifestAcceptedEvent>;\n parts?: Record<string, ManifestPart>;\n tokens?: readonly ManifestToken[];\n};\n\ntype ManualComponentManifest = ComponentManifestFields & {\n props?: Record<string, ManifestProp>;\n propSchema?: never;\n};\n\ntype SchemaComponentManifest = ComponentManifestFields & {\n props: Record<string, ManifestProp>;\n propSchema: Record<string, CodecFn<unknown>>;\n};\n\ntype ComponentManifest = ManualComponentManifest | SchemaComponentManifest;\n\ntype ManifestPropDetails = Pick<ManifestProp, 'description'> & {\n name?: string;\n initialOnly?: boolean;\n};\n\ntype SchemaPropDetails<T extends Record<string, CodecFn<unknown>>> = {\n [K in keyof T]?: ManifestPropDetails;\n};\n\ntype DefineManifestOptions<T extends ManualComponentManifest> = {\n manifest: T & {propSchema?: never};\n};\n\ntype PropsFromSchemaOptions<T extends Record<string, CodecFn<unknown>>> = {\n schema: T;\n details: SchemaPropDetails<T>;\n};\n\ntype DefineSchemaManifestOptions<\n TSchema extends Record<string, CodecFn<unknown>>,\n TManifest extends ComponentManifestFields,\n> = {\n schema: TSchema;\n details: SchemaPropDetails<TSchema>;\n templateProps?: Record<string, ManifestProp>;\n templatePropsPosition?: 'before' | 'after';\n manifest: TManifest & {props?: never; propSchema?: never};\n};\n\nconst toSnake = (value: string): string => value.replace(/([A-Z])/g, '_$1').toLowerCase();\n\nconst defineManifest = <const T extends ManualComponentManifest>({manifest}: DefineManifestOptions<T>): Readonly<T> => {\n if ('propSchema' in manifest) throw new Error('Manual manifests cannot supply propSchema.');\n return Object.freeze(manifest);\n};\n\nconst propsFromSchema = <const T extends Record<string, CodecFn<unknown>>>({\n schema,\n details,\n}: PropsFromSchemaOptions<T>): Record<string, ManifestProp> => {\n const props: Record<string, ManifestProp> = {};\n\n Object.entries(schema).forEach(([schemaKey, codec]) => {\n const propDetails = details[schemaKey as keyof T] ?? {};\n const meta = codec.meta;\n const propName = propDetails.name ?? toSnake(schemaKey);\n if (propName in props) {\n throw new Error(`Schema property ${schemaKey} resolves to duplicate manifest property ${propName}.`);\n }\n const prop: ManifestProp = {\n type: meta.type,\n default: meta.default,\n };\n\n if (meta.values) prop.values = meta.values;\n if (propDetails.description) prop.description = propDetails.description;\n if (propDetails.initialOnly) prop.initialOnly = true;\n\n props[propName] = prop;\n });\n\n return props;\n};\n\nconst defineSchemaManifest = <\n const TSchema extends Record<string, CodecFn<unknown>>,\n const TManifest extends ComponentManifestFields,\n>({\n schema,\n details,\n templateProps = {},\n templatePropsPosition = 'after',\n manifest,\n}: DefineSchemaManifestOptions<TSchema, TManifest>): Readonly<TManifest & {\n props: Record<string, ManifestProp>;\n propSchema: TSchema;\n}> => {\n const schemaProps = propsFromSchema({schema, details});\n Object.keys(templateProps).forEach((propName) => {\n if (propName in schemaProps) {\n throw new Error(`Template prop ${propName} collides with schema property ${propName}.`);\n }\n });\n\n const props = templatePropsPosition === 'before'\n ? {...templateProps, ...schemaProps}\n : {...schemaProps, ...templateProps};\n const {name, title, description, meta, ...rest} = manifest;\n const result = {\n name,\n title,\n description,\n ...(meta ? {meta} : {}),\n propSchema: schema,\n props,\n ...rest,\n } as TManifest & {props: Record<string, ManifestProp>; propSchema: TSchema};\n\n return Object.freeze(result);\n};\n\nexport {defineManifest, defineSchemaManifest, propsFromSchema};\nexport type {\n ComponentManifest,\n DefineManifestOptions,\n DefineSchemaManifestOptions,\n ManualComponentManifest,\n ManifestPart,\n ManifestProp,\n ManifestPropDetails,\n ManifestAcceptedEvent,\n ComponentManifestMeta,\n ManifestToken,\n PropsFromSchemaOptions,\n PropKind,\n SchemaPropDetails,\n SchemaComponentManifest,\n};\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nconst THEME_VALUES = ['light', 'dark', 'system'] as const;\ntype ThemeMode = typeof THEME_VALUES[number];\ntype ResolvedThemeMode = Exclude<ThemeMode, 'system'>;\n\ntype ThemeChangeDetail = {\n mode: ThemeMode;\n resolved: ResolvedThemeMode;\n dark: boolean;\n on: boolean;\n};\n\ntype ThemeStore = {\n mode: ThemeMode;\n resolved: ResolvedThemeMode;\n readonly dark: boolean;\n readonly on: boolean;\n set: (mode: ThemeMode) => void;\n toggle: () => void;\n};\n\nconst isThemeMode = (value: unknown): value is ThemeMode => (\n typeof value === 'string' && THEME_VALUES.includes(value as ThemeMode)\n);\n\nconst normalizeThemeMode = (value: unknown): ThemeMode => (\n isThemeMode(value) ? value : 'system'\n);\n\nconst storageKey = (): string => (\n document.documentElement.dataset.themeStorageKey || 'trellis-ui-theme'\n);\n\nconst fallbackMode = (): ThemeMode => normalizeThemeMode(document.documentElement.dataset.theme);\n\nconst storedMode = (): ThemeMode => {\n try {\n return normalizeThemeMode(window.localStorage.getItem(storageKey()) || fallbackMode());\n } catch {\n return fallbackMode();\n }\n};\n\nconst persistMode = (mode: ThemeMode): void => {\n try {\n window.localStorage.setItem(storageKey(), mode);\n } catch {\n // Keep theme controls usable in private or restricted browsing contexts.\n }\n};\n\nconst prefersDark = (): boolean => (\n window.matchMedia('(prefers-color-scheme: dark)').matches\n);\n\nconst resolveDark = (mode: ThemeMode): boolean => (\n mode === 'dark' || (mode === 'system' && prefersDark())\n);\n\nconst applyThemeMode = (mode: ThemeMode): ThemeChangeDetail => {\n const dark = resolveDark(mode);\n const resolved: ResolvedThemeMode = dark ? 'dark' : 'light';\n const root = document.documentElement;\n\n root.classList.toggle('dark', dark);\n root.dataset.theme = mode;\n root.dataset.resolvedTheme = resolved;\n root.dispatchEvent(new CustomEvent<ThemeChangeDetail>('ui:theme-change', {\n detail: {mode, resolved, dark, on: dark},\n bubbles: true,\n }));\n\n return {mode, resolved, dark, on: dark};\n};\n\nconst createThemeStore = (): ThemeStore => {\n const initial = applyThemeMode(storedMode());\n\n return {\n mode: initial.mode,\n resolved: initial.resolved,\n get dark(): boolean {\n return this.resolved === 'dark';\n },\n get on(): boolean {\n return this.dark;\n },\n set(mode: ThemeMode): void {\n const nextMode = normalizeThemeMode(mode);\n persistMode(nextMode);\n const next = applyThemeMode(nextMode);\n this.mode = next.mode;\n this.resolved = next.resolved;\n },\n toggle(): void {\n this.set(this.resolved === 'dark' ? 'light' : 'dark');\n },\n };\n};\n\nconst registerThemeStore = (AlpineInstance: AlpineType): void => {\n if (typeof AlpineInstance.store !== 'function') return;\n\n const existingStore = AlpineInstance.store('theme') as ThemeStore | undefined;\n const store = existingStore ?? createThemeStore();\n\n AlpineInstance.store('theme', store);\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n if (store.mode !== 'system') return;\n const next = applyThemeMode('system');\n store.resolved = next.resolved;\n });\n};\n\nexport {\n applyThemeMode,\n createThemeStore,\n registerThemeStore,\n type ResolvedThemeMode,\n type ThemeChangeDetail,\n type ThemeStore,\n type ThemeMode,\n};\n","import type Alpine from 'alpinejs';\nimport {\n markLayoutParticipant,\n MOTION_KEY_ATTR,\n MOTION_LAYOUT_ATTR,\n} from '@client/runtime/layout-participant';\nimport {declareMorphAttributes} from '@client/runtime/morph';\n\ntype LayoutDirectiveValue = string | {\n id?: string;\n key?: string;\n};\n\nconst readExpression = <T>(expression: string | undefined, utilities: Alpine.DirectiveUtilities): T | undefined => {\n if (!expression || typeof utilities.evaluate !== 'function') return undefined;\n return utilities.evaluate(expression) as T;\n};\n\nconst layoutOptions = (value: LayoutDirectiveValue | undefined): {key?: string} => {\n if (typeof value === 'string') return {key: value};\n if (typeof value === 'object' && value) {\n const key = value.key ?? value.id;\n return key ? {key} : {};\n }\n return {};\n};\n\nconst registerLayoutDirective = (Alpine: Alpine.Alpine): void => {\n Alpine.directive('ui-layout', (el, {expression}, utilities) => {\n if (!(el instanceof Element)) return;\n\n const value = readExpression<LayoutDirectiveValue>(expression, utilities);\n const cleanup = markLayoutParticipant(el, layoutOptions(value));\n declareMorphAttributes(el, MOTION_KEY_ATTR, MOTION_LAYOUT_ATTR);\n\n utilities.cleanup?.(() => {\n cleanup();\n });\n });\n};\n\nexport {registerLayoutDirective};\n","import type Alpine from 'alpinejs';\nimport {registerRequestRuntime, requestWithAlpine, type RequestOptions} from '@client/runtime/engine/request';\nimport {\n navigateWithAlpine,\n prepareNativeFragmentNavigation,\n registerNavigationRuntime,\n type NavigationOptions,\n} from '@client/runtime/engine/navigation';\nimport {isPlainRecord, warn} from '../utils';\n\ntype RequestDirectiveContext = Pick<Alpine.DirectiveData, 'expression'>;\ntype RequestDirectiveOptions = NavigationOptions & Record<string, unknown>;\ntype AnchorClick = {\n destination: URL;\n type: 'enhance' | 'native-fragment';\n};\n\nconst REQUEST_ROOT_SELECTOR = '[x-ui-request], [x-ui-request\\\\.navigate]';\nconst OPTION_KEYS = new Set(['data', 'extra', 'headers', 'history', 'method']);\nconst CLICK_MODIFIER_KEYS: Array<keyof MouseEvent> = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];\nconst nativeFormSubmissions = new WeakSet<HTMLFormElement>();\n\nconst readOptions = (\n el: Element,\n {expression}: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n): RequestDirectiveOptions | null => {\n if (!expression?.trim()) return {};\n\n const evaluated = utilities.Alpine.evaluate(el, expression);\n if (!isPlainRecord(evaluated)) {\n warn('x-ui-request: expression must evaluate to an object');\n return null;\n }\n\n Object.keys(evaluated).forEach((key) => {\n if (!OPTION_KEYS.has(key)) warn('x-ui-request: unknown option key', key);\n });\n\n return evaluated as RequestDirectiveOptions;\n};\n\nconst submitterFrom = (event: SubmitEvent): HTMLElement | null => (\n event.submitter instanceof HTMLElement ? event.submitter : null\n);\n\nconst shouldEnhanceFormSubmit = (form: HTMLFormElement, event: SubmitEvent, submitter: HTMLElement | null): boolean => {\n if (event.defaultPrevented) return false;\n if ((submitter?.getAttribute('formmethod') || form.getAttribute('method'))?.toLowerCase() === 'dialog') return false;\n if (form.getAttribute('target')) return false;\n if (submitter?.getAttribute('formtarget')) return false;\n\n if (!form.noValidate && !form.checkValidity()) {\n form.reportValidity();\n return false;\n }\n\n return true;\n};\n\nconst samePageHashOnly = (url: URL): boolean => (\n url.hash !== ''\n && url.origin === window.location.origin\n && url.pathname === window.location.pathname\n && url.search === window.location.search\n);\n\nconst anchorClickFrom = (anchor: HTMLAnchorElement, event: MouseEvent, navigate: boolean): AnchorClick | null => {\n if (event.defaultPrevented) return null;\n if (event.button !== 0) return null;\n if (navigate && CLICK_MODIFIER_KEYS.some((key) => event[key])) return null;\n if (anchor.hasAttribute('download')) return null;\n if (anchor.getAttribute('target')) return null;\n\n const destination = new URL(anchor.href, document.baseURI);\n if (destination.origin !== window.location.origin) return null;\n if (samePageHashOnly(destination)) {\n return navigate ? {destination, type: 'native-fragment'} : null;\n }\n return {destination, type: 'enhance'};\n};\n\nconst registerFormDirective = (\n AlpineInstance: Alpine.Alpine,\n form: HTMLFormElement,\n directive: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n behavior: {navigate: boolean},\n): void => {\n const onSubmit = (event: SubmitEvent): void => {\n if (nativeFormSubmissions.delete(form)) return;\n const submitter = submitterFrom(event);\n if (!shouldEnhanceFormSubmit(form, event, submitter)) return;\n\n const options = readOptions(form, directive, utilities);\n if (!options) return;\n\n event.preventDefault();\n if (behavior.navigate) {\n navigateWithAlpine(AlpineInstance, form.action, form, {\n ...options,\n source: form,\n submitter,\n });\n return;\n }\n void requestWithAlpine(AlpineInstance, undefined, {\n ...options,\n source: form,\n submitter,\n }).then((result) => {\n if (result.type !== 'unavailable') return;\n nativeFormSubmissions.add(form);\n form.requestSubmit(submitter ?? undefined);\n }).catch((error: unknown) => warn('x-ui-request: request failed', error));\n };\n\n form.addEventListener('submit', onSubmit);\n utilities.cleanup?.(() => form.removeEventListener('submit', onSubmit));\n};\n\nconst registerAnchorDirective = (\n AlpineInstance: Alpine.Alpine,\n anchor: HTMLAnchorElement,\n directive: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n behavior: {navigate: boolean},\n): void => {\n const onClick = (event: MouseEvent): void => {\n const click = anchorClickFrom(anchor, event, behavior.navigate);\n if (!click) return;\n if (click.type === 'native-fragment') {\n prepareNativeFragmentNavigation(click.destination);\n return;\n }\n\n const options = readOptions(anchor, directive, utilities);\n if (!options) return;\n\n event.preventDefault();\n if (behavior.navigate) {\n navigateWithAlpine(AlpineInstance, click.destination, anchor, options);\n return;\n }\n void requestWithAlpine(AlpineInstance, anchor.href, {\n ...options,\n method: options.method ?? 'GET',\n source: anchor,\n }).then((result) => {\n if (result.type === 'unavailable') window.location.assign(anchor.href);\n }).catch((error: unknown) => warn('x-ui-request: request failed', error));\n };\n\n anchor.addEventListener('click', onClick);\n utilities.cleanup?.(() => anchor.removeEventListener('click', onClick));\n};\n\nconst registerRequestDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.addRootSelector(() => REQUEST_ROOT_SELECTOR);\n registerRequestRuntime(AlpineInstance);\n registerNavigationRuntime(AlpineInstance);\n\n AlpineInstance.directive('ui-request', (el, {expression, modifiers}, utilities) => {\n const directive = {expression};\n\n if (el instanceof HTMLFormElement) {\n registerFormDirective(AlpineInstance, el, directive, utilities, {\n navigate: modifiers.includes('navigate'),\n });\n return;\n }\n\n if (el instanceof HTMLAnchorElement) {\n registerAnchorDirective(AlpineInstance, el, directive, utilities, {\n navigate: modifiers.includes('navigate'),\n });\n return;\n }\n\n warn('x-ui-request: directive only supports forms and anchors', el);\n });\n};\n\nexport {registerRequestDirective};\n","import type Alpine from 'alpinejs';\nimport {\n findAlpineMachineOwner,\n type AlpineMachineOwner,\n} from '@client/runtime/alpine-machine';\nimport type {TransitionContext} from '@client/runtime/transition-coordinator';\nimport {warn} from '@client/utils';\n\ntype TransitionEvaluator = ReturnType<Alpine.DirectiveUtilities['evaluateLater']>;\n\nconst evaluateTransition = <TProps, TData, TElement>(\n evaluator: TransitionEvaluator,\n transition: TransitionContext<TProps, TData, TElement>,\n): unknown => {\n let synchronous = true;\n let completedSynchronously = false;\n let result: unknown;\n let resolve!: (value: unknown) => void;\n const pending = new Promise<unknown>((resolvePromise) => {\n resolve = resolvePromise;\n });\n\n evaluator((value) => {\n if (synchronous) {\n completedSynchronously = true;\n result = value;\n return;\n }\n resolve(value);\n }, {scope: {$transition: transition}});\n synchronous = false;\n\n return completedSynchronously ? result : pending;\n};\n\nconst registerTransitionDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.directive(\n 'ui-transition',\n AlpineInstance.skipDuringClone((el, {value: name, expression}, utilities) => {\n if (!name) {\n warn('x-ui-transition requires a transition name', el);\n return;\n }\n\n const owner = findAlpineMachineOwner(AlpineInstance, el);\n if (!owner) {\n warn(`x-ui-transition:${name} requires an owning Trellis machine`, el);\n return;\n }\n\n const evaluator = expression?.trim() ? utilities.evaluateLater(expression) : null;\n const unregister = owner.onTransition(name, (transition) => (\n evaluator ? evaluateTransition(evaluator, transition) : undefined\n ), el as Parameters<AlpineMachineOwner['onTransition']>[2]);\n utilities.cleanup(unregister);\n }),\n );\n};\n\nexport {registerTransitionDirective};\n","import type Alpine from 'alpinejs';\n\n// This engine adapts behavior and matching ideas from Alpine Morph, Morphlex, Idiomorph, and Datastar.\n// See THIRD_PARTY_NOTICES.md for provenance and license notices.\n\ntype Skip = () => void;\ntype ChildrenOnly = () => void;\ntype SkipChildren = () => void;\ntype SkipUntil = (predicate: (node: Node) => boolean) => void;\ntype UpdatingHook = (\n from: Node,\n to: Node,\n childrenOnly: ChildrenOnly,\n skip: Skip,\n skipChildren: SkipChildren,\n skipUntil: SkipUntil,\n) => void;\ntype SkippableNodeHook = (node: Node, skip: Skip) => void;\ntype PruningPolicy = 'after-root-hook' | 'before-descendant-hook';\n\ntype MorphOptions = {\n key?: (element: Element) => unknown;\n lookahead?: boolean;\n updating?: UpdatingHook;\n updated?: (from: Node, to: Node) => void;\n removing?: SkippableNodeHook;\n removed?: (node: Node) => void;\n adding?: SkippableNodeHook;\n added?: (node: Node) => void;\n};\n\ntype MorphAlpine = Omit<Alpine.Alpine, 'cloneNode' | 'closestDataStack'> & {\n cloneNode(from: Element, to: Element): void;\n closestDataStack(node: Node): unknown;\n morph(from: Element, toHtml: Element | string, options?: MorphOptions): Element;\n morphBetween(\n startMarker: Comment,\n endMarker: Comment,\n toHtml: Element | string,\n options?: MorphOptions,\n ): void;\n};\n\ntype AlpineNode = Node & {\n _x_bindings?: {id?: string};\n _x_dataStack?: unknown;\n _x_currentIfEl?: AlpineNode;\n _x_lastRenderedEl?: AlpineNode;\n _x_lookup?: Map<unknown, AlpineNode>;\n _x_teleport?: AlpineNode;\n _x_transitioning?: unknown;\n _x_isShown?: boolean;\n};\n\ntype Parent = Node & {\n children: Iterable<Element>;\n firstChild: ChildNode | null;\n insertBefore(node: Node, before: Node | null): Node;\n};\n\nconst noop = (): void => {};\nlet alpineInstance: MorphAlpine | undefined;\n\nclass Block {\n constructor(\n readonly startComment: Comment,\n readonly endComment: Comment,\n ) {}\n\n get children(): Element[] {\n const children: Element[] = [];\n let node = this.startComment.nextSibling;\n while (node && node !== this.endComment) {\n if (node instanceof Element) children.push(node);\n node = node.nextSibling;\n }\n return children;\n }\n\n get firstChild(): ChildNode | null {\n const first = this.startComment.nextSibling;\n return first === this.endComment ? null : first;\n }\n\n appendChild(node: Node): Node {\n this.endComment.before(node);\n return node;\n }\n\n insertBefore(node: Node, reference: Node | null): Node {\n ((reference ?? this.endComment) as ChildNode).before(node);\n return node;\n }\n\n nextNode(reference: Node): ChildNode | null {\n const next = reference.nextSibling;\n return next === this.endComment ? null : next;\n }\n}\n\nconst nextSibling = (parent: Parent | Block, node: Node): ChildNode | null => (\n parent instanceof Block ? parent.nextNode(node) : node.nextSibling\n);\n\nconst createElement = (html: string): Element => {\n const template = document.createElement('template');\n template.innerHTML = html;\n const element = template.content.firstElementChild;\n if (!element) throw new Error('Morph HTML must contain a root element.');\n return element;\n};\n\nconst setIncomingAttribute = (target: Element, incoming: Attr): void => {\n if (incoming.namespaceURI) {\n target.setAttributeNodeNS(incoming.cloneNode() as Attr);\n } else if (incoming.name.includes('@')) {\n target.setAttributeNode(incoming.cloneNode() as Attr);\n } else {\n target.setAttribute(incoming.name, incoming.value);\n }\n};\n\nconst shouldSkip = (hook: SkippableNodeHook, node: Node): boolean => {\n let skip = false;\n hook(node, () => { skip = true; });\n return skip;\n};\n\nconst isConditionalStart = (node: Node | null): boolean => (\n node?.nodeType === Node.COMMENT_NODE && node.textContent === '[if BLOCK]><![endif]'\n);\n\nconst isConditionalEnd = (node: Node | null): boolean => (\n node?.nodeType === Node.COMMENT_NODE && node.textContent === '[if ENDBLOCK]><![endif]'\n);\n\nconst conditionalEnd = (parent: Parent | Block, start: Node): Comment => {\n let depth = 0;\n let node: Node | null = start;\n while ((node = nextSibling(parent, node))) {\n if (isConditionalStart(node)) depth += 1;\n else if (isConditionalEnd(node) && depth > 0) depth -= 1;\n else if (isConditionalEnd(node)) return node as Comment;\n }\n throw new Error('Unclosed conditional morph block.');\n};\n\ntype OwnedRange = {\n start: AlpineNode;\n end: AlpineNode;\n};\n\nconst ownedRange = (start: AlpineNode): OwnedRange => {\n let end = start;\n if (start._x_lastRenderedEl) end = start._x_lastRenderedEl;\n else if (start._x_currentIfEl) end = ownedRange(start._x_currentIfEl).end;\n else if (start._x_lookup?.size) {\n const owned = new Set(start._x_lookup.values());\n let sibling = start.nextSibling as AlpineNode | null;\n while (sibling && owned.has(sibling)) {\n end = ownedRange(sibling).end;\n sibling = end.nextSibling as AlpineNode | null;\n }\n }\n return {start, end};\n};\n\nconst afterOwnedRange = (parent: Parent | Block, range: OwnedRange): AlpineNode | null => (\n nextSibling(parent, range.end) as AlpineNode | null\n);\n\nconst isServerEqual = (from: AlpineNode, to: AlpineNode): boolean => {\n if (from.nodeType !== to.nodeType || from.nodeName !== to.nodeName) return false;\n if (from.nodeType === Node.TEXT_NODE || from.nodeType === Node.COMMENT_NODE) {\n return from.nodeValue === to.nodeValue;\n }\n if (from instanceof HTMLTemplateElement && to instanceof HTMLTemplateElement) {\n const fromTemplate = from as HTMLTemplateElement & AlpineNode;\n const toTemplate = to as HTMLTemplateElement & AlpineNode;\n if (fromTemplate._x_teleport) {\n const incomingTeleport = toTemplate._x_teleport ?? to.content.firstElementChild;\n return Boolean(incomingTeleport && isServerEqual(fromTemplate._x_teleport, incomingTeleport as AlpineNode));\n }\n return from.isEqualNode(to);\n }\n if (from instanceof Element && to instanceof Element) {\n if (from.attributes.length !== to.attributes.length) return false;\n for (const {name, value} of from.attributes) {\n if (to.getAttribute(name) !== value) return false;\n }\n }\n\n let fromChild = from.firstChild as AlpineNode | null;\n let toChild = to.firstChild as AlpineNode | null;\n while (fromChild && toChild) {\n if (!isServerEqual(fromChild, toChild)) return false;\n fromChild = ownedRange(fromChild).end.nextSibling as AlpineNode | null;\n toChild = toChild.nextSibling as AlpineNode | null;\n }\n return fromChild === null && toChild === null;\n};\n\nconst moveOwnedRangeBefore = (parent: Parent | Block, range: OwnedRange, before: Node | null): void => {\n if (range.start === before || afterOwnedRange(parent, range) === before) return;\n let node: Node | null = range.start;\n while (node) {\n const next: ChildNode | null = node.nextSibling;\n parent.insertBefore(node, before);\n if (node === range.end) break;\n node = next;\n }\n};\n\nconst seedDynamicId = (to: AlpineNode, from: AlpineNode | null): void => {\n const id = from?._x_bindings?.id;\n if (!id || !(to instanceof Element)) return;\n to.setAttribute('id', id);\n (to as HTMLElement).id = id;\n};\n\nconst buildDescendantCorrespondence = (\n fromElements: Element[],\n toElements: Element[],\n getKey: (node: Node | null) => unknown,\n): WeakMap<Node, symbol> => {\n const correspondence = new WeakMap<Node, symbol>();\n const fromDirectKeys = fromElements.map(getKey).filter(Boolean);\n const toDirectKeys = toElements.map(getKey).filter(Boolean);\n const directKeysReordered = fromDirectKeys.length >= 2\n && fromDirectKeys.length === toDirectKeys.length\n && new Set(fromDirectKeys).size === fromDirectKeys.length\n && fromDirectKeys.some((key, index) => key !== toDirectKeys[index])\n && fromDirectKeys.every((key) => toDirectKeys.includes(key));\n if (!directKeysReordered) return correspondence;\n\n const idCounts = (elements: Element[]): Map<string, number> => {\n const counts = new Map<string, number>();\n const count = (element: Element): void => {\n if (element.id) counts.set(element.id, (counts.get(element.id) ?? 0) + 1);\n };\n for (const element of elements) {\n count(element);\n element.querySelectorAll('[id]').forEach(count);\n }\n return counts;\n };\n const fromIdCounts = idCounts(fromElements);\n const toIdCounts = idCounts(toElements);\n const tokens = new Map<string, symbol>();\n for (const [id, count] of fromIdCounts) {\n if (count === 1 && toIdCounts.get(id) === 1) tokens.set(id, Symbol(id));\n }\n\n const indexDescendant = (element: Element): void => {\n if (getKey(element)) return;\n for (const descendant of element.querySelectorAll('[id]')) {\n const token = tokens.get(descendant.id);\n if (!token) continue;\n correspondence.set(element, token);\n return;\n }\n };\n fromElements.forEach(indexDescendant);\n toElements.forEach(indexDescendant);\n return correspondence;\n};\n\nconst createContext = (options: MorphOptions = {}) => {\n const context = {\n key: options.key ?? ((element: Element) => element.getAttribute('key')),\n lookahead: options.lookahead ?? false,\n updating: options.updating ?? noop,\n updated: options.updated ?? noop,\n removing: options.removing ?? noop,\n removed: options.removed ?? noop,\n adding: options.adding ?? noop,\n added: options.added ?? noop,\n skipUntilCondition: null as ((node: Node) => boolean) | null,\n };\n\n const getKey = (node: Node | null): unknown => (\n node instanceof Element ? context.key(node) : null\n );\n\n const requiresReplacement = (from: Node, to: Node): boolean => (\n from.nodeType !== to.nodeType\n || from.nodeName !== to.nodeName\n || getKey(from) !== getKey(to)\n || (from instanceof Element\n && to instanceof Element\n && from.getAttribute('x-data') !== to.getAttribute('x-data'))\n );\n\n const insertNodeBefore = (\n parent: Parent | Block,\n source: Node,\n before: Node | null,\n ): {inserted: false; node: null} | {inserted: true; node: AlpineNode} => {\n if (shouldSkip(context.adding, source)) return {inserted: false, node: null};\n const clone = source.cloneNode(true);\n parent.insertBefore(clone, before);\n context.added(clone);\n return {inserted: true, node: clone as AlpineNode};\n };\n\n const removeNode = (node: Node): boolean => {\n if (shouldSkip(context.removing, node)) return false;\n node.parentNode?.removeChild(node);\n context.removed(node);\n return true;\n };\n\n const removeOwnedRange = (range: OwnedRange): boolean => {\n if (shouldSkip(context.removing, range.start)) return false;\n range.start.parentNode?.removeChild(range.start);\n context.removed(range.start);\n return true;\n };\n\n const replaceNode = (from: Node, to: Node): boolean => {\n if (shouldSkip(context.removing, from)) return false;\n const clone = to.cloneNode(true);\n if (shouldSkip(context.adding, clone)) return false;\n from.parentNode?.replaceChild(clone, from);\n context.removed(from);\n context.added(clone);\n return true;\n };\n\n const patchAttributes = (from: AlpineNode & Element, to: Element): boolean => {\n if (from._x_transitioning) return false;\n if ((from._x_isShown && !(to as AlpineNode)._x_isShown)\n || (!from._x_isShown && (to as AlpineNode)._x_isShown)) return false;\n\n let changed = false;\n const existing = Array.from(from.attributes);\n for (let index = existing.length - 1; index >= 0; index -= 1) {\n const name = existing[index]!.name;\n if (to.hasAttribute(name)) continue;\n if (name === 'open' && from instanceof HTMLDialogElement && from.open) from.close();\n else from.removeAttribute(name);\n changed = true;\n }\n const incoming = Array.from(to.attributes);\n for (let index = incoming.length - 1; index >= 0; index -= 1) {\n const attribute = incoming[index]!;\n const {name, value} = attribute;\n if (from.getAttribute(name) === value) continue;\n setIncomingAttribute(from, attribute);\n changed = true;\n }\n return changed;\n };\n\n let patchChildren: (from: Parent | Block, to: Parent | Block) => boolean;\n\n const patchNode = (from: AlpineNode, to: AlpineNode, pruning: PruningPolicy): boolean => {\n if (from instanceof Element && from.hasAttribute('data-ui-ignore-morph')) return false;\n if (requiresReplacement(from, to)) return replaceNode(from, to);\n if (pruning === 'before-descendant-hook'\n && from.nodeType !== Node.COMMENT_NODE\n && isServerEqual(from, to)) return false;\n\n let childrenOnly = false;\n let skipChildren = false;\n let skip = false;\n const skipUntil = (predicate: (node: Node) => boolean): void => {\n context.skipUntilCondition = predicate;\n };\n context.updating(\n from,\n to,\n () => { childrenOnly = true; },\n () => { skip = true; },\n () => { skipChildren = true; },\n skipUntil,\n );\n if (skip) return false;\n\n // Descendants that are server-identical are opaque. The root is checked only\n // after its hook has had the opportunity to mutate the incoming tree.\n if (isServerEqual(from, to)) return false;\n\n let changed = false;\n if (from.nodeType === Node.ELEMENT_NODE && alpineInstance) {\n alpineInstance.cloneNode(from as Element, to as Element);\n if (from._x_teleport && to._x_teleport) {\n changed = patch(from._x_teleport, to._x_teleport) || changed;\n }\n }\n\n if (to.nodeType === Node.TEXT_NODE || to.nodeType === Node.COMMENT_NODE) {\n if (from.nodeValue === to.nodeValue) return false;\n from.nodeValue = to.nodeValue;\n context.updated(from, to);\n return true;\n }\n\n if (!childrenOnly) changed = patchAttributes(from as AlpineNode & Element, to as Element) || changed;\n if (!skipChildren) changed = patchChildren(from as unknown as Parent, to as unknown as Parent) || changed;\n if (changed) context.updated(from, to);\n return changed;\n };\n\n const patch = (from: AlpineNode, to: AlpineNode): boolean => (\n patchNode(from, to, 'before-descendant-hook')\n );\n const patchRoot = (from: AlpineNode, to: AlpineNode): boolean => (\n patchNode(from, to, 'after-root-hook')\n );\n\n patchChildren = (from: Parent | Block, to: Parent | Block): boolean => {\n const fromElements = Array.from(from.children);\n const toElements = Array.from(to.children);\n const correspondence = buildDescendantCorrespondence(fromElements, toElements, getKey);\n\n const childKey = (node: Node | null): unknown => (\n node ? getKey(node) || correspondence.get(node) : null\n );\n const keyed = new Map<unknown, AlpineNode>();\n for (const element of fromElements) {\n const key = childKey(element);\n if (key) keyed.set(key, element as AlpineNode);\n }\n\n let changed = false;\n let currentFrom = from.firstChild as AlpineNode | null;\n let currentTo = to.firstChild as AlpineNode | null;\n\n incoming: while (currentTo) {\n seedDynamicId(currentTo, currentFrom);\n\n if (context.skipUntilCondition) {\n const fromDone = !currentFrom || context.skipUntilCondition(currentFrom);\n const toDone = context.skipUntilCondition(currentTo);\n if (fromDone && toDone) context.skipUntilCondition = null;\n else {\n if (!fromDone && currentFrom) currentFrom = afterOwnedRange(from, ownedRange(currentFrom));\n if (!toDone) currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n }\n\n if (!currentFrom) {\n const addition = insertNodeBefore(from, currentTo, null);\n changed = addition.inserted || changed;\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n\n if (isConditionalStart(currentFrom) && isConditionalStart(currentTo)) {\n const fromEnd = conditionalEnd(from, currentFrom);\n const toEnd = conditionalEnd(to, currentTo);\n changed = patchChildren(new Block(currentFrom as Comment, fromEnd), new Block(currentTo as Comment, toEnd)) || changed;\n currentFrom = nextSibling(from, fromEnd) as AlpineNode | null;\n currentTo = nextSibling(to, toEnd) as AlpineNode | null;\n continue;\n } else {\n if (context.lookahead\n && currentFrom instanceof Element\n && !currentFrom.isEqualNode(currentTo)) {\n let lookahead = nextSibling(to, currentTo) as AlpineNode | null;\n while (lookahead) {\n if (lookahead instanceof Element && currentFrom.isEqualNode(lookahead)) {\n const addition = insertNodeBefore(from, currentTo, currentFrom);\n if (!addition.inserted) {\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue incoming;\n }\n currentFrom = addition.node;\n changed = true;\n break;\n }\n lookahead = nextSibling(to, lookahead) as AlpineNode | null;\n }\n }\n\n const toKey = childKey(currentTo);\n const fromKey = childKey(currentFrom);\n if (toKey !== fromKey) {\n const keyedMatch = toKey ? keyed.get(toKey) : undefined;\n if (keyedMatch) {\n moveOwnedRangeBefore(from, ownedRange(keyedMatch), currentFrom);\n currentFrom = keyedMatch;\n changed = true;\n } else if (toKey || fromKey) {\n const addition = insertNodeBefore(from, currentTo, currentFrom);\n if (!addition.inserted) {\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n currentFrom = addition.node;\n changed = true;\n }\n }\n\n const afterFrom = afterOwnedRange(from, ownedRange(currentFrom));\n changed = patch(currentFrom, currentTo) || changed;\n currentFrom = afterFrom;\n }\n\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n }\n\n while (currentFrom) {\n const range = ownedRange(currentFrom);\n const after = afterOwnedRange(from, range);\n changed = (range.end === range.start ? removeNode(currentFrom) : removeOwnedRange(range)) || changed;\n currentFrom = after;\n }\n return changed;\n };\n\n return {patchChildren, patchRoot};\n};\n\nconst morph = (from: Element, toHtml: Element | string, options: MorphOptions = {}): Element => {\n const to = (typeof toHtml === 'string' ? createElement(toHtml) : toHtml) as AlpineNode & Element;\n const source = from as AlpineNode & Element;\n if (alpineInstance?.closestDataStack && !source._x_dataStack) {\n to._x_dataStack = alpineInstance.closestDataStack(source);\n if (to._x_dataStack) alpineInstance.cloneNode(source, to);\n }\n createContext(options).patchRoot(source, to);\n return from;\n};\n\nconst morphBetween = (\n startMarker: Comment,\n endMarker: Comment,\n toHtml: Element | string,\n options: MorphOptions = {},\n): void => {\n const fromContainer = startMarker.parentNode as AlpineNode & Parent;\n const toContainer = typeof toHtml === 'string'\n ? (() => {\n const container = document.createElement('div');\n container.insertAdjacentHTML('beforeend', toHtml);\n return container;\n })()\n : toHtml;\n const toStart = document.createComment('[morph-start]');\n const toEnd = document.createComment('[morph-end]');\n toContainer.insertBefore(toStart, toContainer.firstChild);\n toContainer.appendChild(toEnd);\n if (alpineInstance?.closestDataStack) {\n (toContainer as AlpineNode)._x_dataStack = alpineInstance.closestDataStack(fromContainer);\n if ((toContainer as AlpineNode)._x_dataStack) alpineInstance.cloneNode(fromContainer as unknown as Element, toContainer);\n }\n createContext(options).patchChildren(\n new Block(startMarker, endMarker),\n new Block(toStart, toEnd),\n );\n};\n\nconst trellisMorph = (AlpineInstance: Alpine.Alpine): void => {\n const instance = AlpineInstance as MorphAlpine;\n alpineInstance = instance;\n instance.morph = morph;\n instance.morphBetween = morphBetween;\n};\n\nexport {morph, morphBetween};\nexport default trellisMorph;\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerLayoutDirective} from './directives/layout';\nimport {registerRequestDirective} from './directives/request';\nimport {registerTransitionDirective} from './directives/transition';\nimport morph from './runtime/morph-engine';\nimport {setPropReactivity} from './runtime/codecs';\nimport {registerConfirm} from './runtime/confirm';\nimport {registerStream} from './runtime/engine/stream';\nimport {registerThemeStore} from './runtime/theme';\nimport {registerUiMagic, ui} from './runtime/ui';\n\ntype CoreRuntimePlugin = (AlpineInstance: AlpineType) => void;\nconst registered = new WeakSet<AlpineType>();\n\nconst coreRuntime: CoreRuntimePlugin = (AlpineInstance): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n setPropReactivity(AlpineInstance.reactive);\n AlpineInstance.plugin(morph);\n registerLayoutDirective(AlpineInstance);\n registerUiMagic(AlpineInstance);\n registerTransitionDirective(AlpineInstance);\n registerThemeStore(AlpineInstance);\n registerConfirm();\n registerRequestDirective(AlpineInstance);\n registerStream(AlpineInstance);\n};\n\nexport {coreRuntime, ui};\nexport default coreRuntime;\nexport type {CoreRuntimePlugin};\nexport {\n bool,\n createAlpineMachine,\n createMachine,\n decodeProps,\n defineAlpineData,\n defineManifest,\n defineSchemaManifest,\n defineProps,\n defineStyles,\n json,\n mergeBindings,\n number,\n oneOf,\n propsFromSchema,\n resolveStyle,\n string,\n createTransitionCoordinator,\n defineHook,\n} from './runtime';\nexport type {\n AlpineMachine,\n AlpineMachineOwner,\n AlpinePropsChangedEvent,\n AlpineDataFactory,\n AlpineDataRegistrar,\n CodecFn,\n ComponentManifest,\n CreateAlpineMachineOptions,\n DecodePropsOptions,\n Machine,\n MachineConfig,\n MachineEffect,\n MachineEffectList,\n MachineEffectRef,\n MachineEntry,\n MachineEvent,\n MachineEventObject,\n MachineGuard,\n MachineOptions,\n MachineReducer,\n MachineReducerList,\n MachineReducerRef,\n MachineScope,\n MachineSnapshot,\n MachineStateConfig,\n MachineStateValue,\n MachineTransition,\n MachineTransitionDefinition,\n MachineUpdate,\n DefineManifestOptions,\n DefineSchemaManifestOptions,\n DefineStylesOptions,\n ManifestPart,\n ManifestProp,\n ManifestPropDetails,\n ManifestToken,\n ManualComponentManifest,\n MachineFactoryScope,\n BindingInput,\n PropState,\n PropsFromSchemaOptions,\n MergeBindingsOptions,\n ResolveStyleOptions,\n SchemaPropDetails,\n SchemaComponentManifest,\n SchemaToProps,\n StyleDefinition,\n StylePart,\n StyleProps,\n TrellisAlpineComponent,\n AnyTransitionHook,\n TransitionCallback,\n TransitionContext,\n TransitionCoordinator,\n TransitionCoordinatorOptions,\n TransitionEventCreator,\n TransitionForHook,\n TransitionHookDefinition,\n UiGetOptions,\n UiRequestOptions,\n UiRuntime,\n} from './runtime';\nexport {registerTransitionDirective} from './directives/transition';\n"],"mappings":"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"}
1
+ {"version":3,"file":"core-BxNepYBE.js","names":[],"sources":["../../../../../../../../client/src/runtime/confirm.ts","../../../../../../../../client/src/runtime/manifest.ts","../../../../../../../../client/src/runtime/theme.ts","../../../../../../../../client/src/directives/layout.ts","../../../../../../../../client/src/directives/request.ts","../../../../../../../../client/src/directives/transition.ts","../../../../../../../../client/src/runtime/morph-engine.ts","../../../../../../../../client/src/core.ts"],"sourcesContent":["type SubmitterElement = HTMLButtonElement | HTMLInputElement;\n\ntype ConfirmProceed = () => void;\ntype ConfirmCancel = () => void;\n\ntype ConfirmEventDetail = {\n form: HTMLFormElement;\n message: string;\n submitter: SubmitterElement | null;\n triggeringEvent: SubmitEvent;\n proceed: ConfirmProceed;\n cancel: ConfirmCancel;\n};\n\ntype ConfirmRuntimeOptions = {\n root?: Document;\n};\n\nconst DEFAULT_CONFIRM_MESSAGE = 'Are you sure?';\n\nlet removeSubmitListener: (() => void) | null = null;\nconst bypassedForms = new WeakSet<HTMLFormElement>();\n\nconst isSubmitterElement = (value: unknown): value is SubmitterElement => (\n value instanceof HTMLButtonElement || value instanceof HTMLInputElement\n);\n\nconst confirmMessageFor = ({form, submitter}: {\n form: HTMLFormElement;\n submitter: SubmitterElement | null;\n}): string | null => {\n const submitterMessage = submitter?.dataset.uiConfirm;\n if (submitterMessage !== undefined) return submitterMessage || DEFAULT_CONFIRM_MESSAGE;\n\n const formMessage = form.dataset.uiConfirm;\n if (formMessage !== undefined) return formMessage || DEFAULT_CONFIRM_MESSAGE;\n\n return null;\n};\n\nconst queueConfirmedSubmit = ({form, submitter}: {\n form: HTMLFormElement;\n submitter: SubmitterElement | null;\n}): void => {\n // Chromium can retain the form's submission guard through the current microtask checkpoint.\n window.setTimeout(() => {\n if (!form.isConnected || (submitter && submitter.form !== form)) return;\n\n bypassedForms.add(form);\n try {\n form.requestSubmit(submitter ?? undefined);\n } finally {\n bypassedForms.delete(form);\n }\n }, 0);\n};\n\nconst handleSubmit = (event: SubmitEvent): void => {\n const form = event.target;\n if (!(form instanceof HTMLFormElement)) return;\n\n if (bypassedForms.has(form)) {\n bypassedForms.delete(form);\n return;\n }\n\n const submitter = isSubmitterElement(event.submitter) ? event.submitter : null;\n const message = confirmMessageFor({form, submitter});\n if (message === null) return;\n\n event.preventDefault();\n\n let settled = false;\n const proceed = (): void => {\n if (settled) return;\n settled = true;\n queueConfirmedSubmit({form, submitter});\n };\n const cancel = (): void => {\n settled = true;\n };\n const confirmEvent = new CustomEvent<ConfirmEventDetail>('ui:confirm', {\n bubbles: true,\n cancelable: true,\n detail: {\n form,\n message,\n submitter,\n triggeringEvent: event,\n proceed,\n cancel,\n },\n });\n\n form.dispatchEvent(confirmEvent);\n if (confirmEvent.defaultPrevented) return;\n\n if (window.confirm(message)) {\n proceed();\n } else {\n cancel();\n }\n};\n\nconst registerConfirm = ({root = document}: ConfirmRuntimeOptions = {}): void => {\n if (removeSubmitListener) return;\n\n root.addEventListener('submit', handleSubmit as EventListener, {capture: true});\n removeSubmitListener = (): void => root.removeEventListener('submit', handleSubmit as EventListener, {capture: true});\n};\n\nconst unregisterConfirm = (): void => {\n removeSubmitListener?.();\n removeSubmitListener = null;\n};\n\nexport {registerConfirm, unregisterConfirm};\nexport type {ConfirmCancel, ConfirmEventDetail, ConfirmProceed, ConfirmRuntimeOptions};\n","import type {CodecFn} from './codecs';\n\ntype PropKind = 'string' | 'number' | 'boolean' | 'enum' | 'json';\n\ntype ManifestProp = {\n type: PropKind;\n default?: unknown;\n values?: readonly string[];\n description?: string;\n initialOnly?: boolean;\n};\n\ntype ManifestPart = {\n selector: string;\n description: string;\n};\n\ntype ManifestToken = {\n name: string;\n description: string;\n};\n\ntype ManifestAcceptedEvent = {\n description: string;\n detail?: Record<string, string>;\n};\n\ntype ComponentManifestMeta = {\n group?: string;\n};\n\ntype ComponentManifestFields = {\n name: string;\n title: string;\n description: string;\n meta?: ComponentManifestMeta;\n slots?: Record<string, string>;\n events?: Record<string, string>;\n acceptedEvents?: Record<string, ManifestAcceptedEvent>;\n parts?: Record<string, ManifestPart>;\n tokens?: readonly ManifestToken[];\n};\n\ntype ManualComponentManifest = ComponentManifestFields & {\n props?: Record<string, ManifestProp>;\n propSchema?: never;\n};\n\ntype SchemaComponentManifest = ComponentManifestFields & {\n props: Record<string, ManifestProp>;\n propSchema: Record<string, CodecFn<unknown>>;\n};\n\ntype ComponentManifest = ManualComponentManifest | SchemaComponentManifest;\n\ntype ManifestPropDetails = Pick<ManifestProp, 'description'> & {\n name?: string;\n initialOnly?: boolean;\n};\n\ntype SchemaPropDetails<T extends Record<string, CodecFn<unknown>>> = {\n [K in keyof T]?: ManifestPropDetails;\n};\n\ntype DefineManifestOptions<T extends ManualComponentManifest> = {\n manifest: T & {propSchema?: never};\n};\n\ntype PropsFromSchemaOptions<T extends Record<string, CodecFn<unknown>>> = {\n schema: T;\n details: SchemaPropDetails<T>;\n};\n\ntype DefineSchemaManifestOptions<\n TSchema extends Record<string, CodecFn<unknown>>,\n TManifest extends ComponentManifestFields,\n> = {\n schema: TSchema;\n details: SchemaPropDetails<TSchema>;\n templateProps?: Record<string, ManifestProp>;\n templatePropsPosition?: 'before' | 'after';\n manifest: TManifest & {props?: never; propSchema?: never};\n};\n\nconst toSnake = (value: string): string => value.replace(/([A-Z])/g, '_$1').toLowerCase();\n\nconst defineManifest = <const T extends ManualComponentManifest>({manifest}: DefineManifestOptions<T>): Readonly<T> => {\n if ('propSchema' in manifest) throw new Error('Manual manifests cannot supply propSchema.');\n return Object.freeze(manifest);\n};\n\nconst propsFromSchema = <const T extends Record<string, CodecFn<unknown>>>({\n schema,\n details,\n}: PropsFromSchemaOptions<T>): Record<string, ManifestProp> => {\n const props: Record<string, ManifestProp> = {};\n\n Object.entries(schema).forEach(([schemaKey, codec]) => {\n const propDetails = details[schemaKey as keyof T] ?? {};\n const meta = codec.meta;\n const propName = propDetails.name ?? toSnake(schemaKey);\n if (propName in props) {\n throw new Error(`Schema property ${schemaKey} resolves to duplicate manifest property ${propName}.`);\n }\n const prop: ManifestProp = {\n type: meta.type,\n default: meta.default,\n };\n\n if (meta.values) prop.values = meta.values;\n if (propDetails.description) prop.description = propDetails.description;\n if (propDetails.initialOnly) prop.initialOnly = true;\n\n props[propName] = prop;\n });\n\n return props;\n};\n\nconst defineSchemaManifest = <\n const TSchema extends Record<string, CodecFn<unknown>>,\n const TManifest extends ComponentManifestFields,\n>({\n schema,\n details,\n templateProps = {},\n templatePropsPosition = 'after',\n manifest,\n}: DefineSchemaManifestOptions<TSchema, TManifest>): Readonly<TManifest & {\n props: Record<string, ManifestProp>;\n propSchema: TSchema;\n}> => {\n const schemaProps = propsFromSchema({schema, details});\n Object.keys(templateProps).forEach((propName) => {\n if (propName in schemaProps) {\n throw new Error(`Template prop ${propName} collides with schema property ${propName}.`);\n }\n });\n\n const props = templatePropsPosition === 'before'\n ? {...templateProps, ...schemaProps}\n : {...schemaProps, ...templateProps};\n const {name, title, description, meta, ...rest} = manifest;\n const result = {\n name,\n title,\n description,\n ...(meta ? {meta} : {}),\n propSchema: schema,\n props,\n ...rest,\n } as TManifest & {props: Record<string, ManifestProp>; propSchema: TSchema};\n\n return Object.freeze(result);\n};\n\nexport {defineManifest, defineSchemaManifest, propsFromSchema};\nexport type {\n ComponentManifest,\n DefineManifestOptions,\n DefineSchemaManifestOptions,\n ManualComponentManifest,\n ManifestPart,\n ManifestProp,\n ManifestPropDetails,\n ManifestAcceptedEvent,\n ComponentManifestMeta,\n ManifestToken,\n PropsFromSchemaOptions,\n PropKind,\n SchemaPropDetails,\n SchemaComponentManifest,\n};\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nconst THEME_VALUES = ['light', 'dark', 'system'] as const;\ntype ThemeMode = typeof THEME_VALUES[number];\ntype ResolvedThemeMode = Exclude<ThemeMode, 'system'>;\n\ntype ThemeChangeDetail = {\n mode: ThemeMode;\n resolved: ResolvedThemeMode;\n dark: boolean;\n on: boolean;\n};\n\ntype ThemeStore = {\n mode: ThemeMode;\n resolved: ResolvedThemeMode;\n readonly dark: boolean;\n readonly on: boolean;\n set: (mode: ThemeMode) => void;\n toggle: () => void;\n};\n\nconst isThemeMode = (value: unknown): value is ThemeMode => (\n typeof value === 'string' && THEME_VALUES.includes(value as ThemeMode)\n);\n\nconst normalizeThemeMode = (value: unknown): ThemeMode => (\n isThemeMode(value) ? value : 'system'\n);\n\nconst storageKey = (): string => (\n document.documentElement.dataset.themeStorageKey || 'trellis-ui-theme'\n);\n\nconst fallbackMode = (): ThemeMode => normalizeThemeMode(document.documentElement.dataset.theme);\n\nconst storedMode = (): ThemeMode => {\n try {\n return normalizeThemeMode(window.localStorage.getItem(storageKey()) || fallbackMode());\n } catch {\n return fallbackMode();\n }\n};\n\nconst persistMode = (mode: ThemeMode): void => {\n try {\n window.localStorage.setItem(storageKey(), mode);\n } catch {\n // Keep theme controls usable in private or restricted browsing contexts.\n }\n};\n\nconst prefersDark = (): boolean => (\n window.matchMedia('(prefers-color-scheme: dark)').matches\n);\n\nconst resolveDark = (mode: ThemeMode): boolean => (\n mode === 'dark' || (mode === 'system' && prefersDark())\n);\n\nconst applyThemeMode = (mode: ThemeMode): ThemeChangeDetail => {\n const dark = resolveDark(mode);\n const resolved: ResolvedThemeMode = dark ? 'dark' : 'light';\n const root = document.documentElement;\n\n root.classList.toggle('dark', dark);\n root.dataset.theme = mode;\n root.dataset.resolvedTheme = resolved;\n root.dispatchEvent(new CustomEvent<ThemeChangeDetail>('ui:theme-change', {\n detail: {mode, resolved, dark, on: dark},\n bubbles: true,\n }));\n\n return {mode, resolved, dark, on: dark};\n};\n\nconst createThemeStore = (): ThemeStore => {\n const initial = applyThemeMode(storedMode());\n\n return {\n mode: initial.mode,\n resolved: initial.resolved,\n get dark(): boolean {\n return this.resolved === 'dark';\n },\n get on(): boolean {\n return this.dark;\n },\n set(mode: ThemeMode): void {\n const nextMode = normalizeThemeMode(mode);\n persistMode(nextMode);\n const next = applyThemeMode(nextMode);\n this.mode = next.mode;\n this.resolved = next.resolved;\n },\n toggle(): void {\n this.set(this.resolved === 'dark' ? 'light' : 'dark');\n },\n };\n};\n\nconst registerThemeStore = (AlpineInstance: AlpineType): void => {\n if (typeof AlpineInstance.store !== 'function') return;\n\n const existingStore = AlpineInstance.store('theme') as ThemeStore | undefined;\n const store = existingStore ?? createThemeStore();\n\n AlpineInstance.store('theme', store);\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n if (store.mode !== 'system') return;\n const next = applyThemeMode('system');\n store.resolved = next.resolved;\n });\n};\n\nexport {\n applyThemeMode,\n createThemeStore,\n registerThemeStore,\n type ResolvedThemeMode,\n type ThemeChangeDetail,\n type ThemeStore,\n type ThemeMode,\n};\n","import type Alpine from 'alpinejs';\nimport {\n markLayoutParticipant,\n MOTION_KEY_ATTR,\n MOTION_LAYOUT_ATTR,\n} from '@client/runtime/layout-participant';\nimport {declareMorphAttributes} from '@client/runtime/morph';\n\ntype LayoutDirectiveValue = string | {\n id?: string;\n key?: string;\n};\n\nconst readExpression = <T>(expression: string | undefined, utilities: Alpine.DirectiveUtilities): T | undefined => {\n if (!expression || typeof utilities.evaluate !== 'function') return undefined;\n return utilities.evaluate(expression) as T;\n};\n\nconst layoutOptions = (value: LayoutDirectiveValue | undefined): {key?: string} => {\n if (typeof value === 'string') return {key: value};\n if (typeof value === 'object' && value) {\n const key = value.key ?? value.id;\n return key ? {key} : {};\n }\n return {};\n};\n\nconst registerLayoutDirective = (Alpine: Alpine.Alpine): void => {\n Alpine.directive('ui-layout', (el, {expression}, utilities) => {\n if (!(el instanceof Element)) return;\n\n const value = readExpression<LayoutDirectiveValue>(expression, utilities);\n const cleanup = markLayoutParticipant(el, layoutOptions(value));\n declareMorphAttributes(el, MOTION_KEY_ATTR, MOTION_LAYOUT_ATTR);\n\n utilities.cleanup?.(() => {\n cleanup();\n });\n });\n};\n\nexport {registerLayoutDirective};\n","import type Alpine from 'alpinejs';\nimport {registerRequestRuntime, requestWithAlpine, type RequestOptions} from '@client/runtime/engine/request';\nimport {\n navigateWithAlpine,\n prepareNativeFragmentNavigation,\n registerNavigationRuntime,\n type NavigationOptions,\n} from '@client/runtime/engine/navigation';\nimport {isPlainRecord, warn} from '../utils';\n\ntype RequestDirectiveContext = Pick<Alpine.DirectiveData, 'expression'>;\ntype RequestDirectiveOptions = NavigationOptions & Record<string, unknown>;\ntype AnchorClick = {\n destination: URL;\n type: 'enhance' | 'native-fragment';\n};\n\nconst REQUEST_ROOT_SELECTOR = '[x-ui-request], [x-ui-request\\\\.navigate]';\nconst OPTION_KEYS = new Set(['data', 'extra', 'headers', 'history', 'method']);\nconst CLICK_MODIFIER_KEYS: Array<keyof MouseEvent> = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];\nconst nativeFormSubmissions = new WeakSet<HTMLFormElement>();\n\nconst readOptions = (\n el: Element,\n {expression}: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n): RequestDirectiveOptions | null => {\n if (!expression?.trim()) return {};\n\n const evaluated = utilities.Alpine.evaluate(el, expression);\n if (!isPlainRecord(evaluated)) {\n warn('x-ui-request: expression must evaluate to an object');\n return null;\n }\n\n Object.keys(evaluated).forEach((key) => {\n if (!OPTION_KEYS.has(key)) warn('x-ui-request: unknown option key', key);\n });\n\n return evaluated as RequestDirectiveOptions;\n};\n\nconst submitterFrom = (event: SubmitEvent): HTMLElement | null => (\n event.submitter instanceof HTMLElement ? event.submitter : null\n);\n\nconst shouldEnhanceFormSubmit = (form: HTMLFormElement, event: SubmitEvent, submitter: HTMLElement | null): boolean => {\n if (event.defaultPrevented) return false;\n if ((submitter?.getAttribute('formmethod') || form.getAttribute('method'))?.toLowerCase() === 'dialog') return false;\n if (form.getAttribute('target')) return false;\n if (submitter?.getAttribute('formtarget')) return false;\n\n if (!form.noValidate && !form.checkValidity()) {\n form.reportValidity();\n return false;\n }\n\n return true;\n};\n\nconst samePageHashOnly = (url: URL): boolean => (\n url.hash !== ''\n && url.origin === window.location.origin\n && url.pathname === window.location.pathname\n && url.search === window.location.search\n);\n\nconst anchorClickFrom = (anchor: HTMLAnchorElement, event: MouseEvent, navigate: boolean): AnchorClick | null => {\n if (event.defaultPrevented) return null;\n if (event.button !== 0) return null;\n if (navigate && CLICK_MODIFIER_KEYS.some((key) => event[key])) return null;\n if (anchor.hasAttribute('download')) return null;\n if (anchor.getAttribute('target')) return null;\n\n const destination = new URL(anchor.href, document.baseURI);\n if (destination.origin !== window.location.origin) return null;\n if (samePageHashOnly(destination)) {\n return navigate ? {destination, type: 'native-fragment'} : null;\n }\n return {destination, type: 'enhance'};\n};\n\nconst registerFormDirective = (\n AlpineInstance: Alpine.Alpine,\n form: HTMLFormElement,\n directive: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n behavior: {navigate: boolean},\n): void => {\n const onSubmit = (event: SubmitEvent): void => {\n if (nativeFormSubmissions.delete(form)) return;\n const submitter = submitterFrom(event);\n if (!shouldEnhanceFormSubmit(form, event, submitter)) return;\n\n const options = readOptions(form, directive, utilities);\n if (!options) return;\n\n event.preventDefault();\n if (behavior.navigate) {\n navigateWithAlpine(AlpineInstance, form.action, form, {\n ...options,\n source: form,\n submitter,\n });\n return;\n }\n void requestWithAlpine(AlpineInstance, undefined, {\n ...options,\n source: form,\n submitter,\n }).then((result) => {\n if (result.type !== 'unavailable') return;\n nativeFormSubmissions.add(form);\n form.requestSubmit(submitter ?? undefined);\n }).catch((error: unknown) => warn('x-ui-request: request failed', error));\n };\n\n form.addEventListener('submit', onSubmit);\n utilities.cleanup?.(() => form.removeEventListener('submit', onSubmit));\n};\n\nconst registerAnchorDirective = (\n AlpineInstance: Alpine.Alpine,\n anchor: HTMLAnchorElement,\n directive: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n behavior: {navigate: boolean},\n): void => {\n const onClick = (event: MouseEvent): void => {\n const click = anchorClickFrom(anchor, event, behavior.navigate);\n if (!click) return;\n if (click.type === 'native-fragment') {\n prepareNativeFragmentNavigation(click.destination);\n return;\n }\n\n const options = readOptions(anchor, directive, utilities);\n if (!options) return;\n\n event.preventDefault();\n if (behavior.navigate) {\n navigateWithAlpine(AlpineInstance, click.destination, anchor, options);\n return;\n }\n void requestWithAlpine(AlpineInstance, anchor.href, {\n ...options,\n method: options.method ?? 'GET',\n source: anchor,\n }).then((result) => {\n if (result.type === 'unavailable') window.location.assign(anchor.href);\n }).catch((error: unknown) => warn('x-ui-request: request failed', error));\n };\n\n anchor.addEventListener('click', onClick);\n utilities.cleanup?.(() => anchor.removeEventListener('click', onClick));\n};\n\nconst registerRequestDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.addRootSelector(() => REQUEST_ROOT_SELECTOR);\n registerRequestRuntime(AlpineInstance);\n registerNavigationRuntime(AlpineInstance);\n\n AlpineInstance.directive('ui-request', (el, {expression, modifiers}, utilities) => {\n const directive = {expression};\n\n if (el instanceof HTMLFormElement) {\n registerFormDirective(AlpineInstance, el, directive, utilities, {\n navigate: modifiers.includes('navigate'),\n });\n return;\n }\n\n if (el instanceof HTMLAnchorElement) {\n registerAnchorDirective(AlpineInstance, el, directive, utilities, {\n navigate: modifiers.includes('navigate'),\n });\n return;\n }\n\n warn('x-ui-request: directive only supports forms and anchors', el);\n });\n};\n\nexport {registerRequestDirective};\n","import type Alpine from 'alpinejs';\nimport {\n findAlpineMachineOwner,\n type AlpineMachineOwner,\n} from '@client/runtime/alpine-machine';\nimport type {TransitionContext} from '@client/runtime/transition-coordinator';\nimport {warn} from '@client/utils';\n\ntype TransitionEvaluator = ReturnType<Alpine.DirectiveUtilities['evaluateLater']>;\n\nconst evaluateTransition = <TProps, TData, TElement>(\n evaluator: TransitionEvaluator,\n transition: TransitionContext<TProps, TData, TElement>,\n): unknown => {\n let synchronous = true;\n let completedSynchronously = false;\n let result: unknown;\n let resolve!: (value: unknown) => void;\n const pending = new Promise<unknown>((resolvePromise) => {\n resolve = resolvePromise;\n });\n\n evaluator((value) => {\n if (synchronous) {\n completedSynchronously = true;\n result = value;\n return;\n }\n resolve(value);\n }, {scope: {$transition: transition}});\n synchronous = false;\n\n return completedSynchronously ? result : pending;\n};\n\nconst registerTransitionDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.directive(\n 'ui-transition',\n AlpineInstance.skipDuringClone((el, {value: name, expression}, utilities) => {\n if (!name) {\n warn('x-ui-transition requires a transition name', el);\n return;\n }\n\n const owner = findAlpineMachineOwner(AlpineInstance, el);\n if (!owner) {\n warn(`x-ui-transition:${name} requires an owning Trellis machine`, el);\n return;\n }\n\n const evaluator = expression?.trim() ? utilities.evaluateLater(expression) : null;\n const unregister = owner.onTransition(name, (transition) => (\n evaluator ? evaluateTransition(evaluator, transition) : undefined\n ), el as Parameters<AlpineMachineOwner['onTransition']>[2]);\n utilities.cleanup(unregister);\n }),\n );\n};\n\nexport {registerTransitionDirective};\n","import type Alpine from 'alpinejs';\n\n// This engine adapts behavior and matching ideas from Alpine Morph, Morphlex, Idiomorph, and Datastar.\n// See THIRD_PARTY_NOTICES.md for provenance and license notices.\n\ntype Skip = () => void;\ntype ChildrenOnly = () => void;\ntype SkipChildren = () => void;\ntype SkipUntil = (predicate: (node: Node) => boolean) => void;\ntype UpdatingHook = (\n from: Node,\n to: Node,\n childrenOnly: ChildrenOnly,\n skip: Skip,\n skipChildren: SkipChildren,\n skipUntil: SkipUntil,\n) => void;\ntype SkippableNodeHook = (node: Node, skip: Skip) => void;\ntype PruningPolicy = 'after-root-hook' | 'before-descendant-hook';\n\ntype MorphOptions = {\n key?: (element: Element) => unknown;\n lookahead?: boolean;\n updating?: UpdatingHook;\n updated?: (from: Node, to: Node) => void;\n removing?: SkippableNodeHook;\n removed?: (node: Node) => void;\n adding?: SkippableNodeHook;\n added?: (node: Node) => void;\n};\n\ntype MorphAlpine = Omit<Alpine.Alpine, 'cloneNode' | 'closestDataStack'> & {\n cloneNode(from: Element, to: Element): void;\n closestDataStack(node: Node): unknown;\n morph(from: Element, toHtml: Element | string, options?: MorphOptions): Element;\n morphBetween(\n startMarker: Comment,\n endMarker: Comment,\n toHtml: Element | string,\n options?: MorphOptions,\n ): void;\n};\n\ntype AlpineNode = Node & {\n _x_bindings?: {id?: string};\n _x_dataStack?: unknown;\n _x_currentIfEl?: AlpineNode;\n _x_lastRenderedEl?: AlpineNode;\n _x_lookup?: Map<unknown, AlpineNode>;\n _x_teleport?: AlpineNode;\n _x_transitioning?: unknown;\n _x_isShown?: boolean;\n};\n\ntype Parent = Node & {\n children: Iterable<Element>;\n firstChild: ChildNode | null;\n insertBefore(node: Node, before: Node | null): Node;\n};\n\nconst noop = (): void => {};\nlet alpineInstance: MorphAlpine | undefined;\n\nclass Block {\n constructor(\n readonly startComment: Comment,\n readonly endComment: Comment,\n ) {}\n\n get children(): Element[] {\n const children: Element[] = [];\n let node = this.startComment.nextSibling;\n while (node && node !== this.endComment) {\n if (node instanceof Element) children.push(node);\n node = node.nextSibling;\n }\n return children;\n }\n\n get firstChild(): ChildNode | null {\n const first = this.startComment.nextSibling;\n return first === this.endComment ? null : first;\n }\n\n appendChild(node: Node): Node {\n this.endComment.before(node);\n return node;\n }\n\n insertBefore(node: Node, reference: Node | null): Node {\n ((reference ?? this.endComment) as ChildNode).before(node);\n return node;\n }\n\n nextNode(reference: Node): ChildNode | null {\n const next = reference.nextSibling;\n return next === this.endComment ? null : next;\n }\n}\n\nconst nextSibling = (parent: Parent | Block, node: Node): ChildNode | null => (\n parent instanceof Block ? parent.nextNode(node) : node.nextSibling\n);\n\nconst createElement = (html: string): Element => {\n const template = document.createElement('template');\n template.innerHTML = html;\n const element = template.content.firstElementChild;\n if (!element) throw new Error('Morph HTML must contain a root element.');\n return element;\n};\n\nconst setIncomingAttribute = (target: Element, incoming: Attr): void => {\n if (incoming.namespaceURI) {\n target.setAttributeNodeNS(incoming.cloneNode() as Attr);\n } else if (incoming.name.includes('@')) {\n target.setAttributeNode(incoming.cloneNode() as Attr);\n } else {\n target.setAttribute(incoming.name, incoming.value);\n }\n};\n\nconst shouldSkip = (hook: SkippableNodeHook, node: Node): boolean => {\n let skip = false;\n hook(node, () => { skip = true; });\n return skip;\n};\n\nconst isConditionalStart = (node: Node | null): boolean => (\n node?.nodeType === Node.COMMENT_NODE && node.textContent === '[if BLOCK]><![endif]'\n);\n\nconst isConditionalEnd = (node: Node | null): boolean => (\n node?.nodeType === Node.COMMENT_NODE && node.textContent === '[if ENDBLOCK]><![endif]'\n);\n\nconst conditionalEnd = (parent: Parent | Block, start: Node): Comment => {\n let depth = 0;\n let node: Node | null = start;\n while ((node = nextSibling(parent, node))) {\n if (isConditionalStart(node)) depth += 1;\n else if (isConditionalEnd(node) && depth > 0) depth -= 1;\n else if (isConditionalEnd(node)) return node as Comment;\n }\n throw new Error('Unclosed conditional morph block.');\n};\n\ntype OwnedRange = {\n start: AlpineNode;\n end: AlpineNode;\n};\n\nconst ownedRange = (start: AlpineNode): OwnedRange => {\n let end = start;\n if (start._x_lastRenderedEl) end = start._x_lastRenderedEl;\n else if (start._x_currentIfEl) end = ownedRange(start._x_currentIfEl).end;\n else if (start._x_lookup?.size) {\n const owned = new Set(start._x_lookup.values());\n let sibling = start.nextSibling as AlpineNode | null;\n while (sibling && owned.has(sibling)) {\n end = ownedRange(sibling).end;\n sibling = end.nextSibling as AlpineNode | null;\n }\n }\n return {start, end};\n};\n\nconst afterOwnedRange = (parent: Parent | Block, range: OwnedRange): AlpineNode | null => (\n nextSibling(parent, range.end) as AlpineNode | null\n);\n\nconst isServerEqual = (from: AlpineNode, to: AlpineNode): boolean => {\n if (from.nodeType !== to.nodeType || from.nodeName !== to.nodeName) return false;\n if (from.nodeType === Node.TEXT_NODE || from.nodeType === Node.COMMENT_NODE) {\n return from.nodeValue === to.nodeValue;\n }\n if (from instanceof HTMLTemplateElement && to instanceof HTMLTemplateElement) {\n const fromTemplate = from as HTMLTemplateElement & AlpineNode;\n const toTemplate = to as HTMLTemplateElement & AlpineNode;\n if (fromTemplate._x_teleport) {\n const incomingTeleport = toTemplate._x_teleport ?? to.content.firstElementChild;\n return Boolean(incomingTeleport && isServerEqual(fromTemplate._x_teleport, incomingTeleport as AlpineNode));\n }\n return from.isEqualNode(to);\n }\n if (from instanceof Element && to instanceof Element) {\n if (from.attributes.length !== to.attributes.length) return false;\n for (const {name, value} of from.attributes) {\n if (to.getAttribute(name) !== value) return false;\n }\n }\n\n let fromChild = from.firstChild as AlpineNode | null;\n let toChild = to.firstChild as AlpineNode | null;\n while (fromChild && toChild) {\n if (!isServerEqual(fromChild, toChild)) return false;\n fromChild = ownedRange(fromChild).end.nextSibling as AlpineNode | null;\n toChild = toChild.nextSibling as AlpineNode | null;\n }\n return fromChild === null && toChild === null;\n};\n\nconst moveOwnedRangeBefore = (parent: Parent | Block, range: OwnedRange, before: Node | null): void => {\n if (range.start === before || afterOwnedRange(parent, range) === before) return;\n let node: Node | null = range.start;\n while (node) {\n const next: ChildNode | null = node.nextSibling;\n parent.insertBefore(node, before);\n if (node === range.end) break;\n node = next;\n }\n};\n\nconst seedDynamicId = (to: AlpineNode, from: AlpineNode | null): void => {\n const id = from?._x_bindings?.id;\n if (!id || !(to instanceof Element)) return;\n to.setAttribute('id', id);\n (to as HTMLElement).id = id;\n};\n\nconst buildDescendantCorrespondence = (\n fromElements: Element[],\n toElements: Element[],\n getKey: (node: Node | null) => unknown,\n): WeakMap<Node, symbol> => {\n const correspondence = new WeakMap<Node, symbol>();\n const fromDirectKeys = fromElements.map(getKey).filter(Boolean);\n const toDirectKeys = toElements.map(getKey).filter(Boolean);\n const directKeysReordered = fromDirectKeys.length >= 2\n && fromDirectKeys.length === toDirectKeys.length\n && new Set(fromDirectKeys).size === fromDirectKeys.length\n && fromDirectKeys.some((key, index) => key !== toDirectKeys[index])\n && fromDirectKeys.every((key) => toDirectKeys.includes(key));\n if (!directKeysReordered) return correspondence;\n\n const idCounts = (elements: Element[]): Map<string, number> => {\n const counts = new Map<string, number>();\n const count = (element: Element): void => {\n if (element.id) counts.set(element.id, (counts.get(element.id) ?? 0) + 1);\n };\n for (const element of elements) {\n count(element);\n element.querySelectorAll('[id]').forEach(count);\n }\n return counts;\n };\n const fromIdCounts = idCounts(fromElements);\n const toIdCounts = idCounts(toElements);\n const tokens = new Map<string, symbol>();\n for (const [id, count] of fromIdCounts) {\n if (count === 1 && toIdCounts.get(id) === 1) tokens.set(id, Symbol(id));\n }\n\n const indexDescendant = (element: Element): void => {\n if (getKey(element)) return;\n for (const descendant of element.querySelectorAll('[id]')) {\n const token = tokens.get(descendant.id);\n if (!token) continue;\n correspondence.set(element, token);\n return;\n }\n };\n fromElements.forEach(indexDescendant);\n toElements.forEach(indexDescendant);\n return correspondence;\n};\n\nconst createContext = (options: MorphOptions = {}) => {\n const context = {\n key: options.key ?? ((element: Element) => element.getAttribute('key')),\n lookahead: options.lookahead ?? false,\n updating: options.updating ?? noop,\n updated: options.updated ?? noop,\n removing: options.removing ?? noop,\n removed: options.removed ?? noop,\n adding: options.adding ?? noop,\n added: options.added ?? noop,\n skipUntilCondition: null as ((node: Node) => boolean) | null,\n };\n\n const getKey = (node: Node | null): unknown => (\n node instanceof Element ? context.key(node) : null\n );\n\n const requiresReplacement = (from: Node, to: Node): boolean => (\n from.nodeType !== to.nodeType\n || from.nodeName !== to.nodeName\n || getKey(from) !== getKey(to)\n || (from instanceof Element\n && to instanceof Element\n && from.getAttribute('x-data') !== to.getAttribute('x-data'))\n );\n\n const insertNodeBefore = (\n parent: Parent | Block,\n source: Node,\n before: Node | null,\n ): {inserted: false; node: null} | {inserted: true; node: AlpineNode} => {\n if (shouldSkip(context.adding, source)) return {inserted: false, node: null};\n const clone = source.cloneNode(true);\n parent.insertBefore(clone, before);\n context.added(clone);\n return {inserted: true, node: clone as AlpineNode};\n };\n\n const removeNode = (node: Node): boolean => {\n if (shouldSkip(context.removing, node)) return false;\n node.parentNode?.removeChild(node);\n context.removed(node);\n return true;\n };\n\n const removeOwnedRange = (range: OwnedRange): boolean => {\n if (shouldSkip(context.removing, range.start)) return false;\n range.start.parentNode?.removeChild(range.start);\n context.removed(range.start);\n return true;\n };\n\n const replaceNode = (from: Node, to: Node): boolean => {\n if (shouldSkip(context.removing, from)) return false;\n const clone = to.cloneNode(true);\n if (shouldSkip(context.adding, clone)) return false;\n from.parentNode?.replaceChild(clone, from);\n context.removed(from);\n context.added(clone);\n return true;\n };\n\n const patchAttributes = (from: AlpineNode & Element, to: Element): boolean => {\n if (from._x_transitioning) return false;\n if ((from._x_isShown && !(to as AlpineNode)._x_isShown)\n || (!from._x_isShown && (to as AlpineNode)._x_isShown)) return false;\n\n let changed = false;\n const existing = Array.from(from.attributes);\n for (let index = existing.length - 1; index >= 0; index -= 1) {\n const name = existing[index]!.name;\n if (to.hasAttribute(name)) continue;\n if (name === 'open' && from instanceof HTMLDialogElement && from.open) from.close();\n else from.removeAttribute(name);\n changed = true;\n }\n const incoming = Array.from(to.attributes);\n for (let index = incoming.length - 1; index >= 0; index -= 1) {\n const attribute = incoming[index]!;\n const {name, value} = attribute;\n if (from.getAttribute(name) === value) continue;\n setIncomingAttribute(from, attribute);\n changed = true;\n }\n return changed;\n };\n\n let patchChildren: (from: Parent | Block, to: Parent | Block) => boolean;\n\n const patchNode = (from: AlpineNode, to: AlpineNode, pruning: PruningPolicy): boolean => {\n if (from instanceof Element && from.hasAttribute('data-ui-ignore-morph')) return false;\n if (requiresReplacement(from, to)) return replaceNode(from, to);\n if (pruning === 'before-descendant-hook'\n && from.nodeType !== Node.COMMENT_NODE\n && isServerEqual(from, to)) return false;\n\n let childrenOnly = false;\n let skipChildren = false;\n let skip = false;\n const skipUntil = (predicate: (node: Node) => boolean): void => {\n context.skipUntilCondition = predicate;\n };\n context.updating(\n from,\n to,\n () => { childrenOnly = true; },\n () => { skip = true; },\n () => { skipChildren = true; },\n skipUntil,\n );\n if (skip) return false;\n\n // Descendants that are server-identical are opaque. The root is checked only\n // after its hook has had the opportunity to mutate the incoming tree.\n if (isServerEqual(from, to)) return false;\n\n let changed = false;\n if (from.nodeType === Node.ELEMENT_NODE && alpineInstance) {\n alpineInstance.cloneNode(from as Element, to as Element);\n if (from._x_teleport && to._x_teleport) {\n changed = patch(from._x_teleport, to._x_teleport) || changed;\n }\n }\n\n if (to.nodeType === Node.TEXT_NODE || to.nodeType === Node.COMMENT_NODE) {\n if (from.nodeValue === to.nodeValue) return false;\n from.nodeValue = to.nodeValue;\n context.updated(from, to);\n return true;\n }\n\n if (!childrenOnly) changed = patchAttributes(from as AlpineNode & Element, to as Element) || changed;\n if (!skipChildren) changed = patchChildren(from as unknown as Parent, to as unknown as Parent) || changed;\n if (changed) context.updated(from, to);\n return changed;\n };\n\n const patch = (from: AlpineNode, to: AlpineNode): boolean => (\n patchNode(from, to, 'before-descendant-hook')\n );\n const patchRoot = (from: AlpineNode, to: AlpineNode): boolean => (\n patchNode(from, to, 'after-root-hook')\n );\n\n patchChildren = (from: Parent | Block, to: Parent | Block): boolean => {\n const fromElements = Array.from(from.children);\n const toElements = Array.from(to.children);\n const correspondence = buildDescendantCorrespondence(fromElements, toElements, getKey);\n\n const childKey = (node: Node | null): unknown => (\n node ? getKey(node) || correspondence.get(node) : null\n );\n const keyed = new Map<unknown, AlpineNode>();\n for (const element of fromElements) {\n const key = childKey(element);\n if (key) keyed.set(key, element as AlpineNode);\n }\n\n let changed = false;\n let currentFrom = from.firstChild as AlpineNode | null;\n let currentTo = to.firstChild as AlpineNode | null;\n\n incoming: while (currentTo) {\n seedDynamicId(currentTo, currentFrom);\n\n if (context.skipUntilCondition) {\n const fromDone = !currentFrom || context.skipUntilCondition(currentFrom);\n const toDone = context.skipUntilCondition(currentTo);\n if (fromDone && toDone) context.skipUntilCondition = null;\n else {\n if (!fromDone && currentFrom) currentFrom = afterOwnedRange(from, ownedRange(currentFrom));\n if (!toDone) currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n }\n\n if (!currentFrom) {\n const addition = insertNodeBefore(from, currentTo, null);\n changed = addition.inserted || changed;\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n\n if (isConditionalStart(currentFrom) && isConditionalStart(currentTo)) {\n const fromEnd = conditionalEnd(from, currentFrom);\n const toEnd = conditionalEnd(to, currentTo);\n changed = patchChildren(new Block(currentFrom as Comment, fromEnd), new Block(currentTo as Comment, toEnd)) || changed;\n currentFrom = nextSibling(from, fromEnd) as AlpineNode | null;\n currentTo = nextSibling(to, toEnd) as AlpineNode | null;\n continue;\n } else {\n if (context.lookahead\n && currentFrom instanceof Element\n && !currentFrom.isEqualNode(currentTo)) {\n let lookahead = nextSibling(to, currentTo) as AlpineNode | null;\n while (lookahead) {\n if (lookahead instanceof Element && currentFrom.isEqualNode(lookahead)) {\n const addition = insertNodeBefore(from, currentTo, currentFrom);\n if (!addition.inserted) {\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue incoming;\n }\n currentFrom = addition.node;\n changed = true;\n break;\n }\n lookahead = nextSibling(to, lookahead) as AlpineNode | null;\n }\n }\n\n const toKey = childKey(currentTo);\n const fromKey = childKey(currentFrom);\n if (toKey !== fromKey) {\n const keyedMatch = toKey ? keyed.get(toKey) : undefined;\n if (keyedMatch) {\n moveOwnedRangeBefore(from, ownedRange(keyedMatch), currentFrom);\n currentFrom = keyedMatch;\n changed = true;\n } else if (toKey || fromKey) {\n const addition = insertNodeBefore(from, currentTo, currentFrom);\n if (!addition.inserted) {\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n currentFrom = addition.node;\n changed = true;\n }\n }\n\n const afterFrom = afterOwnedRange(from, ownedRange(currentFrom));\n changed = patch(currentFrom, currentTo) || changed;\n currentFrom = afterFrom;\n }\n\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n }\n\n while (currentFrom) {\n const range = ownedRange(currentFrom);\n const after = afterOwnedRange(from, range);\n changed = (range.end === range.start ? removeNode(currentFrom) : removeOwnedRange(range)) || changed;\n currentFrom = after;\n }\n return changed;\n };\n\n return {patchChildren, patchRoot};\n};\n\nconst morph = (from: Element, toHtml: Element | string, options: MorphOptions = {}): Element => {\n const to = (typeof toHtml === 'string' ? createElement(toHtml) : toHtml) as AlpineNode & Element;\n const source = from as AlpineNode & Element;\n if (alpineInstance?.closestDataStack && !source._x_dataStack) {\n to._x_dataStack = alpineInstance.closestDataStack(source);\n if (to._x_dataStack) alpineInstance.cloneNode(source, to);\n }\n createContext(options).patchRoot(source, to);\n return from;\n};\n\nconst morphBetween = (\n startMarker: Comment,\n endMarker: Comment,\n toHtml: Element | string,\n options: MorphOptions = {},\n): void => {\n const fromContainer = startMarker.parentNode as AlpineNode & Parent;\n const toContainer = typeof toHtml === 'string'\n ? (() => {\n const container = document.createElement('div');\n container.insertAdjacentHTML('beforeend', toHtml);\n return container;\n })()\n : toHtml;\n const toStart = document.createComment('[morph-start]');\n const toEnd = document.createComment('[morph-end]');\n toContainer.insertBefore(toStart, toContainer.firstChild);\n toContainer.appendChild(toEnd);\n if (alpineInstance?.closestDataStack) {\n (toContainer as AlpineNode)._x_dataStack = alpineInstance.closestDataStack(fromContainer);\n if ((toContainer as AlpineNode)._x_dataStack) alpineInstance.cloneNode(fromContainer as unknown as Element, toContainer);\n }\n createContext(options).patchChildren(\n new Block(startMarker, endMarker),\n new Block(toStart, toEnd),\n );\n};\n\nconst trellisMorph = (AlpineInstance: Alpine.Alpine): void => {\n const instance = AlpineInstance as MorphAlpine;\n alpineInstance = instance;\n instance.morph = morph;\n instance.morphBetween = morphBetween;\n};\n\nexport {morph, morphBetween};\nexport default trellisMorph;\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerLayoutDirective} from './directives/layout';\nimport {registerRequestDirective} from './directives/request';\nimport {registerTransitionDirective} from './directives/transition';\nimport morph from './runtime/morph-engine';\nimport {setPropReactivity} from './runtime/codecs';\nimport {registerConfirm} from './runtime/confirm';\nimport {registerStream} from './runtime/engine/stream';\nimport {registerThemeStore} from './runtime/theme';\nimport {registerUiMagic, ui} from './runtime/ui';\n\ntype CoreRuntimePlugin = (AlpineInstance: AlpineType) => void;\nconst registered = new WeakSet<AlpineType>();\n\nconst coreRuntime: CoreRuntimePlugin = (AlpineInstance): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n setPropReactivity(AlpineInstance.reactive);\n AlpineInstance.plugin(morph);\n registerLayoutDirective(AlpineInstance);\n registerUiMagic(AlpineInstance);\n registerTransitionDirective(AlpineInstance);\n registerThemeStore(AlpineInstance);\n registerConfirm();\n registerRequestDirective(AlpineInstance);\n registerStream(AlpineInstance);\n};\n\nexport {coreRuntime, ui};\nexport default coreRuntime;\nexport type {CoreRuntimePlugin};\nexport {\n bool,\n createAlpineMachine,\n createMachine,\n decodeProps,\n defineAlpineData,\n defineManifest,\n defineSchemaManifest,\n defineProps,\n defineStyles,\n json,\n mergeBindings,\n number,\n oneOf,\n propsFromSchema,\n resolveStyle,\n string,\n createTransitionCoordinator,\n defineHook,\n} from './runtime';\nexport type {\n AlpineMachine,\n AlpineMachineOwner,\n AlpinePropsChangedEvent,\n AlpineDataFactory,\n AlpineDataRegistrar,\n CodecFn,\n ComponentManifest,\n CreateAlpineMachineOptions,\n DecodePropsOptions,\n Machine,\n MachineConfig,\n MachineEffect,\n MachineEffectList,\n MachineEffectRef,\n MachineEntry,\n MachineEvent,\n MachineEventObject,\n MachineGuard,\n MachineOptions,\n MachineReducer,\n MachineReducerList,\n MachineReducerRef,\n MachineScope,\n MachineSnapshot,\n MachineStateConfig,\n MachineStateValue,\n MachineTransition,\n MachineTransitionDefinition,\n MachineUpdate,\n DefineManifestOptions,\n DefineSchemaManifestOptions,\n DefineStylesOptions,\n ManifestPart,\n ManifestProp,\n ManifestPropDetails,\n ManifestToken,\n ManualComponentManifest,\n MachineFactoryScope,\n BindingInput,\n PropState,\n PropsFromSchemaOptions,\n MergeBindingsOptions,\n ResolveStyleOptions,\n SchemaPropDetails,\n SchemaComponentManifest,\n SchemaToProps,\n StyleDefinition,\n StylePart,\n StyleProps,\n TrellisAlpineComponent,\n AnyTransitionHook,\n TransitionCallback,\n TransitionContext,\n TransitionCoordinator,\n TransitionCoordinatorOptions,\n TransitionEventCreator,\n TransitionForHook,\n TransitionHookDefinition,\n UiGetOptions,\n UiRequestOptions,\n UiRuntime,\n} from './runtime';\nexport {registerTransitionDirective} from './directives/transition';\n"],"mappings":"4SAkBA,IAAM,EAA0B,gBAE5B,GAA4C,KAC1C,EAAgB,IAAI,QAEpB,GAAsB,GACxB,aAAiB,mBAAqB,aAAiB,iBAGrD,IAAqB,CAAC,OAAM,eAGb,CACjB,IAAM,EAAmB,GAAW,QAAQ,UAC5C,GAAI,IAAqB,IAAA,GAAW,OAAO,GAAoB,EAE/D,IAAM,EAAc,EAAK,QAAQ,UAGjC,OAFI,IAAgB,IAAA,GAEb,KAF+B,GAAe,CAGzD,EAEM,IAAwB,CAAC,OAAM,eAGzB,CAER,OAAO,eAAiB,CAChB,MAAC,EAAK,aAAgB,GAAa,EAAU,OAAS,GAE1D,GAAc,IAAI,CAAI,EACtB,GAAI,CACA,EAAK,cAAc,GAAa,IAAA,EAAS,CAC7C,QAAU,CACN,EAAc,OAAO,CAAI,CAC7B,CALsB,CAM1B,EAAG,CAAC,CACR,EAEM,EAAgB,GAA6B,CAC/C,IAAM,EAAO,EAAM,OACnB,GAAI,EAAE,aAAgB,iBAAkB,OAExC,GAAI,EAAc,IAAI,CAAI,EAAG,CACzB,EAAc,OAAO,CAAI,EACzB,MACJ,CAEA,IAAM,EAAY,GAAmB,EAAM,SAAS,EAAI,EAAM,UAAY,KACpE,EAAU,GAAkB,CAAC,OAAM,WAAS,CAAC,EACnD,GAAI,IAAY,KAAM,OAEtB,EAAM,eAAe,EAErB,IAAI,EAAU,GACR,MAAsB,CACpB,IACJ,EAAU,GACV,GAAqB,CAAC,OAAM,WAAS,CAAC,EAC1C,EACM,MAAqB,CACvB,EAAU,EACd,EACM,EAAe,IAAI,YAAgC,aAAc,CACnE,QAAS,GACT,WAAY,GACZ,OAAQ,CACJ,OACA,UACA,YACA,gBAAiB,EACjB,UACA,QACJ,CACJ,CAAC,EAED,EAAK,cAAc,CAAY,EAC3B,GAAa,mBAEb,OAAO,QAAQ,CAAO,EACtB,EAAQ,EAER,EAAO,EAEf,EAEM,IAAmB,CAAC,OAAO,UAAmC,CAAC,IAAY,CACzE,AAGJ,MADA,EAAK,iBAAiB,SAAU,EAA+B,CAAC,QAAS,EAAI,CAAC,MAC3C,EAAK,oBAAoB,SAAU,EAA+B,CAAC,QAAS,EAAI,CAAC,EACxH,ECzBM,GAAW,GAA0B,EAAM,QAAQ,WAAY,KAAK,CAAC,CAAC,YAAY,EAElF,IAA2D,CAAC,cAAqD,CACnH,GAAI,eAAgB,EAAU,MAAU,MAAM,4CAA4C,EAC1F,OAAO,OAAO,OAAO,CAAQ,CACjC,EAEM,GAAqE,CACvE,SACA,aAC2D,CAC3D,IAAM,EAAsC,CAAC,EAqB7C,OAnBA,OAAO,QAAQ,CAAM,CAAC,CAAC,SAAS,CAAC,EAAW,KAAW,CACnD,IAAM,EAAc,EAAQ,IAAyB,CAAC,EAChD,EAAO,EAAM,KACb,EAAW,EAAY,MAAQ,GAAQ,CAAS,EACtD,GAAI,KAAY,EACZ,MAAU,MAAM,mBAAmB,EAAU,2CAA2C,EAAS,EAAE,EAEvG,IAAM,EAAqB,CACvB,KAAM,EAAK,KACX,QAAS,EAAK,OAClB,EAEI,EAAK,SAAQ,EAAK,OAAS,EAAK,QAChC,EAAY,cAAa,EAAK,YAAc,EAAY,aACxD,EAAY,cAAa,EAAK,YAAc,IAEhD,EAAM,GAAY,CACtB,CAAC,EAEM,CACX,EAEM,GAGJ,CACE,SACA,UACA,gBAAgB,CAAC,EACjB,wBAAwB,QACxB,cAIE,CACF,IAAM,EAAc,EAAgB,CAAC,SAAQ,SAAO,CAAC,EACrD,OAAO,KAAK,CAAa,CAAC,CAAC,QAAS,GAAa,CAC7C,GAAI,KAAY,EACZ,MAAU,MAAM,iBAAiB,EAAS,iCAAiC,EAAS,EAAE,CAE9F,CAAC,EAED,IAAM,EAAQ,IAA0B,SAClC,CAAC,GAAG,EAAe,GAAG,CAAW,EACjC,CAAC,GAAG,EAAa,GAAG,CAAa,EACjC,CAAC,OAAM,QAAO,cAAa,OAAM,GAAG,GAAQ,EAC5C,EAAS,CACX,OACA,QACA,cACA,GAAI,EAAO,CAAC,MAAI,EAAI,CAAC,EACrB,WAAY,EACZ,QACA,GAAG,CACP,EAEA,OAAO,OAAO,OAAO,CAAM,CAC/B,ECxJM,GAAe,CAAC,QAAS,OAAQ,QAAQ,EAoBzC,GAAe,GACjB,OAAO,GAAU,UAAY,GAAa,SAAS,CAAkB,EAGnE,EAAsB,GACxB,GAAY,CAAK,EAAI,EAAQ,SAG3B,MACF,SAAS,gBAAgB,QAAQ,iBAAmB,mBAGlD,MAAgC,EAAmB,SAAS,gBAAgB,QAAQ,KAAK,EAEzF,MAA8B,CAChC,GAAI,CACA,OAAO,EAAmB,OAAO,aAAa,QAAQ,EAAW,CAAC,GAAK,EAAa,CAAC,CACzF,MAAQ,CACJ,OAAO,EAAa,CACxB,CACJ,EAEM,EAAe,GAA0B,CAC3C,GAAI,CACA,OAAO,aAAa,QAAQ,EAAW,EAAG,CAAI,CAClD,MAAQ,CAER,CACJ,EAEM,OACF,OAAO,WAAW,8BAA8B,CAAC,CAAC,QAGhD,GAAe,GACjB,IAAS,QAAW,IAAS,UAAY,GAAY,EAGnD,EAAkB,GAAuC,CAC3D,IAAM,EAAO,GAAY,CAAI,EACvB,EAA8B,EAAO,OAAS,QAC9C,EAAO,SAAS,gBAUtB,OARA,EAAK,UAAU,OAAO,OAAQ,CAAI,EAClC,EAAK,QAAQ,MAAQ,EACrB,EAAK,QAAQ,cAAgB,EAC7B,EAAK,cAAc,IAAI,YAA+B,kBAAmB,CACrE,OAAQ,CAAC,OAAM,WAAU,OAAM,GAAI,CAAI,EACvC,QAAS,EACb,CAAC,CAAC,EAEK,CAAC,OAAM,WAAU,OAAM,GAAI,CAAI,CAC1C,EAEM,OAAqC,CACvC,IAAM,EAAU,EAAe,EAAW,CAAC,EAE3C,MAAO,CACH,KAAM,EAAQ,KACd,SAAU,EAAQ,SAClB,IAAI,MAAgB,CAChB,OAAO,KAAK,WAAa,MAC7B,EACA,IAAI,IAAc,CACd,OAAO,KAAK,IAChB,EACA,IAAI,EAAuB,CACvB,IAAM,EAAW,EAAmB,CAAI,EACxC,EAAY,CAAQ,EACpB,IAAM,EAAO,EAAe,CAAQ,EACpC,KAAK,KAAO,EAAK,KACjB,KAAK,SAAW,EAAK,QACzB,EACA,QAAe,CACX,KAAK,IAAI,KAAK,WAAa,OAAS,QAAU,MAAM,CACxD,CACJ,CACJ,EAEM,GAAsB,GAAqC,CAC7D,GAAI,OAAO,EAAe,OAAU,WAAY,OAGhD,IAAM,EADgB,EAAe,MAAM,OAC7B,GAAiB,GAAiB,EAEhD,EAAe,MAAM,QAAS,CAAK,EAEnC,OAAO,WAAW,8BAA8B,CAAC,CAAC,iBAAiB,aAAgB,CAC/E,GAAI,EAAM,OAAS,SAAU,OAC7B,IAAM,EAAO,EAAe,QAAQ,EACpC,EAAM,SAAW,EAAK,QAC1B,CAAC,CACL,ECrGM,IAAqB,EAAgC,IAAwD,CAC3G,GAAC,GAAc,OAAO,EAAU,UAAa,WACjD,OAAO,EAAU,SAAS,CAAU,CACxC,EAEM,GAAiB,GAA4D,CAC/E,GAAI,OAAO,GAAU,SAAU,MAAO,CAAC,IAAK,CAAK,EACjD,GAAI,OAAO,GAAU,UAAY,EAAO,CACpC,IAAM,EAAM,EAAM,KAAO,EAAM,GAC/B,OAAO,EAAM,CAAC,KAAG,EAAI,CAAC,CAC1B,CACA,MAAO,CAAC,CACZ,EAEM,EAA2B,GAAgC,CAC7D,EAAO,UAAU,aAAc,EAAI,CAAC,cAAa,IAAc,CAC3D,GAAI,EAAE,aAAc,SAAU,OAE9B,IAAM,EAAQ,GAAqC,EAAY,CAAS,EAClE,EAAU,EAAsB,EAAI,GAAc,CAAK,CAAC,EAC9D,EAAuB,EAAI,EAAiB,CAAkB,EAE9D,EAAU,cAAgB,CACtB,EAAQ,CACZ,CAAC,CACL,CAAC,CACL,ECtBM,EAAwB,4CACxB,EAAc,IAAI,IAAI,CAAC,OAAQ,QAAS,UAAW,UAAW,QAAQ,CAAC,EACvE,EAA+C,CAAC,SAAU,UAAW,UAAW,UAAU,EAC1F,EAAwB,IAAI,QAE5B,GACF,EACA,CAAC,cACD,IACiC,CACjC,GAAI,CAAC,GAAY,KAAK,EAAG,MAAO,CAAC,EAEjC,IAAM,EAAY,EAAU,OAAO,SAAS,EAAI,CAAU,EAU1D,OATK,EAAc,CAAS,GAK5B,OAAO,KAAK,CAAS,CAAC,CAAC,QAAS,GAAQ,CAC/B,EAAY,IAAI,CAAG,GAAG,EAAK,mCAAoC,CAAG,CAC3E,CAAC,EAEM,IARH,EAAK,qDAAqD,EACnD,KAQf,EAEM,EAAiB,GACnB,EAAM,qBAAqB,YAAc,EAAM,UAAY,KAGzD,GAA2B,EAAuB,EAAoB,IACpE,EAAM,mBACL,GAAW,aAAa,YAAY,GAAK,EAAK,aAAa,QAAQ,EAAA,EAAI,YAAY,IAAM,UAC1F,EAAK,aAAa,QAAQ,GAC1B,GAAW,aAAa,YAAY,EAAU,GAE9C,CAAC,EAAK,YAAc,CAAC,EAAK,cAAc,GACxC,EAAK,eAAe,EACb,IAGJ,GAGL,EAAoB,GACtB,EAAI,OAAS,IACV,EAAI,SAAW,OAAO,SAAS,QAC/B,EAAI,WAAa,OAAO,SAAS,UACjC,EAAI,SAAW,OAAO,SAAS,OAGhC,GAAmB,EAA2B,EAAmB,IAA0C,CAK7G,GAJI,EAAM,kBACN,EAAM,SAAW,GACjB,GAAY,EAAoB,KAAM,GAAQ,EAAM,EAAI,GACxD,EAAO,aAAa,UAAU,GAC9B,EAAO,aAAa,QAAQ,EAAG,OAAO,KAE1C,IAAM,EAAc,IAAI,IAAI,EAAO,KAAM,SAAS,OAAO,EAKzD,OAJI,EAAY,SAAW,OAAO,SAAS,OACvC,EAAiB,CAAW,EACrB,EAAW,CAAC,cAAa,KAAM,iBAAiB,EAAI,KAExD,CAAC,cAAa,KAAM,SAAS,EAJsB,IAK9D,EAEM,GACF,EACA,EACA,EACA,EACA,IACO,CACP,IAAM,EAAY,GAA6B,CAC3C,GAAI,EAAsB,OAAO,CAAI,EAAG,OACxC,IAAM,EAAY,EAAc,CAAK,EACrC,GAAI,CAAC,EAAwB,EAAM,EAAO,CAAS,EAAG,OAEtD,IAAM,EAAU,EAAY,EAAM,EAAW,CAAS,EACjD,KAGL,IADA,EAAM,eAAe,EACjB,EAAS,SAAU,CACnB,EAAmB,EAAgB,EAAK,OAAQ,EAAM,CAClD,GAAG,EACH,OAAQ,EACR,WACJ,CAAC,EACD,MACJ,CACA,EAAuB,EAAgB,IAAA,GAAW,CAC9C,GAAG,EACH,OAAQ,EACR,WACJ,CAAC,CAAC,CAAC,KAAM,GAAW,CACZ,EAAO,OAAS,gBACpB,EAAsB,IAAI,CAAI,EAC9B,EAAK,cAAc,GAAa,IAAA,EAAS,EAC7C,CAAC,CAAC,CAAC,MAAO,GAAmB,EAAK,+BAAgC,CAAK,CAAC,CATxE,CAUJ,EAEA,EAAK,iBAAiB,SAAU,CAAQ,EACxC,EAAU,cAAgB,EAAK,oBAAoB,SAAU,CAAQ,CAAC,CAC1E,EAEM,GACF,EACA,EACA,EACA,EACA,IACO,CACP,IAAM,EAAW,GAA4B,CACzC,IAAM,EAAQ,EAAgB,EAAQ,EAAO,EAAS,QAAQ,EAC9D,GAAI,CAAC,EAAO,OACZ,GAAI,EAAM,OAAS,kBAAmB,CAClC,EAAgC,EAAM,WAAW,EACjD,MACJ,CAEA,IAAM,EAAU,EAAY,EAAQ,EAAW,CAAS,EACnD,KAGL,IADA,EAAM,eAAe,EACjB,EAAS,SAAU,CACnB,EAAmB,EAAgB,EAAM,YAAa,EAAQ,CAAO,EACrE,MACJ,CACA,EAAuB,EAAgB,EAAO,KAAM,CAChD,GAAG,EACH,OAAQ,EAAQ,QAAU,MAC1B,OAAQ,CACZ,CAAC,CAAC,CAAC,KAAM,GAAW,CACZ,EAAO,OAAS,eAAe,OAAO,SAAS,OAAO,EAAO,IAAI,CACzE,CAAC,CAAC,CAAC,MAAO,GAAmB,EAAK,+BAAgC,CAAK,CAAC,CAPxE,CAQJ,EAEA,EAAO,iBAAiB,QAAS,CAAO,EACxC,EAAU,cAAgB,EAAO,oBAAoB,QAAS,CAAO,CAAC,CAC1E,EAEM,EAA4B,GAAwC,CACtE,EAAe,oBAAsB,CAAqB,EAC1D,EAAuB,CAAc,EACrC,EAA0B,CAAc,EAExC,EAAe,UAAU,cAAe,EAAI,CAAC,aAAY,aAAY,IAAc,CAC/E,IAAM,EAAY,CAAC,YAAU,EAE7B,GAAI,aAAc,gBAAiB,CAC/B,EAAsB,EAAgB,EAAI,EAAW,EAAW,CAC5D,SAAU,EAAU,SAAS,UAAU,CAC3C,CAAC,EACD,MACJ,CAEA,GAAI,aAAc,kBAAmB,CACjC,EAAwB,EAAgB,EAAI,EAAW,EAAW,CAC9D,SAAU,EAAU,SAAS,UAAU,CAC3C,CAAC,EACD,MACJ,CAEA,EAAK,0DAA2D,CAAE,CACtE,CAAC,CACL,EC3KM,GACF,EACA,IACU,CACV,IAAI,EAAc,GACd,EAAyB,GACzB,EACA,EACE,EAAU,IAAI,QAAkB,GAAmB,CACrD,EAAU,CACd,CAAC,EAYD,OAVA,EAAW,GAAU,CACjB,GAAI,EAAa,CACb,EAAyB,GACzB,EAAS,EACT,MACJ,CACA,EAAQ,CAAK,CACjB,EAAG,CAAC,MAAO,CAAC,YAAa,CAAU,CAAC,CAAC,EACrC,EAAc,GAEP,EAAyB,EAAS,CAC7C,EAEM,EAA+B,GAAwC,CACzE,EAAe,UACX,gBACA,EAAe,iBAAiB,EAAI,CAAC,MAAO,EAAM,cAAa,IAAc,CACzE,GAAI,CAAC,EAAM,CACP,EAAK,6CAA8C,CAAE,EACrD,MACJ,CAEA,IAAM,EAAQ,EAAuB,EAAgB,CAAE,EACvD,GAAI,CAAC,EAAO,CACR,EAAK,mBAAmB,EAAK,qCAAsC,CAAE,EACrE,MACJ,CAEA,IAAM,EAAY,GAAY,KAAK,EAAI,EAAU,cAAc,CAAU,EAAI,KACvE,EAAa,EAAM,aAAa,EAAO,GACzC,EAAY,EAAmB,EAAW,CAAU,EAAI,IAAA,GACzD,CAAuD,EAC1D,EAAU,QAAQ,CAAU,CAChC,CAAC,CACL,CACJ,ECGM,MAAmB,CAAC,EACtB,EAEE,EAAN,KAAY,CAEK,aACA,WAFb,YACI,EACA,EACF,CAFW,KAAA,aAAA,EACA,KAAA,WAAA,CACV,CAEH,IAAI,UAAsB,CACtB,IAAM,EAAsB,CAAC,EACzB,EAAO,KAAK,aAAa,YAC7B,KAAO,GAAQ,IAAS,KAAK,YACrB,aAAgB,SAAS,EAAS,KAAK,CAAI,EAC/C,EAAO,EAAK,YAEhB,OAAO,CACX,CAEA,IAAI,YAA+B,CAC/B,IAAM,EAAQ,KAAK,aAAa,YAChC,OAAO,IAAU,KAAK,WAAa,KAAO,CAC9C,CAEA,YAAY,EAAkB,CAE1B,OADA,KAAK,WAAW,OAAO,CAAI,EACpB,CACX,CAEA,aAAa,EAAY,EAA8B,CAEnD,OADE,GAAa,KAAK,WAAA,CAA0B,OAAO,CAAI,EAClD,CACX,CAEA,SAAS,EAAmC,CACxC,IAAM,EAAO,EAAU,YACvB,OAAO,IAAS,KAAK,WAAa,KAAO,CAC7C,CACJ,EAEM,GAAe,EAAwB,IACzC,aAAkB,EAAQ,EAAO,SAAS,CAAI,EAAI,EAAK,YAGrD,GAAiB,GAA0B,CAC7C,IAAM,EAAW,SAAS,cAAc,UAAU,EAClD,EAAS,UAAY,EACrB,IAAM,EAAU,EAAS,QAAQ,kBACjC,GAAI,CAAC,EAAS,MAAU,MAAM,yCAAyC,EACvE,OAAO,CACX,EAEM,IAAwB,EAAiB,IAAyB,CAChE,EAAS,aACT,EAAO,mBAAmB,EAAS,UAAU,CAAS,EAC/C,EAAS,KAAK,SAAS,GAAG,EACjC,EAAO,iBAAiB,EAAS,UAAU,CAAS,EAEpD,EAAO,aAAa,EAAS,KAAM,EAAS,KAAK,CAEzD,EAEM,GAAc,EAAyB,IAAwB,CACjE,IAAI,EAAO,GAEX,OADA,EAAK,MAAY,CAAE,EAAO,EAAM,CAAC,EAC1B,CACX,EAEM,EAAsB,GACxB,GAAM,WAAa,KAAK,cAAgB,EAAK,cAAgB,uBAG3D,EAAoB,GACtB,GAAM,WAAa,KAAK,cAAgB,EAAK,cAAgB,0BAG3D,GAAkB,EAAwB,IAAyB,CACrE,IAAI,EAAQ,EACR,EAAoB,EACxB,KAAQ,EAAO,EAAY,EAAQ,CAAI,GACnC,GAAI,EAAmB,CAAI,EAAG,GAAS,OAClC,GAAI,EAAiB,CAAI,GAAK,EAAQ,EAAG,SACzC,GAAI,EAAiB,CAAI,EAAG,OAAO,EAE5C,MAAU,MAAM,mCAAmC,CACvD,EAOM,EAAc,GAAkC,CAClD,IAAI,EAAM,EACV,GAAI,EAAM,kBAAmB,EAAM,EAAM,uBACpC,GAAI,EAAM,eAAgB,EAAM,EAAW,EAAM,cAAc,CAAC,CAAC,SACjE,GAAI,EAAM,WAAW,KAAM,CAC5B,IAAM,EAAQ,IAAI,IAAI,EAAM,UAAU,OAAO,CAAC,EAC1C,EAAU,EAAM,YACpB,KAAO,GAAW,EAAM,IAAI,CAAO,GAC/B,EAAM,EAAW,CAAO,CAAC,CAAC,IAC1B,EAAU,EAAI,WAEtB,CACA,MAAO,CAAC,QAAO,KAAG,CACtB,EAEM,GAAmB,EAAwB,IAC7C,EAAY,EAAQ,EAAM,GAAG,EAG3B,GAAiB,EAAkB,IAA4B,CACjE,GAAI,EAAK,WAAa,EAAG,UAAY,EAAK,WAAa,EAAG,SAAU,MAAO,GAC3E,GAAI,EAAK,WAAa,KAAK,WAAa,EAAK,WAAa,KAAK,aAC3D,OAAO,EAAK,YAAc,EAAG,UAEjC,GAAI,aAAgB,qBAAuB,aAAc,oBAAqB,CAC1E,IAAM,EAAe,EACf,EAAa,EACnB,GAAI,EAAa,YAAa,CAC1B,IAAM,EAAmB,EAAW,aAAe,EAAG,QAAQ,kBAC9D,MAAO,GAAQ,GAAoB,EAAc,EAAa,YAAa,CAA8B,EAC7G,CACA,OAAO,EAAK,YAAY,CAAE,CAC9B,CACA,GAAI,aAAgB,SAAW,aAAc,QAAS,CAClD,GAAI,EAAK,WAAW,SAAW,EAAG,WAAW,OAAQ,MAAO,GAC5D,IAAK,GAAM,CAAC,OAAM,WAAU,EAAK,WAC7B,GAAI,EAAG,aAAa,CAAI,IAAM,EAAO,MAAO,EAEpD,CAEA,IAAI,EAAY,EAAK,WACjB,EAAU,EAAG,WACjB,KAAO,GAAa,GAAS,CACzB,GAAI,CAAC,EAAc,EAAW,CAAO,EAAG,MAAO,GAC/C,EAAY,EAAW,CAAS,CAAC,CAAC,IAAI,YACtC,EAAU,EAAQ,WACtB,CACA,OAAO,IAAc,MAAQ,IAAY,IAC7C,EAEM,IAAwB,EAAwB,EAAmB,IAA8B,CACnG,GAAI,EAAM,QAAU,GAAU,EAAgB,EAAQ,CAAK,IAAM,EAAQ,OACzE,IAAI,EAAoB,EAAM,MAC9B,KAAO,GAAM,CACT,IAAM,EAAyB,EAAK,YAEpC,GADA,EAAO,aAAa,EAAM,CAAM,EAC5B,IAAS,EAAM,IAAK,MACxB,EAAO,CACX,CACJ,EAEM,IAAiB,EAAgB,IAAkC,CACrE,IAAM,EAAK,GAAM,aAAa,GACzB,GAAQ,aAAc,UAC3B,EAAG,aAAa,KAAM,CAAE,EACxB,EAAoB,GAAK,EAC7B,EAEM,IACF,EACA,EACA,IACwB,CACxB,IAAM,EAAiB,IAAI,QACrB,EAAiB,EAAa,IAAI,CAAM,CAAC,CAAC,OAAO,OAAO,EACxD,EAAe,EAAW,IAAI,CAAM,CAAC,CAAC,OAAO,OAAO,EAM1D,GAAI,EALwB,EAAe,QAAU,GAC9C,EAAe,SAAW,EAAa,QACvC,IAAI,IAAI,CAAc,CAAC,CAAC,OAAS,EAAe,QAChD,EAAe,MAAM,EAAK,IAAU,IAAQ,EAAa,EAAM,GAC/D,EAAe,MAAO,GAAQ,EAAa,SAAS,CAAG,CAAC,GACrC,OAAO,EAEjC,IAAM,EAAY,GAA6C,CAC3D,IAAM,EAAS,IAAI,IACb,EAAS,GAA2B,CAClC,EAAQ,IAAI,EAAO,IAAI,EAAQ,IAAK,EAAO,IAAI,EAAQ,EAAE,GAAK,GAAK,CAAC,CAC5E,EACA,IAAK,IAAM,KAAW,EAClB,EAAM,CAAO,EACb,EAAQ,iBAAiB,MAAM,CAAC,CAAC,QAAQ,CAAK,EAElD,OAAO,CACX,EACM,EAAe,EAAS,CAAY,EACpC,EAAa,EAAS,CAAU,EAChC,EAAS,IAAI,IACnB,IAAK,GAAM,CAAC,EAAI,KAAU,EAClB,IAAU,GAAK,EAAW,IAAI,CAAE,IAAM,GAAG,EAAO,IAAI,EAAI,OAAO,CAAE,CAAC,EAG1E,IAAM,EAAmB,GAA2B,CAC5C,MAAO,CAAO,EAClB,IAAK,IAAM,KAAc,EAAQ,iBAAiB,MAAM,EAAG,CACvD,IAAM,EAAQ,EAAO,IAAI,EAAW,EAAE,EACjC,KACL,GAAe,IAAI,EAAS,CAAK,EACjC,MADiC,CAErC,CACJ,EAGA,OAFA,EAAa,QAAQ,CAAe,EACpC,EAAW,QAAQ,CAAe,EAC3B,CACX,EAEM,GAAiB,EAAwB,CAAC,IAAM,CAClD,IAAM,EAAU,CACZ,IAAK,EAAQ,MAAS,GAAqB,EAAQ,aAAa,KAAK,GACrE,UAAW,EAAQ,WAAa,GAChC,SAAU,EAAQ,UAAY,EAC9B,QAAS,EAAQ,SAAW,EAC5B,SAAU,EAAQ,UAAY,EAC9B,QAAS,EAAQ,SAAW,EAC5B,OAAQ,EAAQ,QAAU,EAC1B,MAAO,EAAQ,OAAS,EACxB,mBAAoB,IACxB,EAEM,EAAU,GACZ,aAAgB,QAAU,EAAQ,IAAI,CAAI,EAAI,KAG5C,GAAuB,EAAY,IACrC,EAAK,WAAa,EAAG,UAClB,EAAK,WAAa,EAAG,UACrB,EAAO,CAAI,IAAM,EAAO,CAAE,GACzB,aAAgB,SACb,aAAc,SACd,EAAK,aAAa,QAAQ,IAAM,EAAG,aAAa,QAAQ,EAG7D,GACF,EACA,EACA,IACqE,CACrE,GAAI,EAAW,EAAQ,OAAQ,CAAM,EAAG,MAAO,CAAC,SAAU,GAAO,KAAM,IAAI,EAC3E,IAAM,EAAQ,EAAO,UAAU,EAAI,EAGnC,OAFA,EAAO,aAAa,EAAO,CAAM,EACjC,EAAQ,MAAM,CAAK,EACZ,CAAC,SAAU,GAAM,KAAM,CAAmB,CACrD,EAEM,EAAc,GAChB,CAAI,EAAW,EAAQ,SAAU,CAAI,IACrC,EAAK,YAAY,YAAY,CAAI,EACjC,EAAQ,QAAQ,CAAI,EACb,IAGL,EAAoB,GACtB,CAAI,EAAW,EAAQ,SAAU,EAAM,KAAK,IAC5C,EAAM,MAAM,YAAY,YAAY,EAAM,KAAK,EAC/C,EAAQ,QAAQ,EAAM,KAAK,EACpB,IAGL,GAAe,EAAY,IAAsB,CACnD,GAAI,EAAW,EAAQ,SAAU,CAAI,EAAG,MAAO,GAC/C,IAAM,EAAQ,EAAG,UAAU,EAAI,EAK/B,MAJA,CAAI,EAAW,EAAQ,OAAQ,CAAK,IACpC,EAAK,YAAY,aAAa,EAAO,CAAI,EACzC,EAAQ,QAAQ,CAAI,EACpB,EAAQ,MAAM,CAAK,EACZ,GACX,EAEM,GAAmB,EAA4B,IAAyB,CAE1E,GADI,EAAK,kBACJ,EAAK,YAAc,CAAE,EAAkB,YACpC,CAAC,EAAK,YAAe,EAAkB,WAAa,MAAO,GAEnE,IAAI,EAAU,GACR,EAAW,MAAM,KAAK,EAAK,UAAU,EAC3C,IAAK,IAAI,EAAQ,EAAS,OAAS,EAAG,GAAS,EAAG,IAAY,CAC1D,IAAM,EAAO,EAAS,EAAM,CAAE,KAC1B,EAAG,aAAa,CAAI,IACpB,IAAS,QAAU,aAAgB,mBAAqB,EAAK,KAAM,EAAK,MAAM,EAC7E,EAAK,gBAAgB,CAAI,EAC9B,EAAU,GACd,CACA,IAAM,EAAW,MAAM,KAAK,EAAG,UAAU,EACzC,IAAK,IAAI,EAAQ,EAAS,OAAS,EAAG,GAAS,EAAG,IAAY,CAC1D,IAAM,EAAY,EAAS,GACrB,CAAC,OAAM,SAAS,EAClB,EAAK,aAAa,CAAI,IAAM,IAChC,GAAqB,EAAM,CAAS,EACpC,EAAU,GACd,CACA,OAAO,CACX,EAEI,EAEE,GAAa,EAAkB,EAAgB,IAAoC,CACrF,GAAI,aAAgB,SAAW,EAAK,aAAa,sBAAsB,EAAG,MAAO,GACjF,GAAI,EAAoB,EAAM,CAAE,EAAG,OAAO,EAAY,EAAM,CAAE,EAC9D,GAAI,IAAY,0BACT,EAAK,WAAa,KAAK,cACvB,EAAc,EAAM,CAAE,EAAG,MAAO,GAEvC,IAAI,EAAe,GACf,EAAe,GACf,EAAO,GAgBX,GAZA,EAAQ,SACJ,EACA,MACM,CAAE,EAAe,EAAM,MACvB,CAAE,EAAO,EAAM,MACf,CAAE,EAAe,EAAM,EARd,GAA6C,CAC5D,EAAQ,mBAAqB,CACjC,CAQA,EACI,GAIA,EAAc,EAAM,CAAE,EAAG,MAAO,GAEpC,IAAI,EAAU,GAkBd,OAjBI,EAAK,WAAa,KAAK,cAAgB,IACvC,EAAe,UAAU,EAAiB,CAAa,EACnD,EAAK,aAAe,EAAG,cACvB,EAAU,EAAM,EAAK,YAAa,EAAG,WAAW,GAAK,IAIzD,EAAG,WAAa,KAAK,WAAa,EAAG,WAAa,KAAK,aACnD,EAAK,YAAc,EAAG,YAC1B,EAAK,UAAY,EAAG,UACpB,EAAQ,QAAQ,EAAM,CAAE,EACjB,KAGN,IAAc,EAAU,EAAgB,EAA8B,CAAa,GAAK,GACxF,IAAc,EAAU,EAAc,EAA2B,CAAuB,GAAK,GAC9F,GAAS,EAAQ,QAAQ,EAAM,CAAE,EAC9B,EACX,EAEM,GAAS,EAAkB,IAC7B,EAAU,EAAM,EAAI,wBAAwB,EA4GhD,MAtGA,IAAiB,EAAsB,IAAgC,CACnE,IAAM,EAAe,MAAM,KAAK,EAAK,QAAQ,EAEvC,EAAiB,GAA8B,EADlC,MAAM,KAAK,EAAG,QACkC,EAAY,CAAM,EAE/E,EAAY,GACd,EAAO,EAAO,CAAI,GAAK,EAAe,IAAI,CAAI,EAAI,KAEhD,EAAQ,IAAI,IAClB,IAAK,IAAM,KAAW,EAAc,CAChC,IAAM,EAAM,EAAS,CAAO,EACxB,GAAK,EAAM,IAAI,EAAK,CAAqB,CACjD,CAEA,IAAI,EAAU,GACV,EAAc,EAAK,WACnB,EAAY,EAAG,WAEnB,SAAU,KAAO,GAAW,CAGxB,GAFA,GAAc,EAAW,CAAW,EAEhC,EAAQ,mBAAoB,CAC5B,IAAM,EAAW,CAAC,GAAe,EAAQ,mBAAmB,CAAW,EACjE,EAAS,EAAQ,mBAAmB,CAAS,EACnD,GAAI,GAAY,EAAQ,EAAQ,mBAAqB,SAChD,CACG,CAAC,GAAY,IAAa,EAAc,EAAgB,EAAM,EAAW,CAAW,CAAC,GACpF,IAAQ,EAAY,EAAY,EAAI,CAAS,GAClD,QACJ,CACJ,CAEA,GAAI,CAAC,EAAa,CAEd,EADiB,EAAiB,EAAM,EAAW,IACzC,CAAA,CAAS,UAAY,EAC/B,EAAY,EAAY,EAAI,CAAS,EACrC,QACJ,CAEA,GAAI,EAAmB,CAAW,GAAK,EAAmB,CAAS,EAAG,CAClE,IAAM,EAAU,EAAe,EAAM,CAAW,EAC1C,EAAQ,EAAe,EAAI,CAAS,EAC1C,EAAU,EAAc,IAAI,EAAM,EAAwB,CAAO,EAAG,IAAI,EAAM,EAAsB,CAAK,CAAC,GAAK,EAC/G,EAAc,EAAY,EAAM,CAAO,EACvC,EAAY,EAAY,EAAI,CAAK,EACjC,QACJ,CAAO,CACH,GAAI,EAAQ,WACL,aAAuB,SACvB,CAAC,EAAY,YAAY,CAAS,EAAG,CACxC,IAAI,EAAY,EAAY,EAAI,CAAS,EACzC,KAAO,GAAW,CACd,GAAI,aAAqB,SAAW,EAAY,YAAY,CAAS,EAAG,CACpE,IAAM,EAAW,EAAiB,EAAM,EAAW,CAAW,EAC9D,GAAI,CAAC,EAAS,SAAU,CACpB,EAAY,EAAY,EAAI,CAAS,EACrC,SAAS,QACb,CACA,EAAc,EAAS,KACvB,EAAU,GACV,KACJ,CACA,EAAY,EAAY,EAAI,CAAS,CACzC,CACJ,CAEA,IAAM,EAAQ,EAAS,CAAS,EAC1B,EAAU,EAAS,CAAW,EACpC,GAAI,IAAU,EAAS,CACnB,IAAM,EAAa,EAAQ,EAAM,IAAI,CAAK,EAAI,IAAA,GAC9C,GAAI,EACA,GAAqB,EAAM,EAAW,CAAU,EAAG,CAAW,EAC9D,EAAc,EACd,EAAU,QACP,GAAI,GAAS,EAAS,CACzB,IAAM,EAAW,EAAiB,EAAM,EAAW,CAAW,EAC9D,GAAI,CAAC,EAAS,SAAU,CACpB,EAAY,EAAY,EAAI,CAAS,EACrC,QACJ,CACA,EAAc,EAAS,KACvB,EAAU,EACd,CACJ,CAEA,IAAM,EAAY,EAAgB,EAAM,EAAW,CAAW,CAAC,EAC/D,EAAU,EAAM,EAAa,CAAS,GAAK,EAC3C,EAAc,CAClB,CAEA,EAAY,EAAY,EAAI,CAAS,CACzC,CAEA,KAAO,GAAa,CAChB,IAAM,EAAQ,EAAW,CAAW,EAC9B,EAAQ,EAAgB,EAAM,CAAK,EACzC,GAAW,EAAM,MAAQ,EAAM,MAAQ,EAAW,CAAW,EAAI,EAAiB,CAAK,IAAM,EAC7F,EAAc,CAClB,CACA,OAAO,CACX,EAEO,CAAC,gBAAe,WA1GJ,EAAkB,IACjC,EAAU,EAAM,EAAI,iBAAiB,CAyGT,CACpC,EAEM,IAAS,EAAe,EAA0B,EAAwB,CAAC,IAAe,CAC5F,IAAM,EAAM,OAAO,GAAW,SAAW,GAAc,CAAM,EAAI,EAC3D,EAAS,EAMf,OALI,GAAgB,kBAAoB,CAAC,EAAO,eAC5C,EAAG,aAAe,EAAe,iBAAiB,CAAM,EACpD,EAAG,cAAc,EAAe,UAAU,EAAQ,CAAE,GAE5D,EAAc,CAAO,CAAC,CAAC,UAAU,EAAQ,CAAE,EACpC,CACX,EAEM,IACF,EACA,EACA,EACA,EAAwB,CAAC,IAClB,CACP,IAAM,EAAgB,EAAY,WAC5B,EAAc,OAAO,GAAW,cACzB,CACL,IAAM,EAAY,SAAS,cAAc,KAAK,EAE9C,OADA,EAAU,mBAAmB,YAAa,CAAM,EACzC,CACX,EAAA,CAAG,EACD,EACA,EAAU,SAAS,cAAc,eAAe,EAChD,EAAQ,SAAS,cAAc,aAAa,EAClD,EAAY,aAAa,EAAS,EAAY,UAAU,EACxD,EAAY,YAAY,CAAK,EACzB,GAAgB,mBAChB,EAA4B,aAAe,EAAe,iBAAiB,CAAa,EACnF,EAA2B,cAAc,EAAe,UAAU,EAAqC,CAAW,GAE3H,EAAc,CAAO,CAAC,CAAC,cACnB,IAAI,EAAM,EAAa,CAAS,EAChC,IAAI,EAAM,EAAS,CAAK,CAC5B,CACJ,EAEM,GAAgB,GAAwC,CAC1D,IAAM,EAAW,EACjB,EAAiB,EACjB,EAAS,MAAQ,GACjB,EAAS,aAAe,EAC5B,ECniBM,EAAa,IAAI,QAEjB,GAAkC,GAAyB,CACzD,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAC7B,EAAkB,EAAe,QAAQ,EACzC,EAAe,OAAO,EAAK,EAC3B,EAAwB,CAAc,EACtC,EAAgB,CAAc,EAC9B,EAA4B,CAAc,EAC1C,GAAmB,CAAc,EACjC,GAAgB,EAChB,EAAyB,CAAc,EACvC,EAAe,CAAc,EACjC"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./dom-DiTFTWeR.js";import{t as n}from"./capability-motion-B32HePGn.js";import{n as r}from"./morph-Cq3V_23_.js";import{c as i,f as a,l as o,n as s,t as c}from"./codecs-CQ7olTJL.js";import{i as l,t as u}from"./alpine-machine-CE2UN4Qu.js";import{n as d}from"./dom-invalidation-Dw6clnS4.js";import{n as f}from"./focus-pk_lz9sg.js";import{t as p}from"./cleanup-manager-D9QiZF_Q.js";import{n as m}from"./alpine-data-Dvc_bXq6.js";import{i as h,t as g}from"./capability-anchor-lhqk7hfo.js";import{n as _,t as v}from"./styles-CX2j92ex.js";import{t as y}from"./merge-bindings-BtqW3UgP.js";import{t as b}from"./machine-CNnHDbyo.js";import{t as x}from"./semantic-observer-CIoriWtV.js";import{I as S,L as C,d as w,t as T,z as E}from"./common-CBK89mIt.js";import{o as D}from"./capability-shortcut-DZUQHJ3A.js";import{n as O,t as k}from"./controller-C8xqwkr0.js";var A={side:o(C,`bottom`),align:o(T,`center`),offset:i.clamp(-100,100).default(0),gap:i.clamp(0,50).default(8),openDelay:i.clamp(0,5e3).default(400),closeDelay:i.clamp(0,5e3).default(150),color:o([`neutral`,`accent`,`success`,`warning`,`danger`],`neutral`),variant:o([`surface`,`soft`,`solid`],`surface`),surface:o(E,`2`),elevation:o(w,`4`),disabled:s,class:a},j={side:c(A.side,`ui-tooltip-side`),align:c(A.align,`ui-tooltip-align`),offset:c(A.offset,`ui-tooltip-offset`),gap:c(A.gap,`ui-tooltip-gap`),openDelay:c(A.openDelay,`ui-tooltip-open-delay`),closeDelay:c(A.closeDelay,`ui-tooltip-close-delay`),color:c(A.color,`ui-tooltip-color`),variant:c(A.variant,`ui-tooltip-variant`),surface:c(A.surface,`ui-tooltip-surface`),elevation:c(A.elevation,`ui-tooltip-elevation`),disabled:c(A.disabled,`ui-tooltip-disabled`)},M=({context:e})=>e.transition,N=[l({name:`opening`,state:`opening`,project:M,onDone:`OPENING_DONE`,onError:`OPENING_ERROR`}),l({name:`closing`,state:`closing`,project:M,onDone:`CLOSING_DONE`,onError:`CLOSING_ERROR`})],P=e=>{let t=e.reason;return t===`focus`||t===`escape`||t===`activation`||t===`scroll`||t===`blur`||t===`disabled`||t===`replacement`?t:`pointer`},F=(e,t)=>b({initial:`closed`,states:{closed:{tags:[`closed`],on:{OPEN:{target:`opening`,guard:`canOpen`,reduce:`transition`,effects:`prepareOpen`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`syncProps`}}},opening:{tags:[`visible`,`expanded`,`transitioning`],on:{OPENING_DONE:{target:`open`,effects:`finishOpen`},OPENING_ERROR:{target:`open`,effects:`finishOpen`},CLOSE:{target:`closing`,reduce:`transition`,effects:`prepareClose`},PROPS_CHANGED:[{target:`closing`,guard:`becomesDisabled`,reduce:`replacePropsDisabled`,effects:[`syncProps`,`prepareClose`]},{reduce:`replaceProps`,effects:`syncProps`}]}},open:{tags:[`visible`,`expanded`,`open`],on:{CLOSE:{target:`closing`,reduce:`transition`,effects:`prepareClose`},PROPS_CHANGED:[{target:`closing`,guard:`becomesDisabled`,reduce:`replacePropsDisabled`,effects:[`syncProps`,`prepareClose`]},{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`,reduce:`transition`,effects:`prepareOpen`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`syncProps`}}}}},{context:{transition:{reason:`pointer`,instant:!1}},props:e,reducers:{transition:({context:e,props:t,event:n})=>({context:{transition:{reason:P(n),instant:n.instant===!0}},props:t}),replaceProps:({context:e,props:t,event:n})=>({context:e,props:n.props??t}),replacePropsDisabled:({context:e,props:t,event:n})=>({context:{transition:{reason:`disabled`,instant:!0}},props:n.props??t})},guards:{canOpen:({props:e})=>!e.disabled,becomesDisabled:({event:e})=>e.props?.disabled===!0},effects:t}),I=v({definition:{component:`ui.tooltip`,parts:{root:{base:`contents`},content:{base:[S,`pointer-events-auto min-h-control-md max-w-72 auto-cols-max grid-flow-col items-center gap-2 rounded-overlay-sm px-2 py-1`,`font-body text-1 [font-weight:var(--font-weight-normal)]`,`data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0`],variants:{color:{neutral:``,accent:``,success:``,warning:``,danger:``},variant:{surface:``,soft:``,solid:``}},defaults:{color:`neutral`,variant:`surface`}},shortcut:{base:`ml-1 inline-flex items-center gap-1 text-[var(--ui-semantic-surface-ink-muted)]`}}}}),L=new WeakMap,R=e=>{let t=L.get(e);return t||(t={active:null},L.set(e,t)),t},z=(e,t)=>{let n=new Set((e.getAttribute(`aria-describedby`)??``).split(/\s+/).filter(Boolean));n.add(t),e.setAttribute(`aria-describedby`,[...n].join(` `))},B=(e,t)=>{let n=(e.getAttribute(`aria-describedby`)??``).split(/\s+/).filter(e=>e&&e!==t);n.length?e.setAttribute(`aria-describedby`,n.join(` `)):e.removeAttribute(`aria-describedby`)},V=({owner:n,trigger:i,content:a,schema:o,syncShortcut:s})=>{let c=new p,l=null,d=null,m=null,g=``,v=!1,y=!1,b=e=>{let t=e===`open`?d:m;t!==null&&clearTimeout(t),e===`open`?d=null:m=null},S=()=>E.getSnapshot().props,C=()=>E.hasTag(`visible`),w=()=>{let e=S(),t=a();t.dataset.state=E.hasTag(`expanded`)?`open`:`closed`,t.setAttribute(`data-ui-semantic-surface`,``),t.dataset.color=e.color,t.dataset.variant=e.variant,t.dataset.uiSurface=e.surface,t.dataset.uiElevation=e.elevation,t.className=_({part:I.parts.content,props:e,className:t.dataset.class}),s?.(i().dataset.uiTooltipShortcut??``),l?.sync()},T={prepareOpen(){a().hidden=!1,l?.open(),w()},finishOpen(){w(),e({el:n(),name:`ui:open`})},prepareClose(){w()},finishClose:()=>{l?.close(),a().hidden=!0,w();let t=R(n().ownerDocument);t.active===j&&(t.active=null),e({el:n(),name:`ui:close`})},syncProps(){w(),S().disabled&&C()&&j.close(`disabled`,!0)}},E=u({schema:o,hooks:N,createMachine:({props:e})=>F(e,T)}),D=(e,t=!1)=>{if(b(`open`),b(`close`),S().disabled||E.hasTag(`expanded`))return;let r=R(n().ownerDocument),i=r.active!==null&&r.active!==j;r.active&&r.active!==j&&r.active.close(`replacement`,!0),r.active=j,E.send({type:`OPEN`,reason:e,instant:t||i})},O=(e,t=!1)=>{b(`open`),b(`close`),C()&&E.send({type:`CLOSE`,reason:e,instant:t})},k=()=>{if(b(`close`),C()||S().disabled)return;let e=R(n().ownerDocument).active?0:S().openDelay;b(`open`),d=setTimeout(()=>D(`pointer`,e===0),e)},A=()=>{b(`open`),C()&&(b(`close`),m=setTimeout(()=>O(`pointer`),S().closeDelay))},j={bridge:E,connect(e){E.connect(n(),e),g=a().id||`ui-tooltip-${crypto.randomUUID()}`,a().id=g,a().setAttribute(`role`,`tooltip`),a().setAttribute(`popover`,`manual`),a().setAttribute(`data-ui-tooltip-content`,``),a().hidden=!0,i().setAttribute(`data-ui-tooltip-trigger`,``),z(i(),g),r(i(),`aria-describedby`,`data-ui-tooltip-trigger`),l=h({reference:i,floating:a,position:()=>S().side,align:()=>S().align,gap:()=>S().gap,offset:()=>S().offset}),w(),t({target:i(),event:`pointerenter`,cleanup:c,handler:()=>{v=!0,k()}}),t({target:i(),event:`pointermove`,handler:k,cleanup:c}),t({target:i(),event:`pointerleave`,cleanup:c,handler:()=>{v=!1,y||A()}}),t({target:a(),event:`pointerenter`,cleanup:c,handler:()=>{y=!0,b(`close`)}}),t({target:a(),event:`pointerleave`,cleanup:c,handler:()=>{y=!1,v||A()}}),t({target:i(),event:`focusin`,cleanup:c,handler:()=>{queueMicrotask(()=>{let e=i();e.ownerDocument.activeElement===e&&!f(e)&&e.matches(`:focus-visible`)&&D(`focus`,!0)})}}),t({target:i(),event:`focusout`,cleanup:c,handler:()=>{!v&&!y&&O(`blur`,!0)}}),t({target:i(),event:`pointerdown`,handler:()=>O(`activation`,!0),cleanup:c}),t({target:i(),event:`click`,handler:()=>O(`activation`,!0),cleanup:c}),t({target:n().ownerDocument,event:`keydown`,cleanup:c,handler:e=>{e instanceof KeyboardEvent&&e.key===`Escape`&&C()&&O(`escape`,!0)}}),t({target:n().ownerDocument,event:`scroll`,options:{capture:!0},cleanup:c,handler:()=>{C()&&O(`scroll`,!0)}}),c.add(x({targets:i(),read:()=>i().dataset.uiTooltipShortcut??``,onChange:w,observer:{attributes:!0,attributeFilter:[`data-ui-tooltip-shortcut`]}}))},close:O,sync:w,destroy(){b(`open`),b(`close`),c.run();let e=R(n().ownerDocument);e.active===j&&(e.active=null),l?.destroy(),l=null,B(i(),g),i().removeAttribute(`data-ui-tooltip-trigger`),E.disconnect()}};return j},H=()=>{let e=null,t=null,n=()=>{if(!e)throw Error(`Tooltip has not been initialized.`);return e},r=()=>{let e=n().querySelector(`:scope > [data-ui-tooltip-content]`);if(!(e instanceof HTMLElement))throw Error(`Tooltip requires ui.tooltip.content.`);return e},i=()=>{let e=Array.from(n().children).find(e=>e instanceof HTMLElement&&e!==r());if(!(e instanceof HTMLElement))throw Error(`Tooltip requires an interactive trigger before its content.`);return e};return{...u({schema:A,hooks:N,createMachine:({props:e})=>F(e,{prepareOpen(){},finishOpen(){},prepareClose(){},finishClose(){},syncProps(){}})}),init(){e=this.$el,t=V({owner:n,trigger:i,content:r,schema:A}),t.connect(this.snapshot)},destroy(){t?.destroy(),t=null,e=null},get root(){return y({inputs:[_({part:I.parts.root,props:this.snapshot.current?.props??{}}),{"data-ui-tooltip-root":``}]})},get content(){return{"data-ui-tooltip-content":``}}}},U=e=>{e.addInitSelector(()=>`[x-ui-tooltip]`),e.directive(`ui-tooltip`,e.skipDuringClone((e,{expression:t},n)=>{if(!(e instanceof HTMLElement))return;let i=e.ownerDocument.createElement(`div`),a=e.ownerDocument.createElement(`span`);a.setAttribute(`data-ui-tooltip-label`,``),i.append(a);let o=e.ownerDocument.createElement(`span`);o.setAttribute(`data-ui-keybinding`,``),o.dataset.variant=`outline`,o.setAttribute(`aria-hidden`,`true`),o.className=_({part:O.parts.root,className:_({part:I.parts.shortcut})}),i.append(o);let s=k(o);e.insertAdjacentElement(`afterend`,i);let c=V({owner:()=>e,trigger:()=>e,content:()=>i,schema:j,syncShortcut:e=>s.setValue(e)});c.connect();let l=d(i,{invalidateDom(){e.isConnected&&(i.previousElementSibling!==e&&e.insertAdjacentElement(`afterend`,i),z(e,i.id),c.sync())}});r(e,`data-ui-tooltip-disabled`,`data-ui-tooltip-shortcut`);let u=n.evaluateLater(t);n.effect(()=>u(t=>{let n=typeof t==`string`?t.trim():``;a.textContent=n,e.toggleAttribute(`data-ui-tooltip-disabled`,!n),c.sync()})),n.cleanup(()=>{l(),c.destroy(),s.destroy(),i.remove()})})).before(`ui-transition`)},W=e=>{m(`UiTooltip`,H)(e),U(e)},G=new WeakSet,K=e=>{G.has(e)||(G.add(e),n(e),g(e),D(e),W(e))};export{H as n,U as r,K as t};
2
+ //# sourceMappingURL=entry.generated-7hdXmBLE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.generated-7hdXmBLE.js","names":[],"sources":["../../../../../../../../client/src/components/tooltip/contract.ts","../../../../../../../../client/src/components/tooltip/machine.ts","../../../../../../../../client/src/components/tooltip/styles.ts","../../../../../../../../client/src/components/tooltip/index.ts","../../../../../../../../client/src/components/tooltip/entry.generated.ts"],"sourcesContent":["import {attribute, bool, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n ALIGNMENTS,\n ELEVATION_REFERENCES,\n POSITIONS,\n SURFACE_REFERENCES,\n type Alignment,\n type ElevationReference,\n type Position,\n type SurfaceReference,\n} from '../common';\n\nconst TOOLTIP_COLORS = ['neutral', 'accent', 'success', 'warning', 'danger'] as const;\nconst TOOLTIP_VARIANTS = ['surface', 'soft', 'solid'] as const;\n\nconst tooltipSchema = {\n side: oneOf(POSITIONS, 'bottom' as Position),\n align: oneOf(ALIGNMENTS, 'center' as Alignment),\n offset: number.clamp(-100, 100).default(0),\n gap: number.clamp(0, 50).default(8),\n openDelay: number.clamp(0, 5000).default(400),\n closeDelay: number.clamp(0, 5000).default(150),\n color: oneOf(TOOLTIP_COLORS, 'neutral'),\n variant: oneOf(TOOLTIP_VARIANTS, 'surface'),\n surface: oneOf(SURFACE_REFERENCES, '2' as SurfaceReference),\n elevation: oneOf(ELEVATION_REFERENCES, '4' as ElevationReference),\n disabled: bool,\n class: string,\n};\n\nconst tooltipDirectiveSchema = {\n side: attribute(tooltipSchema.side, 'ui-tooltip-side'),\n align: attribute(tooltipSchema.align, 'ui-tooltip-align'),\n offset: attribute(tooltipSchema.offset, 'ui-tooltip-offset'),\n gap: attribute(tooltipSchema.gap, 'ui-tooltip-gap'),\n openDelay: attribute(tooltipSchema.openDelay, 'ui-tooltip-open-delay'),\n closeDelay: attribute(tooltipSchema.closeDelay, 'ui-tooltip-close-delay'),\n color: attribute(tooltipSchema.color, 'ui-tooltip-color'),\n variant: attribute(tooltipSchema.variant, 'ui-tooltip-variant'),\n surface: attribute(tooltipSchema.surface, 'ui-tooltip-surface'),\n elevation: attribute(tooltipSchema.elevation, 'ui-tooltip-elevation'),\n disabled: attribute(tooltipSchema.disabled, 'ui-tooltip-disabled'),\n};\n\ntype TooltipProps = SchemaToProps<typeof tooltipSchema>;\ntype TooltipDirectiveProps = SchemaToProps<typeof tooltipDirectiveSchema>;\ntype TooltipColor = typeof TOOLTIP_COLORS[number];\ntype TooltipVariant = typeof TOOLTIP_VARIANTS[number];\n\nexport {\n TOOLTIP_COLORS,\n TOOLTIP_VARIANTS,\n tooltipDirectiveSchema,\n tooltipSchema,\n};\nexport type {TooltipColor, TooltipDirectiveProps, TooltipProps, TooltipVariant};\n","import {createMachine, type Machine, type MachineEventObject} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {TooltipProps} from './contract';\n\ntype TooltipReason = 'pointer' | 'focus' | 'escape' | 'activation' | 'scroll' | 'blur' | 'disabled' | 'replacement';\ntype TooltipContext = {transition: {reason: TooltipReason; instant: boolean}};\ntype TooltipTransitionData = {reason: TooltipReason; instant: boolean};\ntype TooltipMachineEffects = {\n prepareOpen(): void;\n finishOpen(): void;\n prepareClose(): void;\n finishClose(): void;\n syncProps(): void;\n};\n\nconst transitionData = ({context}: {context: TooltipContext}): TooltipTransitionData => context.transition;\nconst openingHook = defineHook({\n name: 'opening', state: 'opening', project: transitionData, onDone: 'OPENING_DONE', onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<TooltipContext, TooltipProps, TooltipTransitionData, 'opening'>);\nconst closingHook = defineHook({\n name: 'closing', state: 'closing', project: transitionData, onDone: 'CLOSING_DONE', onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<TooltipContext, TooltipProps, TooltipTransitionData, 'closing'>);\nconst tooltipHooks = [openingHook, closingHook] as const;\n\nconst reasonFrom = (event: MachineEventObject): TooltipReason => {\n const reason = event.reason;\n return reason === 'focus' || reason === 'escape' || reason === 'activation' || reason === 'scroll'\n || reason === 'blur' || reason === 'disabled' || reason === 'replacement' ? reason : 'pointer';\n};\n\nconst createTooltipMachine = (\n props: TooltipProps,\n effects: TooltipMachineEffects,\n): Machine<TooltipContext, TooltipProps> => createMachine<TooltipContext, TooltipProps>({\n initial: 'closed',\n states: {\n closed: {tags: ['closed'], on: {\n OPEN: {target: 'opening', guard: 'canOpen', reduce: 'transition', effects: 'prepareOpen'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'},\n }},\n opening: {tags: ['visible', 'expanded', 'transitioning'], on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', reduce: 'transition', effects: 'prepareClose'},\n PROPS_CHANGED: [\n {target: 'closing', guard: 'becomesDisabled', reduce: 'replacePropsDisabled', effects: ['syncProps', 'prepareClose']},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n }},\n open: {tags: ['visible', 'expanded', 'open'], on: {\n CLOSE: {target: 'closing', reduce: 'transition', effects: 'prepareClose'},\n PROPS_CHANGED: [\n {target: 'closing', guard: 'becomesDisabled', reduce: 'replacePropsDisabled', effects: ['syncProps', 'prepareClose']},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n }},\n closing: {tags: ['visible', 'transitioning'], on: {\n CLOSING_DONE: {target: 'closed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'closed', effects: 'finishClose'},\n OPEN: {target: 'opening', guard: 'canOpen', reduce: 'transition', effects: 'prepareOpen'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'},\n }},\n },\n}, {\n context: {transition: {reason: 'pointer', instant: false}},\n props,\n reducers: {\n transition: ({context, props: currentProps, event}) => ({\n context: {transition: {reason: reasonFrom(event), instant: event.instant === true}},\n props: currentProps,\n }),\n replaceProps: ({context, props: currentProps, event}) => ({\n context,\n props: (event.props as TooltipProps | undefined) ?? currentProps,\n }),\n replacePropsDisabled: ({context, props: currentProps, event}) => ({\n context: {transition: {reason: 'disabled', instant: true}},\n props: (event.props as TooltipProps | undefined) ?? currentProps,\n }),\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n becomesDisabled: ({event}) => (event.props as TooltipProps | undefined)?.disabled === true,\n },\n effects,\n});\n\nexport {createTooltipMachine, tooltipHooks};\nexport type {TooltipContext, TooltipMachineEffects, TooltipReason, TooltipTransitionData};\n","import {defineStyles} from '../../runtime';\nimport {POPOVER_GEOMETRY_CLASSES} from '../common';\n\nconst tooltipStyles = defineStyles({definition: {\n component: 'ui.tooltip',\n parts: {\n root: {base: 'contents'},\n content: {\n base: [\n POPOVER_GEOMETRY_CLASSES,\n 'pointer-events-auto min-h-control-md max-w-72 auto-cols-max grid-flow-col items-center gap-2 rounded-overlay-sm px-2 py-1',\n 'font-body text-1 [font-weight:var(--font-weight-normal)]',\n 'data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0',\n ],\n variants: {\n color: {neutral: '', accent: '', success: '', warning: '', danger: ''},\n variant: {surface: '', soft: '', solid: ''},\n },\n defaults: {color: 'neutral', variant: 'surface'},\n },\n shortcut: {base: 'ml-1 inline-flex items-center gap-1 text-[var(--ui-semantic-surface-ink-muted)]'},\n },\n}});\n\nexport {tooltipStyles};\n\nexport const styles = [tooltipStyles] as const;\n","import type Alpine from 'alpinejs';\n\nimport {\n createAlpineMachine,\n defineAlpineData,\n type SchemaToProps,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {createAnchoredPopoverSurface, type AnchoredPopoverSurface} from '@client/runtime/anchored-popover';\nimport {CleanupManager} from '@client/runtime/cleanup-manager';\nimport type {CodecFn} from '@client/runtime/codecs';\nimport {registerDomInvalidationOwner} from '@client/runtime/dom-invalidation';\nimport {isFocusIndicatorSuppressed} from '@client/runtime/focus';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {observeSemanticChanges} from '@client/runtime/semantic-observer';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, dispatch} from '@client/utils';\nimport {createKeybindingController} from '../keybinding/controller';\nimport {keybindingStyles} from '../keybinding/styles';\nimport {\n tooltipDirectiveSchema,\n type TooltipDirectiveProps,\n type TooltipProps,\n tooltipSchema,\n} from './contract';\nimport {\n createTooltipMachine,\n tooltipHooks,\n type TooltipContext,\n type TooltipReason,\n} from './machine';\nimport {tooltipStyles} from './styles';\n\ntype TooltipTransitionName = (typeof tooltipHooks)[number]['name'];\ntype TooltipTransition<TName extends TooltipTransitionName = TooltipTransitionName> = TransitionForHook<\n Extract<(typeof tooltipHooks)[number], {name: TName}>,\n HTMLElement\n>;\ntype PopoverElement = HTMLElement & {showPopover(): void; hidePopover(): void};\ntype TooltipSchema = Record<string, CodecFn<unknown>>;\ntype TooltipBridge = ReturnType<typeof createAlpineMachine<TooltipContext, typeof tooltipSchema, typeof tooltipHooks>>;\n\ntype TooltipController = {\n bridge: TooltipBridge;\n connect(snapshot?: {current: TooltipBridge['snapshot']['current']}): void;\n destroy(): void;\n sync(): void;\n close(reason: TooltipReason, instant?: boolean): void;\n};\n\ntype TooltipWarmStore = {active: TooltipController | null};\nconst warmStores = new WeakMap<Document, TooltipWarmStore>();\nconst warmStore = (document: Document): TooltipWarmStore => {\n let store = warmStores.get(document);\n if (!store) {\n store = {active: null};\n warmStores.set(document, store);\n }\n return store;\n};\n\nconst appendDescription = (trigger: HTMLElement, id: string): void => {\n const tokens = new Set((trigger.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\n tokens.add(id);\n trigger.setAttribute('aria-describedby', [...tokens].join(' '));\n};\n\nconst removeDescription = (trigger: HTMLElement, id: string): void => {\n const tokens = (trigger.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter((token) => token && token !== id);\n if (tokens.length) trigger.setAttribute('aria-describedby', tokens.join(' '));\n else trigger.removeAttribute('aria-describedby');\n};\n\nconst createTooltipController = <TSchema extends TooltipSchema>({\n owner,\n trigger,\n content,\n schema,\n syncShortcut,\n}: {\n owner: () => HTMLElement & Alpine.ElementWithXAttributes;\n trigger: () => HTMLElement;\n content: () => PopoverElement;\n schema: TSchema;\n syncShortcut?: (value: string) => void;\n}): TooltipController => {\n const cleanup = new CleanupManager();\n let popover: AnchoredPopoverSurface | null = null;\n let openTimer: ReturnType<typeof setTimeout> | null = null;\n let closeTimer: ReturnType<typeof setTimeout> | null = null;\n let describedById = '';\n let pointerOnTrigger = false;\n let pointerOnContent = false;\n\n const clearTimer = (timer: 'open' | 'close'): void => {\n const current = timer === 'open' ? openTimer : closeTimer;\n if (current !== null) clearTimeout(current);\n if (timer === 'open') openTimer = null;\n else closeTimer = null;\n };\n const props = (): Readonly<TooltipProps> => bridge.getSnapshot().props as TooltipProps;\n const visible = (): boolean => bridge.hasTag('visible');\n const syncSurface = (): void => {\n const value = props();\n const surface = content();\n surface.dataset.state = bridge.hasTag('expanded') ? 'open' : 'closed';\n surface.setAttribute('data-ui-semantic-surface', '');\n surface.dataset.color = value.color;\n surface.dataset.variant = value.variant;\n surface.dataset.uiSurface = value.surface;\n surface.dataset.uiElevation = value.elevation;\n surface.className = resolveStyle({\n part: tooltipStyles.parts.content,\n props: value,\n className: surface.dataset.class,\n });\n syncShortcut?.(trigger().dataset.uiTooltipShortcut ?? '');\n popover?.sync();\n };\n const finishClose = (): void => {\n popover?.close();\n content().hidden = true;\n syncSurface();\n const store = warmStore(owner().ownerDocument);\n if (store.active === controller) store.active = null;\n dispatch({el: owner(), name: 'ui:close'});\n };\n const effects = {\n prepareOpen(): void {\n content().hidden = false;\n popover?.open();\n syncSurface();\n },\n finishOpen(): void {\n syncSurface();\n dispatch({el: owner(), name: 'ui:open'});\n },\n prepareClose(): void { syncSurface(); },\n finishClose,\n syncProps(): void {\n syncSurface();\n if (props().disabled && visible()) controller.close('disabled', true);\n },\n };\n const machineBridge = createAlpineMachine({\n schema,\n hooks: tooltipHooks,\n createMachine: ({props: machineProps}) => createTooltipMachine(machineProps as TooltipProps, effects) as never,\n });\n const bridge = machineBridge as unknown as TooltipBridge;\n\n const open = (reason: TooltipReason, instant = false): void => {\n clearTimer('open');\n clearTimer('close');\n if (props().disabled || bridge.hasTag('expanded')) return;\n const store = warmStore(owner().ownerDocument);\n const warm = store.active !== null && store.active !== controller;\n if (store.active && store.active !== controller) store.active.close('replacement', true);\n store.active = controller;\n bridge.send({type: 'OPEN', reason, instant: instant || warm});\n };\n const close = (reason: TooltipReason, instant = false): void => {\n clearTimer('open');\n clearTimer('close');\n if (!visible()) return;\n bridge.send({type: 'CLOSE', reason, instant});\n };\n const scheduleOpen = (): void => {\n clearTimer('close');\n if (visible() || props().disabled) return;\n const delay = warmStore(owner().ownerDocument).active ? 0 : props().openDelay;\n clearTimer('open');\n openTimer = setTimeout(() => open('pointer', delay === 0), delay);\n };\n const scheduleClose = (): void => {\n clearTimer('open');\n if (!visible()) return;\n clearTimer('close');\n closeTimer = setTimeout(() => close('pointer'), props().closeDelay);\n };\n\n const controller: TooltipController = {\n bridge,\n connect(snapshot): void {\n bridge.connect(owner(), snapshot);\n describedById = content().id || `ui-tooltip-${crypto.randomUUID()}`;\n content().id = describedById;\n content().setAttribute('role', 'tooltip');\n content().setAttribute('popover', 'manual');\n content().setAttribute('data-ui-tooltip-content', '');\n content().hidden = true;\n trigger().setAttribute('data-ui-tooltip-trigger', '');\n appendDescription(trigger(), describedById);\n declareMorphAttributes(\n trigger(),\n 'aria-describedby',\n 'data-ui-tooltip-trigger',\n );\n popover = createAnchoredPopoverSurface({\n reference: trigger,\n floating: content,\n position: () => props().side,\n align: () => props().align,\n gap: () => props().gap,\n offset: () => props().offset,\n });\n syncSurface();\n addListener({target: trigger(), event: 'pointerenter', cleanup, handler: () => {\n pointerOnTrigger = true;\n scheduleOpen();\n }});\n addListener({target: trigger(), event: 'pointermove', handler: scheduleOpen, cleanup});\n addListener({target: trigger(), event: 'pointerleave', cleanup, handler: () => {\n pointerOnTrigger = false;\n if (!pointerOnContent) scheduleClose();\n }});\n addListener({target: content(), event: 'pointerenter', cleanup, handler: () => {\n pointerOnContent = true;\n clearTimer('close');\n }});\n addListener({target: content(), event: 'pointerleave', cleanup, handler: () => {\n pointerOnContent = false;\n if (!pointerOnTrigger) scheduleClose();\n }});\n addListener({target: trigger(), event: 'focusin', cleanup, handler: () => {\n queueMicrotask(() => {\n const target = trigger();\n if (\n target.ownerDocument.activeElement === target\n && !isFocusIndicatorSuppressed(target)\n && target.matches(':focus-visible')\n ) open('focus', true);\n });\n }});\n addListener({target: trigger(), event: 'focusout', cleanup, handler: () => {\n if (!pointerOnTrigger && !pointerOnContent) close('blur', true);\n }});\n addListener({target: trigger(), event: 'pointerdown', handler: () => close('activation', true), cleanup});\n addListener({target: trigger(), event: 'click', handler: () => close('activation', true), cleanup});\n addListener({target: owner().ownerDocument, event: 'keydown', cleanup, handler: (event) => {\n if (event instanceof KeyboardEvent && event.key === 'Escape' && visible()) close('escape', true);\n }});\n addListener({target: owner().ownerDocument, event: 'scroll', options: {capture: true}, cleanup, handler: () => {\n if (visible()) close('scroll', true);\n }});\n cleanup.add(observeSemanticChanges({\n targets: trigger(),\n read: () => trigger().dataset.uiTooltipShortcut ?? '',\n onChange: syncSurface,\n observer: {attributes: true, attributeFilter: ['data-ui-tooltip-shortcut']},\n }));\n },\n close,\n sync: syncSurface,\n destroy(): void {\n clearTimer('open');\n clearTimer('close');\n cleanup.run();\n const store = warmStore(owner().ownerDocument);\n if (store.active === controller) store.active = null;\n popover?.destroy();\n popover = null;\n removeDescription(trigger(), describedById);\n trigger().removeAttribute('data-ui-tooltip-trigger');\n bridge.disconnect();\n },\n };\n return controller;\n};\n\ntype TooltipData = TooltipBridge & {\n readonly root: BindingObject;\n readonly content: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst UiTooltip = (): TrellisAlpineComponent<TooltipData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let controller: TooltipController | null = null;\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Tooltip has not been initialized.');\n return rootEl;\n };\n const content = (): PopoverElement => {\n const el = root().querySelector<HTMLElement>(':scope > [data-ui-tooltip-content]');\n if (!(el instanceof HTMLElement)) throw new Error('Tooltip requires ui.tooltip.content.');\n return el as PopoverElement;\n };\n const trigger = (): HTMLElement => {\n const el = Array.from(root().children).find((child) => child instanceof HTMLElement && child !== content());\n if (!(el instanceof HTMLElement)) throw new Error('Tooltip requires an interactive trigger before its content.');\n return el;\n };\n const bridge = createAlpineMachine({\n schema: tooltipSchema,\n hooks: tooltipHooks,\n createMachine: ({props}) => createTooltipMachine(props, {\n prepareOpen() {}, finishOpen() {}, prepareClose() {}, finishClose() {}, syncProps() {},\n }),\n }) as TooltipBridge;\n const component: TrellisAlpineComponent<TooltipData> = {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n controller = createTooltipController({owner: root, trigger, content, schema: tooltipSchema});\n controller.connect(this.snapshot);\n },\n destroy(): void {\n controller?.destroy();\n controller = null;\n rootEl = null;\n },\n get root(): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({part: tooltipStyles.parts.root, props: this.snapshot.current?.props ?? {}}),\n {'data-ui-tooltip-root': ''},\n ]});\n },\n get content(): BindingObject {\n return {'data-ui-tooltip-content': ''};\n },\n };\n return component;\n};\n\nconst registerTooltipDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.addInitSelector(() => '[x-ui-tooltip]');\n AlpineInstance.directive('ui-tooltip', AlpineInstance.skipDuringClone((el, {expression}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n const content = el.ownerDocument.createElement('div') as PopoverElement;\n const label = el.ownerDocument.createElement('span');\n label.setAttribute('data-ui-tooltip-label', '');\n content.append(label);\n const shortcut = el.ownerDocument.createElement('span');\n shortcut.setAttribute('data-ui-keybinding', '');\n shortcut.dataset.variant = 'outline';\n shortcut.setAttribute('aria-hidden', 'true');\n shortcut.className = resolveStyle({\n part: keybindingStyles.parts.root,\n className: resolveStyle({part: tooltipStyles.parts.shortcut}),\n });\n content.append(shortcut);\n const keybinding = createKeybindingController(shortcut);\n el.insertAdjacentElement('afterend', content);\n const owner = () => el as HTMLElement & Alpine.ElementWithXAttributes;\n const controller = createTooltipController({\n owner,\n trigger: () => el,\n content: () => content,\n schema: tooltipDirectiveSchema,\n syncShortcut: (value) => keybinding.setValue(value),\n });\n controller.connect();\n const unregisterInvalidationOwner = registerDomInvalidationOwner(content, {\n invalidateDom(): void {\n if (!el.isConnected) return;\n if (content.previousElementSibling !== el) el.insertAdjacentElement('afterend', content);\n appendDescription(el, content.id);\n controller.sync();\n },\n });\n declareMorphAttributes(el, 'data-ui-tooltip-disabled', 'data-ui-tooltip-shortcut');\n const evaluator = utilities.evaluateLater(expression);\n utilities.effect(() => evaluator((value) => {\n const text = typeof value === 'string' ? value.trim() : '';\n label.textContent = text;\n el.toggleAttribute('data-ui-tooltip-disabled', !text);\n controller.sync();\n }));\n utilities.cleanup(() => {\n unregisterInvalidationOwner();\n controller.destroy();\n keybinding.destroy();\n content.remove();\n });\n })).before('ui-transition');\n};\n\nconst registerTooltip = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiTooltip', UiTooltip)(AlpineInstance);\n registerTooltipDirective(AlpineInstance);\n};\n\nexport {registerTooltip, registerTooltipDirective, UiTooltip};\nexport type {TooltipData, TooltipDirectiveProps, TooltipTransition};\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 {registerAnchorCapability} from '../../capabilities/anchor';\nimport {registerShortcutCapability} from '../../capabilities/shortcut';\nimport {registerTooltip as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerTooltip = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerAnchorCapability(AlpineInstance);\n registerShortcutCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerTooltip};\nexport default registerTooltip;\nexport * from './index';\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e,n as t,r as n,s as r}from"./dom-DiTFTWeR.js";import{f as i}from"./motion-B90yNOaV.js";import{t as a}from"./capability-motion-D_BJBnwB.js";import{t as o}from"./flip-crNQSZEa.js";import{f as s,l as c,n as l}from"./codecs-CQ7olTJL.js";import{i as u,t as d}from"./alpine-machine-CE2UN4Qu.js";import{n as f}from"./alpine-data-Dvc_bXq6.js";import{t as p}from"./collection-navigation-hTbwy6oQ.js";import{t as m}from"./machine-CNnHDbyo.js";import{n as h,t as g}from"./props-change-2xfsIAEN.js";import{t as _}from"./semantic-observer-CIoriWtV.js";import{A as v,F as y}from"./common-CBK89mIt.js";var b=[`manual`,`automatic`],x=y;[...x];var S=[`auto`,...v],ee={id:s.default(`ui-tabs`),animate:l,defaultValue:s,value:s,activation:c(b,`manual`),orientation:c(x,`horizontal`),gap:c(S,`auto`),loop:l.default(!0),panels:s,class:s},te=[u({name:`switching`,state:`switching`,project:e=>e.context.change,onDone:`SWITCH_DONE`,onError:`SWITCH_ERROR`,sends:{select:e=>({type:`SELECT`,value:e})}})],C=e=>typeof e==`string`?e:``,w=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],T=e=>!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`)),E=e=>h(e.event)?.props??e.props,D=e=>e.event.type===`ITEMS_CHANGED`?{values:w(e.event.values),disabledValues:w(e.event.disabledValues),panelIds:T(e.event.panelIds)}:e.context.collection,O=(e,t)=>e&&t.values.includes(e)&&!t.disabledValues.includes(e)?e:t.values.find(e=>!t.disabledValues.includes(e))??``,k=e=>{let t=D(e);if(e.event.type===`SELECT`){let n=C(e.event.value);return n&&t.values.includes(n)&&!t.disabledValues.includes(n)?n:e.context.selection.value}return e.event.type===`PROPS_CHANGED`&&g(e.event,`value`)?O(E(e).value,t):O(e.context.selection.value,t)},A=e=>e.context.selection.value!==k(e),j=(e,t)=>({target:e,guard:A,reduce:`applySwitch`,effects:t}),M=({props:e,context:t,effects:n})=>m({initial:`stable`,on:{DOM_INVALIDATED:{effects:`syncDom`}},states:{stable:{tags:[`stable`],on:{SELECT:j(`switching`,`prepareSwitch`),PROPS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}},switching:{tags:[`switching`,`transitioning`],on:{SWITCH_DONE:{target:`stable`,effects:`finishSwitch`},SWITCH_ERROR:{target:`stable`,effects:`finishSwitch`},SELECT:j(`switching`,`prepareSwitch`),PROPS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applySwitch:e=>{let t=D(e),n=k(e);return{props:E(e),context:{...e.context,selection:{value:n},change:{previousValue:e.context.selection.value,value:n,panelId:t.panelIds[n]??``},collection:t}}},reconcile:e=>({props:E(e),context:{...e.context,collection:D(e),selection:{value:k(e)}}})},effects:{prepareSwitch:n.prepareSwitch,finishSwitch:n.finishSwitch,syncDom:n.syncDom,syncProps:n.syncProps,syncItems:n.syncItems}}),N=`ui-tabs`,P=e=>e?`active`:`inactive`,F=e=>e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``)||`tab`,I=(e,t)=>`${e}-tab-${F(t)}`,L=(e,t)=>`${e}-panel-${F(t)}`,R=e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement,z=e=>Array.from(new Set(e)),B=()=>{let a=null,s=null,c=null,l=null,u=null,f,m=null,h=()=>{if(!a)throw Error(`Tabs has not been initialized.`);return a},g=()=>h().id||h().dataset.id||h().dataset.owner||N,v=e=>e.closest(`[data-ui-tabs]`)===h(),y=e=>t({value:e}),b=e=>{let t=e?.dataset.variant;return t===`subtle`||t===`segmented`||t===`pills`?t:`line`},x=e=>e?.dataset.size===`sm`?`sm`:`md`,S=e=>{let t=e?.dataset.orientation;return t===`vertical`||t===`horizontal`?t:D().orientation},C=e=>{let t=g(),n=e=>e.dataset.uiTabsOwner===t||e.dataset.owner===t,r=Array.from(h().querySelectorAll(`[data-ui-tabs-list]`)).find(v)??null,i=Array.from(h().querySelectorAll(`[data-ui-tabs-panel]`)).filter(v),a=D().panels,o=a?document.querySelector(a):null;o&&i.push(...Array.from(o.querySelectorAll(`[data-ui-tabs-panel]`)).filter(n)),i.push(...Array.from(document.querySelectorAll(`[data-ui-tabs-panel][data-ui-tabs-owner="${CSS.escape(t)}"]`)).filter(n));let s=z(i),c=new Map;s.forEach(e=>{let t=e.dataset.value||``;c.has(t)||c.set(t,e)});let l=Array.from(h().querySelectorAll(`[data-ui-tabs-tab]`)).filter(v).map((e,t)=>R(e)?(e.dataset.value||=`tab-${t+1}`,{tab:e,value:e.dataset.value,disabled:y(e.dataset.disabled)||e.hasAttribute(`disabled`),panel:c.get(e.dataset.value)??null}):null).filter(e=>e!==null),u=new Map,d=new Map;return l.forEach(e=>{u.has(e.value)||u.set(e.value,e),d.set(e.tab,e)}),{ownerId:t,primaryList:r,panelsTarget:o,panels:s,panelByValue:c,items:l,itemByValue:u,itemByTab:d,tabStop:l.find(e=>document.activeElement===e.tab||e.tab.dataset.active===`true`)?.tab??(e?u.get(e)?.tab??null:null)}},w=(e,t)=>{if(!(e instanceof Element))return null;let n=e.closest(`[data-ui-tabs-tab]`);return n&&R(n)&&v(n)?t.itemByTab.get(n)??null:null},T=e=>{let t=e.items;return{values:t.map(e=>e.value),disabledValues:t.filter(e=>e.disabled).map(e=>e.value),panelIds:Object.fromEntries(t.map(t=>[t.value,t.panel?.id||L(t.tab.dataset.uiTabsOwner||t.tab.dataset.owner||e.ownerId,t.value)]))}},E=e=>{let t=C(),n=T(t),r=t.items.find(e=>y(e.tab.dataset.selected)||e.tab.getAttribute(`aria-selected`)===`true`),i=t.panels.find(e=>y(e.dataset.selected)),a=e.value||e.defaultValue||r?.value||i?.dataset.value||``,o=a&&n.values.includes(a)&&!n.disabledValues.includes(a)?a:n.values.find(e=>!n.disabledValues.includes(e))??``;return{selection:{value:o},change:{previousValue:``,value:o,panelId:n.panelIds[o]??``},collection:n}},D=()=>m??J.getCommittedSnapshot().props,O=()=>J.getCommittedSnapshot().context,k=()=>O().selection.value,A=e=>e.querySelector(`:scope > [data-ui-tabs-indicator]`),j=e=>{if(!(e instanceof HTMLElement))return null;let t=e.closest(`[data-ui-tabs-list]`),n=t?A(t):null;if(!t||!n)return null;n.hidden=!1;let r=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=t.dataset.orientation===`vertical`,o=t.dataset.variant===`line`,s=o&&a?2:i.width,c=o&&!a?2:i.height,l=o?Number.parseFloat(getComputedStyle(t).getPropertyValue(`--border-width-edge-separator`))||1:0,u=o&&a?r.left-(s-l)/2:i.left,d=o&&!a?r.bottom-(c+l)/2:i.top;return{indicator:n,styles:{height:c,left:u-r.left,top:d-r.top,width:s}}},F=e=>{e.indicator.style.height=`${e.styles.height}px`,e.indicator.style.left=`${e.styles.left}px`,e.indicator.style.top=`${e.styles.top}px`,e.indicator.style.width=`${e.styles.width}px`},B=(e,t)=>{let n=A(e);if(!n)return;let r=t.items.find(t=>t.value===k()&&t.tab.closest(`[data-ui-tabs-list]`)===e);if(!r){n.hidden=!0,e.dataset.uiTabsReady=``;return}let i=j(r.tab);i&&F(i),e.dataset.uiTabsReady=``},V=()=>{let e=D();!h().id&&e.id&&(h().id=e.id),h().dataset.orientation=e.orientation,h().dataset.activation=e.activation,h().dataset.value=k(),r({el:h(),attr:`data-animate`,present:e.animate})},H=e=>{let t=S(e);e.setAttribute(`role`,`tablist`),e.dataset.orientation=t,t===`vertical`?e.setAttribute(`aria-orientation`,`vertical`):e.removeAttribute(`aria-orientation`)},U=(e,t)=>{let n=e.value===k(),i=e.tab.closest(`[data-ui-tabs-list]`),a=S(i),o=b(i),s=x(i),c=e.tab.dataset.uiTabsOwner||e.tab.dataset.owner||g(),l=e.tab.querySelector(`[data-ui-tabs-tab-selected-icon]`),u=P(n);e.tab.id||=I(c,e.value),e.tab.dataset.state=u,e.tab.dataset.orientation=a,e.tab.dataset.variant=o,e.tab.dataset.size=s,e.tab.setAttribute(`role`,`tab`),e.tab.setAttribute(`aria-selected`,n?`true`:`false`),e.tab.setAttribute(`aria-controls`,e.panel?.id||L(c,e.value)),e.tab.tabIndex=e.tab===t.tabStop?0:-1,r({el:e.tab,attr:`data-selected`,present:n}),l&&(l.style.visibility=n?`visible`:`hidden`),r({el:e.tab,attr:`data-disabled`,present:e.disabled}),e.disabled?(e.tab.setAttribute(`aria-disabled`,`true`),e.tab.tabIndex=-1):e.tab.removeAttribute(`aria-disabled`),e.tab instanceof HTMLButtonElement&&(e.tab.disabled=e.disabled)},W=e=>{let t=e.dataset.value||``,n=t===k(),i=e.dataset.uiTabsOwner||e.dataset.owner||g(),a=L(i,t);t&&!e.id&&(e.id=a),t&&!e.hasAttribute(`data-ui-key`)&&e.setAttribute(`data-ui-key`,e.id||a),e.dataset.state=P(n),e.dataset.orientation=D().orientation,e.setAttribute(`role`,`tabpanel`),e.setAttribute(`aria-labelledby`,I(i,t)),e.hasAttribute(`tabindex`)||(e.tabIndex=0),e.hidden=!n,r({el:e,attr:`data-selected`,present:n})},G=({indicator:e=!1}={})=>{V();let t=C(k()),n=t.primaryList;return n&&H(n),t.items.forEach(e=>U(e,t)),t.panels.forEach(W),e&&n&&B(n,t),t},K=()=>{n({el:h(),name:`ui:change`,detail:{value:k()}})},ne=(e,t,r)=>{n({el:e,name:`ui:tabs:activate`,detail:{value:t,panelId:r}})},q=()=>{let e=G({indicator:!0});Z(e),Q(e)},J=d({schema:ee,hooks:te,resolveTransitionElement:({data:e})=>C(k()).itemByValue.get(e.value)?.tab??null,createMachine:({props:e})=>{m=e;let t=E(e);return m=null,M({props:e,context:t,effects:{prepareSwitch:({event:e})=>{G(),e.type===`SELECT`&&K()},finishSwitch:()=>G(),syncDom:q,syncProps:q,syncItems:()=>{let e=G({indicator:!0});Q(e)}}})}}),Y=()=>{if(!s)throw Error(`Tabs navigation has not been initialized.`);return s},X=(e,{tab:t,panel:n,motion:r=!0}={})=>{let i=k();J.send({type:`SELECT`,value:e,motion:r}),k()!==i&&t&&ne(t,k(),n?.id??``)},re=e=>{let t=w(e.target,C(k()));if(t){if(t.disabled){e.preventDefault();return}X(t.value,{tab:t.tab,panel:t.panel})}},ie=e=>{u=w(e.target,C(k()))?.tab??null,window.clearTimeout(f),f=window.setTimeout(()=>{u=null,f=void 0})},ae=e=>{let t=w(e.target,C(k()));t&&e.target===t.tab&&!t.disabled&&(Y().activateItem({el:t.tab}),D().activation===`automatic`&&u!==t.tab?X(t.value,{tab:t.tab,panel:t.panel,motion:!1}):G())},oe=t=>{let n=w(t.target,C(k()));if(!n||t.target!==n.tab)return;if(t.key===` `&&n.tab instanceof HTMLAnchorElement){t.preventDefault(),X(n.value,{tab:n.tab,panel:n.panel,motion:!1});return}let r=S(n.tab.closest(`[data-ui-tabs-list]`));if(t.key===`Home`){t.preventDefault(),Y().focusFirst();return}if(t.key===`End`){t.preventDefault(),Y().focusLast();return}if(r===`vertical`){t.key===`ArrowDown`?(t.preventDefault(),Y().focusNext()):t.key===`ArrowUp`&&(t.preventDefault(),Y().focusPrevious());return}t.key===`ArrowRight`?(t.preventDefault(),e({el:h()})?Y().focusPrevious():Y().focusNext()):t.key===`ArrowLeft`&&(t.preventDefault(),e({el:h()})?Y().focusNext():Y().focusPrevious())},se=e=>{J.send({type:`ITEMS_CHANGED`,...e})},Z=e=>{c?.();let t=[h()];e.panelsTarget&&t.push(e.panelsTarget),c=_({targets:z(t),read:()=>T(C(k())),onChange:se,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-disabled`,`disabled`,`data-ui-tabs-owner`,`data-owner`,`data-variant`,`data-size`,`data-orientation`,`data-gap`,`id`]}})},Q=e=>{l?.disconnect(),typeof ResizeObserver<`u`&&(l=new ResizeObserver(()=>{if(!a)return;let e=C(k());e.primaryList&&B(e.primaryList,e)}),e.primaryList&&l.observe(e.primaryList),e.items.forEach(e=>l?.observe(e.tab)))},$;return $={...J,get value(){return this.snapshot.current?.context.selection.value??``},init(){a=this.$el,J.connect(this.$el,this.snapshot),s=p({root:h,itemSelector:`[data-ui-tabs-tab]`,isDisabled:e=>!v(e)||y(e.dataset.disabled)||e.hasAttribute(`disabled`),loop:()=>D().loop});let e=G({indicator:!0});Z(e),Q(e)},destroy(){c?.(),c=null,l?.disconnect(),l=null,window.clearTimeout(f),u=null,f=void 0,J.disconnect(),s=null,a=null},transitionIndicator(e){if(!(e.el instanceof Element))return Promise.resolve();let t=j(e.el);return t?!e.props.animate||e.event.motion===!1?(F(t),i()):o(e,{target:t.indicator,update:()=>F(t),role:`layoutSpring`,transition:{bounce:0}}):Promise.resolve()},get root(){return{"data-ui-tabs":``,":data-orientation":()=>D().orientation,":data-activation":()=>D().activation,":data-animate":()=>D().animate?``:void 0,"@pointerdown":ie,"@click":re,"@focusin":ae,"@keydown":e=>{e instanceof KeyboardEvent&&oe(e)}}},select(e){X(e)},isActive(e){return this.snapshot.current?.context.selection.value===e}},$},V=f(`UiTabs`,B),H=new WeakSet,U=e=>{H.has(e)||(H.add(e),a(e),V(e))};export{B as n,U as t};
2
- //# sourceMappingURL=entry.generated-DDrayI_M.js.map
1
+ import{i as e,n as t,r as n,s as r}from"./dom-DiTFTWeR.js";import{f as i}from"./motion-RwlK04Cy.js";import{t as a}from"./capability-motion-B32HePGn.js";import{t as o}from"./flip-BKThFI4L.js";import{f as s,l as c,n as l}from"./codecs-CQ7olTJL.js";import{i as u,t as d}from"./alpine-machine-CE2UN4Qu.js";import{n as f}from"./alpine-data-Dvc_bXq6.js";import{t as p}from"./collection-navigation-hTbwy6oQ.js";import{t as m}from"./machine-CNnHDbyo.js";import{n as h,t as g}from"./props-change-2xfsIAEN.js";import{t as _}from"./semantic-observer-CIoriWtV.js";import{A as v,F as y}from"./common-CBK89mIt.js";var b=[`manual`,`automatic`],x=y;[...x];var S=[`auto`,...v],ee={id:s.default(`ui-tabs`),animate:l,defaultValue:s,value:s,activation:c(b,`manual`),orientation:c(x,`horizontal`),gap:c(S,`auto`),loop:l.default(!0),panels:s,class:s},te=[u({name:`switching`,state:`switching`,project:e=>e.context.change,onDone:`SWITCH_DONE`,onError:`SWITCH_ERROR`,sends:{select:e=>({type:`SELECT`,value:e})}})],C=e=>typeof e==`string`?e:``,w=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],T=e=>!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`)),E=e=>h(e.event)?.props??e.props,D=e=>e.event.type===`ITEMS_CHANGED`?{values:w(e.event.values),disabledValues:w(e.event.disabledValues),panelIds:T(e.event.panelIds)}:e.context.collection,O=(e,t)=>e&&t.values.includes(e)&&!t.disabledValues.includes(e)?e:t.values.find(e=>!t.disabledValues.includes(e))??``,k=e=>{let t=D(e);if(e.event.type===`SELECT`){let n=C(e.event.value);return n&&t.values.includes(n)&&!t.disabledValues.includes(n)?n:e.context.selection.value}return e.event.type===`PROPS_CHANGED`&&g(e.event,`value`)?O(E(e).value,t):O(e.context.selection.value,t)},A=e=>e.context.selection.value!==k(e),j=(e,t)=>({target:e,guard:A,reduce:`applySwitch`,effects:t}),M=({props:e,context:t,effects:n})=>m({initial:`stable`,on:{DOM_INVALIDATED:{effects:`syncDom`}},states:{stable:{tags:[`stable`],on:{SELECT:j(`switching`,`prepareSwitch`),PROPS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}},switching:{tags:[`switching`,`transitioning`],on:{SWITCH_DONE:{target:`stable`,effects:`finishSwitch`},SWITCH_ERROR:{target:`stable`,effects:`finishSwitch`},SELECT:j(`switching`,`prepareSwitch`),PROPS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applySwitch:e=>{let t=D(e),n=k(e);return{props:E(e),context:{...e.context,selection:{value:n},change:{previousValue:e.context.selection.value,value:n,panelId:t.panelIds[n]??``},collection:t}}},reconcile:e=>({props:E(e),context:{...e.context,collection:D(e),selection:{value:k(e)}}})},effects:{prepareSwitch:n.prepareSwitch,finishSwitch:n.finishSwitch,syncDom:n.syncDom,syncProps:n.syncProps,syncItems:n.syncItems}}),N=`ui-tabs`,P=e=>e?`active`:`inactive`,F=e=>e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``)||`tab`,I=(e,t)=>`${e}-tab-${F(t)}`,L=(e,t)=>`${e}-panel-${F(t)}`,R=e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement,z=e=>Array.from(new Set(e)),B=()=>{let a=null,s=null,c=null,l=null,u=null,f,m=null,h=()=>{if(!a)throw Error(`Tabs has not been initialized.`);return a},g=()=>h().id||h().dataset.id||h().dataset.owner||N,v=e=>e.closest(`[data-ui-tabs]`)===h(),y=e=>t({value:e}),b=e=>{let t=e?.dataset.variant;return t===`subtle`||t===`segmented`||t===`pills`?t:`line`},x=e=>e?.dataset.size===`sm`?`sm`:`md`,S=e=>{let t=e?.dataset.orientation;return t===`vertical`||t===`horizontal`?t:D().orientation},C=e=>{let t=g(),n=e=>e.dataset.uiTabsOwner===t||e.dataset.owner===t,r=Array.from(h().querySelectorAll(`[data-ui-tabs-list]`)).find(v)??null,i=Array.from(h().querySelectorAll(`[data-ui-tabs-panel]`)).filter(v),a=D().panels,o=a?document.querySelector(a):null;o&&i.push(...Array.from(o.querySelectorAll(`[data-ui-tabs-panel]`)).filter(n)),i.push(...Array.from(document.querySelectorAll(`[data-ui-tabs-panel][data-ui-tabs-owner="${CSS.escape(t)}"]`)).filter(n));let s=z(i),c=new Map;s.forEach(e=>{let t=e.dataset.value||``;c.has(t)||c.set(t,e)});let l=Array.from(h().querySelectorAll(`[data-ui-tabs-tab]`)).filter(v).map((e,t)=>R(e)?(e.dataset.value||=`tab-${t+1}`,{tab:e,value:e.dataset.value,disabled:y(e.dataset.disabled)||e.hasAttribute(`disabled`),panel:c.get(e.dataset.value)??null}):null).filter(e=>e!==null),u=new Map,d=new Map;return l.forEach(e=>{u.has(e.value)||u.set(e.value,e),d.set(e.tab,e)}),{ownerId:t,primaryList:r,panelsTarget:o,panels:s,panelByValue:c,items:l,itemByValue:u,itemByTab:d,tabStop:l.find(e=>document.activeElement===e.tab||e.tab.dataset.active===`true`)?.tab??(e?u.get(e)?.tab??null:null)}},w=(e,t)=>{if(!(e instanceof Element))return null;let n=e.closest(`[data-ui-tabs-tab]`);return n&&R(n)&&v(n)?t.itemByTab.get(n)??null:null},T=e=>{let t=e.items;return{values:t.map(e=>e.value),disabledValues:t.filter(e=>e.disabled).map(e=>e.value),panelIds:Object.fromEntries(t.map(t=>[t.value,t.panel?.id||L(t.tab.dataset.uiTabsOwner||t.tab.dataset.owner||e.ownerId,t.value)]))}},E=e=>{let t=C(),n=T(t),r=t.items.find(e=>y(e.tab.dataset.selected)||e.tab.getAttribute(`aria-selected`)===`true`),i=t.panels.find(e=>y(e.dataset.selected)),a=e.value||e.defaultValue||r?.value||i?.dataset.value||``,o=a&&n.values.includes(a)&&!n.disabledValues.includes(a)?a:n.values.find(e=>!n.disabledValues.includes(e))??``;return{selection:{value:o},change:{previousValue:``,value:o,panelId:n.panelIds[o]??``},collection:n}},D=()=>m??J.getCommittedSnapshot().props,O=()=>J.getCommittedSnapshot().context,k=()=>O().selection.value,A=e=>e.querySelector(`:scope > [data-ui-tabs-indicator]`),j=e=>{if(!(e instanceof HTMLElement))return null;let t=e.closest(`[data-ui-tabs-list]`),n=t?A(t):null;if(!t||!n)return null;n.hidden=!1;let r=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=t.dataset.orientation===`vertical`,o=t.dataset.variant===`line`,s=o&&a?2:i.width,c=o&&!a?2:i.height,l=o?Number.parseFloat(getComputedStyle(t).getPropertyValue(`--border-width-edge-separator`))||1:0,u=o&&a?r.left-(s-l)/2:i.left,d=o&&!a?r.bottom-(c+l)/2:i.top;return{indicator:n,styles:{height:c,left:u-r.left,top:d-r.top,width:s}}},F=e=>{e.indicator.style.height=`${e.styles.height}px`,e.indicator.style.left=`${e.styles.left}px`,e.indicator.style.top=`${e.styles.top}px`,e.indicator.style.width=`${e.styles.width}px`},B=(e,t)=>{let n=A(e);if(!n)return;let r=t.items.find(t=>t.value===k()&&t.tab.closest(`[data-ui-tabs-list]`)===e);if(!r){n.hidden=!0,e.dataset.uiTabsReady=``;return}let i=j(r.tab);i&&F(i),e.dataset.uiTabsReady=``},V=()=>{let e=D();!h().id&&e.id&&(h().id=e.id),h().dataset.orientation=e.orientation,h().dataset.activation=e.activation,h().dataset.value=k(),r({el:h(),attr:`data-animate`,present:e.animate})},H=e=>{let t=S(e);e.setAttribute(`role`,`tablist`),e.dataset.orientation=t,t===`vertical`?e.setAttribute(`aria-orientation`,`vertical`):e.removeAttribute(`aria-orientation`)},U=(e,t)=>{let n=e.value===k(),i=e.tab.closest(`[data-ui-tabs-list]`),a=S(i),o=b(i),s=x(i),c=e.tab.dataset.uiTabsOwner||e.tab.dataset.owner||g(),l=e.tab.querySelector(`[data-ui-tabs-tab-selected-icon]`),u=P(n);e.tab.id||=I(c,e.value),e.tab.dataset.state=u,e.tab.dataset.orientation=a,e.tab.dataset.variant=o,e.tab.dataset.size=s,e.tab.setAttribute(`role`,`tab`),e.tab.setAttribute(`aria-selected`,n?`true`:`false`),e.tab.setAttribute(`aria-controls`,e.panel?.id||L(c,e.value)),e.tab.tabIndex=e.tab===t.tabStop?0:-1,r({el:e.tab,attr:`data-selected`,present:n}),l&&(l.style.visibility=n?`visible`:`hidden`),r({el:e.tab,attr:`data-disabled`,present:e.disabled}),e.disabled?(e.tab.setAttribute(`aria-disabled`,`true`),e.tab.tabIndex=-1):e.tab.removeAttribute(`aria-disabled`),e.tab instanceof HTMLButtonElement&&(e.tab.disabled=e.disabled)},W=e=>{let t=e.dataset.value||``,n=t===k(),i=e.dataset.uiTabsOwner||e.dataset.owner||g(),a=L(i,t);t&&!e.id&&(e.id=a),t&&!e.hasAttribute(`data-ui-key`)&&e.setAttribute(`data-ui-key`,e.id||a),e.dataset.state=P(n),e.dataset.orientation=D().orientation,e.setAttribute(`role`,`tabpanel`),e.setAttribute(`aria-labelledby`,I(i,t)),e.hasAttribute(`tabindex`)||(e.tabIndex=0),e.hidden=!n,r({el:e,attr:`data-selected`,present:n})},G=({indicator:e=!1}={})=>{V();let t=C(k()),n=t.primaryList;return n&&H(n),t.items.forEach(e=>U(e,t)),t.panels.forEach(W),e&&n&&B(n,t),t},K=()=>{n({el:h(),name:`ui:change`,detail:{value:k()}})},ne=(e,t,r)=>{n({el:e,name:`ui:tabs:activate`,detail:{value:t,panelId:r}})},q=()=>{let e=G({indicator:!0});Z(e),Q(e)},J=d({schema:ee,hooks:te,resolveTransitionElement:({data:e})=>C(k()).itemByValue.get(e.value)?.tab??null,createMachine:({props:e})=>{m=e;let t=E(e);return m=null,M({props:e,context:t,effects:{prepareSwitch:({event:e})=>{G(),e.type===`SELECT`&&K()},finishSwitch:()=>G(),syncDom:q,syncProps:q,syncItems:()=>{let e=G({indicator:!0});Q(e)}}})}}),Y=()=>{if(!s)throw Error(`Tabs navigation has not been initialized.`);return s},X=(e,{tab:t,panel:n,motion:r=!0}={})=>{let i=k();J.send({type:`SELECT`,value:e,motion:r}),k()!==i&&t&&ne(t,k(),n?.id??``)},re=e=>{let t=w(e.target,C(k()));if(t){if(t.disabled){e.preventDefault();return}X(t.value,{tab:t.tab,panel:t.panel})}},ie=e=>{u=w(e.target,C(k()))?.tab??null,window.clearTimeout(f),f=window.setTimeout(()=>{u=null,f=void 0})},ae=e=>{let t=w(e.target,C(k()));t&&e.target===t.tab&&!t.disabled&&(Y().activateItem({el:t.tab}),D().activation===`automatic`&&u!==t.tab?X(t.value,{tab:t.tab,panel:t.panel,motion:!1}):G())},oe=t=>{let n=w(t.target,C(k()));if(!n||t.target!==n.tab)return;if(t.key===` `&&n.tab instanceof HTMLAnchorElement){t.preventDefault(),X(n.value,{tab:n.tab,panel:n.panel,motion:!1});return}let r=S(n.tab.closest(`[data-ui-tabs-list]`));if(t.key===`Home`){t.preventDefault(),Y().focusFirst();return}if(t.key===`End`){t.preventDefault(),Y().focusLast();return}if(r===`vertical`){t.key===`ArrowDown`?(t.preventDefault(),Y().focusNext()):t.key===`ArrowUp`&&(t.preventDefault(),Y().focusPrevious());return}t.key===`ArrowRight`?(t.preventDefault(),e({el:h()})?Y().focusPrevious():Y().focusNext()):t.key===`ArrowLeft`&&(t.preventDefault(),e({el:h()})?Y().focusNext():Y().focusPrevious())},se=e=>{J.send({type:`ITEMS_CHANGED`,...e})},Z=e=>{c?.();let t=[h()];e.panelsTarget&&t.push(e.panelsTarget),c=_({targets:z(t),read:()=>T(C(k())),onChange:se,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-disabled`,`disabled`,`data-ui-tabs-owner`,`data-owner`,`data-variant`,`data-size`,`data-orientation`,`data-gap`,`id`]}})},Q=e=>{l?.disconnect(),typeof ResizeObserver<`u`&&(l=new ResizeObserver(()=>{if(!a)return;let e=C(k());e.primaryList&&B(e.primaryList,e)}),e.primaryList&&l.observe(e.primaryList),e.items.forEach(e=>l?.observe(e.tab)))},$;return $={...J,get value(){return this.snapshot.current?.context.selection.value??``},init(){a=this.$el,J.connect(this.$el,this.snapshot),s=p({root:h,itemSelector:`[data-ui-tabs-tab]`,isDisabled:e=>!v(e)||y(e.dataset.disabled)||e.hasAttribute(`disabled`),loop:()=>D().loop});let e=G({indicator:!0});Z(e),Q(e)},destroy(){c?.(),c=null,l?.disconnect(),l=null,window.clearTimeout(f),u=null,f=void 0,J.disconnect(),s=null,a=null},transitionIndicator(e){if(!(e.el instanceof Element))return Promise.resolve();let t=j(e.el);return t?!e.props.animate||e.event.motion===!1?(F(t),i()):o(e,{target:t.indicator,update:()=>F(t),role:`layoutSpring`,transition:{bounce:0}}):Promise.resolve()},get root(){return{"data-ui-tabs":``,":data-orientation":()=>D().orientation,":data-activation":()=>D().activation,":data-animate":()=>D().animate?``:void 0,"@pointerdown":ie,"@click":re,"@focusin":ae,"@keydown":e=>{e instanceof KeyboardEvent&&oe(e)}}},select(e){X(e)},isActive(e){return this.snapshot.current?.context.selection.value===e}},$},V=f(`UiTabs`,B),H=new WeakSet,U=e=>{H.has(e)||(H.add(e),a(e),V(e))};export{B as n,U as t};
2
+ //# sourceMappingURL=entry.generated-BRaKxvab.js.map