@almadar/std 16.226.0 → 16.228.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/behaviors-registry.json +2802 -1073
- package/behaviors/lolo/agent/organisms/std-agent-rabit.lolo +1 -0
- package/behaviors/lolo/infra/atoms/std-audit-capture.lolo +21 -5
- package/behaviors/lolo/infra/atoms/std-calendar-sync.lolo +1 -1
- package/behaviors/lolo/infra/atoms/std-data-erasure.lolo +1 -1
- package/behaviors/lolo/infra/atoms/std-global-search.lolo +7 -5
- package/behaviors/lolo/infra/atoms/std-lifecycle.lolo +1 -1
- package/behaviors/lolo/infra/atoms/std-notification-center.lolo +1 -1
- package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +11 -1
- package/behaviors/lolo/infra/atoms/std-reminder-scheduler.lolo +1 -1
- package/behaviors/lolo/infra/atoms/std-review-cycle.lolo +135 -0
- package/behaviors/lolo/ui/avl/atoms/ui-behavior-view.lolo +1 -0
- package/behaviors/lolo/ui/avl/atoms/ui-module-card.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-graphs.lolo +1 -2
- package/behaviors/lolo/ui/core/atoms/std-slide-deck.lolo +113 -0
- package/behaviors/lolo/ui/core/atoms/ui-aside.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-atlas-image.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-atlas-panel.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-avatar.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-box.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-button.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-card.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-center.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-checkbox.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-conditional-wrapper.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-confetti-effect.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-day-cell.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-dialog.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-divider.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-filter-pill.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-flip-container.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-game-icon.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-hstack.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-icon.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-infinite-scroll-sentinel.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-input.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-label.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-law-reference-tooltip.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-overlay.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-presence.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-progress-bar.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-radio.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-range-slider.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-section-header.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-select.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-spacer.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-sparkline.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-spinner.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-stack.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-status-dot.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-branch.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-connection.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-flow.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-grid.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-lobe.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-mesh.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-morph.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-node.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-pulse.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-ring.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-shield.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-svg-stack.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-switch.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-text-highlight.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +4 -1
- package/behaviors/lolo/ui/core/atoms/ui-theme-toggle.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-time-slot-cell.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-trait-frame.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-trend-indicator.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-typewriter-text.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-typography.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/ui-vstack.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-accordion.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-activation-block.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-alert.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-bloom-quiz-block.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-branching-logic-builder.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-breadcrumb.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-calendar-grid.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-carousel.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-chart-legend.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-chart.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-code-block.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-command-palette.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-confirm-dialog.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-connection-block.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-container.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-content-renderer.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-date-range-picker.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-date-range-selector.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-doc-breadcrumb.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-doc-pagination.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-doc-search.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-doc-sidebar.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-doc-toc.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-document-viewer.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-edge-decoration.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-emoji-picker.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-empty-state.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-error-boundary.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-error-state.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-feature-grid.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-filter-group.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-flex.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-flip-card.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-floating-toolbar.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-form-actions.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-form-field.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-form-layout.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-form-section-header.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-fx-overlay.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-gantt.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-gradient-divider.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-graph-canvas.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-graph-view.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-grid.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-header.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-import-progress.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-import-source-picker.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-input-group.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-jazari-state-machine.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-lightbox.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-likert-scale.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-line-chart.lolo +3 -1
- package/behaviors/lolo/ui/core/molecules/ui-loading-state.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-map-view.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-markdown-content.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-matrix-question.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-meter.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-modal.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-navigation.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-notification.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-number-stepper.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-option-constraint-group.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-orbital-visualization.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-page-header.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-page-transition.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-pagination.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-popover.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-positioned-canvas.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-progress-dots.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-pull-to-refresh.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-qr-scanner.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-quiz-block.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-reflection-block.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-relation-select.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-repeatable-form-section.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-reply-tree.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-rich-text-editor.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-scaled-diagram.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-search-input.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-section.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-side-panel.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-sidebar.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-signature-pad.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-simple-grid.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-skeleton.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-social-proof.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-sortable-list.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-split.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-star-rating.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-stat-display.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-tag-input.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-tooltip.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-upload-drop-zone.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-version-diff.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-violation-alert.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-vote-stack.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-wizard-container.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-wizard-navigation.lolo +1 -0
- package/behaviors/lolo/ui/core/molecules/ui-wizard-progress.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-chat-bar.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-code-runner-panel.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-dashboard-grid.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-dock-layout.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-drawer-slot.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-form.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-master-detail-layout.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-master-detail.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-modal-slot.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-runtime-debugger.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-segment-renderer.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-split-pane.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-state-machine-view.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-tabbed-container.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +1 -0
- package/behaviors/lolo/ui/core/organisms/ui-toast-slot.lolo +1 -0
- package/behaviors/lolo/ui/core/templates/ui-counter-template.lolo +1 -0
- package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +1 -0
- package/behaviors/lolo/ui/core/templates/ui-generic-app-template.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/std-choice-gate.lolo +3 -2
- package/behaviors/lolo/ui/game/atoms/ui-action-palette.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-action-tile.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-canvas-2d.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-canvas.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-dialogue-bubble.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-fx-layer.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-group.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-mesh.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-shape-layer.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-shape.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-skinned-mesh.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-sprite-layer.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-text-layer.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-text.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-game-audio-cue.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-game-audio-toggle.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-health-bar.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-score-display.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-sequence-bar.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-state-graph.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-state-json-view.lolo +1 -0
- package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +1 -0
- package/behaviors/lolo/ui/game/organisms/std-arcade-board-3d.lolo +30 -0
- package/behaviors/lolo/ui/game/organisms/std-crew-board-2d.lolo +7 -0
- package/behaviors/lolo/ui/game/organisms/std-dungeon-board-2d.lolo +39 -0
- package/behaviors/lolo/ui/game/organisms/std-market-board-3d.lolo +29 -0
- package/behaviors/lolo/ui/game/organisms/std-objective-board-3d.lolo +30 -0
- package/behaviors/lolo/ui/game/organisms/std-platformer-board-2d.lolo +39 -0
- package/behaviors/lolo/ui/game/organisms/std-platformer-puzzle.lolo +27 -0
- package/behaviors/lolo/ui/game/organisms/std-survival-board-3d.lolo +40 -3
- package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +27 -0
- package/behaviors/lolo/ui/game/organisms/std-tactics-board-3d.lolo +22 -0
- package/behaviors/lolo/ui/game/organisms/std-worldmap-board-2d.lolo +21 -0
- package/behaviors/lolo/ui/learning/atoms/ui-algo-graph-canvas.lolo +1 -0
- package/behaviors/lolo/ui/learning/atoms/ui-algorithm-canvas.lolo +1 -0
- package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +1 -0
- package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +1 -0
- package/behaviors/lolo/ui/learning/atoms/ui-learning-canvas.lolo +1 -0
- package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +1 -0
- package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/std-marketing-cta.lolo +4 -4
- package/behaviors/lolo/ui/marketing/atoms/std-marketing-hero.lolo +4 -4
- package/behaviors/lolo/ui/marketing/atoms/ui-animated-counter.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-animated-graphic.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-animated-reveal.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-article-section.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-case-study-card.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-community-links.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-content-section.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-cta-banner.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-feature-card.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-geometric-pattern.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-hero-section.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-install-box.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-marketing-footer.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-marketing-stat-card.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-pattern-tile.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-pricing-card.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-pricing-grid.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-pull-quote.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-service-catalog.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-showcase-card.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-split-section.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-stats-grid.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-step-flow.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-tag-cloud.lolo +1 -0
- package/behaviors/lolo/ui/marketing/atoms/ui-team-card.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-book-chapter-view.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-book-cover-page.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-book-nav-bar.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-book-table-of-contents.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-book-viewer.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-case-study-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-feature-grid-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-hero-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-pricing-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-showcase-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-stats-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-step-flow-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/organisms/ui-team-organism.lolo +1 -0
- package/behaviors/lolo/ui/marketing/templates/ui-about-page-template.lolo +1 -0
- package/behaviors/lolo/ui/marketing/templates/ui-auth-layout.lolo +1 -0
- package/behaviors/lolo/ui/marketing/templates/ui-feature-detail-page-template.lolo +1 -0
- package/behaviors/lolo/ui/marketing/templates/ui-landing-page-template.lolo +1 -0
- package/behaviors/lolo/ui/marketing/templates/ui-pricing-page-template.lolo +1 -0
- package/behaviors/lolo-behavior-contracts.json +1 -1
- package/behaviors/registry/agent/organisms/std-agent-rabit.orb +13 -0
- package/behaviors/registry/factory-signatures.json +1 -1
- package/behaviors/registry/infra/atoms/std-audit-capture.orb +99 -7
- package/behaviors/registry/infra/atoms/std-calendar-sync.orb +2 -1
- package/behaviors/registry/infra/atoms/std-data-erasure.orb +2 -1
- package/behaviors/registry/infra/atoms/std-global-search.orb +68 -3
- package/behaviors/registry/infra/atoms/std-lifecycle.orb +2 -1
- package/behaviors/registry/infra/atoms/std-notification-center.orb +2 -1
- package/behaviors/registry/infra/atoms/std-notify-on-event.orb +127 -26
- package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +2 -1
- package/behaviors/registry/infra/atoms/std-review-cycle.orb +1009 -0
- package/behaviors/registry/ui/core/atoms/std-graphs.orb +14 -19
- package/behaviors/registry/ui/core/atoms/std-slide-deck.orb +546 -0
- package/behaviors/registry/ui/core/atoms/ui-textarea.orb +14 -0
- package/behaviors/registry/ui/core/molecules/ui-line-chart.orb +13 -2
- package/behaviors/registry/ui/game/atoms/std-choice-gate.orb +17 -2
- package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +80 -0
- package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +10 -0
- package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +106 -0
- package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +72 -0
- package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +80 -0
- package/behaviors/registry/ui/game/organisms/std-platformer-board-2d.orb +116 -0
- package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +40 -0
- package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +131 -8
- package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +56 -0
- package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +46 -0
- package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +38 -0
- package/behaviors/registry/ui/marketing/atoms/std-marketing-cta.orb +50 -4
- package/behaviors/registry/ui/marketing/atoms/std-marketing-hero.orb +50 -4
- package/canonical-operators.json +253 -1
- package/dist/behaviors/exports-reader.js +3950 -1899
- package/dist/behaviors/functions/index.d.ts +357 -6
- package/dist/behaviors/functions/index.js +3942 -1900
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +3951 -1900
- package/dist/behaviors/query.d.ts +6 -0
- package/dist/behaviors/query.js +3950 -1899
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +23 -11
- package/dist/behaviors-registry.json +2802 -1073
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4125 -1900
- package/dist/knob-embeddings.hash.json +3 -3
- package/dist/knob-embeddings.json +19060 -1
- package/dist/modules/anim.d.ts +1 -1
- package/dist/modules/array.d.ts +1 -1
- package/dist/modules/async.d.ts +1 -1
- package/dist/modules/async.js +9 -0
- package/dist/modules/behavior.d.ts +1 -1
- package/dist/modules/behavior.js +6 -0
- package/dist/modules/browser.d.ts +1 -1
- package/dist/modules/browser.js +5 -0
- package/dist/modules/composition.d.ts +1 -1
- package/dist/modules/contract.d.ts +1 -1
- package/dist/modules/core.d.ts +1 -1
- package/dist/modules/core.js +87 -0
- package/dist/modules/data.d.ts +1 -1
- package/dist/modules/ease.d.ts +1 -1
- package/dist/modules/format.d.ts +1 -1
- package/dist/modules/geo.d.ts +1 -1
- package/dist/modules/graph.d.ts +1 -1
- package/dist/modules/grid.d.ts +1 -1
- package/dist/modules/index.d.ts +1 -1
- package/dist/modules/index.js +168 -0
- package/dist/modules/integration.d.ts +1 -1
- package/dist/modules/integration.js +3 -0
- package/dist/modules/json.d.ts +1 -1
- package/dist/modules/llm.d.ts +1 -1
- package/dist/modules/llm.js +5 -0
- package/dist/modules/math.d.ts +1 -1
- package/dist/modules/math.js +22 -0
- package/dist/modules/memory.d.ts +1 -1
- package/dist/modules/memory.js +1 -0
- package/dist/modules/nn.d.ts +1 -1
- package/dist/modules/nn.js +1 -0
- package/dist/modules/noise.d.ts +1 -1
- package/dist/modules/object.d.ts +1 -1
- package/dist/modules/os.d.ts +1 -1
- package/dist/modules/os.js +8 -0
- package/dist/modules/path.d.ts +1 -1
- package/dist/modules/prob.d.ts +1 -1
- package/dist/modules/prob.js +2 -0
- package/dist/modules/session.d.ts +1 -1
- package/dist/modules/session.js +4 -0
- package/dist/modules/str.d.ts +1 -1
- package/dist/modules/tensor.d.ts +1 -1
- package/dist/modules/time.d.ts +1 -1
- package/dist/modules/trace.d.ts +1 -1
- package/dist/modules/trace.js +2 -0
- package/dist/modules/train.d.ts +1 -1
- package/dist/modules/train.js +8 -0
- package/dist/modules/validate.d.ts +1 -1
- package/dist/modules/vector.d.ts +1 -1
- package/dist/modules/workspace.d.ts +1 -1
- package/dist/modules/workspace.js +5 -0
- package/dist/registry/factory-signatures.json +1 -1
- package/dist/registry.d.ts +6 -2
- package/dist/registry.js +175 -1
- package/dist/{types-DpbKBJu8.d.ts → types-DwAW4Nni.d.ts} +5 -1
- package/i18n/ar.json +2 -0
- package/i18n/en.json +2 -0
- package/i18n/sl.json +2 -0
- package/package.json +4 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
app std-audit-capture "1.
|
|
2
|
-
"std-audit-capture — event-interceptor audit log / audit trail. Use when a user voices that a record's changes must be tracked, logged, or auditable (audit trail, track changes, change history, who edited what, mutation log, record changes, log every edit, edit history, modification log, who did what when, accountability log). Listens for the generic `EntityMutated` sentinel (rename via traitOverrides.events to the real mutation event, e.g. ContactSaved) and persists an AuditEntry row capturing actor, action, entity type/id, before/after snapshots, and timestamp. `captureEventTypes` filters on @payload.data.kind (empty = capture all). Compose with `std-lifecycle` to apply retention. Composable via `extraTraits` to interpose audit logging behind any mutating trait."
|
|
1
|
+
app std-audit-capture "1.3.0"
|
|
2
|
+
"std-audit-capture — event-interceptor audit log / audit trail. Use when a user voices that a record's changes must be tracked, logged, or auditable (audit trail, track changes, change history, who edited what, mutation log, record changes, log every edit, edit history, modification log, who did what when, accountability log). Listens for the generic `EntityMutated` sentinel (rename via traitOverrides.events to the real mutation event, e.g. ContactSaved) and persists an AuditEntry row capturing actor, action, entity type/id, before/after snapshots, and timestamp. `captureEventTypes` filters on @payload.data.kind, or on the delivered event's own name when the payload carries no kind (empty = capture all). Every entry also records where the change came from — the delivering event, the behavior and module that emitted it, and the scheduled job when a tick caused it — with no change to the upstream emitter. Compose with `std-lifecycle` to apply retention. Composable via `extraTraits` to interpose audit logging behind any mutating trait."
|
|
3
3
|
orbital AuditCaptureOrbital {
|
|
4
4
|
type EntityMutated = Event { data : @entity @config.captureEntity } "Rename via traitOverrides.events to the upstream mutation event (e.g. ContactSaved, ContactDeleted)."
|
|
5
5
|
|
|
6
|
-
type AuditRecorded = Event { actor : string, action : string, entityType : string, entityId : string, recordedAt : number } "Re-emitted after the audit row persists; rename to wire downstream listeners (e.g. AuditDashboardAppended)."
|
|
6
|
+
type AuditRecorded = Event { actor : string, action : string, entityType : string, entityId : string, recordedAt : number, sourceEvent : string, sourceTrait : string, sourceOrbital : string, sourceTick : string } "Re-emitted after the audit row persists; rename to wire downstream listeners (e.g. AuditDashboardAppended)."
|
|
7
7
|
|
|
8
8
|
entity AuditEntry [persistent: audit_entries] {
|
|
9
9
|
id : string!
|
|
@@ -14,6 +14,10 @@ orbital AuditCaptureOrbital {
|
|
|
14
14
|
before : Map string scalar @description "The state of the entity prior to the modification." @synonyms "previous, original, old value" = {}
|
|
15
15
|
after : Map string scalar @description "The state of the entity after a modification." @synonyms "new, updated, post, subsequent" = {}
|
|
16
16
|
recordedAt : number @description "Timestamp indicating when the audit event was recorded." @synonyms "timestamp, date, time" = 0
|
|
17
|
+
sourceEvent : string @description "The event that delivered the change to the audit trail, e.g. ContactSaved." @synonyms "triggering event, cause, origin event" = ""
|
|
18
|
+
sourceTrait : string @description "The behavior that emitted the change." @synonyms "emitter, origin, raised by" = ""
|
|
19
|
+
sourceOrbital : string @description "The module the change came from." @synonyms "origin module, source module" = ""
|
|
20
|
+
sourceTick : string @description "The scheduled job that caused the change; blank when a person or an event did." @synonyms "scheduled job, background job, timer" = ""
|
|
17
21
|
}
|
|
18
22
|
|
|
19
23
|
trait AuditCaptureListener -> @rebindable AuditEntry [lifecycle, instance, audit, compliance] {
|
|
@@ -21,7 +25,7 @@ orbital AuditCaptureOrbital {
|
|
|
21
25
|
|
|
22
26
|
state idle {
|
|
23
27
|
EntityMutated -> idle when @config.enabled
|
|
24
|
-
(when (or ["=", (array/len @config.captureEventTypes), 0] (array/includes @config.captureEventTypes (object/get ?data kind
|
|
28
|
+
(when (or ["=", (array/len @config.captureEventTypes), 0] (array/includes @config.captureEventTypes (object/get ?data kind @event.event))) (do (set @entity.actor @user.id) (set @entity.action (object/get ?data kind @event.event)) (set @entity.entityType @config.captureEntity) (set @entity.entityId (object/get ?data id "")) (set @entity.before (if @config.captureBeforeAfter (object/omit (object/get ?data before {}) @config.excludeFields) {})) (set @entity.after (if @config.captureBeforeAfter (object/omit (object/get ?data after {}) @config.excludeFields) {})) (set @entity.recordedAt 0) (persist create AuditEntry {
|
|
25
29
|
action: @entity.action
|
|
26
30
|
actor: @user.id
|
|
27
31
|
after: @entity.after
|
|
@@ -29,12 +33,20 @@ orbital AuditCaptureOrbital {
|
|
|
29
33
|
entityId: @entity.entityId
|
|
30
34
|
entityType: @config.captureEntity
|
|
31
35
|
recordedAt: 0
|
|
36
|
+
sourceEvent: @event.event
|
|
37
|
+
sourceTrait: (str/default @event.source.trait "")
|
|
38
|
+
sourceOrbital: (str/default @event.source.orbital "")
|
|
39
|
+
sourceTick: (str/default @event.source.tick "")
|
|
32
40
|
}) (emit AuditRecorded {
|
|
33
41
|
action: @entity.action
|
|
34
42
|
actor: @user.id
|
|
35
43
|
entityId: @entity.entityId
|
|
36
44
|
entityType: @config.captureEntity
|
|
37
45
|
recordedAt: 0
|
|
46
|
+
sourceEvent: @event.event
|
|
47
|
+
sourceTrait: (str/default @event.source.trait "")
|
|
48
|
+
sourceOrbital: (str/default @event.source.orbital "")
|
|
49
|
+
sourceTick: (str/default @event.source.tick "")
|
|
38
50
|
})))
|
|
39
51
|
}
|
|
40
52
|
|
|
@@ -45,6 +57,10 @@ orbital AuditCaptureOrbital {
|
|
|
45
57
|
entityType : string
|
|
46
58
|
entityId : string
|
|
47
59
|
recordedAt : number
|
|
60
|
+
sourceEvent : string
|
|
61
|
+
sourceTrait : string
|
|
62
|
+
sourceOrbital : string
|
|
63
|
+
sourceTick : string
|
|
48
64
|
}
|
|
49
65
|
}
|
|
50
66
|
|
|
@@ -66,7 +82,7 @@ orbital AuditCaptureOrbital {
|
|
|
66
82
|
@tier "internal"
|
|
67
83
|
captureEventTypes : [string] = []
|
|
68
84
|
@label "Event-kind filter"
|
|
69
|
-
@description "When set, only
|
|
85
|
+
@description "When set, only these kinds are audited: the payload's `kind` field, or the delivering event's name when there is no kind. Empty list = capture every event."
|
|
70
86
|
@tier "internal"
|
|
71
87
|
excludeFields : [string] = []
|
|
72
88
|
@label "Skip fields"
|
|
@@ -227,7 +227,7 @@ orbital CalendarSyncOrbital {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
ticks {
|
|
230
|
-
syncCycle every "*/15 * * * *"
|
|
230
|
+
syncCycle every "*/15 * * * *" [background]
|
|
231
231
|
(fetch @config.targetEntity {
|
|
232
232
|
emit: { failure: CAL_SYNC_FAILED, success: PUSH_ROWS_LOADED }
|
|
233
233
|
filter: ["=", (object/get @entity externalEventId), ""]
|
|
@@ -378,7 +378,7 @@ orbital DataErasureOrbital {
|
|
|
378
378
|
}
|
|
379
379
|
|
|
380
380
|
ticks {
|
|
381
|
-
executionScan every "0 * * * *"
|
|
381
|
+
executionScan every "0 * * * *" [background]
|
|
382
382
|
(fetch ErasureRequest {
|
|
383
383
|
emit: { failure: ExecScanFailed, success: ExecScanLoaded }
|
|
384
384
|
filter: (and ["=", (object/get @entity status), grace] ["<", (object/get @entity executesAt), @now])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
app std-global-search "1.0.0"
|
|
2
|
-
"std-global-search — cross-module federated search. Use when a user voices that one search box should query several modules at once (global search, search everything, unified search, cross-module search, federated search, search across records, omnisearch, one search box, aggregated results, grouped results). One SEARCH event fans out to every module key listed in the `modules` config (comma-separated, deterministic — no registry magic): the trait walks the parsed key list with an internal FAN_OUT_STEP sentinel and emits one scoped MODULE_SEARCH_REQUESTED { moduleKey, queryText, typeFilter, scopeJson } -> external per key, so modules respond in parallel rather than in sequence. Modules answer with SEARCH_RESULTS { moduleKey, resultsJson }; each answer appends a SearchResultGroup to the entity, so the merged view stays grouped by module. Client/person/date/type filters ride `scopeJson` — the atom never interprets them. Every query persists as a SearchQuery row (recent/saved searches) when `saveHistory` is on. The input is the mapped `search-input` type rendered inline with event renamed to SEARCH (the std-geosearch idiom); its native {searchTerm}/{value} payloads are bridged via str/default, so programmatic SEARCH { queryText, typeFilter, scopeJson } emitters and the UI box drive the same arm."
|
|
3
|
-
type SearchResultGroup = { moduleKey : string, resultsJson : string, receivedAt : number }
|
|
2
|
+
"std-global-search — cross-module federated search. Use when a user voices that one search box should query several modules at once (global search, search everything, unified search, cross-module search, federated search, search across records, omnisearch, one search box, aggregated results, grouped results). One SEARCH event fans out to every module key listed in the `modules` config (comma-separated, deterministic — no registry magic): the trait walks the parsed key list with an internal FAN_OUT_STEP sentinel and emits one scoped MODULE_SEARCH_REQUESTED { moduleKey, queryText, typeFilter, scopeJson } -> external per key, so modules respond in parallel rather than in sequence. Modules answer with SEARCH_RESULTS { moduleKey, resultsJson }; each answer appends a SearchResultGroup to the entity, so the merged view stays grouped by module. A module that answers twice is counted once, a keyless answer is filed under the answering module's name, and every group records which behavior answered it. Client/person/date/type filters ride `scopeJson` — the atom never interprets them. Every query persists as a SearchQuery row (recent/saved searches) when `saveHistory` is on. The input is the mapped `search-input` type rendered inline with event renamed to SEARCH (the std-geosearch idiom); its native {searchTerm}/{value} payloads are bridged via str/default, so programmatic SEARCH { queryText, typeFilter, scopeJson } emitters and the UI box drive the same arm."
|
|
3
|
+
type SearchResultGroup = { moduleKey : string, resultsJson : string, receivedAt : number, answeredBy : string }
|
|
4
4
|
orbital GlobalSearchOrbital {
|
|
5
5
|
uses Typography from "std/behaviors/ui-typography"
|
|
6
6
|
uses Spinner from "std/behaviors/ui-spinner"
|
|
@@ -133,14 +133,15 @@ orbital GlobalSearchOrbital {
|
|
|
133
133
|
(set @entity.fanOutDone true))
|
|
134
134
|
(when [">", (array/len @entity.pendingModules), 0]
|
|
135
135
|
(emit FAN_OUT_STEP { remaining: (array/len @entity.pendingModules) }))
|
|
136
|
-
SEARCH_RESULTS -> searching
|
|
136
|
+
SEARCH_RESULTS -> searching when (not (array/some @entity.results (fn g (= @g.moduleKey (str/default ?moduleKey (str/default @event.source.orbital ""))))))
|
|
137
137
|
(set @entity.respondedCount ["+", @entity.respondedCount, 1])
|
|
138
138
|
(set @entity.results (array/append @entity.results {
|
|
139
|
-
moduleKey: ?moduleKey
|
|
139
|
+
moduleKey: (str/default ?moduleKey (str/default @event.source.orbital ""))
|
|
140
140
|
receivedAt: @now
|
|
141
141
|
resultsJson: ?resultsJson
|
|
142
|
+
answeredBy: (str/default @event.source.trait "")
|
|
142
143
|
}))
|
|
143
|
-
(set @entity.resultsSummary (str/concat @entity.resultsSummary (str/concat ?moduleKey (str/concat ": " (str/concat ?resultsJson "\n")))))
|
|
144
|
+
(set @entity.resultsSummary (str/concat @entity.resultsSummary (str/concat (str/default ?moduleKey (str/default @event.source.orbital "")) (str/concat ": " (str/concat ?resultsJson "\n")))))
|
|
144
145
|
(render-ui main {
|
|
145
146
|
children: [{
|
|
146
147
|
event: SEARCH
|
|
@@ -250,6 +251,7 @@ orbital GlobalSearchOrbital {
|
|
|
250
251
|
FAN_OUT_STEP {
|
|
251
252
|
remaining : number
|
|
252
253
|
}
|
|
254
|
+
*.SEARCH_RESULTS -> SEARCH_RESULTS
|
|
253
255
|
}
|
|
254
256
|
|
|
255
257
|
config {
|
|
@@ -86,7 +86,7 @@ orbital LifecycleOrbital {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
ticks {
|
|
89
|
-
scanCycle every "0 * * * *"
|
|
89
|
+
scanCycle every "0 * * * *" [background]
|
|
90
90
|
(fetch @config.targetEntity {
|
|
91
91
|
emit: { failure: ScanFailed, success: ScanRecordsLoaded }
|
|
92
92
|
filter: (and ["=", (object/get @entity status), @config.fromStatus] ["<", (object/get @entity @config.dateField), ["-", @now, ["*", @config.ageDays, 86400000]]])
|
|
@@ -279,7 +279,7 @@ orbital NotificationCenterOrbital {
|
|
|
279
279
|
}
|
|
280
280
|
|
|
281
281
|
ticks {
|
|
282
|
-
digestCycle every "0 * * * *"
|
|
282
|
+
digestCycle every "0 * * * *" [background]
|
|
283
283
|
(fetch NotificationRecord {
|
|
284
284
|
emit: { failure: DIGEST_FAILED, success: DIGEST_ROWS_LOADED }
|
|
285
285
|
filter: (and ["=", (object/get @entity dispatched), false] (or ["=", (object/get @entity error), "digest-deferred"] ["=", (object/get @entity error), "quiet-hours"]) ["<", (object/get @entity recordedAt), ["-", @now, ["*", @config.minAgeHours, 3600000]]])
|
|
@@ -49,7 +49,7 @@ orbital NotifyOnEventOrbital {
|
|
|
49
49
|
initial: idle
|
|
50
50
|
|
|
51
51
|
state idle {
|
|
52
|
-
EventOccurred -> idle when (if ["=", @config.guardOp, "eq"] (or ["=", @config.triggerStatus, ""] ["=", ?status, @config.triggerStatus]) (if ["=", @config.guardOp, "gt"] [">", (object/get ?data @config.guardField), @config.guardValue] (if ["=", @config.guardOp, "lt"] ["<", (object/get ?data @config.guardField), @config.guardValue] (if ["=", @config.guardOp, "gte"] [">=", (object/get ?data @config.guardField), @config.guardValue] ["<=", (object/get ?data @config.guardField), @config.guardValue]))))
|
|
52
|
+
EventOccurred -> idle when (and (or ["=", @config.coalesce, "none"] (if ["=", @config.coalesce, "perDispatch"] (not (array/includes (array/map @prevEvents (fn e (object/get @e "event"))) @event.event)) (not (array/some @prevEvents (fn e (and ["=", (object/get @e "event"), @event.event] ["=", (object/get (object/get @e "payload" {}) @config.coalesceKey), (object/get @event.payload @config.coalesceKey)])))))) (if ["=", @config.guardOp, "eq"] (or ["=", @config.triggerStatus, ""] ["=", ?status, @config.triggerStatus]) (if ["=", @config.guardOp, "gt"] [">", (object/get ?data @config.guardField), @config.guardValue] (if ["=", @config.guardOp, "lt"] ["<", (object/get ?data @config.guardField), @config.guardValue] (if ["=", @config.guardOp, "gte"] [">=", (object/get ?data @config.guardField), @config.guardValue] ["<=", (object/get ?data @config.guardField), @config.guardValue])))))
|
|
53
53
|
(set @entity.recipient (if ["=", (array/len @config.recipients), 0] (if (not ["=", @config.fallbackRecipient, ""]) @config.fallbackRecipient @user.id) (array/first @config.recipients)))
|
|
54
54
|
(set @entity.channel @config.notifyChannel)
|
|
55
55
|
(set @entity.message @config.template)
|
|
@@ -352,6 +352,16 @@ orbital NotifyOnEventOrbital {
|
|
|
352
352
|
}
|
|
353
353
|
|
|
354
354
|
config {
|
|
355
|
+
coalesce : "none" | "perDispatch" | "perKey" = none
|
|
356
|
+
@label "Collapse repeat notifications from one action?"
|
|
357
|
+
@description "When one action raises the subscribed event several times (a bulk import, a batch save), send one notification for the whole action (`perDispatch`) or one per distinct value of `coalesceKey` (`perKey`) instead of one per event. `none` (default) notifies on every event. Scoped to a single action: the next action notifies again."
|
|
358
|
+
@synonyms "dedupe, deduplicate, collapse, batch notifications, one notification, bulk, coalesce, summarize, avoid spam, notification storm"
|
|
359
|
+
@tier "policy"
|
|
360
|
+
coalesceKey : string = "id"
|
|
361
|
+
@label "Which field makes two events distinct?"
|
|
362
|
+
@description "With `coalesce: perKey`, the upstream event's payload field compared to tell repeats apart (e.g. `id` = one notification per record). Ignored otherwise."
|
|
363
|
+
@synonyms "dedupe key, distinct by, per record, unique field"
|
|
364
|
+
@tier "policy"
|
|
355
365
|
triggerStatus : string = ""
|
|
356
366
|
@label "Trigger status"
|
|
357
367
|
@description "When `guardOp` is `eq` and this is set, dispatch only when the upstream event's `status` field equals this value (e.g. fire only when a record becomes 'approved'). Empty = fire on every subscribed event. Ignored when `guardOp` is a numeric comparison."
|
|
@@ -96,7 +96,7 @@ orbital ReminderSchedulerOrbital {
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
ticks {
|
|
99
|
-
scanCycle every "*/15 * * * *"
|
|
99
|
+
scanCycle every "*/15 * * * *" [background]
|
|
100
100
|
(fetch @config.targetEntity {
|
|
101
101
|
emit: { failure: ScanFailed, success: ScanRecordsLoaded }
|
|
102
102
|
filter: (and ["=", (object/get @entity remindedAt), 0] (or (and ["=", @config.direction, "future"] [">", (time/parse (object/get @entity @config.dateField)), @now] ["<", ["-", (time/parse (object/get @entity @config.dateField)), @now], ["*", @config.offsetHours, 3600000]]) (and ["=", @config.direction, "past"] [">", ["-", @now, (time/parse (object/get @entity @config.dateField))], ["*", @config.offsetHours, 3600000]])))
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
app std-review-cycle "0.1.0"
|
|
2
|
+
"std-review-cycle — revise-and-resubmit review workflow (document review, pull-request review, design review, editorial review, submission review, send back for changes, request changes, resubmit, review rounds, four-eyes approval). A record moves draft → in review → changes requested → in review → … → approved. One SUBMIT event serves both the first submission and every resubmission; the atom counts review rounds and marks resubmissions on the emitted ReviewRequested. Every move writes a ReviewEvent history row stamped with the states it left and entered. `requireSeparateApproval` enforces four-eyes review: an approval raised in the same action that submitted the record (an auto-responding rule or bot) is rejected. Headless — the host renders the badge and buttons and routes its actions to SUBMIT / REQUEST_CHANGES / APPROVE."
|
|
3
|
+
orbital ReviewCycleOrbital {
|
|
4
|
+
type ReviewSubmitted = Event { id : string, note : string } "Rename via traitOverrides.events to the host's submit action. Serves both the first submission and every resubmission."
|
|
5
|
+
|
|
6
|
+
type ReviewChangesRequested = Event { id : string, note : string } "Rename to the host's request-changes action. Sends the record back to its author."
|
|
7
|
+
|
|
8
|
+
type ReviewApproved = Event { id : string, note : string } "Rename to the host's approve action."
|
|
9
|
+
|
|
10
|
+
type ReviewRequested = Event { itemId : string, round : number, resubmission : boolean } "Emitted when a record enters review; `resubmission` is true when it came back from changes requested."
|
|
11
|
+
|
|
12
|
+
type ReviewLogged = Event ReviewEvent "Internal: a history row landed."
|
|
13
|
+
|
|
14
|
+
type ReviewLogFailed = Event { error : string, code : string } "Internal: writing a history row failed."
|
|
15
|
+
|
|
16
|
+
type ReviewDecided = Event { itemId : string, decision : string, round : number } "Emitted when a reviewer decides; `decision` is the state the record moved to (changes_requested or approved)."
|
|
17
|
+
|
|
18
|
+
entity ReviewItem [persistent: review_items] {
|
|
19
|
+
id : string!
|
|
20
|
+
round : number @description "Review round the record is on; 1 for the first review, incremented on each resubmission." @synonyms "iteration, revision round, review count" = 0
|
|
21
|
+
lastNote : string @description "Note left with the most recent move." @synonyms "comment, reason, feedback" = ""
|
|
22
|
+
lastLogId : string @description "Id of the most recent ReviewEvent history row." @synonyms "history id, log entry" = ""
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
entity ReviewEvent [persistent: review_events] {
|
|
26
|
+
id : string!
|
|
27
|
+
itemId : string @description "The record this history entry belongs to." @synonyms "record id, document id, item" = ""
|
|
28
|
+
fromState : string @description "The review state the record left." @synonyms "previous state, was" = ""
|
|
29
|
+
toState : string @description "The review state the record entered." @synonyms "new state, became" = ""
|
|
30
|
+
round : number @description "Review round at the time of the move." @synonyms "iteration" = 0
|
|
31
|
+
actor : string @description "Who made the move." @synonyms "user, reviewer, author" = ""
|
|
32
|
+
note : string @description "Note left with the move." @synonyms "comment, feedback, reason" = ""
|
|
33
|
+
at : number @description "When the move happened." @synonyms "timestamp, date, time" = 0
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
trait ReviewCycle -> @rebindable ReviewItem [lifecycle, instance] {
|
|
37
|
+
initial: draft
|
|
38
|
+
|
|
39
|
+
state draft {
|
|
40
|
+
INIT -> draft
|
|
41
|
+
ReviewSubmitted -> in_review when @config.enabled
|
|
42
|
+
(set @entity.round 1)
|
|
43
|
+
(set @entity.lastNote (str/default ?note ""))
|
|
44
|
+
(emit ReviewRequested { itemId: (str/default ?id ""), round: 1, resubmission: false })
|
|
45
|
+
(persist create ReviewEvent { itemId: (str/default ?id ""), fromState: @fromState, toState: @toState, round: 1, actor: (str/default @user.id ""), note: (str/default ?note ""), at: @now } { emit: { success: ReviewLogged, failure: ReviewLogFailed } })
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
state in_review {
|
|
49
|
+
INIT -> in_review
|
|
50
|
+
ReviewLogged -> in_review
|
|
51
|
+
(set @entity.lastLogId (str/default ?id ""))
|
|
52
|
+
ReviewLogFailed -> in_review
|
|
53
|
+
(notify error (str/concat "Couldn't record the review history — " ?error))
|
|
54
|
+
ReviewChangesRequested -> changes_requested
|
|
55
|
+
(set @entity.lastNote (str/default ?note ""))
|
|
56
|
+
(emit ReviewDecided { itemId: (str/default ?id ""), decision: @toState, round: @entity.round })
|
|
57
|
+
(persist create ReviewEvent { itemId: (str/default ?id ""), fromState: @fromState, toState: @toState, round: @entity.round, actor: (str/default @user.id ""), note: (str/default ?note ""), at: @now } { emit: { success: ReviewLogged, failure: ReviewLogFailed } })
|
|
58
|
+
ReviewApproved -> approved when (or (not @config.requireSeparateApproval) (not (array/some @prevStates (fn s (or (= @s "draft") (= @s "changes_requested"))))))
|
|
59
|
+
(set @entity.lastNote (str/default ?note ""))
|
|
60
|
+
(emit ReviewDecided { itemId: (str/default ?id ""), decision: @toState, round: @entity.round })
|
|
61
|
+
(persist create ReviewEvent { itemId: (str/default ?id ""), fromState: @fromState, toState: @toState, round: @entity.round, actor: (str/default @user.id ""), note: (str/default ?note ""), at: @now } { emit: { success: ReviewLogged, failure: ReviewLogFailed } })
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
state changes_requested {
|
|
65
|
+
INIT -> changes_requested
|
|
66
|
+
ReviewLogged -> changes_requested
|
|
67
|
+
(set @entity.lastLogId (str/default ?id ""))
|
|
68
|
+
ReviewLogFailed -> changes_requested
|
|
69
|
+
(notify error (str/concat "Couldn't record the review history — " ?error))
|
|
70
|
+
ReviewSubmitted -> in_review
|
|
71
|
+
(set @entity.round (+ @entity.round 1))
|
|
72
|
+
(set @entity.lastNote (str/default ?note ""))
|
|
73
|
+
(emit ReviewRequested { itemId: (str/default ?id ""), round: @entity.round, resubmission: true })
|
|
74
|
+
(persist create ReviewEvent { itemId: (str/default ?id ""), fromState: @fromState, toState: @toState, round: @entity.round, actor: (str/default @user.id ""), note: (str/default ?note ""), at: @now } { emit: { success: ReviewLogged, failure: ReviewLogFailed } })
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
state approved {
|
|
78
|
+
INIT -> approved
|
|
79
|
+
ReviewLogged -> approved
|
|
80
|
+
(set @entity.lastLogId (str/default ?id ""))
|
|
81
|
+
ReviewLogFailed -> approved
|
|
82
|
+
(notify error (str/concat "Couldn't record the review history — " ?error))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
emits {
|
|
86
|
+
ReviewLogged
|
|
87
|
+
ReviewLogFailed
|
|
88
|
+
ReviewRequested -> external {
|
|
89
|
+
itemId : string
|
|
90
|
+
round : number
|
|
91
|
+
resubmission : boolean
|
|
92
|
+
}
|
|
93
|
+
ReviewDecided -> external {
|
|
94
|
+
itemId : string
|
|
95
|
+
decision : string
|
|
96
|
+
round : number
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
listens {
|
|
101
|
+
ReviewLogged
|
|
102
|
+
ReviewLogFailed {
|
|
103
|
+
error : string
|
|
104
|
+
code : string
|
|
105
|
+
}
|
|
106
|
+
ReviewSubmitted {
|
|
107
|
+
id : string
|
|
108
|
+
note : string
|
|
109
|
+
}
|
|
110
|
+
ReviewChangesRequested {
|
|
111
|
+
id : string
|
|
112
|
+
note : string
|
|
113
|
+
}
|
|
114
|
+
ReviewApproved {
|
|
115
|
+
id : string
|
|
116
|
+
note : string
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
config {
|
|
121
|
+
enabled : boolean = true
|
|
122
|
+
@label "Run the review workflow?"
|
|
123
|
+
@description "Accept submissions into review. Off = submissions are ignored."
|
|
124
|
+
@synonyms "enable, turn on, review, require review, review workflow"
|
|
125
|
+
@tier "policy"
|
|
126
|
+
requireSeparateApproval : boolean = true
|
|
127
|
+
@label "Require approval to be a separate action?"
|
|
128
|
+
@description "Four-eyes review: reject an approval raised by the same action that submitted the record, such as an automatic rule or bot that approves instantly. Approvals made as their own action are unaffected."
|
|
129
|
+
@synonyms "four eyes, two person rule, no self approval, separate reviewer, independent approval, no auto approve"
|
|
130
|
+
@tier "policy"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
page "/review-cycle" as ReviewCyclePage -> ReviewCycle
|
|
135
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
app ui-module-card "1.0.0"
|
|
2
2
|
"ModuleCard — a card summarizing one course module or lesson with progress and entry point. — UI factory (1:1 with the @almadar/ui module-card pattern)."
|
|
3
3
|
;; @capabilities "course module card, lesson card, curriculum unit card, learning-path step card"
|
|
4
|
+
;; @pattern "module-card"
|
|
4
5
|
orbital ModuleCardOrbital {
|
|
5
6
|
type ModuleCardData = {
|
|
6
7
|
orbitalName : string!
|
|
@@ -8,7 +8,7 @@ orbital GraphItemOrbital {
|
|
|
8
8
|
|
|
9
9
|
entity GraphItem [runtime] {
|
|
10
10
|
id : string!
|
|
11
|
-
chartData : [ChartPoint] @intrinsic @description "The data points used to render the chart." @synonyms "data, values, points" = []
|
|
11
|
+
chartData : [ChartPoint] @intrinsic @description "The data points used to render the chart." @synonyms "data, values, points" = [{ label: Active, value: 6 }, { label: Pending, value: 3 }, { label: Inactive, value: 1 }]
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
trait GraphItemGraph -> @rebindable GraphItem [interaction, instance] {
|
|
@@ -16,7 +16,6 @@ orbital GraphItemOrbital {
|
|
|
16
16
|
|
|
17
17
|
state idle {
|
|
18
18
|
INIT -> idle
|
|
19
|
-
(set @entity.chartData [{ label: Active, value: 6 }, { label: Pending, value: 3 }, { label: Inactive, value: 1 }])
|
|
20
19
|
(render-ui main {
|
|
21
20
|
chartType: @config.chartType
|
|
22
21
|
data: @entity.chartData
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
app std-slide-deck "1.0.0"
|
|
2
|
+
"std-slide-deck — generic presentation atom. An ordered list of slide nodes (`config.slides`, any render tree or @trait) shown one at a time, with a previous/next arrow on either side, a dot strip and a k / n counter underneath, and keyboard stepping through the host's KEY router (`config.nextKeys` / `config.prevKeys`, captured per `config.keymap`). The cursor clamps at either end unless `loop` is on. Each visit mounts the slide fresh, so its own entry animations replay. Carries no content or visual style: a realization supplies the slides and restyles via `bodyContent`. The default body picks the slide inside a mapped-children lambda, which expands static slides only; a deck whose slides hold stateful traits (forms, live lists) overrides `bodyContent` with one `presence` per slide gated on `@entity.slideIndex`. Every move emits SLIDE_CHANGED for speaker notes, timers or analytics."
|
|
3
|
+
;; @capabilities "slide deck, presentation, pitch deck, keynote-style slideshow, previous and next slide arrows, arrow-key slide navigation, jump to slide from dots, slide counter"
|
|
4
|
+
;; @synonyms "slideshow, deck, presentation, slides, pitch"
|
|
5
|
+
orbital SlideDeckOrbital {
|
|
6
|
+
entity SlideDeck [runtime] {
|
|
7
|
+
id : string!
|
|
8
|
+
slideIndex : number @description "Zero-based index of the slide currently shown." @synonyms "current slide, cursor, position" = 0
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
trait SlideDeckPresenter -> @rebindable SlideDeck [interaction, instance] {
|
|
12
|
+
initial: presenting
|
|
13
|
+
|
|
14
|
+
state presenting {
|
|
15
|
+
INIT -> presenting
|
|
16
|
+
(set @entity.slideIndex @config.startIndex)
|
|
17
|
+
(render-ui main @config.bodyContent)
|
|
18
|
+
GO_TO -> presenting
|
|
19
|
+
(set @entity.slideIndex ?index)
|
|
20
|
+
(emit SLIDE_CHANGED { index: @entity.slideIndex })
|
|
21
|
+
(render-ui main @config.bodyContent)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
emits {
|
|
25
|
+
SLIDE_CHANGED -> external {
|
|
26
|
+
index : number!
|
|
27
|
+
}
|
|
28
|
+
@description "The deck moved to a new slide (zero-based index)."
|
|
29
|
+
@synonyms "slide shown, advanced, went back"
|
|
30
|
+
@tier "domain"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
listens {
|
|
34
|
+
GO_TO {
|
|
35
|
+
index : number!
|
|
36
|
+
}
|
|
37
|
+
@description "Show a zero-based slide index. The arrows and dots send the already-bounded target; a remote or table of contents can send any index."
|
|
38
|
+
@synonyms "jump, seek, next slide, previous slide, select slide"
|
|
39
|
+
@tier "domain"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
config {
|
|
43
|
+
slides : [trait] = []
|
|
44
|
+
@label "Slides"
|
|
45
|
+
@description "Ordered slide nodes; each entry is a render tree or a @trait reference and is shown one at a time."
|
|
46
|
+
@tier "domain"
|
|
47
|
+
startIndex : number = 0
|
|
48
|
+
@label "Start slide"
|
|
49
|
+
@description "Zero-based slide shown on first render; clamped to the deck."
|
|
50
|
+
@tier "presentation"
|
|
51
|
+
loop : boolean = false
|
|
52
|
+
@label "Loop"
|
|
53
|
+
@description "Wrap from the last slide to the first (and back) instead of stopping at either end."
|
|
54
|
+
@tier "presentation"
|
|
55
|
+
showArrows : boolean = true
|
|
56
|
+
@label "Show arrows"
|
|
57
|
+
@description "Previous/next buttons on the left and right of the slide."
|
|
58
|
+
@tier "presentation"
|
|
59
|
+
showProgress : boolean = true
|
|
60
|
+
@label "Show progress"
|
|
61
|
+
@description "Dot strip and k / n counter under the slide; dots jump to their slide."
|
|
62
|
+
@tier "presentation"
|
|
63
|
+
stageMinHeight : string = "70vh"
|
|
64
|
+
@label "Stage height"
|
|
65
|
+
@description "Minimum height of the slide stage (any CSS length, e.g. 70vh or 640px); the slide is centred vertically inside it so short and tall slides share one frame."
|
|
66
|
+
@tier "presentation"
|
|
67
|
+
prevIcon : icon = chevron-left
|
|
68
|
+
@label "Previous icon"
|
|
69
|
+
@tier "presentation"
|
|
70
|
+
nextIcon : icon = chevron-right
|
|
71
|
+
@label "Next icon"
|
|
72
|
+
@tier "presentation"
|
|
73
|
+
bodyContent : render-ui = {
|
|
74
|
+
type: stack
|
|
75
|
+
direction: vertical
|
|
76
|
+
gap: md
|
|
77
|
+
className: "w-full"
|
|
78
|
+
children: [{
|
|
79
|
+
type: stack
|
|
80
|
+
direction: horizontal
|
|
81
|
+
gap: md
|
|
82
|
+
align: center
|
|
83
|
+
children: [
|
|
84
|
+
(array/map [(array/len @config.slides)] (fn n (if @config.showArrows { type: button, variant: ghost, size: lg, icon: @config.prevIcon, action: GO_TO, actionPayload: { index: (if @config.loop (math/wrap (- @entity.slideIndex 1) 0 @n) (math/max 0 (- @entity.slideIndex 1))) }, disabled: (and (== @config.loop false) (<= @entity.slideIndex 0)) } null))),
|
|
85
|
+
{ type: center, className: "flex-1 min-w-0", minHeight: @config.stageMinHeight, children: (array/map [@entity.slideIndex] (fn i { type: box, className: "w-full", children: [(array/nth @config.slides @i)] })) },
|
|
86
|
+
(array/map [(array/len @config.slides)] (fn n (if @config.showArrows { type: button, variant: ghost, size: lg, icon: @config.nextIcon, action: GO_TO, actionPayload: { index: (if @config.loop (math/wrap (+ @entity.slideIndex 1) 0 @n) (math/min (- @n 1) (+ @entity.slideIndex 1))) }, disabled: (and (== @config.loop false) (>= @entity.slideIndex (- @n 1))) } null)))
|
|
87
|
+
]
|
|
88
|
+
}, (if @config.showProgress {
|
|
89
|
+
type: stack
|
|
90
|
+
direction: horizontal
|
|
91
|
+
gap: md
|
|
92
|
+
align: center
|
|
93
|
+
justify: center
|
|
94
|
+
children: (array/map [(array/len @config.slides)] (fn n {
|
|
95
|
+
type: stack
|
|
96
|
+
direction: horizontal
|
|
97
|
+
gap: md
|
|
98
|
+
align: center
|
|
99
|
+
children: [
|
|
100
|
+
{ type: progress-dots, count: @n, currentIndex: @entity.slideIndex, onDotClick: GO_TO, size: sm },
|
|
101
|
+
{ type: typography, variant: caption, color: muted, content: (str/concat "" (+ @entity.slideIndex 1) " / " @n) }
|
|
102
|
+
]
|
|
103
|
+
}))
|
|
104
|
+
} null)]
|
|
105
|
+
}
|
|
106
|
+
@label "Body content tree"
|
|
107
|
+
@description "Render-ui tree for the deck. Default: slide centred between previous/next arrows, dot strip and counter below. A realization overrides this to restyle (full-bleed, bottom bar, no chrome) while keeping the same cursor, keys and emits."
|
|
108
|
+
@tier "internal"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
page "/slide-deck" as SlideDeckPage -> SlideDeckPresenter
|
|
113
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
app ui-aside "1.0.0"
|
|
2
2
|
"Aside — a secondary side panel that hosts navigation links or supplementary content alongside a main content area. — UI factory (1:1 with the @almadar/ui aside pattern)."
|
|
3
3
|
;; @capabilities "settings navigation sidebar, preferences menu panel, account settings nav, secondary panel, side navigation rail"
|
|
4
|
+
;; @pattern "aside"
|
|
4
5
|
orbital AsideOrbital {
|
|
5
6
|
entity AsideItem [runtime] {
|
|
6
7
|
id : string!
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
app ui-conditional-wrapper "1.0.0"
|
|
2
2
|
"ConditionalWrapper — UI factory (1:1 with the @almadar/ui conditional-wrapper pattern)."
|
|
3
|
+
;; @pattern "conditional-wrapper"
|
|
3
4
|
orbital ConditionalWrapperOrbital {
|
|
4
5
|
type ConditionalWrapperContext = {
|
|
5
6
|
formValues : Map string ControlValue!
|