@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.
- package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +9 -3
- package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +8 -2
- package/behaviors/lolo/ui/core/atoms/std-browse.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-date-range.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-detail-layout.lolo +3 -3
- package/behaviors/lolo/ui/core/atoms/std-filter.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-geosearch.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-graphs.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-modal.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-pagination.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-record-detail.lolo +13 -2
- package/behaviors/lolo/ui/core/atoms/std-scatter.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-search.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +319 -0
- package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +27 -17
- package/behaviors/lolo/ui/core/atoms/std-thread.lolo +91 -28
- package/behaviors/lolo/ui/core/atoms/std-tree.lolo +106 -14
- package/behaviors/lolo/ui/core/atoms/ui-avatar.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-box.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/ui-button.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-card.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-checkbox.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-day-cell.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-filter-pill.lolo +4 -4
- package/behaviors/lolo/ui/core/atoms/ui-flip-container.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-hstack.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-infinite-scroll-sentinel.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-input.lolo +3 -3
- package/behaviors/lolo/ui/core/atoms/ui-overlay.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-radio.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-range-slider.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/ui-select.lolo +3 -3
- package/behaviors/lolo/ui/core/atoms/ui-stack.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-switch.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-text-highlight.lolo +5 -5
- package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/ui-time-slot-cell.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-typewriter-text.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-vstack.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-accordion.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-alert.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-branching-logic-builder.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-breadcrumb.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-calendar-grid.lolo +6 -6
- package/behaviors/lolo/ui/core/molecules/ui-carousel.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-code-block.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-confirm-dialog.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +7 -7
- package/behaviors/lolo/ui/core/molecules/ui-date-range-picker.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-date-range-selector.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +5 -5
- package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-emoji-picker.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-empty-state.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-error-state.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +27 -2
- package/behaviors/lolo/ui/core/molecules/ui-filter-group.lolo +4 -4
- package/behaviors/lolo/ui/core/molecules/ui-flip-card.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-form-section-header.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-graph-canvas.lolo +5 -5
- package/behaviors/lolo/ui/core/molecules/ui-graph-view.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-header.lolo +4 -4
- package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-import-source-picker.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-input-group.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-lightbox.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-likert-scale.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-map-view.lolo +4 -4
- package/behaviors/lolo/ui/core/molecules/ui-matrix-question.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-modal.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-notification.lolo +4 -4
- package/behaviors/lolo/ui/core/molecules/ui-number-stepper.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-option-constraint-group.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-orbital-visualization.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-page-header.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-pagination.lolo +4 -4
- package/behaviors/lolo/ui/core/molecules/ui-popover.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-positioned-canvas.lolo +4 -4
- package/behaviors/lolo/ui/core/molecules/ui-progress-dots.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-pull-to-refresh.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-qr-scanner.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-relation-select.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-repeatable-form-section.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-reply-tree.lolo +8 -8
- package/behaviors/lolo/ui/core/molecules/ui-rich-text-editor.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-search-input.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-side-panel.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-sidebar.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-signature-pad.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-sortable-list.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-star-rating.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +4 -4
- package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-tag-input.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-upload-drop-zone.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-version-diff.lolo +6 -6
- package/behaviors/lolo/ui/core/molecules/ui-violation-alert.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-vote-stack.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-wizard-container.lolo +5 -5
- package/behaviors/lolo/ui/core/molecules/ui-wizard-navigation.lolo +6 -6
- package/behaviors/lolo/ui/core/molecules/ui-wizard-progress.lolo +2 -2
- package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +1 -1
- package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +1 -1
- package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +3 -3
- package/behaviors/lolo/ui/core/organisms/ui-form.lolo +3 -3
- package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +1 -1
- package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +1 -1
- package/behaviors/lolo/ui/core/organisms/ui-tabbed-container.lolo +1 -1
- package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +1 -1
- package/behaviors/lolo/ui/core/templates/ui-counter-template.lolo +6 -6
- package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +11 -6
- package/behaviors/lolo/ui/game/atoms/ui-canvas-2d.lolo +4 -4
- package/behaviors/lolo/ui/game/atoms/ui-canvas.lolo +5 -5
- package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +4 -4
- package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +4 -4
- package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-sequence-bar.lolo +4 -4
- package/behaviors/lolo/ui/game/atoms/ui-state-graph.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +7 -7
- package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +1 -1
- package/behaviors/lolo/ui/learning/atoms/ui-algo-graph-canvas.lolo +2 -2
- package/behaviors/lolo/ui/learning/atoms/ui-algorithm-canvas.lolo +1 -1
- package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +1 -1
- package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +1 -1
- package/behaviors/lolo/ui/learning/atoms/ui-learning-canvas.lolo +2 -2
- package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +1 -1
- package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +1 -1
- package/behaviors/registry/infra/atoms/std-approval-gate.orb +37 -9
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +12 -2
- package/behaviors/registry/ui/core/atoms/std-browse.orb +2 -1
- package/behaviors/registry/ui/core/atoms/std-calendar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-date-range.orb +2 -1
- package/behaviors/registry/ui/core/atoms/std-detail-layout.orb +3 -3
- package/behaviors/registry/ui/core/atoms/std-filter.orb +2 -1
- package/behaviors/registry/ui/core/atoms/std-geosearch.orb +2 -1
- package/behaviors/registry/ui/core/atoms/std-graphs.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-modal.orb +5 -1
- package/behaviors/registry/ui/core/atoms/std-pagination.orb +2 -1
- package/behaviors/registry/ui/core/atoms/std-record-detail.orb +38 -2
- package/behaviors/registry/ui/core/atoms/std-scatter.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-search.orb +2 -1
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +1381 -0
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +34 -18
- package/behaviors/registry/ui/core/atoms/std-thread.orb +296 -109
- package/behaviors/registry/ui/core/atoms/std-tree.orb +447 -68
- package/behaviors/registry/ui/core/atoms/ui-avatar.orb +2 -2
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-box.orb +2 -2
- package/behaviors/registry/ui/core/atoms/ui-button.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-card.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-day-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-filter-pill.orb +5 -4
- package/behaviors/registry/ui/core/atoms/ui-flip-container.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-hstack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-infinite-scroll-sentinel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-input.orb +3 -3
- package/behaviors/registry/ui/core/atoms/ui-overlay.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-radio.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-range-slider.orb +2 -2
- package/behaviors/registry/ui/core/atoms/ui-select.orb +3 -3
- package/behaviors/registry/ui/core/atoms/ui-stack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-switch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-text-highlight.orb +5 -5
- package/behaviors/registry/ui/core/atoms/ui-textarea.orb +2 -2
- package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-typewriter-text.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-vstack.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-accordion.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-alert.orb +3 -3
- package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +6 -6
- package/behaviors/registry/ui/core/molecules/ui-carousel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-code-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +3 -3
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +7 -7
- package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-details.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +5 -5
- package/behaviors/registry/ui/core/molecules/ui-drawer.orb +3 -2
- package/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-empty-state.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-error-state.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +42 -1
- package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +4 -4
- package/behaviors/registry/ui/core/molecules/ui-flip-card.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-form-section-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +5 -5
- package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-header.orb +4 -4
- package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-input-group.orb +3 -3
- package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-map-view.orb +4 -4
- package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-modal.orb +4 -3
- package/behaviors/registry/ui/core/molecules/ui-notification.orb +4 -4
- package/behaviors/registry/ui/core/molecules/ui-number-stepper.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-page-header.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-pagination.orb +5 -4
- package/behaviors/registry/ui/core/molecules/ui-popover.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-positioned-canvas.orb +4 -4
- package/behaviors/registry/ui/core/molecules/ui-progress-dots.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-pull-to-refresh.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-qr-scanner.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +3 -3
- package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +8 -8
- package/behaviors/registry/ui/core/molecules/ui-rich-text-editor.orb +3 -2
- package/behaviors/registry/ui/core/molecules/ui-search-input.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-side-panel.orb +3 -2
- package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +3 -3
- package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +3 -3
- package/behaviors/registry/ui/core/molecules/ui-sortable-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-star-rating.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +4 -4
- package/behaviors/registry/ui/core/molecules/ui-tabs.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-tag-input.orb +3 -3
- package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +6 -6
- package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-vote-stack.orb +2 -2
- package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +5 -5
- package/behaviors/registry/ui/core/molecules/ui-wizard-navigation.orb +6 -6
- package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +2 -2
- package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-form-section.orb +3 -3
- package/behaviors/registry/ui/core/organisms/ui-form.orb +3 -3
- package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-timeline.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-counter-template.orb +6 -6
- package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +13 -6
- package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +4 -4
- package/behaviors/registry/ui/game/atoms/ui-canvas.orb +5 -5
- package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +2 -2
- package/behaviors/registry/ui/game/atoms/ui-control-button.orb +4 -4
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +4 -4
- package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +4 -4
- package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +8 -7
- package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +7 -13
- package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +2 -2
- package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +2 -2
- package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1 -1
- package/dist/behaviors/exports-reader.js +2587 -1923
- package/dist/behaviors/functions/index.d.ts +183 -16
- package/dist/behaviors/functions/index.js +2585 -1924
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +2588 -1924
- package/dist/behaviors/query.js +2587 -1923
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +15 -7
- package/dist/behaviors-registry.json +597 -14
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2588 -1924
- package/dist/knob-embeddings.hash.json +3 -3
- package/dist/knob-embeddings.json +1 -1
- package/dist/registry/factory-signatures.json +1 -1
- 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
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 ["=",
|
|
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 ["=",
|
|
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
|
|
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 ["=",
|
|
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
|
-
|
|
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 :
|
|
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
|
-
|
|
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 :
|
|
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 =
|
|
398
|
+
sectionTitle : string = ""
|
|
360
399
|
@label "sectionTitle"
|
|
361
|
-
@description "Section header for
|
|
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
|
-
},
|
|
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.
|
|
102
|
+
icon: (str/default (object/get @row @config.iconField) "")
|
|
88
103
|
id: @row.id
|
|
89
|
-
label: @row.
|
|
90
|
-
parentId: @row.
|
|
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
|
|
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
|
-
},
|
|
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.
|
|
254
|
+
icon: (str/default (object/get @row @config.iconField) "")
|
|
215
255
|
id: @row.id
|
|
216
|
-
label: @row.
|
|
217
|
-
parentId: @row.
|
|
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 :
|
|
80
|
+
onClick : event = "CLICK"
|
|
81
81
|
@label "On Click"
|
|
82
82
|
@description "Click handler"
|
|
83
83
|
@tier "presentation"
|
|
84
|
-
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 :
|
|
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 :
|
|
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 :
|
|
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 :
|
|
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 :
|
|
69
|
+
action : event = "ACTION"
|
|
70
70
|
@label "Action"
|
|
71
71
|
@description "Declarative event key emitted on click for trait dispatch"
|
|
72
72
|
@tier "presentation"
|