@almadar/std 16.192.0 → 16.194.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 (283) hide show
  1. package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +9 -3
  2. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +8 -2
  3. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +1 -1
  4. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +1 -1
  5. package/behaviors/lolo/ui/core/atoms/std-date-range.lolo +1 -1
  6. package/behaviors/lolo/ui/core/atoms/std-detail-layout.lolo +3 -3
  7. package/behaviors/lolo/ui/core/atoms/std-filter.lolo +1 -1
  8. package/behaviors/lolo/ui/core/atoms/std-geosearch.lolo +1 -1
  9. package/behaviors/lolo/ui/core/atoms/std-graphs.lolo +1 -1
  10. package/behaviors/lolo/ui/core/atoms/std-modal.lolo +1 -1
  11. package/behaviors/lolo/ui/core/atoms/std-pagination.lolo +1 -1
  12. package/behaviors/lolo/ui/core/atoms/std-record-detail.lolo +13 -2
  13. package/behaviors/lolo/ui/core/atoms/std-scatter.lolo +1 -1
  14. package/behaviors/lolo/ui/core/atoms/std-search.lolo +1 -1
  15. package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +319 -0
  16. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +27 -17
  17. package/behaviors/lolo/ui/core/atoms/std-thread.lolo +91 -28
  18. package/behaviors/lolo/ui/core/atoms/std-tree.lolo +106 -14
  19. package/behaviors/lolo/ui/core/atoms/ui-avatar.lolo +2 -2
  20. package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -1
  21. package/behaviors/lolo/ui/core/atoms/ui-box.lolo +2 -2
  22. package/behaviors/lolo/ui/core/atoms/ui-button.lolo +1 -1
  23. package/behaviors/lolo/ui/core/atoms/ui-card.lolo +1 -1
  24. package/behaviors/lolo/ui/core/atoms/ui-checkbox.lolo +1 -1
  25. package/behaviors/lolo/ui/core/atoms/ui-day-cell.lolo +1 -1
  26. package/behaviors/lolo/ui/core/atoms/ui-filter-pill.lolo +4 -4
  27. package/behaviors/lolo/ui/core/atoms/ui-flip-container.lolo +1 -1
  28. package/behaviors/lolo/ui/core/atoms/ui-hstack.lolo +1 -1
  29. package/behaviors/lolo/ui/core/atoms/ui-infinite-scroll-sentinel.lolo +1 -1
  30. package/behaviors/lolo/ui/core/atoms/ui-input.lolo +3 -3
  31. package/behaviors/lolo/ui/core/atoms/ui-overlay.lolo +1 -1
  32. package/behaviors/lolo/ui/core/atoms/ui-radio.lolo +1 -1
  33. package/behaviors/lolo/ui/core/atoms/ui-range-slider.lolo +2 -2
  34. package/behaviors/lolo/ui/core/atoms/ui-select.lolo +3 -3
  35. package/behaviors/lolo/ui/core/atoms/ui-stack.lolo +1 -1
  36. package/behaviors/lolo/ui/core/atoms/ui-switch.lolo +1 -1
  37. package/behaviors/lolo/ui/core/atoms/ui-text-highlight.lolo +5 -5
  38. package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +2 -2
  39. package/behaviors/lolo/ui/core/atoms/ui-time-slot-cell.lolo +1 -1
  40. package/behaviors/lolo/ui/core/atoms/ui-typewriter-text.lolo +1 -1
  41. package/behaviors/lolo/ui/core/atoms/ui-vstack.lolo +1 -1
  42. package/behaviors/lolo/ui/core/molecules/ui-accordion.lolo +2 -2
  43. package/behaviors/lolo/ui/core/molecules/ui-alert.lolo +3 -3
  44. package/behaviors/lolo/ui/core/molecules/ui-branching-logic-builder.lolo +2 -2
  45. package/behaviors/lolo/ui/core/molecules/ui-breadcrumb.lolo +2 -2
  46. package/behaviors/lolo/ui/core/molecules/ui-calendar-grid.lolo +6 -6
  47. package/behaviors/lolo/ui/core/molecules/ui-carousel.lolo +1 -1
  48. package/behaviors/lolo/ui/core/molecules/ui-code-block.lolo +1 -1
  49. package/behaviors/lolo/ui/core/molecules/ui-confirm-dialog.lolo +2 -2
  50. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +3 -3
  51. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +7 -7
  52. package/behaviors/lolo/ui/core/molecules/ui-date-range-picker.lolo +2 -2
  53. package/behaviors/lolo/ui/core/molecules/ui-date-range-selector.lolo +1 -1
  54. package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +2 -2
  55. package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +5 -5
  56. package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +2 -2
  57. package/behaviors/lolo/ui/core/molecules/ui-emoji-picker.lolo +1 -1
  58. package/behaviors/lolo/ui/core/molecules/ui-empty-state.lolo +2 -2
  59. package/behaviors/lolo/ui/core/molecules/ui-error-state.lolo +2 -2
  60. package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +27 -2
  61. package/behaviors/lolo/ui/core/molecules/ui-filter-group.lolo +4 -4
  62. package/behaviors/lolo/ui/core/molecules/ui-flip-card.lolo +1 -1
  63. package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +2 -2
  64. package/behaviors/lolo/ui/core/molecules/ui-form-section-header.lolo +1 -1
  65. package/behaviors/lolo/ui/core/molecules/ui-graph-canvas.lolo +5 -5
  66. package/behaviors/lolo/ui/core/molecules/ui-graph-view.lolo +2 -2
  67. package/behaviors/lolo/ui/core/molecules/ui-header.lolo +4 -4
  68. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +2 -2
  69. package/behaviors/lolo/ui/core/molecules/ui-import-source-picker.lolo +1 -1
  70. package/behaviors/lolo/ui/core/molecules/ui-input-group.lolo +3 -3
  71. package/behaviors/lolo/ui/core/molecules/ui-lightbox.lolo +2 -2
  72. package/behaviors/lolo/ui/core/molecules/ui-likert-scale.lolo +2 -2
  73. package/behaviors/lolo/ui/core/molecules/ui-map-view.lolo +4 -4
  74. package/behaviors/lolo/ui/core/molecules/ui-matrix-question.lolo +2 -2
  75. package/behaviors/lolo/ui/core/molecules/ui-modal.lolo +3 -3
  76. package/behaviors/lolo/ui/core/molecules/ui-notification.lolo +4 -4
  77. package/behaviors/lolo/ui/core/molecules/ui-number-stepper.lolo +2 -2
  78. package/behaviors/lolo/ui/core/molecules/ui-option-constraint-group.lolo +2 -2
  79. package/behaviors/lolo/ui/core/molecules/ui-orbital-visualization.lolo +1 -1
  80. package/behaviors/lolo/ui/core/molecules/ui-page-header.lolo +2 -2
  81. package/behaviors/lolo/ui/core/molecules/ui-pagination.lolo +4 -4
  82. package/behaviors/lolo/ui/core/molecules/ui-popover.lolo +1 -1
  83. package/behaviors/lolo/ui/core/molecules/ui-positioned-canvas.lolo +4 -4
  84. package/behaviors/lolo/ui/core/molecules/ui-progress-dots.lolo +1 -1
  85. package/behaviors/lolo/ui/core/molecules/ui-pull-to-refresh.lolo +1 -1
  86. package/behaviors/lolo/ui/core/molecules/ui-qr-scanner.lolo +2 -2
  87. package/behaviors/lolo/ui/core/molecules/ui-relation-select.lolo +1 -1
  88. package/behaviors/lolo/ui/core/molecules/ui-repeatable-form-section.lolo +3 -3
  89. package/behaviors/lolo/ui/core/molecules/ui-reply-tree.lolo +8 -8
  90. package/behaviors/lolo/ui/core/molecules/ui-rich-text-editor.lolo +2 -2
  91. package/behaviors/lolo/ui/core/molecules/ui-search-input.lolo +2 -2
  92. package/behaviors/lolo/ui/core/molecules/ui-side-panel.lolo +2 -2
  93. package/behaviors/lolo/ui/core/molecules/ui-sidebar.lolo +3 -3
  94. package/behaviors/lolo/ui/core/molecules/ui-signature-pad.lolo +3 -3
  95. package/behaviors/lolo/ui/core/molecules/ui-sortable-list.lolo +1 -1
  96. package/behaviors/lolo/ui/core/molecules/ui-star-rating.lolo +2 -2
  97. package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +2 -2
  98. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +4 -4
  99. package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +2 -2
  100. package/behaviors/lolo/ui/core/molecules/ui-tag-input.lolo +3 -3
  101. package/behaviors/lolo/ui/core/molecules/ui-upload-drop-zone.lolo +1 -1
  102. package/behaviors/lolo/ui/core/molecules/ui-version-diff.lolo +6 -6
  103. package/behaviors/lolo/ui/core/molecules/ui-violation-alert.lolo +2 -2
  104. package/behaviors/lolo/ui/core/molecules/ui-vote-stack.lolo +2 -2
  105. package/behaviors/lolo/ui/core/molecules/ui-wizard-container.lolo +5 -5
  106. package/behaviors/lolo/ui/core/molecules/ui-wizard-navigation.lolo +6 -6
  107. package/behaviors/lolo/ui/core/molecules/ui-wizard-progress.lolo +2 -2
  108. package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +1 -1
  109. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +1 -1
  110. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +3 -3
  111. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +3 -3
  112. package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +1 -1
  113. package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +1 -1
  114. package/behaviors/lolo/ui/core/organisms/ui-tabbed-container.lolo +1 -1
  115. package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +1 -1
  116. package/behaviors/lolo/ui/core/templates/ui-counter-template.lolo +6 -6
  117. package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +11 -6
  118. package/behaviors/lolo/ui/game/atoms/ui-canvas-2d.lolo +4 -4
  119. package/behaviors/lolo/ui/game/atoms/ui-canvas.lolo +5 -5
  120. package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +2 -2
  121. package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +4 -4
  122. package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +4 -4
  123. package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +1 -1
  124. package/behaviors/lolo/ui/game/atoms/ui-sequence-bar.lolo +4 -4
  125. package/behaviors/lolo/ui/game/atoms/ui-state-graph.lolo +1 -1
  126. package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +7 -7
  127. package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +1 -1
  128. package/behaviors/lolo/ui/learning/atoms/ui-algo-graph-canvas.lolo +2 -2
  129. package/behaviors/lolo/ui/learning/atoms/ui-algorithm-canvas.lolo +1 -1
  130. package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +1 -1
  131. package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +1 -1
  132. package/behaviors/lolo/ui/learning/atoms/ui-learning-canvas.lolo +2 -2
  133. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +1 -1
  134. package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +1 -1
  135. package/behaviors/registry/infra/atoms/std-approval-gate.orb +37 -9
  136. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +12 -2
  137. package/behaviors/registry/ui/core/atoms/std-browse.orb +2 -1
  138. package/behaviors/registry/ui/core/atoms/std-calendar.orb +1 -1
  139. package/behaviors/registry/ui/core/atoms/std-date-range.orb +2 -1
  140. package/behaviors/registry/ui/core/atoms/std-detail-layout.orb +3 -3
  141. package/behaviors/registry/ui/core/atoms/std-filter.orb +2 -1
  142. package/behaviors/registry/ui/core/atoms/std-geosearch.orb +2 -1
  143. package/behaviors/registry/ui/core/atoms/std-graphs.orb +1 -1
  144. package/behaviors/registry/ui/core/atoms/std-modal.orb +5 -1
  145. package/behaviors/registry/ui/core/atoms/std-pagination.orb +2 -1
  146. package/behaviors/registry/ui/core/atoms/std-record-detail.orb +38 -2
  147. package/behaviors/registry/ui/core/atoms/std-scatter.orb +1 -1
  148. package/behaviors/registry/ui/core/atoms/std-search.orb +2 -1
  149. package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +1381 -0
  150. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +34 -18
  151. package/behaviors/registry/ui/core/atoms/std-thread.orb +296 -109
  152. package/behaviors/registry/ui/core/atoms/std-tree.orb +447 -68
  153. package/behaviors/registry/ui/core/atoms/ui-avatar.orb +2 -2
  154. package/behaviors/registry/ui/core/atoms/ui-badge.orb +1 -1
  155. package/behaviors/registry/ui/core/atoms/ui-box.orb +2 -2
  156. package/behaviors/registry/ui/core/atoms/ui-button.orb +1 -1
  157. package/behaviors/registry/ui/core/atoms/ui-card.orb +1 -1
  158. package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +1 -1
  159. package/behaviors/registry/ui/core/atoms/ui-day-cell.orb +1 -1
  160. package/behaviors/registry/ui/core/atoms/ui-filter-pill.orb +5 -4
  161. package/behaviors/registry/ui/core/atoms/ui-flip-container.orb +1 -1
  162. package/behaviors/registry/ui/core/atoms/ui-hstack.orb +1 -1
  163. package/behaviors/registry/ui/core/atoms/ui-infinite-scroll-sentinel.orb +1 -1
  164. package/behaviors/registry/ui/core/atoms/ui-input.orb +3 -3
  165. package/behaviors/registry/ui/core/atoms/ui-overlay.orb +1 -1
  166. package/behaviors/registry/ui/core/atoms/ui-radio.orb +1 -1
  167. package/behaviors/registry/ui/core/atoms/ui-range-slider.orb +2 -2
  168. package/behaviors/registry/ui/core/atoms/ui-select.orb +3 -3
  169. package/behaviors/registry/ui/core/atoms/ui-stack.orb +1 -1
  170. package/behaviors/registry/ui/core/atoms/ui-switch.orb +1 -1
  171. package/behaviors/registry/ui/core/atoms/ui-text-highlight.orb +5 -5
  172. package/behaviors/registry/ui/core/atoms/ui-textarea.orb +2 -2
  173. package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +1 -1
  174. package/behaviors/registry/ui/core/atoms/ui-typewriter-text.orb +1 -1
  175. package/behaviors/registry/ui/core/atoms/ui-vstack.orb +1 -1
  176. package/behaviors/registry/ui/core/molecules/ui-accordion.orb +2 -2
  177. package/behaviors/registry/ui/core/molecules/ui-alert.orb +3 -3
  178. package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +2 -2
  179. package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +2 -2
  180. package/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +6 -6
  181. package/behaviors/registry/ui/core/molecules/ui-carousel.orb +1 -1
  182. package/behaviors/registry/ui/core/molecules/ui-code-block.orb +1 -1
  183. package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +2 -2
  184. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +3 -3
  185. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +7 -7
  186. package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +2 -2
  187. package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +1 -1
  188. package/behaviors/registry/ui/core/molecules/ui-document-details.orb +2 -2
  189. package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +5 -5
  190. package/behaviors/registry/ui/core/molecules/ui-drawer.orb +3 -2
  191. package/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +1 -1
  192. package/behaviors/registry/ui/core/molecules/ui-empty-state.orb +2 -2
  193. package/behaviors/registry/ui/core/molecules/ui-error-state.orb +2 -2
  194. package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +42 -1
  195. package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +4 -4
  196. package/behaviors/registry/ui/core/molecules/ui-flip-card.orb +1 -1
  197. package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +2 -2
  198. package/behaviors/registry/ui/core/molecules/ui-form-section-header.orb +1 -1
  199. package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +5 -5
  200. package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +2 -2
  201. package/behaviors/registry/ui/core/molecules/ui-header.orb +4 -4
  202. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +2 -2
  203. package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +1 -1
  204. package/behaviors/registry/ui/core/molecules/ui-input-group.orb +3 -3
  205. package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +2 -2
  206. package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +2 -2
  207. package/behaviors/registry/ui/core/molecules/ui-map-view.orb +4 -4
  208. package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +2 -2
  209. package/behaviors/registry/ui/core/molecules/ui-modal.orb +4 -3
  210. package/behaviors/registry/ui/core/molecules/ui-notification.orb +4 -4
  211. package/behaviors/registry/ui/core/molecules/ui-number-stepper.orb +2 -2
  212. package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +2 -2
  213. package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +1 -1
  214. package/behaviors/registry/ui/core/molecules/ui-page-header.orb +2 -2
  215. package/behaviors/registry/ui/core/molecules/ui-pagination.orb +5 -4
  216. package/behaviors/registry/ui/core/molecules/ui-popover.orb +1 -1
  217. package/behaviors/registry/ui/core/molecules/ui-positioned-canvas.orb +4 -4
  218. package/behaviors/registry/ui/core/molecules/ui-progress-dots.orb +1 -1
  219. package/behaviors/registry/ui/core/molecules/ui-pull-to-refresh.orb +1 -1
  220. package/behaviors/registry/ui/core/molecules/ui-qr-scanner.orb +2 -2
  221. package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +1 -1
  222. package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +3 -3
  223. package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +8 -8
  224. package/behaviors/registry/ui/core/molecules/ui-rich-text-editor.orb +3 -2
  225. package/behaviors/registry/ui/core/molecules/ui-search-input.orb +2 -2
  226. package/behaviors/registry/ui/core/molecules/ui-side-panel.orb +3 -2
  227. package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +3 -3
  228. package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +3 -3
  229. package/behaviors/registry/ui/core/molecules/ui-sortable-list.orb +1 -1
  230. package/behaviors/registry/ui/core/molecules/ui-star-rating.orb +2 -2
  231. package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +2 -2
  232. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +4 -4
  233. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +2 -2
  234. package/behaviors/registry/ui/core/molecules/ui-tag-input.orb +3 -3
  235. package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +1 -1
  236. package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +6 -6
  237. package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +2 -2
  238. package/behaviors/registry/ui/core/molecules/ui-vote-stack.orb +2 -2
  239. package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +5 -5
  240. package/behaviors/registry/ui/core/molecules/ui-wizard-navigation.orb +6 -6
  241. package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +2 -2
  242. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +1 -1
  243. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +1 -1
  244. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +3 -3
  245. package/behaviors/registry/ui/core/organisms/ui-form.orb +3 -3
  246. package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +1 -1
  247. package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +1 -1
  248. package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +1 -1
  249. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +1 -1
  250. package/behaviors/registry/ui/core/templates/ui-counter-template.orb +6 -6
  251. package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +13 -6
  252. package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +4 -4
  253. package/behaviors/registry/ui/game/atoms/ui-canvas.orb +5 -5
  254. package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +2 -2
  255. package/behaviors/registry/ui/game/atoms/ui-control-button.orb +4 -4
  256. package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +4 -4
  257. package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +1 -1
  258. package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +4 -4
  259. package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +1 -1
  260. package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +8 -7
  261. package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +7 -13
  262. package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +2 -2
  263. package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +1 -1
  264. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +1 -1
  265. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +1 -1
  266. package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +2 -2
  267. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +1 -1
  268. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1 -1
  269. package/dist/behaviors/exports-reader.js +2587 -1923
  270. package/dist/behaviors/functions/index.d.ts +183 -16
  271. package/dist/behaviors/functions/index.js +2585 -1924
  272. package/dist/behaviors/index.d.ts +1 -1
  273. package/dist/behaviors/index.js +2588 -1924
  274. package/dist/behaviors/query.js +2587 -1923
  275. package/dist/behaviors-embeddings.hash.json +3 -3
  276. package/dist/behaviors-embeddings.json +15 -7
  277. package/dist/behaviors-registry.json +597 -14
  278. package/dist/index.d.ts +1 -1
  279. package/dist/index.js +2588 -1924
  280. package/dist/knob-embeddings.hash.json +3 -3
  281. package/dist/knob-embeddings.json +1 -1
  282. package/dist/registry/factory-signatures.json +1 -1
  283. package/package.json +2 -2
