@almadar/std 16.243.0 → 16.244.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 (140) hide show
  1. package/behaviors/behaviors-registry.json +72537 -31220
  2. package/behaviors/lolo/agent/atoms/std-agent-context.lolo +24 -4
  3. package/behaviors/lolo/agent/atoms/std-agent-memory.lolo +20 -5
  4. package/behaviors/lolo/agent/atoms/std-agent-proposal.lolo +550 -0
  5. package/behaviors/lolo/agent/atoms/std-agent-session.lolo +284 -25
  6. package/behaviors/lolo/agent/atoms/std-agent-suggestions.lolo +841 -0
  7. package/behaviors/lolo/agent/atoms/std-agent-tool-loop.lolo +58 -8
  8. package/behaviors/lolo/agent/organisms/std-agent-assistant.lolo +1 -0
  9. package/behaviors/lolo/infra/atoms/std-page-treat.lolo +28 -1
  10. package/behaviors/lolo/ui/avl/atoms/ui-avl-state-machine.lolo +22 -0
  11. package/behaviors/lolo/ui/avl/atoms/ui-avl-transition-explainer.lolo +175 -0
  12. package/behaviors/lolo/ui/avl/atoms/ui-module-card.lolo +22 -0
  13. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +23 -4
  14. package/behaviors/lolo/ui/core/atoms/std-hero.lolo +72 -33
  15. package/behaviors/lolo/ui/core/molecules/ui-agent-chat-feed.lolo +1 -1
  16. package/behaviors/lolo/ui/core/molecules/ui-markdown-content.lolo +54 -0
  17. package/behaviors/lolo/ui/core/molecules/ui-upload-drop-zone.lolo +5 -0
  18. package/behaviors/lolo/ui/core/organisms/ui-segment-renderer.lolo +127 -3
  19. package/behaviors/lolo/ui/core/organisms/ui-state-machine-view.lolo +22 -0
  20. package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +2 -2
  21. package/behaviors/lolo/ui/learning/atoms/std-learn-arrangement.lolo +87 -17
  22. package/behaviors/lolo/ui/learning/atoms/std-learn-classify.lolo +172 -37
  23. package/behaviors/lolo/ui/learning/atoms/std-learn-coupled-sim.lolo +183 -70
  24. package/behaviors/lolo/ui/learning/atoms/std-learn-derivation.lolo +78 -13
  25. package/behaviors/lolo/ui/learning/atoms/std-learn-diagram.lolo +58 -2
  26. package/behaviors/lolo/ui/learning/atoms/std-learn-doser.lolo +107 -12
  27. package/behaviors/lolo/ui/learning/atoms/std-learn-estimate.lolo +83 -10
  28. package/behaviors/lolo/ui/learning/atoms/std-learn-goal-seek.lolo +130 -9
  29. package/behaviors/lolo/ui/learning/atoms/std-learn-grid-sim.lolo +143 -59
  30. package/behaviors/lolo/ui/learning/atoms/std-learn-hotspot.lolo +96 -22
  31. package/behaviors/lolo/ui/learning/atoms/std-learn-live-sim.lolo +66 -5
  32. package/behaviors/lolo/ui/learning/atoms/std-learn-predict.lolo +84 -6
  33. package/behaviors/lolo/ui/learning/atoms/std-learn-sandbox.lolo +80 -14
  34. package/behaviors/lolo/ui/learning/atoms/std-learn-scatter-fit.lolo +99 -5
  35. package/behaviors/lolo/ui/learning/atoms/std-learn-scenario.lolo +81 -7
  36. package/behaviors/lolo/ui/learning/atoms/std-learn-speed-drill.lolo +83 -7
  37. package/behaviors/lolo/ui/learning/atoms/std-learn-stepper.lolo +224 -99
  38. package/behaviors/lolo/ui/learning/atoms/std-learn-tour-3d.lolo +63 -2
  39. package/behaviors/lolo/ui/learning/atoms/std-learn-trace-player.lolo +99 -38
  40. package/behaviors/lolo/ui/learning/atoms/std-learn-transport.lolo +7 -7
  41. package/behaviors/lolo/ui/learning/atoms/std-learn-tree.lolo +69 -4
  42. package/behaviors/lolo-behavior-contracts.json +1 -1
  43. package/behaviors/registry/agent/atoms/std-agent-context.orb +205 -6
  44. package/behaviors/registry/agent/atoms/std-agent-memory.orb +146 -4
  45. package/behaviors/registry/agent/atoms/std-agent-proposal.orb +1972 -0
  46. package/behaviors/registry/agent/atoms/std-agent-session.orb +2021 -597
  47. package/behaviors/registry/agent/atoms/std-agent-suggestions.orb +5079 -0
  48. package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +287 -5
  49. package/behaviors/registry/agent/organisms/std-agent-assistant.orb +7 -0
  50. package/behaviors/registry/factory-signatures.json +1 -1
  51. package/behaviors/registry/infra/atoms/std-page-treat.orb +327 -2
  52. package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +134 -0
  53. package/behaviors/registry/ui/avl/atoms/ui-avl-transition-explainer.orb +678 -0
  54. package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +122 -0
  55. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +73 -4
  56. package/behaviors/registry/ui/core/atoms/std-hero.orb +174 -97
  57. package/behaviors/registry/ui/core/molecules/ui-markdown-content.orb +204 -1
  58. package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +12 -0
  59. package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +683 -30
  60. package/behaviors/registry/ui/learning/atoms/std-learn-arrangement.orb +748 -21
  61. package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1429 -41
  62. package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +1031 -185
  63. package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +807 -132
  64. package/behaviors/registry/ui/learning/atoms/std-learn-diagram.orb +553 -6
  65. package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +987 -21
  66. package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +582 -16
  67. package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +954 -13
  68. package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +828 -88
  69. package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +730 -28
  70. package/behaviors/registry/ui/learning/atoms/std-learn-live-sim.orb +479 -9
  71. package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +797 -46
  72. package/behaviors/registry/ui/learning/atoms/std-learn-sandbox.orb +757 -58
  73. package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +1176 -164
  74. package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +599 -12
  75. package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +832 -150
  76. package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +1561 -127
  77. package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +655 -6
  78. package/behaviors/registry/ui/learning/atoms/std-learn-trace-player.orb +634 -43
  79. package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +85 -31
  80. package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +425 -9
  81. package/canonical-operators.json +45 -2
  82. package/dist/behaviors/exports-reader.js +16667 -7868
  83. package/dist/behaviors/functions/index.d.ts +711 -32
  84. package/dist/behaviors/functions/index.js +16651 -7869
  85. package/dist/behaviors/index.d.ts +1 -1
  86. package/dist/behaviors/index.js +16668 -7869
  87. package/dist/behaviors/query.js +16667 -7868
  88. package/dist/behaviors-embeddings.hash.json +3 -3
  89. package/dist/behaviors-embeddings.json +77 -53
  90. package/dist/behaviors-registry.json +72537 -31220
  91. package/dist/index.d.ts +3 -3
  92. package/dist/index.js +16101 -7275
  93. package/dist/knob-embeddings.hash.json +3 -3
  94. package/dist/knob-embeddings.json +11617 -1225
  95. package/dist/modules/anim.d.ts +1 -1
  96. package/dist/modules/array.d.ts +1 -1
  97. package/dist/modules/async.d.ts +1 -1
  98. package/dist/modules/behavior.d.ts +1 -1
  99. package/dist/modules/browser.d.ts +1 -1
  100. package/dist/modules/composition.d.ts +1 -1
  101. package/dist/modules/contract.d.ts +1 -1
  102. package/dist/modules/core.d.ts +1 -1
  103. package/dist/modules/core.js +29 -2
  104. package/dist/modules/data.d.ts +1 -1
  105. package/dist/modules/ease.d.ts +1 -1
  106. package/dist/modules/format.d.ts +1 -1
  107. package/dist/modules/geo.d.ts +1 -1
  108. package/dist/modules/graph.d.ts +1 -1
  109. package/dist/modules/grid.d.ts +1 -1
  110. package/dist/modules/i18n.d.ts +1 -1
  111. package/dist/modules/index.d.ts +1 -1
  112. package/dist/modules/index.js +29 -2
  113. package/dist/modules/integration.d.ts +1 -1
  114. package/dist/modules/json.d.ts +1 -1
  115. package/dist/modules/llm.d.ts +1 -1
  116. package/dist/modules/math.d.ts +1 -1
  117. package/dist/modules/memory.d.ts +1 -1
  118. package/dist/modules/nn.d.ts +1 -1
  119. package/dist/modules/noise.d.ts +1 -1
  120. package/dist/modules/object.d.ts +1 -1
  121. package/dist/modules/os.d.ts +1 -1
  122. package/dist/modules/path.d.ts +1 -1
  123. package/dist/modules/prob.d.ts +1 -1
  124. package/dist/modules/session.d.ts +1 -1
  125. package/dist/modules/str.d.ts +1 -1
  126. package/dist/modules/tensor.d.ts +1 -1
  127. package/dist/modules/time.d.ts +1 -1
  128. package/dist/modules/trace.d.ts +1 -1
  129. package/dist/modules/train.d.ts +1 -1
  130. package/dist/modules/validate.d.ts +1 -1
  131. package/dist/modules/vector.d.ts +1 -1
  132. package/dist/modules/workspace.d.ts +1 -1
  133. package/dist/registry/factory-signatures.json +1 -1
  134. package/dist/registry.d.ts +2 -2
  135. package/dist/registry.js +29 -2
  136. package/dist/{types-Cdb321uM.d.ts → types-Y-yYWEOX.d.ts} +1 -1
  137. package/i18n/ar.json +3 -1
  138. package/i18n/en.json +2 -0
  139. package/i18n/sl.json +3 -1
  140. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  app std-hero "1.0.0"
