@hyperfixi/behaviors 2.0.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 (118) hide show
  1. package/dist/all.browser.global.js +116 -0
  2. package/dist/all.browser.global.js.map +1 -0
  3. package/dist/behaviors/draggable.cjs +109 -0
  4. package/dist/behaviors/draggable.cjs.map +1 -0
  5. package/dist/behaviors/draggable.d.cts +15 -0
  6. package/dist/behaviors/draggable.d.ts +15 -0
  7. package/dist/behaviors/draggable.js +14 -0
  8. package/dist/behaviors/draggable.js.map +1 -0
  9. package/dist/behaviors/removable.cjs +120 -0
  10. package/dist/behaviors/removable.cjs.map +1 -0
  11. package/dist/behaviors/removable.d.cts +15 -0
  12. package/dist/behaviors/removable.d.ts +15 -0
  13. package/dist/behaviors/removable.js +14 -0
  14. package/dist/behaviors/removable.js.map +1 -0
  15. package/dist/behaviors/resizable.cjs +146 -0
  16. package/dist/behaviors/resizable.cjs.map +1 -0
  17. package/dist/behaviors/resizable.d.cts +15 -0
  18. package/dist/behaviors/resizable.d.ts +15 -0
  19. package/dist/behaviors/resizable.js +14 -0
  20. package/dist/behaviors/resizable.js.map +1 -0
  21. package/dist/behaviors/sortable.cjs +119 -0
  22. package/dist/behaviors/sortable.cjs.map +1 -0
  23. package/dist/behaviors/sortable.d.cts +15 -0
  24. package/dist/behaviors/sortable.d.ts +15 -0
  25. package/dist/behaviors/sortable.js +14 -0
  26. package/dist/behaviors/sortable.js.map +1 -0
  27. package/dist/behaviors/toggleable.cjs +105 -0
  28. package/dist/behaviors/toggleable.cjs.map +1 -0
  29. package/dist/behaviors/toggleable.d.cts +15 -0
  30. package/dist/behaviors/toggleable.d.ts +15 -0
  31. package/dist/behaviors/toggleable.js +14 -0
  32. package/dist/behaviors/toggleable.js.map +1 -0
  33. package/dist/chunk-272NKUJ3.js +63 -0
  34. package/dist/chunk-272NKUJ3.js.map +1 -0
  35. package/dist/chunk-2NQHIHD5.js +37 -0
  36. package/dist/chunk-2NQHIHD5.js.map +1 -0
  37. package/dist/chunk-3DVDS7CT.js +170 -0
  38. package/dist/chunk-3DVDS7CT.js.map +1 -0
  39. package/dist/chunk-3Q652JQB.js +37 -0
  40. package/dist/chunk-3Q652JQB.js.map +1 -0
  41. package/dist/chunk-BWZ6EGII.js +62 -0
  42. package/dist/chunk-BWZ6EGII.js.map +1 -0
  43. package/dist/chunk-G6WR2AYR.js +52 -0
  44. package/dist/chunk-G6WR2AYR.js.map +1 -0
  45. package/dist/chunk-HMRPQWQU.js +37 -0
  46. package/dist/chunk-HMRPQWQU.js.map +1 -0
  47. package/dist/chunk-MEP6B7XW.js +37 -0
  48. package/dist/chunk-MEP6B7XW.js.map +1 -0
  49. package/dist/chunk-URBOGGW6.js +32 -0
  50. package/dist/chunk-URBOGGW6.js.map +1 -0
  51. package/dist/chunk-V5IWDPDP.js +89 -0
  52. package/dist/chunk-V5IWDPDP.js.map +1 -0
  53. package/dist/chunk-WU37DFAL.js +37 -0
  54. package/dist/chunk-WU37DFAL.js.map +1 -0
  55. package/dist/chunk-WUHHMDAA.js +48 -0
  56. package/dist/chunk-WUHHMDAA.js.map +1 -0
  57. package/dist/core.browser.global.js +39 -0
  58. package/dist/core.browser.global.js.map +1 -0
  59. package/dist/draggable.browser.global.js +25 -0
  60. package/dist/draggable.browser.global.js.map +1 -0
  61. package/dist/index.cjs +907 -0
  62. package/dist/index.cjs.map +1 -0
  63. package/dist/index.d.cts +134 -0
  64. package/dist/index.d.ts +134 -0
  65. package/dist/index.js +193 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/loaders.cjs +562 -0
  68. package/dist/loaders.cjs.map +1 -0
  69. package/dist/loaders.d.cts +2 -0
  70. package/dist/loaders.d.ts +2 -0
  71. package/dist/loaders.js +8 -0
  72. package/dist/loaders.js.map +1 -0
  73. package/dist/registry.cjs +214 -0
  74. package/dist/registry.cjs.map +1 -0
  75. package/dist/registry.d.cts +116 -0
  76. package/dist/registry.d.ts +116 -0
  77. package/dist/registry.js +47 -0
  78. package/dist/registry.js.map +1 -0
  79. package/dist/removable.browser.global.js +23 -0
  80. package/dist/removable.browser.global.js.map +1 -0
  81. package/dist/resizable.browser.global.js +35 -0
  82. package/dist/resizable.browser.global.js.map +1 -0
  83. package/dist/schemas/index.cjs +353 -0
  84. package/dist/schemas/index.cjs.map +1 -0
  85. package/dist/schemas/index.d.cts +75 -0
  86. package/dist/schemas/index.d.ts +75 -0
  87. package/dist/schemas/index.js +41 -0
  88. package/dist/schemas/index.js.map +1 -0
  89. package/dist/sortable.browser.global.js +25 -0
  90. package/dist/sortable.browser.global.js.map +1 -0
  91. package/dist/toggleable.browser.global.js +16 -0
  92. package/dist/toggleable.browser.global.js.map +1 -0
  93. package/dist/types-CCc_2wAb.d.cts +100 -0
  94. package/dist/types-CCc_2wAb.d.ts +100 -0
  95. package/package.json +109 -0
  96. package/src/behaviors/draggable.ts +60 -0
  97. package/src/behaviors/index.ts +40 -0
  98. package/src/behaviors/integration.test.ts +80 -0
  99. package/src/behaviors/removable.ts +55 -0
  100. package/src/behaviors/resizable.ts +55 -0
  101. package/src/behaviors/sortable.ts +56 -0
  102. package/src/behaviors/toggleable.ts +55 -0
  103. package/src/core-bundle.ts +35 -0
  104. package/src/generated/index.ts +9 -0
  105. package/src/generated/metadata.ts +78 -0
  106. package/src/generated/types.ts +51 -0
  107. package/src/index.test.ts +180 -0
  108. package/src/index.ts +222 -0
  109. package/src/loaders.ts +39 -0
  110. package/src/registry.test.ts +207 -0
  111. package/src/registry.ts +304 -0
  112. package/src/schemas/draggable.schema.ts +54 -0
  113. package/src/schemas/index.ts +60 -0
  114. package/src/schemas/removable.schema.ts +69 -0
  115. package/src/schemas/resizable.schema.ts +91 -0
  116. package/src/schemas/sortable.schema.ts +68 -0
  117. package/src/schemas/toggleable.schema.ts +50 -0
  118. package/src/schemas/types.ts +107 -0
