@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,214 @@
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/registry.ts
21
+ var registry_exports = {};
22
+ __export(registry_exports, {
23
+ getAllSchemas: () => getAllSchemas,
24
+ getAllSchemasRecord: () => getAllSchemasRecord,
25
+ getAvailableBehaviors: () => getAvailableBehaviors,
26
+ getBehavior: () => getBehavior,
27
+ getBehaviorsByCategory: () => getBehaviorsByCategory,
28
+ getBehaviorsByTier: () => getBehaviorsByTier,
29
+ getRegisteredBehaviors: () => getRegisteredBehaviors,
30
+ getSchema: () => getSchema,
31
+ hasLoader: () => hasLoader,
32
+ isRegistered: () => isRegistered,
33
+ loadAll: () => loadAll,
34
+ loadBehavior: () => loadBehavior,
35
+ preloadCategory: () => preloadCategory,
36
+ preloadTier: () => preloadTier,
37
+ registerAllWithRuntime: () => registerAllWithRuntime,
38
+ registerBehavior: () => registerBehavior,
39
+ registerLoader: () => registerLoader,
40
+ registerSchema: () => registerSchema,
41
+ registerWithRuntime: () => registerWithRuntime,
42
+ tryGetBehavior: () => tryGetBehavior,
43
+ tryGetSchema: () => tryGetSchema
44
+ });
45
+ module.exports = __toCommonJS(registry_exports);
46
+ var behaviors = /* @__PURE__ */ new Map();
47
+ var schemas = /* @__PURE__ */ new Map();
48
+ var loaders = /* @__PURE__ */ new Map();
49
+ var loadingPromises = /* @__PURE__ */ new Map();
50
+ function registerBehavior(name, module2) {
51
+ behaviors.set(name, module2);
52
+ if (module2.metadata) {
53
+ schemas.set(name, module2.metadata);
54
+ }
55
+ }
56
+ function registerSchema(schema) {
57
+ schemas.set(schema.name, schema);
58
+ }
59
+ function registerLoader(name, loader) {
60
+ loaders.set(name, loader);
61
+ }
62
+ function getBehavior(name) {
63
+ const behavior = behaviors.get(name);
64
+ if (!behavior) {
65
+ const registered = Array.from(behaviors.keys()).join(", ");
66
+ throw new Error(
67
+ `Behavior '${name}' is not registered. Registered behaviors: ${registered || "none"}. Use loadBehavior('${name}') to lazy load it.`
68
+ );
69
+ }
70
+ return behavior;
71
+ }
72
+ function tryGetBehavior(name) {
73
+ return behaviors.get(name);
74
+ }
75
+ function getSchema(name) {
76
+ const schema = schemas.get(name);
77
+ if (!schema) {
78
+ throw new Error(
79
+ `Schema for behavior '${name}' is not registered. Use tryGetSchema('${name}') for a non-throwing alternative.`
80
+ );
81
+ }
82
+ return schema;
83
+ }
84
+ function tryGetSchema(name) {
85
+ return schemas.get(name);
86
+ }
87
+ function isRegistered(name) {
88
+ return behaviors.has(name);
89
+ }
90
+ function hasLoader(name) {
91
+ return loaders.has(name);
92
+ }
93
+ function getRegisteredBehaviors() {
94
+ return Array.from(behaviors.keys());
95
+ }
96
+ function getAvailableBehaviors() {
97
+ const names = /* @__PURE__ */ new Set([...behaviors.keys(), ...loaders.keys()]);
98
+ return Array.from(names);
99
+ }
100
+ function getBehaviorsByCategory(category) {
101
+ const result = [];
102
+ for (const [name, schema] of schemas) {
103
+ if (schema.category === category) {
104
+ result.push(name);
105
+ }
106
+ }
107
+ return result;
108
+ }
109
+ function getBehaviorsByTier(tier) {
110
+ const result = [];
111
+ for (const [name, schema] of schemas) {
112
+ if (schema.tier === tier) {
113
+ result.push(name);
114
+ }
115
+ }
116
+ return result;
117
+ }
118
+ function getAllSchemas() {
119
+ return Array.from(schemas.values());
120
+ }
121
+ function getAllSchemasRecord() {
122
+ const result = {};
123
+ for (const [name, schema] of schemas) {
124
+ result[name] = schema;
125
+ }
126
+ return result;
127
+ }
128
+ async function loadBehavior(name) {
129
+ const cached = behaviors.get(name);
130
+ if (cached) {
131
+ return cached;
132
+ }
133
+ const inFlight = loadingPromises.get(name);
134
+ if (inFlight) {
135
+ return inFlight;
136
+ }
137
+ const loader = loaders.get(name);
138
+ if (!loader) {
139
+ throw new Error(
140
+ `No loader registered for behavior '${name}'. Available loaders: ${Array.from(loaders.keys()).join(", ") || "none"}`
141
+ );
142
+ }
143
+ const promise = loader().then((mod) => {
144
+ const module2 = mod.default;
145
+ registerBehavior(name, module2);
146
+ loadingPromises.delete(name);
147
+ return module2;
148
+ });
149
+ loadingPromises.set(name, promise);
150
+ return promise;
151
+ }
152
+ async function preloadTier(tier) {
153
+ const names = getBehaviorsByTier(tier);
154
+ await Promise.all(
155
+ names.map(
156
+ (name) => loadBehavior(name).catch((err) => {
157
+ console.warn(`[behaviors] Failed to preload '${name}' (tier: ${tier}):`, err);
158
+ })
159
+ )
160
+ );
161
+ }
162
+ async function preloadCategory(category) {
163
+ const names = getBehaviorsByCategory(category);
164
+ await Promise.all(
165
+ names.map(
166
+ (name) => loadBehavior(name).catch((err) => {
167
+ console.warn(`[behaviors] Failed to preload '${name}' (category: ${category}):`, err);
168
+ })
169
+ )
170
+ );
171
+ }
172
+ async function loadAll() {
173
+ const names = getAvailableBehaviors();
174
+ await Promise.all(
175
+ names.map(
176
+ (name) => loadBehavior(name).catch((err) => {
177
+ console.warn(`[behaviors] Failed to load '${name}':`, err);
178
+ })
179
+ )
180
+ );
181
+ }
182
+ async function registerWithRuntime(name, hyperfixi) {
183
+ const module2 = await loadBehavior(name);
184
+ await module2.register(hyperfixi);
185
+ }
186
+ async function registerAllWithRuntime(hyperfixi) {
187
+ const registrations = Array.from(behaviors.values()).map((module2) => module2.register(hyperfixi));
188
+ await Promise.all(registrations);
189
+ }
190
+ // Annotate the CommonJS export names for ESM import in node:
191
+ 0 && (module.exports = {
192
+ getAllSchemas,
193
+ getAllSchemasRecord,
194
+ getAvailableBehaviors,
195
+ getBehavior,
196
+ getBehaviorsByCategory,
197
+ getBehaviorsByTier,
198
+ getRegisteredBehaviors,
199
+ getSchema,
200
+ hasLoader,
201
+ isRegistered,
202
+ loadAll,
203
+ loadBehavior,
204
+ preloadCategory,
205
+ preloadTier,
206
+ registerAllWithRuntime,
207
+ registerBehavior,
208
+ registerLoader,
209
+ registerSchema,
210
+ registerWithRuntime,
211
+ tryGetBehavior,
212
+ tryGetSchema
213
+ });
214
+ //# sourceMappingURL=registry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry.ts"],"sourcesContent":["/**\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"],"mappings":"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","names":["module"]}
@@ -0,0 +1,116 @@
1
+ import { B as BehaviorModule, a as BehaviorSchema, b as BehaviorCategory, c as BehaviorTier, L as LokaScriptInstance } from './types-CCc_2wAb.cjs';
2
+
3
+ /**
4
+ * Behavior Registry
5
+ *
6
+ * Central registration point for behaviors. Modeled on semantic/registry.ts.
7
+ * Supports lazy loading, category/tier queries, and tree-shaking.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // Register a behavior
12
+ * registerBehavior('Draggable', DraggableModule);
13
+ *
14
+ * // Query behaviors
15
+ * const uiBehaviors = getBehaviorsByCategory('ui');
16
+ * const coreBehaviors = getBehaviorsByTier('core');
17
+ *
18
+ * // Lazy load on demand
19
+ * const module = await loadBehavior('Resizable');
20
+ * ```
21
+ */
22
+
23
+ /**
24
+ * Register a behavior module.
25
+ */
26
+ declare function registerBehavior(name: string, module: BehaviorModule): void;
27
+ /**
28
+ * Register a behavior schema (without the module).
29
+ */
30
+ declare function registerSchema(schema: BehaviorSchema): void;
31
+ /**
32
+ * Register a lazy loader for a behavior.
33
+ * The loader should return a module with a default export.
34
+ */
35
+ declare function registerLoader(name: string, loader: () => Promise<{
36
+ default: BehaviorModule;
37
+ }>): void;
38
+ /**
39
+ * Get a behavior module by name.
40
+ * @throws Error if behavior is not registered
41
+ */
42
+ declare function getBehavior(name: string): BehaviorModule;
43
+ /**
44
+ * Try to get a behavior, returning undefined if not registered.
45
+ */
46
+ declare function tryGetBehavior(name: string): BehaviorModule | undefined;
47
+ /**
48
+ * Get a behavior schema by name.
49
+ * @throws Error if schema is not registered
50
+ */
51
+ declare function getSchema(name: string): BehaviorSchema;
52
+ /**
53
+ * Try to get a schema, returning undefined if not registered.
54
+ */
55
+ declare function tryGetSchema(name: string): BehaviorSchema | undefined;
56
+ /**
57
+ * Check if a behavior is registered.
58
+ */
59
+ declare function isRegistered(name: string): boolean;
60
+ /**
61
+ * Check if a loader is registered for a behavior.
62
+ */
63
+ declare function hasLoader(name: string): boolean;
64
+ /**
65
+ * Get all registered behavior names.
66
+ */
67
+ declare function getRegisteredBehaviors(): string[];
68
+ /**
69
+ * Get all behavior names that have loaders (including unloaded).
70
+ */
71
+ declare function getAvailableBehaviors(): string[];
72
+ /**
73
+ * Get behavior names by category.
74
+ */
75
+ declare function getBehaviorsByCategory(category: BehaviorCategory): string[];
76
+ /**
77
+ * Get behavior names by tier.
78
+ */
79
+ declare function getBehaviorsByTier(tier: BehaviorTier): string[];
80
+ /**
81
+ * Get all schemas.
82
+ */
83
+ declare function getAllSchemas(): BehaviorSchema[];
84
+ /**
85
+ * Get all schemas as a record.
86
+ */
87
+ declare function getAllSchemasRecord(): Record<string, BehaviorSchema>;
88
+ /**
89
+ * Load a behavior by name.
90
+ * If already loaded, returns the cached module.
91
+ * If a loader is registered, loads and caches the module.
92
+ */
93
+ declare function loadBehavior(name: string): Promise<BehaviorModule>;
94
+ /**
95
+ * Preload all behaviors in a tier.
96
+ */
97
+ declare function preloadTier(tier: BehaviorTier): Promise<void>;
98
+ /**
99
+ * Preload all behaviors in a category.
100
+ */
101
+ declare function preloadCategory(category: BehaviorCategory): Promise<void>;
102
+ /**
103
+ * Load and register all available behaviors.
104
+ */
105
+ declare function loadAll(): Promise<void>;
106
+ /**
107
+ * Register a behavior with HyperFixi runtime.
108
+ * Compiles and executes the behavior source.
109
+ */
110
+ declare function registerWithRuntime(name: string, hyperfixi?: LokaScriptInstance): Promise<void>;
111
+ /**
112
+ * Register all loaded behaviors with HyperFixi runtime.
113
+ */
114
+ declare function registerAllWithRuntime(hyperfixi?: LokaScriptInstance): Promise<void>;
115
+
116
+ export { getAllSchemas, getAllSchemasRecord, getAvailableBehaviors, getBehavior, getBehaviorsByCategory, getBehaviorsByTier, getRegisteredBehaviors, getSchema, hasLoader, isRegistered, loadAll, loadBehavior, preloadCategory, preloadTier, registerAllWithRuntime, registerBehavior, registerLoader, registerSchema, registerWithRuntime, tryGetBehavior, tryGetSchema };
@@ -0,0 +1,116 @@
1
+ import { B as BehaviorModule, a as BehaviorSchema, b as BehaviorCategory, c as BehaviorTier, L as LokaScriptInstance } from './types-CCc_2wAb.js';
2
+
3
+ /**
4
+ * Behavior Registry
5
+ *
6
+ * Central registration point for behaviors. Modeled on semantic/registry.ts.
7
+ * Supports lazy loading, category/tier queries, and tree-shaking.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // Register a behavior
12
+ * registerBehavior('Draggable', DraggableModule);
13
+ *
14
+ * // Query behaviors
15
+ * const uiBehaviors = getBehaviorsByCategory('ui');
16
+ * const coreBehaviors = getBehaviorsByTier('core');
17
+ *
18
+ * // Lazy load on demand
19
+ * const module = await loadBehavior('Resizable');
20
+ * ```
21
+ */
22
+
23
+ /**
24
+ * Register a behavior module.
25
+ */
26
+ declare function registerBehavior(name: string, module: BehaviorModule): void;
27
+ /**
28
+ * Register a behavior schema (without the module).
29
+ */
30
+ declare function registerSchema(schema: BehaviorSchema): void;
31
+ /**
32
+ * Register a lazy loader for a behavior.
33
+ * The loader should return a module with a default export.
34
+ */
35
+ declare function registerLoader(name: string, loader: () => Promise<{
36
+ default: BehaviorModule;
37
+ }>): void;
38
+ /**
39
+ * Get a behavior module by name.
40
+ * @throws Error if behavior is not registered
41
+ */
42
+ declare function getBehavior(name: string): BehaviorModule;
43
+ /**
44
+ * Try to get a behavior, returning undefined if not registered.
45
+ */
46
+ declare function tryGetBehavior(name: string): BehaviorModule | undefined;
47
+ /**
48
+ * Get a behavior schema by name.
49
+ * @throws Error if schema is not registered
50
+ */
51
+ declare function getSchema(name: string): BehaviorSchema;
52
+ /**
53
+ * Try to get a schema, returning undefined if not registered.
54
+ */
55
+ declare function tryGetSchema(name: string): BehaviorSchema | undefined;
56
+ /**
57
+ * Check if a behavior is registered.
58
+ */
59
+ declare function isRegistered(name: string): boolean;
60
+ /**
61
+ * Check if a loader is registered for a behavior.
62
+ */
63
+ declare function hasLoader(name: string): boolean;
64
+ /**
65
+ * Get all registered behavior names.
66
+ */
67
+ declare function getRegisteredBehaviors(): string[];
68
+ /**
69
+ * Get all behavior names that have loaders (including unloaded).
70
+ */
71
+ declare function getAvailableBehaviors(): string[];
72
+ /**
73
+ * Get behavior names by category.
74
+ */
75
+ declare function getBehaviorsByCategory(category: BehaviorCategory): string[];
76
+ /**
77
+ * Get behavior names by tier.
78
+ */
79
+ declare function getBehaviorsByTier(tier: BehaviorTier): string[];
80
+ /**
81
+ * Get all schemas.
82
+ */
83
+ declare function getAllSchemas(): BehaviorSchema[];
84
+ /**
85
+ * Get all schemas as a record.
86
+ */
87
+ declare function getAllSchemasRecord(): Record<string, BehaviorSchema>;
88
+ /**
89
+ * Load a behavior by name.
90
+ * If already loaded, returns the cached module.
91
+ * If a loader is registered, loads and caches the module.
92
+ */
93
+ declare function loadBehavior(name: string): Promise<BehaviorModule>;
94
+ /**
95
+ * Preload all behaviors in a tier.
96
+ */
97
+ declare function preloadTier(tier: BehaviorTier): Promise<void>;
98
+ /**
99
+ * Preload all behaviors in a category.
100
+ */
101
+ declare function preloadCategory(category: BehaviorCategory): Promise<void>;
102
+ /**
103
+ * Load and register all available behaviors.
104
+ */
105
+ declare function loadAll(): Promise<void>;
106
+ /**
107
+ * Register a behavior with HyperFixi runtime.
108
+ * Compiles and executes the behavior source.
109
+ */
110
+ declare function registerWithRuntime(name: string, hyperfixi?: LokaScriptInstance): Promise<void>;
111
+ /**
112
+ * Register all loaded behaviors with HyperFixi runtime.
113
+ */
114
+ declare function registerAllWithRuntime(hyperfixi?: LokaScriptInstance): Promise<void>;
115
+
116
+ export { getAllSchemas, getAllSchemasRecord, getAvailableBehaviors, getBehavior, getBehaviorsByCategory, getBehaviorsByTier, getRegisteredBehaviors, getSchema, hasLoader, isRegistered, loadAll, loadBehavior, preloadCategory, preloadTier, registerAllWithRuntime, registerBehavior, registerLoader, registerSchema, registerWithRuntime, tryGetBehavior, tryGetSchema };
@@ -0,0 +1,47 @@
1
+ import {
2
+ getAllSchemas,
3
+ getAllSchemasRecord,
4
+ getAvailableBehaviors,
5
+ getBehavior,
6
+ getBehaviorsByCategory,
7
+ getBehaviorsByTier,
8
+ getRegisteredBehaviors,
9
+ getSchema,
10
+ hasLoader,
11
+ isRegistered,
12
+ loadAll,
13
+ loadBehavior,
14
+ preloadCategory,
15
+ preloadTier,
16
+ registerAllWithRuntime,
17
+ registerBehavior,
18
+ registerLoader,
19
+ registerSchema,
20
+ registerWithRuntime,
21
+ tryGetBehavior,
22
+ tryGetSchema
23
+ } from "./chunk-3DVDS7CT.js";
24
+ export {
25
+ getAllSchemas,
26
+ getAllSchemasRecord,
27
+ getAvailableBehaviors,
28
+ getBehavior,
29
+ getBehaviorsByCategory,
30
+ getBehaviorsByTier,
31
+ getRegisteredBehaviors,
32
+ getSchema,
33
+ hasLoader,
34
+ isRegistered,
35
+ loadAll,
36
+ loadBehavior,
37
+ preloadCategory,
38
+ preloadTier,
39
+ registerAllWithRuntime,
40
+ registerBehavior,
41
+ registerLoader,
42
+ registerSchema,
43
+ registerWithRuntime,
44
+ tryGetBehavior,
45
+ tryGetSchema
46
+ };
47
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";var HyperFixiBehaviors=(()=>{var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var d=(o,e)=>{for(var r in e)a(o,r,{get:e[r],enumerable:!0})},f=(o,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of m(e))!l.call(o,i)&&i!==r&&a(o,i,{get:()=>e[i],enumerable:!(n=s(e,i))||n.enumerable});return o};var p=o=>f(a({},"__esModule",{value:!0}),o);var b={};d(b,{default:()=>g,registerRemovable:()=>c,removableMetadata:()=>v,removableSource:()=>u});var t={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:`
2
+ behavior Removable(triggerEl, confirm, effect)
3
+ init
4
+ if triggerEl is undefined
5
+ set triggerEl to me
6
+ end
7
+ end
8
+ on click from triggerEl
9
+ if confirm
10
+ if not window.confirm("Are you sure?")
11
+ halt
12
+ end
13
+ end
14
+ trigger removable:before
15
+ if effect is "fade"
16
+ transition opacity to 0 over 300ms
17
+ end
18
+ trigger removable:removed
19
+ remove me
20
+ end
21
+ end
22
+ `.trim()};var u=t.source,v=t;async function c(o){let e=o||(typeof window<"u"?window.lokascript:null);if(!e)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let r=e.compileSync(t.source,{traditional:!0});if(!r.ok)throw new Error(`Failed to compile Removable behavior: ${JSON.stringify(r.errors)}`);let n=e.createContext?e.createContext():{locals:new Map,globals:new Map};await e.execute(r.ast,n)}typeof window<"u"&&window.lokascript&&c().catch(console.error);var g={source:t.source,metadata:t,register:c};return p(b);})();
23
+ //# sourceMappingURL=removable.browser.global.js.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":"scAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,sBAAAC,EAAA,sBAAAC,EAAA,oBAAAC,ICYO,IAAMC,EAAkC,CAC7C,KAAM,YACN,SAAU,OACV,KAAM,SACN,QAAS,QACT,YAAa,oCACb,WAAY,CACV,CACE,KAAM,YACN,KAAM,WACN,SAAU,GACV,QAAS,KACT,YAAa,sDACf,EACA,CACE,KAAM,UACN,KAAM,UACN,SAAU,GACV,QAAS,GACT,YAAa,yCACf,EACA,CACE,KAAM,SACN,KAAM,SACN,SAAU,GACV,QAAS,OACT,KAAM,CAAC,OAAQ,MAAM,EACrB,YAAa,qCACf,CACF,EACA,OAAQ,CACN,CAAE,KAAM,mBAAoB,YAAa,mCAAoC,EAC7E,CAAE,KAAM,oBAAqB,YAAa,qBAAsB,CAClE,EACA,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBR,KAAK,CACP,EDlDO,IAAMC,EAAkBC,EAAgB,OAClCC,EAAoBD,EAKjC,eAAsBE,EAAkBC,EAA+C,CACrF,IAAMC,EACJD,IACC,OAAO,OAAW,IAAe,OAAuC,WAAa,MAExF,GAAI,CAACC,EACH,MAAM,IAAI,MACR,yFACF,EAGF,IAAMC,EAASD,EAAG,YAAYJ,EAAgB,OAAQ,CAAE,YAAa,EAAK,CAAC,EAE3E,GAAI,CAACK,EAAO,GACV,MAAM,IAAI,MAAM,yCAAyC,KAAK,UAAUA,EAAO,MAAM,CAAC,EAAE,EAG1F,IAAMC,EAAMF,EAAG,cAAgBA,EAAG,cAAc,EAAI,CAAE,OAAQ,IAAI,IAAO,QAAS,IAAI,GAAM,EAC5F,MAAMA,EAAG,QAAQC,EAAO,IAAKC,CAAG,CAClC,CAGI,OAAO,OAAW,KAAgB,OAAuC,YAC3EJ,EAAkB,EAAE,MAAM,QAAQ,KAAK,EAGzC,IAAOK,EAAQ,CACb,OAAQP,EAAgB,OACxB,SAAUA,EACV,SAAUE,CACZ","names":["removable_exports","__export","removable_default","registerRemovable","removableMetadata","removableSource","removableSchema","removableSource","removableSchema","removableMetadata","registerRemovable","hyperfixi","hf","result","ctx","removable_default"]}
@@ -0,0 +1,35 @@
1
+ "use strict";var HyperFixiBehaviors=(()=>{var a=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var i in e)a(t,i,{get:e[i],enumerable:!0})},c=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of h(e))!m.call(t,r)&&r!==i&&a(t,r,{get:()=>e[r],enumerable:!(o=d(e,r))||o.enumerable});return t};var p=t=>c(a({},"__esModule",{value:!0}),t);var f={};l(f,{default:()=>w,registerResizable:()=>s,resizableMetadata:()=>g,resizableSource:()=>u});var n={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:`
2
+ behavior Resizable(handle, minWidth, minHeight, maxWidth, maxHeight)
3
+ init
4
+ if no handle set handle to me
5
+ if no minWidth set minWidth to 50
6
+ if no minHeight set minHeight to 50
7
+ if no maxWidth set maxWidth to 9999
8
+ if no maxHeight set maxHeight to 9999
9
+ end
10
+ on pointerdown(clientX, clientY) from handle
11
+ halt the event
12
+ trigger resizable:start
13
+ measure width
14
+ set startWidth to it
15
+ measure height
16
+ set startHeight to it
17
+ set startX to clientX
18
+ set startY to clientY
19
+ repeat until event pointerup from document
20
+ wait for pointermove(clientX, clientY) or
21
+ pointerup from document
22
+ set newWidth to startWidth + (clientX - startX)
23
+ set newHeight to startHeight + (clientY - startY)
24
+ if newWidth < minWidth set newWidth to minWidth
25
+ if newWidth > maxWidth set newWidth to maxWidth
26
+ if newHeight < minHeight set newHeight to minHeight
27
+ if newHeight > maxHeight set newHeight to maxHeight
28
+ add { width: \${newWidth}px; height: \${newHeight}px; }
29
+ trigger resizable:resize
30
+ end
31
+ trigger resizable:end
32
+ end
33
+ end
34
+ `.trim()};var u=n.source,g=n;async function s(t){let e=t||(typeof window<"u"?window.lokascript:null);if(!e)throw new Error("LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors.");let i=e.compileSync(n.source,{traditional:!0});if(!i.ok)throw new Error(`Failed to compile Resizable behavior: ${JSON.stringify(i.errors)}`);let o=e.createContext?e.createContext():{locals:new Map,globals:new Map};await e.execute(i.ast,o)}typeof window<"u"&&window.lokascript&&s().catch(console.error);var w={source:n.source,metadata:n,register:s};return p(f);})();
35
+ //# sourceMappingURL=resizable.browser.global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/behaviors/resizable.ts","../src/schemas/resizable.schema.ts"],"sourcesContent":["/**\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","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"],"mappings":"scAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,sBAAAC,EAAA,sBAAAC,EAAA,oBAAAC,ICQO,IAAMC,EAAkC,CAC7C,KAAM,YACN,SAAU,KACV,KAAM,WACN,QAAS,QACT,YAAa,uCACb,WAAY,CACV,CACE,KAAM,SACN,KAAM,WACN,SAAU,GACV,QAAS,KACT,YAAa,qEACf,EACA,CACE,KAAM,WACN,KAAM,SACN,SAAU,GACV,QAAS,GACT,YAAa,yBACf,EACA,CACE,KAAM,YACN,KAAM,SACN,SAAU,GACV,QAAS,GACT,YAAa,0BACf,EACA,CACE,KAAM,WACN,KAAM,SACN,SAAU,GACV,QAAS,KACT,YAAa,yBACf,EACA,CACE,KAAM,YACN,KAAM,SACN,SAAU,GACV,QAAS,KACT,YAAa,0BACf,CACF,EACA,OAAQ,CACN,CAAE,KAAM,kBAAmB,YAAa,0BAA2B,EACnE,CAAE,KAAM,mBAAoB,YAAa,qBAAsB,EAC/D,CAAE,KAAM,gBAAiB,YAAa,6BAA8B,CACtE,EACA,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCR,KAAK,CACP,EDxEO,IAAMC,EAAkBC,EAAgB,OAClCC,EAAoBD,EAKjC,eAAsBE,EAAkBC,EAA+C,CACrF,IAAMC,EACJD,IACC,OAAO,OAAW,IAAe,OAAuC,WAAa,MAExF,GAAI,CAACC,EACH,MAAM,IAAI,MACR,yFACF,EAGF,IAAMC,EAASD,EAAG,YAAYJ,EAAgB,OAAQ,CAAE,YAAa,EAAK,CAAC,EAE3E,GAAI,CAACK,EAAO,GACV,MAAM,IAAI,MAAM,yCAAyC,KAAK,UAAUA,EAAO,MAAM,CAAC,EAAE,EAG1F,IAAMC,EAAMF,EAAG,cAAgBA,EAAG,cAAc,EAAI,CAAE,OAAQ,IAAI,IAAO,QAAS,IAAI,GAAM,EAC5F,MAAMA,EAAG,QAAQC,EAAO,IAAKC,CAAG,CAClC,CAGI,OAAO,OAAW,KAAgB,OAAuC,YAC3EJ,EAAkB,EAAE,MAAM,QAAQ,KAAK,EAGzC,IAAOK,EAAQ,CACb,OAAQP,EAAgB,OACxB,SAAUA,EACV,SAAUE,CACZ","names":["resizable_exports","__export","resizable_default","registerResizable","resizableMetadata","resizableSource","resizableSchema","resizableSource","resizableSchema","resizableMetadata","registerResizable","hyperfixi","hf","result","ctx","resizable_default"]}