@hyperfixi/behaviors 2.5.1 → 2.7.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 (182) hide show
  1. package/README.md +100 -0
  2. package/dist/all.browser.global.js +43 -40
  3. package/dist/all.browser.global.js.map +1 -1
  4. package/dist/autodismiss.browser.global.js +2 -2
  5. package/dist/autodismiss.browser.global.js.map +1 -1
  6. package/dist/behaviors/autodismiss.cjs +5 -54
  7. package/dist/behaviors/autodismiss.cjs.map +1 -1
  8. package/dist/behaviors/autodismiss.d.cts +3 -2
  9. package/dist/behaviors/autodismiss.d.ts +3 -2
  10. package/dist/behaviors/autodismiss.js +1 -1
  11. package/dist/behaviors/clickoutside.cjs +6 -28
  12. package/dist/behaviors/clickoutside.cjs.map +1 -1
  13. package/dist/behaviors/clickoutside.d.cts +3 -2
  14. package/dist/behaviors/clickoutside.d.ts +3 -2
  15. package/dist/behaviors/clickoutside.js +2 -2
  16. package/dist/behaviors/clipboard.cjs +30 -86
  17. package/dist/behaviors/clipboard.cjs.map +1 -1
  18. package/dist/behaviors/clipboard.d.cts +3 -2
  19. package/dist/behaviors/clipboard.d.ts +3 -2
  20. package/dist/behaviors/clipboard.js +2 -2
  21. package/dist/behaviors/draggable.cjs +6 -41
  22. package/dist/behaviors/draggable.cjs.map +1 -1
  23. package/dist/behaviors/draggable.d.cts +3 -3
  24. package/dist/behaviors/draggable.d.ts +3 -3
  25. package/dist/behaviors/draggable.js +2 -2
  26. package/dist/behaviors/focustrap.cjs +5 -81
  27. package/dist/behaviors/focustrap.cjs.map +1 -1
  28. package/dist/behaviors/focustrap.d.cts +3 -2
  29. package/dist/behaviors/focustrap.d.ts +3 -2
  30. package/dist/behaviors/focustrap.js +1 -1
  31. package/dist/behaviors/removable.d.cts +1 -1
  32. package/dist/behaviors/removable.d.ts +1 -1
  33. package/dist/behaviors/resizable.cjs +9 -49
  34. package/dist/behaviors/resizable.cjs.map +1 -1
  35. package/dist/behaviors/resizable.d.cts +3 -2
  36. package/dist/behaviors/resizable.d.ts +3 -2
  37. package/dist/behaviors/resizable.js +2 -2
  38. package/dist/behaviors/scrollreveal.cjs +5 -32
  39. package/dist/behaviors/scrollreveal.cjs.map +1 -1
  40. package/dist/behaviors/scrollreveal.d.cts +3 -2
  41. package/dist/behaviors/scrollreveal.d.ts +3 -2
  42. package/dist/behaviors/scrollreveal.js +1 -1
  43. package/dist/behaviors/sortable.cjs +8 -43
  44. package/dist/behaviors/sortable.cjs.map +1 -1
  45. package/dist/behaviors/sortable.d.cts +3 -2
  46. package/dist/behaviors/sortable.d.ts +3 -2
  47. package/dist/behaviors/sortable.js +2 -2
  48. package/dist/behaviors/tabs.cjs +5 -120
  49. package/dist/behaviors/tabs.cjs.map +1 -1
  50. package/dist/behaviors/tabs.d.cts +3 -2
  51. package/dist/behaviors/tabs.d.ts +3 -2
  52. package/dist/behaviors/tabs.js +1 -1
  53. package/dist/behaviors/toggleable.cjs +5 -27
  54. package/dist/behaviors/toggleable.cjs.map +1 -1
  55. package/dist/behaviors/toggleable.d.cts +3 -3
  56. package/dist/behaviors/toggleable.d.ts +3 -3
  57. package/dist/behaviors/toggleable.js +1 -1
  58. package/dist/{chunk-SLOXO6IY.js → chunk-26IX7QU7.js} +2 -2
  59. package/dist/{chunk-SLOXO6IY.js.map → chunk-26IX7QU7.js.map} +1 -1
  60. package/dist/chunk-2HUF6RMI.js +40 -0
  61. package/dist/chunk-2HUF6RMI.js.map +1 -0
  62. package/dist/{chunk-ZBSWTV6I.js → chunk-5LFOFVZ3.js} +5 -5
  63. package/dist/chunk-5LFOFVZ3.js.map +1 -0
  64. package/dist/{chunk-BBIIOGMF.js → chunk-6EG2MNC7.js} +6 -6
  65. package/dist/chunk-7NGOA3T5.js +40 -0
  66. package/dist/chunk-7NGOA3T5.js.map +1 -0
  67. package/dist/{chunk-ZZ2WSAX3.js → chunk-7TPDLB7W.js} +7 -29
  68. package/dist/chunk-7TPDLB7W.js.map +1 -0
  69. package/dist/chunk-CR3J7VV6.js +40 -0
  70. package/dist/chunk-CR3J7VV6.js.map +1 -0
  71. package/dist/chunk-EDBG2F57.js +40 -0
  72. package/dist/chunk-EDBG2F57.js.map +1 -0
  73. package/dist/{chunk-G6WR2AYR.js → chunk-FBQ3X3UY.js} +2 -2
  74. package/dist/chunk-FBQ3X3UY.js.map +1 -0
  75. package/dist/chunk-HX663BJ4.js +40 -0
  76. package/dist/chunk-HX663BJ4.js.map +1 -0
  77. package/dist/chunk-KROW43CG.js +40 -0
  78. package/dist/chunk-KROW43CG.js.map +1 -0
  79. package/dist/chunk-ORBJ7MRW.js +40 -0
  80. package/dist/chunk-ORBJ7MRW.js.map +1 -0
  81. package/dist/{chunk-V2M4W3LO.js → chunk-PDMOOWFW.js} +4 -4
  82. package/dist/chunk-PDMOOWFW.js.map +1 -0
  83. package/dist/chunk-SLSCZV4A.js +40 -0
  84. package/dist/chunk-SLSCZV4A.js.map +1 -0
  85. package/dist/chunk-WKBRZGGL.js +40 -0
  86. package/dist/chunk-WKBRZGGL.js.map +1 -0
  87. package/dist/{chunk-WOTZO7K4.js → chunk-YXS27XM6.js} +26 -23
  88. package/dist/chunk-YXS27XM6.js.map +1 -0
  89. package/dist/clickoutside.browser.global.js +3 -3
  90. package/dist/clickoutside.browser.global.js.map +1 -1
  91. package/dist/clipboard.browser.global.js +27 -24
  92. package/dist/clipboard.browser.global.js.map +1 -1
  93. package/dist/core.browser.global.js +3 -3
  94. package/dist/core.browser.global.js.map +1 -1
  95. package/dist/draggable.browser.global.js +2 -2
  96. package/dist/draggable.browser.global.js.map +1 -1
  97. package/dist/focustrap.browser.global.js +2 -2
  98. package/dist/focustrap.browser.global.js.map +1 -1
  99. package/dist/index.cjs +120 -563
  100. package/dist/index.cjs.map +1 -1
  101. package/dist/index.d.cts +41 -3
  102. package/dist/index.d.ts +41 -3
  103. package/dist/index.js +44 -16
  104. package/dist/index.js.map +1 -1
  105. package/dist/loaders.cjs +86 -563
  106. package/dist/loaders.cjs.map +1 -1
  107. package/dist/loaders.js +6 -6
  108. package/dist/registry.d.cts +1 -1
  109. package/dist/registry.d.ts +1 -1
  110. package/dist/resizable.browser.global.js +5 -5
  111. package/dist/resizable.browser.global.js.map +1 -1
  112. package/dist/resolver.browser.global.js +34 -31
  113. package/dist/resolver.browser.global.js.map +1 -1
  114. package/dist/schemas/index.cjs +34 -31
  115. package/dist/schemas/index.cjs.map +1 -1
  116. package/dist/schemas/index.d.cts +2 -2
  117. package/dist/schemas/index.d.ts +2 -2
  118. package/dist/schemas/index.js +5 -5
  119. package/dist/scrollreveal.browser.global.js +2 -2
  120. package/dist/scrollreveal.browser.global.js.map +1 -1
  121. package/dist/sortable.browser.global.js +4 -4
  122. package/dist/sortable.browser.global.js.map +1 -1
  123. package/dist/tabs.browser.global.js +2 -2
  124. package/dist/tabs.browser.global.js.map +1 -1
  125. package/dist/toggleable.browser.global.js +2 -2
  126. package/dist/toggleable.browser.global.js.map +1 -1
  127. package/dist/{types-BY-jB5FV.d.ts → types-DCCtVQS5.d.cts} +1 -1
  128. package/dist/{types-BY-jB5FV.d.cts → types-DCCtVQS5.d.ts} +1 -1
  129. package/package.json +4 -4
  130. package/src/behaviors/autodismiss.test.ts +15 -9
  131. package/src/behaviors/autodismiss.ts +15 -70
  132. package/src/behaviors/clickoutside.test.ts +17 -9
  133. package/src/behaviors/clickoutside.ts +13 -39
  134. package/src/behaviors/clipboard.test.ts +16 -10
  135. package/src/behaviors/clipboard.ts +15 -93
  136. package/src/behaviors/curated-runtime.test.ts +158 -0
  137. package/src/behaviors/draggable.ts +15 -59
  138. package/src/behaviors/experimental-runtime.test.ts +136 -0
  139. package/src/behaviors/focustrap.test.ts +15 -9
  140. package/src/behaviors/focustrap.ts +17 -121
  141. package/src/behaviors/integration.test.ts +9 -64
  142. package/src/behaviors/optional-runtime.test.ts +251 -0
  143. package/src/behaviors/resizable.ts +14 -61
  144. package/src/behaviors/scrollreveal.test.ts +17 -9
  145. package/src/behaviors/scrollreveal.ts +17 -41
  146. package/src/behaviors/sortable.ts +15 -58
  147. package/src/behaviors/tabs.test.ts +16 -10
  148. package/src/behaviors/tabs.ts +18 -160
  149. package/src/behaviors/toggleable.ts +14 -41
  150. package/src/curation.test.ts +45 -0
  151. package/src/curation.ts +58 -0
  152. package/src/index.ts +14 -0
  153. package/src/registry.test.ts +6 -11
  154. package/src/schemas/clickoutside.schema.ts +1 -1
  155. package/src/schemas/clipboard.schema.ts +25 -22
  156. package/src/schemas/draggable.schema.ts +2 -1
  157. package/src/schemas/resizable.schema.ts +5 -4
  158. package/src/schemas/sortable.schema.ts +4 -3
  159. package/dist/chunk-7O7UOSBH.js +0 -99
  160. package/dist/chunk-7O7UOSBH.js.map +0 -1
  161. package/dist/chunk-EKKJVXDZ.js +0 -67
  162. package/dist/chunk-EKKJVXDZ.js.map +0 -1
  163. package/dist/chunk-F3CASJ7Q.js +0 -116
  164. package/dist/chunk-F3CASJ7Q.js.map +0 -1
  165. package/dist/chunk-G6WR2AYR.js.map +0 -1
  166. package/dist/chunk-GALKOMJ5.js +0 -62
  167. package/dist/chunk-GALKOMJ5.js.map +0 -1
  168. package/dist/chunk-IMDFEGIT.js +0 -75
  169. package/dist/chunk-IMDFEGIT.js.map +0 -1
  170. package/dist/chunk-IT6TYVMW.js +0 -80
  171. package/dist/chunk-IT6TYVMW.js.map +0 -1
  172. package/dist/chunk-LQJOQTBZ.js +0 -89
  173. package/dist/chunk-LQJOQTBZ.js.map +0 -1
  174. package/dist/chunk-S4QDV2MH.js +0 -75
  175. package/dist/chunk-S4QDV2MH.js.map +0 -1
  176. package/dist/chunk-V2M4W3LO.js.map +0 -1
  177. package/dist/chunk-WOTZO7K4.js.map +0 -1
  178. package/dist/chunk-WPOQIMCC.js +0 -155
  179. package/dist/chunk-WPOQIMCC.js.map +0 -1
  180. package/dist/chunk-ZBSWTV6I.js.map +0 -1
  181. package/dist/chunk-ZZ2WSAX3.js.map +0 -1
  182. /package/dist/{chunk-BBIIOGMF.js.map → chunk-6EG2MNC7.js.map} +0 -0
