@almadar/std 1.0.0 → 1.0.1

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 (40) hide show
  1. package/dist/behaviors/async.d.ts +8 -8
  2. package/dist/behaviors/async.js +548 -500
  3. package/dist/behaviors/async.js.map +1 -1
  4. package/dist/behaviors/data-management.d.ts +11 -19
  5. package/dist/behaviors/data-management.js +468 -449
  6. package/dist/behaviors/data-management.js.map +1 -1
  7. package/dist/behaviors/feedback.d.ts +6 -6
  8. package/dist/behaviors/feedback.js +312 -278
  9. package/dist/behaviors/feedback.js.map +1 -1
  10. package/dist/behaviors/game-core.d.ts +11 -12
  11. package/dist/behaviors/game-core.js +357 -406
  12. package/dist/behaviors/game-core.js.map +1 -1
  13. package/dist/behaviors/game-entity.d.ts +13 -14
  14. package/dist/behaviors/game-entity.js +622 -592
  15. package/dist/behaviors/game-entity.js.map +1 -1
  16. package/dist/behaviors/game-ui.d.ts +9 -10
  17. package/dist/behaviors/game-ui.js +522 -459
  18. package/dist/behaviors/game-ui.js.map +1 -1
  19. package/dist/behaviors/index.d.ts +3 -3
  20. package/dist/behaviors/index.js +3876 -3843
  21. package/dist/behaviors/index.js.map +1 -1
  22. package/dist/behaviors/registry.d.ts +14 -24
  23. package/dist/behaviors/registry.js +3868 -3803
  24. package/dist/behaviors/registry.js.map +1 -1
  25. package/dist/behaviors/types.d.ts +14 -138
  26. package/dist/behaviors/types.js +10 -47
  27. package/dist/behaviors/types.js.map +1 -1
  28. package/dist/behaviors/ui-interaction.d.ts +13 -20
  29. package/dist/behaviors/ui-interaction.js +961 -1043
  30. package/dist/behaviors/ui-interaction.js.map +1 -1
  31. package/dist/index.d.ts +44 -11
  32. package/dist/index.js +3913 -3870
  33. package/dist/index.js.map +1 -1
  34. package/dist/modules/index.js +11 -0
  35. package/dist/modules/index.js.map +1 -1
  36. package/dist/modules/str.js +11 -0
  37. package/dist/modules/str.js.map +1 -1
  38. package/dist/registry.js +11 -0
  39. package/dist/registry.js.map +1 -1
  40. package/package.json +3 -2
@@ -1,102 +1,19 @@
1
- import { SExpr, RequiredField } from '@almadar/core/types';
1
+ import { TraitCategory, Trait, SExpr } from '@almadar/core/types';
2
+ export { Effect, Entity, Event, Expression, Guard, Orbital, OrbitalSchema, State, StateMachine, Trait, TraitCategory, TraitDataEntity, TraitEntityField, TraitTick, Transition } from '@almadar/core/types';
2
3
 
3
4
  /**
4
5
  * Standard Behaviors Types
5
6
  *
6
- * Standard Behaviors are reusable Traits with a `std/` naming convention.
7
- * They use a more flexible state machine format optimized for authoring.
8
- *
9
- * ARCHITECTURE: Behaviors ARE Traits conceptually. They use:
10
- * - stateMachine: BehaviorStateMachine (flexible states, events, transitions)
11
- * - ticks: BehaviorTick[] (frame-by-frame execution for games)
12
- * - dataEntities: BehaviorDataEntity[] (runtime state)
7
+ * Standard Behaviors are reusable OrbitalSchema definitions with a `std-` naming convention.
8
+ * Each behavior is a self-contained .orb file that can function independently.
13
9
  *
14
10
  * @packageDocumentation
15
11
  */
16
12
 
