@almadar/std 16.252.0 → 16.254.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/agent/atoms/std-agent-pool.lolo +355 -0
- package/behaviors/lolo/agent/atoms/std-agent-suggestions.lolo +16 -2
- package/behaviors/lolo/agent/evals/eval-agent-builder.lolo +152 -0
- package/behaviors/lolo/agent/organisms/std-agent-builder.lolo +320 -26
- package/behaviors/lolo/ui/learning/atoms/std-learn-generate.lolo +6 -4
- package/behaviors/lolo-behavior-contracts.json +1 -1
- package/behaviors/registry/agent/atoms/std-agent-context.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-fix-loop.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-planner.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-pool.orb +1 -0
- package/behaviors/registry/agent/atoms/std-agent-proposal.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-session.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-suggestions.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-tool-call.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-trace.orb +1 -1
- package/behaviors/registry/agent/evals/eval-agent-builder.orb +1 -0
- package/behaviors/registry/agent/organisms/std-agent-assistant.orb +1 -1
- package/behaviors/registry/agent/organisms/std-agent-builder.orb +1 -1
- package/behaviors/registry/infra/atoms/std-analytics.orb +1 -1
- package/behaviors/registry/infra/atoms/std-approval-gate.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cache-aside.orb +1 -1
- package/behaviors/registry/infra/atoms/std-calendar-sync.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cascade-on-delete.orb +1 -1
- package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +1 -1
- package/behaviors/registry/infra/atoms/std-data-erasure.orb +1 -1
- package/behaviors/registry/infra/atoms/std-data-import.orb +1 -1
- package/behaviors/registry/infra/atoms/std-global-search.orb +1 -1
- package/behaviors/registry/infra/atoms/std-knowledge-loop.orb +1 -1
- package/behaviors/registry/infra/atoms/std-lifecycle.orb +1 -1
- package/behaviors/registry/infra/atoms/std-migration-job.orb +1 -1
- package/behaviors/registry/infra/atoms/std-mod-queue.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notification-center.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notification-preferences.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notify-on-event.orb +1 -1
- package/behaviors/registry/infra/atoms/std-page-search.orb +1 -1
- package/behaviors/registry/infra/atoms/std-page-watch.orb +1 -1
- package/behaviors/registry/infra/atoms/std-permission-matrix.orb +1 -1
- package/behaviors/registry/infra/atoms/std-rate-limiter.orb +1 -1
- package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +1 -1
- package/behaviors/registry/infra/atoms/std-review-cycle.orb +1 -1
- package/behaviors/registry/infra/atoms/std-row-access-control.orb +1 -1
- package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +1 -1
- package/behaviors/registry/infra/organisms/std-status-lifecycle-control.orb +1 -1
- package/behaviors/registry/ml/atoms/std-data-collector.orb +1 -1
- package/behaviors/registry/ml/atoms/std-graph-builder.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-classify.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-infer.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-lookup.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-posterior.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-similarity.orb +1 -1
- package/behaviors/registry/ml/atoms/std-tokenizer.orb +1 -1
- package/behaviors/registry/ml/atoms/std-weight-validator.orb +1 -1
- package/behaviors/registry/ml/organisms/std-escalating-decision.orb +1 -1
- package/behaviors/registry/ml/organisms/std-knowledge-tracing.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/std-avl-cosmic-zoom.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-glyph.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-transition-detail.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-transition-explainer.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-behavior-view.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-flow-canvas.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-layers-panel.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-orb-inspector.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-app-search.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-behavior-catalog.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-behavior-tour.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-board.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-book-reader.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-browse.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-calendar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-card-grid.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-confirmation.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-date-range.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-doc-page.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-esign-request.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-event-log.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-export.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-file-store.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-filter.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-gallery.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-gantt-schedule.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-graphs.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-hero.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-home.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-import.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-language-picker.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-media-section.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-modal-editor.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-modal.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-notification-panel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-panel-launcher.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-pricing.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-proof.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-prose.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-rating-review.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-record-detail.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-recurrence.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-related.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-role-gate.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-saved-search.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-scatter.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-scoped-list.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-selection.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-site-footer.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-site-header.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-slide-deck.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-stat-band.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-stats.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-step-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-steps.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tabs.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-thread.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tree.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-wizard.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-workspace-layout.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-animated-graphic.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-animated-reveal.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-aside.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-avatar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-box.orb +1 -1
- 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-center.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-conditional-wrapper.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-confetti-effect.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-day-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-dialog.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-divider.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-filter-pill.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-flip-container.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-hstack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-icon.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-image.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 +1 -1
- package/behaviors/registry/ui/core/atoms/ui-label.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-law-reference-tooltip.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-overlay.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-pattern-tile.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-presence.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-progress-bar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-radio.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-range-slider.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-section-header.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-select.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-spacer.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-sparkline.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-spinner.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-stack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-status-dot.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-branch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-connection.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-grid.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-lobe.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-mesh.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-morph.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-node.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-pulse.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-ring.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-shield.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-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 +1 -1
- package/behaviors/registry/ui/core/atoms/ui-textarea.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-theme-toggle.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-trend-indicator.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-typewriter-text.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-typography.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-video-embed.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-vstack.orb +1 -1
- package/behaviors/registry/ui/core/molecules/std-stat-rows.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-accordion.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-activation-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-activity-rail.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-activity-feed.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-activity-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-chat-feed.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-alert.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-animated-counter.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-bloom-quiz-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-carousel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-change-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-chart-legend.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-chart.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-code-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-commit-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-connection-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-container.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-breadcrumb.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-pagination.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-search.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-sidebar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-toc.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-details.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-drawer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-edge-decoration.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-empty-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-error-boundary.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-error-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-feature-card.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-feature-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-flex.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-flip-card.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-field.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-section-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-fx-overlay.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-gantt.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-geometric-pattern.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-gradient-divider.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-icon-button.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-input-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-jazari-state-machine.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-line-chart.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-loading-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-map-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-markdown-content.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-menu.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-meter.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-modal.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-navigation.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-notification.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-number-stepper.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-page-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-page-transition.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-pagination.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-popover.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-positioned-canvas.orb +1 -1
- 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 +1 -1
- package/behaviors/registry/ui/core/molecules/ui-quiz-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-reflection-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-rich-text-editor.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-scaled-diagram.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-search-input.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-section.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-side-panel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-simple-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-skeleton.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-social-proof.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-sortable-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-split.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-star-rating.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-stat-display.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tabs.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tag-input.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tooltip.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-top-nav-item.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-vote-stack.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-navigation.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-code-runner-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-dock-layout.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-drawer-slot.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-form-section.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-form.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-master-detail-layout.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-modal-slot.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-runtime-debugger.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-split-pane.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-state-machine-view.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/organisms/ui-toast-slot.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-auth-layout.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-counter-template.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-generic-app-template.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-arcade-play.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-area-fill.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-audio-cue.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-camera-rig.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-chase-ai.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-choice-gate.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-coef-pad.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-curve-fog.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-narrative.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-trail.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gate-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gather.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gold.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-grid-tactics.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-hero-nav.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-lives.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-loop-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-market-flow.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-motion-body.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-objective-reach.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-pad-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-patience.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-patrol-hazard.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-pickup.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-production.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-score.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-tutorial-autodemo.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-velocity-gate.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-xp.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-zone-card.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-control-button.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-mesh.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-cue.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-score-display.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-state-json-view.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-timer-display.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-platformer-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/templates/ui-game-shell.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-arrangement.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-compare.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-diagram.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-fx-cues.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-generate.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-live-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-measure.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-param-explorer.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-perturb.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sample-accumulator.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sandbox.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sim-3d.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-slope-probe.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-trace-player.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +1 -1
- 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 +1 -1
- 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-embeddings.hash.json +2 -2
- package/dist/behaviors-embeddings.json +1 -1
- package/dist/knob-embeddings.hash.json +2 -2
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"std-learn-tour-3d","version":"1.0.0","description":"Generic guided-tour-over-3D-stations instrument. Contract: a config-declared roster of stations (id, name, caption, x, y, z, radius, color, shape, opacity) plus optional connector edges (from, to, color, label), rendered as an orbit-rotatable volumetric scene on a biology-canvas in 3D mode; pressing Tour advances the selection to the next station (mod the roster length) and clicking a shape selects its station — either way the camera retargets onto the selected station's x/y/z, the station enlarges, a name — caption narration renders, and a progress readout tracks visited stations until every station has been toured. A `backdrop` knob renders non-station scene geometry under the stations (painted, never toured). SYNC_STATIONS hot-swaps the roster mid-flight (a composed preset coordinator emits it with new stations/edges/backdrop; the tour adopts them and restarts progress at the first new station) — the single-writer entry point for dynamic rosters. Composed of a biology-canvas in 3D mode plus a tour state machine. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.","orbitals":[{"name":"LearnTour3DOrbital","id":"orb_32E7G85TQJXBS0KPNP8DDDR4Q2","entity":{"name":"Learn3DTourScene","id":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"active","type":"boolean","default":false},{"name":"title","type":"string"},{"name":"stations","type":"array","items":{"type":"object","properties":{"radius":{"name":"radius","type":"number","required":false},"shape":{"name":"shape","type":"string","required":false},"caption":{"name":"caption","type":"string","required":false},"x":{"name":"x","type":"number","required":true},"opacity":{"name":"opacity","type":"number","required":false},"y":{"name":"y","type":"number","required":true},"z":{"name":"z","type":"number","required":true},"id":{"name":"id","type":"string","required":true},"name":{"name":"name","type":"string","required":true},"color":{"name":"color","type":"string","required":false}}}},{"name":"backdrop","type":"array","default":[],"items":{"type":"object","properties":{"radius":{"name":"radius","type":"number","required":false},"y":{"name":"y","type":"number","required":true},"id":{"name":"id","type":"string","required":true},"color":{"name":"color","type":"string","required":false},"z":{"name":"z","type":"number","required":true},"opacity":{"name":"opacity","type":"number","required":false},"name":{"name":"name","type":"string","required":true},"x":{"name":"x","type":"number","required":true},"caption":{"name":"caption","type":"string","required":false},"shape":{"name":"shape","type":"string","required":false}}}},{"name":"edges","type":"array","items":{"type":"object","properties":{"color":{"name":"color","type":"string","required":false},"from":{"name":"from","type":"string","required":true},"label":{"name":"label","type":"string","required":false},"to":{"name":"to","type":"string","required":true}}}},{"name":"selectedIndex","type":"number","default":0},{"name":"selectedId","type":"string","default":""},{"name":"visitedIds","type":"array","default":[],"items":{"type":"string"}},{"name":"tourComplete","type":"boolean","default":false},{"name":"narration","type":"string","default":""}]},"traits":[{"name":"Learn3DTourSim","id":"trt_0QMWGD02D616K57FG6CRFVKNC7","entityRebindable":true,"entityContract":{"requires":[],"provides":["active","backdrop","edges","narration","selectedId","selectedIndex","stations","title","tourComplete","visitedIds"]},"effectRow":[{"kind":"emit","resource":"LEARN_ROUND_COMPLETE"},{"kind":"emit","resource":"TOUR_3D_UPDATED"},{"kind":"render-ui","resource":"main"},{"kind":"set","resource":"@entity.active"},{"kind":"set","resource":"@entity.backdrop"},{"kind":"set","resource":"@entity.edges"},{"kind":"set","resource":"@entity.narration"},{"kind":"set","resource":"@entity.selectedId"},{"kind":"set","resource":"@entity.selectedIndex"},{"kind":"set","resource":"@entity.stations"},{"kind":"set","resource":"@entity.title"},{"kind":"set","resource":"@entity.tourComplete"},{"kind":"set","resource":"@entity.visitedIds"}],"category":"interaction","linkedEntity":"Learn3DTourScene","linkedEntityId":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V","entityRefIds":{"Learn3DTourScene":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V"},"emits":[{"event":"TOUR_3D_UPDATED","eventId":"evt_7HJYQ5KNXDTYPMQ3C8DN29253X","description":"Fires on INIT/MODE_SELECTED/Tour/click/Reset with the currently selected station's id, name, and caption, plus visited/total progress and whether every station has now been visited — a composed listener (readout, quiz) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"select, choose, station, explore, tour, flythrough, pick","tier":"domain","scope":"external","payloadSchema":[{"name":"id","type":"string"},{"name":"name","type":"string"},{"name":"caption","type":"string"},{"name":"visited","type":"number"},{"name":"total","type":"number"},{"name":"tourComplete","type":"boolean"}]},{"event":"LEARN_ROUND_COMPLETE","eventId":"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B","description":"Fired once when the visit that completes the tour lands (every station explored) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion, tour complete","tier":"domain","scope":"external","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true}],"events":[{"key":"INIT","id":"evt_22CTABEB725KHDBF03BBPYVP18","name":"Initialize"},{"key":"MODE_SELECTED","id":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","name":"Mode Selected","description":"Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.","tier":"domain","payloadSchema":[{"name":"mode","type":"string"}],"listened":true},{"key":"ROSTER_LOADED","id":"evt_R4SH16AGVX8DYVCEN6VQA1010F","name":"Roster Loaded","description":"Runtime content feed, honoured only when rosterSource is event — mode names the instrument it is for (the matchMode it carries, blank when standalone) and stations, edges and backdrop are the scene roster; a matching instrument re-initialises from it exactly as INIT does from config, any other instrument hides.","tier":"domain","payloadSchema":[{"name":"mode","type":"string","required":true},{"name":"stations","type":"[object]","required":true,"properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]},{"name":"edges","type":"[object]","required":true,"properties":[{"name":"from","type":"string","required":true},{"name":"to","type":"string","required":true},{"name":"color","type":"string"},{"name":"label","type":"string"}]},{"name":"backdrop","type":"[object]","required":true,"properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]}],"listened":true},{"key":"TOUR","id":"evt_M3T6PV4R8MC4ACHPR918QX5PND","name":"Tour"},{"key":"SELECT_STATION","id":"evt_AM57H49FZGQZR0G3ZJE66BT3ZK","name":"Select Station","description":"Canvas shape-click from the 3D scene (biology-canvas onShapeClick) carrying the clicked station's id, type, and roster index.","tier":"domain","payloadSchema":[{"name":"payload","type":"object","properties":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"index","type":"number","required":true}]}],"listened":true},{"key":"RESET","id":"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0","name":"Reset"},{"key":"SYNC_STATIONS","id":"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC","name":"Sync Stations","description":"Roster hot-swap from a composed preset coordinator — the tour adopts the new stations/edges/backdrop and restarts progress at the first new station; the single-writer entry point for dynamic rosters.","tier":"domain","payloadSchema":[{"name":"stations","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]},{"name":"edges","type":"[object]","properties":[{"name":"from","type":"string","required":true},{"name":"to","type":"string","required":true},{"name":"color","type":"string"},{"name":"label","type":"string"}]},{"name":"backdrop","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]}],"listened":true},{"key":"TOUR_3D_UPDATED","id":"evt_7HJYQ5KNXDTYPMQ3C8DN29253X","name":"Tour 3d Updated","description":"Fires on INIT/MODE_SELECTED/Tour/click/Reset with the currently selected station's id, name, and caption, plus visited/total progress and whether every station has now been visited — a composed listener (readout, quiz) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"select, choose, station, explore, tour, flythrough, pick","tier":"domain","payloadSchema":[{"name":"id","type":"string"},{"name":"name","type":"string"},{"name":"caption","type":"string"},{"name":"visited","type":"number"},{"name":"total","type":"number"},{"name":"tourComplete","type":"boolean"}]},{"key":"LEARN_ROUND_COMPLETE","id":"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B","name":"Learn Round Complete","description":"Fired once when the visit that completes the tour lands (every station explored) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion, tour complete","tier":"domain","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_22CTABEB725KHDBF03BBPYVP18","guard":["and",["==","@config.matchMode",""],["==","@config.rosterSource","config"]],"effects":[["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.stations","@config.stations"],["set","@entity.backdrop","@config.backdrop"],["set","@entity.edges","@config.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","guard":["and",["not",["==","@config.matchMode",""]],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","guard":["and",["==","@payload.mode","@config.matchMode"],["==","@config.rosterSource","config"]],"effects":[["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.stations","@config.stations"],["set","@entity.backdrop","@config.backdrop"],["set","@entity.edges","@config.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R4SH16AGVX8DYVCEN6VQA1010F","guard":["and",["==","@config.rosterSource","event"],["and",["==","@payload.mode","@config.matchMode"],[">",["array/len","@payload.stations"],0]]],"effects":[["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.stations","@payload.stations"],["set","@entity.backdrop","@payload.backdrop"],["set","@entity.edges","@payload.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R4SH16AGVX8DYVCEN6VQA1010F","guard":["and",["==","@config.rosterSource","event"],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"TOUR","eventId":"evt_M3T6PV4R8MC4ACHPR918QX5PND","guard":["==","@entity.active",true],"effects":[["if",["and",["not","@entity.tourComplete"],["==",["if",["array/includes","@entity.visitedIds",["object/get",["array/nth","@entity.stations",["math/mod",["+","@entity.selectedIndex",1],["array/len","@entity.stations"]]],"id"]],["array/len","@entity.visitedIds"],["+",["array/len","@entity.visitedIds"],1]],["array/len","@entity.stations"]]],["emit","LEARN_ROUND_COMPLETE",{"score":["array/len","@entity.stations"],"total":["array/len","@entity.stations"]}],null],["set","@entity.selectedIndex",["math/mod",["+","@entity.selectedIndex",1],["array/len","@entity.stations"]]],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"id"]],["set","@entity.visitedIds",["if",["array/includes","@entity.visitedIds","@entity.selectedId"],"@entity.visitedIds",["array/append","@entity.visitedIds","@entity.selectedId"]]],["set","@entity.tourComplete",["==",["array/len","@entity.visitedIds"],["array/len","@entity.stations"]]],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"name"]," — ",["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"name"],"caption":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":"@entity.tourComplete"}]]},{"from":"idle","to":"idle","event":"SELECT_STATION","eventId":"evt_AM57H49FZGQZR0G3ZJE66BT3ZK","guard":["==","@entity.active",true],"effects":[["let",[["clickedId",["object/get","@payload.payload","id"]],["found",["array/findIndex","@entity.stations",["fn","n",["==",["object/get","@n","id"],"@clickedId"]]]],["idx",["if",[">=","@found",0],"@found","@entity.selectedIndex"]]],["do",["if",["and",["not","@entity.tourComplete"],["==",["if",["array/includes","@entity.visitedIds",["object/get",["array/nth","@entity.stations","@idx"],"id"]],["array/len","@entity.visitedIds"],["+",["array/len","@entity.visitedIds"],1]],["array/len","@entity.stations"]]],["emit","LEARN_ROUND_COMPLETE",{"score":["array/len","@entity.stations"],"total":["array/len","@entity.stations"]}],null],["set","@entity.selectedIndex","@idx"],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations","@idx"],"id"]],["set","@entity.visitedIds",["if",["array/includes","@entity.visitedIds","@entity.selectedId"],"@entity.visitedIds",["array/append","@entity.visitedIds","@entity.selectedId"]]],["set","@entity.tourComplete",["==",["array/len","@entity.visitedIds"],["array/len","@entity.stations"]]],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations","@idx"],"name"]," — ",["object/get",["array/nth","@entity.stations","@idx"],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations","@idx"],"name"],"caption":["object/get",["array/nth","@entity.stations","@idx"],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":"@entity.tourComplete"}]]]]},{"from":"idle","to":"idle","event":"RESET","eventId":"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0","guard":["==","@entity.active",true],"effects":[["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"SYNC_STATIONS","eventId":"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC","guard":["==","@entity.active",true],"effects":[["set","@entity.stations","@payload.stations"],["set","@entity.backdrop","@payload.backdrop"],["set","@entity.edges","@payload.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]}]},"config":{"height":{"type":"number","default":400,"label":"Height","description":"Canvas height in pixels.","tier":"presentation"},"summary":{"type":"string","default":"","label":"Concept","description":"One line under the title saying what the learner is looking at (keep it under ~65 characters). Empty shows no line.","tier":"presentation"},"title":{"type":"string","default":"3D Guided Tour","label":"Title","description":"Title shown above the canvas.","tier":"presentation"},"backdrop":{"type":"[Learn3DStation]","default":[],"label":"Backdrop Nodes","description":"Non-station scene geometry rendered under the tour stations (painted first, stations on top) — painted but never tour stops and never highlight-selected; SYNC_STATIONS swaps it together with the roster, so a composed preset coordinator can re-skin the whole scene per preset.","synonyms":"backdrop, scenery, geometry, context nodes, 3d","tier":"domain","items":{"type":"object","properties":{"id":{"name":"id","type":"string","required":true},"color":{"name":"color","type":"string","required":false},"y":{"name":"y","type":"number","required":true},"z":{"name":"z","type":"number","required":true},"name":{"name":"name","type":"string","required":true},"radius":{"name":"radius","type":"number","required":false},"opacity":{"name":"opacity","type":"number","required":false},"shape":{"name":"shape","type":"string","required":false},"x":{"name":"x","type":"number","required":true},"caption":{"name":"caption","type":"string","required":false}}}},"lighting":{"type":"Lighting3D","default":{},"label":"Lighting","description":"3D scene light rig as data; empty object uses the standard rig.","tier":"presentation","properties":{"toneMapping":{"name":"toneMapping","type":"string","required":false,"values":["aces","none"]},"hemisphere":{"name":"hemisphere","type":"object","required":false,"properties":{"intensity":{"name":"intensity","type":"number","required":false},"color":{"name":"color","type":"string","required":false},"groundColor":{"name":"groundColor","type":"string","required":false}}},"points":{"name":"points","type":"array","required":false,"items":{"type":"object","properties":{"distance":{"name":"distance","type":"number","required":false},"color":{"name":"color","type":"string","required":false},"position":{"name":"position","type":"array","required":true,"items":{"type":"number"}},"decay":{"name":"decay","type":"number","required":false},"intensity":{"name":"intensity","type":"number","required":false}}}},"directional":{"name":"directional","type":"object","required":false,"properties":{"color":{"name":"color","type":"string","required":false},"position":{"name":"position","type":"array","required":false,"items":{"type":"number"}},"intensity":{"name":"intensity","type":"number","required":false}}},"environment":{"name":"environment","type":"string","required":false,"values":["room","none"]},"ambient":{"name":"ambient","type":"object","required":false,"properties":{"position":{"name":"position","type":"array","required":false,"items":{"type":"number"}},"intensity":{"name":"intensity","type":"number","required":false},"color":{"name":"color","type":"string","required":false}}}}},"resetLabel":{"type":"string","default":"Reset","label":"Reset Button Label","description":"Label text for the button that returns the tour to the first station.","tier":"presentation"},"tourLabel":{"type":"string","default":"Next station","label":"Tour Button Label","description":"Label text for the button that advances the tour to the next station.","tier":"presentation"},"backgroundColor":{"type":"string","default":"","label":"Background Color","description":"Canvas ground. Empty uses the theme drawing ground.","tier":"presentation"},"post":{"type":"Post3D","default":{},"label":"Post Processing","description":"3D post-processing stack (bloom/vignette) as data; empty object disables it.","tier":"presentation","properties":{"vignette":{"name":"vignette","type":"object","required":false,"properties":{"darkness":{"name":"darkness","type":"number","required":false},"offset":{"name":"offset","type":"number","required":false}}},"bloom":{"name":"bloom","type":"object","required":false,"properties":{"threshold":{"name":"threshold","type":"number","required":false},"smoothing":{"name":"smoothing","type":"number","required":false},"intensity":{"name":"intensity","type":"number","required":false}}}}},"stations":{"type":"[Learn3DStation]","default":[{"id":"alpha","name":"Station Alpha","caption":"The first stop on the tour — the camera retargets here and the narration reads its caption.","x":0,"y":0,"z":0,"radius":1,"color":"series-1","shape":"sphere","opacity":1},{"id":"beta","name":"Station Beta","caption":"The second stop — press Tour again or click a shape to advance the selection.","x":3,"y":1,"z":-1,"radius":0.8,"color":"series-2","shape":"sphere","opacity":1},{"id":"gamma","name":"Station Gamma","caption":"The final stop — once every station has been visited the tour marks itself complete.","x":-3,"y":-1,"z":1,"radius":0.8,"color":"series-3","shape":"sphere","opacity":1}],"label":"Stations","description":"The station roster in didactic tour order — each with scene position, mesh shape, and a caption. Tour and clicks enlarge the selected station, retarget the camera onto its x/y/z, and narrate its caption.","synonyms":"station, stop, waypoint, tour, landmark, 3d","tier":"domain","items":{"type":"object","properties":{"color":{"name":"color","type":"string","required":false},"caption":{"name":"caption","type":"string","required":false},"z":{"name":"z","type":"number","required":true},"name":{"name":"name","type":"string","required":true},"id":{"name":"id","type":"string","required":true},"opacity":{"name":"opacity","type":"number","required":false},"shape":{"name":"shape","type":"string","required":false},"x":{"name":"x","type":"number","required":true},"radius":{"name":"radius","type":"number","required":false},"y":{"name":"y","type":"number","required":true}}}},"zoom":{"type":"number","default":1,"label":"Zoom","description":"Camera zoom factor for the 3D scene.","tier":"presentation"},"width":{"type":"number","default":600,"label":"Width","description":"Canvas width in pixels.","tier":"presentation"},"edges":{"type":"[Learn3DEdge]","default":[],"label":"Edges","description":"Optional connector lines drawn between stations, by id.","synonyms":"edge, link, connector, tether","tier":"domain","items":{"type":"object","properties":{"to":{"name":"to","type":"string","required":true},"color":{"name":"color","type":"string","required":false},"from":{"name":"from","type":"string","required":true},"label":{"name":"label","type":"string","required":false}}}},"matchMode":{"type":"string","default":"","label":"Match Mode","description":"When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.","tier":"presentation"},"azimuth":{"type":"number","default":0.6,"label":"Azimuth","description":"Camera orbit azimuth in radians; the learner can orbit freely on top of this.","tier":"presentation"},"rosterSource":{"type":"string","default":"config","label":"Roster Source","description":"Where the stations, edges and backdrop come from: config reads those knobs at INIT; event waits for ROSTER_LOADED and takes them from its payload.","tier":"domain","values":["config","event"]},"fov":{"type":"number","default":50,"label":"Field of View","description":"Perspective camera field of view in degrees.","tier":"presentation"}},"scope":"instance"}],"pages":[{"name":"Learn3DTourPage","id":"pag_140B20NZBTZNX2182MXPN1YG11","path":"/learn-tour-3d","traits":[{"ref":"Learn3DTourSim","refId":"trt_0QMWGD02D616K57FG6CRFVKNC7"}]}],"types":{"Learn3DClick":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"index","type":"number","required":true}],"Learn3DEdge":[{"name":"from","type":"string","required":true},{"name":"to","type":"string","required":true},{"name":"color","type":"string"},{"name":"label","type":"string"}],"Learn3DStation":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}],"Lighting3D":[{"name":"ambient","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]"}]},{"name":"directional","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]"}]},{"name":"hemisphere","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"groundColor","type":"string"}]},{"name":"points","type":"[object]","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]","required":true},{"name":"distance","type":"number"},{"name":"decay","type":"number"}]},{"name":"environment","type":"string","values":["room","none"]},{"name":"toneMapping","type":"string","values":["aces","none"]}],"Post3D":[{"name":"bloom","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"threshold","type":"number"},{"name":"smoothing","type":"number"}]},{"name":"vignette","type":"object","properties":[{"name":"offset","type":"number"},{"name":"darkness","type":"number"}]}],"SceneHemiLight":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"groundColor","type":"string"}],"SceneLight":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]"}],"ScenePointLight":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]","required":true},{"name":"distance","type":"number"},{"name":"decay","type":"number"}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_KSKK0AHBM8NT40HHAEJBKTZM1V":{"id":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V","kind":"entity","bakedName":"Learn3DTourScene","curName":"Learn3DTourScene","renames":[],"owner":"workspace"},"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC":{"id":"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC","kind":"event","bakedName":"SYNC_STATIONS","curName":"SYNC_STATIONS","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_22CTABEB725KHDBF03BBPYVP18":{"id":"evt_22CTABEB725KHDBF03BBPYVP18","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0":{"id":"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0","kind":"event","bakedName":"RESET","curName":"RESET","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B":{"id":"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B","kind":"event","bakedName":"LEARN_ROUND_COMPLETE","curName":"LEARN_ROUND_COMPLETE","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_7HJYQ5KNXDTYPMQ3C8DN29253X":{"id":"evt_7HJYQ5KNXDTYPMQ3C8DN29253X","kind":"event","bakedName":"TOUR_3D_UPDATED","curName":"TOUR_3D_UPDATED","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_AM57H49FZGQZR0G3ZJE66BT3ZK":{"id":"evt_AM57H49FZGQZR0G3ZJE66BT3ZK","kind":"event","bakedName":"SELECT_STATION","curName":"SELECT_STATION","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_M3T6PV4R8MC4ACHPR918QX5PND":{"id":"evt_M3T6PV4R8MC4ACHPR918QX5PND","kind":"event","bakedName":"TOUR","curName":"TOUR","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_R4SH16AGVX8DYVCEN6VQA1010F":{"id":"evt_R4SH16AGVX8DYVCEN6VQA1010F","kind":"event","bakedName":"ROSTER_LOADED","curName":"ROSTER_LOADED","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_VZ4FG0JC9664K8H37XC2MMZSZE":{"id":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","kind":"event","bakedName":"MODE_SELECTED","curName":"MODE_SELECTED","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"orb_32E7G85TQJXBS0KPNP8DDDR4Q2":{"id":"orb_32E7G85TQJXBS0KPNP8DDDR4Q2","kind":"orbital","bakedName":"LearnTour3DOrbital","curName":"LearnTour3DOrbital","renames":[],"owner":"workspace"},"pag_140B20NZBTZNX2182MXPN1YG11":{"id":"pag_140B20NZBTZNX2182MXPN1YG11","kind":"page","bakedName":"Learn3DTourPage","curName":"Learn3DTourPage","renames":[],"owner":"workspace"},"trt_0QMWGD02D616K57FG6CRFVKNC7":{"id":"trt_0QMWGD02D616K57FG6CRFVKNC7","kind":"trait","bakedName":"Learn3DTourSim","curName":"Learn3DTourSim","renames":[],"owner":"workspace"}}}}
|
|
1
|
+
{"name":"std-learn-tour-3d","version":"1.0.0","description":"Generic guided-tour-over-3D-stations instrument. Contract: a config-declared roster of stations (id, name, caption, x, y, z, radius, color, shape, opacity) plus optional connector edges (from, to, color, label), rendered as an orbit-rotatable volumetric scene on a biology-canvas in 3D mode; pressing Tour advances the selection to the next station (mod the roster length) and clicking a shape selects its station — either way the camera retargets onto the selected station's x/y/z, the station enlarges, a name — caption narration renders, and a progress readout tracks visited stations until every station has been toured. A `backdrop` knob renders non-station scene geometry under the stations (painted, never toured). SYNC_STATIONS hot-swaps the roster mid-flight (a composed preset coordinator emits it with new stations/edges/backdrop; the tour adopts them and restarts progress at the first new station) — the single-writer entry point for dynamic rosters. Composed of a biology-canvas in 3D mode plus a tour state machine. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.","orbitals":[{"name":"LearnTour3DOrbital","id":"orb_32E7G85TQJXBS0KPNP8DDDR4Q2","entity":{"name":"Learn3DTourScene","id":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"active","type":"boolean","default":false},{"name":"title","type":"string"},{"name":"stations","type":"array","items":{"type":"object","properties":{"x":{"name":"x","type":"number","required":true},"z":{"name":"z","type":"number","required":true},"color":{"name":"color","type":"string","required":false},"name":{"name":"name","type":"string","required":true},"id":{"name":"id","type":"string","required":true},"radius":{"name":"radius","type":"number","required":false},"y":{"name":"y","type":"number","required":true},"caption":{"name":"caption","type":"string","required":false},"shape":{"name":"shape","type":"string","required":false},"opacity":{"name":"opacity","type":"number","required":false}}}},{"name":"backdrop","type":"array","default":[],"items":{"type":"object","properties":{"color":{"name":"color","type":"string","required":false},"y":{"name":"y","type":"number","required":true},"caption":{"name":"caption","type":"string","required":false},"name":{"name":"name","type":"string","required":true},"radius":{"name":"radius","type":"number","required":false},"shape":{"name":"shape","type":"string","required":false},"id":{"name":"id","type":"string","required":true},"x":{"name":"x","type":"number","required":true},"opacity":{"name":"opacity","type":"number","required":false},"z":{"name":"z","type":"number","required":true}}}},{"name":"edges","type":"array","items":{"type":"object","properties":{"color":{"name":"color","type":"string","required":false},"label":{"name":"label","type":"string","required":false},"to":{"name":"to","type":"string","required":true},"from":{"name":"from","type":"string","required":true}}}},{"name":"selectedIndex","type":"number","default":0},{"name":"selectedId","type":"string","default":""},{"name":"visitedIds","type":"array","default":[],"items":{"type":"string"}},{"name":"tourComplete","type":"boolean","default":false},{"name":"narration","type":"string","default":""}]},"traits":[{"name":"Learn3DTourSim","id":"trt_0QMWGD02D616K57FG6CRFVKNC7","entityRebindable":true,"entityContract":{"requires":[],"provides":["active","backdrop","edges","narration","selectedId","selectedIndex","stations","title","tourComplete","visitedIds"]},"effectRow":[{"kind":"emit","resource":"LEARN_ROUND_COMPLETE"},{"kind":"emit","resource":"TOUR_3D_UPDATED"},{"kind":"render-ui","resource":"main"},{"kind":"set","resource":"@entity.active"},{"kind":"set","resource":"@entity.backdrop"},{"kind":"set","resource":"@entity.edges"},{"kind":"set","resource":"@entity.narration"},{"kind":"set","resource":"@entity.selectedId"},{"kind":"set","resource":"@entity.selectedIndex"},{"kind":"set","resource":"@entity.stations"},{"kind":"set","resource":"@entity.title"},{"kind":"set","resource":"@entity.tourComplete"},{"kind":"set","resource":"@entity.visitedIds"}],"category":"interaction","linkedEntity":"Learn3DTourScene","linkedEntityId":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V","entityRefIds":{"Learn3DTourScene":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V"},"emits":[{"event":"TOUR_3D_UPDATED","eventId":"evt_7HJYQ5KNXDTYPMQ3C8DN29253X","description":"Fires on INIT/MODE_SELECTED/Tour/click/Reset with the currently selected station's id, name, and caption, plus visited/total progress and whether every station has now been visited — a composed listener (readout, quiz) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"select, choose, station, explore, tour, flythrough, pick","tier":"domain","scope":"external","payloadSchema":[{"name":"id","type":"string"},{"name":"name","type":"string"},{"name":"caption","type":"string"},{"name":"visited","type":"number"},{"name":"total","type":"number"},{"name":"tourComplete","type":"boolean"}]},{"event":"LEARN_ROUND_COMPLETE","eventId":"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B","description":"Fired once when the visit that completes the tour lands (every station explored) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion, tour complete","tier":"domain","scope":"external","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true}],"events":[{"key":"INIT","id":"evt_22CTABEB725KHDBF03BBPYVP18","name":"Initialize"},{"key":"MODE_SELECTED","id":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","name":"Mode Selected","description":"Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.","tier":"domain","payloadSchema":[{"name":"mode","type":"string"}],"listened":true},{"key":"ROSTER_LOADED","id":"evt_R4SH16AGVX8DYVCEN6VQA1010F","name":"Roster Loaded","description":"Runtime content feed, honoured only when rosterSource is event — mode names the instrument it is for (the matchMode it carries, blank when standalone) and stations, edges and backdrop are the scene roster; a matching instrument re-initialises from it exactly as INIT does from config, any other instrument hides.","tier":"domain","payloadSchema":[{"name":"mode","type":"string","required":true},{"name":"stations","type":"[object]","required":true,"properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]},{"name":"edges","type":"[object]","required":true,"properties":[{"name":"from","type":"string","required":true},{"name":"to","type":"string","required":true},{"name":"color","type":"string"},{"name":"label","type":"string"}]},{"name":"backdrop","type":"[object]","required":true,"properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]}],"listened":true},{"key":"TOUR","id":"evt_M3T6PV4R8MC4ACHPR918QX5PND","name":"Tour"},{"key":"SELECT_STATION","id":"evt_AM57H49FZGQZR0G3ZJE66BT3ZK","name":"Select Station","description":"Canvas shape-click from the 3D scene (biology-canvas onShapeClick) carrying the clicked station's id, type, and roster index.","tier":"domain","payloadSchema":[{"name":"payload","type":"object","properties":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"index","type":"number","required":true}]}],"listened":true},{"key":"RESET","id":"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0","name":"Reset"},{"key":"SYNC_STATIONS","id":"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC","name":"Sync Stations","description":"Roster hot-swap from a composed preset coordinator — the tour adopts the new stations/edges/backdrop and restarts progress at the first new station; the single-writer entry point for dynamic rosters.","tier":"domain","payloadSchema":[{"name":"stations","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]},{"name":"edges","type":"[object]","properties":[{"name":"from","type":"string","required":true},{"name":"to","type":"string","required":true},{"name":"color","type":"string"},{"name":"label","type":"string"}]},{"name":"backdrop","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}]}],"listened":true},{"key":"TOUR_3D_UPDATED","id":"evt_7HJYQ5KNXDTYPMQ3C8DN29253X","name":"Tour 3d Updated","description":"Fires on INIT/MODE_SELECTED/Tour/click/Reset with the currently selected station's id, name, and caption, plus visited/total progress and whether every station has now been visited — a composed listener (readout, quiz) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"select, choose, station, explore, tour, flythrough, pick","tier":"domain","payloadSchema":[{"name":"id","type":"string"},{"name":"name","type":"string"},{"name":"caption","type":"string"},{"name":"visited","type":"number"},{"name":"total","type":"number"},{"name":"tourComplete","type":"boolean"}]},{"key":"LEARN_ROUND_COMPLETE","id":"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B","name":"Learn Round Complete","description":"Fired once when the visit that completes the tour lands (every station explored) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion, tour complete","tier":"domain","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_22CTABEB725KHDBF03BBPYVP18","guard":["and",["==","@config.matchMode",""],["==","@config.rosterSource","config"]],"effects":[["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.stations","@config.stations"],["set","@entity.backdrop","@config.backdrop"],["set","@entity.edges","@config.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","guard":["and",["not",["==","@config.matchMode",""]],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","guard":["and",["==","@payload.mode","@config.matchMode"],["==","@config.rosterSource","config"]],"effects":[["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.stations","@config.stations"],["set","@entity.backdrop","@config.backdrop"],["set","@entity.edges","@config.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R4SH16AGVX8DYVCEN6VQA1010F","guard":["and",["==","@config.rosterSource","event"],["and",["==","@payload.mode","@config.matchMode"],[">",["array/len","@payload.stations"],0]]],"effects":[["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.stations","@payload.stations"],["set","@entity.backdrop","@payload.backdrop"],["set","@entity.edges","@payload.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R4SH16AGVX8DYVCEN6VQA1010F","guard":["and",["==","@config.rosterSource","event"],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"TOUR","eventId":"evt_M3T6PV4R8MC4ACHPR918QX5PND","guard":["==","@entity.active",true],"effects":[["if",["and",["not","@entity.tourComplete"],["==",["if",["array/includes","@entity.visitedIds",["object/get",["array/nth","@entity.stations",["math/mod",["+","@entity.selectedIndex",1],["array/len","@entity.stations"]]],"id"]],["array/len","@entity.visitedIds"],["+",["array/len","@entity.visitedIds"],1]],["array/len","@entity.stations"]]],["emit","LEARN_ROUND_COMPLETE",{"score":["array/len","@entity.stations"],"total":["array/len","@entity.stations"]}],null],["set","@entity.selectedIndex",["math/mod",["+","@entity.selectedIndex",1],["array/len","@entity.stations"]]],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"id"]],["set","@entity.visitedIds",["if",["array/includes","@entity.visitedIds","@entity.selectedId"],"@entity.visitedIds",["array/append","@entity.visitedIds","@entity.selectedId"]]],["set","@entity.tourComplete",["==",["array/len","@entity.visitedIds"],["array/len","@entity.stations"]]],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"name"]," — ",["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"name"],"caption":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":"@entity.tourComplete"}]]},{"from":"idle","to":"idle","event":"SELECT_STATION","eventId":"evt_AM57H49FZGQZR0G3ZJE66BT3ZK","guard":["==","@entity.active",true],"effects":[["let",[["clickedId",["object/get","@payload.payload","id"]],["found",["array/findIndex","@entity.stations",["fn","n",["==",["object/get","@n","id"],"@clickedId"]]]],["idx",["if",[">=","@found",0],"@found","@entity.selectedIndex"]]],["do",["if",["and",["not","@entity.tourComplete"],["==",["if",["array/includes","@entity.visitedIds",["object/get",["array/nth","@entity.stations","@idx"],"id"]],["array/len","@entity.visitedIds"],["+",["array/len","@entity.visitedIds"],1]],["array/len","@entity.stations"]]],["emit","LEARN_ROUND_COMPLETE",{"score":["array/len","@entity.stations"],"total":["array/len","@entity.stations"]}],null],["set","@entity.selectedIndex","@idx"],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations","@idx"],"id"]],["set","@entity.visitedIds",["if",["array/includes","@entity.visitedIds","@entity.selectedId"],"@entity.visitedIds",["array/append","@entity.visitedIds","@entity.selectedId"]]],["set","@entity.tourComplete",["==",["array/len","@entity.visitedIds"],["array/len","@entity.stations"]]],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations","@idx"],"name"]," — ",["object/get",["array/nth","@entity.stations","@idx"],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations","@idx"],"name"],"caption":["object/get",["array/nth","@entity.stations","@idx"],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":"@entity.tourComplete"}]]]]},{"from":"idle","to":"idle","event":"RESET","eventId":"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0","guard":["==","@entity.active",true],"effects":[["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]},{"from":"idle","to":"idle","event":"SYNC_STATIONS","eventId":"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC","guard":["==","@entity.active",true],"effects":[["set","@entity.stations","@payload.stations"],["set","@entity.backdrop","@payload.backdrop"],["set","@entity.edges","@payload.edges"],["set","@entity.selectedIndex",0],["set","@entity.selectedId",["object/get",["array/nth","@entity.stations",0],"id"]],["set","@entity.visitedIds",[["object/get",["array/nth","@entity.stations",0],"id"]]],["set","@entity.tourComplete",false],["set","@entity.narration",["str/concat",["object/get",["array/nth","@entity.stations",0],"name"]," — ",["object/get",["array/nth","@entity.stations",0],"caption"]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.tourComplete","Complete",["str/concat","Station ",["str/concat","",["+","@entity.selectedIndex",1]]," of ",["str/concat","",["array/len","@entity.stations"]]]],"variant":["if","@entity.tourComplete","success","neutral"]}]},{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"TOUR","label":"@config.tourLabel","icon":"chevron-right","variant":"primary"},{"type":"button","action":"RESET","label":"@config.resetLabel","icon":"rotate-ccw","variant":"ghost"},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Explored ",["str/concat","",["array/len","@entity.visitedIds"]]," of ",["str/concat","",["array/len","@entity.stations"]],["if","@entity.tourComplete"," — tour complete!",""]]}]},{"type":"biology-canvas","keyMap":{"Space":"TOUR","ArrowRight":"TOUR","KeyR":"RESET"},"width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","mode":"3d","camera":{"mode":"perspective","zoom":"@config.zoom","fov":"@config.fov","azimuth":"@config.azimuth","target":{"x":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"x"],"y":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"y"],"z":["object/get",["array/nth","@entity.stations","@entity.selectedIndex"],"z"]}},"lighting":"@config.lighting","post":"@config.post","nodes":["array/map",["array/concat","@entity.backdrop","@entity.stations"],["fn","n",{"id":["object/get","@n","id"],"x":["object/get","@n","x"],"y":["object/get","@n","y"],"z":["object/get","@n","z"],"radius":["if",["==",["object/get","@n","id"],"@entity.selectedId"],["*",["object/get","@n","radius"],1.4],["object/get","@n","radius"]],"color":["object/get","@n","color"],"label":["object/get","@n","name"],"shape":["object/get","@n","shape"],"opacity":["object/get","@n","opacity"]}]],"edges":"@entity.edges","interactive":true,"onShapeClick":"SELECT_STATION"},{"type":"typography","variant":"body","content":"@entity.narration"}]}]}],["emit","TOUR_3D_UPDATED",{"id":"@entity.selectedId","name":["object/get",["array/nth","@entity.stations",0],"name"],"caption":["object/get",["array/nth","@entity.stations",0],"caption"],"visited":["array/len","@entity.visitedIds"],"total":["array/len","@entity.stations"],"tourComplete":false}]]}]},"config":{"resetLabel":{"type":"string","default":"Reset","label":"Reset Button Label","description":"Label text for the button that returns the tour to the first station.","tier":"presentation"},"summary":{"type":"string","default":"","label":"Concept","description":"One line under the title saying what the learner is looking at (keep it under ~65 characters). Empty shows no line.","tier":"presentation"},"backgroundColor":{"type":"string","default":"","label":"Background Color","description":"Canvas ground. Empty uses the theme drawing ground.","tier":"presentation"},"matchMode":{"type":"string","default":"","label":"Match Mode","description":"When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.","tier":"presentation"},"zoom":{"type":"number","default":1,"label":"Zoom","description":"Camera zoom factor for the 3D scene.","tier":"presentation"},"stations":{"type":"[Learn3DStation]","default":[{"id":"alpha","name":"Station Alpha","caption":"The first stop on the tour — the camera retargets here and the narration reads its caption.","x":0,"y":0,"z":0,"radius":1,"color":"series-1","shape":"sphere","opacity":1},{"id":"beta","name":"Station Beta","caption":"The second stop — press Tour again or click a shape to advance the selection.","x":3,"y":1,"z":-1,"radius":0.8,"color":"series-2","shape":"sphere","opacity":1},{"id":"gamma","name":"Station Gamma","caption":"The final stop — once every station has been visited the tour marks itself complete.","x":-3,"y":-1,"z":1,"radius":0.8,"color":"series-3","shape":"sphere","opacity":1}],"label":"Stations","description":"The station roster in didactic tour order — each with scene position, mesh shape, and a caption. Tour and clicks enlarge the selected station, retarget the camera onto its x/y/z, and narrate its caption.","synonyms":"station, stop, waypoint, tour, landmark, 3d","tier":"domain","items":{"type":"object","properties":{"caption":{"name":"caption","type":"string","required":false},"shape":{"name":"shape","type":"string","required":false},"color":{"name":"color","type":"string","required":false},"y":{"name":"y","type":"number","required":true},"z":{"name":"z","type":"number","required":true},"opacity":{"name":"opacity","type":"number","required":false},"x":{"name":"x","type":"number","required":true},"name":{"name":"name","type":"string","required":true},"radius":{"name":"radius","type":"number","required":false},"id":{"name":"id","type":"string","required":true}}}},"fov":{"type":"number","default":50,"label":"Field of View","description":"Perspective camera field of view in degrees.","tier":"presentation"},"lighting":{"type":"Lighting3D","default":{},"label":"Lighting","description":"3D scene light rig as data; empty object uses the standard rig.","tier":"presentation","properties":{"hemisphere":{"name":"hemisphere","type":"object","required":false,"properties":{"intensity":{"name":"intensity","type":"number","required":false},"groundColor":{"name":"groundColor","type":"string","required":false},"color":{"name":"color","type":"string","required":false}}},"ambient":{"name":"ambient","type":"object","required":false,"properties":{"color":{"name":"color","type":"string","required":false},"intensity":{"name":"intensity","type":"number","required":false},"position":{"name":"position","type":"array","required":false,"items":{"type":"number"}}}},"directional":{"name":"directional","type":"object","required":false,"properties":{"position":{"name":"position","type":"array","required":false,"items":{"type":"number"}},"intensity":{"name":"intensity","type":"number","required":false},"color":{"name":"color","type":"string","required":false}}},"points":{"name":"points","type":"array","required":false,"items":{"type":"object","properties":{"position":{"name":"position","type":"array","required":true,"items":{"type":"number"}},"intensity":{"name":"intensity","type":"number","required":false},"color":{"name":"color","type":"string","required":false},"distance":{"name":"distance","type":"number","required":false},"decay":{"name":"decay","type":"number","required":false}}}},"toneMapping":{"name":"toneMapping","type":"string","required":false,"values":["aces","none"]},"environment":{"name":"environment","type":"string","required":false,"values":["room","none"]}}},"azimuth":{"type":"number","default":0.6,"label":"Azimuth","description":"Camera orbit azimuth in radians; the learner can orbit freely on top of this.","tier":"presentation"},"edges":{"type":"[Learn3DEdge]","default":[],"label":"Edges","description":"Optional connector lines drawn between stations, by id.","synonyms":"edge, link, connector, tether","tier":"domain","items":{"type":"object","properties":{"from":{"name":"from","type":"string","required":true},"to":{"name":"to","type":"string","required":true},"color":{"name":"color","type":"string","required":false},"label":{"name":"label","type":"string","required":false}}}},"title":{"type":"string","default":"3D Guided Tour","label":"Title","description":"Title shown above the canvas.","tier":"presentation"},"backdrop":{"type":"[Learn3DStation]","default":[],"label":"Backdrop Nodes","description":"Non-station scene geometry rendered under the tour stations (painted first, stations on top) — painted but never tour stops and never highlight-selected; SYNC_STATIONS swaps it together with the roster, so a composed preset coordinator can re-skin the whole scene per preset.","synonyms":"backdrop, scenery, geometry, context nodes, 3d","tier":"domain","items":{"type":"object","properties":{"shape":{"name":"shape","type":"string","required":false},"name":{"name":"name","type":"string","required":true},"radius":{"name":"radius","type":"number","required":false},"color":{"name":"color","type":"string","required":false},"x":{"name":"x","type":"number","required":true},"caption":{"name":"caption","type":"string","required":false},"y":{"name":"y","type":"number","required":true},"opacity":{"name":"opacity","type":"number","required":false},"id":{"name":"id","type":"string","required":true},"z":{"name":"z","type":"number","required":true}}}},"post":{"type":"Post3D","default":{},"label":"Post Processing","description":"3D post-processing stack (bloom/vignette) as data; empty object disables it.","tier":"presentation","properties":{"vignette":{"name":"vignette","type":"object","required":false,"properties":{"darkness":{"name":"darkness","type":"number","required":false},"offset":{"name":"offset","type":"number","required":false}}},"bloom":{"name":"bloom","type":"object","required":false,"properties":{"threshold":{"name":"threshold","type":"number","required":false},"smoothing":{"name":"smoothing","type":"number","required":false},"intensity":{"name":"intensity","type":"number","required":false}}}}},"width":{"type":"number","default":600,"label":"Width","description":"Canvas width in pixels.","tier":"presentation"},"tourLabel":{"type":"string","default":"Next station","label":"Tour Button Label","description":"Label text for the button that advances the tour to the next station.","tier":"presentation"},"height":{"type":"number","default":400,"label":"Height","description":"Canvas height in pixels.","tier":"presentation"},"rosterSource":{"type":"string","default":"config","label":"Roster Source","description":"Where the stations, edges and backdrop come from: config reads those knobs at INIT; event waits for ROSTER_LOADED and takes them from its payload.","tier":"domain","values":["config","event"]}},"scope":"instance"}],"pages":[{"name":"Learn3DTourPage","id":"pag_140B20NZBTZNX2182MXPN1YG11","path":"/learn-tour-3d","traits":[{"ref":"Learn3DTourSim","refId":"trt_0QMWGD02D616K57FG6CRFVKNC7"}]}],"types":{"Learn3DClick":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"index","type":"number","required":true}],"Learn3DEdge":[{"name":"from","type":"string","required":true},{"name":"to","type":"string","required":true},{"name":"color","type":"string"},{"name":"label","type":"string"}],"Learn3DStation":[{"name":"id","type":"string","required":true},{"name":"name","type":"string","required":true},{"name":"caption","type":"string"},{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"z","type":"number","required":true},{"name":"radius","type":"number"},{"name":"color","type":"string"},{"name":"shape","type":"string"},{"name":"opacity","type":"number"}],"Lighting3D":[{"name":"ambient","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]"}]},{"name":"directional","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]"}]},{"name":"hemisphere","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"groundColor","type":"string"}]},{"name":"points","type":"[object]","properties":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]","required":true},{"name":"distance","type":"number"},{"name":"decay","type":"number"}]},{"name":"environment","type":"string","values":["room","none"]},{"name":"toneMapping","type":"string","values":["aces","none"]}],"Post3D":[{"name":"bloom","type":"object","properties":[{"name":"intensity","type":"number"},{"name":"threshold","type":"number"},{"name":"smoothing","type":"number"}]},{"name":"vignette","type":"object","properties":[{"name":"offset","type":"number"},{"name":"darkness","type":"number"}]}],"SceneHemiLight":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"groundColor","type":"string"}],"SceneLight":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]"}],"ScenePointLight":[{"name":"intensity","type":"number"},{"name":"color","type":"string"},{"name":"position","type":"[number]","required":true},{"name":"distance","type":"number"},{"name":"decay","type":"number"}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_KSKK0AHBM8NT40HHAEJBKTZM1V":{"id":"ent_KSKK0AHBM8NT40HHAEJBKTZM1V","kind":"entity","bakedName":"Learn3DTourScene","curName":"Learn3DTourScene","renames":[],"owner":"workspace"},"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC":{"id":"evt_0SZGCD5Q7EVKQ02JDG4KKR0NKC","kind":"event","bakedName":"SYNC_STATIONS","curName":"SYNC_STATIONS","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_22CTABEB725KHDBF03BBPYVP18":{"id":"evt_22CTABEB725KHDBF03BBPYVP18","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0":{"id":"evt_5JD0JT3KYTSZD1AHR0ZP7ZMWC0","kind":"event","bakedName":"RESET","curName":"RESET","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B":{"id":"evt_6SZ1ATS3QXHVYSHACKJZ66HT6B","kind":"event","bakedName":"LEARN_ROUND_COMPLETE","curName":"LEARN_ROUND_COMPLETE","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_7HJYQ5KNXDTYPMQ3C8DN29253X":{"id":"evt_7HJYQ5KNXDTYPMQ3C8DN29253X","kind":"event","bakedName":"TOUR_3D_UPDATED","curName":"TOUR_3D_UPDATED","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_AM57H49FZGQZR0G3ZJE66BT3ZK":{"id":"evt_AM57H49FZGQZR0G3ZJE66BT3ZK","kind":"event","bakedName":"SELECT_STATION","curName":"SELECT_STATION","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_M3T6PV4R8MC4ACHPR918QX5PND":{"id":"evt_M3T6PV4R8MC4ACHPR918QX5PND","kind":"event","bakedName":"TOUR","curName":"TOUR","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_R4SH16AGVX8DYVCEN6VQA1010F":{"id":"evt_R4SH16AGVX8DYVCEN6VQA1010F","kind":"event","bakedName":"ROSTER_LOADED","curName":"ROSTER_LOADED","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"evt_VZ4FG0JC9664K8H37XC2MMZSZE":{"id":"evt_VZ4FG0JC9664K8H37XC2MMZSZE","kind":"event","bakedName":"MODE_SELECTED","curName":"MODE_SELECTED","renames":[],"owner":"workspace","parent":"trt_0QMWGD02D616K57FG6CRFVKNC7"},"orb_32E7G85TQJXBS0KPNP8DDDR4Q2":{"id":"orb_32E7G85TQJXBS0KPNP8DDDR4Q2","kind":"orbital","bakedName":"LearnTour3DOrbital","curName":"LearnTour3DOrbital","renames":[],"owner":"workspace"},"pag_140B20NZBTZNX2182MXPN1YG11":{"id":"pag_140B20NZBTZNX2182MXPN1YG11","kind":"page","bakedName":"Learn3DTourPage","curName":"Learn3DTourPage","renames":[],"owner":"workspace"},"trt_0QMWGD02D616K57FG6CRFVKNC7":{"id":"trt_0QMWGD02D616K57FG6CRFVKNC7","kind":"trait","bakedName":"Learn3DTourSim","curName":"Learn3DTourSim","renames":[],"owner":"workspace"}}}}
|