package/dist/index.d.cts CHANGED
@@ -9,8 +9,8 @@ export { default as ClickOutside, clickOutsideMetadata, clickOutsideSource, regi
9
9
  export { default as FocusTrap, focusTrapMetadata, focusTrapSource, registerFocusTrap } from './behaviors/focustrap.cjs';
10
10
  export { default as ScrollReveal, registerScrollReveal, scrollRevealMetadata, scrollRevealSource } from './behaviors/scrollreveal.cjs';
11
11
  export { default as Tabs, registerTabs, tabsMetadata, tabsSource } from './behaviors/tabs.cjs';
12
- import { B as BehaviorCategory, c as BehaviorTier, L as LokaScriptInstance } from './types-BY-jB5FV.cjs';
13
- export { a as BehaviorModule, b as BehaviorSchema, E as EventSchema, P as ParameterSchema } from './types-BY-jB5FV.cjs';
12
+ import { b as BehaviorCategory, c as BehaviorTier, L as LokaScriptInstance } from './types-DCCtVQS5.cjs';
13
+ export { a as BehaviorModule, B as BehaviorSchema, E as EventSchema, P as ParameterSchema } from './types-DCCtVQS5.cjs';
14
14
  export { getAllSchemas, getAllSchemasRecord, getAvailableBehaviors, getBehavior, getBehaviorsByCategory, getBehaviorsByTier, getRegisteredBehaviors, getSchema, hasLoader, isRegistered, loadAll, loadBehavior, preloadCategory, preloadTier, registerAllWithRuntime, registerBehavior, registerLoader, registerSchema, registerWithRuntime, tryGetBehavior, tryGetSchema } from './registry.cjs';
15
15
 
16
16
  /**
@@ -84,6 +84,44 @@ declare const BEHAVIOR_CATEGORIES: Record<BehaviorName, BehaviorCategory>;
84
84
  */
85
85
  declare const BEHAVIOR_TIERS: Record<BehaviorName, BehaviorTier>;
86
86
 
87
+ /**
88
+ * Curation status — the product decision about which behaviors are first-class.
89
+ *
90
+ * This is ORTHOGONAL to {@link BehaviorTier} (core/common/optional), which is about
91
+ * lazy-loading priority. Curation is about support level and the boundary rule:
92
+ *
93
+ * A behavior is a named, parameterized, *reusable inline script* — `on event →
94
+ * DOM action`. Not a component. When it needs an observer, a focus model, or an
95
+ * async pointer loop, it has left hyperfixi's lane.
96
+ *
97
+ * See docs-internal/BEHAVIORS_CONSOLIDATION_PLAN.md for the full rationale.
98
+ */
99
+ type CurationStatus = 'curated' | 'optional' | 'experimental';
100
+ /**
101
+ * Curated set — reliable, runtime-tested, multilingual. The supported story.
102
+ * Real `on event → DOM action` behaviors (Tier A) plus two honestly-labeled
103
+ * JS-backed conveniences (Clipboard, AutoDismiss).
104
+ */
105
+ declare const CURATED_BEHAVIORS: readonly ["Toggleable", "Removable", "ClickOutside", "Clipboard", "AutoDismiss"];
106
+ /**
107
+ * Optional — useful, kept, documented as primitives / nice-to-haves.
108
+ * FocusTrap + ClickOutside are the primitives a Modal composes from; ScrollReveal
109
+ * is a nice-to-have; Tabs is high-value but heavy.
110
+ */
111
+ declare const OPTIONAL_BEHAVIORS: readonly ["FocusTrap", "ScrollReveal", "Tabs"];
112
+ /**
113
+ * Experimental — stateful async components (drag/sort/resize). These sit *beyond*
114
+ * the inline-scripting boundary; kept working but explicitly outside the curated,
115
+ * supported, marketed story.
116
+ */
117
+ declare const EXPERIMENTAL_BEHAVIORS: readonly ["Draggable", "Sortable", "Resizable"];
118
+ /** Curation status for every behavior, keyed by name. */
119
+ declare const CURATION_STATUS: Record<string, CurationStatus>;
120
+ /** Curation status for a behavior name, or undefined if unknown. */
121
+ declare function curationStatusOf(name: string): CurationStatus | undefined;
122
+ /** True for the curated, supported set. */
123
+ declare function isCurated(name: string): boolean;
124
+
87
125
  /**
88
126
  * @hyperfixi/behaviors
89
127
  *
@@ -137,4 +175,4 @@ declare function registerAll(hyperfixi?: LokaScriptInstance): Promise<void>;
137
175
  */
138
176
  declare let ready: Promise<void> | null;
139
177
 
140
- export { ALL_BEHAVIOR_NAMES, type AnimationBehavior, BEHAVIORS_BY_CATEGORY, BEHAVIORS_BY_TIER, BEHAVIOR_CATEGORIES, BEHAVIOR_TIERS, BehaviorCategory, type BehaviorName, BehaviorTier, type CommonBehavior, type CoreBehavior, type DataBehavior, type FormBehavior, type LayoutBehavior, LokaScriptInstance, type OptionalBehavior, type UIBehavior, ready, registerAll };
178
+ export { ALL_BEHAVIOR_NAMES, type AnimationBehavior, BEHAVIORS_BY_CATEGORY, BEHAVIORS_BY_TIER, BEHAVIOR_CATEGORIES, BEHAVIOR_TIERS, BehaviorCategory, type BehaviorName, BehaviorTier, CURATED_BEHAVIORS, CURATION_STATUS, type CommonBehavior, type CoreBehavior, type CurationStatus, type DataBehavior, EXPERIMENTAL_BEHAVIORS, type FormBehavior, type LayoutBehavior, LokaScriptInstance, OPTIONAL_BEHAVIORS, type OptionalBehavior, type UIBehavior, curationStatusOf, isCurated, ready, registerAll };
package/dist/index.d.ts CHANGED
@@ -9,8 +9,8 @@ export { default as ClickOutside, clickOutsideMetadata, clickOutsideSource, regi
9
9
  export { default as FocusTrap, focusTrapMetadata, focusTrapSource, registerFocusTrap } from './behaviors/focustrap.js';
10
10
  export { default as ScrollReveal, registerScrollReveal, scrollRevealMetadata, scrollRevealSource } from './behaviors/scrollreveal.js';
11
11
  export { default as Tabs, registerTabs, tabsMetadata, tabsSource } from './behaviors/tabs.js';
12
- import { B as BehaviorCategory, c as BehaviorTier, L as LokaScriptInstance } from './types-BY-jB5FV.js';
13
- export { a as BehaviorModule, b as BehaviorSchema, E as EventSchema, P as ParameterSchema } from './types-BY-jB5FV.js';
12
+ import { b as BehaviorCategory, c as BehaviorTier, L as LokaScriptInstance } from './types-DCCtVQS5.js';
13
+ export { a as BehaviorModule, B as BehaviorSchema, E as EventSchema, P as ParameterSchema } from './types-DCCtVQS5.js';
14
14
  export { getAllSchemas, getAllSchemasRecord, getAvailableBehaviors, getBehavior, getBehaviorsByCategory, getBehaviorsByTier, getRegisteredBehaviors, getSchema, hasLoader, isRegistered, loadAll, loadBehavior, preloadCategory, preloadTier, registerAllWithRuntime, registerBehavior, registerLoader, registerSchema, registerWithRuntime, tryGetBehavior, tryGetSchema } from './registry.js';
15
15
 
16
16
  /**
@@ -84,6 +84,44 @@ declare const BEHAVIOR_CATEGORIES: Record<BehaviorName, BehaviorCategory>;
84
84
  */
85
85
  declare const BEHAVIOR_TIERS: Record<BehaviorName, BehaviorTier>;
86
86
 
87
+ /**
88
+ * Curation status — the product decision about which behaviors are first-class.
89
+ *
90
+ * This is ORTHOGONAL to {@link BehaviorTier} (core/common/optional), which is about
91
+ * lazy-loading priority. Curation is about support level and the boundary rule:
92
+ *
93
+ * A behavior is a named, parameterized, *reusable inline script* — `on event →
94
+ * DOM action`. Not a component. When it needs an observer, a focus model, or an
95
+ * async pointer loop, it has left hyperfixi's lane.
96
+ *
97
+ * See docs-internal/BEHAVIORS_CONSOLIDATION_PLAN.md for the full rationale.
98
+ */
99
+ type CurationStatus = 'curated' | 'optional' | 'experimental';
100
+ /**
101
+ * Curated set — reliable, runtime-tested, multilingual. The supported story.
102
+ * Real `on event → DOM action` behaviors (Tier A) plus two honestly-labeled
103
+ * JS-backed conveniences (Clipboard, AutoDismiss).
104
+ */
105
+ declare const CURATED_BEHAVIORS: readonly ["Toggleable", "Removable", "ClickOutside", "Clipboard", "AutoDismiss"];
106
+ /**
107
+ * Optional — useful, kept, documented as primitives / nice-to-haves.
108
+ * FocusTrap + ClickOutside are the primitives a Modal composes from; ScrollReveal
109
+ * is a nice-to-have; Tabs is high-value but heavy.
110
+ */
111
+ declare const OPTIONAL_BEHAVIORS: readonly ["FocusTrap", "ScrollReveal", "Tabs"];
112
+ /**
113
+ * Experimental — stateful async components (drag/sort/resize). These sit *beyond*
114
+ * the inline-scripting boundary; kept working but explicitly outside the curated,
115
+ * supported, marketed story.
116
+ */
117
+ declare const EXPERIMENTAL_BEHAVIORS: readonly ["Draggable", "Sortable", "Resizable"];
118
+ /** Curation status for every behavior, keyed by name. */
119
+ declare const CURATION_STATUS: Record<string, CurationStatus>;
120
+ /** Curation status for a behavior name, or undefined if unknown. */
121
+ declare function curationStatusOf(name: string): CurationStatus | undefined;
122
+ /** True for the curated, supported set. */
123
+ declare function isCurated(name: string): boolean;
124
+
87
125
  /**
88
126
  * @hyperfixi/behaviors
89
127
  *
@@ -137,4 +175,4 @@ declare function registerAll(hyperfixi?: LokaScriptInstance): Promise<void>;
137
175
  */
138
176
  declare let ready: Promise<void> | null;
139
177
 
140
- export { ALL_BEHAVIOR_NAMES, type AnimationBehavior, BEHAVIORS_BY_CATEGORY, BEHAVIORS_BY_TIER, BEHAVIOR_CATEGORIES, BEHAVIOR_TIERS, BehaviorCategory, type BehaviorName, BehaviorTier, type CommonBehavior, type CoreBehavior, type DataBehavior, type FormBehavior, type LayoutBehavior, LokaScriptInstance, type OptionalBehavior, type UIBehavior, ready, registerAll };
178
+ export { ALL_BEHAVIOR_NAMES, type AnimationBehavior, BEHAVIORS_BY_CATEGORY, BEHAVIORS_BY_TIER, BEHAVIOR_CATEGORIES, BEHAVIOR_TIERS, BehaviorCategory, type BehaviorName, BehaviorTier, CURATED_BEHAVIORS, CURATION_STATUS, type CommonBehavior, type CoreBehavior, type CurationStatus, type DataBehavior, EXPERIMENTAL_BEHAVIORS, type FormBehavior, type LayoutBehavior, LokaScriptInstance, OPTIONAL_BEHAVIORS, type OptionalBehavior, type UIBehavior, curationStatusOf, isCurated, ready, registerAll };
package/dist/index.js CHANGED
@@ -9,36 +9,36 @@ import {
9
9
  resizableMetadata,
10
10
  resizableSource,
11
11
  resizable_default
12
- } from "./chunk-IT6TYVMW.js";
12
+ } from "./chunk-7NGOA3T5.js";
13
13
  import {
14
14
  registerScrollReveal,
15
15
  scrollRevealMetadata,
16
16
  scrollRevealSource,
17
17
  scrollreveal_default
18
- } from "./chunk-EKKJVXDZ.js";
18
+ } from "./chunk-KROW43CG.js";
19
19
  import {
20
20
  registerSortable,
21
21
  sortableMetadata,
22
22
  sortableSource,
23
23
  sortable_default
24
- } from "./chunk-IMDFEGIT.js";
24
+ } from "./chunk-SLSCZV4A.js";
25
25
  import {
26
26
  registerTabs,
27
27
  tabsMetadata,
28
28
  tabsSource,
29
29
  tabs_default
30
- } from "./chunk-WPOQIMCC.js";
30
+ } from "./chunk-WKBRZGGL.js";
31
31
  import {
32
32
  registerToggleable,
33
33
  toggleableMetadata,
34
34
  toggleableSource,
35
35
  toggleable_default
36
- } from "./chunk-GALKOMJ5.js";
37
- import "./chunk-BBIIOGMF.js";
36
+ } from "./chunk-HX663BJ4.js";
37
+ import "./chunk-6EG2MNC7.js";
38
38
  import "./chunk-HMU342XE.js";