17
13
  /**
18
- * Categories of Standard Behaviors
19
- */
20
- declare const BEHAVIOR_CATEGORIES: readonly ["ui-interaction", "data-management", "async", "feedback", "game-core", "game-entity", "game-ui"];
21
- type BehaviorCategory = (typeof BEHAVIOR_CATEGORIES)[number];
22
- type FieldType = 'string' | 'number' | 'boolean' | 'array' | 'object' | 'entity' | 'slot' | 'pattern' | 'event' | 'action[]';
23
- interface ConfigField {
24
- name: string;
25
- type: FieldType;
26
- description: string;
27
- default?: unknown;
28
- enum?: string[];
29
- }
30
- /**
31
- * State definition - can be string or object
32
- */
33
- interface BehaviorState {
34
- name: string;
35
- isInitial?: boolean;
36
- isFinal?: boolean;
37
- description?: string;
38
- }
39
- /**
40
- * Event definition - simplified, only key required
41
- */
42
- interface BehaviorEvent {
43
- key: string;
44
- name?: string;
45
- description?: string;
46
- payload?: Record<string, unknown>;
47
- }
48
- /**
49
- * Transition definition - flexible from/to
50
- */
51
- interface BehaviorTransition {
52
- /** Source state(s) - string, '*' for any, or array */
53
- from?: string | string[] | '*';
54
- /** Target state - optional for self-transitions */
55
- to?: string;
56
- /** Event that triggers this transition */
57
- event: string;
58
- /** Guard condition (S-expression) */
59
- guard?: SExpr;
60
- /** Effects to execute (S-expressions) */
61
- effects?: SExpr[];
62
- }
63
- /**
64
- * State machine for behaviors - more flexible than core StateMachine
14
+ * @deprecated Use OrbitalSchema directly. BehaviorTrait is kept for backward compatibility.
65
15
  */
