@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
package/dist/index.cjs ADDED
@@ -0,0 +1,907 @@
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 __esm = (fn, res) => function __init() {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ };
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+
23
+ // src/schemas/draggable.schema.ts
24
+ var draggableSchema;
25
+ var init_draggable_schema = __esm({
26
+ "src/schemas/draggable.schema.ts"() {
27
+ "use strict";
28
+ draggableSchema = {
29
+ name: "Draggable",
30
+ category: "ui",
31
+ tier: "core",
32
+ version: "1.0.0",
33
+ description: "Makes elements draggable with pointer events",
34
+ parameters: [
35
+ {
36
+ name: "dragHandle",
37
+ type: "selector",
38
+ optional: true,
39
+ default: "me",
40
+ description: "CSS selector for the drag handle element"
41
+ }
42
+ ],
43
+ events: [
44
+ { name: "draggable:start", description: "Fired when drag begins" },
45
+ { name: "draggable:move", description: "Fired during each movement" },
46
+ { name: "draggable:end", description: "Fired when drag completes" }
47
+ ],
48
+ requirements: ["position: absolute or position: fixed on the element"],
49
+ source: `
50
+ behavior Draggable(dragHandle)
51
+ init
52
+ if no dragHandle set dragHandle to me
53
+ end
54
+ on pointerdown(clientX, clientY) from dragHandle
55
+ halt the event
56
+ trigger draggable:start
57
+ measure x
58
+ set startX to it
59
+ measure y
60
+ set startY to it
61
+ set xoff to clientX - startX
62
+ set yoff to clientY - startY
63
+ repeat until event pointerup from document
64
+ wait for pointermove(clientX, clientY) or
65
+ pointerup(clientX, clientY) from document
66
+ add { left: \${clientX - xoff}px; top: \${clientY - yoff}px; }
67
+ trigger draggable:move
68
+ end
69
+ trigger draggable:end
70
+ end
71
+ end
72
+ `.trim()
73
+ };
74
+ }
75
+ });
76
+
77
+ // src/behaviors/draggable.ts
78
+ var draggable_exports = {};
79
+ __export(draggable_exports, {
80
+ default: () => draggable_default,
81
+ draggableMetadata: () => draggableMetadata,
82
+ draggableSource: () => draggableSource,
83
+ registerDraggable: () => registerDraggable
84
+ });
85
+ async function registerDraggable(hyperfixi) {
86
+ const hf = hyperfixi || (typeof window !== "undefined" ? window.lokascript : null);
87
+ if (!hf) {
88
+ throw new Error(
89
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
90
+ );
91
+ }
92
+ const result = hf.compileSync(draggableSchema.source, { traditional: true });
93
+ if (!result.ok) {
94
+ throw new Error(`Failed to compile Draggable behavior: ${JSON.stringify(result.errors)}`);
95
+ }
96
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
97
+ await hf.execute(result.ast, ctx);
98
+ }
99
+ var draggableSource, draggableMetadata, draggable_default;
100
+ var init_draggable = __esm({
101
+ "src/behaviors/draggable.ts"() {
102
+ "use strict";
103
+ init_draggable_schema();
104
+ draggableSource = draggableSchema.source;
105
+ draggableMetadata = draggableSchema;
106
+ if (typeof window !== "undefined" && window.lokascript) {
107
+ registerDraggable().catch(console.error);
108
+ }
109
+ draggable_default = {
110
+ source: draggableSchema.source,
111
+ metadata: draggableSchema,
112
+ register: registerDraggable
113
+ };
114
+ }
115
+ });
116
+
117
+ // src/schemas/removable.schema.ts
118
+ var removableSchema;
119
+ var init_removable_schema = __esm({
120
+ "src/schemas/removable.schema.ts"() {
121
+ "use strict";
122
+ removableSchema = {
123
+ name: "Removable",
124
+ category: "data",
125
+ tier: "common",
126
+ version: "1.2.0",
127
+ description: "Makes elements removable on click",
128
+ parameters: [
129
+ {
130
+ name: "triggerEl",
131
+ type: "selector",
132
+ optional: true,
133
+ default: "me",
134
+ description: "Element that triggers removal (e.g., a close button)"
135
+ },
136
+ {
137
+ name: "confirm",
138
+ type: "boolean",
139
+ optional: true,
140
+ default: false,
141
+ description: "Show confirmation dialog before removal"
142
+ },
143
+ {
144
+ name: "effect",
145
+ type: "string",
146
+ optional: true,
147
+ default: "none",
148
+ enum: ["fade", "none"],
149
+ description: 'Transition effect: "fade" or "none"'
150
+ }
151
+ ],
152
+ events: [
153
+ { name: "removable:before", description: "Fired before removal (cancelable)" },
154
+ { name: "removable:removed", description: "Fired after removal" }
155
+ ],
156
+ source: `
157
+ behavior Removable(triggerEl, confirm, effect)
158
+ init
159
+ if triggerEl is undefined
160
+ set triggerEl to me
161
+ end
162
+ end
163
+ on click from triggerEl
164
+ if confirm
165
+ if not window.confirm("Are you sure?")
166
+ halt
167
+ end
168
+ end
169
+ trigger removable:before
170
+ if effect is "fade"
171
+ transition opacity to 0 over 300ms
172
+ end
173
+ trigger removable:removed
174
+ remove me
175
+ end
176
+ end
177
+ `.trim()
178
+ };
179
+ }
180
+ });
181
+
182
+ // src/behaviors/removable.ts
183
+ var removable_exports = {};
184
+ __export(removable_exports, {
185
+ default: () => removable_default,
186
+ registerRemovable: () => registerRemovable,
187
+ removableMetadata: () => removableMetadata,
188
+ removableSource: () => removableSource
189
+ });
190
+ async function registerRemovable(hyperfixi) {
191
+ const hf = hyperfixi || (typeof window !== "undefined" ? window.lokascript : null);
192
+ if (!hf) {
193
+ throw new Error(
194
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
195
+ );
196
+ }
197
+ const result = hf.compileSync(removableSchema.source, { traditional: true });
198
+ if (!result.ok) {
199
+ throw new Error(`Failed to compile Removable behavior: ${JSON.stringify(result.errors)}`);
200
+ }
201
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
202
+ await hf.execute(result.ast, ctx);
203
+ }
204
+ var removableSource, removableMetadata, removable_default;
205
+ var init_removable = __esm({
206
+ "src/behaviors/removable.ts"() {
207
+ "use strict";
208
+ init_removable_schema();
209
+ removableSource = removableSchema.source;
210
+ removableMetadata = removableSchema;
211
+ if (typeof window !== "undefined" && window.lokascript) {
212
+ registerRemovable().catch(console.error);
213
+ }
214
+ removable_default = {
215
+ source: removableSchema.source,
216
+ metadata: removableSchema,
217
+ register: registerRemovable
218
+ };
219
+ }
220
+ });
221
+
222
+ // src/schemas/toggleable.schema.ts
223
+ var toggleableSchema;
224
+ var init_toggleable_schema = __esm({
225
+ "src/schemas/toggleable.schema.ts"() {
226
+ "use strict";
227
+ toggleableSchema = {
228
+ name: "Toggleable",
229
+ category: "form",
230
+ tier: "core",
231
+ version: "1.0.0",
232
+ description: "Toggles a CSS class on click",
233
+ parameters: [
234
+ {
235
+ name: "cls",
236
+ type: "string",
237
+ optional: true,
238
+ default: "active",
239
+ description: "CSS class to toggle"
240
+ },
241
+ {
242
+ name: "target",
243
+ type: "selector",
244
+ optional: true,
245
+ default: "me",
246
+ description: "Element to toggle the class on"
247
+ }
248
+ ],
249
+ events: [
250
+ { name: "toggleable:on", description: "Fired when class is added" },
251
+ { name: "toggleable:off", description: "Fired when class is removed" }
252
+ ],
253
+ source: `
254
+ behavior Toggleable(cls, target)
255
+ init
256
+ if cls is undefined
257
+ set cls to "active"
258
+ end
259
+ if target is undefined
260
+ set target to me
261
+ end
262
+ end
263
+ on click
264
+ toggle .{cls} on target
265
+ end
266
+ end
267
+ `.trim()
268
+ };
269
+ }
270
+ });
271
+
272
+ // src/behaviors/toggleable.ts
273
+ var toggleable_exports = {};
274
+ __export(toggleable_exports, {
275
+ default: () => toggleable_default,
276
+ registerToggleable: () => registerToggleable,
277
+ toggleableMetadata: () => toggleableMetadata,
278
+ toggleableSource: () => toggleableSource
279
+ });
280
+ async function registerToggleable(hyperfixi) {
281
+ const hf = hyperfixi || (typeof window !== "undefined" ? window.lokascript : null);
282
+ if (!hf) {
283
+ throw new Error(
284
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
285
+ );
286
+ }
287
+ const result = hf.compileSync(toggleableSchema.source, { traditional: true });
288
+ if (!result.ok) {
289
+ throw new Error(`Failed to compile Toggleable behavior: ${JSON.stringify(result.errors)}`);
290
+ }
291
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
292
+ await hf.execute(result.ast, ctx);
293
+ }
294
+ var toggleableSource, toggleableMetadata, toggleable_default;
295
+ var init_toggleable = __esm({
296
+ "src/behaviors/toggleable.ts"() {
297
+ "use strict";
298
+ init_toggleable_schema();
299
+ toggleableSource = toggleableSchema.source;
300
+ toggleableMetadata = toggleableSchema;
301
+ if (typeof window !== "undefined" && window.lokascript) {
302
+ registerToggleable().catch(console.error);
303
+ }
304
+ toggleable_default = {
305
+ source: toggleableSchema.source,
306
+ metadata: toggleableSchema,
307
+ register: registerToggleable
308
+ };
309
+ }
310
+ });
311
+
312
+ // src/schemas/sortable.schema.ts
313
+ var sortableSchema;
314
+ var init_sortable_schema = __esm({
315
+ "src/schemas/sortable.schema.ts"() {
316
+ "use strict";
317
+ sortableSchema = {
318
+ name: "Sortable",
319
+ category: "ui",
320
+ tier: "common",
321
+ version: "1.0.0",
322
+ description: "Makes child elements reorderable via drag-and-drop",
323
+ parameters: [
324
+ {
325
+ name: "handle",
326
+ type: "selector",
327
+ optional: true,
328
+ default: "none",
329
+ description: "CSS selector for drag handles within items"
330
+ },
331
+ {
332
+ name: "dragClass",
333
+ type: "string",
334
+ optional: true,
335
+ default: "sorting",
336
+ description: "CSS class added to item during drag"
337
+ }
338
+ ],
339
+ events: [
340
+ { name: "sortable:start", description: "Fired when drag begins" },
341
+ {
342
+ name: "sortable:move",
343
+ description: "Fired during drag \u2014 handle this event to reorder DOM elements"
344
+ },
345
+ { name: "sortable:end", description: "Fired when drag completes" }
346
+ ],
347
+ requirements: ["Users must handle DOM reordering in sortable:move event handlers"],
348
+ source: `
349
+ behavior Sortable(handle, dragClass)
350
+ init
351
+ if no dragClass set dragClass to "sorting"
352
+ end
353
+ on pointerdown(target, clientY) from me
354
+ set item to closest <li/> in target
355
+ if no item exit
356
+ if handle
357
+ set handleEl to target.closest(handle)
358
+ if no handleEl exit
359
+ end
360
+ halt the event
361
+ add dragClass to item
362
+ trigger sortable:start on me
363
+ repeat until event pointerup from document
364
+ wait for pointermove(clientY) from document
365
+ trigger sortable:move on me
366
+ end
367
+ remove dragClass from item
368
+ trigger sortable:end on me
369
+ end
370
+ end
371
+ `.trim()
372
+ };
373
+ }
374
+ });
375
+
376
+ // src/behaviors/sortable.ts
377
+ var sortable_exports = {};
378
+ __export(sortable_exports, {
379
+ default: () => sortable_default,
380
+ registerSortable: () => registerSortable,
381
+ sortableMetadata: () => sortableMetadata,
382
+ sortableSource: () => sortableSource
383
+ });
384
+ async function registerSortable(hyperfixi) {
385
+ const hf = hyperfixi || (typeof window !== "undefined" ? window.lokascript : null);
386
+ if (!hf) {
387
+ throw new Error(
388
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
389
+ );
390
+ }
391
+ const result = hf.compileSync(sortableSchema.source, { traditional: true });
392
+ if (!result.ok) {
393
+ throw new Error(`Failed to compile Sortable behavior: ${JSON.stringify(result.errors)}`);
394
+ }
395
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
396
+ await hf.execute(result.ast, ctx);
397
+ }
398
+ var sortableSource, sortableMetadata, sortable_default;
399
+ var init_sortable = __esm({
400
+ "src/behaviors/sortable.ts"() {
401
+ "use strict";
402
+ init_sortable_schema();
403
+ sortableSource = sortableSchema.source;
404
+ sortableMetadata = sortableSchema;
405
+ if (typeof window !== "undefined" && window.lokascript) {
406
+ registerSortable().catch(console.error);
407
+ }
408
+ sortable_default = {
409
+ source: sortableSchema.source,
410
+ metadata: sortableSchema,
411
+ register: registerSortable
412
+ };
413
+ }
414
+ });
415
+
416
+ // src/schemas/resizable.schema.ts
417
+ var resizableSchema;
418
+ var init_resizable_schema = __esm({
419
+ "src/schemas/resizable.schema.ts"() {
420
+ "use strict";
421
+ resizableSchema = {
422
+ name: "Resizable",
423
+ category: "ui",
424
+ tier: "optional",
425
+ version: "1.0.0",
426
+ description: "Makes elements resizable by dragging",
427
+ parameters: [
428
+ {
429
+ name: "handle",
430
+ type: "selector",
431
+ optional: true,
432
+ default: "me",
433
+ description: "CSS selector for the resize handle (defaults to the element itself)"
434
+ },
435
+ {
436
+ name: "minWidth",
437
+ type: "number",
438
+ optional: true,
439
+ default: 50,
440
+ description: "Minimum width in pixels"
441
+ },
442
+ {
443
+ name: "minHeight",
444
+ type: "number",
445
+ optional: true,
446
+ default: 50,
447
+ description: "Minimum height in pixels"
448
+ },
449
+ {
450
+ name: "maxWidth",
451
+ type: "number",
452
+ optional: true,
453
+ default: 9999,
454
+ description: "Maximum width in pixels"
455
+ },
456
+ {
457
+ name: "maxHeight",
458
+ type: "number",
459
+ optional: true,
460
+ default: 9999,
461
+ description: "Maximum height in pixels"
462
+ }
463
+ ],
464
+ events: [
465
+ { name: "resizable:start", description: "Fired when resize begins" },
466
+ { name: "resizable:resize", description: "Fired during resize" },
467
+ { name: "resizable:end", description: "Fired when resize completes" }
468
+ ],
469
+ source: `
470
+ behavior Resizable(handle, minWidth, minHeight, maxWidth, maxHeight)
471
+ init
472
+ if no handle set handle to me
473
+ if no minWidth set minWidth to 50
474
+ if no minHeight set minHeight to 50
475
+ if no maxWidth set maxWidth to 9999
476
+ if no maxHeight set maxHeight to 9999
477
+ end
478
+ on pointerdown(clientX, clientY) from handle
479
+ halt the event
480
+ trigger resizable:start
481
+ measure width
482
+ set startWidth to it
483
+ measure height
484
+ set startHeight to it
485
+ set startX to clientX
486
+ set startY to clientY
487
+ repeat until event pointerup from document
488
+ wait for pointermove(clientX, clientY) or
489
+ pointerup from document
490
+ set newWidth to startWidth + (clientX - startX)
491
+ set newHeight to startHeight + (clientY - startY)
492
+ if newWidth < minWidth set newWidth to minWidth
493
+ if newWidth > maxWidth set newWidth to maxWidth
494
+ if newHeight < minHeight set newHeight to minHeight
495
+ if newHeight > maxHeight set newHeight to maxHeight
496
+ add { width: \${newWidth}px; height: \${newHeight}px; }
497
+ trigger resizable:resize
498
+ end
499
+ trigger resizable:end
500
+ end
501
+ end
502
+ `.trim()
503
+ };
504
+ }
505
+ });
506
+
507
+ // src/behaviors/resizable.ts
508
+ var resizable_exports = {};
509
+ __export(resizable_exports, {
510
+ default: () => resizable_default,
511
+ registerResizable: () => registerResizable,
512
+ resizableMetadata: () => resizableMetadata,
513
+ resizableSource: () => resizableSource
514
+ });
515
+ async function registerResizable(hyperfixi) {
516
+ const hf = hyperfixi || (typeof window !== "undefined" ? window.lokascript : null);
517
+ if (!hf) {
518
+ throw new Error(
519
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
520
+ );
521
+ }
522
+ const result = hf.compileSync(resizableSchema.source, { traditional: true });
523
+ if (!result.ok) {
524
+ throw new Error(`Failed to compile Resizable behavior: ${JSON.stringify(result.errors)}`);
525
+ }
526
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
527
+ await hf.execute(result.ast, ctx);
528
+ }
529
+ var resizableSource, resizableMetadata, resizable_default;
530
+ var init_resizable = __esm({
531
+ "src/behaviors/resizable.ts"() {
532
+ "use strict";
533
+ init_resizable_schema();
534
+ resizableSource = resizableSchema.source;
535
+ resizableMetadata = resizableSchema;
536
+ if (typeof window !== "undefined" && window.lokascript) {
537
+ registerResizable().catch(console.error);
538
+ }
539
+ resizable_default = {
540
+ source: resizableSchema.source,
541
+ metadata: resizableSchema,
542
+ register: registerResizable
543
+ };
544
+ }
545
+ });
546
+
547
+ // src/index.ts
548
+ var index_exports = {};
549
+ __export(index_exports, {
550
+ ALL_BEHAVIOR_NAMES: () => ALL_BEHAVIOR_NAMES,
551
+ BEHAVIORS_BY_CATEGORY: () => BEHAVIORS_BY_CATEGORY,
552
+ BEHAVIORS_BY_TIER: () => BEHAVIORS_BY_TIER,
553
+ BEHAVIOR_CATEGORIES: () => BEHAVIOR_CATEGORIES,
554
+ BEHAVIOR_TIERS: () => BEHAVIOR_TIERS,
555
+ Draggable: () => draggable_default,
556
+ Removable: () => removable_default,
557
+ Resizable: () => resizable_default,
558
+ Sortable: () => sortable_default,
559
+ Toggleable: () => toggleable_default,
560
+ draggableMetadata: () => draggableMetadata,
561
+ draggableSource: () => draggableSource,
562
+ getAllSchemas: () => getAllSchemas,
563
+ getAllSchemasRecord: () => getAllSchemasRecord,
564
+ getAvailableBehaviors: () => getAvailableBehaviors,
565
+ getBehavior: () => getBehavior,
566
+ getBehaviorsByCategory: () => getBehaviorsByCategory,
567
+ getBehaviorsByTier: () => getBehaviorsByTier,
568
+ getRegisteredBehaviors: () => getRegisteredBehaviors,
569
+ getSchema: () => getSchema,
570
+ hasLoader: () => hasLoader,
571
+ isRegistered: () => isRegistered,
572
+ loadAll: () => loadAll,
573
+ loadBehavior: () => loadBehavior,
574
+ preloadCategory: () => preloadCategory,
575
+ preloadTier: () => preloadTier,
576
+ ready: () => ready,
577
+ registerAll: () => registerAll,
578
+ registerAllWithRuntime: () => registerAllWithRuntime,
579
+ registerBehavior: () => registerBehavior,
580
+ registerDraggable: () => registerDraggable,
581
+ registerLoader: () => registerLoader,
582
+ registerRemovable: () => registerRemovable,
583
+ registerResizable: () => registerResizable,
584
+ registerSchema: () => registerSchema,
585
+ registerSortable: () => registerSortable,
586
+ registerToggleable: () => registerToggleable,
587
+ registerWithRuntime: () => registerWithRuntime,
588
+ removableMetadata: () => removableMetadata,
589
+ removableSource: () => removableSource,
590
+ resizableMetadata: () => resizableMetadata,
591
+ resizableSource: () => resizableSource,
592
+ sortableMetadata: () => sortableMetadata,
593
+ sortableSource: () => sortableSource,
594
+ toggleableMetadata: () => toggleableMetadata,
595
+ toggleableSource: () => toggleableSource,
596
+ tryGetBehavior: () => tryGetBehavior,
597
+ tryGetSchema: () => tryGetSchema
598
+ });
599
+ module.exports = __toCommonJS(index_exports);
600
+ init_draggable();
601
+ init_removable();
602
+ init_toggleable();
603
+ init_sortable();
604
+ init_resizable();
605
+
606
+ // src/registry.ts
607
+ var behaviors = /* @__PURE__ */ new Map();
608
+ var schemas = /* @__PURE__ */ new Map();
609
+ var loaders = /* @__PURE__ */ new Map();
610
+ var loadingPromises = /* @__PURE__ */ new Map();
611
+ function registerBehavior(name, module2) {
612
+ behaviors.set(name, module2);
613
+ if (module2.metadata) {
614
+ schemas.set(name, module2.metadata);
615
+ }
616
+ }
617
+ function registerSchema(schema) {
618
+ schemas.set(schema.name, schema);
619
+ }
620
+ function registerLoader(name, loader) {
621
+ loaders.set(name, loader);
622
+ }
623
+ function getBehavior(name) {
624
+ const behavior = behaviors.get(name);
625
+ if (!behavior) {
626
+ const registered = Array.from(behaviors.keys()).join(", ");
627
+ throw new Error(
628
+ `Behavior '${name}' is not registered. Registered behaviors: ${registered || "none"}. Use loadBehavior('${name}') to lazy load it.`
629
+ );
630
+ }
631
+ return behavior;
632
+ }
633
+ function tryGetBehavior(name) {
634
+ return behaviors.get(name);
635
+ }
636
+ function getSchema(name) {
637
+ const schema = schemas.get(name);
638
+ if (!schema) {
639
+ throw new Error(
640
+ `Schema for behavior '${name}' is not registered. Use tryGetSchema('${name}') for a non-throwing alternative.`
641
+ );
642
+ }
643
+ return schema;
644
+ }
645
+ function tryGetSchema(name) {
646
+ return schemas.get(name);
647
+ }
648
+ function isRegistered(name) {
649
+ return behaviors.has(name);
650
+ }
651
+ function hasLoader(name) {
652
+ return loaders.has(name);
653
+ }
654
+ function getRegisteredBehaviors() {
655
+ return Array.from(behaviors.keys());
656
+ }
657
+ function getAvailableBehaviors() {
658
+ const names = /* @__PURE__ */ new Set([...behaviors.keys(), ...loaders.keys()]);
659
+ return Array.from(names);
660
+ }
661
+ function getBehaviorsByCategory(category) {
662
+ const result = [];
663
+ for (const [name, schema] of schemas) {
664
+ if (schema.category === category) {
665
+ result.push(name);
666
+ }
667
+ }
668
+ return result;
669
+ }
670
+ function getBehaviorsByTier(tier) {
671
+ const result = [];
672
+ for (const [name, schema] of schemas) {
673
+ if (schema.tier === tier) {
674
+ result.push(name);
675
+ }
676
+ }
677
+ return result;
678
+ }
679
+ function getAllSchemas() {
680
+ return Array.from(schemas.values());
681
+ }
682
+ function getAllSchemasRecord() {
683
+ const result = {};
684
+ for (const [name, schema] of schemas) {
685
+ result[name] = schema;
686
+ }
687
+ return result;
688
+ }
689
+ async function loadBehavior(name) {
690
+ const cached = behaviors.get(name);
691
+ if (cached) {
692
+ return cached;
693
+ }
694
+ const inFlight = loadingPromises.get(name);
695
+ if (inFlight) {
696
+ return inFlight;
697
+ }
698
+ const loader = loaders.get(name);
699
+ if (!loader) {
700
+ throw new Error(
701
+ `No loader registered for behavior '${name}'. Available loaders: ${Array.from(loaders.keys()).join(", ") || "none"}`
702
+ );
703
+ }
704
+ const promise = loader().then((mod) => {
705
+ const module2 = mod.default;
706
+ registerBehavior(name, module2);
707
+ loadingPromises.delete(name);
708
+ return module2;
709
+ });
710
+ loadingPromises.set(name, promise);
711
+ return promise;
712
+ }
713
+ async function preloadTier(tier) {
714
+ const names = getBehaviorsByTier(tier);
715
+ await Promise.all(
716
+ names.map(
717
+ (name) => loadBehavior(name).catch((err) => {
718
+ console.warn(`[behaviors] Failed to preload '${name}' (tier: ${tier}):`, err);
719
+ })
720
+ )
721
+ );
722
+ }
723
+ async function preloadCategory(category) {
724
+ const names = getBehaviorsByCategory(category);
725
+ await Promise.all(
726
+ names.map(
727
+ (name) => loadBehavior(name).catch((err) => {
728
+ console.warn(`[behaviors] Failed to preload '${name}' (category: ${category}):`, err);
729
+ })
730
+ )
731
+ );
732
+ }
733
+ async function loadAll() {
734
+ const names = getAvailableBehaviors();
735
+ await Promise.all(
736
+ names.map(
737
+ (name) => loadBehavior(name).catch((err) => {
738
+ console.warn(`[behaviors] Failed to load '${name}':`, err);
739
+ })
740
+ )
741
+ );
742
+ }
743
+ async function registerWithRuntime(name, hyperfixi) {
744
+ const module2 = await loadBehavior(name);
745
+ await module2.register(hyperfixi);
746
+ }
747
+ async function registerAllWithRuntime(hyperfixi) {
748
+ const registrations = Array.from(behaviors.values()).map((module2) => module2.register(hyperfixi));
749
+ await Promise.all(registrations);
750
+ }
751
+
752
+ // src/loaders.ts
753
+ init_draggable_schema();
754
+ init_sortable_schema();
755
+ init_resizable_schema();
756
+ init_removable_schema();
757
+ init_toggleable_schema();
758
+ registerSchema(draggableSchema);
759
+ registerSchema(sortableSchema);
760
+ registerSchema(resizableSchema);
761
+ registerSchema(removableSchema);
762
+ registerSchema(toggleableSchema);
763
+ registerLoader("Draggable", () => Promise.resolve().then(() => (init_draggable(), draggable_exports)));
764
+ registerLoader("Sortable", () => Promise.resolve().then(() => (init_sortable(), sortable_exports)));
765
+ registerLoader("Resizable", () => Promise.resolve().then(() => (init_resizable(), resizable_exports)));
766
+ registerLoader("Removable", () => Promise.resolve().then(() => (init_removable(), removable_exports)));
767
+ registerLoader("Toggleable", () => Promise.resolve().then(() => (init_toggleable(), toggleable_exports)));
768
+
769
+ // src/generated/metadata.ts
770
+ var ALL_BEHAVIOR_NAMES = [
771
+ "Draggable",
772
+ "Sortable",
773
+ "Resizable",
774
+ "Removable",
775
+ "Toggleable"
776
+ ];
777
+ var BEHAVIORS_BY_CATEGORY = {
778
+ "ui": [
779
+ "Draggable",
780
+ "Sortable",
781
+ "Resizable"
782
+ ],
783
+ "data": [
784
+ "Removable"
785
+ ],
786
+ "animation": [],
787
+ "form": [
788
+ "Toggleable"
789
+ ],
790
+ "layout": []
791
+ };
792
+ var BEHAVIORS_BY_TIER = {
793
+ "core": [
794
+ "Draggable",
795
+ "Toggleable"
796
+ ],
797
+ "common": [
798
+ "Sortable",
799
+ "Removable"
800
+ ],
801
+ "optional": [
802
+ "Resizable"
803
+ ]
804
+ };
805
+ var BEHAVIOR_CATEGORIES = {
806
+ "Draggable": "ui",
807
+ "Sortable": "ui",
808
+ "Resizable": "ui",
809
+ "Removable": "data",
810
+ "Toggleable": "form"
811
+ };
812
+ var BEHAVIOR_TIERS = {
813
+ "Draggable": "core",
814
+ "Sortable": "common",
815
+ "Resizable": "optional",
816
+ "Removable": "common",
817
+ "Toggleable": "core"
818
+ };
819
+
820
+ // src/index.ts
821
+ init_draggable();
822
+ init_removable();
823
+ init_toggleable();
824
+ init_sortable();
825
+ init_resizable();
826
+ async function registerAll(hyperfixi) {
827
+ await Promise.all([
828
+ registerDraggable(hyperfixi),
829
+ registerRemovable(hyperfixi),
830
+ registerToggleable(hyperfixi),
831
+ registerSortable(hyperfixi),
832
+ registerResizable(hyperfixi)
833
+ ]);
834
+ }
835
+ var ready = null;
836
+ if (typeof window !== "undefined" && window.lokascript) {
837
+ const lsWin = window;
838
+ ready = registerAll();
839
+ lsWin.__lokascript_behaviors_ready = ready;
840
+ ready.then(() => {
841
+ const hyperfixi = lsWin.lokascript;
842
+ const savedPromise = lsWin.__lokascript_behaviors_ready;
843
+ delete lsWin.__lokascript_behaviors_ready;
844
+ if (hyperfixi.attributeProcessor?.scanAndProcessAll) {
845
+ hyperfixi.attributeProcessor.scanAndProcessAll().finally(() => {
846
+ lsWin.__lokascript_behaviors_ready = savedPromise;
847
+ });
848
+ } else if (hyperfixi.processNode) {
849
+ hyperfixi.processNode(document);
850
+ lsWin.__lokascript_behaviors_ready = savedPromise;
851
+ }
852
+ }).catch((err) => {
853
+ console.error("[behaviors] Auto-registration failed:", err);
854
+ });
855
+ }
856
+ // Annotate the CommonJS export names for ESM import in node:
857
+ 0 && (module.exports = {
858
+ ALL_BEHAVIOR_NAMES,
859
+ BEHAVIORS_BY_CATEGORY,
860
+ BEHAVIORS_BY_TIER,
861
+ BEHAVIOR_CATEGORIES,
862
+ BEHAVIOR_TIERS,
863
+ Draggable,
864
+ Removable,
865
+ Resizable,
866
+ Sortable,
867
+ Toggleable,
868
+ draggableMetadata,
869
+ draggableSource,
870
+ getAllSchemas,
871
+ getAllSchemasRecord,
872
+ getAvailableBehaviors,
873
+ getBehavior,
874
+ getBehaviorsByCategory,
875
+ getBehaviorsByTier,
876
+ getRegisteredBehaviors,
877
+ getSchema,
878
+ hasLoader,
879
+ isRegistered,
880
+ loadAll,
881
+ loadBehavior,
882
+ preloadCategory,
883
+ preloadTier,
884
+ ready,
885
+ registerAll,
886
+ registerAllWithRuntime,
887
+ registerBehavior,
888
+ registerDraggable,
889
+ registerLoader,
890
+ registerRemovable,
891
+ registerResizable,
892
+ registerSchema,
893
+ registerSortable,
894
+ registerToggleable,
895
+ registerWithRuntime,
896
+ removableMetadata,
897
+ removableSource,
898
+ resizableMetadata,
899
+ resizableSource,
900
+ sortableMetadata,
901
+ sortableSource,
902
+ toggleableMetadata,
903
+ toggleableSource,
904
+ tryGetBehavior,
905
+ tryGetSchema
906
+ });
907
+ //# sourceMappingURL=index.cjs.map