@@ -39,7 +39,7 @@ orbital TagTaxonomyOrbital {
39
39
  align: center
40
40
  children: [{ type: spinner }, {
41
41
  color: muted
42
- content: "Loading categories…"
42
+ content: "Loading…"
43
43
  type: typography
44
44
  variant: caption
45
45
  }]
@@ -54,7 +54,7 @@ orbital TagTaxonomyOrbital {
54
54
  action: SHOW_ROOT
55
55
  disabled: (if (!= @entity.id "") false true)
56
56
  icon: arrow-left
57
- label: "All categories"
57
+ label: @config.rootLabel
58
58
  size: sm
59
59
  type: button
60
60
  variant: ghost
@@ -65,7 +65,7 @@ orbital TagTaxonomyOrbital {
65
65
  }, (if @config.allowEdit {
66
66
  action: NEW_TAG
67
67
  icon: plus
68
- label: "New category"
68
+ label: @config.createLabel
69
69
  size: sm
70
70
  type: button
71
71
  variant: secondary
@@ -150,7 +150,7 @@ orbital TagTaxonomyOrbital {
150
150
  align: center
151
151
  children: [{ type: spinner }, {
152
152
  color: muted
153
- content: "Loading categories…"
153
+ content: "Loading…"
154
154
  type: typography
155
155
  variant: caption
156
156
  }]
@@ -171,7 +171,7 @@ orbital TagTaxonomyOrbital {
171
171
  align: center
172
172
  children: [{ type: spinner }, {
173
173
  color: muted
174
- content: "Loading children…"
174
+ content: "Loading…"
175
175
  type: typography
176
176
  variant: caption
177
177
  }]
@@ -191,7 +191,7 @@ orbital TagTaxonomyOrbital {
191
191
  align: center
192
192
  children: [{ type: spinner }, {
193
193
  color: muted
194
- content: "Loading categories…"
194
+ content: "Loading…"
195
195
  type: typography
196
196
  variant: caption
197
197
  }]
@@ -206,7 +206,7 @@ orbital TagTaxonomyOrbital {
206
206
  action: SHOW_ROOT
207
207
  disabled: (if (!= @entity.id "") false true)
208
208
  icon: arrow-left
209
- label: "All categories"
209
+ label: @config.rootLabel
210
210
  size: sm
211
211
  type: button
212
212
  variant: ghost
@@ -217,7 +217,7 @@ orbital TagTaxonomyOrbital {
217
217
  }, (if @config.allowEdit {
218
218
  action: NEW_TAG
219
219
  icon: plus
220
- label: "New category"
220
+ label: @config.createLabel
221
221
  size: sm
222
222
  type: button
223
223
  variant: secondary
@@ -285,7 +285,7 @@ orbital TagTaxonomyOrbital {
285
285
  NEW_TAG -> creating when @config.allowEdit
286
286
  (render-ui modal {
287
287
  children: [{
288
- content: "New category"
288
+ content: @config.createLabel
289
289
  type: typography
290
290
  variant: h3
291
291
  }, {
@@ -330,7 +330,7 @@ orbital TagTaxonomyOrbital {
330
330
  align: center
331
331
  children: [{ type: spinner }, {
332
332
  color: muted
333
- content: "Loading categories…"
333
+ content: "Loading…"
334
334
  type: typography
335
335
  variant: caption
336
336
  }]
@@ -347,7 +347,7 @@ orbital TagTaxonomyOrbital {
347
347
  align: center
348
348
  children: [{ type: spinner }, {
349
349
  color: muted
350
- content: "Loading categories…"
350
+ content: "Loading…"
351
351
  type: typography
352
352
  variant: caption
353
353
  }]
@@ -380,7 +380,7 @@ orbital TagTaxonomyOrbital {
380
380
  align: center
381
381
  children: [{ type: spinner }, {
382
382
  color: muted
383
- content: "Loading categories…"
383
+ content: "Loading…"
384
384
  type: typography
385
385
  variant: caption
386
386
  }]
@@ -402,7 +402,7 @@ orbital TagTaxonomyOrbital {
402
402
  action: SHOW_ROOT
403
403
  disabled: (if (!= @entity.id "") false true)
404
404
  icon: arrow-left
405
- label: "All categories"
405
+ label: @config.rootLabel
406
406
  size: sm
407
407
  type: button
408
408
  variant: ghost
@@ -413,7 +413,7 @@ orbital TagTaxonomyOrbital {
413
413
  }, (if @config.allowEdit {
414
414
  action: NEW_TAG
415
415
  icon: plus
416
- label: "New category"
416
+ label: @config.createLabel
417
417
  size: sm
418
418
  type: button
419
419
  variant: secondary
@@ -498,7 +498,7 @@ orbital TagTaxonomyOrbital {
498
498
  align: center
499
499
  children: [{ type: spinner }, {
500
500
  color: muted
501
- content: "Loading categories…"
501
+ content: "Loading…"
502
502
  type: typography
503
503
  variant: caption
504
504
  }]
@@ -536,7 +536,7 @@ orbital TagTaxonomyOrbital {
536
536
  @synonyms "chosen, picked, activated, highlighted"
537
537
  @tier "domain"
538
538
  NEW_TAG
539
- @description "Opens the new-category form (rendered only when allowEdit is on); the creation lands at the level currently open."
539
+ @description "Opens the create-tag form (rendered only when allowEdit is on); the creation lands at the level currently open."
540
540
  @synonyms "add tag, create category, new category"
541
541
  @tier "domain"
542
542
  COMMIT_TAG {
@@ -638,8 +638,18 @@ orbital TagTaxonomyOrbital {
638
638
  @tier "presentation"
639
639
  allowEdit : boolean = false
640
640
  @label "Allow editing"
641
- @description "Render the New-category affordance: creations land at the level currently open (top level, or inside the drilled-into category). Rename is a follow-up (ledgered)."
641
+ @description "Render the create-tag affordance: creations land at the level currently open (top level, or inside the drilled-into category). Rename is a follow-up (ledgered)."
642
642
  @tier "domain"
643
+ createLabel : string = "New tag"
644
+ @label "Create-button label"
645
+ @description "Label on the create affordance and its form heading — say what this taxonomy calls its entries (New tag, New category, New topic)."
646
+ @synonyms "add label, new tag label, create caption"
647
+ @tier "presentation"
648
+ rootLabel : string = "All tags"
649
+ @label "Back-to-root label"
650
+ @description "Label on the back affordance that returns from a drilled-in level to the root — phrase it in this taxonomy's vocabulary (All tags, All categories)."
651
+ @synonyms "back label, root caption, all label"
652
+ @tier "presentation"
643
653
  tableLook : "dense" | "spacious" | "striped" | "borderless" | "card-rows" = dense
644
654
  @label "Table look"
645
655
  @description "Layer 2 visual treatment for the data table rendered by this atom."
@@ -1,5 +1,5 @@
1
1
  app std-thread "1.3.0"
2
- "std-thread — forum-style nested replies with collapse + flat-mode toggle. Owns ThreadPost (persistent). flat:true covers 1:1 linear inquiry threads; flat:false renders forum-style nested. INIT fetches, scoped by @config.threadRootId when set (blank = every root, the default). REPLY persists a child post under @payload.parentId, stamped with the real @user identity. A consumer that mounts this as page comments forwards its own document-opened signal to SET_THREAD_ROOT { rootId }, which stamps the frame and refetches filtered by the payload; the after-create and after-select refetch arms keep filtering by @config.threadRootId, so a mutation re-widens the panel until the consumer re-fires SET_THREAD_ROOT. Layer 3 variants override `bodyContent` to deliver chat-bubble, email-threaded, or linear-comments UX while inheriting the same trait, state machine, emits, and listens."
2
+ "std-thread — forum-style nested replies with collapse + flat-mode toggle. Owns ThreadPost (persistent). flat:true covers 1:1 linear inquiry threads; flat:false renders forum-style nested. INIT fetches, scoped by @config.threadRootId when set (blank = every root, the default). REPLY persists a child post under @payload.parentId, stamped with the real @user identity. A consumer that mounts this as page comments forwards its own document-opened signal to SET_THREAD_ROOT { rootId }, which stamps the frame and refetches filtered by the payload; the after-create and after-select refetch arms keep filtering by @config.threadRootId, so a mutation re-widens the panel until the consumer re-fires SET_THREAD_ROOT. Layer 3 variants override `bodyContent` to deliver chat-bubble, email-threaded, or linear-comments UX while inheriting the same trait, state machine, emits, and listens. A non-empty sectionTitle switches the default bodyContent into titled-comments mode: header + post list + a standalone composer button (without it an empty thread has no REPLY emitter at all — the affordance only existed per-row)."
3
3
  orbital ThreadPostOrbital {
4
4
  ;; Forward relation: array of child ThreadPost IDs whose parentId === this.id.
5
5
  ;; Lowers to `type: "relation", cardinality: "many"` (orbital-lolo lower.rs).
@@ -15,7 +15,15 @@ orbital ThreadPostOrbital {
15
15
 
16
16
  type ThreadPostLoadFailed = Event { error : string, code : string } "Fired when the thread-post collection fails to load"
17
17
 
18
- type ThreadPostCreated = Event { row : ThreadPost } "Fired after a new thread-post persists successfully"
18
+ ;; Bare entity alias, not { row: ThreadPost } — `persist create`'s success
19
+ ;; emit is the created row itself (flat), matching @almadar/runtime's
20
+ ;; EffectExecutor.ts (`successPayload = persisted ?? data`, emitted
21
+ ;; directly) AND orbital-core's executor.rs (`executed_with_value(effect,
22
+ ;; value)`), verified live 2026-08-30: a wrapped declaration validates and
23
+ ;; compiles clean but silently returns undefined for every `?row.<field>`
24
+ ;; access — no validator connects a persist-emit's declared shape to what
25
+ ;; the effect that fires it actually produces.
26
+ type ThreadPostCreated = Event ThreadPost "Fired after a new thread-post persists successfully"
19
27
 
20
28
  type ThreadPostCreateFailed = Event { error : string, code : string } "Fired when a new thread-post fails to persist"
21
29
 
@@ -97,7 +105,7 @@ orbital ThreadPostOrbital {
97
105
  type: typography
98
106
  variant: h4
99
107
  }, {
100
- action: EDIT_REPLY
108
+ onChange: EDIT_REPLY
101
109
  placeholder: "Your reply…"
102
110
  type: textarea
103
111
  }, {
@@ -121,19 +129,50 @@ orbital ThreadPostOrbital {
121
129
  gap: md
122
130
  type: stack
123
131
  })
132
+ ;; Scoped to the row just created, not @config.threadRootId — a runtime-
133
+ ;; scoped consumer (SET_THREAD_ROOT-driven, e.g. std-wiki's WikiComments)
134
+ ;; never sets config.threadRootId, so that filter was permanently blank/
135
+ ;; unfiltered here and every document's posts bled together on refetch.
136
+ ;; ?threadRootId is the FLAT field on ThreadPostCreated's payload (the
137
+ ;; row's own scope, per the create effect's fallback chain) — NOT
138
+ ;; ?row.threadRootId; ThreadPostCreated's payload is the created row
139
+ ;; itself (see the type alias above), no `row` wrapper exists.
124
140
  ThreadPostCreated -> browsing
141
+ (set @entity.content "")
142
+ (set @entity.parentId "")
125
143
  (fetch ThreadPost {
126
144
  emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
127
- filter: (or ["=", @config.threadRootId, ""] ["=", (object/get @entity threadRootId), @config.threadRootId])
145
+ filter: (or ["=", ?threadRootId, ""] ["=", (object/get @entity threadRootId), ?threadRootId])
128
146
  include: (replies)
129
147
  })
148
+ ;; SELECT's payload IS { id, row } (caller-constructed, unlike the
149
+ ;; persist-auto-emitted ThreadPostCreated) — ?row.threadRootId is
150
+ ;; correct here.
130
151
  SELECT -> loading
131
152
  (set @entity.focusedRow ?row)
132
153
  (fetch ThreadPost {
133
154
  emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
134
- filter: (or ["=", @config.threadRootId, ""] ["=", (object/get @entity threadRootId), @config.threadRootId])
155
+ filter: (or ["=", ?row.threadRootId, ""] ["=", (object/get @entity threadRootId), ?row.threadRootId])
135
156
  include: (replies)
136
157
  })
158
+ ;; Inline composers (bodyContent overrides with their own textarea +
159
+ ;; submit button) fire the composer triad while the trait sits in
160
+ ;; browsing — without these arms every such click is swallowed.
161
+ EDIT_REPLY -> browsing
162
+ (set @entity.content ?value)
163
+ SUBMIT_REPLY -> browsing when (not ["=", (str/default @entity.content ""), ""])
164
+ (persist create ThreadPost {
165
+ authorId: @user.id
166
+ authorName: @user.name
167
+ content: @entity.content
168
+ parentId: (str/default @entity.parentId "")
169
+ threadRootId: (str/default @entity.threadRootId (str/default @config.threadRootId root))
170
+ } {
171
+ emit: { failure: ThreadPostCreateFailed, success: ThreadPostCreated }
172
+ })
173
+ CANCEL_REPLY -> browsing
174
+ (set @entity.content "")
175
+ (set @entity.parentId "")
137
176
  ;; replying.SUBMIT_REPLY -> browsing lands here before the persist
138
177
  ;; resolves; a failure must be caught here too, not just replying's twin arm.
139
178
  ThreadPostCreateFailed -> browsing
@@ -163,19 +202,27 @@ orbital ThreadPostOrbital {
163
202
  state replying {
164
203
  EDIT_REPLY -> replying
165
204
  (set @entity.content ?value)
166
- SUBMIT_REPLY -> browsing
167
- (persist create ThreadPost (object/merge ?data { authorId: @user.id, authorName: @user.name }) {
205
+ SUBMIT_REPLY -> browsing when (not ["=", (str/default @entity.content ""), ""])
206
+ (persist create ThreadPost {
207
+ authorId: @user.id
208
+ authorName: @user.name
209
+ content: @entity.content
210
+ parentId: (str/default @entity.parentId "")
211
+ threadRootId: (str/default @entity.threadRootId (str/default @config.threadRootId root))
212
+ } {
168
213
  emit: { failure: ThreadPostCreateFailed, success: ThreadPostCreated }
169
214
  })
170
215
  CANCEL_REPLY -> browsing
171
216
  (set @entity.content "")
172
217
  (set @entity.parentId "")
218
+ ;; Scoped to the row just created (?threadRootId, flat) — see the twin
219
+ ;; arm in `browsing` for why.
173
220
  ThreadPostCreated -> browsing
174
221
  (set @entity.content "")
175
222
  (set @entity.parentId "")
176
223
  (fetch ThreadPost {
177
224
  emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
178
- filter: (or ["=", @config.threadRootId, ""] ["=", (object/get @entity threadRootId), @config.threadRootId])
225
+ filter: (or ["=", ?threadRootId, ""] ["=", (object/get @entity threadRootId), ?threadRootId])
179
226
  include: (replies)
180
227
  })
181
228
  ThreadPostCreateFailed -> replying
@@ -234,10 +281,8 @@ orbital ThreadPostOrbital {
234
281
  @description "Indicates a reply has been modified."
235
282
  @synonyms "update, change, modify"
236
283
  @tier "presentation"
237
- SUBMIT_REPLY {
238
- data : @entity!
239
- }
240
- @description "Signals a new reply has been successfully submitted."
284
+ SUBMIT_REPLY
285
+ @description "Signals the composed draft should be persisted as a new post — the draft is read from the entity frame (@entity.content), so bare buttons can emit it."
241
286
  @synonyms "post, send, add, publish"
242
287
  @tier "domain"
243
288
  CANCEL_REPLY
@@ -257,10 +302,8 @@ orbital ThreadPostOrbital {
257
302
  @description "Indicates a failure to load a thread post."
258
303
  @synonyms "load error, fetch failed, retrieval failed"
259
304
  @tier "internal"
260
- ThreadPostCreated {
261
- row : ThreadPost
262
- }
263
- @description "A new post has been added to the thread."
305
+ ThreadPostCreated
306
+ @description "A new post has been added to the thread — payload is the created ThreadPost row itself (flat: ?id, ?threadRootId, ?authorId, ?content, …), not wrapped under a row field."
264
307
  @synonyms "new post, added, created"
265
308
  @tier "domain"
266
309
  ThreadPostCreateFailed {
@@ -294,10 +337,8 @@ orbital ThreadPostOrbital {
294
337
  @description "A reply is being modified."
295
338
  @synonyms "update, change, revise"
296
339
  @tier "presentation"
297
- SUBMIT_REPLY {
298
- data : @entity!
299
- }
300
- @description "A new reply has been submitted and is awaiting processing."
340
+ SUBMIT_REPLY
341
+ @description "A new reply has been submitted and is awaiting processing — the draft is read from the entity frame (@entity.content), no payload required."
301
342
  @synonyms "post, send, add, submit"
302
343
  @tier "domain"
303
344
  CANCEL_REPLY
@@ -317,10 +358,8 @@ orbital ThreadPostOrbital {
317
358
  @description "Indicates a failure to load a thread post."
318
359
  @synonyms "error, failure, load failed"
319
360
  @tier "internal"
320
- ThreadPostCreated {
321
- row : ThreadPost
322
- }
323
- @description "A new post has been added to the thread."
361
+ ThreadPostCreated
362
+ @description "A new post has been added to the thread — payload is the created ThreadPost row itself (flat: ?id, ?threadRootId, ?authorId, ?content, …), not wrapped under a row field."
324
363
  @synonyms "new post, added, created"
325
364
  @tier "domain"
326
365
  ThreadPostCreateFailed {
@@ -356,9 +395,15 @@ orbital ThreadPostOrbital {
356
395
  @label "recipientName"
357
396
  @description "Header/recipient label for chat-style threads."
358
397
  @tier "presentation"
359
- sectionTitle : string = Discussion
398
+ sectionTitle : string = ""
360
399
  @label "sectionTitle"
361
- @description "Section header for linear-comment threads."
400
+ @description "Section header rendered by the default bodyContent when non-empty, along with a standalone composer button — the only REPLY affordance an empty thread has. Blank (the default) keeps the bare post list for embedded threads that bring their own chrome (chat rails, custom comment sections)."
401
+ @synonyms "header, comments title, discussion title"
402
+ @tier "presentation"
403
+ composerLabel : string = "Add comment"
404
+ @label "composerLabel"
405
+ @description "Label of the standalone composer button rendered under the post list when sectionTitle is non-empty."
406
+ @synonyms "reply label, comment button, add comment"
362
407
  @tier "presentation"
363
408
  emailAuthorBinding : string = @item.authorName
364
409
  @label "emailAuthorBinding"
@@ -413,7 +458,15 @@ orbital ThreadPostOrbital {
413
458
  @description "Reply binding for the reply body."
414
459
  @tier "presentation"
415
460
  bodyContent : render-ui = {
416
- children: [{
461
+ children: [(if ["!=", @config.sectionTitle, ""] {
462
+ content: @config.sectionTitle
463
+ type: typography
464
+ variant: h4
465
+ } {
466
+ children: []
467
+ gap: none
468
+ type: stack
469
+ }), {
417
470
  entity: ?data
418
471
  fields: [{
419
472
  label: Author
@@ -437,7 +490,17 @@ orbital ThreadPostOrbital {
437
490
  look: @config.tableLook
438
491
  type: data-list
439
492
  variant: card
440
- }]
493
+ }, (if ["!=", @config.sectionTitle, ""] {
494
+ action: REPLY
495
+ icon: message-square
496
+ label: @config.composerLabel
497
+ type: button
498
+ variant: secondary
499
+ } {
500
+ children: []
501
+ gap: none
502
+ type: stack
503
+ })]
441
504
  direction: vertical
442
505
  gap: md
443
506
  type: stack
@@ -1,5 +1,5 @@
1
1
  app std-tree "1.0.0"
2
- "std-tree — generic hierarchical node browser. Fetches a flat TreeNode collection and renders it through file-tree's flat `items` mode (parentId-nested at render time by the component, not the .lolo); OPEN_NODE is the external handoff for a selected node's id. Rebindable: pass `fields` at the call site to retarget it at any parent-pointer entity (categories, org units, comment threads). Search/filter are wired (REFETCH_QUERY/REFETCH_FILTER re-fetch the flat node set server-side); pagination is deliberately NOT offered — a hierarchy is not a paged list, and paging a flat node set would sever children from parents that fell on another page."
2
+ "std-tree — generic hierarchical node browser. Fetches a flat TreeNode collection and renders it through file-tree's flat `items` mode (parentId-nested at render time by the component, not the .lolo); OPEN_NODE is the external handoff for a selected node's id. Rebindable: pass `fields` at the call site to retarget it at any parent-pointer entity (categories, org units, comment threads). Search/filter are wired (REFETCH_QUERY/REFETCH_FILTER re-fetch the flat node set server-side). `look: rail` renders the compact sidebar-navigation form (slim caption, nav-styled rows) for mounting in an app layout's sidebarTrait; SET_CURRENT marks the open record so the row highlights and its ancestors auto-expand; `childAction: true` renders a hover plus-affordance per row emitting CHILD_REQUESTED { parentId } for the host's create-draft writer; pagination is deliberately NOT offered — a hierarchy is not a paged list, and paging a flat node set would sever children from parents that fell on another page."
3
3
  type FilterSpec = { field : string!, label : string, options : [string] }
4
4
  orbital TreeNodeOrbital {
5
5
  type TreeNodeLoaded = Event { data : [TreeNode] } "Fired when the tree node collection finishes loading"
@@ -18,6 +18,11 @@ orbital TreeNodeOrbital {
18
18
  initial: loading
19
19
 
20
20
  state loading {
21
+ SET_CURRENT -> loading
22
+ (set @entity.id ?id)
23
+ (fetch TreeNode {
24
+ emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
25
+ })
21
26
  INIT -> loading
22
27
  (fetch TreeNode {
23
28
  emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
@@ -37,7 +42,13 @@ orbital TreeNodeOrbital {
37
42
  })
38
43
  TreeNodeLoaded -> browsing
39
44
  (render-ui main {
40
- children: [{
45
+ children: [(if ["=", @config.look, "rail"] {
46
+ className: "px-2 pb-1 uppercase tracking-wide"
47
+ color: muted
48
+ content: @config.title
49
+ type: typography
50
+ variant: caption
51
+ } {
41
52
  align: center
42
53
  children: [{ name: list-tree, type: icon }, {
43
54
  content: @config.title
@@ -52,7 +63,11 @@ orbital TreeNodeOrbital {
52
63
  direction: horizontal
53
64
  gap: sm
54
65
  type: stack
55
- }, { type: divider }, (if @config.bodySearch {
66
+ }), (if ["=", @config.look, "rail"] {
67
+ children: []
68
+ gap: none
69
+ type: stack
70
+ } { type: divider }), (if @config.bodySearch {
56
71
  children: [{
57
72
  className: "w-full max-w-md"
58
73
  clearable: true
@@ -84,16 +99,21 @@ orbital TreeNodeOrbital {
84
99
  type: stack
85
100
  }), {
86
101
  items: (array/map ?data (fn row {
87
- icon: @row.icon
102
+ icon: (str/default (object/get @row @config.iconField) "")
88
103
  id: @row.id
89
- label: @row.name
90
- parentId: @row.parentId
104
+ label: (str/default (object/get @row @config.labelField) "")
105
+ parentId: (str/default (object/get @row @config.parentField) "")
91
106
  }))
107
+ look: (if ["=", @config.look, "rail"] nav files)
108
+ nodeActionIcon: plus
109
+ nodeActionLabel: @config.childActionLabel
110
+ onNodeAction: (if @config.childAction ADD_CHILD null)
92
111
  onNodeSelect: OPEN_NODE
112
+ selectedId: (str/default (object/get @entity id) "")
93
113
  type: file-tree
94
114
  }]
95
115
  direction: vertical
96
- gap: md
116
+ gap: (if ["=", @config.look, "rail"] none md)
97
117
  type: stack
98
118
  })
99
119
  TreeNodeLoadFailed -> error
@@ -153,7 +173,7 @@ orbital TreeNodeOrbital {
153
173
  REFETCH_QUERY -> browsing
154
174
  (fetch TreeNode {
155
175
  emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
156
- filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm))
176
+ filter: (or ["=", ?searchTerm, ""] (str/includes (str/default (object/get @entity @config.labelField) "") ?searchTerm))
157
177
  })
158
178
  REFETCH_FILTER -> browsing
159
179
  (fetch TreeNode {
@@ -162,9 +182,25 @@ orbital TreeNodeOrbital {
162
182
  })
163
183
  OPEN_NODE -> browsing
164
184
  (set @entity.id ?id)
185
+ ;; The open record changed (routed from the host document's load
186
+ ;; events): remember it and re-fetch so the re-render highlights the
187
+ ;; row and unfolds its ancestors.
188
+ SET_CURRENT -> browsing
189
+ (set @entity.id ?id)
190
+ (fetch TreeNode {
191
+ emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
192
+ })
193
+ ADD_CHILD -> browsing
194
+ (emit CHILD_REQUESTED { parentId: ?id })
165
195
  TreeNodeLoaded -> browsing
166
196
  (render-ui main {
167
- children: [{
197
+ children: [(if ["=", @config.look, "rail"] {
198
+ className: "px-2 pb-1 uppercase tracking-wide"
199
+ color: muted
200
+ content: @config.title
201
+ type: typography
202
+ variant: caption
203
+ } {
168
204
  align: center
169
205
  children: [{ name: list-tree, type: icon }, {
170
206
  content: @config.title
@@ -179,7 +215,11 @@ orbital TreeNodeOrbital {
179
215
  direction: horizontal
180
216
  gap: sm
181
217
  type: stack
182
- }, { type: divider }, (if @config.bodySearch {
218
+ }), (if ["=", @config.look, "rail"] {
219
+ children: []
220
+ gap: none
221
+ type: stack
222
+ } { type: divider }), (if @config.bodySearch {
183
223
  children: [{
184
224
  className: "w-full max-w-md"
185
225
  clearable: true
@@ -211,16 +251,21 @@ orbital TreeNodeOrbital {
211
251
  type: stack
212
252
  }), {
213
253
  items: (array/map ?data (fn row {
214
- icon: @row.icon
254
+ icon: (str/default (object/get @row @config.iconField) "")
215
255
  id: @row.id
216
- label: @row.name
217
- parentId: @row.parentId
256
+ label: (str/default (object/get @row @config.labelField) "")
257
+ parentId: (str/default (object/get @row @config.parentField) "")
218
258
  }))
259
+ look: (if ["=", @config.look, "rail"] nav files)
260
+ nodeActionIcon: plus
261
+ nodeActionLabel: @config.childActionLabel
262
+ onNodeAction: (if @config.childAction ADD_CHILD null)
219
263
  onNodeSelect: OPEN_NODE
264
+ selectedId: (str/default (object/get @entity id) "")
220
265
  type: file-tree
221
266
  }]
222
267
  direction: vertical
223
- gap: md
268
+ gap: (if ["=", @config.look, "rail"] none md)
224
269
  type: stack
225
270
  })
226
271
  TreeNodeLoadFailed -> error
@@ -275,6 +320,12 @@ orbital TreeNodeOrbital {
275
320
  @description "Signals a tree node has been selected for external handoff."
276
321
  @synonyms "select, choose, open, activate"
277
322
  @tier "domain"
323
+ CHILD_REQUESTED -> external {
324
+ parentId : string!
325
+ }
326
+ @description "Create a new record under this node — the host routes it into its create-draft writer with parentId stamped."
327
+ @synonyms "new subpage, add child page, create under"
328
+ @tier "domain"
278
329
  TreeNodeLoaded {
279
330
  data : [TreeNode]
280
331
  }
@@ -291,6 +342,18 @@ orbital TreeNodeOrbital {
291
342
  }
292
343
 
293
344
  listens {
345
+ SET_CURRENT {
346
+ id : string!
347
+ }
348
+ @description "Mark this record as the open one (routed from the host document's load events); its row highlights and its ancestors auto-expand."
349
+ @synonyms "highlight current, select node, you are here"
350
+ @tier "domain"
351
+ ADD_CHILD {
352
+ id : string!
353
+ }
354
+ @description "The row's hover + affordance was clicked."
355
+ @synonyms "add inside, new child"
356
+ @tier "presentation"
294
357
  REFETCH_QUERY {
295
358
  searchTerm : string!
296
359
  }
@@ -330,6 +393,35 @@ orbital TreeNodeOrbital {
330
393
  @label "Section title"
331
394
  @description "Heading shown above the tree"
332
395
  @tier "presentation"
396
+ labelField : string = name
397
+ @label "Label column"
398
+ @description "Entity field rendered as each node's label. Config-driven on purpose: the trait-level `fields {}` remap is compiled-path-only (the JS runtime never applies it), so a rebind names its columns here and both execution paths agree."
399
+ @synonyms "title field, name column, display field"
400
+ @tier "domain"
401
+ parentField : string = parentId
402
+ @label "Parent column"
403
+ @description "Entity field holding the parent reference the hierarchy nests by."
404
+ @synonyms "parent id field, hierarchy column"
405
+ @tier "domain"
406
+ iconField : string = icon
407
+ @label "Icon column"
408
+ @description "Entity field holding each node's icon name; point it at a nonexistent field (or empty) to suppress per-node icons."
409
+ @synonyms "glyph field, icon column"
410
+ @tier "presentation"
411
+ look : "full" | "rail" = full
412
+ @label "Tree look"
413
+ @description "full = standalone section (heading, count, divider); rail = compact sidebar navigation (slim caption, nav-styled rows) for an app layout's sidebarTrait slot."
414
+ @synonyms "sidebar tree, rail look, nav tree, compact"
415
+ @tier "presentation"
416
+ childAction : boolean = false
417
+ @label "Row + affordance?"
418
+ @description "Render a hover + on every row that emits CHILD_REQUESTED { parentId } — wire it to the host's create-draft writer so new records are born inside the node."
419
+ @synonyms "add inside, new subpage button, plus on rows"
420
+ @tier "domain"
421
+ childActionLabel : string = "Add inside"
422
+ @label "Row + tooltip"
423
+ @description "Accessible label on the row's + affordance (e.g. New subpage)."
424
+ @tier "presentation"
333
425
  bodySearch : boolean = false
334
426
  @label "Show the tree's own search box?"
335
427
  @description "Embeds a search box above the tree that re-fetches the flat node set server-side. Set false (the default) when the page already provides a search affordance (a toolbar Search molecule), so the surface shows one search box instead of two."
@@ -77,11 +77,11 @@ orbital AvatarOrbital {
77
77
  @label "Class Name"
78
78
  @description "Additional CSS classes"
79
79
  @tier "presentation"
80
- onClick : string = "CLICK"
80
+ onClick : event = "CLICK"
81
81
  @label "On Click"
82
82
  @description "Click handler"
83
83
  @tier "presentation"
84
- action : string = "ACTION"
84
+ action : event = "ACTION"
85
85
  @label "Action"
86
86
  @description "Declarative event name — emits UI:{action} via eventBus on click"
87
87
  @tier "presentation"
@@ -68,7 +68,7 @@ orbital BadgeOrbital {
68
68
  @label "Icon Asset"
69
69
  @description "Asset image rendered as the badge icon; takes precedence over icon when provided."
70
70
  @tier "presentation"
71
- onRemove : string = ""
71
+ onRemove : event = ""
72
72
  @label "On Remove"
73
73
  @description "When set, renders a small X button on the right of the badge that invokes this handler — turns the badge into a removable chip. Used by the TagInput molecule and other 'list of removable values' surfaces."
74
74
  @tier "presentation"
@@ -115,7 +115,7 @@ orbital BoxOrbital {
115
115
  @label "Position"
116
116
  @description "Position"
117
117
  @tier "presentation"
118
- action : string = "ACTION"
118
+ action : event = "ACTION"
119
119
  @label "Action"
120
120
  @description "Declarative event name — emits UI:{action} via eventBus on click"
121
121
  @tier "presentation"
@@ -123,7 +123,7 @@ orbital BoxOrbital {
123
123
  @label "Action Payload"
124
124
  @description "Payload to include with the action event"
125
125
  @tier "presentation"
126
- hoverEvent : string = "HOVER"
126
+ hoverEvent : event = "HOVER"
127
127
  @label "Hover Event"
128
128
  @description "Declarative hover event — emits UI:{hoverEvent} with { hovered: true/false } on mouseEnter/mouseLeave"
129
129
  @tier "presentation"
@@ -88,7 +88,7 @@ orbital ButtonOrbital {
88
88
  @label "Icon Asset"
89
89
  @description "Asset image rendered as the leading icon; takes precedence over icon/leftIcon when provided."
90
90
  @tier "presentation"
91
- action : string = "ACTION"
91
+ action : event = "ACTION"
92
92
  @label "Action"
93
93
  @description "Declarative event name — emits UI:{action} via eventBus on click"
94
94
  @tier "presentation"
@@ -66,7 +66,7 @@ orbital CardOrbital {
66
66
  @label "Children"
67
67
  @description "Card content"
68
68
  @tier "presentation"
69
- action : string = "ACTION"
69
+ action : event = "ACTION"
70
70
  @label "Action"
71
71
  @description "Declarative event key emitted on click for trait dispatch"
72
72
  @tier "presentation"