@@ -0,0 +1,116 @@
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:`
2
+ behavior Draggable(dragHandle)
3
+ init
4
+ if no dragHandle set dragHandle to me
5
+ end
6
+ on pointerdown(clientX, clientY) from dragHandle
7
+ halt the event
8
+ trigger draggable:start
9
+ measure x
10
+ set startX to it
11
+ measure y
12
+ set startY to it
13
+ set xoff to clientX - startX
14
+ set yoff to clientY - startY
15
+ repeat until event pointerup from document
16
+ wait for pointermove(clientX, clientY) or
17
+ pointerup(clientX, clientY) from document
18
+ add { left: \${clientX - xoff}px; top: \${clientY - yoff}px; }
19
+ trigger draggable:move
20
+ end
21
+ trigger draggable:end
22
+ end
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:`
25
+ behavior Removable(triggerEl, confirm, effect)
26
+ init
27
+ if triggerEl is undefined
28
+ set triggerEl to me
29
+ end
30
+ end
31
+ on click from triggerEl
32
+ if confirm
33
+ if not window.confirm("Are you sure?")
34
+ halt
35
+ end
36
+ end
37
+ trigger removable:before
38
+ if effect is "fade"
39
+ transition opacity to 0 over 300ms
40
+ end
41
+ trigger removable:removed
42
+ remove me
43
+ end
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:`
46
+ behavior Toggleable(cls, target)
47
+ init
48
+ if cls is undefined
49
+ set cls to "active"
50
+ end
51
+ if target is undefined
52
+ set target to me
53
+ end
54
+ end
55
+ on click
56
+ toggle .{cls} on target
57
+ end
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:`
60
+ behavior Sortable(handle, dragClass)
61
+ init
62
+ if no dragClass set dragClass to "sorting"
63
+ end
64
+ on pointerdown(target, clientY) from me
65
+ set item to closest <li/> in target
66
+ if no item exit
67
+ if handle
68
+ set handleEl to target.closest(handle)
69
+ if no handleEl exit
70
+ end
71
+ halt the event
72
+ add dragClass to item
73
+ trigger sortable:start on me
74
+ repeat until event pointerup from document
75
+ wait for pointermove(clientY) from document
76
+ trigger sortable:move on me
77
+ end
78
+ remove dragClass from item
79
+ trigger sortable:end on me
80
+ end
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:`
83
+ behavior Resizable(handle, minWidth, minHeight, maxWidth, maxHeight)
84
+ init
85
+ if no handle set handle to me
86
+ if no minWidth set minWidth to 50
87
+ if no minHeight set minHeight to 50
88
+ if no maxWidth set maxWidth to 9999
89
+ if no maxHeight set maxHeight to 9999
90
+ end
91
+ on pointerdown(clientX, clientY) from handle
92
+ halt the event
93
+ trigger resizable:start
94
+ measure width
95
+ set startWidth to it
96
+ measure height
97
+ set startHeight to it
98
+ set startX to clientX
99
+ set startY to clientY
100
+ repeat until event pointerup from document
101
+ wait for pointermove(clientX, clientY) or
102
+ pointerup from document
103
+ set newWidth to startWidth + (clientX - startX)
104
+ set newHeight to startHeight + (clientY - startY)
105
+ if newWidth < minWidth set newWidth to minWidth
106
+ if newWidth > maxWidth set newWidth to maxWidth
107
+ if newHeight < minHeight set newHeight to minHeight
108
+ if newHeight > maxHeight set newHeight to maxHeight
109
+ add { width: \${newWidth}px; height: \${newHeight}px; }
110
+ trigger resizable:resize
111
+ end
112
+ trigger resizable:end
113
+ end
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);})();
116
+ //# sourceMappingURL=all.browser.global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/draggable.schema.ts","../src/behaviors/draggable.ts","../src/schemas/removable.schema.ts","../src/behaviors/removable.ts","../src/schemas/toggleable.schema.ts","../src/behaviors/toggleable.ts","../src/schemas/sortable.schema.ts","../src/behaviors/sortable.ts","../src/schemas/resizable.schema.ts","../src/behaviors/resizable.ts","../src/index.ts","../src/registry.ts","../src/loaders.ts","../src/generated/metadata.ts"],"sourcesContent":["import type { BehaviorSchema } from './types';\n\n/**\n * Draggable Behavior Schema\n *\n * Makes elements draggable with pointer events.\n * Supports custom drag handles and lifecycle events.\n */\nexport const draggableSchema: BehaviorSchema = {\n name: 'Draggable',\n category: 'ui',\n tier: 'core',\n version: '1.0.0',\n description: 'Makes elements draggable with pointer events',\n parameters: [\n {\n name: 'dragHandle',\n type: 'selector',\n optional: true,\n default: 'me',\n description: 'CSS selector for the drag handle element',\n },\n ],\n events: [\n { name: 'draggable:start', description: 'Fired when drag begins' },\n { name: 'draggable:move', description: 'Fired during each movement' },\n { name: 'draggable:end', description: 'Fired when drag completes' },\n ],\n requirements: ['position: absolute or position: fixed on the element'],\n source: `\nbehavior Draggable(dragHandle)\n init\n if no dragHandle set dragHandle to me\n end\n on pointerdown(clientX, clientY) from dragHandle\n halt the event\n trigger draggable:start\n measure x\n set startX to it\n measure y\n set startY to it\n set xoff to clientX - startX\n set yoff to clientY - startY\n repeat until event pointerup from document\n wait for pointermove(clientX, clientY) or\n pointerup(clientX, clientY) from document\n add { left: \\${clientX - xoff}px; top: \\${clientY - yoff}px; }\n trigger draggable:move\n end\n trigger draggable:end\n end\nend\n`.trim(),\n};\n","/**\n * Draggable Behavior\n *\n * A reusable behavior that makes elements draggable with pointer events.\n * Supports custom drag handles, lifecycle events, and smooth positioning.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <div _=\"install Draggable\">Drag me!</div>\n *\n * <!-- With custom drag handle -->\n * <div _=\"install Draggable(dragHandle: .titlebar)\">\n * <div class=\"titlebar\">Drag here</div>\n * <div class=\"content\">Content</div>\n * </div>\n * ```\n */\n\nimport { draggableSchema } from '../schemas/draggable.schema';\nimport type { LokaScriptInstance, LokaScriptWindow } from '../schemas/types';\n\n// Re-export schema-derived values for backwards compatibility\nexport const draggableSource = draggableSchema.source;\nexport const draggableMetadata = draggableSchema;\n\n/**\n * Register the Draggable behavior with LokaScript.\n */\nexport async function registerDraggable(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf =\n hyperfixi ||\n (typeof window !== 'undefined' ? (window as unknown as LokaScriptWindow).lokascript : null);\n\n if (!hf) {\n throw new Error(\n 'LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.'\n );\n }\n\n const result = hf.compileSync(draggableSchema.source, { traditional: true });\n\n if (!result.ok) {\n throw new Error(`Failed to compile Draggable behavior: ${JSON.stringify(result.errors)}`);\n }\n\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(result.ast, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n registerDraggable().catch(console.error);\n}\n\nexport default {\n source: draggableSchema.source,\n metadata: draggableSchema,\n register: registerDraggable,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * Removable Behavior Schema\n *\n * Removes an element when a trigger is clicked.\n * Supports optional confirmation and transition effects.\n *\n * @since 1.2.0 — `trigger` parameter renamed to `triggerEl` to avoid\n * shadowing the hyperscript `trigger` command keyword. Users migrating\n * from v1.x should update: `install Removable(triggerEl: .close-btn)`.\n */\nexport const removableSchema: BehaviorSchema = {\n name: 'Removable',\n category: 'data',\n tier: 'common',\n version: '1.2.0',\n description: 'Makes elements removable on click',\n parameters: [\n {\n name: 'triggerEl',\n type: 'selector',\n optional: true,\n default: 'me',\n description: 'Element that triggers removal (e.g., a close button)',\n },\n {\n name: 'confirm',\n type: 'boolean',\n optional: true,\n default: false,\n description: 'Show confirmation dialog before removal',\n },\n {\n name: 'effect',\n type: 'string',\n optional: true,\n default: 'none',\n enum: ['fade', 'none'],\n description: 'Transition effect: \"fade\" or \"none\"',\n },\n ],\n events: [\n { name: 'removable:before', description: 'Fired before removal (cancelable)' },\n { name: 'removable:removed', description: 'Fired after removal' },\n ],\n source: `\nbehavior Removable(triggerEl, confirm, effect)\n init\n if triggerEl is undefined\n set triggerEl to me\n end\n end\n on click from triggerEl\n if confirm\n if not window.confirm(\"Are you sure?\")\n halt\n end\n end\n trigger removable:before\n if effect is \"fade\"\n transition opacity to 0 over 300ms\n end\n trigger removable:removed\n remove me\n end\nend\n`.trim(),\n};\n","/**\n * Removable Behavior\n *\n * A behavior that removes an element when a trigger is clicked.\n * Supports optional confirmation and transition effects.\n *\n * @example\n * ```html\n * <div _=\"install Removable\">Click to remove</div>\n *\n * <div _=\"install Removable(confirm: true)\">With confirmation</div>\n * ```\n */\n\nimport { removableSchema } from '../schemas/removable.schema';\nimport type { LokaScriptInstance, LokaScriptWindow } from '../schemas/types';\n\n// Re-export schema-derived values for backwards compatibility\nexport const removableSource = removableSchema.source;\nexport const removableMetadata = removableSchema;\n\n/**\n * Register the Removable behavior with LokaScript.\n */\nexport async function registerRemovable(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf =\n hyperfixi ||\n (typeof window !== 'undefined' ? (window as unknown as LokaScriptWindow).lokascript : null);\n\n if (!hf) {\n throw new Error(\n 'LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.'\n );\n }\n\n const result = hf.compileSync(removableSchema.source, { traditional: true });\n\n if (!result.ok) {\n throw new Error(`Failed to compile Removable behavior: ${JSON.stringify(result.errors)}`);\n }\n\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(result.ast, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n registerRemovable().catch(console.error);\n}\n\nexport default {\n source: removableSchema.source,\n metadata: removableSchema,\n register: registerRemovable,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * Toggleable Behavior Schema\n *\n * Toggles a CSS class on click.\n * Useful for accordions, dropdowns, and toggle buttons.\n */\nexport const toggleableSchema: BehaviorSchema = {\n name: 'Toggleable',\n category: 'form',\n tier: 'core',\n version: '1.0.0',\n description: 'Toggles a CSS class on click',\n parameters: [\n {\n name: 'cls',\n type: 'string',\n optional: true,\n default: 'active',\n description: 'CSS class to toggle',\n },\n {\n name: 'target',\n type: 'selector',\n optional: true,\n default: 'me',\n description: 'Element to toggle the class on',\n },\n ],\n events: [\n { name: 'toggleable:on', description: 'Fired when class is added' },\n { name: 'toggleable:off', description: 'Fired when class is removed' },\n ],\n source: `\nbehavior Toggleable(cls, target)\n init\n if cls is undefined\n set cls to \"active\"\n end\n if target is undefined\n set target to me\n end\n end\n on click\n toggle .{cls} on target\n end\nend\n`.trim(),\n};\n","/**\n * Toggleable Behavior\n *\n * A behavior that toggles a CSS class on click.\n * Useful for accordions, dropdowns, and toggle buttons.\n *\n * @example\n * ```html\n * <button _=\"install Toggleable\">Toggle</button>\n *\n * <button _=\"install Toggleable(cls: expanded, target: #menu)\">Menu</button>\n * ```\n */\n\nimport { toggleableSchema } from '../schemas/toggleable.schema';\nimport type { LokaScriptInstance, LokaScriptWindow } from '../schemas/types';\n\n// Re-export schema-derived values for backwards compatibility\nexport const toggleableSource = toggleableSchema.source;\nexport const toggleableMetadata = toggleableSchema;\n\n/**\n * Register the Toggleable behavior with LokaScript.\n */\nexport async function registerToggleable(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf =\n hyperfixi ||\n (typeof window !== 'undefined' ? (window as unknown as LokaScriptWindow).lokascript : null);\n\n if (!hf) {\n throw new Error(\n 'LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.'\n );\n }\n\n const result = hf.compileSync(toggleableSchema.source, { traditional: true });\n\n if (!result.ok) {\n throw new Error(`Failed to compile Toggleable behavior: ${JSON.stringify(result.errors)}`);\n }\n\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(result.ast, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n registerToggleable().catch(console.error);\n}\n\nexport default {\n source: toggleableSchema.source,\n metadata: toggleableSchema,\n register: registerToggleable,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * Sortable Behavior Schema\n *\n * Drag-and-drop reordering of list items.\n * Apply to a container element; children become sortable.\n *\n * Note: This behavior fires lifecycle events but does NOT automatically\n * reorder DOM elements. Users must handle actual reordering in their\n * `sortable:move` event handlers.\n */\nexport const sortableSchema: BehaviorSchema = {\n name: 'Sortable',\n category: 'ui',\n tier: 'common',\n version: '1.0.0',\n description: 'Makes child elements reorderable via drag-and-drop',\n parameters: [\n {\n name: 'handle',\n type: 'selector',\n optional: true,\n default: 'none',\n description: 'CSS selector for drag handles within items',\n },\n {\n name: 'dragClass',\n type: 'string',\n optional: true,\n default: 'sorting',\n description: 'CSS class added to item during drag',\n },\n ],\n events: [\n { name: 'sortable:start', description: 'Fired when drag begins' },\n {\n name: 'sortable:move',\n description: 'Fired during drag — handle this event to reorder DOM elements',\n },\n { name: 'sortable:end', description: 'Fired when drag completes' },\n ],\n requirements: ['Users must handle DOM reordering in sortable:move event handlers'],\n source: `\nbehavior Sortable(handle, dragClass)\n init\n if no dragClass set dragClass to \"sorting\"\n end\n on pointerdown(target, clientY) from me\n set item to closest <li/> in target\n if no item exit\n if handle\n set handleEl to target.closest(handle)\n if no handleEl exit\n end\n halt the event\n add dragClass to item\n trigger sortable:start on me\n repeat until event pointerup from document\n wait for pointermove(clientY) from document\n trigger sortable:move on me\n end\n remove dragClass from item\n trigger sortable:end on me\n end\nend\n`.trim(),\n};\n","/**\n * Sortable Behavior\n *\n * A behavior for drag-and-drop reordering of list items.\n * Apply to a container element; children become sortable.\n *\n * @example\n * ```html\n * <ul _=\"install Sortable\">\n * <li>Item 1</li>\n * <li>Item 2</li>\n * </ul>\n * ```\n */\n\nimport { sortableSchema } from '../schemas/sortable.schema';\nimport type { LokaScriptInstance, LokaScriptWindow } from '../schemas/types';\n\n// Re-export schema-derived values for backwards compatibility\nexport const sortableSource = sortableSchema.source;\nexport const sortableMetadata = sortableSchema;\n\n/**\n * Register the Sortable behavior with LokaScript.\n */\nexport async function registerSortable(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf =\n hyperfixi ||\n (typeof window !== 'undefined' ? (window as unknown as LokaScriptWindow).lokascript : null);\n\n if (!hf) {\n throw new Error(\n 'LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.'\n );\n }\n\n const result = hf.compileSync(sortableSchema.source, { traditional: true });\n\n if (!result.ok) {\n throw new Error(`Failed to compile Sortable behavior: ${JSON.stringify(result.errors)}`);\n }\n\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(result.ast, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n registerSortable().catch(console.error);\n}\n\nexport default {\n source: sortableSchema.source,\n metadata: sortableSchema,\n register: registerSortable,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * Resizable Behavior Schema\n *\n * Makes elements resizable by dragging edges or corners.\n * Supports minimum/maximum dimensions and resize handles.\n */\nexport const resizableSchema: BehaviorSchema = {\n name: 'Resizable',\n category: 'ui',\n tier: 'optional',\n version: '1.0.0',\n description: 'Makes elements resizable by dragging',\n parameters: [\n {\n name: 'handle',\n type: 'selector',\n optional: true,\n default: 'me',\n description: 'CSS selector for the resize handle (defaults to the element itself)',\n },\n {\n name: 'minWidth',\n type: 'number',\n optional: true,\n default: 50,\n description: 'Minimum width in pixels',\n },\n {\n name: 'minHeight',\n type: 'number',\n optional: true,\n default: 50,\n description: 'Minimum height in pixels',\n },\n {\n name: 'maxWidth',\n type: 'number',\n optional: true,\n default: 9999,\n description: 'Maximum width in pixels',\n },\n {\n name: 'maxHeight',\n type: 'number',\n optional: true,\n default: 9999,\n description: 'Maximum height in pixels',\n },\n ],\n events: [\n { name: 'resizable:start', description: 'Fired when resize begins' },\n { name: 'resizable:resize', description: 'Fired during resize' },\n { name: 'resizable:end', description: 'Fired when resize completes' },\n ],\n source: `\nbehavior Resizable(handle, minWidth, minHeight, maxWidth, maxHeight)\n init\n if no handle set handle to me\n if no minWidth set minWidth to 50\n if no minHeight set minHeight to 50\n if no maxWidth set maxWidth to 9999\n if no maxHeight set maxHeight to 9999\n end\n on pointerdown(clientX, clientY) from handle\n halt the event\n trigger resizable:start\n measure width\n set startWidth to it\n measure height\n set startHeight to it\n set startX to clientX\n set startY to clientY\n repeat until event pointerup from document\n wait for pointermove(clientX, clientY) or\n pointerup from document\n set newWidth to startWidth + (clientX - startX)\n set newHeight to startHeight + (clientY - startY)\n if newWidth < minWidth set newWidth to minWidth\n if newWidth > maxWidth set newWidth to maxWidth\n if newHeight < minHeight set newHeight to minHeight\n if newHeight > maxHeight set newHeight to maxHeight\n add { width: \\${newWidth}px; height: \\${newHeight}px; }\n trigger resizable:resize\n end\n trigger resizable:end\n end\nend\n`.trim(),\n};\n","/**\n * Resizable Behavior\n *\n * A behavior that makes elements resizable by dragging edges or corners.\n * Supports minimum/maximum dimensions and resize handles.\n *\n * @example\n * ```html\n * <div _=\"install Resizable\" style=\"width: 200px; height: 150px;\">\n * Resize me!\n * </div>\n * ```\n */\n\nimport { resizableSchema } from '../schemas/resizable.schema';\nimport type { LokaScriptInstance, LokaScriptWindow } from '../schemas/types';\n\n// Re-export schema-derived values for backwards compatibility\nexport const resizableSource = resizableSchema.source;\nexport const resizableMetadata = resizableSchema;\n\n/**\n * Register the Resizable behavior with LokaScript.\n */\nexport async function registerResizable(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf =\n hyperfixi ||\n (typeof window !== 'undefined' ? (window as unknown as LokaScriptWindow).lokascript : null);\n\n if (!hf) {\n throw new Error(\n 'LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.'\n );\n }\n\n const result = hf.compileSync(resizableSchema.source, { traditional: true });\n\n if (!result.ok) {\n throw new Error(`Failed to compile Resizable behavior: ${JSON.stringify(result.errors)}`);\n }\n\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(result.ast, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n registerResizable().catch(console.error);\n}\n\nexport default {\n source: resizableSchema.source,\n metadata: resizableSchema,\n register: registerResizable,\n};\n","/**\n * @hyperfixi/behaviors\n *\n * Reusable hyperscript behaviors for LokaScript.\n * Each behavior can be imported individually for tree-shaking,\n * or all behaviors can be registered at once.\n *\n * @example Individual import (tree-shakeable)\n * ```javascript\n * import { registerDraggable } from '@hyperfixi/behaviors/draggable';\n * await registerDraggable();\n * ```\n *\n * @example Import all\n * ```javascript\n * import { registerAll } from '@hyperfixi/behaviors';\n * await registerAll();\n * ```\n *\n * @example Registry-based lazy loading\n * ```javascript\n * import { loadBehavior, getBehaviorsByCategory } from '@hyperfixi/behaviors';\n * await loadBehavior('Draggable');\n * const uiBehaviors = getBehaviorsByCategory('ui');\n * ```\n *\n * @example CDN usage\n * ```html\n * <script src=\"lokascript-browser.js\"></script>\n * <script src=\"@hyperfixi/behaviors/draggable.browser.js\"></script>\n * <!-- Draggable is auto-registered -->\n * ```\n */\n\n// =============================================================================\n// Re-export individual behaviors\n// =============================================================================\n\nexport {\n draggableSource,\n draggableMetadata,\n registerDraggable,\n default as Draggable,\n} from './behaviors/draggable';\n\nexport {\n removableSource,\n removableMetadata,\n registerRemovable,\n default as Removable,\n} from './behaviors/removable';\n\nexport {\n toggleableSource,\n toggleableMetadata,\n registerToggleable,\n default as Toggleable,\n} from './behaviors/toggleable';\n\nexport {\n sortableSource,\n sortableMetadata,\n registerSortable,\n default as Sortable,\n} from './behaviors/sortable';\n\nexport {\n resizableSource,\n resizableMetadata,\n registerResizable,\n default as Resizable,\n} from './behaviors/resizable';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type {\n BehaviorSchema,\n BehaviorCategory,\n BehaviorTier,\n ParameterSchema,\n EventSchema,\n BehaviorModule,\n LokaScriptInstance,\n} from './schemas/types';\n\n// =============================================================================\n// Initialize registry with loaders (populates schemas and loaders)\n// =============================================================================\n\nimport './loaders';\n\n// =============================================================================\n// Registry exports\n// =============================================================================\n\nexport {\n // Registration\n registerBehavior,\n registerSchema,\n registerLoader,\n // Query (sync)\n getBehavior,\n tryGetBehavior,\n getSchema,\n tryGetSchema,\n isRegistered,\n hasLoader,\n getRegisteredBehaviors,\n getAvailableBehaviors,\n // Query by metadata\n getBehaviorsByCategory,\n getBehaviorsByTier,\n getAllSchemas,\n getAllSchemasRecord,\n // Lazy loading (async)\n loadBehavior,\n preloadTier,\n preloadCategory,\n loadAll,\n // Runtime registration\n registerWithRuntime,\n registerAllWithRuntime,\n} from './registry';\n\n// =============================================================================\n// Generated types and metadata\n// =============================================================================\n\nexport type {\n BehaviorName,\n UIBehavior,\n DataBehavior,\n AnimationBehavior,\n FormBehavior,\n LayoutBehavior,\n CoreBehavior,\n CommonBehavior,\n OptionalBehavior,\n} from './generated/types';\n\nexport {\n ALL_BEHAVIOR_NAMES,\n BEHAVIORS_BY_CATEGORY,\n BEHAVIORS_BY_TIER,\n BEHAVIOR_CATEGORIES,\n BEHAVIOR_TIERS,\n} from './generated/metadata';\n\n// =============================================================================\n// Convenience functions\n// =============================================================================\n\nimport { registerDraggable } from './behaviors/draggable';\nimport { registerRemovable } from './behaviors/removable';\nimport { registerToggleable } from './behaviors/toggleable';\nimport { registerSortable } from './behaviors/sortable';\nimport { registerResizable } from './behaviors/resizable';\nimport type { LokaScriptInstance, LokaScriptWindow } from './schemas/types';\n\n/**\n * Register all behaviors with HyperFixi.\n *\n * @param hyperfixi - The hyperfixi instance (defaults to window.hyperfixi)\n * @returns Promise that resolves when all behaviors are registered\n *\n * @example\n * ```javascript\n * import { registerAll } from '@hyperfixi/behaviors';\n * await registerAll();\n * ```\n */\nexport async function registerAll(hyperfixi?: LokaScriptInstance): Promise<void> {\n await Promise.all([\n registerDraggable(hyperfixi),\n registerRemovable(hyperfixi),\n registerToggleable(hyperfixi),\n registerSortable(hyperfixi),\n registerResizable(hyperfixi),\n ]);\n}\n\n// =============================================================================\n// Auto-registration for browser\n// =============================================================================\n\n/**\n * Promise that resolves when all behaviors are registered.\n * This is set when the package auto-registers in browser environments.\n */\nexport let ready: Promise<void> | null = null;\n\n// Auto-register all behaviors when loaded in browser with hyperfixi available\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n const lsWin = window as unknown as LokaScriptWindow;\n ready = registerAll();\n\n lsWin.__lokascript_behaviors_ready = ready;\n\n ready\n .then(() => {\n const hyperfixi = lsWin.lokascript as LokaScriptInstance & {\n attributeProcessor?: { scanAndProcessAll: () => Promise<void> };\n processNode?: (node: Document) => void;\n };\n const savedPromise = lsWin.__lokascript_behaviors_ready;\n delete lsWin.__lokascript_behaviors_ready;\n\n if (hyperfixi.attributeProcessor?.scanAndProcessAll) {\n hyperfixi.attributeProcessor.scanAndProcessAll().finally(() => {\n lsWin.__lokascript_behaviors_ready = savedPromise;\n });\n } else if (hyperfixi.processNode) {\n hyperfixi.processNode(document);\n lsWin.__lokascript_behaviors_ready = savedPromise;\n }\n })\n .catch(err => {\n console.error('[behaviors] Auto-registration failed:', err);\n });\n}\n","/**\n * Behavior Registry\n *\n * Central registration point for behaviors. Modeled on semantic/registry.ts.\n * Supports lazy loading, category/tier queries, and tree-shaking.\n *\n * @example\n * ```typescript\n * // Register a behavior\n * registerBehavior('Draggable', DraggableModule);\n *\n * // Query behaviors\n * const uiBehaviors = getBehaviorsByCategory('ui');\n * const coreBehaviors = getBehaviorsByTier('core');\n *\n * // Lazy load on demand\n * const module = await loadBehavior('Resizable');\n * ```\n */\n\nimport type {\n BehaviorModule,\n BehaviorSchema,\n BehaviorCategory,\n BehaviorTier,\n LokaScriptInstance,\n} from './schemas/types';\n\n// =============================================================================\n// Registry State\n// =============================================================================\n\nconst behaviors = new Map<string, BehaviorModule>();\nconst schemas = new Map<string, BehaviorSchema>();\nconst loaders = new Map<string, () => Promise<{ default: BehaviorModule }>>();\nconst loadingPromises = new Map<string, Promise<BehaviorModule>>();\n\n// =============================================================================\n// Registration Functions\n// =============================================================================\n\n/**\n * Register a behavior module.\n */\nexport function registerBehavior(name: string, module: BehaviorModule): void {\n behaviors.set(name, module);\n if (module.metadata) {\n schemas.set(name, module.metadata);\n }\n}\n\n/**\n * Register a behavior schema (without the module).\n */\nexport function registerSchema(schema: BehaviorSchema): void {\n schemas.set(schema.name, schema);\n}\n\n/**\n * Register a lazy loader for a behavior.\n * The loader should return a module with a default export.\n */\nexport function registerLoader(\n name: string,\n loader: () => Promise<{ default: BehaviorModule }>\n): void {\n loaders.set(name, loader);\n}\n\n// =============================================================================\n// Query Functions (Sync)\n// =============================================================================\n\n/**\n * Get a behavior module by name.\n * @throws Error if behavior is not registered\n */\nexport function getBehavior(name: string): BehaviorModule {\n const behavior = behaviors.get(name);\n if (!behavior) {\n const registered = Array.from(behaviors.keys()).join(', ');\n throw new Error(\n `Behavior '${name}' is not registered. ` +\n `Registered behaviors: ${registered || 'none'}. ` +\n `Use loadBehavior('${name}') to lazy load it.`\n );\n }\n return behavior;\n}\n\n/**\n * Try to get a behavior, returning undefined if not registered.\n */\nexport function tryGetBehavior(name: string): BehaviorModule | undefined {\n return behaviors.get(name);\n}\n\n/**\n * Get a behavior schema by name.\n * @throws Error if schema is not registered\n */\nexport function getSchema(name: string): BehaviorSchema {\n const schema = schemas.get(name);\n if (!schema) {\n throw new Error(\n `Schema for behavior '${name}' is not registered. ` +\n `Use tryGetSchema('${name}') for a non-throwing alternative.`\n );\n }\n return schema;\n}\n\n/**\n * Try to get a schema, returning undefined if not registered.\n */\nexport function tryGetSchema(name: string): BehaviorSchema | undefined {\n return schemas.get(name);\n}\n\n/**\n * Check if a behavior is registered.\n */\nexport function isRegistered(name: string): boolean {\n return behaviors.has(name);\n}\n\n/**\n * Check if a loader is registered for a behavior.\n */\nexport function hasLoader(name: string): boolean {\n return loaders.has(name);\n}\n\n/**\n * Get all registered behavior names.\n */\nexport function getRegisteredBehaviors(): string[] {\n return Array.from(behaviors.keys());\n}\n\n/**\n * Get all behavior names that have loaders (including unloaded).\n */\nexport function getAvailableBehaviors(): string[] {\n const names = new Set([...behaviors.keys(), ...loaders.keys()]);\n return Array.from(names);\n}\n\n// =============================================================================\n// Query by Metadata\n// =============================================================================\n\n/**\n * Get behavior names by category.\n */\nexport function getBehaviorsByCategory(category: BehaviorCategory): string[] {\n const result: string[] = [];\n for (const [name, schema] of schemas) {\n if (schema.category === category) {\n result.push(name);\n }\n }\n return result;\n}\n\n/**\n * Get behavior names by tier.\n */\nexport function getBehaviorsByTier(tier: BehaviorTier): string[] {\n const result: string[] = [];\n for (const [name, schema] of schemas) {\n if (schema.tier === tier) {\n result.push(name);\n }\n }\n return result;\n}\n\n/**\n * Get all schemas.\n */\nexport function getAllSchemas(): BehaviorSchema[] {\n return Array.from(schemas.values());\n}\n\n/**\n * Get all schemas as a record.\n */\nexport function getAllSchemasRecord(): Record<string, BehaviorSchema> {\n const result: Record<string, BehaviorSchema> = {};\n for (const [name, schema] of schemas) {\n result[name] = schema;\n }\n return result;\n}\n\n// =============================================================================\n// Lazy Loading (Async)\n// =============================================================================\n\n/**\n * Load a behavior by name.\n * If already loaded, returns the cached module.\n * If a loader is registered, loads and caches the module.\n */\nexport async function loadBehavior(name: string): Promise<BehaviorModule> {\n // Return cached if available\n const cached = behaviors.get(name);\n if (cached) {\n return cached;\n }\n\n // Check for in-flight load\n const inFlight = loadingPromises.get(name);\n if (inFlight) {\n return inFlight;\n }\n\n // Check for loader\n const loader = loaders.get(name);\n if (!loader) {\n throw new Error(\n `No loader registered for behavior '${name}'. ` +\n `Available loaders: ${Array.from(loaders.keys()).join(', ') || 'none'}`\n );\n }\n\n // Load and cache\n const promise = loader().then(mod => {\n const module = mod.default;\n registerBehavior(name, module);\n loadingPromises.delete(name);\n return module;\n });\n\n loadingPromises.set(name, promise);\n return promise;\n}\n\n/**\n * Preload all behaviors in a tier.\n */\nexport async function preloadTier(tier: BehaviorTier): Promise<void> {\n const names = getBehaviorsByTier(tier);\n await Promise.all(\n names.map(name =>\n loadBehavior(name).catch(err => {\n console.warn(`[behaviors] Failed to preload '${name}' (tier: ${tier}):`, err);\n })\n )\n );\n}\n\n/**\n * Preload all behaviors in a category.\n */\nexport async function preloadCategory(category: BehaviorCategory): Promise<void> {\n const names = getBehaviorsByCategory(category);\n await Promise.all(\n names.map(name =>\n loadBehavior(name).catch(err => {\n console.warn(`[behaviors] Failed to preload '${name}' (category: ${category}):`, err);\n })\n )\n );\n}\n\n/**\n * Load and register all available behaviors.\n */\nexport async function loadAll(): Promise<void> {\n const names = getAvailableBehaviors();\n await Promise.all(\n names.map(name =>\n loadBehavior(name).catch(err => {\n console.warn(`[behaviors] Failed to load '${name}':`, err);\n })\n )\n );\n}\n\n// =============================================================================\n// Runtime Registration\n// =============================================================================\n\n/**\n * Register a behavior with HyperFixi runtime.\n * Compiles and executes the behavior source.\n */\nexport async function registerWithRuntime(\n name: string,\n hyperfixi?: LokaScriptInstance\n): Promise<void> {\n const module = await loadBehavior(name);\n await module.register(hyperfixi);\n}\n\n/**\n * Register all loaded behaviors with HyperFixi runtime.\n */\nexport async function registerAllWithRuntime(hyperfixi?: LokaScriptInstance): Promise<void> {\n const registrations = Array.from(behaviors.values()).map(module => module.register(hyperfixi));\n await Promise.all(registrations);\n}\n","/**\n * Behavior Loaders\n *\n * Registers lazy loaders for all behaviors.\n * Import this module to enable on-demand loading without bundling all behaviors.\n *\n * @example\n * ```typescript\n * // Enable lazy loading\n * import '@hyperfixi/behaviors/loaders';\n *\n * // Now load behaviors on demand\n * import { loadBehavior } from '@hyperfixi/behaviors/registry';\n * await loadBehavior('Draggable');\n * ```\n */\n\nimport { registerLoader, registerSchema } from './registry';\n\n// Register schemas for metadata queries before loading\nimport { draggableSchema } from './schemas/draggable.schema';\nimport { sortableSchema } from './schemas/sortable.schema';\nimport { resizableSchema } from './schemas/resizable.schema';\nimport { removableSchema } from './schemas/removable.schema';\nimport { toggleableSchema } from './schemas/toggleable.schema';\n\n// Register all schemas\nregisterSchema(draggableSchema);\nregisterSchema(sortableSchema);\nregisterSchema(resizableSchema);\nregisterSchema(removableSchema);\nregisterSchema(toggleableSchema);\n\n// Register lazy loaders - behaviors are only loaded when requested\nregisterLoader('Draggable', () => import('./behaviors/draggable'));\nregisterLoader('Sortable', () => import('./behaviors/sortable'));\nregisterLoader('Resizable', () => import('./behaviors/resizable'));\nregisterLoader('Removable', () => import('./behaviors/removable'));\nregisterLoader('Toggleable', () => import('./behaviors/toggleable'));\n","/**\n * Generated Metadata\n *\n * DO NOT EDIT - Generated by scripts/generate.ts\n * Run `npm run generate` to regenerate.\n */\n\nimport type { BehaviorCategory, BehaviorTier } from '../schemas/types';\nimport type { BehaviorName } from './types';\n\n/**\n * All behavior names.\n */\nexport const ALL_BEHAVIOR_NAMES: BehaviorName[] = [\n \"Draggable\",\n \"Sortable\",\n \"Resizable\",\n \"Removable\",\n \"Toggleable\"\n];\n\n/**\n * Behaviors grouped by category.\n */\nexport const BEHAVIORS_BY_CATEGORY: Record<BehaviorCategory, BehaviorName[]> = {\n \"ui\": [\n \"Draggable\",\n \"Sortable\",\n \"Resizable\"\n ],\n \"data\": [\n \"Removable\"\n ],\n \"animation\": [],\n \"form\": [\n \"Toggleable\"\n ],\n \"layout\": []\n};\n\n/**\n * Behaviors grouped by tier.\n */\nexport const BEHAVIORS_BY_TIER: Record<BehaviorTier, BehaviorName[]> = {\n \"core\": [\n \"Draggable\",\n \"Toggleable\"\n ],\n \"common\": [\n \"Sortable\",\n \"Removable\"\n ],\n \"optional\": [\n \"Resizable\"\n ]\n};\n\n/**\n * Category for each behavior.\n */\nexport const BEHAVIOR_CATEGORIES: Record<BehaviorName, BehaviorCategory> = {\n \"Draggable\": \"ui\",\n \"Sortable\": \"ui\",\n \"Resizable\": \"ui\",\n \"Removable\": \"data\",\n \"Toggleable\": \"form\"\n};\n\n/**\n * Tier for each behavior.\n */\nexport const BEHAVIOR_TIERS: Record<BehaviorName, BehaviorTier> = {\n \"Draggable\": \"core\",\n \"Sortable\": \"common\",\n \"Resizable\": \"optional\",\n \"Removable\": \"common\",\n \"Toggleable\": \"core\"\n};\n"],"mappings":"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","names":["draggableSchema","init_draggable_schema","__esmMin","draggable_exports","__export","draggable_default","draggableMetadata","draggableSource","registerDraggable","hyperfixi","hf","result","draggableSchema","ctx","init_draggable","__esmMin","init_draggable_schema","removableSchema","init_removable_schema","__esmMin","removable_exports","__export","removable_default","registerRemovable","removableMetadata","removableSource","hyperfixi","hf","result","removableSchema","ctx","init_removable","__esmMin","init_removable_schema","toggleableSchema","init_toggleable_schema","__esmMin","toggleable_exports","__export","toggleable_default","registerToggleable","toggleableMetadata","toggleableSource","hyperfixi","hf","result","toggleableSchema","ctx","init_toggleable","__esmMin","init_toggleable_schema","sortableSchema","init_sortable_schema","__esmMin","sortable_exports","__export","sortable_default","registerSortable","sortableMetadata","sortableSource","hyperfixi","hf","result","sortableSchema","ctx","init_sortable","__esmMin","init_sortable_schema","resizableSchema","init_resizable_schema","__esmMin","resizable_exports","__export","resizable_default","registerResizable","resizableMetadata","resizableSource","hyperfixi","hf","result","resizableSchema","ctx","init_resizable","__esmMin","init_resizable_schema","src_exports","__export","ALL_BEHAVIOR_NAMES","BEHAVIORS_BY_CATEGORY","BEHAVIORS_BY_TIER","BEHAVIOR_CATEGORIES","BEHAVIOR_TIERS","draggable_default","removable_default","resizable_default","sortable_default","toggleable_default","draggableMetadata","draggableSource","getAllSchemas","getAllSchemasRecord","getAvailableBehaviors","getBehavior","getBehaviorsByCategory","getBehaviorsByTier","getRegisteredBehaviors","getSchema","hasLoader","isRegistered","loadAll","loadBehavior","preloadCategory","preloadTier","ready","registerAll","registerAllWithRuntime","registerBehavior","registerDraggable","registerLoader","registerRemovable","registerResizable","registerSchema","registerSortable","registerToggleable","registerWithRuntime","removableMetadata","removableSource","resizableMetadata","resizableSource","sortableMetadata","sortableSource","toggleableMetadata","toggleableSource","tryGetBehavior","tryGetSchema","init_draggable","init_removable","init_toggleable","init_sortable","init_resizable","behaviors","schemas","loaders","loadingPromises","registerBehavior","name","module","registerSchema","schema","registerLoader","loader","getBehavior","behavior","registered","tryGetBehavior","getSchema","tryGetSchema","isRegistered","hasLoader","getRegisteredBehaviors","getAvailableBehaviors","names","getBehaviorsByCategory","category","result","getBehaviorsByTier","tier","getAllSchemas","getAllSchemasRecord","loadBehavior","cached","inFlight","promise","mod","preloadTier","err","preloadCategory","loadAll","registerWithRuntime","hyperfixi","registerAllWithRuntime","registrations","init_draggable_schema","init_sortable_schema","init_resizable_schema","init_removable_schema","init_toggleable_schema","registerSchema","draggableSchema","sortableSchema","resizableSchema","removableSchema","toggleableSchema","registerLoader","ALL_BEHAVIOR_NAMES","BEHAVIORS_BY_CATEGORY","BEHAVIORS_BY_TIER","BEHAVIOR_CATEGORIES","BEHAVIOR_TIERS","init_draggable","init_removable","init_toggleable","init_sortable","init_resizable","registerAll","hyperfixi","registerDraggable","registerRemovable","registerToggleable","registerSortable","registerResizable","ready","lsWin","savedPromise","err"]}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/behaviors/draggable.ts
21
+ var draggable_exports = {};
22
+ __export(draggable_exports, {
23
+ default: () => draggable_default,
24
+ draggableMetadata: () => draggableMetadata,
25
+ draggableSource: () => draggableSource,
26
+ registerDraggable: () => registerDraggable
27
+ });
28
+ module.exports = __toCommonJS(draggable_exports);
29
+
30
+ // src/schemas/draggable.schema.ts
31
+ var draggableSchema = {
32
+ name: "Draggable",
33
+ category: "ui",
34
+ tier: "core",
35
+ version: "1.0.0",
36
+ description: "Makes elements draggable with pointer events",
37
+ parameters: [
38
+ {
39
+ name: "dragHandle",
40
+ type: "selector",
41
+ optional: true,
42
+ default: "me",
43
+ description: "CSS selector for the drag handle element"
44
+ }
45
+ ],
46
+ events: [
47
+ { name: "draggable:start", description: "Fired when drag begins" },
48
+ { name: "draggable:move", description: "Fired during each movement" },
49
+ { name: "draggable:end", description: "Fired when drag completes" }
50
+ ],
51
+ requirements: ["position: absolute or position: fixed on the element"],
52
+ source: `
53
+ behavior Draggable(dragHandle)
54
+ init
55
+ if no dragHandle set dragHandle to me
56
+ end
57
+ on pointerdown(clientX, clientY) from dragHandle
58
+ halt the event
59
+ trigger draggable:start
60
+ measure x
61
+ set startX to it
62
+ measure y
63
+ set startY to it
64
+ set xoff to clientX - startX
65
+ set yoff to clientY - startY
66
+ repeat until event pointerup from document
67
+ wait for pointermove(clientX, clientY) or
68
+ pointerup(clientX, clientY) from document
69
+ add { left: \${clientX - xoff}px; top: \${clientY - yoff}px; }
70
+ trigger draggable:move
71
+ end
72
+ trigger draggable:end
73
+ end
74
+ end
75
+ `.trim()
76
+ };
77
+
78
+ // src/behaviors/draggable.ts
79
+ var draggableSource = draggableSchema.source;
80
+ var draggableMetadata = draggableSchema;
81
+ async function registerDraggable(hyperfixi) {
82
+ const hf = hyperfixi || (typeof window !== "undefined" ? window.lokascript : null);
83
+ if (!hf) {
84
+ throw new Error(
85
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
86
+ );
87
+ }
88
+ const result = hf.compileSync(draggableSchema.source, { traditional: true });
89
+ if (!result.ok) {
90
+ throw new Error(`Failed to compile Draggable behavior: ${JSON.stringify(result.errors)}`);
91
+ }
92
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
93
+ await hf.execute(result.ast, ctx);
94
+ }
95
+ if (typeof window !== "undefined" && window.lokascript) {
96
+ registerDraggable().catch(console.error);
97
+ }
98
+ var draggable_default = {
99
+ source: draggableSchema.source,
100
+ metadata: draggableSchema,
101
+ register: registerDraggable
102
+ };
103
+ // Annotate the CommonJS export names for ESM import in node:
104
+ 0 && (module.exports = {
105
+ draggableMetadata,
106
+ draggableSource,
107
+ registerDraggable
108
+ });
109
+ //# sourceMappingURL=draggable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/behaviors/draggable.ts","../../src/schemas/draggable.schema.ts"],"sourcesContent":["/**\n * Draggable Behavior\n *\n * A reusable behavior that makes elements draggable with pointer events.\n * Supports custom drag handles, lifecycle events, and smooth positioning.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <div _=\"install Draggable\">Drag me!</div>\n *\n * <!-- With custom drag handle -->\n * <div _=\"install Draggable(dragHandle: .titlebar)\">\n * <div class=\"titlebar\">Drag here</div>\n * <div class=\"content\">Content</div>\n * </div>\n * ```\n */\n\nimport { draggableSchema } from '../schemas/draggable.schema';\nimport type { LokaScriptInstance, LokaScriptWindow } from '../schemas/types';\n\n// Re-export schema-derived values for backwards compatibility\nexport const draggableSource = draggableSchema.source;\nexport const draggableMetadata = draggableSchema;\n\n/**\n * Register the Draggable behavior with LokaScript.\n */\nexport async function registerDraggable(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf =\n hyperfixi ||\n (typeof window !== 'undefined' ? (window as unknown as LokaScriptWindow).lokascript : null);\n\n if (!hf) {\n throw new Error(\n 'LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.'\n );\n }\n\n const result = hf.compileSync(draggableSchema.source, { traditional: true });\n\n if (!result.ok) {\n throw new Error(`Failed to compile Draggable behavior: ${JSON.stringify(result.errors)}`);\n }\n\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(result.ast, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n registerDraggable().catch(console.error);\n}\n\nexport default {\n source: draggableSchema.source,\n metadata: draggableSchema,\n register: registerDraggable,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * Draggable Behavior Schema\n *\n * Makes elements draggable with pointer events.\n * Supports custom drag handles and lifecycle events.\n */\nexport const draggableSchema: BehaviorSchema = {\n name: 'Draggable',\n category: 'ui',\n tier: 'core',\n version: '1.0.0',\n description: 'Makes elements draggable with pointer events',\n parameters: [\n {\n name: 'dragHandle',\n type: 'selector',\n optional: true,\n default: 'me',\n description: 'CSS selector for the drag handle element',\n },\n ],\n events: [\n { name: 'draggable:start', description: 'Fired when drag begins' },\n { name: 'draggable:move', description: 'Fired during each movement' },\n { name: 'draggable:end', description: 'Fired when drag completes' },\n ],\n requirements: ['position: absolute or position: fixed on the element'],\n source: `\nbehavior Draggable(dragHandle)\n init\n if no dragHandle set dragHandle to me\n end\n on pointerdown(clientX, clientY) from dragHandle\n halt the event\n trigger draggable:start\n measure x\n set startX to it\n measure y\n set startY to it\n set xoff to clientX - startX\n set yoff to clientY - startY\n repeat until event pointerup from document\n wait for pointermove(clientX, clientY) or\n pointerup(clientX, clientY) from document\n add { left: \\${clientX - xoff}px; top: \\${clientY - yoff}px; }\n trigger draggable:move\n end\n trigger draggable:end\n end\nend\n`.trim(),\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,IACV;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,EAAE,MAAM,mBAAmB,aAAa,yBAAyB;AAAA,IACjE,EAAE,MAAM,kBAAkB,aAAa,6BAA6B;AAAA,IACpE,EAAE,MAAM,iBAAiB,aAAa,4BAA4B;AAAA,EACpE;AAAA,EACA,cAAc,CAAC,sDAAsD;AAAA,EACrE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBR,KAAK;AACP;;;AD9BO,IAAM,kBAAkB,gBAAgB;AACxC,IAAM,oBAAoB;AAKjC,eAAsB,kBAAkB,WAA+C;AACrF,QAAM,KACJ,cACC,OAAO,WAAW,cAAe,OAAuC,aAAa;AAExF,MAAI,CAAC,IAAI;AACP,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,GAAG,YAAY,gBAAgB,QAAQ,EAAE,aAAa,KAAK,CAAC;AAE3E,MAAI,CAAC,OAAO,IAAI;AACd,UAAM,IAAI,MAAM,yCAAyC,KAAK,UAAU,OAAO,MAAM,CAAC,EAAE;AAAA,EAC1F;AAEA,QAAM,MAAM,GAAG,gBAAgB,GAAG,cAAc,IAAI,EAAE,QAAQ,oBAAI,IAAI,GAAG,SAAS,oBAAI,IAAI,EAAE;AAC5F,QAAM,GAAG,QAAQ,OAAO,KAAK,GAAG;AAClC;AAGA,IAAI,OAAO,WAAW,eAAgB,OAAuC,YAAY;AACvF,oBAAkB,EAAE,MAAM,QAAQ,KAAK;AACzC;AAEA,IAAO,oBAAQ;AAAA,EACb,QAAQ,gBAAgB;AAAA,EACxB,UAAU;AAAA,EACV,UAAU;AACZ;","names":[]}
@@ -0,0 +1,15 @@
1
+ import { a as BehaviorSchema, L as LokaScriptInstance } from '../types-CCc_2wAb.cjs';
2
+
3
+ declare const draggableSource: string;
4
+ declare const draggableMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the Draggable behavior with LokaScript.
7
+ */
8
+ declare function registerDraggable(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerDraggable;
13
+ };
14
+
15
+ export { _default as default, draggableMetadata, draggableSource, registerDraggable };
@@ -0,0 +1,15 @@
1
+ import { a as BehaviorSchema, L as LokaScriptInstance } from '../types-CCc_2wAb.js';
2
+
3
+ declare const draggableSource: string;
4
+ declare const draggableMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the Draggable behavior with LokaScript.
7
+ */
8
+ declare function registerDraggable(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerDraggable;
13
+ };
14
+
15
+ export { _default as default, draggableMetadata, draggableSource, registerDraggable };
@@ -0,0 +1,14 @@
1
+ import {
2
+ draggableMetadata,
3
+ draggableSource,
4
+ draggable_default,
5
+ registerDraggable
6
+ } from "../chunk-WU37DFAL.js";
7
+ import "../chunk-G6WR2AYR.js";
8
+ export {
9
+ draggable_default as default,
10
+ draggableMetadata,
11
+ draggableSource,
12
+ registerDraggable
13
+ };
14
+ //# sourceMappingURL=draggable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/behaviors/removable.ts
21
+ var removable_exports = {};
22
+ __export(removable_exports, {
23
+ default: () => removable_default,
24
+ registerRemovable: () => registerRemovable,
25
+ removableMetadata: () => removableMetadata,
26
+ removableSource: () => removableSource
27
+ });
28
+ module.exports = __toCommonJS(removable_exports);
29
+
30
+ // src/schemas/removable.schema.ts
31
+ var removableSchema = {
32
+ name: "Removable",
33
+ category: "data",
34
+ tier: "common",
35
+ version: "1.2.0",
36
+ description: "Makes elements removable on click",
37
+ parameters: [
38
+ {
39
+ name: "triggerEl",
40
+ type: "selector",
41
+ optional: true,
42
+ default: "me",
43
+ description: "Element that triggers removal (e.g., a close button)"
44
+ },
45
+ {
46
+ name: "confirm",
47
+ type: "boolean",
48
+ optional: true,
49
+ default: false,
50
+ description: "Show confirmation dialog before removal"
51
+ },
52
+ {
53
+ name: "effect",
54
+ type: "string",
55
+ optional: true,
56
+ default: "none",
57
+ enum: ["fade", "none"],
58
+ description: 'Transition effect: "fade" or "none"'
59
+ }
60
+ ],
61
+ events: [
62
+ { name: "removable:before", description: "Fired before removal (cancelable)" },
63
+ { name: "removable:removed", description: "Fired after removal" }
64
+ ],
65
+ source: `
66
+ behavior Removable(triggerEl, confirm, effect)
67
+ init
68
+ if triggerEl is undefined
69
+ set triggerEl to me
70
+ end
71
+ end
72
+ on click from triggerEl
73
+ if confirm
74
+ if not window.confirm("Are you sure?")
75
+ halt
76
+ end
77
+ end
78
+ trigger removable:before
79
+ if effect is "fade"
80
+ transition opacity to 0 over 300ms
81
+ end
82
+ trigger removable:removed
83
+ remove me
84
+ end
85
+ end
86
+ `.trim()
87
+ };
88
+
89
+ // src/behaviors/removable.ts
90
+ var removableSource = removableSchema.source;
91
+ var removableMetadata = removableSchema;
92
+ async function registerRemovable(hyperfixi) {
93
+ const hf = hyperfixi || (typeof window !== "undefined" ? window.lokascript : null);
94
+ if (!hf) {
95
+ throw new Error(
96
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
97
+ );
98
+ }
99
+ const result = hf.compileSync(removableSchema.source, { traditional: true });
100
+ if (!result.ok) {
101
+ throw new Error(`Failed to compile Removable behavior: ${JSON.stringify(result.errors)}`);
102
+ }
103
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
104
+ await hf.execute(result.ast, ctx);
105
+ }
106
+ if (typeof window !== "undefined" && window.lokascript) {
107
+ registerRemovable().catch(console.error);
108
+ }
109
+ var removable_default = {
110
+ source: removableSchema.source,
111
+ metadata: removableSchema,
112
+ register: registerRemovable
113
+ };
114
+ // Annotate the CommonJS export names for ESM import in node:
115
+ 0 && (module.exports = {
116
+ registerRemovable,
117
+ removableMetadata,
118
+ removableSource
119
+ });
120
+ //# sourceMappingURL=removable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/behaviors/removable.ts","../../src/schemas/removable.schema.ts"],"sourcesContent":["/**\n * Removable Behavior\n *\n * A behavior that removes an element when a trigger is clicked.\n * Supports optional confirmation and transition effects.\n *\n * @example\n * ```html\n * <div _=\"install Removable\">Click to remove</div>\n *\n * <div _=\"install Removable(confirm: true)\">With confirmation</div>\n * ```\n */\n\nimport { removableSchema } from '../schemas/removable.schema';\nimport type { LokaScriptInstance, LokaScriptWindow } from '../schemas/types';\n\n// Re-export schema-derived values for backwards compatibility\nexport const removableSource = removableSchema.source;\nexport const removableMetadata = removableSchema;\n\n/**\n * Register the Removable behavior with LokaScript.\n */\nexport async function registerRemovable(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf =\n hyperfixi ||\n (typeof window !== 'undefined' ? (window as unknown as LokaScriptWindow).lokascript : null);\n\n if (!hf) {\n throw new Error(\n 'LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.'\n );\n }\n\n const result = hf.compileSync(removableSchema.source, { traditional: true });\n\n if (!result.ok) {\n throw new Error(`Failed to compile Removable behavior: ${JSON.stringify(result.errors)}`);\n }\n\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(result.ast, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (typeof window !== 'undefined' && (window as unknown as LokaScriptWindow).lokascript) {\n registerRemovable().catch(console.error);\n}\n\nexport default {\n source: removableSchema.source,\n metadata: removableSchema,\n register: registerRemovable,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * Removable Behavior Schema\n *\n * Removes an element when a trigger is clicked.\n * Supports optional confirmation and transition effects.\n *\n * @since 1.2.0 — `trigger` parameter renamed to `triggerEl` to avoid\n * shadowing the hyperscript `trigger` command keyword. Users migrating\n * from v1.x should update: `install Removable(triggerEl: .close-btn)`.\n */\nexport const removableSchema: BehaviorSchema = {\n name: 'Removable',\n category: 'data',\n tier: 'common',\n version: '1.2.0',\n description: 'Makes elements removable on click',\n parameters: [\n {\n name: 'triggerEl',\n type: 'selector',\n optional: true,\n default: 'me',\n description: 'Element that triggers removal (e.g., a close button)',\n },\n {\n name: 'confirm',\n type: 'boolean',\n optional: true,\n default: false,\n description: 'Show confirmation dialog before removal',\n },\n {\n name: 'effect',\n type: 'string',\n optional: true,\n default: 'none',\n enum: ['fade', 'none'],\n description: 'Transition effect: \"fade\" or \"none\"',\n },\n ],\n events: [\n { name: 'removable:before', description: 'Fired before removal (cancelable)' },\n { name: 'removable:removed', description: 'Fired after removal' },\n ],\n source: `\nbehavior Removable(triggerEl, confirm, effect)\n init\n if triggerEl is undefined\n set triggerEl to me\n end\n end\n on click from triggerEl\n if confirm\n if not window.confirm(\"Are you sure?\")\n halt\n end\n end\n trigger removable:before\n if effect is \"fade\"\n transition opacity to 0 over 300ms\n end\n trigger removable:removed\n remove me\n end\nend\n`.trim(),\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACYO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,IACV;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,EAAE,MAAM,oBAAoB,aAAa,oCAAoC;AAAA,IAC7E,EAAE,MAAM,qBAAqB,aAAa,sBAAsB;AAAA,EAClE;AAAA,EACA,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBR,KAAK;AACP;;;ADlDO,IAAM,kBAAkB,gBAAgB;AACxC,IAAM,oBAAoB;AAKjC,eAAsB,kBAAkB,WAA+C;AACrF,QAAM,KACJ,cACC,OAAO,WAAW,cAAe,OAAuC,aAAa;AAExF,MAAI,CAAC,IAAI;AACP,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,GAAG,YAAY,gBAAgB,QAAQ,EAAE,aAAa,KAAK,CAAC;AAE3E,MAAI,CAAC,OAAO,IAAI;AACd,UAAM,IAAI,MAAM,yCAAyC,KAAK,UAAU,OAAO,MAAM,CAAC,EAAE;AAAA,EAC1F;AAEA,QAAM,MAAM,GAAG,gBAAgB,GAAG,cAAc,IAAI,EAAE,QAAQ,oBAAI,IAAI,GAAG,SAAS,oBAAI,IAAI,EAAE;AAC5F,QAAM,GAAG,QAAQ,OAAO,KAAK,GAAG;AAClC;AAGA,IAAI,OAAO,WAAW,eAAgB,OAAuC,YAAY;AACvF,oBAAkB,EAAE,MAAM,QAAQ,KAAK;AACzC;AAEA,IAAO,oBAAQ;AAAA,EACb,QAAQ,gBAAgB;AAAA,EACxB,UAAU;AAAA,EACV,UAAU;AACZ;","names":[]}
@@ -0,0 +1,15 @@
1
+ import { a as BehaviorSchema, L as LokaScriptInstance } from '../types-CCc_2wAb.cjs';
2
+
3
+ declare const removableSource: string;
4
+ declare const removableMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the Removable behavior with LokaScript.
7
+ */
8
+ declare function registerRemovable(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerRemovable;
13
+ };
14
+
15
+ export { _default as default, registerRemovable, removableMetadata, removableSource };
@@ -0,0 +1,15 @@
1
+ import { a as BehaviorSchema, L as LokaScriptInstance } from '../types-CCc_2wAb.js';
2
+
3
+ declare const removableSource: string;
4
+ declare const removableMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the Removable behavior with LokaScript.
7
+ */
8
+ declare function registerRemovable(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerRemovable;
13
+ };
14
+
15
+ export { _default as default, registerRemovable, removableMetadata, removableSource };
@@ -0,0 +1,14 @@
1
+ import {
2
+ registerRemovable,
3
+ removableMetadata,
4
+ removableSource,
5
+ removable_default
6
+ } from "../chunk-2NQHIHD5.js";
7
+ import "../chunk-272NKUJ3.js";
8
+ export {
9
+ removable_default as default,
10
+ registerRemovable,
11
+ removableMetadata,
12
+ removableSource
13
+ };
14
+ //# sourceMappingURL=removable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}