@hyperfixi/behaviors 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/all.browser.global.js +35 -6
  2. package/dist/all.browser.global.js.map +1 -1
  3. package/dist/autodismiss.browser.global.js +3 -0
  4. package/dist/autodismiss.browser.global.js.map +1 -0
  5. package/dist/behaviors/autodismiss.cjs +177 -0
  6. package/dist/behaviors/autodismiss.cjs.map +1 -0
  7. package/dist/behaviors/autodismiss.d.cts +15 -0
  8. package/dist/behaviors/autodismiss.d.ts +15 -0
  9. package/dist/behaviors/autodismiss.js +15 -0
  10. package/dist/behaviors/autodismiss.js.map +1 -0
  11. package/dist/behaviors/clickoutside.cjs +123 -0
  12. package/dist/behaviors/clickoutside.cjs.map +1 -0
  13. package/dist/behaviors/clickoutside.d.cts +15 -0
  14. package/dist/behaviors/clickoutside.d.ts +15 -0
  15. package/dist/behaviors/clickoutside.js +15 -0
  16. package/dist/behaviors/clickoutside.js.map +1 -0
  17. package/dist/behaviors/clipboard.cjs +193 -0
  18. package/dist/behaviors/clipboard.cjs.map +1 -0
  19. package/dist/behaviors/clipboard.d.cts +15 -0
  20. package/dist/behaviors/clipboard.d.ts +15 -0
  21. package/dist/behaviors/clipboard.js +15 -0
  22. package/dist/behaviors/clipboard.js.map +1 -0
  23. package/dist/behaviors/draggable.cjs +49 -7
  24. package/dist/behaviors/draggable.cjs.map +1 -1
  25. package/dist/behaviors/draggable.d.cts +2 -1
  26. package/dist/behaviors/draggable.d.ts +2 -1
  27. package/dist/behaviors/draggable.js +2 -1
  28. package/dist/behaviors/focustrap.cjs +191 -0
  29. package/dist/behaviors/focustrap.cjs.map +1 -0
  30. package/dist/behaviors/focustrap.d.cts +15 -0
  31. package/dist/behaviors/focustrap.d.ts +15 -0
  32. package/dist/behaviors/focustrap.js +15 -0
  33. package/dist/behaviors/focustrap.js.map +1 -0
  34. package/dist/behaviors/removable.cjs +9 -2
  35. package/dist/behaviors/removable.cjs.map +1 -1
  36. package/dist/behaviors/removable.d.cts +1 -1
  37. package/dist/behaviors/removable.d.ts +1 -1
  38. package/dist/behaviors/removable.js +2 -1
  39. package/dist/behaviors/resizable.cjs +54 -7
  40. package/dist/behaviors/resizable.cjs.map +1 -1
  41. package/dist/behaviors/resizable.d.cts +1 -1
  42. package/dist/behaviors/resizable.d.ts +1 -1
  43. package/dist/behaviors/resizable.js +2 -1
  44. package/dist/behaviors/scrollreveal.cjs +149 -0
  45. package/dist/behaviors/scrollreveal.cjs.map +1 -0
  46. package/dist/behaviors/scrollreveal.d.cts +15 -0
  47. package/dist/behaviors/scrollreveal.d.ts +15 -0
  48. package/dist/behaviors/scrollreveal.js +15 -0
  49. package/dist/behaviors/scrollreveal.js.map +1 -0
  50. package/dist/behaviors/sortable.cjs +49 -7
  51. package/dist/behaviors/sortable.cjs.map +1 -1
  52. package/dist/behaviors/sortable.d.cts +1 -1
  53. package/dist/behaviors/sortable.d.ts +1 -1
  54. package/dist/behaviors/sortable.js +2 -1
  55. package/dist/behaviors/tabs.cjs +247 -0
  56. package/dist/behaviors/tabs.cjs.map +1 -0
  57. package/dist/behaviors/tabs.d.cts +15 -0
  58. package/dist/behaviors/tabs.d.ts +15 -0
  59. package/dist/behaviors/tabs.js +15 -0
  60. package/dist/behaviors/tabs.js.map +1 -0
  61. package/dist/behaviors/toggleable.cjs +36 -7
  62. package/dist/behaviors/toggleable.cjs.map +1 -1
  63. package/dist/behaviors/toggleable.d.cts +2 -1
  64. package/dist/behaviors/toggleable.d.ts +2 -1
  65. package/dist/behaviors/toggleable.js +2 -1
  66. package/dist/chunk-244WSZOL.js +67 -0
  67. package/dist/chunk-244WSZOL.js.map +1 -0
  68. package/dist/chunk-2NSKQMNM.js +99 -0
  69. package/dist/chunk-2NSKQMNM.js.map +1 -0
  70. package/dist/chunk-64DIQGQI.js +37 -0
  71. package/dist/chunk-64DIQGQI.js.map +1 -0
  72. package/dist/chunk-6TJXDCAQ.js +11 -0
  73. package/dist/chunk-6TJXDCAQ.js.map +1 -0
  74. package/dist/chunk-7JDV2THA.js +62 -0
  75. package/dist/chunk-7JDV2THA.js.map +1 -0
  76. package/dist/chunk-AFGA54SA.js +116 -0
  77. package/dist/chunk-AFGA54SA.js.map +1 -0
  78. package/dist/chunk-DYHBKDKB.js +62 -0
  79. package/dist/chunk-DYHBKDKB.js.map +1 -0
  80. package/dist/chunk-GPTHAUWN.js +58 -0
  81. package/dist/chunk-GPTHAUWN.js.map +1 -0
  82. package/dist/chunk-GVJPA2EK.js +68 -0
  83. package/dist/chunk-GVJPA2EK.js.map +1 -0
  84. package/dist/chunk-H2MCHR5A.js +89 -0
  85. package/dist/chunk-H2MCHR5A.js.map +1 -0
  86. package/dist/{chunk-2NQHIHD5.js → chunk-H5Y5ARYG.js} +6 -3
  87. package/dist/chunk-H5Y5ARYG.js.map +1 -0
  88. package/dist/chunk-JKBWIJFI.js +155 -0
  89. package/dist/chunk-JKBWIJFI.js.map +1 -0
  90. package/dist/chunk-QKDYW4VM.js +70 -0
  91. package/dist/chunk-QKDYW4VM.js.map +1 -0
  92. package/dist/chunk-RB7OB6OD.js +51 -0
  93. package/dist/chunk-RB7OB6OD.js.map +1 -0
  94. package/dist/chunk-RPERQTFU.js +75 -0
  95. package/dist/chunk-RPERQTFU.js.map +1 -0
  96. package/dist/chunk-S4QDV2MH.js +75 -0
  97. package/dist/chunk-S4QDV2MH.js.map +1 -0
  98. package/dist/chunk-WTUVPVSD.js +80 -0
  99. package/dist/chunk-WTUVPVSD.js.map +1 -0
  100. package/dist/chunk-YHQRFUWV.js +62 -0
  101. package/dist/chunk-YHQRFUWV.js.map +1 -0
  102. package/dist/chunk-ZQQZTMCJ.js +64 -0
  103. package/dist/chunk-ZQQZTMCJ.js.map +1 -0
  104. package/dist/clickoutside.browser.global.js +12 -0
  105. package/dist/clickoutside.browser.global.js.map +1 -0
  106. package/dist/clipboard.browser.global.js +3 -0
  107. package/dist/clipboard.browser.global.js.map +1 -0
  108. package/dist/core.browser.global.js +3 -3
  109. package/dist/core.browser.global.js.map +1 -1
  110. package/dist/draggable.browser.global.js +2 -2
  111. package/dist/draggable.browser.global.js.map +1 -1
  112. package/dist/focustrap.browser.global.js +9 -0
  113. package/dist/focustrap.browser.global.js.map +1 -0
  114. package/dist/index.cjs +1270 -50
  115. package/dist/index.cjs.map +1 -1
  116. package/dist/index.d.cts +13 -7
  117. package/dist/index.d.ts +13 -7
  118. package/dist/index.js +155 -48
  119. package/dist/index.js.map +1 -1
  120. package/dist/loaders.cjs +1151 -30
  121. package/dist/loaders.cjs.map +1 -1
  122. package/dist/loaders.js +9 -3
  123. package/dist/registry.d.cts +1 -1
  124. package/dist/registry.d.ts +1 -1
  125. package/dist/removable.browser.global.js +2 -2
  126. package/dist/removable.browser.global.js.map +1 -1
  127. package/dist/resizable.browser.global.js +2 -2
  128. package/dist/resizable.browser.global.js.map +1 -1
  129. package/dist/schemas/index.cjs +343 -1
  130. package/dist/schemas/index.cjs.map +1 -1
  131. package/dist/schemas/index.d.cts +45 -3
  132. package/dist/schemas/index.d.ts +45 -3
  133. package/dist/schemas/index.js +34 -4
  134. package/dist/schemas/index.js.map +1 -1
  135. package/dist/scrollreveal.browser.global.js +11 -0
  136. package/dist/scrollreveal.browser.global.js.map +1 -0
  137. package/dist/sortable.browser.global.js +2 -2
  138. package/dist/sortable.browser.global.js.map +1 -1
  139. package/dist/tabs.browser.global.js +3 -0
  140. package/dist/tabs.browser.global.js.map +1 -0
  141. package/dist/toggleable.browser.global.js +2 -2
  142. package/dist/toggleable.browser.global.js.map +1 -1
  143. package/dist/{types-CCc_2wAb.d.cts → types-DCCtVQS5.d.cts} +1 -1
  144. package/dist/{types-CCc_2wAb.d.ts → types-DCCtVQS5.d.ts} +1 -1
  145. package/package.json +45 -2
  146. package/src/behaviors/autodismiss.test.ts +61 -0
  147. package/src/behaviors/autodismiss.ts +107 -0
  148. package/src/behaviors/clickoutside.test.ts +52 -0
  149. package/src/behaviors/clickoutside.ts +77 -0
  150. package/src/behaviors/clipboard.test.ts +67 -0
  151. package/src/behaviors/clipboard.ts +130 -0
  152. package/src/behaviors/draggable.ts +62 -15
  153. package/src/behaviors/focustrap.test.ts +59 -0
  154. package/src/behaviors/focustrap.ts +158 -0
  155. package/src/behaviors/index.ts +37 -0
  156. package/src/behaviors/integration.test.ts +120 -45
  157. package/src/behaviors/removable.ts +4 -5
  158. package/src/behaviors/resizable.ts +63 -14
  159. package/src/behaviors/scrollreveal.test.ts +59 -0
  160. package/src/behaviors/scrollreveal.ts +78 -0
  161. package/src/behaviors/sortable.ts +61 -14
  162. package/src/behaviors/tabs.test.ts +81 -0
  163. package/src/behaviors/tabs.ts +196 -0
  164. package/src/behaviors/toggleable.ts +45 -13
  165. package/src/generated/metadata.ts +38 -7
  166. package/src/generated/types.ts +5 -5
  167. package/src/index.test.ts +143 -5
  168. package/src/index.ts +65 -13
  169. package/src/loaders.ts +18 -0
  170. package/src/registry.test.ts +26 -5
  171. package/src/schemas/autodismiss.schema.ts +66 -0
  172. package/src/schemas/clickoutside.schema.ts +39 -0
  173. package/src/schemas/clipboard.schema.ts +72 -0
  174. package/src/schemas/focustrap.schema.ts +53 -0
  175. package/src/schemas/index.ts +18 -0
  176. package/src/schemas/scrollreveal.schema.ts +60 -0
  177. package/src/schemas/tabs.schema.ts +66 -0
  178. package/src/schemas/types.ts +13 -1
  179. package/dist/chunk-2NQHIHD5.js.map +0 -1
  180. package/dist/chunk-3Q652JQB.js +0 -37
  181. package/dist/chunk-3Q652JQB.js.map +0 -1
  182. package/dist/chunk-HMRPQWQU.js +0 -37
  183. package/dist/chunk-HMRPQWQU.js.map +0 -1
  184. package/dist/chunk-MEP6B7XW.js +0 -37
  185. package/dist/chunk-MEP6B7XW.js.map +0 -1
  186. package/dist/chunk-URBOGGW6.js +0 -32
  187. package/dist/chunk-URBOGGW6.js.map +0 -1
  188. package/dist/chunk-WU37DFAL.js +0 -37
  189. package/dist/chunk-WU37DFAL.js.map +0 -1