2
- "std-hero — the headline block at the top of a page, or a call-to-action banner further down. Optional eyebrow badge, headline, supporting text, up to two link actions, an optional copyable command, and optional media below or beside the copy. `look: banner` turns it into a contained call-to-action card. Links follow `href` (in-app path, #anchor, or absolute URL); each click also emits CTA_PRIMARY / CTA_SECONDARY with the href. Pick for landing, product, pricing and campaign pages."
2
+ "std-hero — the headline block at the top of a page, or a call-to-action banner further down. Optional eyebrow badge, headline, supporting text, up to two link actions, an optional copyable command, optional media below or beside the copy, and an optional backdrop scene behind it all. `look: banner` turns it into a contained call-to-action card. Links follow `href` (in-app path, #anchor, or absolute URL); each click also emits CTA_PRIMARY / CTA_SECONDARY with the href. Pick for landing, product, pricing and campaign pages."
3
3
  orbital HeroOrbital {
4
4
  entity HeroView [runtime] {
5
5
  id : string!
@@ -109,6 +109,17 @@ orbital HeroOrbital {
109
109
  @label "Surface"
110
110
  @description "Background behind the block"
111
111
  @tier "presentation"
112
+ height : "auto" | "tall" = auto
113
+ @label "Height"
114
+ @description "auto fits the copy; tall fills most of the screen with the copy centred, for a hero over a backdrop scene"
115
+ @tier "presentation"
116
+ backdropContent : render-ui = {
117
+ type: box
118
+ className: "hidden"
119
+ }
120
+ @label "Backdrop"
121
+ @description "A scene behind the whole block, such as an animated canvas; it fills the block, never takes clicks, and the copy stays on top. Empty by default."
122
+ @tier "presentation"
112
123
  copyContent : render-ui = {
113
124
  type: stack
114
125
  direction: vertical
@@ -189,24 +200,38 @@ orbital HeroOrbital {
189
200
  paddingY: (if (== @config.look banner) xl "2xl")
190
201
  bg: (if (== @config.surface muted) muted transparent)
191
202
  fullWidth: true
203
+ position: relative
204
+ overflow: hidden
205
+ className: (if (== @config.height tall) "flex min-h-[80vh] items-center" "")
192
206
  children: [{
193
- type: container
194
- size: xl
195
- maxWidth: xl
196
- padding: lg
207
+ type: box
208
+ position: absolute
209
+ className: "inset-0 pointer-events-none"
210
+ aria-hidden: true
211
+ children: [@config.backdropContent]
212
+ }, {
213
+ type: box
214
+ position: relative
215
+ fullWidth: true
197
216
  children: [{
198
- type: box
199
- padding: (if (== @config.look banner) xl none)
200
- rounded: (if (== @config.look banner) "2xl" none)
201
- border: (== @config.look banner)
202
- bg: (if (== @config.look banner) muted transparent)
203
- children: [{
204
- type: stack
205
- direction: vertical
206
- gap: "2xl"
207
- align: (if (== @config.alignment center) center stretch)
208
- children: [@config.copyContent, @config.mediaContent]
209
- }]
217
+ type: container
218
+ size: xl
219
+ maxWidth: xl
220
+ padding: lg
221
+ children: [{
222
+ type: box
223
+ padding: (if (== @config.look banner) xl none)
224
+ rounded: (if (== @config.look banner) "2xl" none)
225
+ border: (== @config.look banner)
226
+ bg: (if (== @config.look banner) muted transparent)
227
+ children: [{
228
+ type: stack
229
+ direction: vertical
230
+ gap: "2xl"
231
+ align: (if (== @config.alignment center) center stretch)
232
+ children: [@config.copyContent, @config.mediaContent]
233
+ }]
234
+ }]
210
235
  }]
211
236
  }]
212
237
  }
@@ -217,24 +242,38 @@ orbital HeroOrbital {
217
242
  paddingY: (if (== @config.look banner) xl "2xl")
218
243
  bg: (if (== @config.surface muted) muted transparent)
219
244
  fullWidth: true
245
+ position: relative
246
+ overflow: hidden
247
+ className: (if (== @config.height tall) "flex min-h-[80vh] items-center" "")
220
248
  children: [{
221
- type: container
222
- size: xl
223
- maxWidth: xl
224
- padding: lg
249
+ type: box
250
+ position: absolute
251
+ className: "inset-0 pointer-events-none"
252
+ aria-hidden: true
253
+ children: [@config.backdropContent]
254
+ }, {
255
+ type: box
256
+ position: relative
257
+ fullWidth: true
225
258
  children: [{
226
- type: box
227
- padding: (if (== @config.look banner) xl none)
228
- rounded: (if (== @config.look banner) "2xl" none)
229
- border: (== @config.look banner)
230
- bg: (if (== @config.look banner) muted transparent)
231
- children: [{
232
- type: split
233
- ratio: "1:1"
234
- gap: xl
235
- align: center
236
- children: [@config.copyContent, @config.mediaContent]
237
- }]
259
+ type: container
260
+ size: xl
261
+ maxWidth: xl
262
+ padding: lg
263
+ children: [{
264
+ type: box
265
+ padding: (if (== @config.look banner) xl none)
266
+ rounded: (if (== @config.look banner) "2xl" none)
267
+ border: (== @config.look banner)
268
+ bg: (if (== @config.look banner) muted transparent)
269
+ children: [{
270
+ type: split
271
+ ratio: "1:1"
272
+ gap: xl
273
+ align: center
274
+ children: [@config.copyContent, @config.mediaContent]
275
+ }]
276
+ }]
238
277
  }]
239
278
  }]
240
279
  }
@@ -202,7 +202,7 @@ orbital AgentChatFeedOrbital {
202
202
  @tier "presentation"
203
203
  idPrefix : string = ""
204
204
  @label "Id Prefix"
205
- @description "Prefix for the toolbar test id and the switch's element id."
205
+ @description "Prefix for the scroller test id and the switch's element id."
206
206
  @tier "presentation"
207
207
  working : boolean = false
208
208
  @label "Working"
@@ -2,6 +2,12 @@ app ui-markdown-content "1.0.0"
2
2
  "MarkdownContent — UI factory (1:1 with the @almadar/ui markdown-content pattern)."
3
3
  ;; @pattern "markdown-content"
4
4
  orbital MarkdownContentOrbital {
5
+ type MarkdownContentAnnotationsItem = {
6
+ id : string!
7
+ text : string!
8
+ kind : "question" | "note"!
9
+ }
10
+
5
11
  entity MarkdownContentItem [runtime] {
6
12
  id : string!
7
13
  }
@@ -14,6 +20,12 @@ orbital MarkdownContentOrbital {
14
20
  (render-ui main {
15
21
  content: @config.content
16
22
  direction: @config.direction
23
+ askEvent: @config.askEvent
24
+ noteEvent: @config.noteEvent
25
+ askLabel: @config.askLabel
26
+ noteLabel: @config.noteLabel
27
+ annotations: @config.annotations
28
+ annotationEvent: @config.annotationEvent
17
29
  className: @config.className
18
30
  enter: @config.enter
19
31
  enterDelay: @config.enterDelay
@@ -36,6 +48,24 @@ orbital MarkdownContentOrbital {
36
48
  })
37
49
  }
38
50
 
51
+ emits {
52
+ @config.askEvent -> external {
53
+ selectedText : string!
54
+ }
55
+ @description "Event emitted when the reader picks Ask on selected text (as `UI:<askEvent>`)"
56
+ @tier "essential"
57
+ @config.noteEvent -> external {
58
+ selectedText : string!
59
+ }
60
+ @description "Event emitted when the reader picks Note on selected text (as `UI:<noteEvent>`)"
61
+ @tier "essential"
62
+ @config.annotationEvent -> external {
63
+ annotationId : string
64
+ }
65
+ @description "Event emitted when a highlighted passage is clicked (as `UI:<annotationEvent>`)"
66
+ @tier "essential"
67
+ }
68
+
39
69
  config {
40
70
  content : string = ""
41
71
  @label "Content"
@@ -45,6 +75,30 @@ orbital MarkdownContentOrbital {
45
75
  @label "Direction"
46
76
  @description "Text direction (defaults to ltr; `ltr` is first so the generated config seeds it)"
47
77
  @tier "presentation"
78
+ askEvent : event = "ASK"
79
+ @label "Ask Event"
80
+ @description "Event emitted when the reader picks Ask on selected text (as `UI:<askEvent>`)"
81
+ @tier "presentation"
82
+ noteEvent : event = "NOTE"
83
+ @label "Note Event"
84
+ @description "Event emitted when the reader picks Note on selected text (as `UI:<noteEvent>`)"
85
+ @tier "presentation"
86
+ askLabel : string
87
+ @label "Ask Label"
88
+ @description "Ask action label (default: translated)"
89
+ @tier "presentation"
90
+ noteLabel : string
91
+ @label "Note Label"
92
+ @description "Note action label (default: translated)"
93
+ @tier "presentation"
94
+ annotations : [MarkdownContentAnnotationsItem] = []
95
+ @label "Annotations"
96
+ @description "Passages to highlight. Each `text` is matched exactly, first occurrence in document order inside a single rendered text node (outside code); a passage that spans formatting boundaries is not highlighted."
97
+ @tier "presentation"
98
+ annotationEvent : event = "ANNOTATION"
99
+ @label "Annotation Event"
100
+ @description "Event emitted when a highlighted passage is clicked (as `UI:<annotationEvent>`)"
101
+ @tier "presentation"
48
102
  className : string
49
103
  @label "Class Name"
50
104
  @description "Additional CSS classes"
@@ -26,6 +26,7 @@ orbital UploadDropZoneOrbital {
26
26
  description: @config.description
27
27
  icon: @config.icon
28
28
  disabled: @config.disabled
29
+ readAs: @config.readAs
29
30
  action: @config.action
30
31
  actionPayload: @config.actionPayload
31
32
  className: @config.className
@@ -87,6 +88,10 @@ orbital UploadDropZoneOrbital {
87
88
  @label "Disabled"
88
89
  @description "Disabled state"
89
90
  @tier "presentation"
91
+ readAs : "dataUrl" | "text" = dataUrl
92
+ @label "Read As"
93
+ @description "How the file is read into `content`: a base64 data URL (default) or its UTF-8 text"
94
+ @tier "presentation"
90
95
  action : event = "ACTION"
91
96
  @label "Action"
92
97
  @description "Declarative event name for file selection"
@@ -2,11 +2,50 @@ app ui-segment-renderer "1.0.0"
2
2
  "SegmentRenderer — UI factory (1:1 with the @almadar/ui segment-renderer pattern)."
3
3
  ;; @pattern "segment-renderer"
4
4
  orbital SegmentRendererOrbital {
5
- type SegmentRendererSegmentsItem = {
5
+ type SegmentRendererSegmentsItem = SegmentRendererSegmentsItemMarkdown | SegmentRendererSegmentsItemCode | SegmentRendererSegmentsItemQuiz | SegmentRendererSegmentsItemActivate | SegmentRendererSegmentsItemConnect | SegmentRendererSegmentsItemReflect | SegmentRendererSegmentsItemBloom | SegmentRendererSegmentsItemVisualization
6
+ type SegmentRendererSegmentsItemMarkdown = {
7
+ type : "markdown"!
8
+ content : string!
9
+ }
10
+ type SegmentRendererSegmentsItemCode = {
11
+ type : "code"!
12
+ language : string!
13
+ content : string!
14
+ runnable : boolean
15
+ }
16
+ type SegmentRendererSegmentsItemQuiz = {
6
17
  type : "quiz"!
7
18
  question : string!
8
19
  answer : string!
9
20
  }
21
+ type SegmentRendererSegmentsItemActivate = {
22
+ type : "activate"!
23
+ question : string!
24
+ }
25
+ type SegmentRendererSegmentsItemConnect = {
26
+ type : "connect"!
27
+ content : string!
28
+ }
29
+ type SegmentRendererSegmentsItemReflect = {
30
+ type : "reflect"!
31
+ prompt : string!
32
+ }
33
+ type SegmentRendererSegmentsItemBloom = {
34
+ type : "bloom"!
35
+ level : "remember" | "understand" | "apply" | "analyze" | "evaluate" | "create"!
36
+ question : string!
37
+ answer : string!
38
+ }
39
+ type SegmentRendererSegmentsItemVisualization = {
40
+ type : "visualization"!
41
+ visualizationType : "algorithms" | "math" | "physics" | "biology" | "chemistry" | "probability"!
42
+ description : string!
43
+ }
44
+ type SegmentRendererAnnotationsItem = {
45
+ id : string!
46
+ text : string!
47
+ kind : "question" | "note"!
48
+ }
10
49
  type SegmentRendererUserProgress = {
11
50
  activationResponse : string
12
51
  reflectionNotes : [string]
@@ -24,6 +63,16 @@ orbital SegmentRendererOrbital {
24
63
  INIT -> idle
25
64
  (render-ui main {
26
65
  segments: @config.segments
66
+ lesson: @config.lesson
67
+ activationSaveEvent: @config.activationSaveEvent
68
+ reflectionSaveEvent: @config.reflectionSaveEvent
69
+ bloomAnswerEvent: @config.bloomAnswerEvent
70
+ askEvent: @config.askEvent
71
+ noteEvent: @config.noteEvent
72
+ askLabel: @config.askLabel
73
+ noteLabel: @config.noteLabel
74
+ annotations: @config.annotations
75
+ annotationEvent: @config.annotationEvent
27
76
  className: @config.className
28
77
  containerClassName: @config.containerClassName
29
78
  userProgress: @config.userProgress
@@ -48,10 +97,85 @@ orbital SegmentRendererOrbital {
48
97
  })
49
98
  }
50
99
 
100
+ emits {
101
+ @config.activationSaveEvent -> external {
102
+ response : string!
103
+ }
104
+ @description "Event emitted when the activation prompt is saved or skipped (as `UI:<activationSaveEvent>`)"
105
+ @tier "essential"
106
+ @config.reflectionSaveEvent -> external {
107
+ index : number!
108
+ note : string!
109
+ }
110
+ @description "Event emitted when a reflection note is saved (as `UI:<reflectionSaveEvent>`)"
111
+ @tier "essential"
112
+ @config.bloomAnswerEvent -> external {
113
+ index : number!
114
+ level : "remember" | "understand" | "apply" | "analyze" | "evaluate" | "create"!
115
+ }
116
+ @description "Event emitted on the first reveal of a Bloom question (as `UI:<bloomAnswerEvent>`)"
117
+ @tier "essential"
118
+ @config.askEvent -> external {
119
+ selectedText : string!
120
+ }
121
+ @description "Event emitted when the reader picks Ask on selected text (as `UI:<askEvent>`)"
122
+ @tier "essential"
123
+ @config.noteEvent -> external {
124
+ selectedText : string!
125
+ }
126
+ @description "Event emitted when the reader picks Note on selected text (as `UI:<noteEvent>`)"
127
+ @tier "essential"
128
+ @config.annotationEvent -> external {
129
+ annotationId : string
130
+ }
131
+ @description "Event emitted when a highlighted passage is clicked (as `UI:<annotationEvent>`)"
132
+ @tier "essential"
133
+ }
134
+
51
135
  config {
52
- segments : [SegmentRendererSegmentsItem] = [{ type: quiz, question: "Question", answer: "Answer" }, { type: quiz, question: "Question 2", answer: "Answer 2" }]
136
+ segments : [SegmentRendererSegmentsItem] = []
53
137
  @label "Segments"
54
- @description "Parsed lesson segments (see `parseLessonSegments`)"
138
+ @description "Parsed lesson segments (see `parseLessonSegments`). Ignored when `lesson` is given."
139
+ @tier "presentation"
140
+ lesson : string
141
+ @label "Lesson"
142
+ @description "Raw lesson markdown with learning tags; parsed with `parseLessonSegments` and rendered"
143
+ @tier "presentation"
144
+ activationSaveEvent : event = "ACTIVATION_SAVE"
145
+ @label "Activation Save Event"
146
+ @description "Event emitted when the activation prompt is saved or skipped (as `UI:<activationSaveEvent>`)"
147
+ @tier "presentation"
148
+ reflectionSaveEvent : event = "REFLECTION_SAVE"
149
+ @label "Reflection Save Event"
150
+ @description "Event emitted when a reflection note is saved (as `UI:<reflectionSaveEvent>`)"
151
+ @tier "presentation"
152
+ bloomAnswerEvent : event = "BLOOM_ANSWER"
153
+ @label "Bloom Answer Event"
154
+ @description "Event emitted on the first reveal of a Bloom question (as `UI:<bloomAnswerEvent>`)"
155
+ @tier "presentation"
156
+ askEvent : event = "ASK"
157
+ @label "Ask Event"
158
+ @description "Event emitted when the reader picks Ask on selected text (as `UI:<askEvent>`)"
159
+ @tier "presentation"
160
+ noteEvent : event = "NOTE"
161
+ @label "Note Event"
162
+ @description "Event emitted when the reader picks Note on selected text (as `UI:<noteEvent>`)"
163
+ @tier "presentation"
164
+ askLabel : string
165
+ @label "Ask Label"
166
+ @description "Ask action label (default: translated)"
167
+ @tier "presentation"
168
+ noteLabel : string
169
+ @label "Note Label"
170
+ @description "Note action label (default: translated)"
171
+ @tier "presentation"
172
+ annotations : [SegmentRendererAnnotationsItem] = []
173
+ @label "Annotations"
174
+ @description "Passages to highlight. Each `text` is matched exactly against the markdown segments, first segment whose source contains it, first occurrence inside one rendered text node (outside code); one that spans formatting is not highlighted."
175
+ @tier "presentation"
176
+ annotationEvent : event = "ANNOTATION"
177
+ @label "Annotation Event"
178
+ @description "Event emitted when a highlighted passage is clicked (as `UI:<annotationEvent>`)"
55
179
  @tier "presentation"
56
180
  className : string
57
181
  @label "Class Name"
@@ -2,6 +2,23 @@ app ui-state-machine-view "1.0.0"
2
2
  "StateMachineView — UI factory (1:1 with the @almadar/ui state-machine-view pattern)."
3
3
  ;; @pattern "state-machine-view"
4
4
  orbital StateMachineViewOrbital {
5
+ type StateMachineViewAnnotations = {
6
+ states : Map string StateMachineViewAnnotationsStatesValue
7
+ transitions : Map string StateMachineViewAnnotationsTransitionsValue
8
+ effects : Map string StateMachineViewAnnotationsEffectsValue
9
+ }
10
+ type StateMachineViewAnnotationsStatesValue = {
11
+ title : string
12
+ body : string!
13
+ }
14
+ type StateMachineViewAnnotationsTransitionsValue = {
15
+ title : string
16
+ body : string!
17
+ }
18
+ type StateMachineViewAnnotationsEffectsValue = {
19
+ title : string
20
+ body : string!
21
+ }
5
22
  type StateMachineViewTrait = {
6
23
  name : string!
7
24
  linkedEntity : string!
@@ -62,6 +79,7 @@ orbital StateMachineViewOrbital {
62
79
  entityFields: @config.entityFields
63
80
  direction: @config.direction
64
81
  showHeader: @config.showHeader
82
+ annotations: @config.annotations
65
83
  className: @config.className
66
84
  trait: @config.traitProp
67
85
  isLoading: @config.isLoading
@@ -153,6 +171,10 @@ orbital StateMachineViewOrbital {
153
171
  @label "Show Header"
154
172
  @description "Show the trait header (name, entity, listens/emits). @default true"
155
173
  @tier "presentation"
174
+ annotations : StateMachineViewAnnotations = { states: { pending: { title: "Unpaid", body: "Every order starts here." } }, transitions: { PAY: { body: "Only fires when the amount is positive." } }, effects: { persist: { body: "Saves the order." } } }
175
+ @label "Annotations"
176
+ @description "Author explanations shown in a popover on hover: a note per state name, per transition event and per effect type."
177
+ @tier "presentation"
156
178
  className : string
157
179
  @label "Class Name"
158
180
  @description "className prop"
@@ -152,9 +152,9 @@ orbital DashboardLayoutOrbital {
152
152
  @label "On Sign Out"
153
153
  @description "Callback when user clicks sign out (optional - uses auth context signOut if not provided)"
154
154
  @tier "presentation"
155
- layoutMode : "sidebar" | "topnav" | "bottomnav" | "minimal" = sidebar
155
+ layoutMode : "sidebar" | "topnav" | "bottomnav" | "minimal" | "drawer" = sidebar
156
156
  @label "Layout Mode"
157
- @description "Layout mode. Default `'sidebar'`. - `sidebar`: Left sidebar nav + top header (classic dashboard) - `topnav`: Horizontal nav in header, no sidebar - `bottomnav`: Bottom tab bar, no sidebar - `minimal`: No nav chrome, content only"
157
+ @description "Layout mode. Default `'sidebar'`. - `sidebar`: Left sidebar nav + top header (classic dashboard) - `topnav`: Horizontal nav in header, no sidebar - `bottomnav`: Bottom tab bar, no sidebar - `minimal`: No nav chrome, content only - `drawer`: Sidebar nav behind a menu button at every width; content gets the full width"
158
158
  @tier "presentation"
159
159
  children : node
160
160
  @label "Children"