39
- import "./chunk-ZBSWTV6I.js";
39
+ import "./chunk-5LFOFVZ3.js";
40
40
  import "./chunk-URZGNPTQ.js";
41
- import "./chunk-V2M4W3LO.js";
41
+ import "./chunk-PDMOOWFW.js";
42
42
  import "./chunk-HQDYH45I.js";
43
43
  import "./chunk-XYZ7FOXJ.js";
44
44
  import {
@@ -69,35 +69,35 @@ import {
69
69
  autoDismissSource,
70
70
  autodismiss_default,
71
71
  registerAutoDismiss
72
- } from "./chunk-LQJOQTBZ.js";
72
+ } from "./chunk-2HUF6RMI.js";
73
73
  import "./chunk-66U2RSYJ.js";
74
74
  import {
75
75
  clickOutsideMetadata,
76
76
  clickOutsideSource,
77
77
  clickoutside_default,
78
78
  registerClickOutside
79
- } from "./chunk-ZZ2WSAX3.js";
80
- import "./chunk-SLOXO6IY.js";
79
+ } from "./chunk-7TPDLB7W.js";
80
+ import "./chunk-26IX7QU7.js";
81
81
  import {
82
82
  clipboardMetadata,
83
83
  clipboardSource,
84
84
  clipboard_default,
85
85
  registerClipboard
86
- } from "./chunk-7O7UOSBH.js";
87
- import "./chunk-WOTZO7K4.js";
86
+ } from "./chunk-EDBG2F57.js";
87
+ import "./chunk-YXS27XM6.js";
88
88
  import {
89
89
  draggableMetadata,
90
90
  draggableSource,
91
91
  draggable_default,
92
92
  registerDraggable
93
- } from "./chunk-S4QDV2MH.js";
94
- import "./chunk-G6WR2AYR.js";
93
+ } from "./chunk-ORBJ7MRW.js";
94
+ import "./chunk-FBQ3X3UY.js";
95
95
  import {
96
96
  focusTrapMetadata,
97
97
  focusTrapSource,
98
98
  focustrap_default,
99
99
  registerFocusTrap
100
- } from "./chunk-F3CASJ7Q.js";
100
+ } from "./chunk-CR3J7VV6.js";
101
101
  import "./chunk-OJ3YWO3W.js";