@@ -1,4 +1,4 @@
1
- "use strict";var HyperFixiBehaviors=(()=>{var E=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var We=Object.prototype.hasOwnProperty;var a=(e,t)=>()=>(e&&(t=e(e=0)),t);var S=(e,t)=>{for(var r in t)E(e,r,{get:t[r],enumerable:!0})},Ce=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ee(t))!We.call(e,n)&&n!==r&&E(e,n,{get:()=>t[n],enumerable:!(o=Ae(t,n))||o.enumerable});return e};var _e=e=>Ce(E({},"__esModule",{value:!0}),e);var s,W=a(()=>{"use strict";s={name:"Draggable",category:"ui",tier:"core",version:"1.0.0",description:"Makes elements draggable with pointer events",parameters:[{name:"dragHandle",type:"selector",optional:!0,default:"me",description:"CSS selector for the drag handle element"}],events:[{name:"draggable:start",description:"Fired when drag begins"},{name:"draggable:move",description:"Fired during each movement"},{name:"draggable:end",description:"Fired when drag completes"}],requirements:["position: absolute or position: fixed on the element"],source:`
1
+ "use strict";var HyperFixiBehaviors=(()=>{var le=Object.defineProperty;var Wt=Object.getOwnPropertyDescriptor;var _t=Object.getOwnPropertyNames;var Yt=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(e&&(t=e(e=0)),t);var y=(e,t)=>{for(var r in t)le(e,r,{get:t[r],enumerable:!0})},Nt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _t(t))!Yt.call(e,i)&&i!==r&&le(e,i,{get:()=>t[i],enumerable:!(o=Wt(t,i))||o.enumerable});return e};var $t=e=>Nt(le({},"__esModule",{value:!0}),e);var T,de=u(()=>{"use strict";T={name:"Draggable",category:"ui",tier:"core",version:"1.0.0",description:"Makes elements draggable with pointer events",parameters:[{name:"dragHandle",type:"selector",optional:!0,default:"me",description:"CSS selector for the drag handle element"}],events:[{name:"draggable:start",description:"Fired when drag begins"},{name:"draggable:move",description:"Fired during each movement"},{name:"draggable:end",description:"Fired when drag completes"}],requirements:["position: absolute or position: fixed on the element"],source:`
2
2
  behavior Draggable(dragHandle)
3
3
  init
4
4
  if no dragHandle set dragHandle to me
@@ -21,7 +21,7 @@ behavior Draggable(dragHandle)
21
21
  trigger draggable:end
22
22
  end
23
23
  end
24
- `.trim()}});var re={};S(re,{default:()=>H,draggableMetadata:()=>_,draggableSource:()=>C,registerDraggable:()=>f});async function f(e){let t=e||(typeof window<"u"?window.lokascript:null);if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r=t.compileSync(s.source,{traditional:!0});if(!r.ok)throw new Error(`Failed to compile Draggable behavior: ${JSON.stringify(r.errors)}`);let o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r.ast,o)}var C,_,H,B=a(()=>{"use strict";W();C=s.source,_=s;typeof window<"u"&&window.lokascript&&f().catch(console.error);H={source:s.source,metadata:s,register:f}});var l,z=a(()=>{"use strict";l={name:"Removable",category:"data",tier:"common",version:"1.2.0",description:"Makes elements removable on click",parameters:[{name:"triggerEl",type:"selector",optional:!0,default:"me",description:"Element that triggers removal (e.g., a close button)"},{name:"confirm",type:"boolean",optional:!0,default:!1,description:"Show confirmation dialog before removal"},{name:"effect",type:"string",optional:!0,default:"none",enum:["fade","none"],description:'Transition effect: "fade" or "none"'}],events:[{name:"removable:before",description:"Fired before removal (cancelable)"},{name:"removable:removed",description:"Fired after removal"}],source:`
24
+ `.trim()}});function s(){if(typeof window>"u")return null;let e=window;return e.lokascript||e.hyperfixi||null}var b=u(()=>{"use strict"});var nt={};y(nt,{default:()=>pe,draggableMetadata:()=>me,draggableSource:()=>ue,registerDraggable:()=>M});function qt(e,t){let r=e;if(t.dragHandle&&t.dragHandle!=="me")if(typeof t.dragHandle=="string"){let o=e.querySelector(t.dragHandle);o instanceof HTMLElement&&(r=o)}else t.dragHandle instanceof HTMLElement&&(r=t.dragHandle);r.addEventListener("pointerdown",o=>{o.preventDefault(),o.stopPropagation(),e.dispatchEvent(new CustomEvent("draggable:start",{bubbles:!0}));let i=e.offsetLeft,m=e.offsetTop,a=o.clientX-i,c=o.clientY-m;function p(d){e.style.left=`${d.clientX-a}px`,e.style.top=`${d.clientY-c}px`,e.dispatchEvent(new CustomEvent("draggable:move",{bubbles:!0}))}function l(){document.removeEventListener("pointermove",p),document.removeEventListener("pointerup",l),e.dispatchEvent(new CustomEvent("draggable:end",{bubbles:!0}))}document.addEventListener("pointermove",p),document.addEventListener("pointerup",l)})}async function M(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"Draggable",parameters:["dragHandle"],eventHandlers:[],imperativeInstaller:qt},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var ue,me,pe,K=u(()=>{"use strict";de();b();ue=T.source,me=T;s()&&M().catch(console.error);pe={source:T.source,metadata:T,register:M}});var k,fe=u(()=>{"use strict";k={name:"Removable",category:"data",tier:"common",version:"1.2.0",description:"Makes elements removable on click",parameters:[{name:"triggerEl",type:"selector",optional:!0,default:"me",description:"Element that triggers removal (e.g., a close button)"},{name:"confirm",type:"boolean",optional:!0,default:!1,description:"Show confirmation dialog before removal"},{name:"effect",type:"string",optional:!0,default:"none",enum:["fade","none"],description:'Transition effect: "fade" or "none"'}],events:[{name:"removable:before",description:"Fired before removal (cancelable)"},{name:"removable:removed",description:"Fired after removal"}],source:`
25
25
  behavior Removable(triggerEl, confirm, effect)
26
26
  init
27
27
  if triggerEl is undefined
@@ -42,7 +42,7 @@ behavior Removable(triggerEl, confirm, effect)
42
42
  remove me
43
43
  end
44
44
  end
45
- `.trim()}});var oe={};S(oe,{default:()=>P,registerRemovable:()=>u,removableMetadata:()=>T,removableSource:()=>I});async function u(e){let t=e||(typeof window<"u"?window.lokascript:null);if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r=t.compileSync(l.source,{traditional:!0});if(!r.ok)throw new Error(`Failed to compile Removable behavior: ${JSON.stringify(r.errors)}`);let o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r.ast,o)}var I,T,P,k=a(()=>{"use strict";z();I=l.source,T=l;typeof window<"u"&&window.lokascript&&u().catch(console.error);P={source:l.source,metadata:l,register:u}});var c,F=a(()=>{"use strict";c={name:"Toggleable",category:"form",tier:"core",version:"1.0.0",description:"Toggles a CSS class on click",parameters:[{name:"cls",type:"string",optional:!0,default:"active",description:"CSS class to toggle"},{name:"target",type:"selector",optional:!0,default:"me",description:"Element to toggle the class on"}],events:[{name:"toggleable:on",description:"Fired when class is added"},{name:"toggleable:off",description:"Fired when class is removed"}],source:`
45
+ `.trim()}});var st={};y(st,{default:()=>ge,registerRemovable:()=>C,removableMetadata:()=>ve,removableSource:()=>he});async function C(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r=t.compileSync(k.source,{traditional:!0});if(!r.ok)throw new Error(`Failed to compile Removable behavior: ${JSON.stringify(r.errors)}`);let o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r.ast,o)}var he,ve,ge,J=u(()=>{"use strict";fe();b();he=k.source,ve=k;s()&&C().catch(console.error);ge={source:k.source,metadata:k,register:C}});var B,be=u(()=>{"use strict";B={name:"Toggleable",category:"form",tier:"core",version:"1.0.0",description:"Toggles a CSS class on click",parameters:[{name:"cls",type:"string",optional:!0,default:"active",description:"CSS class to toggle"},{name:"target",type:"selector",optional:!0,default:"me",description:"Element to toggle the class on"}],events:[{name:"toggleable:on",description:"Fired when class is added"},{name:"toggleable:off",description:"Fired when class is removed"}],source:`
46
46
  behavior Toggleable(cls, target)
47
47
  init
48
48
  if cls is undefined
@@ -56,7 +56,7 @@ behavior Toggleable(cls, target)
56
56
  toggle .{cls} on target
57
57
  end
58
58
  end
59
- `.trim()}});var ae={};S(ae,{default:()=>$,registerToggleable:()=>v,toggleableMetadata:()=>Y,toggleableSource:()=>O});async function v(e){let t=e||(typeof window<"u"?window.lokascript:null);if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r=t.compileSync(c.source,{traditional:!0});if(!r.ok)throw new Error(`Failed to compile Toggleable behavior: ${JSON.stringify(r.errors)}`);let o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r.ast,o)}var O,Y,$,R=a(()=>{"use strict";F();O=c.source,Y=c;typeof window<"u"&&window.lokascript&&v().catch(console.error);$={source:c.source,metadata:c,register:v}});var d,N=a(()=>{"use strict";d={name:"Sortable",category:"ui",tier:"common",version:"1.0.0",description:"Makes child elements reorderable via drag-and-drop",parameters:[{name:"handle",type:"selector",optional:!0,default:"none",description:"CSS selector for drag handles within items"},{name:"dragClass",type:"string",optional:!0,default:"sorting",description:"CSS class added to item during drag"}],events:[{name:"sortable:start",description:"Fired when drag begins"},{name:"sortable:move",description:"Fired during drag \u2014 handle this event to reorder DOM elements"},{name:"sortable:end",description:"Fired when drag completes"}],requirements:["Users must handle DOM reordering in sortable:move event handlers"],source:`
59
+ `.trim()}});var ct={};y(ct,{default:()=>we,registerToggleable:()=>R,toggleableMetadata:()=>xe,toggleableSource:()=>ye});function Xt(e,t){let r=t.cls||"active",o=e;if(t.target&&t.target!=="me")if(typeof t.target=="string"){let i=document.querySelector(t.target);i instanceof HTMLElement&&(o=i)}else t.target instanceof HTMLElement&&(o=t.target);e.addEventListener("click",()=>{let i=o.classList.contains(r);o.classList.toggle(r),o.dispatchEvent(new CustomEvent(i?"toggleable:off":"toggleable:on",{bubbles:!0}))})}async function R(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"Toggleable",parameters:["cls","target"],eventHandlers:[],imperativeInstaller:Xt},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var ye,xe,we,Q=u(()=>{"use strict";be();b();ye=B.source,xe=B;s()&&R().catch(console.error);we={source:B.source,metadata:B,register:R}});var H,Se=u(()=>{"use strict";H={name:"Sortable",category:"ui",tier:"common",version:"1.0.0",description:"Makes child elements reorderable via drag-and-drop",parameters:[{name:"handle",type:"selector",optional:!0,default:"none",description:"CSS selector for drag handles within items"},{name:"dragClass",type:"string",optional:!0,default:"sorting",description:"CSS class added to item during drag"}],events:[{name:"sortable:start",description:"Fired when drag begins"},{name:"sortable:move",description:"Fired during drag \u2014 handle this event to reorder DOM elements"},{name:"sortable:end",description:"Fired when drag completes"}],requirements:["Users must handle DOM reordering in sortable:move event handlers"],source:`
60
60
  behavior Sortable(handle, dragClass)
61
61
  init
62
62
  if no dragClass set dragClass to "sorting"
@@ -79,7 +79,7 @@ behavior Sortable(handle, dragClass)
79
79
  trigger sortable:end on me
80
80
  end
81
81
  end
82
- `.trim()}});var ie={};S(ie,{default:()=>V,registerSortable:()=>b,sortableMetadata:()=>X,sortableSource:()=>D});async function b(e){let t=e||(typeof window<"u"?window.lokascript:null);if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r=t.compileSync(d.source,{traditional:!0});if(!r.ok)throw new Error(`Failed to compile Sortable behavior: ${JSON.stringify(r.errors)}`);let o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r.ast,o)}var D,X,V,M=a(()=>{"use strict";N();D=d.source,X=d;typeof window<"u"&&window.lokascript&&b().catch(console.error);V={source:d.source,metadata:d,register:b}});var m,G=a(()=>{"use strict";m={name:"Resizable",category:"ui",tier:"optional",version:"1.0.0",description:"Makes elements resizable by dragging",parameters:[{name:"handle",type:"selector",optional:!0,default:"me",description:"CSS selector for the resize handle (defaults to the element itself)"},{name:"minWidth",type:"number",optional:!0,default:50,description:"Minimum width in pixels"},{name:"minHeight",type:"number",optional:!0,default:50,description:"Minimum height in pixels"},{name:"maxWidth",type:"number",optional:!0,default:9999,description:"Maximum width in pixels"},{name:"maxHeight",type:"number",optional:!0,default:9999,description:"Maximum height in pixels"}],events:[{name:"resizable:start",description:"Fired when resize begins"},{name:"resizable:resize",description:"Fired during resize"},{name:"resizable:end",description:"Fired when resize completes"}],source:`
82
+ `.trim()}});var lt={};y(lt,{default:()=>Le,registerSortable:()=>A,sortableMetadata:()=>ke,sortableSource:()=>Ee});function Ut(e,t){let r=t.dragClass||"sorting",o=t.handle||null;e.addEventListener("pointerdown",i=>{let m=i.target,a=m.closest("li");if(!a||!e.contains(a)||o&&!m.closest(o))return;i.preventDefault(),a.classList.add(r),e.dispatchEvent(new CustomEvent("sortable:start",{bubbles:!0,detail:{item:a}}));function c(l){e.dispatchEvent(new CustomEvent("sortable:move",{bubbles:!0,detail:{clientY:l.clientY,item:a}}))}function p(){document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",p),a.classList.remove(r),e.dispatchEvent(new CustomEvent("sortable:end",{bubbles:!0,detail:{item:a}}))}document.addEventListener("pointermove",c),document.addEventListener("pointerup",p)})}async function A(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"Sortable",parameters:["handle","dragClass"],eventHandlers:[],imperativeInstaller:Ut},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var Ee,ke,Le,Z=u(()=>{"use strict";Se();b();Ee=H.source,ke=H;s()&&A().catch(console.error);Le={source:H.source,metadata:H,register:A}});var I,Te=u(()=>{"use strict";I={name:"Resizable",category:"ui",tier:"optional",version:"1.0.0",description:"Makes elements resizable by dragging",parameters:[{name:"handle",type:"selector",optional:!0,default:"me",description:"CSS selector for the resize handle (defaults to the element itself)"},{name:"minWidth",type:"number",optional:!0,default:50,description:"Minimum width in pixels"},{name:"minHeight",type:"number",optional:!0,default:50,description:"Minimum height in pixels"},{name:"maxWidth",type:"number",optional:!0,default:9999,description:"Maximum width in pixels"},{name:"maxHeight",type:"number",optional:!0,default:9999,description:"Maximum height in pixels"}],events:[{name:"resizable:start",description:"Fired when resize begins"},{name:"resizable:resize",description:"Fired during resize"},{name:"resizable:end",description:"Fired when resize completes"}],source:`
83
83
  behavior Resizable(handle, minWidth, minHeight, maxWidth, maxHeight)
84
84
  init
85
85
  if no handle set handle to me
@@ -112,5 +112,34 @@ behavior Resizable(handle, minWidth, minHeight, maxWidth, maxHeight)
112
112
  trigger resizable:end
113
113
  end
114
114
  end
115
- `.trim()}});var ne={};S(ne,{default:()=>j,registerResizable:()=>w,resizableMetadata:()=>U,resizableSource:()=>J});async function w(e){let t=e||(typeof window<"u"?window.lokascript:null);if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r=t.compileSync(m.source,{traditional:!0});if(!r.ok)throw new Error(`Failed to compile Resizable behavior: ${JSON.stringify(r.errors)}`);let o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r.ast,o)}var J,U,j,L=a(()=>{"use strict";G();J=m.source,U=m;typeof window<"u"&&window.lokascript&&w().catch(console.error);j={source:m.source,metadata:m,register:w}});var He={};S(He,{ALL_BEHAVIOR_NAMES:()=>ye,BEHAVIORS_BY_CATEGORY:()=>xe,BEHAVIORS_BY_TIER:()=>Be,BEHAVIOR_CATEGORIES:()=>ke,BEHAVIOR_TIERS:()=>Re,Draggable:()=>H,Removable:()=>P,Resizable:()=>j,Sortable:()=>V,Toggleable:()=>$,draggableMetadata:()=>_,draggableSource:()=>C,getAllSchemas:()=>he,getAllSchemasRecord:()=>fe,getAvailableBehaviors:()=>Q,getBehavior:()=>se,getBehaviorsByCategory:()=>Z,getBehaviorsByTier:()=>ee,getRegisteredBehaviors:()=>pe,getSchema:()=>ce,hasLoader:()=>ge,isRegistered:()=>me,loadAll:()=>be,loadBehavior:()=>y,preloadCategory:()=>ve,preloadTier:()=>ue,ready:()=>A,registerAll:()=>Me,registerAllWithRuntime:()=>Se,registerBehavior:()=>K,registerDraggable:()=>f,registerLoader:()=>h,registerRemovable:()=>u,registerResizable:()=>w,registerSchema:()=>p,registerSortable:()=>b,registerToggleable:()=>v,registerWithRuntime:()=>we,removableMetadata:()=>T,removableSource:()=>I,resizableMetadata:()=>U,resizableSource:()=>J,sortableMetadata:()=>X,sortableSource:()=>D,toggleableMetadata:()=>Y,toggleableSource:()=>O,tryGetBehavior:()=>le,tryGetSchema:()=>de});B();k();R();M();L();var i=new Map,g=new Map,x=new Map,q=new Map;function K(e,t){i.set(e,t),t.metadata&&g.set(e,t.metadata)}function p(e){g.set(e.name,e)}function h(e,t){x.set(e,t)}function se(e){let t=i.get(e);if(!t){let r=Array.from(i.keys()).join(", ");throw new Error(`Behavior '${e}' is not registered. Registered behaviors: ${r||"none"}. Use loadBehavior('${e}') to lazy load it.`)}return t}function le(e){return i.get(e)}function ce(e){let t=g.get(e);if(!t)throw new Error(`Schema for behavior '${e}' is not registered. Use tryGetSchema('${e}') for a non-throwing alternative.`);return t}function de(e){return g.get(e)}function me(e){return i.has(e)}function ge(e){return x.has(e)}function pe(){return Array.from(i.keys())}function Q(){let e=new Set([...i.keys(),...x.keys()]);return Array.from(e)}function Z(e){let t=[];for(let[r,o]of g)o.category===e&&t.push(r);return t}function ee(e){let t=[];for(let[r,o]of g)o.tier===e&&t.push(r);return t}function he(){return Array.from(g.values())}function fe(){let e={};for(let[t,r]of g)e[t]=r;return e}async function y(e){let t=i.get(e);if(t)return t;let r=q.get(e);if(r)return r;let o=x.get(e);if(!o)throw new Error(`No loader registered for behavior '${e}'. Available loaders: ${Array.from(x.keys()).join(", ")||"none"}`);let n=o().then(Le=>{let te=Le.default;return K(e,te),q.delete(e),te});return q.set(e,n),n}async function ue(e){let t=ee(e);await Promise.all(t.map(r=>y(r).catch(o=>{console.warn(`[behaviors] Failed to preload '${r}' (tier: ${e}):`,o)})))}async function ve(e){let t=Z(e);await Promise.all(t.map(r=>y(r).catch(o=>{console.warn(`[behaviors] Failed to preload '${r}' (category: ${e}):`,o)})))}async function be(){let e=Q();await Promise.all(e.map(t=>y(t).catch(r=>{console.warn(`[behaviors] Failed to load '${t}':`,r)})))}async function we(e,t){await(await y(e)).register(t)}async function Se(e){let t=Array.from(i.values()).map(r=>r.register(e));await Promise.all(t)}W();N();G();z();F();p(s);p(d);p(m);p(l);p(c);h("Draggable",()=>Promise.resolve().then(()=>(B(),re)));h("Sortable",()=>Promise.resolve().then(()=>(M(),ie)));h("Resizable",()=>Promise.resolve().then(()=>(L(),ne)));h("Removable",()=>Promise.resolve().then(()=>(k(),oe)));h("Toggleable",()=>Promise.resolve().then(()=>(R(),ae)));var ye=["Draggable","Sortable","Resizable","Removable","Toggleable"],xe={ui:["Draggable","Sortable","Resizable"],data:["Removable"],animation:[],form:["Toggleable"],layout:[]},Be={core:["Draggable","Toggleable"],common:["Sortable","Removable"],optional:["Resizable"]},ke={Draggable:"ui",Sortable:"ui",Resizable:"ui",Removable:"data",Toggleable:"form"},Re={Draggable:"core",Sortable:"common",Resizable:"optional",Removable:"common",Toggleable:"core"};B();k();R();M();L();async function Me(e){await Promise.all([f(e),u(e),v(e),b(e),w(e)])}var A=null;if(typeof window<"u"&&window.lokascript){let e=window;A=Me(),e.__lokascript_behaviors_ready=A,A.then(()=>{let t=e.lokascript,r=e.__lokascript_behaviors_ready;delete e.__lokascript_behaviors_ready,t.attributeProcessor?.scanAndProcessAll?t.attributeProcessor.scanAndProcessAll().finally(()=>{e.__lokascript_behaviors_ready=r}):t.processNode&&(t.processNode(document),e.__lokascript_behaviors_ready=r)}).catch(t=>{console.error("[behaviors] Auto-registration failed:",t)})}return _e(He);})();
115
+ `.trim()}});var dt={};y(dt,{default:()=>Be,registerResizable:()=>D,resizableMetadata:()=>Ce,resizableSource:()=>Me});function Vt(e,t){let r=e;if(t.handle&&t.handle!=="me")if(typeof t.handle=="string"){let c=e.querySelector(t.handle);c instanceof HTMLElement&&(r=c)}else t.handle instanceof HTMLElement&&(r=t.handle);let o=t.minWidth??50,i=t.minHeight??50,m=t.maxWidth??9999,a=t.maxHeight??9999;r.addEventListener("pointerdown",c=>{c.preventDefault(),e.dispatchEvent(new CustomEvent("resizable:start",{bubbles:!0}));let p=e.offsetWidth,l=e.offsetHeight,d=c.clientX,w=c.clientY;function g(n){let f=Math.max(o,Math.min(m,p+(n.clientX-d))),E=Math.max(i,Math.min(a,l+(n.clientY-w)));e.style.width=`${f}px`,e.style.height=`${E}px`,e.dispatchEvent(new CustomEvent("resizable:resize",{bubbles:!0}))}function ce(){document.removeEventListener("pointermove",g),document.removeEventListener("pointerup",ce),e.dispatchEvent(new CustomEvent("resizable:end",{bubbles:!0}))}document.addEventListener("pointermove",g),document.addEventListener("pointerup",ce)})}async function D(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"Resizable",parameters:["handle","minWidth","minHeight","maxWidth","maxHeight"],eventHandlers:[],imperativeInstaller:Vt},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var Me,Ce,Be,ee=u(()=>{"use strict";Te();b();Me=I.source,Ce=I;s()&&D().catch(console.error);Be={source:I.source,metadata:I,register:D}});var F,Re=u(()=>{"use strict";F={name:"Clipboard",category:"ui",tier:"core",version:"1.0.0",description:"Copies text to clipboard on click with visual feedback",parameters:[{name:"text",type:"string",optional:!0,description:"Literal text to copy (takes priority over source)"},{name:"source",type:"selector",optional:!0,default:"me",description:"Element whose textContent or value is copied"},{name:"feedback",type:"selector",optional:!0,description:"Element to show .copied feedback on (defaults to the installed element)"},{name:"feedbackDuration",type:"number",optional:!0,default:2e3,description:"Duration in ms to show .copied class feedback"}],events:[{name:"clipboard:copied",description:"Fired after text is copied successfully"},{name:"clipboard:error",description:"Fired when clipboard write fails"}],requirements:["navigator.clipboard.writeText() requires HTTPS or localhost",'Falls back to document.execCommand("copy") for older browsers'],source:["behavior Clipboard(text, source, feedback, feedbackDuration)"," init"," if feedbackDuration is undefined set feedbackDuration to 2000"," if source is undefined set source to me"," end"," on click"," if text is not undefined"," set copyText to text"," else"," set copyText to source's value or source's textContent"," end"," js(copyText) navigator.clipboard.writeText(copyText) end"," set feedbackEl to feedback or me"," add .copied to feedbackEl"," wait feedbackDuration ms"," remove .copied from feedbackEl"," trigger clipboard:copied"," end","end"].join(`
116
+ `)}});var mt={};y(mt,{clipboardMetadata:()=>Ae,clipboardSource:()=>He,default:()=>Ie,registerClipboard:()=>P});async function Gt(e){if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(e);return}let t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")}finally{document.body.removeChild(t)}}function ut(e,t){return!t||t==="me"?e:t instanceof HTMLElement?t:typeof t=="string"&&(e.querySelector(t)||document.querySelector(t))||null}function jt(e,t){let r=typeof t.feedbackDuration=="number"?t.feedbackDuration:2e3;e.addEventListener("click",async()=>{let o;if(t.text!=null)o=String(t.text);else{let i=ut(e,t.source)||e;o=i.value??i.textContent??""}try{await Gt(o);let i=ut(e,t.feedback)||e;i.classList.add("copied"),setTimeout(()=>i.classList.remove("copied"),r),e.dispatchEvent(new CustomEvent("clipboard:copied",{bubbles:!0,detail:{text:o}}))}catch(i){e.dispatchEvent(new CustomEvent("clipboard:error",{bubbles:!0,detail:{error:i}}))}})}async function P(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"Clipboard",parameters:["text","source","feedback","feedbackDuration"],eventHandlers:[],imperativeInstaller:jt},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var He,Ae,Ie,te=u(()=>{"use strict";Re();b();He=F.source,Ae=F;s()&&P().catch(console.error);Ie={source:F.source,metadata:F,register:P}});var O,De=u(()=>{"use strict";O={name:"AutoDismiss",category:"ui",tier:"core",version:"1.0.0",description:"Auto-removes elements after a delay with optional pause-on-hover",parameters:[{name:"delay",type:"number",optional:!0,default:5e3,description:"Time in ms before the element is removed"},{name:"pauseOnHover",type:"boolean",optional:!0,default:!0,description:"Pause the countdown when the mouse hovers over the element"},{name:"effect",type:"string",optional:!0,default:"none",enum:["fade","none"],description:'Transition effect before removal: "fade" or "none"'}],events:[{name:"autodismiss:start",description:"Fired when the countdown timer starts"},{name:"autodismiss:dismissed",description:"Fired before removal (cancelable via preventDefault)"},{name:"autodismiss:paused",description:"Fired when the timer is paused on hover"},{name:"autodismiss:resumed",description:"Fired when the timer resumes on mouseleave"}],source:["behavior AutoDismiss(delay, pauseOnHover, effect)"," init"," if delay is undefined set delay to 5000"," if pauseOnHover is undefined set pauseOnHover to true",' if effect is undefined set effect to "none"'," end"," on load"," trigger autodismiss:start"," wait delay ms"," trigger autodismiss:dismissed",' if effect is "fade"'," transition opacity to 0 over 300ms"," end"," remove me"," end","end"].join(`
117
+ `)}});var pt={};y(pt,{autoDismissMetadata:()=>Pe,autoDismissSource:()=>Fe,default:()=>Oe,registerAutoDismiss:()=>z});function Kt(e,t){let r=typeof t.delay=="number"?t.delay:5e3,o=t.pauseOnHover!==!1,i=t.effect==="fade"?"fade":"none",m=null,a=r,c=Date.now();function p(){let d=new CustomEvent("autodismiss:dismissed",{bubbles:!0,cancelable:!0});e.dispatchEvent(d),!d.defaultPrevented&&(i==="fade"?(e.style.transition="opacity 300ms",e.style.opacity="0",setTimeout(()=>e.remove(),300)):e.remove())}function l(){c=Date.now(),m=setTimeout(p,a)}e.dispatchEvent(new CustomEvent("autodismiss:start",{bubbles:!0})),l(),o&&(e.addEventListener("mouseenter",()=>{m!=null&&(clearTimeout(m),m=null,a-=Date.now()-c,a<0&&(a=0),e.dispatchEvent(new CustomEvent("autodismiss:paused",{bubbles:!0})))}),e.addEventListener("mouseleave",()=>{m==null&&e.isConnected&&(e.dispatchEvent(new CustomEvent("autodismiss:resumed",{bubbles:!0})),l())}))}async function z(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"AutoDismiss",parameters:["delay","pauseOnHover","effect"],eventHandlers:[],imperativeInstaller:Kt},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var Fe,Pe,Oe,re=u(()=>{"use strict";De();b();Fe=O.source,Pe=O;s()&&z().catch(console.error);Oe={source:O.source,metadata:O,register:z}});var W,ze=u(()=>{"use strict";W={name:"ClickOutside",category:"ui",tier:"core",version:"1.0.0",description:"Fires an event when the user clicks outside the element",parameters:[{name:"active",type:"boolean",optional:!0,default:!0,description:"Whether the listener is active (can be toggled programmatically)"}],events:[{name:"clickoutside",description:"Fired when a pointer press occurs outside the element"}],requirements:["Uses pointerdown instead of click to avoid timing issues with removed elements"],source:`
118
+ behavior ClickOutside(active)
119
+ init
120
+ if active is undefined set active to true
121
+ end
122
+ on pointerdown from document
123
+ if active and not me.contains(event.target)
124
+ trigger clickoutside on me
125
+ end
126
+ end
127
+ end`.trim()}});var ft={};y(ft,{clickOutsideMetadata:()=>_e,clickOutsideSource:()=>We,default:()=>Ye,registerClickOutside:()=>_});function Jt(e,t){let r=t.active!==!1;function o(i){if(!e.isConnected){document.removeEventListener("pointerdown",o);return}r&&!e.contains(i.target)&&e.dispatchEvent(new CustomEvent("clickoutside",{bubbles:!0}))}document.addEventListener("pointerdown",o),e.addEventListener("clickoutside:activate",()=>{r=!0}),e.addEventListener("clickoutside:deactivate",()=>{r=!1})}async function _(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"ClickOutside",parameters:["active"],eventHandlers:[],imperativeInstaller:Jt},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var We,_e,Ye,oe=u(()=>{"use strict";ze();b();We=W.source,_e=W;s()&&_().catch(console.error);Ye={source:W.source,metadata:W,register:_}});var Y,Ne=u(()=>{"use strict";Y={name:"FocusTrap",category:"ui",tier:"core",version:"1.0.0",description:"Confines Tab navigation inside an element with ARIA support",parameters:[{name:"active",type:"boolean",optional:!0,default:!0,description:"Whether the trap is active on install"},{name:"initialFocus",type:"selector",optional:!0,description:"Element to focus when the trap activates"},{name:"returnFocus",type:"boolean",optional:!0,default:!0,description:"Restore focus to the previously focused element on deactivation"}],events:[{name:"focustrap:activated",description:"Fired when the trap is activated"},{name:"focustrap:deactivated",description:"Fired when the trap is deactivated"}],requirements:['Sets aria-modal="true" on the element when active',"Listens for focustrap:activate and focustrap:deactivate custom events for programmatic control"],source:`
128
+ behavior FocusTrap(active, initialFocus, returnFocus)
129
+ init
130
+ if active is undefined set active to true
131
+ if returnFocus is undefined set returnFocus to true
132
+ end
133
+ -- Imperative installer handles Tab key trapping and focus management
134
+ end`.trim()}});var ht={};y(ht,{default:()=>Xe,focusTrapMetadata:()=>qe,focusTrapSource:()=>$e,registerFocusTrap:()=>N});function Zt(e,t){return t?t instanceof HTMLElement?t:typeof t=="string"&&(e.querySelector(t)||document.querySelector(t))||null:null}function er(e,t){let r=t.returnFocus!==!1,o=!1,i=null;function m(){return Array.from(e.querySelectorAll(Qt))}function a(l){if(!o||l.key!=="Tab")return;let d=m();if(d.length===0){l.preventDefault();return}l.preventDefault();let w=d.indexOf(document.activeElement);if(l.shiftKey){let g=w<=0?d.length-1:w-1;d[g].focus()}else{let g=w>=d.length-1?0:w+1;d[g].focus()}}function c(){if(o)return;o=!0,i=document.activeElement,e.setAttribute("aria-modal","true");let l=Zt(e,t.initialFocus);if(l)l.focus();else{let d=m();d.length>0&&d[0].focus()}e.dispatchEvent(new CustomEvent("focustrap:activated",{bubbles:!0}))}function p(){o&&(o=!1,e.removeAttribute("aria-modal"),r&&i instanceof HTMLElement&&i.focus(),i=null,e.dispatchEvent(new CustomEvent("focustrap:deactivated",{bubbles:!0})))}e.addEventListener("keydown",a),e.addEventListener("focustrap:activate",()=>c()),e.addEventListener("focustrap:deactivate",()=>p()),t.active!==!1&&c()}async function N(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"FocusTrap",parameters:["active","initialFocus","returnFocus"],eventHandlers:[],imperativeInstaller:er},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var $e,qe,Qt,Xe,ie=u(()=>{"use strict";Ne();b();$e=Y.source,qe=Y,Qt=["a[href]","button:not(:disabled)","input:not(:disabled)","select:not(:disabled)","textarea:not(:disabled)",'[tabindex]:not([tabindex="-1"])'].join(", ");s()&&N().catch(console.error);Xe={source:Y.source,metadata:Y,register:N}});var $,Ue=u(()=>{"use strict";$={name:"ScrollReveal",category:"layout",tier:"common",version:"1.0.0",description:"Adds a class when the element enters the viewport via IntersectionObserver",parameters:[{name:"cls",type:"string",optional:!0,default:"revealed",description:"CSS class added when element enters viewport"},{name:"threshold",type:"number",optional:!0,default:.1,description:"Intersection ratio threshold (0-1) for triggering"},{name:"once",type:"boolean",optional:!0,default:!0,description:"If true, disconnect observer after first intersection"},{name:"rootMargin",type:"string",optional:!0,default:"0px",description:"CSS margin around the viewport for triggering earlier or later"}],events:[{name:"scrollreveal:enter",description:"Fired when the element enters the viewport"},{name:"scrollreveal:exit",description:"Fired when the element exits the viewport"}],requirements:["Uses IntersectionObserver API (supported in all modern browsers)"],source:`
135
+ behavior ScrollReveal(cls, threshold, once, rootMargin)
136
+ init
137
+ if cls is undefined set cls to "revealed"
138
+ if threshold is undefined set threshold to 0.1
139
+ if once is undefined set once to true
140
+ if rootMargin is undefined set rootMargin to "0px"
141
+ end
142
+ -- Imperative installer handles IntersectionObserver setup
143
+ end`.trim()}});var vt={};y(vt,{default:()=>je,registerScrollReveal:()=>q,scrollRevealMetadata:()=>Ge,scrollRevealSource:()=>Ve});function tr(e,t){let r=typeof t.cls=="string"?t.cls:"revealed",o=typeof t.threshold=="number"?t.threshold:.1,i=t.once!==!1,m=typeof t.rootMargin=="string"?t.rootMargin:"0px",a=new IntersectionObserver(c=>{for(let p of c)p.isIntersecting?(e.classList.add(r),e.dispatchEvent(new CustomEvent("scrollreveal:enter",{bubbles:!0})),i&&a.disconnect()):i||(e.classList.remove(r),e.dispatchEvent(new CustomEvent("scrollreveal:exit",{bubbles:!0})))},{threshold:o,rootMargin:m});a.observe(e)}async function q(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"ScrollReveal",parameters:["cls","threshold","once","rootMargin"],eventHandlers:[],imperativeInstaller:tr},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var Ve,Ge,je,ae=u(()=>{"use strict";Ue();b();Ve=$.source,Ge=$;s()&&q().catch(console.error);je={source:$.source,metadata:$,register:q}});var X,Ke=u(()=>{"use strict";X={name:"Tabs",category:"ui",tier:"core",version:"1.0.0",description:"WAI-ARIA compliant tabs with roving tabindex keyboard navigation. Auto-wires role, aria-selected, aria-controls, and aria-labelledby attributes.",parameters:[{name:"orientation",type:"string",optional:!0,default:"horizontal",enum:["horizontal","vertical"],description:"Arrow key direction: horizontal (Left/Right) or vertical (Up/Down)"},{name:"activeTab",type:"number",optional:!0,default:0,description:"Initial active tab index (zero-based)"},{name:"wrap",type:"boolean",optional:!0,default:!0,description:"Wrap to first/last tab when navigating past the end"},{name:"activeClass",type:"string",optional:!0,default:"active",description:"CSS class applied to the active tab and its panel"}],events:[{name:"tabs:change",description:"Fired before tab selection changes (cancelable via preventDefault)"},{name:"tabs:changed",description:"Fired after tab selection has changed"}],requirements:['Sets role="tablist" on the tab container','Sets role="tab" on tab buttons and role="tabpanel" on content panels',"Manages aria-selected, aria-controls, aria-labelledby, and tabindex","Keyboard: Arrow keys navigate, Home/End jump to first/last, Tab exits tablist"],source:["behavior Tabs(orientation, activeTab, wrap, activeClass)"," init",' if orientation is undefined set orientation to "horizontal"'," if activeTab is undefined set activeTab to 0"," if wrap is undefined set wrap to true",' if activeClass is undefined set activeClass to "active"'," end"," -- Imperative installer handles ARIA wiring and keyboard navigation","end"].join(`
144
+ `)}});var bt={};y(bt,{default:()=>Ze,registerTabs:()=>U,tabsMetadata:()=>Qe,tabsSource:()=>Je});function gt(e,t){return e.id||(e.id=`${t}-${++rr}`),e.id}function or(e,t){let r=t.orientation==="vertical"?"vertical":"horizontal",o=t.wrap!==!1,i=t.activeClass||"active",m=typeof t.activeTab=="number"?t.activeTab:0,a=Array.from(e.querySelectorAll('[role="tab"]')),c=Array.from(e.querySelectorAll('[role="tabpanel"]'));if(a.length===0||c.length===0)return;let p=e.querySelector('[role="tablist"]')||a[0].parentElement;p&&!p.getAttribute("role")&&p.setAttribute("role","tablist"),p&&p.setAttribute("aria-orientation",r);let l=Math.min(a.length,c.length);for(let n=0;n<l;n++){let f=gt(a[n],"tab"),E=gt(c[n],"tabpanel");a[n].setAttribute("aria-controls",E),c[n].setAttribute("aria-labelledby",f)}let d=-1;function w(n,f){if(n===f||n<0||n>=l)return!1;let E={tab:a[n],panel:c[n],index:n,previousIndex:f},j=new CustomEvent("tabs:change",{bubbles:!0,cancelable:!0,detail:E});return e.dispatchEvent(j),j.defaultPrevented?!1:(f>=0&&f<l&&(a[f].setAttribute("aria-selected","false"),a[f].setAttribute("tabindex","-1"),a[f].classList.remove(i),c[f].setAttribute("aria-hidden","true"),c[f].classList.remove(i)),a[n].setAttribute("aria-selected","true"),a[n].setAttribute("tabindex","0"),a[n].classList.add(i),c[n].setAttribute("aria-hidden","false"),c[n].classList.add(i),d=n,e.dispatchEvent(new CustomEvent("tabs:changed",{bubbles:!0,detail:E})),!0)}for(let n=0;n<l;n++)a[n].setAttribute("aria-selected","false"),a[n].setAttribute("tabindex","-1"),a[n].classList.remove(i),c[n].setAttribute("aria-hidden","true"),c[n].classList.remove(i);let g=Math.max(0,Math.min(m,l-1));a[g].setAttribute("aria-selected","true"),a[g].setAttribute("tabindex","0"),a[g].classList.add(i),c[g].setAttribute("aria-hidden","false"),c[g].classList.add(i),d=g;for(let n=0;n<l;n++)a[n].addEventListener("click",()=>{w(n,d),a[n].focus()});(p||e).addEventListener("keydown",n=>{let f=r==="horizontal",E=f?"ArrowRight":"ArrowDown",j=f?"ArrowLeft":"ArrowUp",x=null;n.key===E?(x=d+1,x>=l&&(x=o?0:null)):n.key===j?(x=d-1,x<0&&(x=o?l-1:null)):n.key==="Home"?x=0:n.key==="End"&&(x=l-1),x!==null&&(n.preventDefault(),w(x,d)&&a[x].focus())}),e.addEventListener("tabs:select",(n=>{let f=n.detail?.index;typeof f=="number"&&w(f,d)}))}async function U(e){let t=e||s();if(!t)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r={type:"behavior",name:"Tabs",parameters:["orientation","activeTab","wrap","activeClass"],eventHandlers:[],imperativeInstaller:or},o=t.createContext?t.createContext():{locals:new Map,globals:new Map};await t.execute(r,o)}var Je,Qe,rr,Ze,ne=u(()=>{"use strict";Ke();b();Je=X.source,Qe=X,rr=0;s()&&U().catch(console.error);Ze={source:X.source,metadata:X,register:U}});var ir={};y(ir,{ALL_BEHAVIOR_NAMES:()=>It,AutoDismiss:()=>Oe,BEHAVIORS_BY_CATEGORY:()=>Dt,BEHAVIORS_BY_TIER:()=>Ft,BEHAVIOR_CATEGORIES:()=>Pt,BEHAVIOR_TIERS:()=>Ot,ClickOutside:()=>Ye,Clipboard:()=>Ie,Draggable:()=>pe,FocusTrap:()=>Xe,Removable:()=>ge,Resizable:()=>Be,ScrollReveal:()=>je,Sortable:()=>Le,Tabs:()=>Ze,Toggleable:()=>we,autoDismissMetadata:()=>Pe,autoDismissSource:()=>Fe,clickOutsideMetadata:()=>_e,clickOutsideSource:()=>We,clipboardMetadata:()=>Ae,clipboardSource:()=>He,draggableMetadata:()=>me,draggableSource:()=>ue,focusTrapMetadata:()=>qe,focusTrapSource:()=>$e,getAllSchemas:()=>Tt,getAllSchemasRecord:()=>Mt,getAvailableBehaviors:()=>rt,getBehavior:()=>yt,getBehaviorsByCategory:()=>ot,getBehaviorsByTier:()=>it,getRegisteredBehaviors:()=>Lt,getSchema:()=>wt,hasLoader:()=>kt,isRegistered:()=>Et,loadAll:()=>Rt,loadBehavior:()=>V,preloadCategory:()=>Bt,preloadTier:()=>Ct,ready:()=>se,registerAll:()=>zt,registerAllWithRuntime:()=>At,registerAutoDismiss:()=>z,registerBehavior:()=>tt,registerClickOutside:()=>_,registerClipboard:()=>P,registerDraggable:()=>M,registerFocusTrap:()=>N,registerLoader:()=>v,registerRemovable:()=>C,registerResizable:()=>D,registerSchema:()=>h,registerScrollReveal:()=>q,registerSortable:()=>A,registerTabs:()=>U,registerToggleable:()=>R,registerWithRuntime:()=>Ht,removableMetadata:()=>ve,removableSource:()=>he,resizableMetadata:()=>Ce,resizableSource:()=>Me,scrollRevealMetadata:()=>Ge,scrollRevealSource:()=>Ve,sortableMetadata:()=>ke,sortableSource:()=>Ee,tabsMetadata:()=>Qe,tabsSource:()=>Je,toggleableMetadata:()=>xe,toggleableSource:()=>ye,tryGetBehavior:()=>xt,tryGetSchema:()=>St});K();J();Q();Z();ee();te();re();oe();ie();ae();ne();var S=new Map,L=new Map,G=new Map,et=new Map;function tt(e,t){S.set(e,t),t.metadata&&L.set(e,t.metadata)}function h(e){L.set(e.name,e)}function v(e,t){G.set(e,t)}function yt(e){let t=S.get(e);if(!t){let r=Array.from(S.keys()).join(", ");throw new Error(`Behavior '${e}' is not registered. Registered behaviors: ${r||"none"}. Use loadBehavior('${e}') to lazy load it.`)}return t}function xt(e){return S.get(e)}function wt(e){let t=L.get(e);if(!t)throw new Error(`Schema for behavior '${e}' is not registered. Use tryGetSchema('${e}') for a non-throwing alternative.`);return t}function St(e){return L.get(e)}function Et(e){return S.has(e)}function kt(e){return G.has(e)}function Lt(){return Array.from(S.keys())}function rt(){let e=new Set([...S.keys(),...G.keys()]);return Array.from(e)}function ot(e){let t=[];for(let[r,o]of L)o.category===e&&t.push(r);return t}function it(e){let t=[];for(let[r,o]of L)o.tier===e&&t.push(r);return t}function Tt(){return Array.from(L.values())}function Mt(){let e={};for(let[t,r]of L)e[t]=r;return e}async function V(e){let t=S.get(e);if(t)return t;let r=et.get(e);if(r)return r;let o=G.get(e);if(!o)throw new Error(`No loader registered for behavior '${e}'. Available loaders: ${Array.from(G.keys()).join(", ")||"none"}`);let i=o().then(m=>{let a=m.default;return tt(e,a),et.delete(e),a});return et.set(e,i),i}async function Ct(e){let t=it(e);await Promise.all(t.map(r=>V(r).catch(o=>{console.warn(`[behaviors] Failed to preload '${r}' (tier: ${e}):`,o)})))}async function Bt(e){let t=ot(e);await Promise.all(t.map(r=>V(r).catch(o=>{console.warn(`[behaviors] Failed to preload '${r}' (category: ${e}):`,o)})))}async function Rt(){let e=rt();await Promise.all(e.map(t=>V(t).catch(r=>{console.warn(`[behaviors] Failed to load '${t}':`,r)})))}async function Ht(e,t){await(await V(e)).register(t)}async function At(e){let t=Array.from(S.values()).map(r=>r.register(e));await Promise.all(t)}de();Se();Te();fe();be();Re();De();ze();Ne();Ue();Ke();h(T);h(H);h(I);h(k);h(B);h(F);h(O);h(W);h(Y);h($);h(X);v("Draggable",()=>Promise.resolve().then(()=>(K(),nt)));v("Sortable",()=>Promise.resolve().then(()=>(Z(),lt)));v("Resizable",()=>Promise.resolve().then(()=>(ee(),dt)));v("Removable",()=>Promise.resolve().then(()=>(J(),st)));v("Toggleable",()=>Promise.resolve().then(()=>(Q(),ct)));v("Clipboard",()=>Promise.resolve().then(()=>(te(),mt)));v("AutoDismiss",()=>Promise.resolve().then(()=>(re(),pt)));v("ClickOutside",()=>Promise.resolve().then(()=>(oe(),ft)));v("FocusTrap",()=>Promise.resolve().then(()=>(ie(),ht)));v("ScrollReveal",()=>Promise.resolve().then(()=>(ae(),vt)));v("Tabs",()=>Promise.resolve().then(()=>(ne(),bt)));var It=["Draggable","Sortable","Resizable","Removable","Toggleable","Clipboard","AutoDismiss","ClickOutside","FocusTrap","ScrollReveal","Tabs"],Dt={ui:["Draggable","Sortable","Resizable","Clipboard","AutoDismiss","ClickOutside","FocusTrap","Tabs"],data:["Removable"],animation:[],form:["Toggleable"],layout:["ScrollReveal"]},Ft={core:["Draggable","Toggleable","Clipboard","AutoDismiss","ClickOutside","FocusTrap","Tabs"],common:["Sortable","Removable","ScrollReveal"],optional:["Resizable"]},Pt={Draggable:"ui",Sortable:"ui",Resizable:"ui",Removable:"data",Toggleable:"form",Clipboard:"ui",AutoDismiss:"ui",ClickOutside:"ui",FocusTrap:"ui",ScrollReveal:"layout",Tabs:"ui"},Ot={Draggable:"core",Sortable:"common",Resizable:"optional",Removable:"common",Toggleable:"core",Clipboard:"core",AutoDismiss:"core",ClickOutside:"core",FocusTrap:"core",ScrollReveal:"common",Tabs:"core"};K();J();Q();Z();ee();te();re();oe();ie();ae();ne();b();async function zt(e){await Promise.all([M(e),C(e),R(e),A(e),D(e),P(e),z(e),_(e),N(e),q(e),U(e)])}var se=null,at=s();if(at){let e=window;se=zt(at),e.__hyperfixi_behaviors_ready=se,se.then(()=>{let t=at,r=e.__hyperfixi_behaviors_ready;delete e.__hyperfixi_behaviors_ready,t.attributeProcessor?.scanAndProcessAll?t.attributeProcessor.scanAndProcessAll().finally(()=>{e.__hyperfixi_behaviors_ready=r}):t.processNode&&(t.processNode(document),e.__hyperfixi_behaviors_ready=r)}).catch(t=>{console.error("[behaviors] Auto-registration failed:",t)})}return $t(ir);})();
116
145
  //# sourceMappingURL=all.browser.global.js.map