@hyperfixi/behaviors 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/all.browser.global.js +35 -6
  2. package/dist/all.browser.global.js.map +1 -1
  3. package/dist/autodismiss.browser.global.js +3 -0
  4. package/dist/autodismiss.browser.global.js.map +1 -0
  5. package/dist/behaviors/autodismiss.cjs +177 -0
  6. package/dist/behaviors/autodismiss.cjs.map +1 -0
  7. package/dist/behaviors/autodismiss.d.cts +15 -0
  8. package/dist/behaviors/autodismiss.d.ts +15 -0
  9. package/dist/behaviors/autodismiss.js +15 -0
  10. package/dist/behaviors/autodismiss.js.map +1 -0
  11. package/dist/behaviors/clickoutside.cjs +123 -0
  12. package/dist/behaviors/clickoutside.cjs.map +1 -0
  13. package/dist/behaviors/clickoutside.d.cts +15 -0
  14. package/dist/behaviors/clickoutside.d.ts +15 -0
  15. package/dist/behaviors/clickoutside.js +15 -0
  16. package/dist/behaviors/clickoutside.js.map +1 -0
  17. package/dist/behaviors/clipboard.cjs +193 -0
  18. package/dist/behaviors/clipboard.cjs.map +1 -0
  19. package/dist/behaviors/clipboard.d.cts +15 -0
  20. package/dist/behaviors/clipboard.d.ts +15 -0
  21. package/dist/behaviors/clipboard.js +15 -0
  22. package/dist/behaviors/clipboard.js.map +1 -0
  23. package/dist/behaviors/draggable.cjs +49 -7
  24. package/dist/behaviors/draggable.cjs.map +1 -1
  25. package/dist/behaviors/draggable.d.cts +2 -1
  26. package/dist/behaviors/draggable.d.ts +2 -1
  27. package/dist/behaviors/draggable.js +2 -1
  28. package/dist/behaviors/focustrap.cjs +191 -0
  29. package/dist/behaviors/focustrap.cjs.map +1 -0
  30. package/dist/behaviors/focustrap.d.cts +15 -0
  31. package/dist/behaviors/focustrap.d.ts +15 -0
  32. package/dist/behaviors/focustrap.js +15 -0
  33. package/dist/behaviors/focustrap.js.map +1 -0
  34. package/dist/behaviors/removable.cjs +9 -2
  35. package/dist/behaviors/removable.cjs.map +1 -1
  36. package/dist/behaviors/removable.d.cts +1 -1
  37. package/dist/behaviors/removable.d.ts +1 -1
  38. package/dist/behaviors/removable.js +2 -1
  39. package/dist/behaviors/resizable.cjs +54 -7
  40. package/dist/behaviors/resizable.cjs.map +1 -1
  41. package/dist/behaviors/resizable.d.cts +1 -1
  42. package/dist/behaviors/resizable.d.ts +1 -1
  43. package/dist/behaviors/resizable.js +2 -1
  44. package/dist/behaviors/scrollreveal.cjs +149 -0
  45. package/dist/behaviors/scrollreveal.cjs.map +1 -0
  46. package/dist/behaviors/scrollreveal.d.cts +15 -0
  47. package/dist/behaviors/scrollreveal.d.ts +15 -0
  48. package/dist/behaviors/scrollreveal.js +15 -0
  49. package/dist/behaviors/scrollreveal.js.map +1 -0
  50. package/dist/behaviors/sortable.cjs +49 -7
  51. package/dist/behaviors/sortable.cjs.map +1 -1
  52. package/dist/behaviors/sortable.d.cts +1 -1
  53. package/dist/behaviors/sortable.d.ts +1 -1
  54. package/dist/behaviors/sortable.js +2 -1
  55. package/dist/behaviors/tabs.cjs +247 -0
  56. package/dist/behaviors/tabs.cjs.map +1 -0
  57. package/dist/behaviors/tabs.d.cts +15 -0
  58. package/dist/behaviors/tabs.d.ts +15 -0
  59. package/dist/behaviors/tabs.js +15 -0
  60. package/dist/behaviors/tabs.js.map +1 -0
  61. package/dist/behaviors/toggleable.cjs +36 -7
  62. package/dist/behaviors/toggleable.cjs.map +1 -1
  63. package/dist/behaviors/toggleable.d.cts +2 -1
  64. package/dist/behaviors/toggleable.d.ts +2 -1
  65. package/dist/behaviors/toggleable.js +2 -1
  66. package/dist/chunk-244WSZOL.js +67 -0
  67. package/dist/chunk-244WSZOL.js.map +1 -0
  68. package/dist/chunk-2NSKQMNM.js +99 -0
  69. package/dist/chunk-2NSKQMNM.js.map +1 -0
  70. package/dist/chunk-64DIQGQI.js +37 -0
  71. package/dist/chunk-64DIQGQI.js.map +1 -0
  72. package/dist/chunk-6TJXDCAQ.js +11 -0
  73. package/dist/chunk-6TJXDCAQ.js.map +1 -0
  74. package/dist/chunk-7JDV2THA.js +62 -0
  75. package/dist/chunk-7JDV2THA.js.map +1 -0
  76. package/dist/chunk-AFGA54SA.js +116 -0
  77. package/dist/chunk-AFGA54SA.js.map +1 -0
  78. package/dist/chunk-DYHBKDKB.js +62 -0
  79. package/dist/chunk-DYHBKDKB.js.map +1 -0
  80. package/dist/chunk-GPTHAUWN.js +58 -0
  81. package/dist/chunk-GPTHAUWN.js.map +1 -0
  82. package/dist/chunk-GVJPA2EK.js +68 -0
  83. package/dist/chunk-GVJPA2EK.js.map +1 -0
  84. package/dist/chunk-H2MCHR5A.js +89 -0
  85. package/dist/chunk-H2MCHR5A.js.map +1 -0
  86. package/dist/{chunk-2NQHIHD5.js → chunk-H5Y5ARYG.js} +6 -3
  87. package/dist/chunk-H5Y5ARYG.js.map +1 -0
  88. package/dist/chunk-JKBWIJFI.js +155 -0
  89. package/dist/chunk-JKBWIJFI.js.map +1 -0
  90. package/dist/chunk-QKDYW4VM.js +70 -0
  91. package/dist/chunk-QKDYW4VM.js.map +1 -0
  92. package/dist/chunk-RB7OB6OD.js +51 -0
  93. package/dist/chunk-RB7OB6OD.js.map +1 -0
  94. package/dist/chunk-RPERQTFU.js +75 -0
  95. package/dist/chunk-RPERQTFU.js.map +1 -0
  96. package/dist/chunk-S4QDV2MH.js +75 -0
  97. package/dist/chunk-S4QDV2MH.js.map +1 -0
  98. package/dist/chunk-WTUVPVSD.js +80 -0
  99. package/dist/chunk-WTUVPVSD.js.map +1 -0
  100. package/dist/chunk-YHQRFUWV.js +62 -0
  101. package/dist/chunk-YHQRFUWV.js.map +1 -0
  102. package/dist/chunk-ZQQZTMCJ.js +64 -0
  103. package/dist/chunk-ZQQZTMCJ.js.map +1 -0
  104. package/dist/clickoutside.browser.global.js +12 -0
  105. package/dist/clickoutside.browser.global.js.map +1 -0
  106. package/dist/clipboard.browser.global.js +3 -0
  107. package/dist/clipboard.browser.global.js.map +1 -0
  108. package/dist/core.browser.global.js +3 -3
  109. package/dist/core.browser.global.js.map +1 -1
  110. package/dist/draggable.browser.global.js +2 -2
  111. package/dist/draggable.browser.global.js.map +1 -1
  112. package/dist/focustrap.browser.global.js +9 -0
  113. package/dist/focustrap.browser.global.js.map +1 -0
  114. package/dist/index.cjs +1270 -50
  115. package/dist/index.cjs.map +1 -1
  116. package/dist/index.d.cts +13 -7
  117. package/dist/index.d.ts +13 -7
  118. package/dist/index.js +155 -48
  119. package/dist/index.js.map +1 -1
  120. package/dist/loaders.cjs +1151 -30
  121. package/dist/loaders.cjs.map +1 -1
  122. package/dist/loaders.js +9 -3
  123. package/dist/registry.d.cts +1 -1
  124. package/dist/registry.d.ts +1 -1
  125. package/dist/removable.browser.global.js +2 -2
  126. package/dist/removable.browser.global.js.map +1 -1
  127. package/dist/resizable.browser.global.js +2 -2
  128. package/dist/resizable.browser.global.js.map +1 -1
  129. package/dist/schemas/index.cjs +343 -1
  130. package/dist/schemas/index.cjs.map +1 -1
  131. package/dist/schemas/index.d.cts +45 -3
  132. package/dist/schemas/index.d.ts +45 -3
  133. package/dist/schemas/index.js +34 -4
  134. package/dist/schemas/index.js.map +1 -1
  135. package/dist/scrollreveal.browser.global.js +11 -0
  136. package/dist/scrollreveal.browser.global.js.map +1 -0
  137. package/dist/sortable.browser.global.js +2 -2
  138. package/dist/sortable.browser.global.js.map +1 -1
  139. package/dist/tabs.browser.global.js +3 -0
  140. package/dist/tabs.browser.global.js.map +1 -0
  141. package/dist/toggleable.browser.global.js +2 -2
  142. package/dist/toggleable.browser.global.js.map +1 -1
  143. package/dist/{types-CCc_2wAb.d.cts → types-DCCtVQS5.d.cts} +1 -1
  144. package/dist/{types-CCc_2wAb.d.ts → types-DCCtVQS5.d.ts} +1 -1
  145. package/package.json +45 -2
  146. package/src/behaviors/autodismiss.test.ts +61 -0
  147. package/src/behaviors/autodismiss.ts +107 -0
  148. package/src/behaviors/clickoutside.test.ts +52 -0
  149. package/src/behaviors/clickoutside.ts +77 -0
  150. package/src/behaviors/clipboard.test.ts +67 -0
  151. package/src/behaviors/clipboard.ts +130 -0
  152. package/src/behaviors/draggable.ts +62 -15
  153. package/src/behaviors/focustrap.test.ts +59 -0
  154. package/src/behaviors/focustrap.ts +158 -0
  155. package/src/behaviors/index.ts +37 -0
  156. package/src/behaviors/integration.test.ts +120 -45
  157. package/src/behaviors/removable.ts +4 -5
  158. package/src/behaviors/resizable.ts +63 -14
  159. package/src/behaviors/scrollreveal.test.ts +59 -0
  160. package/src/behaviors/scrollreveal.ts +78 -0
  161. package/src/behaviors/sortable.ts +61 -14
  162. package/src/behaviors/tabs.test.ts +81 -0
  163. package/src/behaviors/tabs.ts +196 -0
  164. package/src/behaviors/toggleable.ts +45 -13
  165. package/src/generated/metadata.ts +38 -7
  166. package/src/generated/types.ts +5 -5
  167. package/src/index.test.ts +143 -5
  168. package/src/index.ts +65 -13
  169. package/src/loaders.ts +18 -0
  170. package/src/registry.test.ts +26 -5
  171. package/src/schemas/autodismiss.schema.ts +66 -0
  172. package/src/schemas/clickoutside.schema.ts +39 -0
  173. package/src/schemas/clipboard.schema.ts +72 -0
  174. package/src/schemas/focustrap.schema.ts +53 -0
  175. package/src/schemas/index.ts +18 -0
  176. package/src/schemas/scrollreveal.schema.ts +60 -0
  177. package/src/schemas/tabs.schema.ts +66 -0
  178. package/src/schemas/types.ts +13 -1
  179. package/dist/chunk-2NQHIHD5.js.map +0 -1
  180. package/dist/chunk-3Q652JQB.js +0 -37
  181. package/dist/chunk-3Q652JQB.js.map +0 -1
  182. package/dist/chunk-HMRPQWQU.js +0 -37
  183. package/dist/chunk-HMRPQWQU.js.map +0 -1
  184. package/dist/chunk-MEP6B7XW.js +0 -37
  185. package/dist/chunk-MEP6B7XW.js.map +0 -1
  186. package/dist/chunk-URBOGGW6.js +0 -32
  187. package/dist/chunk-URBOGGW6.js.map +0 -1
  188. package/dist/chunk-WU37DFAL.js +0 -37
  189. package/dist/chunk-WU37DFAL.js.map +0 -1