102
102
  import {
103
103
  resolveRuntime
@@ -185,6 +185,28 @@ var BEHAVIOR_TIERS = {
185
185
  "Tabs": "core"
186
186
  };
187
187
 
188
+ // src/curation.ts
189
+ var CURATED_BEHAVIORS = [
190
+ "Toggleable",
191
+ "Removable",
192
+ "ClickOutside",
193
+ "Clipboard",
194
+ "AutoDismiss"
195
+ ];
196
+ var OPTIONAL_BEHAVIORS = ["FocusTrap", "ScrollReveal", "Tabs"];
197
+ var EXPERIMENTAL_BEHAVIORS = ["Draggable", "Sortable", "Resizable"];
198
+ var CURATION_STATUS = {
199
+ ...Object.fromEntries(CURATED_BEHAVIORS.map((n) => [n, "curated"])),
200
+ ...Object.fromEntries(OPTIONAL_BEHAVIORS.map((n) => [n, "optional"])),
201
+ ...Object.fromEntries(EXPERIMENTAL_BEHAVIORS.map((n) => [n, "experimental"]))
202
+ };
203
+ function curationStatusOf(name) {
204
+ return CURATION_STATUS[name];
205
+ }
206
+ function isCurated(name) {
207
+ return CURATION_STATUS[name] === "curated";
208
+ }
209
+
188
210
  // src/index.ts
189
211
  async function registerAll(hyperfixi) {
190
212
  await Promise.all([
@@ -230,10 +252,14 @@ export {
230
252
  BEHAVIORS_BY_TIER,
231
253
  BEHAVIOR_CATEGORIES,
232
254
  BEHAVIOR_TIERS,
255
+ CURATED_BEHAVIORS,
256
+ CURATION_STATUS,
233
257
  clickoutside_default as ClickOutside,
234
258
  clipboard_default as Clipboard,
235
259
  draggable_default as Draggable,
260
+ EXPERIMENTAL_BEHAVIORS,
236
261
  focustrap_default as FocusTrap,
262
+ OPTIONAL_BEHAVIORS,
237
263
  removable_default as Removable,
238
264
  resizable_default as Resizable,
239
265
  scrollreveal_default as ScrollReveal,
@@ -246,6 +272,7 @@ export {
246
272
  clickOutsideSource,
247
273
  clipboardMetadata,
248
274
  clipboardSource,
275
+ curationStatusOf,
249
276
  draggableMetadata,
250
277
  draggableSource,
251
278
  focusTrapMetadata,
@@ -259,6 +286,7 @@ export {
259
286
  getRegisteredBehaviors,
260
287
  getSchema,
261
288
  hasLoader,
289
+ isCurated,
262
290
  isRegistered,
263
291
  loadAll,
264
292
  loadBehavior,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generated/metadata.ts","../src/index.ts"],"sourcesContent":["/**\n * Generated Metadata\n *\n * DO NOT EDIT - Generated by scripts/generate.ts\n * Run `npm run generate` to regenerate.\n */\n\nimport type { BehaviorCategory, BehaviorTier } from '../schemas/types';\nimport type { BehaviorName } from './types';\n\n/**\n * All behavior names.\n */\nexport const ALL_BEHAVIOR_NAMES: BehaviorName[] = [\n \"Draggable\",\n \"Sortable\",\n \"Resizable\",\n \"Removable\",\n \"Toggleable\",\n \"Clipboard\",\n \"AutoDismiss\",\n \"ClickOutside\",\n \"FocusTrap\",\n \"ScrollReveal\",\n \"Tabs\"\n];\n\n/**\n * Behaviors grouped by category.\n */\nexport const BEHAVIORS_BY_CATEGORY: Record<BehaviorCategory, BehaviorName[]> = {\n \"ui\": [\n \"Draggable\",\n \"Sortable\",\n \"Resizable\",\n \"Clipboard\",\n \"AutoDismiss\",\n \"ClickOutside\",\n \"FocusTrap\",\n \"Tabs\"\n ],\n \"data\": [\n \"Removable\"\n ],\n \"animation\": [],\n \"form\": [\n \"Toggleable\"\n ],\n \"layout\": [\n \"ScrollReveal\"\n ]\n};\n\n/**\n * Behaviors grouped by tier.\n */\nexport const BEHAVIORS_BY_TIER: Record<BehaviorTier, BehaviorName[]> = {\n \"core\": [\n \"Draggable\",\n \"Toggleable\",\n \"Clipboard\",\n \"AutoDismiss\",\n \"ClickOutside\",\n \"FocusTrap\",\n \"Tabs\"\n ],\n \"common\": [\n \"Sortable\",\n \"Removable\",\n \"ScrollReveal\"\n ],\n \"optional\": [\n \"Resizable\"\n ]\n};\n\n/**\n * Category for each behavior.\n */\nexport const BEHAVIOR_CATEGORIES: Record<BehaviorName, BehaviorCategory> = {\n \"Draggable\": \"ui\",\n \"Sortable\": \"ui\",\n \"Resizable\": \"ui\",\n \"Removable\": \"data\",\n \"Toggleable\": \"form\",\n \"Clipboard\": \"ui\",\n \"AutoDismiss\": \"ui\",\n \"ClickOutside\": \"ui\",\n \"FocusTrap\": \"ui\",\n \"ScrollReveal\": \"layout\",\n \"Tabs\": \"ui\"\n};\n\n/**\n * Tier for each behavior.\n */\nexport const BEHAVIOR_TIERS: Record<BehaviorName, BehaviorTier> = {\n \"Draggable\": \"core\",\n \"Sortable\": \"common\",\n \"Resizable\": \"optional\",\n \"Removable\": \"common\",\n \"Toggleable\": \"core\",\n \"Clipboard\": \"core\",\n \"AutoDismiss\": \"core\",\n \"ClickOutside\": \"core\",\n \"FocusTrap\": \"core\",\n \"ScrollReveal\": \"common\",\n \"Tabs\": \"core\"\n};\n","/**\n * @hyperfixi/behaviors\n *\n * Reusable hyperscript behaviors for LokaScript.\n * Each behavior can be imported individually for tree-shaking,\n * or all behaviors can be registered at once.\n *\n * @example Individual import (tree-shakeable)\n * ```javascript\n * import { registerDraggable } from '@hyperfixi/behaviors/draggable';\n * await registerDraggable();\n * ```\n *\n * @example Import all\n * ```javascript\n * import { registerAll } from '@hyperfixi/behaviors';\n * await registerAll();\n * ```\n *\n * @example Registry-based lazy loading\n * ```javascript\n * import { loadBehavior, getBehaviorsByCategory } from '@hyperfixi/behaviors';\n * await loadBehavior('Draggable');\n * const uiBehaviors = getBehaviorsByCategory('ui');\n * ```\n *\n * @example CDN usage\n * ```html\n * <script src=\"lokascript-browser.js\"></script>\n * <script src=\"@hyperfixi/behaviors/draggable.browser.js\"></script>\n * <!-- Draggable is auto-registered -->\n * ```\n */\n\n// =============================================================================\n// Re-export individual behaviors\n// =============================================================================\n\nexport {\n draggableSource,\n draggableMetadata,\n registerDraggable,\n default as Draggable,\n} from './behaviors/draggable';\n\nexport {\n removableSource,\n removableMetadata,\n registerRemovable,\n default as Removable,\n} from './behaviors/removable';\n\nexport {\n toggleableSource,\n toggleableMetadata,\n registerToggleable,\n default as Toggleable,\n} from './behaviors/toggleable';\n\nexport {\n sortableSource,\n sortableMetadata,\n registerSortable,\n default as Sortable,\n} from './behaviors/sortable';\n\nexport {\n resizableSource,\n resizableMetadata,\n registerResizable,\n default as Resizable,\n} from './behaviors/resizable';\n\nexport {\n clipboardSource,\n clipboardMetadata,\n registerClipboard,\n default as Clipboard,\n} from './behaviors/clipboard';\n\nexport {\n autoDismissSource,\n autoDismissMetadata,\n registerAutoDismiss,\n default as AutoDismiss,\n} from './behaviors/autodismiss';\n\nexport {\n clickOutsideSource,\n clickOutsideMetadata,\n registerClickOutside,\n default as ClickOutside,\n} from './behaviors/clickoutside';\n\nexport {\n focusTrapSource,\n focusTrapMetadata,\n registerFocusTrap,\n default as FocusTrap,\n} from './behaviors/focustrap';\n\nexport {\n scrollRevealSource,\n scrollRevealMetadata,\n registerScrollReveal,\n default as ScrollReveal,\n} from './behaviors/scrollreveal';\n\nexport { tabsSource, tabsMetadata, registerTabs, default as Tabs } from './behaviors/tabs';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type {\n BehaviorSchema,\n BehaviorCategory,\n BehaviorTier,\n ParameterSchema,\n EventSchema,\n BehaviorModule,\n LokaScriptInstance,\n} from './schemas/types';\n\n// =============================================================================\n// Initialize registry with loaders (populates schemas and loaders)\n// =============================================================================\n\nimport './loaders';\n\n// =============================================================================\n// Registry exports\n// =============================================================================\n\nexport {\n // Registration\n registerBehavior,\n registerSchema,\n registerLoader,\n // Query (sync)\n getBehavior,\n tryGetBehavior,\n getSchema,\n tryGetSchema,\n isRegistered,\n hasLoader,\n getRegisteredBehaviors,\n getAvailableBehaviors,\n // Query by metadata\n getBehaviorsByCategory,\n getBehaviorsByTier,\n getAllSchemas,\n getAllSchemasRecord,\n // Lazy loading (async)\n loadBehavior,\n preloadTier,\n preloadCategory,\n loadAll,\n // Runtime registration\n registerWithRuntime,\n registerAllWithRuntime,\n} from './registry';\n\n// =============================================================================\n// Generated types and metadata\n// =============================================================================\n\nexport type {\n BehaviorName,\n UIBehavior,\n DataBehavior,\n AnimationBehavior,\n FormBehavior,\n LayoutBehavior,\n CoreBehavior,\n CommonBehavior,\n OptionalBehavior,\n} from './generated/types';\n\nexport {\n ALL_BEHAVIOR_NAMES,\n BEHAVIORS_BY_CATEGORY,\n BEHAVIORS_BY_TIER,\n BEHAVIOR_CATEGORIES,\n BEHAVIOR_TIERS,\n} from './generated/metadata';\n\n// =============================================================================\n// Convenience functions\n// =============================================================================\n\nimport { registerDraggable } from './behaviors/draggable';\nimport { registerRemovable } from './behaviors/removable';\nimport { registerToggleable } from './behaviors/toggleable';\nimport { registerSortable } from './behaviors/sortable';\nimport { registerResizable } from './behaviors/resizable';\nimport { registerClipboard } from './behaviors/clipboard';\nimport { registerAutoDismiss } from './behaviors/autodismiss';\nimport { registerClickOutside } from './behaviors/clickoutside';\nimport { registerFocusTrap } from './behaviors/focustrap';\nimport { registerScrollReveal } from './behaviors/scrollreveal';\nimport { registerTabs } from './behaviors/tabs';\nimport type { LokaScriptInstance } from './schemas/types';\nimport { resolveRuntime } from './schemas/types';\nimport type { LokaScriptWindow } from './schemas/types';\n\n/**\n * Register all behaviors with HyperFixi.\n *\n * @param hyperfixi - The hyperfixi instance (defaults to window.hyperfixi)\n * @returns Promise that resolves when all behaviors are registered\n *\n * @example\n * ```javascript\n * import { registerAll } from '@hyperfixi/behaviors';\n * await registerAll();\n * ```\n */\nexport async function registerAll(hyperfixi?: LokaScriptInstance): Promise<void> {\n await Promise.all([\n registerDraggable(hyperfixi),\n registerRemovable(hyperfixi),\n registerToggleable(hyperfixi),\n registerSortable(hyperfixi),\n registerResizable(hyperfixi),\n registerClipboard(hyperfixi),\n registerAutoDismiss(hyperfixi),\n registerClickOutside(hyperfixi),\n registerFocusTrap(hyperfixi),\n registerScrollReveal(hyperfixi),\n registerTabs(hyperfixi),\n ]);\n}\n\n// =============================================================================\n// Auto-registration for browser\n// =============================================================================\n\n/**\n * Promise that resolves when all behaviors are registered.\n * This is set when the package auto-registers in browser environments.\n */\nexport let ready: Promise<void> | null = null;\n\n// Auto-register all behaviors when loaded in browser with hyperfixi available\nconst _runtime = resolveRuntime();\nif (_runtime) {\n const lsWin = window as unknown as LokaScriptWindow;\n ready = registerAll(_runtime);\n\n lsWin.__hyperfixi_behaviors_ready = ready;\n\n ready\n .then(() => {\n const hf = _runtime as LokaScriptInstance & {\n attributeProcessor?: { scanAndProcessAll: () => Promise<void> };\n processNode?: (node: Document) => void;\n };\n const savedPromise = lsWin.__hyperfixi_behaviors_ready;\n delete lsWin.__hyperfixi_behaviors_ready;\n\n if (hf.attributeProcessor?.scanAndProcessAll) {\n hf.attributeProcessor.scanAndProcessAll().finally(() => {\n lsWin.__hyperfixi_behaviors_ready = savedPromise;\n });\n } else if (hf.processNode) {\n hf.processNode(document);\n lsWin.__hyperfixi_behaviors_ready = savedPromise;\n }\n })\n .catch(err => {\n console.error('[behaviors] Auto-registration failed:', err);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,IAAM,qBAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,wBAAkE;AAAA,EAC7E,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN;AAAA,EACF;AAAA,EACA,aAAa,CAAC;AAAA,EACd,QAAQ;AAAA,IACN;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,EACF;AACF;AAKO,IAAM,oBAA0D;AAAA,EACrE,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,EACF;AACF;AAKO,IAAM,sBAA8D;AAAA,EACzE,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,QAAQ;AACV;AAKO,IAAM,iBAAqD;AAAA,EAChE,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,QAAQ;AACV;;;AC8GA,eAAsB,YAAY,WAA+C;AAC/E,QAAM,QAAQ,IAAI;AAAA,IAChB,kBAAkB,SAAS;AAAA,IAC3B,kBAAkB,SAAS;AAAA,IAC3B,mBAAmB,SAAS;AAAA,IAC5B,iBAAiB,SAAS;AAAA,IAC1B,kBAAkB,SAAS;AAAA,IAC3B,kBAAkB,SAAS;AAAA,IAC3B,oBAAoB,SAAS;AAAA,IAC7B,qBAAqB,SAAS;AAAA,IAC9B,kBAAkB,SAAS;AAAA,IAC3B,qBAAqB,SAAS;AAAA,IAC9B,aAAa,SAAS;AAAA,EACxB,CAAC;AACH;AAUO,IAAI,QAA8B;AAGzC,IAAM,WAAW,eAAe;AAChC,IAAI,UAAU;AACZ,QAAM,QAAQ;AACd,UAAQ,YAAY,QAAQ;AAE5B,QAAM,8BAA8B;AAEpC,QACG,KAAK,MAAM;AACV,UAAM,KAAK;AAIX,UAAM,eAAe,MAAM;AAC3B,WAAO,MAAM;AAEb,QAAI,GAAG,oBAAoB,mBAAmB;AAC5C,SAAG,mBAAmB,kBAAkB,EAAE,QAAQ,MAAM;AACtD,cAAM,8BAA8B;AAAA,MACtC,CAAC;AAAA,IACH,WAAW,GAAG,aAAa;AACzB,SAAG,YAAY,QAAQ;AACvB,YAAM,8BAA8B;AAAA,IACtC;AAAA,EACF,CAAC,EACA,MAAM,SAAO;AACZ,YAAQ,MAAM,yCAAyC,GAAG;AAAA,EAC5D,CAAC;AACL;","names":[]}
1
+ {"version":3,"sources":["../src/generated/metadata.ts","../src/curation.ts","../src/index.ts"],"sourcesContent":["/**\n * Generated Metadata\n *\n * DO NOT EDIT - Generated by scripts/generate.ts\n * Run `npm run generate` to regenerate.\n */\n\nimport type { BehaviorCategory, BehaviorTier } from '../schemas/types';\nimport type { BehaviorName } from './types';\n\n/**\n * All behavior names.\n */\nexport const ALL_BEHAVIOR_NAMES: BehaviorName[] = [\n \"Draggable\",\n \"Sortable\",\n \"Resizable\",\n \"Removable\",\n \"Toggleable\",\n \"Clipboard\",\n \"AutoDismiss\",\n \"ClickOutside\",\n \"FocusTrap\",\n \"ScrollReveal\",\n \"Tabs\"\n];\n\n/**\n * Behaviors grouped by category.\n */\nexport const BEHAVIORS_BY_CATEGORY: Record<BehaviorCategory, BehaviorName[]> = {\n \"ui\": [\n \"Draggable\",\n \"Sortable\",\n \"Resizable\",\n \"Clipboard\",\n \"AutoDismiss\",\n \"ClickOutside\",\n \"FocusTrap\",\n \"Tabs\"\n ],\n \"data\": [\n \"Removable\"\n ],\n \"animation\": [],\n \"form\": [\n \"Toggleable\"\n ],\n \"layout\": [\n \"ScrollReveal\"\n ]\n};\n\n/**\n * Behaviors grouped by tier.\n */\nexport const BEHAVIORS_BY_TIER: Record<BehaviorTier, BehaviorName[]> = {\n \"core\": [\n \"Draggable\",\n \"Toggleable\",\n \"Clipboard\",\n \"AutoDismiss\",\n \"ClickOutside\",\n \"FocusTrap\",\n \"Tabs\"\n ],\n \"common\": [\n \"Sortable\",\n \"Removable\",\n \"ScrollReveal\"\n ],\n \"optional\": [\n \"Resizable\"\n ]\n};\n\n/**\n * Category for each behavior.\n */\nexport const BEHAVIOR_CATEGORIES: Record<BehaviorName, BehaviorCategory> = {\n \"Draggable\": \"ui\",\n \"Sortable\": \"ui\",\n \"Resizable\": \"ui\",\n \"Removable\": \"data\",\n \"Toggleable\": \"form\",\n \"Clipboard\": \"ui\",\n \"AutoDismiss\": \"ui\",\n \"ClickOutside\": \"ui\",\n \"FocusTrap\": \"ui\",\n \"ScrollReveal\": \"layout\",\n \"Tabs\": \"ui\"\n};\n\n/**\n * Tier for each behavior.\n */\nexport const BEHAVIOR_TIERS: Record<BehaviorName, BehaviorTier> = {\n \"Draggable\": \"core\",\n \"Sortable\": \"common\",\n \"Resizable\": \"optional\",\n \"Removable\": \"common\",\n \"Toggleable\": \"core\",\n \"Clipboard\": \"core\",\n \"AutoDismiss\": \"core\",\n \"ClickOutside\": \"core\",\n \"FocusTrap\": \"core\",\n \"ScrollReveal\": \"common\",\n \"Tabs\": \"core\"\n};\n","/**\n * Curation status — the product decision about which behaviors are first-class.\n *\n * This is ORTHOGONAL to {@link BehaviorTier} (core/common/optional), which is about\n * lazy-loading priority. Curation is about support level and the boundary rule:\n *\n * A behavior is a named, parameterized, *reusable inline script* — `on event →\n * DOM action`. Not a component. When it needs an observer, a focus model, or an\n * async pointer loop, it has left hyperfixi's lane.\n *\n * See docs-internal/BEHAVIORS_CONSOLIDATION_PLAN.md for the full rationale.\n */\n\nexport type CurationStatus = 'curated' | 'optional' | 'experimental';\n\n/**\n * Curated set — reliable, runtime-tested, multilingual. The supported story.\n * Real `on event → DOM action` behaviors (Tier A) plus two honestly-labeled\n * JS-backed conveniences (Clipboard, AutoDismiss).\n */\nexport const CURATED_BEHAVIORS = [\n 'Toggleable',\n 'Removable',\n 'ClickOutside',\n 'Clipboard',\n 'AutoDismiss',\n] as const;\n\n/**\n * Optional — useful, kept, documented as primitives / nice-to-haves.\n * FocusTrap + ClickOutside are the primitives a Modal composes from; ScrollReveal\n * is a nice-to-have; Tabs is high-value but heavy.\n */\nexport const OPTIONAL_BEHAVIORS = ['FocusTrap', 'ScrollReveal', 'Tabs'] as const;\n\n/**\n * Experimental — stateful async components (drag/sort/resize). These sit *beyond*\n * the inline-scripting boundary; kept working but explicitly outside the curated,\n * supported, marketed story.\n */\nexport const EXPERIMENTAL_BEHAVIORS = ['Draggable', 'Sortable', 'Resizable'] as const;\n\n/** Curation status for every behavior, keyed by name. */\nexport const CURATION_STATUS: Record<string, CurationStatus> = {\n ...Object.fromEntries(CURATED_BEHAVIORS.map(n => [n, 'curated' as const])),\n ...Object.fromEntries(OPTIONAL_BEHAVIORS.map(n => [n, 'optional' as const])),\n ...Object.fromEntries(EXPERIMENTAL_BEHAVIORS.map(n => [n, 'experimental' as const])),\n};\n\n/** Curation status for a behavior name, or undefined if unknown. */\nexport function curationStatusOf(name: string): CurationStatus | undefined {\n return CURATION_STATUS[name];\n}\n\n/** True for the curated, supported set. */\nexport function isCurated(name: string): boolean {\n return CURATION_STATUS[name] === 'curated';\n}\n","/**\n * @hyperfixi/behaviors\n *\n * Reusable hyperscript behaviors for LokaScript.\n * Each behavior can be imported individually for tree-shaking,\n * or all behaviors can be registered at once.\n *\n * @example Individual import (tree-shakeable)\n * ```javascript\n * import { registerDraggable } from '@hyperfixi/behaviors/draggable';\n * await registerDraggable();\n * ```\n *\n * @example Import all\n * ```javascript\n * import { registerAll } from '@hyperfixi/behaviors';\n * await registerAll();\n * ```\n *\n * @example Registry-based lazy loading\n * ```javascript\n * import { loadBehavior, getBehaviorsByCategory } from '@hyperfixi/behaviors';\n * await loadBehavior('Draggable');\n * const uiBehaviors = getBehaviorsByCategory('ui');\n * ```\n *\n * @example CDN usage\n * ```html\n * <script src=\"lokascript-browser.js\"></script>\n * <script src=\"@hyperfixi/behaviors/draggable.browser.js\"></script>\n * <!-- Draggable is auto-registered -->\n * ```\n */\n\n// =============================================================================\n// Re-export individual behaviors\n// =============================================================================\n\nexport {\n draggableSource,\n draggableMetadata,\n registerDraggable,\n default as Draggable,\n} from './behaviors/draggable';\n\nexport {\n removableSource,\n removableMetadata,\n registerRemovable,\n default as Removable,\n} from './behaviors/removable';\n\nexport {\n toggleableSource,\n toggleableMetadata,\n registerToggleable,\n default as Toggleable,\n} from './behaviors/toggleable';\n\nexport {\n sortableSource,\n sortableMetadata,\n registerSortable,\n default as Sortable,\n} from './behaviors/sortable';\n\nexport {\n resizableSource,\n resizableMetadata,\n registerResizable,\n default as Resizable,\n} from './behaviors/resizable';\n\nexport {\n clipboardSource,\n clipboardMetadata,\n registerClipboard,\n default as Clipboard,\n} from './behaviors/clipboard';\n\nexport {\n autoDismissSource,\n autoDismissMetadata,\n registerAutoDismiss,\n default as AutoDismiss,\n} from './behaviors/autodismiss';\n\nexport {\n clickOutsideSource,\n clickOutsideMetadata,\n registerClickOutside,\n default as ClickOutside,\n} from './behaviors/clickoutside';\n\nexport {\n focusTrapSource,\n focusTrapMetadata,\n registerFocusTrap,\n default as FocusTrap,\n} from './behaviors/focustrap';\n\nexport {\n scrollRevealSource,\n scrollRevealMetadata,\n registerScrollReveal,\n default as ScrollReveal,\n} from './behaviors/scrollreveal';\n\nexport { tabsSource, tabsMetadata, registerTabs, default as Tabs } from './behaviors/tabs';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type {\n BehaviorSchema,\n BehaviorCategory,\n BehaviorTier,\n ParameterSchema,\n EventSchema,\n BehaviorModule,\n LokaScriptInstance,\n} from './schemas/types';\n\n// =============================================================================\n// Initialize registry with loaders (populates schemas and loaders)\n// =============================================================================\n\nimport './loaders';\n\n// =============================================================================\n// Registry exports\n// =============================================================================\n\nexport {\n // Registration\n registerBehavior,\n registerSchema,\n registerLoader,\n // Query (sync)\n getBehavior,\n tryGetBehavior,\n getSchema,\n tryGetSchema,\n isRegistered,\n hasLoader,\n getRegisteredBehaviors,\n getAvailableBehaviors,\n // Query by metadata\n getBehaviorsByCategory,\n getBehaviorsByTier,\n getAllSchemas,\n getAllSchemasRecord,\n // Lazy loading (async)\n loadBehavior,\n preloadTier,\n preloadCategory,\n loadAll,\n // Runtime registration\n registerWithRuntime,\n registerAllWithRuntime,\n} from './registry';\n\n// =============================================================================\n// Generated types and metadata\n// =============================================================================\n\nexport type {\n BehaviorName,\n UIBehavior,\n DataBehavior,\n AnimationBehavior,\n FormBehavior,\n LayoutBehavior,\n CoreBehavior,\n CommonBehavior,\n OptionalBehavior,\n} from './generated/types';\n\nexport {\n ALL_BEHAVIOR_NAMES,\n BEHAVIORS_BY_CATEGORY,\n BEHAVIORS_BY_TIER,\n BEHAVIOR_CATEGORIES,\n BEHAVIOR_TIERS,\n} from './generated/metadata';\n\n// =============================================================================\n// Curation status (curated / optional / experimental) — see curation.ts\n// =============================================================================\n\nexport type { CurationStatus } from './curation';\nexport {\n CURATED_BEHAVIORS,\n OPTIONAL_BEHAVIORS,\n EXPERIMENTAL_BEHAVIORS,\n CURATION_STATUS,\n curationStatusOf,\n isCurated,\n} from './curation';\n\n// =============================================================================\n// Convenience functions\n// =============================================================================\n\nimport { registerDraggable } from './behaviors/draggable';\nimport { registerRemovable } from './behaviors/removable';\nimport { registerToggleable } from './behaviors/toggleable';\nimport { registerSortable } from './behaviors/sortable';\nimport { registerResizable } from './behaviors/resizable';\nimport { registerClipboard } from './behaviors/clipboard';\nimport { registerAutoDismiss } from './behaviors/autodismiss';\nimport { registerClickOutside } from './behaviors/clickoutside';\nimport { registerFocusTrap } from './behaviors/focustrap';\nimport { registerScrollReveal } from './behaviors/scrollreveal';\nimport { registerTabs } from './behaviors/tabs';\nimport type { LokaScriptInstance } from './schemas/types';\nimport { resolveRuntime } from './schemas/types';\nimport type { LokaScriptWindow } from './schemas/types';\n\n/**\n * Register all behaviors with HyperFixi.\n *\n * @param hyperfixi - The hyperfixi instance (defaults to window.hyperfixi)\n * @returns Promise that resolves when all behaviors are registered\n *\n * @example\n * ```javascript\n * import { registerAll } from '@hyperfixi/behaviors';\n * await registerAll();\n * ```\n */\nexport async function registerAll(hyperfixi?: LokaScriptInstance): Promise<void> {\n await Promise.all([\n registerDraggable(hyperfixi),\n registerRemovable(hyperfixi),\n registerToggleable(hyperfixi),\n registerSortable(hyperfixi),\n registerResizable(hyperfixi),\n registerClipboard(hyperfixi),\n registerAutoDismiss(hyperfixi),\n registerClickOutside(hyperfixi),\n registerFocusTrap(hyperfixi),\n registerScrollReveal(hyperfixi),\n registerTabs(hyperfixi),\n ]);\n}\n\n// =============================================================================\n// Auto-registration for browser\n// =============================================================================\n\n/**\n * Promise that resolves when all behaviors are registered.\n * This is set when the package auto-registers in browser environments.\n */\nexport let ready: Promise<void> | null = null;\n\n// Auto-register all behaviors when loaded in browser with hyperfixi available\nconst _runtime = resolveRuntime();\nif (_runtime) {\n const lsWin = window as unknown as LokaScriptWindow;\n ready = registerAll(_runtime);\n\n lsWin.__hyperfixi_behaviors_ready = ready;\n\n ready\n .then(() => {\n const hf = _runtime as LokaScriptInstance & {\n attributeProcessor?: { scanAndProcessAll: () => Promise<void> };\n processNode?: (node: Document) => void;\n };\n const savedPromise = lsWin.__hyperfixi_behaviors_ready;\n delete lsWin.__hyperfixi_behaviors_ready;\n\n if (hf.attributeProcessor?.scanAndProcessAll) {\n hf.attributeProcessor.scanAndProcessAll().finally(() => {\n lsWin.__hyperfixi_behaviors_ready = savedPromise;\n });\n } else if (hf.processNode) {\n hf.processNode(document);\n lsWin.__hyperfixi_behaviors_ready = savedPromise;\n }\n })\n .catch(err => {\n console.error('[behaviors] Auto-registration failed:', err);\n });\n}\n"],"mappings":"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","names":[]}