66
- interface BehaviorStateMachine {
67
- initial: string;
68
- states: (string | BehaviorState)[];
69
- events: (string | BehaviorEvent)[];
70
- transitions: BehaviorTransition[];
71
- guards?: Array<{
72
- name: string;
73
- condition: SExpr;
74
- description?: string;
75
- }>;
76
- }
77
- interface BehaviorTick {
78
- name: string;
79
- description?: string;
80
- priority?: number;
81
- interval: 'frame' | number;
82
- appliesTo?: string[];
83
- guard?: SExpr;
84
- effects: SExpr[];
85
- }
86
- interface BehaviorEntityField {
87
- name: string;
88
- type: string;
89
- default?: unknown;
90
- required?: boolean;
91
- description?: string;
92
- }
93
- interface BehaviorDataEntity {
94
- name: string;
95
- runtime?: boolean;
96
- singleton?: boolean;
97
- fields: BehaviorEntityField[];
98
- description?: string;
99
- }
16
+ type BehaviorTrait = Trait;
100
17
  interface ItemAction {
101
18
  label: string;
102
19
  event?: string;
@@ -106,74 +23,33 @@ interface ItemAction {
106
23
  showWhen?: SExpr | string;
107
24
  }
108
25
  /**
109
- * Configuration schema for documentation and IDE hints
110
- */
111
- interface BehaviorConfig {
112
- required: ConfigField[];
113
- optional: ConfigField[];
114
- }
115
- /**
116
- * Standard Behavior definition
117
- */
118
- interface StandardBehavior {
119
- /** Behavior identifier (e.g., 'std/List', 'std/Form') */
120
- name: string;
121
- /** Category for organization */
122
- category: BehaviorCategory;
123
- /** Human-readable description */
124
- description: string;
125
- /** When to use this behavior */
126
- suggestedFor?: string[];
127
- /** Configuration schema for IDE hints */
128
- configSchema?: BehaviorConfig;
129
- /** State machine definition */
130
- stateMachine?: BehaviorStateMachine;
131
- /** Required fields from linked entity */
132
- requiredFields?: RequiredField[];
133
- /** Runtime data entities */
134
- dataEntities?: BehaviorDataEntity[];
135
- /** Frame-by-frame execution */
136
- ticks?: BehaviorTick[];
137
- /** Cross-behavior event listeners */
138
- listens?: Array<{
139
- event: string;
140
- triggers: string;
141
- guard?: SExpr;
142
- }>;
143
- /** Initial effects on behavior activation */
144
- initialEffects?: SExpr[];
145
- }
146
- /**
147
- * Behavior metadata for quick lookup
26
+ * Behavior metadata extracted from a Trait for documentation purposes
148
27
  */
149
28
  interface BehaviorMetadata {
150
29
  name: string;
151
- category: BehaviorCategory;
30
+ category?: TraitCategory;
152
31
  description: string;
153
- suggestedFor: string[];
154
32
  states: string[];
155
33
  events: string[];
156
34
  tickCount: number;
157
35
  transitionCount: number;
158
36
  hasDataEntities: boolean;
159
37
  }
160
- declare function isBehaviorCategory(value: string): value is BehaviorCategory;
161
- declare function isGameBehaviorCategory(category: BehaviorCategory): boolean;
162
38
  /**
163
- * Extract metadata from a StandardBehavior
39
+ * Extract metadata from a BehaviorTrait for documentation
164
40
  */
165
- declare function getBehaviorMetadata(behavior: StandardBehavior): BehaviorMetadata;
41
+ declare function getBehaviorMetadata(behavior: BehaviorTrait): BehaviorMetadata;
166
42
  /**
167
43
  * Validate behavior structure
168
44
  */
169
- declare function validateBehaviorStructure(behavior: StandardBehavior): string[];
45
+ declare function validateBehaviorStructure(behavior: BehaviorTrait): string[];
170
46
  /**
171
47
  * Validate behavior events match transitions
172
48
  */
173
- declare function validateBehaviorEvents(behavior: StandardBehavior): string[];
49
+ declare function validateBehaviorEvents(behavior: BehaviorTrait): string[];
174
50
  /**
175
51
  * Validate behavior states match transitions
176
52
  */
177
- declare function validateBehaviorStates(behavior: StandardBehavior): string[];
53
+ declare function validateBehaviorStates(behavior: BehaviorTrait): string[];
178
54
 
179
- export { BEHAVIOR_CATEGORIES, type BehaviorCategory, type BehaviorConfig, type BehaviorDataEntity, type BehaviorEntityField, type BehaviorEvent, type BehaviorMetadata, type BehaviorState, type BehaviorStateMachine, type BehaviorTick, type BehaviorTransition, type ConfigField, type FieldType, type ItemAction, type StandardBehavior, getBehaviorMetadata, isBehaviorCategory, isGameBehaviorCategory, validateBehaviorEvents, validateBehaviorStates, validateBehaviorStructure };
55
+ export { type BehaviorMetadata, type BehaviorTrait, type ItemAction, getBehaviorMetadata, validateBehaviorEvents, validateBehaviorStates, validateBehaviorStructure };
@@ -1,39 +1,12 @@
1
1
  // behaviors/types.ts
2
- var BEHAVIOR_CATEGORIES = [
3
- "ui-interaction",
4
- // User interface state management
5
- "data-management",
6
- // Data operations and state
7
- "async",
8
- // Asynchronous workflows
9
- "feedback",
10
- // User feedback and confirmations
11
- "game-core",
12
- // Game loop and systems
13
- "game-entity",
14
- // Game entity behaviors
15
- "game-ui"
16
- // Game interface
17
- ];
18
- function isBehaviorCategory(value) {
19
- return BEHAVIOR_CATEGORIES.includes(value);
20
- }
21
- function isGameBehaviorCategory(category) {
22
- return category.startsWith("game-");
23
- }
24
2
  function getBehaviorMetadata(behavior) {
25
3
  const sm = behavior.stateMachine;
26
- const states = (sm?.states || []).map(
27
- (s) => typeof s === "string" ? s : s.name
28
- );
29
- const events = (sm?.events || []).map(
30
- (e) => typeof e === "string" ? e : e.key
31
- );
4
+ const states = (sm?.states || []).map((s) => s.name);
5
+ const events = (sm?.events || []).map((e) => e.key);
32
6
  return {
33
7
  name: behavior.name,
34
8
  category: behavior.category,
35
9
  description: behavior.description || "",
36
- suggestedFor: behavior.suggestedFor || [],
37
10
  states,
38
11
  events,
39
12
  tickCount: behavior.ticks?.length || 0,
@@ -49,19 +22,14 @@ function validateBehaviorStructure(behavior) {
49
22
  if (!behavior.name.startsWith("std/")) {
50
23
  errors.push(`Behavior name should start with 'std/' (got: ${behavior.name})`);
51
24
  }
52
- if (!behavior.category) {
53
- errors.push("Behavior must have a category");
54
- }
55
- if (!isBehaviorCategory(behavior.category)) {
56
- errors.push(`Invalid category: ${behavior.category}`);
57
- }
58
25
  const sm = behavior.stateMachine;
59
26
  if (sm) {
60
27
  if (!sm.states || sm.states.length === 0) {
61
28
  errors.push("State machine must have at least one state");
62
29
  }
63
- if (!sm.initial) {
64
- errors.push("State machine must have an initial state");
30
+ const hasInitialState = sm.states?.some((s) => s.isInitial);
31
+ if (!hasInitialState) {
32
+ errors.push("State machine must have an initial state (set isInitial: true on one state)");
65
33
  }
66
34
  }
67
35
  return errors;
@@ -71,7 +39,7 @@ function validateBehaviorEvents(behavior) {
71
39
  const sm = behavior.stateMachine;
72
40
  if (!sm) return errors;
73
41
  const declaredEvents = new Set(
74
- (sm.events || []).map((e) => typeof e === "string" ? e : e.key)
42
+ (sm.events || []).map((e) => e.key)
75
43
  );
76
44
  const transitionEvents = new Set(
77
45
  (sm.transitions || []).map((t) => t.event)
@@ -88,16 +56,11 @@ function validateBehaviorStates(behavior) {
88
56
  const sm = behavior.stateMachine;
89
57
  if (!sm) return errors;
90
58
  const declaredStates = new Set(
91
- (sm.states || []).map((s) => typeof s === "string" ? s : s.name)
59
+ (sm.states || []).map((s) => s.name)
92
60
  );
93
61
  for (const t of sm.transitions || []) {
94
- if (t.from && t.from !== "*") {
95
- const fromStates = Array.isArray(t.from) ? t.from : [t.from];
96
- for (const state of fromStates) {
97
- if (!declaredStates.has(state)) {
98
- errors.push(`Transition from undeclared state: ${state}`);
99
- }
100
- }
62
+ if (t.from && !declaredStates.has(t.from)) {
63
+ errors.push(`Transition from undeclared state: ${t.from}`);
101
64
  }
102
65
  if (t.to && !declaredStates.has(t.to)) {
103
66
  errors.push(`Transition to undeclared state: ${t.to}`);
@@ -106,6 +69,6 @@ function validateBehaviorStates(behavior) {
106
69
  return errors;
107
70
  }
108
71
 
109
- export { BEHAVIOR_CATEGORIES, getBehaviorMetadata, isBehaviorCategory, isGameBehaviorCategory, validateBehaviorEvents, validateBehaviorStates, validateBehaviorStructure };
72
+ export { getBehaviorMetadata, validateBehaviorEvents, validateBehaviorStates, validateBehaviorStructure };
110
73
  //# sourceMappingURL=types.js.map
111
74
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../behaviors/types.ts"],"names":[],"mappings":"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","file":"types.js","sourcesContent":["/**\n * Standard Behaviors Types\n *\n * Standard Behaviors are reusable Traits with a `std/` naming convention.\n * They use a more flexible state machine format optimized for authoring.\n *\n * ARCHITECTURE: Behaviors ARE Traits conceptually. They use:\n * - stateMachine: BehaviorStateMachine (flexible states, events, transitions)\n * - ticks: BehaviorTick[] (frame-by-frame execution for games)\n * - dataEntities: BehaviorDataEntity[] (runtime state)\n *\n * @packageDocumentation\n */\n\nimport type { SExpr, RequiredField } from '@almadar/core/types';\n\n// ============================================================================\n// Behavior Categories\n// ============================================================================\n\n/**\n * Categories of Standard Behaviors\n */\nexport const BEHAVIOR_CATEGORIES = [\n 'ui-interaction', // User interface state management\n 'data-management', // Data operations and state\n 'async', // Asynchronous workflows\n 'feedback', // User feedback and confirmations\n 'game-core', // Game loop and systems\n 'game-entity', // Game entity behaviors\n 'game-ui', // Game interface\n] as const;\n\nexport type BehaviorCategory = (typeof BEHAVIOR_CATEGORIES)[number];\n\n// ============================================================================\n// Config Field Types (for IDE hints and documentation)\n// ============================================================================\n\nexport type FieldType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'array'\n | 'object'\n | 'entity'\n | 'slot'\n | 'pattern'\n | 'event'\n | 'action[]';\n\nexport interface ConfigField {\n name: string;\n type: FieldType;\n description: string;\n default?: unknown;\n enum?: string[];\n}\n\n// ============================================================================\n// Behavior State Machine Types (flexible for authoring)\n// ============================================================================\n\n/**\n * State definition - can be string or object\n */\nexport interface BehaviorState {\n name: string;\n isInitial?: boolean;\n isFinal?: boolean;\n description?: string;\n}\n\n/**\n * Event definition - simplified, only key required\n */\nexport interface BehaviorEvent {\n key: string;\n name?: string;\n description?: string;\n payload?: Record<string, unknown>;\n}\n\n/**\n * Transition definition - flexible from/to\n */\nexport interface BehaviorTransition {\n /** Source state(s) - string, '*' for any, or array */\n from?: string | string[] | '*';\n /** Target state - optional for self-transitions */\n to?: string;\n /** Event that triggers this transition */\n event: string;\n /** Guard condition (S-expression) */\n guard?: SExpr;\n /** Effects to execute (S-expressions) */\n effects?: SExpr[];\n}\n\n/**\n * State machine for behaviors - more flexible than core StateMachine\n */\nexport interface BehaviorStateMachine {\n initial: string;\n states: (string | BehaviorState)[];\n events: (string | BehaviorEvent)[];\n transitions: BehaviorTransition[];\n guards?: Array<{\n name: string;\n condition: SExpr;\n description?: string;\n }>;\n}\n\n// ============================================================================\n// Behavior Tick (for frame-by-frame execution)\n// ============================================================================\n\nexport interface BehaviorTick {\n name: string;\n description?: string;\n priority?: number;\n interval: 'frame' | number;\n appliesTo?: string[];\n guard?: SExpr;\n effects: SExpr[];\n}\n\n// ============================================================================\n// Behavior Data Entity (runtime state)\n// ============================================================================\n\nexport interface BehaviorEntityField {\n name: string;\n type: string;\n default?: unknown;\n required?: boolean;\n description?: string;\n}\n\nexport interface BehaviorDataEntity {\n name: string;\n runtime?: boolean;\n singleton?: boolean;\n fields: BehaviorEntityField[];\n description?: string;\n}\n\n// ============================================================================\n// Item Action (for render_ui props)\n// ============================================================================\n\nexport interface ItemAction {\n label: string;\n event?: string;\n navigatesTo?: string;\n placement?: 'row' | 'bulk' | 'card' | 'footer' | 'header';\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n showWhen?: SExpr | string;\n}\n\n// ============================================================================\n// Standard Behavior Interface\n// ============================================================================\n\n/**\n * Configuration schema for documentation and IDE hints\n */\nexport interface BehaviorConfig {\n required: ConfigField[];\n optional: ConfigField[];\n}\n\n/**\n * Standard Behavior definition\n */\nexport interface StandardBehavior {\n /** Behavior identifier (e.g., 'std/List', 'std/Form') */\n name: string;\n\n /** Category for organization */\n category: BehaviorCategory;\n\n /** Human-readable description */\n description: string;\n\n // ========== Documentation Extensions ==========\n\n /** When to use this behavior */\n suggestedFor?: string[];\n\n /** Configuration schema for IDE hints */\n configSchema?: BehaviorConfig;\n\n // ========== State Machine ==========\n\n /** State machine definition */\n stateMachine?: BehaviorStateMachine;\n\n // ========== Trait Features ==========\n\n /** Required fields from linked entity */\n requiredFields?: RequiredField[];\n\n /** Runtime data entities */\n dataEntities?: BehaviorDataEntity[];\n\n /** Frame-by-frame execution */\n ticks?: BehaviorTick[];\n\n /** Cross-behavior event listeners */\n listens?: Array<{\n event: string;\n triggers: string;\n guard?: SExpr;\n }>;\n\n /** Initial effects on behavior activation */\n initialEffects?: SExpr[];\n}\n\n/**\n * Behavior metadata for quick lookup\n */\nexport interface BehaviorMetadata {\n name: string;\n category: BehaviorCategory;\n description: string;\n suggestedFor: string[];\n states: string[];\n events: string[];\n tickCount: number;\n transitionCount: number;\n hasDataEntities: boolean;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nexport function isBehaviorCategory(value: string): value is BehaviorCategory {\n return BEHAVIOR_CATEGORIES.includes(value as BehaviorCategory);\n}\n\nexport function isGameBehaviorCategory(category: BehaviorCategory): boolean {\n return category.startsWith('game-');\n}\n\n/**\n * Extract metadata from a StandardBehavior\n */\nexport function getBehaviorMetadata(behavior: StandardBehavior): BehaviorMetadata {\n const sm = behavior.stateMachine;\n\n const states: string[] = (sm?.states || []).map(s =>\n typeof s === 'string' ? s : s.name\n );\n\n const events: string[] = (sm?.events || []).map(e =>\n typeof e === 'string' ? e : e.key\n );\n\n return {\n name: behavior.name,\n category: behavior.category,\n description: behavior.description || '',\n suggestedFor: behavior.suggestedFor || [],\n states,\n events,\n tickCount: behavior.ticks?.length || 0,\n transitionCount: sm?.transitions?.length || 0,\n hasDataEntities: (behavior.dataEntities?.length || 0) > 0,\n };\n}\n\n/**\n * Validate behavior structure\n */\nexport function validateBehaviorStructure(behavior: StandardBehavior): string[] {\n const errors: string[] = [];\n\n if (!behavior.name) {\n errors.push('Behavior must have a name');\n }\n\n if (!behavior.name.startsWith('std/')) {\n errors.push(`Behavior name should start with 'std/' (got: ${behavior.name})`);\n }\n\n if (!behavior.category) {\n errors.push('Behavior must have a category');\n }\n\n if (!isBehaviorCategory(behavior.category)) {\n errors.push(`Invalid category: ${behavior.category}`);\n }\n\n const sm = behavior.stateMachine;\n if (sm) {\n if (!sm.states || sm.states.length === 0) {\n errors.push('State machine must have at least one state');\n }\n\n if (!sm.initial) {\n errors.push('State machine must have an initial state');\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior events match transitions\n */\nexport function validateBehaviorEvents(behavior: StandardBehavior): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n const declaredEvents = new Set(\n (sm.events || []).map(e => typeof e === 'string' ? e : e.key)\n );\n\n const transitionEvents = new Set(\n (sm.transitions || []).map(t => t.event)\n );\n\n for (const event of transitionEvents) {\n if (event && !declaredEvents.has(event)) {\n errors.push(`Transition uses undeclared event: ${event}`);\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior states match transitions\n */\nexport function validateBehaviorStates(behavior: StandardBehavior): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n const declaredStates = new Set(\n (sm.states || []).map(s => typeof s === 'string' ? s : s.name)\n );\n\n for (const t of sm.transitions || []) {\n // Check 'from' states (allow '*' and arrays)\n if (t.from && t.from !== '*') {\n const fromStates = Array.isArray(t.from) ? t.from : [t.from];\n for (const state of fromStates) {\n if (!declaredStates.has(state)) {\n errors.push(`Transition from undeclared state: ${state}`);\n }\n }\n }\n\n // Check 'to' state (optional)\n if (t.to && !declaredStates.has(t.to)) {\n errors.push(`Transition to undeclared state: ${t.to}`);\n }\n }\n\n return errors;\n}\n"]}
1
+ {"version":3,"sources":["../../behaviors/types.ts"],"names":[],"mappings":"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","file":"types.js","sourcesContent":["/**\n * Standard Behaviors Types\n *\n * Standard Behaviors are reusable OrbitalSchema definitions with a `std-` naming convention.\n * Each behavior is a self-contained .orb file that can function independently.\n *\n * @packageDocumentation\n */\n\nimport type {\n SExpr,\n RequiredField,\n Effect,\n Expression,\n Trait,\n TraitCategory,\n StateMachine,\n State,\n Event,\n Transition,\n Guard,\n TraitTick,\n TraitDataEntity,\n TraitEntityField,\n TraitEventListener,\n OrbitalSchema,\n Orbital,\n Entity,\n} from '@almadar/core/types';\n\n// Re-export core types for use in behaviors\nexport type {\n Effect,\n Expression,\n Trait,\n StateMachine,\n State,\n Event,\n Transition,\n Guard,\n TraitTick,\n TraitDataEntity,\n TraitEntityField,\n TraitCategory,\n OrbitalSchema,\n Orbital,\n Entity,\n};\n\n// ============================================================================\n// Legacy Type Aliases (for backward compatibility only)\n// ============================================================================\n\n/**\n * @deprecated Use OrbitalSchema directly. BehaviorTrait is kept for backward compatibility.\n */\nexport type BehaviorTrait = Trait;\n\n// ============================================================================\n// Item Action (for render_ui props)\n// ============================================================================\n\nexport interface ItemAction {\n label: string;\n event?: string;\n navigatesTo?: string;\n placement?: 'row' | 'bulk' | 'card' | 'footer' | 'header';\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n showWhen?: SExpr | string;\n}\n\n// ============================================================================\n// Behavior Metadata (for quick lookup and documentation)\n// ============================================================================\n\n/**\n * Behavior metadata extracted from a Trait for documentation purposes\n */\nexport interface BehaviorMetadata {\n name: string;\n category?: TraitCategory;\n description: string;\n states: string[];\n events: string[];\n tickCount: number;\n transitionCount: number;\n hasDataEntities: boolean;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Extract metadata from a BehaviorTrait for documentation\n */\nexport function getBehaviorMetadata(behavior: BehaviorTrait): BehaviorMetadata {\n const sm = behavior.stateMachine;\n\n // Core types: State is always an object with name\n const states: string[] = (sm?.states || []).map(s => s.name);\n\n // Core types: Event is always an object with key\n const events: string[] = (sm?.events || []).map(e => e.key);\n\n return {\n name: behavior.name,\n category: behavior.category,\n description: behavior.description || '',\n states,\n events,\n tickCount: behavior.ticks?.length || 0,\n transitionCount: sm?.transitions?.length || 0,\n hasDataEntities: (behavior.dataEntities?.length || 0) > 0,\n };\n}\n\n/**\n * Validate behavior structure\n */\nexport function validateBehaviorStructure(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n\n if (!behavior.name) {\n errors.push('Behavior must have a name');\n }\n\n if (!behavior.name.startsWith('std/')) {\n errors.push(`Behavior name should start with 'std/' (got: ${behavior.name})`);\n }\n\n const sm = behavior.stateMachine;\n if (sm) {\n if (!sm.states || sm.states.length === 0) {\n errors.push('State machine must have at least one state');\n }\n\n // Core types: check initial state using isInitial flag on State\n const hasInitialState = sm.states?.some(s => s.isInitial);\n if (!hasInitialState) {\n errors.push('State machine must have an initial state (set isInitial: true on one state)');\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior events match transitions\n */\nexport function validateBehaviorEvents(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n // Core types: Event is always an object with key\n const declaredEvents = new Set(\n (sm.events || []).map(e => e.key)\n );\n\n const transitionEvents = new Set(\n (sm.transitions || []).map(t => t.event)\n );\n\n for (const event of transitionEvents) {\n if (event && !declaredEvents.has(event)) {\n errors.push(`Transition uses undeclared event: ${event}`);\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior states match transitions\n */\nexport function validateBehaviorStates(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n // Core types: State is always an object with name\n const declaredStates = new Set(\n (sm.states || []).map(s => s.name)\n );\n\n for (const t of sm.transitions || []) {\n // Core types: from and to are both strings\n if (t.from && !declaredStates.has(t.from)) {\n errors.push(`Transition from undeclared state: ${t.from}`);\n }\n\n if (t.to && !declaredStates.has(t.to)) {\n errors.push(`Transition to undeclared state: ${t.to}`);\n }\n }\n\n return errors;\n}\n"]}
@@ -1,36 +1,29 @@
1
- import { StandardBehavior } from './types.js';
2
- import '@almadar/core/types';
1
+ import { OrbitalSchema } from '@almadar/core/types';
3
2
 
4
3
  /**
5
4
  * UI Interaction Behaviors
6
5
  *
7
6
  * Standard behaviors for common UI interaction patterns.
8
- * These use the Trait architecture with stateMachine.
9
- *
10
- * IMPORTANT: These are GENERATION TEMPLATES for LLMs.
11
- * They must use correct syntax:
12
- * - render-ui (not render)
13
- * - Explicit from states (not '*')
14
- * - Valid pattern types (form-section, entity-detail, etc.)
7
+ * Each behavior is a self-contained OrbitalSchema that can function as a standalone .orb file.
15
8
  *
16
9
  * @packageDocumentation
17
10
  */
18
11
 
19
12
  /**
20
- * std/List - The core behavior for displaying and interacting with entity collections.
13
+ * std-list - The core behavior for displaying and interacting with entity collections.
21
14
  *
22
15
  * States: Browsing → Creating/Viewing/Editing/Deleting
23
16
  * Implements complete CRUD operations with modal/drawer UI patterns.
24
17
  */
25
- declare const LIST_BEHAVIOR: StandardBehavior;
26
- declare const DETAIL_BEHAVIOR: StandardBehavior;
27
- declare const FORM_BEHAVIOR: StandardBehavior;
28
- declare const MODAL_BEHAVIOR: StandardBehavior;
29
- declare const DRAWER_BEHAVIOR: StandardBehavior;
30
- declare const TABS_BEHAVIOR: StandardBehavior;
31
- declare const WIZARD_BEHAVIOR: StandardBehavior;
32
- declare const MASTER_DETAIL_BEHAVIOR: StandardBehavior;
33
- declare const FILTER_BEHAVIOR: StandardBehavior;
34
- declare const UI_INTERACTION_BEHAVIORS: StandardBehavior[];
18
+ declare const LIST_BEHAVIOR: OrbitalSchema;
19
+ declare const DETAIL_BEHAVIOR: OrbitalSchema;
20
+ declare const FORM_BEHAVIOR: OrbitalSchema;
21
+ declare const MODAL_BEHAVIOR: OrbitalSchema;
22
+ declare const DRAWER_BEHAVIOR: OrbitalSchema;
23
+ declare const TABS_BEHAVIOR: OrbitalSchema;
24
+ declare const WIZARD_BEHAVIOR: OrbitalSchema;
25
+ declare const MASTER_DETAIL_BEHAVIOR: OrbitalSchema;
26
+ declare const FILTER_BEHAVIOR: OrbitalSchema;
27
+ declare const UI_INTERACTION_BEHAVIORS: OrbitalSchema[];
35
28
 
36
29
  export { DETAIL_BEHAVIOR, DRAWER_BEHAVIOR, FILTER_BEHAVIOR, FORM_BEHAVIOR, LIST_BEHAVIOR, MASTER_DETAIL_BEHAVIOR, MODAL_BEHAVIOR, TABS_BEHAVIOR, UI_INTERACTION_BEHAVIORS, WIZARD_BEHAVIOR };