@@ -0,0 +1,177 @@
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/autodismiss.ts
21
+ var autodismiss_exports = {};
22
+ __export(autodismiss_exports, {
23
+ autoDismissMetadata: () => autoDismissMetadata,
24
+ autoDismissSource: () => autoDismissSource,
25
+ default: () => autodismiss_default,
26
+ registerAutoDismiss: () => registerAutoDismiss
27
+ });
28
+ module.exports = __toCommonJS(autodismiss_exports);
29
+
30
+ // src/schemas/autodismiss.schema.ts
31
+ var autoDismissSchema = {
32
+ name: "AutoDismiss",
33
+ category: "ui",
34
+ tier: "core",
35
+ version: "1.0.0",
36
+ description: "Auto-removes elements after a delay with optional pause-on-hover",
37
+ parameters: [
38
+ {
39
+ name: "delay",
40
+ type: "number",
41
+ optional: true,
42
+ default: 5e3,
43
+ description: "Time in ms before the element is removed"
44
+ },
45
+ {
46
+ name: "pauseOnHover",
47
+ type: "boolean",
48
+ optional: true,
49
+ default: true,
50
+ description: "Pause the countdown when the mouse hovers over the element"
51
+ },
52
+ {
53
+ name: "effect",
54
+ type: "string",
55
+ optional: true,
56
+ default: "none",
57
+ enum: ["fade", "none"],
58
+ description: 'Transition effect before removal: "fade" or "none"'
59
+ }
60
+ ],
61
+ events: [
62
+ { name: "autodismiss:start", description: "Fired when the countdown timer starts" },
63
+ {
64
+ name: "autodismiss:dismissed",
65
+ description: "Fired before removal (cancelable via preventDefault)"
66
+ },
67
+ { name: "autodismiss:paused", description: "Fired when the timer is paused on hover" },
68
+ { name: "autodismiss:resumed", description: "Fired when the timer resumes on mouseleave" }
69
+ ],
70
+ source: [
71
+ "behavior AutoDismiss(delay, pauseOnHover, effect)",
72
+ " init",
73
+ " if delay is undefined set delay to 5000",
74
+ " if pauseOnHover is undefined set pauseOnHover to true",
75
+ ' if effect is undefined set effect to "none"',
76
+ " end",
77
+ " on load",
78
+ " trigger autodismiss:start",
79
+ " wait delay ms",
80
+ " trigger autodismiss:dismissed",
81
+ ' if effect is "fade"',
82
+ " transition opacity to 0 over 300ms",
83
+ " end",
84
+ " remove me",
85
+ " end",
86
+ "end"
87
+ ].join("\n")
88
+ };
89
+
90
+ // src/schemas/types.ts
91
+ function resolveRuntime() {
92
+ if (typeof window === "undefined") return null;
93
+ const win = window;
94
+ return win.lokascript || win.hyperfixi || null;
95
+ }
96
+
97
+ // src/behaviors/autodismiss.ts
98
+ var autoDismissSource = autoDismissSchema.source;
99
+ var autoDismissMetadata = autoDismissSchema;
100
+ function installAutoDismiss(element, params) {
101
+ const delay = typeof params.delay === "number" ? params.delay : 5e3;
102
+ const pauseOnHover = params.pauseOnHover !== false;
103
+ const effect = params.effect === "fade" ? "fade" : "none";
104
+ let timerId = null;
105
+ let remaining = delay;
106
+ let startedAt = Date.now();
107
+ function dismiss() {
108
+ const event = new CustomEvent("autodismiss:dismissed", {
109
+ bubbles: true,
110
+ cancelable: true
111
+ });
112
+ element.dispatchEvent(event);
113
+ if (event.defaultPrevented) return;
114
+ if (effect === "fade") {
115
+ element.style.transition = "opacity 300ms";
116
+ element.style.opacity = "0";
117
+ setTimeout(() => element.remove(), 300);
118
+ } else {
119
+ element.remove();
120
+ }
121
+ }
122
+ function start() {
123
+ startedAt = Date.now();
124
+ timerId = setTimeout(dismiss, remaining);
125
+ }
126
+ element.dispatchEvent(new CustomEvent("autodismiss:start", { bubbles: true }));
127
+ start();
128
+ if (pauseOnHover) {
129
+ element.addEventListener("mouseenter", () => {
130
+ if (timerId != null) {
131
+ clearTimeout(timerId);
132
+ timerId = null;
133
+ remaining -= Date.now() - startedAt;
134
+ if (remaining < 0) remaining = 0;
135
+ element.dispatchEvent(new CustomEvent("autodismiss:paused", { bubbles: true }));
136
+ }
137
+ });
138
+ element.addEventListener("mouseleave", () => {
139
+ if (timerId == null && element.isConnected) {
140
+ element.dispatchEvent(new CustomEvent("autodismiss:resumed", { bubbles: true }));
141
+ start();
142
+ }
143
+ });
144
+ }
145
+ }
146
+ async function registerAutoDismiss(hyperfixi) {
147
+ const hf = hyperfixi || resolveRuntime();
148
+ if (!hf) {
149
+ throw new Error(
150
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
151
+ );
152
+ }
153
+ const syntheticNode = {
154
+ type: "behavior",
155
+ name: "AutoDismiss",
156
+ parameters: ["delay", "pauseOnHover", "effect"],
157
+ eventHandlers: [],
158
+ imperativeInstaller: installAutoDismiss
159
+ };
160
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
161
+ await hf.execute(syntheticNode, ctx);
162
+ }
163
+ if (resolveRuntime()) {
164
+ registerAutoDismiss().catch(console.error);
165
+ }
166
+ var autodismiss_default = {
167
+ source: autoDismissSchema.source,
168
+ metadata: autoDismissSchema,
169
+ register: registerAutoDismiss
170
+ };
171
+ // Annotate the CommonJS export names for ESM import in node:
172
+ 0 && (module.exports = {
173
+ autoDismissMetadata,
174
+ autoDismissSource,
175
+ registerAutoDismiss
176
+ });
177
+ //# sourceMappingURL=autodismiss.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/behaviors/autodismiss.ts","../../src/schemas/autodismiss.schema.ts","../../src/schemas/types.ts"],"sourcesContent":["/**\n * AutoDismiss Behavior — Imperative Implementation\n *\n * Auto-removes elements after a configurable delay.\n * Supports pause-on-hover and fade effect using standard setTimeout/clearTimeout.\n */\n\nimport { autoDismissSchema } from '../schemas/autodismiss.schema';\nimport type { LokaScriptInstance } from '../schemas/types';\nimport { resolveRuntime } from '../schemas/types';\n\n// Re-export schema-derived values\nexport const autoDismissSource = autoDismissSchema.source;\nexport const autoDismissMetadata = autoDismissSchema;\n\n/**\n * Imperative installer for AutoDismiss behavior.\n */\nfunction installAutoDismiss(element: HTMLElement, params: Record<string, any>): void {\n const delay = typeof params.delay === 'number' ? params.delay : 5000;\n const pauseOnHover = params.pauseOnHover !== false;\n const effect = params.effect === 'fade' ? 'fade' : 'none';\n\n let timerId: ReturnType<typeof setTimeout> | null = null;\n let remaining = delay;\n let startedAt = Date.now();\n\n function dismiss() {\n const event = new CustomEvent('autodismiss:dismissed', {\n bubbles: true,\n cancelable: true,\n });\n element.dispatchEvent(event);\n\n if (event.defaultPrevented) return;\n\n if (effect === 'fade') {\n element.style.transition = 'opacity 300ms';\n element.style.opacity = '0';\n setTimeout(() => element.remove(), 300);\n } else {\n element.remove();\n }\n }\n\n function start() {\n startedAt = Date.now();\n timerId = setTimeout(dismiss, remaining);\n }\n\n // Start the countdown\n element.dispatchEvent(new CustomEvent('autodismiss:start', { bubbles: true }));\n start();\n\n if (pauseOnHover) {\n element.addEventListener('mouseenter', () => {\n if (timerId != null) {\n clearTimeout(timerId);\n timerId = null;\n remaining -= Date.now() - startedAt;\n if (remaining < 0) remaining = 0;\n element.dispatchEvent(new CustomEvent('autodismiss:paused', { bubbles: true }));\n }\n });\n\n element.addEventListener('mouseleave', () => {\n if (timerId == null && element.isConnected) {\n element.dispatchEvent(new CustomEvent('autodismiss:resumed', { bubbles: true }));\n start();\n }\n });\n }\n}\n\n/**\n * Register the AutoDismiss behavior with LokaScript.\n */\nexport async function registerAutoDismiss(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf = hyperfixi || resolveRuntime();\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 syntheticNode = {\n type: 'behavior',\n name: 'AutoDismiss',\n parameters: ['delay', 'pauseOnHover', 'effect'],\n eventHandlers: [],\n imperativeInstaller: installAutoDismiss,\n };\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(syntheticNode, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (resolveRuntime()) {\n registerAutoDismiss().catch(console.error);\n}\n\nexport default {\n source: autoDismissSchema.source,\n metadata: autoDismissSchema,\n register: registerAutoDismiss,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * AutoDismiss Behavior Schema\n *\n * Auto-removes flash messages and toasts after a configurable delay.\n * Supports pause-on-hover and fade effect.\n */\nexport const autoDismissSchema: BehaviorSchema = {\n name: 'AutoDismiss',\n category: 'ui',\n tier: 'core',\n version: '1.0.0',\n description: 'Auto-removes elements after a delay with optional pause-on-hover',\n parameters: [\n {\n name: 'delay',\n type: 'number',\n optional: true,\n default: 5000,\n description: 'Time in ms before the element is removed',\n },\n {\n name: 'pauseOnHover',\n type: 'boolean',\n optional: true,\n default: true,\n description: 'Pause the countdown when the mouse hovers over the element',\n },\n {\n name: 'effect',\n type: 'string',\n optional: true,\n default: 'none',\n enum: ['fade', 'none'],\n description: 'Transition effect before removal: \"fade\" or \"none\"',\n },\n ],\n events: [\n { name: 'autodismiss:start', description: 'Fired when the countdown timer starts' },\n {\n name: 'autodismiss:dismissed',\n description: 'Fired before removal (cancelable via preventDefault)',\n },\n { name: 'autodismiss:paused', description: 'Fired when the timer is paused on hover' },\n { name: 'autodismiss:resumed', description: 'Fired when the timer resumes on mouseleave' },\n ],\n source: [\n 'behavior AutoDismiss(delay, pauseOnHover, effect)',\n ' init',\n ' if delay is undefined set delay to 5000',\n ' if pauseOnHover is undefined set pauseOnHover to true',\n ' if effect is undefined set effect to \"none\"',\n ' end',\n ' on load',\n ' trigger autodismiss:start',\n ' wait delay ms',\n ' trigger autodismiss:dismissed',\n ' if effect is \"fade\"',\n ' transition opacity to 0 over 300ms',\n ' end',\n ' remove me',\n ' end',\n 'end',\n ].join('\\n'),\n};\n","/**\n * Behavior Schema Types\n *\n * Defines the structure for behavior metadata used for:\n * - Code generation (TypeScript types, documentation)\n * - Runtime categorization and lazy loading\n * - Tooling and IDE integration\n */\n\n/**\n * Behavior categories for organization.\n * - ui: Visual interaction behaviors (drag, resize, sort)\n * - data: Data manipulation behaviors (remove, transform)\n * - animation: Animation and transition behaviors\n * - form: Form-related behaviors (validation, toggle states)\n * - layout: Layout behaviors (sticky, scrollspy)\n */\nexport type BehaviorCategory = 'ui' | 'data' | 'animation' | 'form' | 'layout';\n\n/**\n * Loading tiers for lazy loading optimization.\n * - core: Always loaded (essential behaviors)\n * - common: High usage (loaded for typical apps)\n * - optional: Low usage (loaded on demand)\n */\nexport type BehaviorTier = 'core' | 'common' | 'optional';\n\n/**\n * Schema for a behavior parameter.\n */\nexport interface ParameterSchema {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'selector' | 'element';\n optional?: boolean;\n default?: string | number | boolean;\n /** Allowed values for constrained parameters */\n enum?: string[];\n description: string;\n}\n\n/**\n * Schema for a behavior event.\n */\nexport interface EventSchema {\n name: string;\n description: string;\n}\n\n/**\n * Complete schema for a behavior.\n * This is the source of truth for all behavior metadata.\n */\nexport interface BehaviorSchema {\n /** Behavior name (PascalCase) */\n name: string;\n /** Category for organization */\n category: BehaviorCategory;\n /** Loading tier for lazy loading */\n tier: BehaviorTier;\n /** Semantic version */\n version: string;\n /** Human-readable description */\n description: string;\n /** Parameter definitions */\n parameters: ParameterSchema[];\n /** Event definitions */\n events: EventSchema[];\n /** The hyperscript behavior source code */\n source: string;\n /** Optional requirements or notes */\n requirements?: string[];\n}\n\n/**\n * Runtime behavior module interface.\n * This is what gets registered with the hyperfixi runtime.\n */\nexport interface BehaviorModule {\n source: string;\n metadata: BehaviorSchema;\n register: (hyperfixi?: LokaScriptInstance) => Promise<void>;\n}\n\n/**\n * Minimal LokaScript instance interface for behavior registration.\n */\nexport interface LokaScriptInstance {\n compileSync: (\n code: string,\n options?: { traditional?: boolean; language?: string }\n ) => {\n ok: boolean;\n ast?: unknown;\n errors?: Array<{ message: string; line?: number; column?: number }>;\n };\n execute: (ast: unknown, ctx: unknown) => Promise<unknown>;\n createContext?: () => { locals: Map<string, unknown>; globals: Map<string, unknown> };\n}\n\n/**\n * Typed window interface for behavior auto-registration.\n * Avoids `(window as any)` casts throughout the codebase.\n * Checks both `window.lokascript` and `window.hyperfixi` for the runtime instance.\n */\nexport interface LokaScriptWindow {\n lokascript?: LokaScriptInstance;\n hyperfixi?: LokaScriptInstance;\n __hyperfixi_behaviors_ready?: Promise<void> | undefined;\n}\n\n/**\n * Resolve the LokaScript runtime from window globals.\n * Checks both `window.lokascript` and `window.hyperfixi`.\n */\nexport function resolveRuntime(): LokaScriptInstance | null {\n if (typeof window === 'undefined') return null;\n const win = window as unknown as LokaScriptWindow;\n return win.lokascript || win.hyperfixi || null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,IAAM,oBAAoC;AAAA,EAC/C,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,qBAAqB,aAAa,wCAAwC;AAAA,IAClF;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,EAAE,MAAM,sBAAsB,aAAa,0CAA0C;AAAA,IACrF,EAAE,MAAM,uBAAuB,aAAa,6CAA6C;AAAA,EAC3F;AAAA,EACA,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;;;ACiDO,SAAS,iBAA4C;AAC1D,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,MAAM;AACZ,SAAO,IAAI,cAAc,IAAI,aAAa;AAC5C;;;AF1GO,IAAM,oBAAoB,kBAAkB;AAC5C,IAAM,sBAAsB;AAKnC,SAAS,mBAAmB,SAAsB,QAAmC;AACnF,QAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAChE,QAAM,eAAe,OAAO,iBAAiB;AAC7C,QAAM,SAAS,OAAO,WAAW,SAAS,SAAS;AAEnD,MAAI,UAAgD;AACpD,MAAI,YAAY;AAChB,MAAI,YAAY,KAAK,IAAI;AAEzB,WAAS,UAAU;AACjB,UAAM,QAAQ,IAAI,YAAY,yBAAyB;AAAA,MACrD,SAAS;AAAA,MACT,YAAY;AAAA,IACd,CAAC;AACD,YAAQ,cAAc,KAAK;AAE3B,QAAI,MAAM,iBAAkB;AAE5B,QAAI,WAAW,QAAQ;AACrB,cAAQ,MAAM,aAAa;AAC3B,cAAQ,MAAM,UAAU;AACxB,iBAAW,MAAM,QAAQ,OAAO,GAAG,GAAG;AAAA,IACxC,OAAO;AACL,cAAQ,OAAO;AAAA,IACjB;AAAA,EACF;AAEA,WAAS,QAAQ;AACf,gBAAY,KAAK,IAAI;AACrB,cAAU,WAAW,SAAS,SAAS;AAAA,EACzC;AAGA,UAAQ,cAAc,IAAI,YAAY,qBAAqB,EAAE,SAAS,KAAK,CAAC,CAAC;AAC7E,QAAM;AAEN,MAAI,cAAc;AAChB,YAAQ,iBAAiB,cAAc,MAAM;AAC3C,UAAI,WAAW,MAAM;AACnB,qBAAa,OAAO;AACpB,kBAAU;AACV,qBAAa,KAAK,IAAI,IAAI;AAC1B,YAAI,YAAY,EAAG,aAAY;AAC/B,gBAAQ,cAAc,IAAI,YAAY,sBAAsB,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,MAChF;AAAA,IACF,CAAC;AAED,YAAQ,iBAAiB,cAAc,MAAM;AAC3C,UAAI,WAAW,QAAQ,QAAQ,aAAa;AAC1C,gBAAQ,cAAc,IAAI,YAAY,uBAAuB,EAAE,SAAS,KAAK,CAAC,CAAC;AAC/E,cAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAKA,eAAsB,oBAAoB,WAA+C;AACvF,QAAM,KAAK,aAAa,eAAe;AAEvC,MAAI,CAAC,IAAI;AACP,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY,CAAC,SAAS,gBAAgB,QAAQ;AAAA,IAC9C,eAAe,CAAC;AAAA,IAChB,qBAAqB;AAAA,EACvB;AACA,QAAM,MAAM,GAAG,gBAAgB,GAAG,cAAc,IAAI,EAAE,QAAQ,oBAAI,IAAI,GAAG,SAAS,oBAAI,IAAI,EAAE;AAC5F,QAAM,GAAG,QAAQ,eAAe,GAAG;AACrC;AAGA,IAAI,eAAe,GAAG;AACpB,sBAAoB,EAAE,MAAM,QAAQ,KAAK;AAC3C;AAEA,IAAO,sBAAQ;AAAA,EACb,QAAQ,kBAAkB;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;","names":[]}
@@ -0,0 +1,15 @@
1
+ import { B as BehaviorSchema, L as LokaScriptInstance } from '../types-DCCtVQS5.cjs';
2
+
3
+ declare const autoDismissSource: string;
4
+ declare const autoDismissMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the AutoDismiss behavior with LokaScript.
7
+ */
8
+ declare function registerAutoDismiss(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerAutoDismiss;
13
+ };
14
+
15
+ export { autoDismissMetadata, autoDismissSource, _default as default, registerAutoDismiss };
@@ -0,0 +1,15 @@
1
+ import { B as BehaviorSchema, L as LokaScriptInstance } from '../types-DCCtVQS5.js';
2
+
3
+ declare const autoDismissSource: string;
4
+ declare const autoDismissMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the AutoDismiss behavior with LokaScript.
7
+ */
8
+ declare function registerAutoDismiss(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerAutoDismiss;
13
+ };
14
+
15
+ export { autoDismissMetadata, autoDismissSource, _default as default, registerAutoDismiss };
@@ -0,0 +1,15 @@
1
+ import {
2
+ autoDismissMetadata,
3
+ autoDismissSource,
4
+ autodismiss_default,
5
+ registerAutoDismiss
6
+ } from "../chunk-H2MCHR5A.js";
7
+ import "../chunk-ZQQZTMCJ.js";
8
+ import "../chunk-6TJXDCAQ.js";
9
+ export {
10
+ autoDismissMetadata,
11
+ autoDismissSource,
12
+ autodismiss_default as default,
13
+ registerAutoDismiss
14
+ };
15
+ //# sourceMappingURL=autodismiss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,123 @@
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/clickoutside.ts
21
+ var clickoutside_exports = {};
22
+ __export(clickoutside_exports, {
23
+ clickOutsideMetadata: () => clickOutsideMetadata,
24
+ clickOutsideSource: () => clickOutsideSource,
25
+ default: () => clickoutside_default,
26
+ registerClickOutside: () => registerClickOutside
27
+ });
28
+ module.exports = __toCommonJS(clickoutside_exports);
29
+
30
+ // src/schemas/clickoutside.schema.ts
31
+ var clickOutsideSchema = {
32
+ name: "ClickOutside",
33
+ category: "ui",
34
+ tier: "core",
35
+ version: "1.0.0",
36
+ description: "Fires an event when the user clicks outside the element",
37
+ parameters: [
38
+ {
39
+ name: "active",
40
+ type: "boolean",
41
+ optional: true,
42
+ default: true,
43
+ description: "Whether the listener is active (can be toggled programmatically)"
44
+ }
45
+ ],
46
+ events: [
47
+ { name: "clickoutside", description: "Fired when a pointer press occurs outside the element" }
48
+ ],
49
+ requirements: ["Uses pointerdown instead of click to avoid timing issues with removed elements"],
50
+ source: `
51
+ behavior ClickOutside(active)
52
+ init
53
+ if active is undefined set active to true
54
+ end
55
+ on pointerdown from document
56
+ if active and not me.contains(event.target)
57
+ trigger clickoutside on me
58
+ end
59
+ end
60
+ end`.trim()
61
+ };
62
+
63
+ // src/schemas/types.ts
64
+ function resolveRuntime() {
65
+ if (typeof window === "undefined") return null;
66
+ const win = window;
67
+ return win.lokascript || win.hyperfixi || null;
68
+ }
69
+
70
+ // src/behaviors/clickoutside.ts
71
+ var clickOutsideSource = clickOutsideSchema.source;
72
+ var clickOutsideMetadata = clickOutsideSchema;
73
+ function installClickOutside(element, params) {
74
+ let active = params.active !== false;
75
+ function onPointerDown(e) {
76
+ if (!element.isConnected) {
77
+ document.removeEventListener("pointerdown", onPointerDown);
78
+ return;
79
+ }
80
+ if (active && !element.contains(e.target)) {
81
+ element.dispatchEvent(new CustomEvent("clickoutside", { bubbles: true }));
82
+ }
83
+ }
84
+ document.addEventListener("pointerdown", onPointerDown);
85
+ element.addEventListener("clickoutside:activate", () => {
86
+ active = true;
87
+ });
88
+ element.addEventListener("clickoutside:deactivate", () => {
89
+ active = false;
90
+ });
91
+ }
92
+ async function registerClickOutside(hyperfixi) {
93
+ const hf = hyperfixi || resolveRuntime();
94
+ if (!hf) {
95
+ throw new Error(
96
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
97
+ );
98
+ }
99
+ const syntheticNode = {
100
+ type: "behavior",
101
+ name: "ClickOutside",
102
+ parameters: ["active"],
103
+ eventHandlers: [],
104
+ imperativeInstaller: installClickOutside
105
+ };
106
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
107
+ await hf.execute(syntheticNode, ctx);
108
+ }
109
+ if (resolveRuntime()) {
110
+ registerClickOutside().catch(console.error);
111
+ }
112
+ var clickoutside_default = {
113
+ source: clickOutsideSchema.source,
114
+ metadata: clickOutsideSchema,
115
+ register: registerClickOutside
116
+ };
117
+ // Annotate the CommonJS export names for ESM import in node:
118
+ 0 && (module.exports = {
119
+ clickOutsideMetadata,
120
+ clickOutsideSource,
121
+ registerClickOutside
122
+ });
123
+ //# sourceMappingURL=clickoutside.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/behaviors/clickoutside.ts","../../src/schemas/clickoutside.schema.ts","../../src/schemas/types.ts"],"sourcesContent":["/**\n * ClickOutside Behavior — Imperative Implementation\n *\n * Fires a clickoutside event when the user clicks outside the element.\n * Uses pointerdown instead of click to avoid timing issues.\n */\n\nimport { clickOutsideSchema } from '../schemas/clickoutside.schema';\nimport type { LokaScriptInstance } from '../schemas/types';\nimport { resolveRuntime } from '../schemas/types';\n\n// Re-export schema-derived values\nexport const clickOutsideSource = clickOutsideSchema.source;\nexport const clickOutsideMetadata = clickOutsideSchema;\n\n/**\n * Imperative installer for ClickOutside behavior.\n */\nfunction installClickOutside(element: HTMLElement, params: Record<string, any>): void {\n let active = params.active !== false;\n\n function onPointerDown(e: Event) {\n // Auto-cleanup if element has been removed from DOM\n if (!element.isConnected) {\n document.removeEventListener('pointerdown', onPointerDown);\n return;\n }\n\n if (active && !element.contains(e.target as Node)) {\n element.dispatchEvent(new CustomEvent('clickoutside', { bubbles: true }));\n }\n }\n\n document.addEventListener('pointerdown', onPointerDown);\n\n // Programmatic activation/deactivation via custom events\n element.addEventListener('clickoutside:activate', () => {\n active = true;\n });\n element.addEventListener('clickoutside:deactivate', () => {\n active = false;\n });\n}\n\n/**\n * Register the ClickOutside behavior with LokaScript.\n */\nexport async function registerClickOutside(hyperfixi?: LokaScriptInstance): Promise<void> {\n const hf = hyperfixi || resolveRuntime();\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 syntheticNode = {\n type: 'behavior',\n name: 'ClickOutside',\n parameters: ['active'],\n eventHandlers: [],\n imperativeInstaller: installClickOutside,\n };\n const ctx = hf.createContext ? hf.createContext() : { locals: new Map(), globals: new Map() };\n await hf.execute(syntheticNode, ctx);\n}\n\n// Auto-register when loaded as a script tag\nif (resolveRuntime()) {\n registerClickOutside().catch(console.error);\n}\n\nexport default {\n source: clickOutsideSchema.source,\n metadata: clickOutsideSchema,\n register: registerClickOutside,\n};\n","import type { BehaviorSchema } from './types';\n\n/**\n * ClickOutside Behavior Schema\n *\n * Fires an event when the user clicks outside the element.\n * Uses pointerdown instead of click to avoid timing issues.\n */\nexport const clickOutsideSchema: BehaviorSchema = {\n name: 'ClickOutside',\n category: 'ui',\n tier: 'core',\n version: '1.0.0',\n description: 'Fires an event when the user clicks outside the element',\n parameters: [\n {\n name: 'active',\n type: 'boolean',\n optional: true,\n default: true,\n description: 'Whether the listener is active (can be toggled programmatically)',\n },\n ],\n events: [\n { name: 'clickoutside', description: 'Fired when a pointer press occurs outside the element' },\n ],\n requirements: ['Uses pointerdown instead of click to avoid timing issues with removed elements'],\n source: `\nbehavior ClickOutside(active)\n init\n if active is undefined set active to true\n end\n on pointerdown from document\n if active and not me.contains(event.target)\n trigger clickoutside on me\n end\n end\nend`.trim(),\n};\n","/**\n * Behavior Schema Types\n *\n * Defines the structure for behavior metadata used for:\n * - Code generation (TypeScript types, documentation)\n * - Runtime categorization and lazy loading\n * - Tooling and IDE integration\n */\n\n/**\n * Behavior categories for organization.\n * - ui: Visual interaction behaviors (drag, resize, sort)\n * - data: Data manipulation behaviors (remove, transform)\n * - animation: Animation and transition behaviors\n * - form: Form-related behaviors (validation, toggle states)\n * - layout: Layout behaviors (sticky, scrollspy)\n */\nexport type BehaviorCategory = 'ui' | 'data' | 'animation' | 'form' | 'layout';\n\n/**\n * Loading tiers for lazy loading optimization.\n * - core: Always loaded (essential behaviors)\n * - common: High usage (loaded for typical apps)\n * - optional: Low usage (loaded on demand)\n */\nexport type BehaviorTier = 'core' | 'common' | 'optional';\n\n/**\n * Schema for a behavior parameter.\n */\nexport interface ParameterSchema {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'selector' | 'element';\n optional?: boolean;\n default?: string | number | boolean;\n /** Allowed values for constrained parameters */\n enum?: string[];\n description: string;\n}\n\n/**\n * Schema for a behavior event.\n */\nexport interface EventSchema {\n name: string;\n description: string;\n}\n\n/**\n * Complete schema for a behavior.\n * This is the source of truth for all behavior metadata.\n */\nexport interface BehaviorSchema {\n /** Behavior name (PascalCase) */\n name: string;\n /** Category for organization */\n category: BehaviorCategory;\n /** Loading tier for lazy loading */\n tier: BehaviorTier;\n /** Semantic version */\n version: string;\n /** Human-readable description */\n description: string;\n /** Parameter definitions */\n parameters: ParameterSchema[];\n /** Event definitions */\n events: EventSchema[];\n /** The hyperscript behavior source code */\n source: string;\n /** Optional requirements or notes */\n requirements?: string[];\n}\n\n/**\n * Runtime behavior module interface.\n * This is what gets registered with the hyperfixi runtime.\n */\nexport interface BehaviorModule {\n source: string;\n metadata: BehaviorSchema;\n register: (hyperfixi?: LokaScriptInstance) => Promise<void>;\n}\n\n/**\n * Minimal LokaScript instance interface for behavior registration.\n */\nexport interface LokaScriptInstance {\n compileSync: (\n code: string,\n options?: { traditional?: boolean; language?: string }\n ) => {\n ok: boolean;\n ast?: unknown;\n errors?: Array<{ message: string; line?: number; column?: number }>;\n };\n execute: (ast: unknown, ctx: unknown) => Promise<unknown>;\n createContext?: () => { locals: Map<string, unknown>; globals: Map<string, unknown> };\n}\n\n/**\n * Typed window interface for behavior auto-registration.\n * Avoids `(window as any)` casts throughout the codebase.\n * Checks both `window.lokascript` and `window.hyperfixi` for the runtime instance.\n */\nexport interface LokaScriptWindow {\n lokascript?: LokaScriptInstance;\n hyperfixi?: LokaScriptInstance;\n __hyperfixi_behaviors_ready?: Promise<void> | undefined;\n}\n\n/**\n * Resolve the LokaScript runtime from window globals.\n * Checks both `window.lokascript` and `window.hyperfixi`.\n */\nexport function resolveRuntime(): LokaScriptInstance | null {\n if (typeof window === 'undefined') return null;\n const win = window as unknown as LokaScriptWindow;\n return win.lokascript || win.hyperfixi || null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,IAAM,qBAAqC;AAAA,EAChD,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,gBAAgB,aAAa,wDAAwD;AAAA,EAC/F;AAAA,EACA,cAAc,CAAC,gFAAgF;AAAA,EAC/F,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAUL,KAAK;AACV;;;AC4EO,SAAS,iBAA4C;AAC1D,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,MAAM;AACZ,SAAO,IAAI,cAAc,IAAI,aAAa;AAC5C;;;AF1GO,IAAM,qBAAqB,mBAAmB;AAC9C,IAAM,uBAAuB;AAKpC,SAAS,oBAAoB,SAAsB,QAAmC;AACpF,MAAI,SAAS,OAAO,WAAW;AAE/B,WAAS,cAAc,GAAU;AAE/B,QAAI,CAAC,QAAQ,aAAa;AACxB,eAAS,oBAAoB,eAAe,aAAa;AACzD;AAAA,IACF;AAEA,QAAI,UAAU,CAAC,QAAQ,SAAS,EAAE,MAAc,GAAG;AACjD,cAAQ,cAAc,IAAI,YAAY,gBAAgB,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,IAC1E;AAAA,EACF;AAEA,WAAS,iBAAiB,eAAe,aAAa;AAGtD,UAAQ,iBAAiB,yBAAyB,MAAM;AACtD,aAAS;AAAA,EACX,CAAC;AACD,UAAQ,iBAAiB,2BAA2B,MAAM;AACxD,aAAS;AAAA,EACX,CAAC;AACH;AAKA,eAAsB,qBAAqB,WAA+C;AACxF,QAAM,KAAK,aAAa,eAAe;AAEvC,MAAI,CAAC,IAAI;AACP,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY,CAAC,QAAQ;AAAA,IACrB,eAAe,CAAC;AAAA,IAChB,qBAAqB;AAAA,EACvB;AACA,QAAM,MAAM,GAAG,gBAAgB,GAAG,cAAc,IAAI,EAAE,QAAQ,oBAAI,IAAI,GAAG,SAAS,oBAAI,IAAI,EAAE;AAC5F,QAAM,GAAG,QAAQ,eAAe,GAAG;AACrC;AAGA,IAAI,eAAe,GAAG;AACpB,uBAAqB,EAAE,MAAM,QAAQ,KAAK;AAC5C;AAEA,IAAO,uBAAQ;AAAA,EACb,QAAQ,mBAAmB;AAAA,EAC3B,UAAU;AAAA,EACV,UAAU;AACZ;","names":[]}
@@ -0,0 +1,15 @@
1
+ import { B as BehaviorSchema, L as LokaScriptInstance } from '../types-DCCtVQS5.cjs';
2
+
3
+ declare const clickOutsideSource: string;
4
+ declare const clickOutsideMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the ClickOutside behavior with LokaScript.
7
+ */
8
+ declare function registerClickOutside(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerClickOutside;
13
+ };
14
+
15
+ export { clickOutsideMetadata, clickOutsideSource, _default as default, registerClickOutside };
@@ -0,0 +1,15 @@
1
+ import { B as BehaviorSchema, L as LokaScriptInstance } from '../types-DCCtVQS5.js';
2
+
3
+ declare const clickOutsideSource: string;
4
+ declare const clickOutsideMetadata: BehaviorSchema;
5
+ /**
6
+ * Register the ClickOutside behavior with LokaScript.
7
+ */
8
+ declare function registerClickOutside(hyperfixi?: LokaScriptInstance): Promise<void>;
9
+ declare const _default: {
10
+ source: string;
11
+ metadata: BehaviorSchema;
12
+ register: typeof registerClickOutside;
13
+ };
14
+
15
+ export { clickOutsideMetadata, clickOutsideSource, _default as default, registerClickOutside };
@@ -0,0 +1,15 @@
1
+ import {
2
+ clickOutsideMetadata,
3
+ clickOutsideSource,
4
+ clickoutside_default,
5
+ registerClickOutside
6
+ } from "../chunk-DYHBKDKB.js";
7
+ import "../chunk-64DIQGQI.js";
8
+ import "../chunk-6TJXDCAQ.js";
9
+ export {
10
+ clickOutsideMetadata,
11
+ clickOutsideSource,
12
+ clickoutside_default as default,
13
+ registerClickOutside
14
+ };
15
+ //# sourceMappingURL=clickoutside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,193 @@
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/clipboard.ts
21
+ var clipboard_exports = {};
22
+ __export(clipboard_exports, {
23
+ clipboardMetadata: () => clipboardMetadata,
24
+ clipboardSource: () => clipboardSource,
25
+ default: () => clipboard_default,
26
+ registerClipboard: () => registerClipboard
27
+ });
28
+ module.exports = __toCommonJS(clipboard_exports);
29
+
30
+ // src/schemas/clipboard.schema.ts
31
+ var clipboardSchema = {
32
+ name: "Clipboard",
33
+ category: "ui",
34
+ tier: "core",
35
+ version: "1.0.0",
36
+ description: "Copies text to clipboard on click with visual feedback",
37
+ parameters: [
38
+ {
39
+ name: "text",
40
+ type: "string",
41
+ optional: true,
42
+ description: "Literal text to copy (takes priority over source)"
43
+ },
44
+ {
45
+ name: "source",
46
+ type: "selector",
47
+ optional: true,
48
+ default: "me",
49
+ description: "Element whose textContent or value is copied"
50
+ },
51
+ {
52
+ name: "feedback",
53
+ type: "selector",
54
+ optional: true,
55
+ description: "Element to show .copied feedback on (defaults to the installed element)"
56
+ },
57
+ {
58
+ name: "feedbackDuration",
59
+ type: "number",
60
+ optional: true,
61
+ default: 2e3,
62
+ description: "Duration in ms to show .copied class feedback"
63
+ }
64
+ ],
65
+ events: [
66
+ { name: "clipboard:copied", description: "Fired after text is copied successfully" },
67
+ { name: "clipboard:error", description: "Fired when clipboard write fails" }
68
+ ],
69
+ requirements: [
70
+ "navigator.clipboard.writeText() requires HTTPS or localhost",
71
+ 'Falls back to document.execCommand("copy") for older browsers'
72
+ ],
73
+ source: [
74
+ "behavior Clipboard(text, source, feedback, feedbackDuration)",
75
+ " init",
76
+ " if feedbackDuration is undefined set feedbackDuration to 2000",
77
+ " if source is undefined set source to me",
78
+ " end",
79
+ " on click",
80
+ " if text is not undefined",
81
+ " set copyText to text",
82
+ " else",
83
+ " set copyText to source's value or source's textContent",
84
+ " end",
85
+ " js(copyText) navigator.clipboard.writeText(copyText) end",
86
+ " set feedbackEl to feedback or me",
87
+ " add .copied to feedbackEl",
88
+ " wait feedbackDuration ms",
89
+ " remove .copied from feedbackEl",
90
+ " trigger clipboard:copied",
91
+ " end",
92
+ "end"
93
+ ].join("\n")
94
+ };
95
+
96
+ // src/schemas/types.ts
97
+ function resolveRuntime() {
98
+ if (typeof window === "undefined") return null;
99
+ const win = window;
100
+ return win.lokascript || win.hyperfixi || null;
101
+ }
102
+
103
+ // src/behaviors/clipboard.ts
104
+ var clipboardSource = clipboardSchema.source;
105
+ var clipboardMetadata = clipboardSchema;
106
+ async function copyToClipboard(text) {
107
+ if (navigator.clipboard?.writeText) {
108
+ await navigator.clipboard.writeText(text);
109
+ return;
110
+ }
111
+ const textarea = document.createElement("textarea");
112
+ textarea.value = text;
113
+ textarea.style.position = "fixed";
114
+ textarea.style.opacity = "0";
115
+ document.body.appendChild(textarea);
116
+ textarea.select();
117
+ try {
118
+ document.execCommand("copy");
119
+ } finally {
120
+ document.body.removeChild(textarea);
121
+ }
122
+ }
123
+ function resolveElement(element, param) {
124
+ if (!param || param === "me") return element;
125
+ if (param instanceof HTMLElement) return param;
126
+ if (typeof param === "string") {
127
+ return element.querySelector(param) || document.querySelector(param) || null;
128
+ }
129
+ return null;
130
+ }
131
+ function installClipboard(element, params) {
132
+ const feedbackDuration = typeof params.feedbackDuration === "number" ? params.feedbackDuration : 2e3;
133
+ element.addEventListener("click", async () => {
134
+ let copyText;
135
+ if (params.text != null) {
136
+ copyText = String(params.text);
137
+ } else {
138
+ const sourceEl = resolveElement(element, params.source) || element;
139
+ copyText = sourceEl.value ?? sourceEl.textContent ?? "";
140
+ }
141
+ try {
142
+ await copyToClipboard(copyText);
143
+ const feedbackEl = resolveElement(element, params.feedback) || element;
144
+ feedbackEl.classList.add("copied");
145
+ setTimeout(() => feedbackEl.classList.remove("copied"), feedbackDuration);
146
+ element.dispatchEvent(
147
+ new CustomEvent("clipboard:copied", {
148
+ bubbles: true,
149
+ detail: { text: copyText }
150
+ })
151
+ );
152
+ } catch (error) {
153
+ element.dispatchEvent(
154
+ new CustomEvent("clipboard:error", {
155
+ bubbles: true,
156
+ detail: { error }
157
+ })
158
+ );
159
+ }
160
+ });
161
+ }
162
+ async function registerClipboard(hyperfixi) {
163
+ const hf = hyperfixi || resolveRuntime();
164
+ if (!hf) {
165
+ throw new Error(
166
+ "LokaScript not found. Make sure @hyperfixi/core is loaded before registering behaviors."
167
+ );
168
+ }
169
+ const syntheticNode = {
170
+ type: "behavior",
171
+ name: "Clipboard",
172
+ parameters: ["text", "source", "feedback", "feedbackDuration"],
173
+ eventHandlers: [],
174
+ imperativeInstaller: installClipboard
175
+ };
176
+ const ctx = hf.createContext ? hf.createContext() : { locals: /* @__PURE__ */ new Map(), globals: /* @__PURE__ */ new Map() };
177
+ await hf.execute(syntheticNode, ctx);
178
+ }
179
+ if (resolveRuntime()) {
180
+ registerClipboard().catch(console.error);
181
+ }
182
+ var clipboard_default = {
183
+ source: clipboardSchema.source,
184
+ metadata: clipboardSchema,
185
+ register: registerClipboard
186
+ };
187
+ // Annotate the CommonJS export names for ESM import in node:
188
+ 0 && (module.exports = {
189
+ clipboardMetadata,
190
+ clipboardSource,
191
+ registerClipboard
192
+ });
193
+ //# sourceMappingURL=clipboard.cjs.map