31 سلوكًا · std/behaviors
std-anim-ticksprite animation clock atom. Owns a global animation counter and exposes the current frame NAME (@entity.frameName = frames[counter % len]) every 100ms tick. Boards compose it via uses + a trait-ref rebound (linkedEntity) to the board entity; render-ui merges @entity.frameName onto the animated sprite's asset, replacing the inlined animTick frame counters that were duplicated across game boards. 1.1.0 redesign: the 1.0.0 units-frame-advance / effects-aging sets were removed — numeric unit frames served the pre-animation-contract regime (draw-sprite paints atlas sub-texture NAMES, which is exactly what frameName now exposes; zero consumers existed), effects aging is owned by std-fx-particles, and the shared-entity one-writer rule (ORB_SHARED_ENTITY_FIELD_CONFLICT) forbids a shared atom co-writing fields a board's own ticks also write. Tick interval is a language-level literal (100ms); the config surface is frames.
uses AnimTick from "std/behaviors/std-anim-tick"الكيان: AnimTickItem (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
AnimTick | لا شيء | لا شيء |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
AnimTick | frames | [string] | Frame names |
std-approval-gategeneric approval gate / approver workflow. Use when a user voices that an action must be reviewed, approved, signed off, or authorized by a privileged role before it proceeds (admin approval, supervisor sign-off, manager approval, gatekeeper review, editor approval, senior editor approval, reviewer approval, publishing approval, draft approval, content review, submit drafts then editors review and approve or reject, needs approval before going live, requires sign-off before publish). Persists ApprovalRequest rows + surfaces the PENDING ones in a review queue showing what is being approved and who asked, with Approve / Deny actions — Deny captures a written reason. approverRoles is ENFORCED by the review transitions themselves: an APPROVE/DENY from a viewer whose role is not listed does not fire. blockSelfApproval additionally stops a reviewer approving their own request (four-eyes) — DENY stays allowed as self-withdrawal. On approval emits ApprovalGranted; on denial emits ApprovalDenied (with the reason). Hosts that replay the gated action MUST route a failed replay back via APPROVAL_REPLAY_FAILED so the request reopens instead of being silently consumed. Compose onto any orbital whose action you want to gate: the target orbital emits an external event, an ApprovalRequest row is created (stamp subjectLabel/subjectId/requestedBy so reviewers see what they are judging), and downstream effects wait on ApprovalGranted. Differs from std-mod-queue, which is content-moderation-specific.
uses ApprovalGate from "std/behaviors/std-approval-gate"الكيان: ApprovalRequest (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
LoadingSpinner | لا شيء | لا شيء |
ErrorSpinner | لا شيء | لا شيء |
LoadingText | لا شيء | لا شيء |
ShieldCheckIcon | لا شيء | لا شيء |
ApprovalQueueTitle | لا شيء | لا شيء |
DenyReasonTitle | لا شيء | لا شيء |
DenyReasonHint | لا شيء | لا شيء |
CloseButton | لا شيء | لا شيء |
ApprovalDivider | لا شيء | لا شيء |
ErrorAlert | لا شيء | لا شيء |
ApprovalGateReview | APPROVAL_REPLAY_FAILED, OPEN | APPROVE, DENY, OPEN_SUBJECT, CONFIRM_DENY, CANCEL_DENY, CLOSE, ApprovalGranted, ApprovalDenied, ApprovalRequestLoaded, ApprovalRequestLoadFailed, ApprovalRequestReviewed, ApprovalRequestReviewFailed |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ErrorSpinner | size | unknown | |
LoadingText | color | unknown | |
LoadingText | content | unknown | |
LoadingText | variant | unknown | |
ShieldCheckIcon | name | unknown | |
ApprovalQueueTitle | content | unknown | |
ApprovalQueueTitle | variant | unknown | |
DenyReasonTitle | content | unknown | |
DenyReasonTitle | variant | unknown | |
DenyReasonHint | color | unknown | |
DenyReasonHint | content | unknown | |
DenyReasonHint | variant | unknown | |
CloseButton | action | unknown | |
CloseButton | icon | unknown | |
CloseButton | label | unknown | |
CloseButton | variant | unknown | |
ErrorAlert | message | unknown | |
ErrorAlert | variant | unknown | |
ApprovalGateReview | approverRoles | [string] | Who can approve requests? |
ApprovalGateReview | blockSelfApproval | boolean | Block approving your own requests? |
ApprovalGateReview | enabled | boolean | Require approval |
ApprovalGateReview | itemActions | [ItemAction] | Row actions |
ApprovalGateReview | itemClickEvent | event | Row click |
ApprovalGateReview | reviewSlot | slot | Review slot |
ApprovalGateReview | tableLook | string | Review queue table style |
ApprovalGateReview | viewerRole | string | Viewer's role |
std-audit-captureevent-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.
uses AuditCapture from "std/behaviors/std-audit-capture"الكيان: AuditEntry (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
AuditCaptureListener | EntityMutated | AuditRecorded |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
AuditCaptureListener | captureBeforeAfter | boolean | Store before-and-after snapshots? |
AuditCaptureListener | captureEntity | entity | Entity to audit |
AuditCaptureListener | captureEventTypes | [string] | Event-kind filter |
AuditCaptureListener | enabled | boolean | Track every change |
AuditCaptureListener | excludeFields | [string] | Skip fields |
std-cache-asidestd-cache-aside as a Function
uses CacheAside from "std/behaviors/std-cache-aside"الكيان: CacheEntry (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
FetchButton | لا شيء | لا شيء |
InvalidateButton | لا شيء | لا شيء |
RefreshButton | لا شيء | لا شيء |
RetryButton | لا شيء | لا شيء |
CacheEntryCacheManager | FETCH, INVALIDATE, CACHED, REFRESH | CacheEntryLoaded, CacheEntryLoadFailed, CacheEntryUpdated, CacheEntryUpdateFailed |
InlineIconRender1 | لا شيء | لا شيء |
InlineTypographyRender2 | لا شيء | لا شيء |
InlineDividerRender3 | لا شيء | لا شيء |
InlineEmptyStateRender4 | لا شيء | لا شيء |
InlineIconRender5 | لا شيء | لا شيء |
InlineTypographyRender6 | لا شيء | لا شيء |
InlineStatusDotRender7 | لا شيء | لا شيء |
InlineDividerRender8 | لا شيء | لا شيء |
InlineIconRender9 | لا شيء | لا شيء |
InlineTypographyRender10 | لا شيء | لا شيء |
InlineBadgeRender11 | لا شيء | لا شيء |
InlineTypographyRender12 | لا شيء | لا شيء |
InlineIconRender13 | لا شيء | لا شيء |
InlineTypographyRender14 | لا شيء | لا شيء |
InlineTypographyRender15 | لا شيء | لا شيء |
InlineIconRender16 | لا شيء | لا شيء |
InlineTypographyRender17 | لا شيء | لا شيء |
InlineStatusDotRender18 | لا شيء | لا شيء |
InlineDividerRender19 | لا شيء | لا شيء |
InlineAlertRender20 | لا شيء | لا شيء |
InlineSpinnerRender21 | لا شيء | لا شيء |
InlineEmptyStateRender22 | لا شيء | لا شيء |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
FetchButton | action | unknown | |
FetchButton | icon | unknown | |
FetchButton | label | unknown | |
FetchButton | variant | unknown | |
InvalidateButton | action | unknown | |
InvalidateButton | icon | unknown | |
InvalidateButton | label | unknown | |
InvalidateButton | variant | unknown | |
RefreshButton | action | unknown | |
RefreshButton | icon | unknown | |
RefreshButton | label | unknown | |
RefreshButton | variant | unknown | |
RetryButton | action | unknown | |
RetryButton | icon | unknown | |
RetryButton | label | unknown | |
RetryButton | variant | unknown | |
CacheEntryCacheManager | emptyLook | string | Empty-state look |
CacheEntryCacheManager | tableLook | string | Table look |
InlineIconRender1 | name | unknown | |
InlineTypographyRender2 | content | unknown | |
InlineTypographyRender2 | variant | unknown | |
InlineEmptyStateRender4 | description | unknown | |
InlineEmptyStateRender4 | icon | unknown | |
InlineEmptyStateRender4 | look | unknown | |
InlineEmptyStateRender4 | title | unknown | |
InlineIconRender5 | name | unknown | |
InlineTypographyRender6 | content | unknown | |
InlineTypographyRender6 | variant | unknown | |
InlineStatusDotRender7 | label | unknown | |
InlineStatusDotRender7 | pulse | unknown | |
InlineStatusDotRender7 | status | unknown | |
InlineIconRender9 | name | unknown | |
InlineTypographyRender10 | content | unknown | |
InlineTypographyRender10 | variant | unknown | |
InlineBadgeRender11 | label | unknown | |
InlineTypographyRender12 | content | unknown | |
InlineTypographyRender12 | variant | unknown | |
InlineIconRender13 | color | unknown | |
InlineIconRender13 | name | unknown | |
InlineTypographyRender14 | content | unknown | |
InlineTypographyRender14 | variant | unknown | |
InlineTypographyRender15 | color | unknown | |
InlineTypographyRender15 | content | unknown | |
InlineTypographyRender15 | variant | unknown | |
InlineIconRender16 | name | unknown | |
InlineTypographyRender17 | content | unknown | |
InlineTypographyRender17 | variant | unknown | |
InlineStatusDotRender18 | label | unknown | |
InlineStatusDotRender18 | pulse | unknown | |
InlineStatusDotRender18 | status | unknown | |
InlineAlertRender20 | message | unknown | |
InlineAlertRender20 | variant | unknown | |
InlineEmptyStateRender22 | description | unknown | |
InlineEmptyStateRender22 | icon | unknown | |
InlineEmptyStateRender22 | look | unknown | |
InlineEmptyStateRender22 | title | unknown |
std-calendar-synctwo-way Google Calendar synchronization engine. PUSH: a 15-minute cron scan (and the user-addressable SYNC_NOW) walks targetEntity rows whose externalEventId marker is blank and creates a remote event per row through calendar.createEvent, reading the summary/start/end via the configured field mapping (titleField/startField/endField/durationMinutes fallback/locationField/descriptionField) — so ANY event-shaped host entity pushes, provided it declares the two marker columns externalEventId : string and syncedAt : number (the remindedAt precedent). PULL: CAL_REMOTE_CHANGED (delivered by the shared /api/hooks/google-calendar ingress from a calendar.watch channel) or the same cycle after a clean push lists remote events (incremental via the in-memory sync token; a restart falls back to a full window list) and upserts each into the atom's own canonical CalendarEvent store, matched by externalEventId — pulls land in the canonical store, NOT the arbitrary target, because persist keys are static in the language; bind calendar UI to CalendarEvent to surface remote events. Conflict detection (local-newer-than-remote) needs a local-modified marker convention and is a recorded gap, not a decorative state. Composes with std-notify-on-event via CAL_SYNCED / CAL_SYNC_FAILED.
uses CalendarSync from "std/behaviors/std-calendar-sync"الكيان: CalendarSyncRun (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
CalendarSync | SYNC_NOW, CAL_REMOTE_CHANGED | CAL_SYNCED, CAL_SYNC_FAILED, PUSH_ROWS_LOADED, CAL_EVENT_CREATED, PUSH_STEPPED, CAL_REMOTE_LISTED, PULL_TARGET_LOADED, PULL_STEPPED, PULL_NEXT |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
CalendarSync | calendarId | string | Calendar id |
CalendarSync | descriptionField | string | Description field |
CalendarSync | durationField | string | Duration field |
CalendarSync | durationMinutes | number | Duration (minutes) |
CalendarSync | enabled | boolean | Sync with Google Calendar |
CalendarSync | endField | string | End field |
CalendarSync | locationField | string | Location field |
CalendarSync | startField | string | Start field |
CalendarSync | targetEntity | entity | Entity to push |
CalendarSync | titleField | string | Title field |
std-cascade-on-deleterelational owns cascade. Listens for a parent-deleted sentinel (ParentDeleted — rename via traitOverrides.events to the consumer's actual parent-deleted event), then deletes every dependent row whose foreignKeyField points at the deleted parent — via a self-driving loop (delete the head of the matching set, re-fetch until none remain). Emits CascadeRowDeleted per row and CascadeCompleted when done.
uses CascadeOnDelete from "std/behaviors/std-cascade-on-delete"الكيان: CascadeLog (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
CascadeOnDeleteGate | ParentDeleted | CascadeRowDeleted, CascadeCompleted, DepsLoaded, CascadeStepped, CascadeFailed |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
CascadeOnDeleteGate | dependentEntity | entity | Dependent entity |
CascadeOnDeleteGate | enabled | boolean | Delete related records too |
CascadeOnDeleteGate | foreignKeyField | string | Foreign-key field |
CascadeOnDeleteGate | parentEntity | entity | Parent entity |
std-circuit-breakerstd-circuit-breaker as a Function
uses CircuitBreaker from "std/behaviors/std-circuit-breaker"الكيان: ServiceNode (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
ShieldIcon | لا شيء | لا شيء |
AlertTriangleIcon | لا شيء | لا شيء |
ActivityIcon | لا شيء | لا شيء |
ServiceNodeLabel | لا شيء | لا شيء |
ClosedStatusDot | لا شيء | لا شيء |
OpenStatusDot | لا شيء | لا شيء |
HalfOpenStatusDot | لا شيء | لا شيء |
SuccessAlert | لا شيء | لا شيء |
ErrorAlert | لا شيء | لا شيء |
WarningAlert | لا شيء | لا شيء |
FailuresStat | لا شيء | لا شيء |
SuccessesStat | لا شيء | لا شيء |
FailuresMeter | لا شيء | لا شيء |
ResetButton | لا شيء | لا شيء |
CircuitDivider | لا شيء | لا شيء |
StatsGrid | لا شيء | لا شيء |
ServiceNodeCircuitBreaker | FAILURE, SUCCESS, TIMEOUT, RESET | ServiceNodeLoaded, ServiceNodeLoadFailed |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ShieldIcon | name | unknown | |
AlertTriangleIcon | name | unknown | |
ActivityIcon | name | unknown | |
ServiceNodeLabel | content | unknown | |
ServiceNodeLabel | variant | unknown | |
ClosedStatusDot | label | unknown | |
ClosedStatusDot | pulse | unknown | |
ClosedStatusDot | status | unknown | |
OpenStatusDot | label | unknown | |
OpenStatusDot | pulse | unknown | |
OpenStatusDot | status | unknown | |
HalfOpenStatusDot | label | unknown | |
HalfOpenStatusDot | pulse | unknown | |
HalfOpenStatusDot | status | unknown | |
SuccessAlert | message | unknown | |
SuccessAlert | variant | unknown | |
ErrorAlert | message | unknown | |
ErrorAlert | variant | unknown | |
WarningAlert | message | unknown | |
WarningAlert | variant | unknown | |
FailuresStat | label | unknown | |
FailuresStat | look | unknown | |
FailuresStat | value | unknown | |
SuccessesStat | label | unknown | |
SuccessesStat | look | unknown | |
SuccessesStat | value | unknown | |
FailuresMeter | max | unknown | |
FailuresMeter | min | unknown | |
FailuresMeter | value | unknown | |
ResetButton | action | unknown | |
ResetButton | icon | unknown | |
ResetButton | label | unknown | |
ResetButton | variant | unknown | |
StatsGrid | children | unknown | |
StatsGrid | cols | unknown | |
ServiceNodeCircuitBreaker | failureThreshold | number | Failure threshold |
ServiceNodeCircuitBreaker | statLook | string | Stat display look |
std-cooldownability/action cooldown primitive; START begins the countdown, READY fires when it expires.
uses Cooldown from "std/behaviors/std-cooldown"الكيان: CooldownRecord (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
Cooldown | START | CooldownReady, EXPIRE |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
Cooldown | defaultDurationMs | number | Default cooldown duration (ms) |
std-cross-referencejoin-table primitive for N:M relationships. Listens for LinkRequested/UnlinkRequested/FETCH_LINKS_FOR and manages the junction collection (default CrossRefLink [persistent: cross_ref_links]). Rebind via linkedEntity={YourJunction} to your consumer junction; if your junction's id fields differ from leftId/rightId, override them with fields{} renames at the call site. A rebind target must supply leftId, rightId, createdAt, filteredLinks. Emits LinkCreated, LinkRemoved, LinksLoaded as external broadcasts for downstream consumers.
uses CrossReference from "std/behaviors/std-cross-reference"الكيان: CrossRefLink (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
CrossReferenceGate | LinkRequested, UnlinkRequested, FETCH_LINKS_FOR | LinkCreated, LinkRemoved, LinksLoaded, LinksFetched, LinkOpFailed |
std-data-erasureGDPR Art. 17 right-to-be-forgotten queue. Tracks ErasureRequest rows through pending → grace → executed lifecycle with Cancel during grace. v1.0 ships the request lifecycle UI + knob set; auto-emit of ExecuteErasure after grace lands in v1.1 (loop-with-emit gap — docs/Almadar_Std_Factories.md). Target app/ atoms then own the actual delete or piiFields scrub via an ExecuteErasure listener.
uses DataErasure from "std/behaviors/std-data-erasure"الكيان: ErasureRequest (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
LoadingSpinner | لا شيء | لا شيء |
ErrorSpinner | لا شيء | لا شيء |
LoadingText | لا شيء | لا شيء |
Trash2Icon | لا شيء | لا شيء |
ErasureRequestsTitle | لا شيء | لا شيء |
CloseButton | لا شيء | لا شيء |
ErasureDivider | لا شيء | لا شيء |
ErrorAlert | لا شيء | لا شيء |
ErasureWorkflow | OPEN | CANCEL_ERASURE, CLOSE, ErasureLoaded, ErasureLoadFailed, ErasureSaved, ErasureSaveFailed, ExecuteErasure, ExecScanLoaded, ExecScanFailed, ExecStepped |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ErrorSpinner | size | unknown | |
LoadingText | color | unknown | |
LoadingText | content | unknown | |
LoadingText | variant | unknown | |
Trash2Icon | name | unknown | |
ErasureRequestsTitle | content | unknown | |
ErasureRequestsTitle | variant | unknown | |
CloseButton | action | unknown | |
CloseButton | icon | unknown | |
CloseButton | label | unknown | |
CloseButton | variant | unknown | |
ErrorAlert | message | unknown | |
ErrorAlert | variant | unknown | |
ErasureWorkflow | enabled | boolean | Allow data erasure (GDPR) |
ErasureWorkflow | itemActions | [ItemAction] | Row actions |
ErasureWorkflow | reviewSlot | slot | Review slot |
ErasureWorkflow | tableLook | string | Erasure queue table style |
ErasureWorkflow | targetEntity | string | Target entity |
ErasureWorkflow | viewerRole | string | Viewer's role |
std-data-importstaged CSV import run, source-agnostic: upload → staged review → confirm → parse+map → handoff. UPLOAD_CSV opens a run and persists an ImportBatch row (status uploaded, fieldMappingJson recorded verbatim for provenance); the host's file UI parses the CSV and answers with STAGE_ROWS, one JSON string per raw row, which the atom bulk-persists into import_rows against the batch id and presents as a staged review (row/error counts + Confirm/Discard). CONFIRM_IMPORT marks the batch confirmed, emits IMPORT_CONFIRMED { batchId, sourceName, rowCount }, and fetches the batch's staged rows; on fetch success the atom parses each rowJson via json/parse, remaps keys through the batch's mappingJson, and emits IMPORT_ROWS_PARSED { batchId, rows, failed } — the persist half is the CONSUMER organism's: it listens for IMPORT_ROWS_PARSED and persists the mapped rows into its own target entity (cross-atom persist into a consumer's entity is not expressible from here). This is deliberately the CSV-file path: the atom never calls a source service — sourceName/fieldMappingJson/targetEntity are consumer configs, and any persist failure marks the batch row failed and fires IMPORT_FAILED, never a silent swallow. Compose with std-import for the file-picker menu.
uses DataImport from "std/behaviors/std-data-import"الكيان: ImportBatch (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
DataImportLifecycle | UPLOAD_CSV, STAGE_ROWS, DISCARD_IMPORT, CONFIRM_IMPORT, RESET | BATCH_CREATED, ROWS_STAGED, IMPORT_PERSIST_FAILED, IMPORT_CONFIRMED, IMPORT_ROWS_FETCHED, IMPORT_ROWS_PARSED, IMPORT_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
DataImportLifecycle | fieldMappingJson | string | Field mapping (JSON) |
DataImportLifecycle | sourceName | string | Source name |
DataImportLifecycle | targetEntity | string | Target entity |
std-game-clockfixed-timestep authoritative clock games compose to drive time; emits GameClockTicked every 100ms while running.
uses GameClock from "std/behaviors/std-game-clock"الكيان: GameClockRecord (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
GameClock | PAUSE, RESUME | GameClockTicked |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
GameClock | autoStart | boolean | Auto-start clock |
std-global-searchcross-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.
uses GlobalSearch from "std/behaviors/std-global-search"الكيان: SearchQuery (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
GlobalSearch | SEARCH_RESULTS | SEARCH, MODULE_SEARCH_REQUESTED, GLOBAL_SEARCH_COMPLETED, QUERY_SAVED, QUERY_SAVE_FAILED, FAN_OUT_STEP |
InlineTypographyRender1 | لا شيء | لا شيء |
InlineSpinnerRender2 | لا شيء | لا شيء |
InlineTypographyRender3 | لا شيء | لا شيء |
InlineTypographyRender4 | لا شيء | لا شيء |
InlineTypographyRender5 | لا شيء | لا شيء |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
GlobalSearch | modules | string | Modules to search |
GlobalSearch | placeholder | string | Search placeholder |
GlobalSearch | saveHistory | boolean | Keep recent searches |
InlineTypographyRender1 | color | unknown | |
InlineTypographyRender1 | content | unknown | |
InlineTypographyRender1 | variant | unknown | |
InlineTypographyRender3 | color | unknown | |
InlineTypographyRender3 | content | unknown | |
InlineTypographyRender3 | variant | unknown | |
InlineTypographyRender4 | content | unknown | |
InlineTypographyRender4 | variant | unknown | |
InlineTypographyRender5 | content | unknown | |
InlineTypographyRender5 | variant | unknown |
std-knowledge-loopgeneric epistemic-loop / decision-gate machinery. Use when a user voices that a claim, hypothesis, or fix needs to be varied, predicted, falsified, independently checked, and calibrated before it is trusted (root-cause investigation, hypothesis testing, a fix that needs sign-off before it ships, a claim that needs a second opinion). The topology (vary -> compare -> hypothesize -> predict -> falsify -> verify -> generalize -> isolate & intervene -> compose -> calibrate -> select next target -> vary again) is fixed and never re-authored per domain. Each gate is announced: entering falsification emits FalsificationRequested, entering verification emits VerificationRequested, entering calibration emits CalibrationRequested (all carry the claim's title + candidateStructure). Who answers a gate is the consumer's call: with manualFalsification / manualVerification on (the default) the atom renders Survived/Failed and Checks-agree/Checks-disagree buttons and a person judges; a consumer that can compute the verdict sets the knob off, authors a sibling trait that listens for the *Requested event, does the domain check, and emits its result, then overrides listens {} at the call site to route that result into SURVIVED/FAILED or CHECKS_AGREE/CHECKS_DISAGREE — the when guard on that route IS the consumer's definition of what the gate means (e.g. ReproCheck.REPRO_RESULT -> SURVIVED when (>= ?passRate 0.95)). Calibration is enforced by the atom itself: a submitted numeric score is checked against reliabilityThreshold. On a claim clearing calibration, emits LoopConcluded (title, reliabilityScore) so a composing host can act on the validated result.
uses KnowledgeLoop from "std/behaviors/std-knowledge-loop"الكيان: KnowledgeClaim (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
LoopTitle | لا شيء | لا شيء |
AwaitingFalsificationText | لا شيء | لا شيء |
AwaitingVerificationText | لا شيء | لا شيء |
LoopDivider | لا شيء | لا شيء |
SurvivedButton | لا شيء | لا شيء |
FailedButton | لا شيء | لا شيء |
ChecksAgreeButton | لا شيء | لا شيء |
ChecksDisagreeButton | لا شيء | لا شيء |
ChooseNextTargetButton | لا شيء | لا شيء |
KnowledgeLoop | CHANGE_CONDITION, MEASURE_DIFFERENCE, FORM_GUESS, EXTRAPOLATE, SURVIVED, FAILED, CHECKS_AGREE, CHECKS_DISAGREE, STRIP_TO_ESSENTIALS, FIND_AND_CONTROL_CAUSE, COMBINE_WITH_TRUSTED, CONFIRM_SCORE, CANCEL_SCORE, CHOOSE_NEXT_TARGET | FalsificationRequested, VerificationRequested, CalibrationRequested, LoopConcluded |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
LoopTitle | content | unknown | |
LoopTitle | variant | unknown | |
AwaitingFalsificationText | color | unknown | |
AwaitingFalsificationText | content | unknown | |
AwaitingFalsificationText | variant | unknown | |
AwaitingVerificationText | color | unknown | |
AwaitingVerificationText | content | unknown | |
AwaitingVerificationText | variant | unknown | |
SurvivedButton | action | unknown | |
SurvivedButton | icon | unknown | |
SurvivedButton | label | unknown | |
SurvivedButton | variant | unknown | |
FailedButton | action | unknown | |
FailedButton | icon | unknown | |
FailedButton | label | unknown | |
FailedButton | variant | unknown | |
ChecksAgreeButton | action | unknown | |
ChecksAgreeButton | icon | unknown | |
ChecksAgreeButton | label | unknown | |
ChecksAgreeButton | variant | unknown | |
ChecksDisagreeButton | action | unknown | |
ChecksDisagreeButton | icon | unknown | |
ChecksDisagreeButton | label | unknown | |
ChecksDisagreeButton | variant | unknown | |
ChooseNextTargetButton | action | unknown | |
ChooseNextTargetButton | icon | unknown | |
ChooseNextTargetButton | label | unknown | |
ChooseNextTargetButton | variant | unknown | |
KnowledgeLoop | manualFalsification | boolean | Falsification is judged by a person |
KnowledgeLoop | manualVerification | boolean | Verification is judged by a person |
KnowledgeLoop | reliabilityThreshold | number | Reliability threshold |
KnowledgeLoop | requireIndependentVerification | boolean | Require independent verification |
std-lifecycleage-based status lifecycle for a target entity. A periodic tick scans the target for records in fromStatus whose dateField is older than ageDays, and transitions each one to toStatus — every matching record, via a self-driving scan loop (process the head of a filtered fetch, persist the status, re-fetch until the set drains). Compose onto any orbital and bind targetEntity + the status/date knobs.
uses Lifecycle from "std/behaviors/std-lifecycle"الكيان: LifecycleRunLog (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
LifecycleScheduler | لا شيء | LifecycleTransitioned, ScanRecordsLoaded, ScanFailed, LifecycleStepped |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
LifecycleScheduler | ageDays | number | How old (in days) before a record is transitioned? |
LifecycleScheduler | dateField | string | Which date field measures the record's age? |
LifecycleScheduler | dryRun | boolean | Run in dry-run mode (no changes written)? |
LifecycleScheduler | enabled | boolean | Auto-archive old records |
LifecycleScheduler | fromStatus | string | Which status triggers the age-out? |
LifecycleScheduler | targetEntity | entity | Target entity |
LifecycleScheduler | toStatus | string | What status should old records move to? |
std-migration-jobone import run of external data into the host system, modeled as a persistent MigrationJob row with a lifecycle state machine: idle → fetching → mapping → reviewing → committing → done | failed. All source access goes through the migration service (call-service "migration" listDocuments / fetchDocument / commit) — the atom never talks to a source directly, and the host-injected service handler resolves credentials from the connectionRef knob (a reference, never the secret). Staging/mapping is host work (deterministic pipeline or agent): the atom fetches, the host stages and emits MIGRATION_STAGED with stats and, optionally, the staged units/skipped/validationErrors rows themselves — when the rows are supplied, reviewing renders an ImportPreviewTree so the user can see what will commit before approving. The user approves (MIGRATION_APPROVED) and only then does commit run. Terminal runs persist the job row for provenance. Rebind the entity to a host-owned job entity via linkedEntity; target, connectionRef and reviewSlot are config knobs.
uses MigrationJob from "std/behaviors/std-migration-job"الكيان: MigrationJob (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
MigrationJobLifecycle | MIGRATION_START, FETCH_DOCUMENT, MIGRATION_STAGED, MIGRATION_DISCARDED, MIGRATION_APPROVED, MIGRATION_REJECTED, CLOSE, RESET, MIGRATION_RETRY | DOCUMENTS_LISTED, DOCUMENT_FETCHED, COMMITTED, MIGRATION_CALL_FAILED, MIGRATION_FETCHED, MIGRATION_DOCUMENT, MIGRATION_REVIEW_READY, MIGRATION_COMPLETED, MIGRATION_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
MigrationJobLifecycle | connectionRef | secret | Connection reference |
MigrationJobLifecycle | reviewSlot | slot | Review slot |
MigrationJobLifecycle | target | string | Target entity |
std-mod-queuemoderation queue for content review. Owns a ModQueueItem entity (one row per flagged target) and a single review trait that loads pending items, renders them in a data-grid with Approve / Reject / Escalate actions, and persists the reviewer's verdict back to the row.
uses ModQueue from "std/behaviors/std-mod-queue"الكيان: ModQueueItem (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
LoadingSpinner | لا شيء | لا شيء |
ErrorSpinner | لا شيء | لا شيء |
LoadingText | لا شيء | لا شيء |
ShieldAlertIcon | لا شيء | لا شيء |
ModQueueTitle | لا شيء | لا شيء |
CloseButton | لا شيء | لا شيء |
ModQueueDivider | لا شيء | لا شيء |
ErrorAlert | لا شيء | لا شيء |
ModQueueItemReview | OPEN | APPROVE, REJECT, ESCALATE, CLOSE, ModQueueItemLoaded, ModQueueItemLoadFailed, ModQueueItemReviewed, ModQueueItemReviewFailed |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ErrorSpinner | size | unknown | |
LoadingText | color | unknown | |
LoadingText | content | unknown | |
LoadingText | variant | unknown | |
ShieldAlertIcon | name | unknown | |
ModQueueTitle | content | unknown | |
ModQueueTitle | variant | unknown | |
CloseButton | action | unknown | |
CloseButton | icon | unknown | |
CloseButton | label | unknown | |
CloseButton | variant | unknown | |
ErrorAlert | message | unknown | |
ErrorAlert | variant | unknown | |
ModQueueItemReview | autoEscalateThreshold | number | Auto-escalate at |
ModQueueItemReview | enabled | boolean | Enable moderation queue |
ModQueueItemReview | itemActions | [ItemAction] | Row actions |
ModQueueItemReview | reviewSlot | slot | Review slot |
ModQueueItemReview | tableLook | string | Table look |
ModQueueItemReview | title | string | Section title |
ModQueueItemReview | viewerRole | string | Viewer's role |
std-notification-centerper-user notification preferences, web-push subscriptions, and the digest drain for suppressed notifications. Owns the two owner-scoped stores std-notify-on-event consults at dispatch time: NotificationPreference rows (per event key: mode instant/digest/off, channel override, per-user quiet hours) and PushSubscription rows (captured via the browser/push-subscribe flow — the shared service worker + PushManager subscription, persisted as flat endpoint/p256dh/auth credentials). The DigestDrain trait is the delivery half of every suppression std-notify-on-event records: an hourly cron tick scans NotificationRecord audit rows left undispatched for digest/quiet-hours reasons and at least minAgeHours old, delivers each by email (the digest channel), and marks it dispatched — the reminder-scheduler self-driving scan loop verbatim. Compose alongside std-notify-on-event: the listener suppresses and records, this atom captures subscriptions, edits preferences, and drains.
uses NotificationCenter from "std/behaviors/std-notification-center"الكيان: NotificationPreference (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
PushSubscriber | SUBSCRIBE_PUSH | PUSH_SUBSCRIBED, PUSH_SUBSCRIBE_FAILED, PUSH_SAVED, PUSH_SAVE_FAILED |
PreferenceEditorButtonSubscribe | لا شيء | لا شيء |
PreferenceEditorButtonDigest | لا شيء | لا شيء |
PreferenceEditor | OPEN_SUBSCRIBE, OPEN_DIGEST, SAVE_PREFERENCE, UPDATE_PREFERENCE, DELETE_PREFERENCE | PREFERENCE_SAVED, PREFERENCE_DELETED, PREFERENCE_SAVE_FAILED |
DigestDrain | لا شيء | DIGEST_ROWS_LOADED, DIGEST_ITEM_SENT, DIGEST_STEPPED, DIGEST_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
PreferenceEditorButtonSubscribe | action | unknown | |
PreferenceEditorButtonSubscribe | label | unknown | |
PreferenceEditorButtonDigest | action | unknown | |
PreferenceEditorButtonDigest | label | unknown | |
DigestDrain | digestEnabled | boolean | Deliver digests |
DigestDrain | digestSubject | string | Digest email subject |
DigestDrain | minAgeHours | number | Minimum age (hours) |
std-notification-preferencesper-person notification preference store plus a consultable gate. Owns NotificationPreference rows (one per person + event key: channel override in_app/email/push/slack/sms/webhook, mode instant/digest/off, quiet-hours window 'HH:MM-HH:MM' such as 22:00-07:00). The PreferencesManage trait is standard CRUD over the store (list / create / update / delete, persisted, success/failure cascade arms): a data-grid browse plus ModalRecordModal create/edit forms whose SAVE carries the full row payload (std-list daisy-chain idiom). The PreferenceGate trait is the consult half other notify traits call: emit CHECK_PREFERENCE { personId, eventKey } and the gate fetches the matching row (a row whose eventKey is blank applies to every event) and answers PREFERENCE_RESOLVED { personId, eventKey, channel, mode, suppressed } — suppressed is true only when the row's quietHours window covers the current hour; mode 'digest' rides on the verdict for the caller to defer. Default policy: no matching row — or a failed lookup — resolves fail-open to { channel: in_app, mode: instant, suppressed: false }; the absence of a preference never silences a notification.
uses NotificationPreferences from "std/behaviors/std-notification-preferences"الكيان: NotificationPreference (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
PreferencesManage | DO_CREATE, DO_UPDATE, RETRY | CREATE, EDIT, DELETE, PreferencesLoaded, PreferencesLoadFailed, PreferenceSaved, PreferenceSaveFailed, PreferenceDeleted |
PreferenceCreate | لا شيء | لا شيء |
PreferenceEdit | لا شيء | لا شيء |
PreferenceGate | CHECK_PREFERENCE | PREFERENCE_RESOLVED, PREFERENCE_ROWS_LOADED, PREFERENCE_CHECK_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
PreferencesManage | itemActions | [ItemAction] | Row actions |
PreferencesManage | itemClickEvent | event | Row click |
PreferencesManage | tableLook | string | Table look |
PreferencesManage | title | string | Section title |
PreferencesManage | viewerRole | string | Viewer's role |
PreferenceCreate | fields | unknown | |
PreferenceCreate | icon | unknown | |
PreferenceCreate | mode | unknown | |
PreferenceCreate | title | unknown | |
PreferenceEdit | fields | unknown | |
PreferenceEdit | icon | unknown | |
PreferenceEdit | mode | unknown | |
PreferenceEdit | title | unknown | |
PreferenceGate | eventKey | string | Event key |
std-notify-on-eventcross-orbital wiring atom. Subscribes to events from another orbital (e.g. CheckoutOrbital emits OrderPlaced, OrderRecordOrbital reacts via this atom) and dispatches a notification. Use when one orbital needs to react to or be notified about events that happen in another orbital — the wiring goes through this atom's EventOccurred listener which the molecule renames via traitOverrides.events to the upstream event name. Dispatch gates on guardOp: eq (default) does string-equality on triggerStatus against the upstream event's status field; gt/lt/gte/lte instead numerically compare guardField (read from the event's data payload) against guardValue, for threshold-crossing asks such as low-stock alerts. Resolves recipient from recipients (first entry; multi-recipient fan-out is a future extension), falling back to fallbackRecipient when set, or @user.id otherwise. Skips dispatch when the recipient is in suppressionList. Delivery consults std-notification-center data before dispatching: per-person NotificationPreference rows (matched on personId = recipient and eventKey = this listener's eventKey, blank = all) can mute (mode: off), defer to the digest drain (mode: digest), override the channel, or impose per-user quiet hours (a 'HH:MM-HH:MM' window, blank = none); the atom-level quietStartHour/quietEndHour window and the frequencyCapPerWeek rolling cap (counted against dispatched NotificationRecord audit rows for the same recipient + channel) suppress likewise. Every suppression persists an honest audit row (dispatched: false with the reason in error: quiet-hours / digest-deferred / muted-by-preference / frequency-cap / no-push-subscription) which std-notification-center's digest cycle drains later. Channels: in-app emits the notify toast; email/sms/webhook dispatch through call-service (email.send / twilio.sendSMS / webhook.send); push looks up the recipient's PushSubscription row (owned by std-notification-center) and dispatches web-push via push.send (pushTitle falls back to template; pushDeepLink/pushIcon optional). The audit row's dispatched flag is honest — true only once the service call succeeds.
uses NotifyOnEvent from "std/behaviors/std-notify-on-event"الكيان: NotificationRecord (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
NotifyOnEventListener | EventOccurred | NotificationDispatched, NOTIFY_PREFS_LOADED, NOTIFY_CAP_LOADED, NOTIFY_PUSH_SUBS, NOTIFY_EMAIL_SENT, NOTIFY_EMAIL_FAILED, NOTIFY_SMS_SENT, NOTIFY_SMS_FAILED, NOTIFY_WEBHOOK_SENT, NOTIFY_WEBHOOK_FAILED, NOTIFY_PUSH_SENT, NOTIFY_PUSH_FAILED, NOTIFY_LOOKUP_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
NotifyOnEventListener | coalesce | string | Collapse repeat notifications from one action? |
NotifyOnEventListener | coalesceKey | string | Which field makes two events distinct? |
NotifyOnEventListener | emailSubject | string | Email subject |
NotifyOnEventListener | eventKey | string | Event key for preferences |
NotifyOnEventListener | fallbackRecipient | string | Fallback recipient |
NotifyOnEventListener | frequencyCapPerWeek | number | Frequency cap (per week) |
NotifyOnEventListener | guardField | string | Guard field (numeric) |
NotifyOnEventListener | guardOp | string | Guard comparison |
NotifyOnEventListener | guardValue | number | Guard value (numeric) |
NotifyOnEventListener | notifyChannel | string | Channel |
NotifyOnEventListener | pushDeepLink | string | Push deep link |
NotifyOnEventListener | pushIcon | string | Push icon |
NotifyOnEventListener | pushTitle | string | Push title |
NotifyOnEventListener | quietEndHour | number | Quiet hours end |
NotifyOnEventListener | quietStartHour | number | Quiet hours start |
NotifyOnEventListener | recipients | [string] | Recipients |
NotifyOnEventListener | severity | string | Severity |
NotifyOnEventListener | suppressionList | [string] | Suppression list |
NotifyOnEventListener | template | string | Message template |
NotifyOnEventListener | triggerStatus | string | Trigger status |
NotifyOnEventListener | webhookSecret | string | Webhook secret |
NotifyOnEventListener | webhookUrl | string | Webhook URL |
std-page-openopens a URL in a new, focused browser tab and reports the tab. Wire OPEN to something the person does (a button or a row action), so a page only ever opens because they asked for it. Needs a host with the page service (a browser extension).
uses PageOpen from "std/behaviors/std-page-open"الكيان: PageOpenRecord (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
PageOpen | OPEN | TAB_OPENED, OPEN_CALL_FAILED, OPENED, OPEN_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
PageOpen | statusSlot | slot | Status slot |
std-page-searchruns one search on a site in a background tab: opens searchUrl with the query as the queryParam parameter, reads up to maxResults elements matching resultSelector (waiting up to waitMs for the results to appear), closes the tab, and reports RESULTS with the fields read from each. One search at a time: SEARCH is accepted again once RESULTS or SEARCH_FAILED is reported. It never clicks anything. Needs a host with the page service (a browser extension with access to the search pages).
uses PageSearch from "std/behaviors/std-page-search"الكيان: PageSearchRecord (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
PageSearch | SEARCH | TAB_OPENED, RESULTS_READ, SEARCH_CALL_FAILED, RESULTS, SEARCH_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
PageSearch | fields | Map<string,PageField> | Fields |
PageSearch | maxResults | number | Results per search |
PageSearch | queryParam | string | Query parameter |
PageSearch | resultSelector | string | Result selector |
PageSearch | resultsMatch | string | Results pages |
PageSearch | searchUrl | string | Search page |
PageSearch | statusSlot | slot | Status slot |
PageSearch | waitMs | number | Wait for results (ms) |
std-page-treatapplies a declared visual treatment to one element of a browser tab (hide, blur, highlight, or label it with text) or restores it, and reports which element it treated. TREAT takes the tab and element id std-page-watch reports. The treatments are a fixed, declared set: no arbitrary styles or scripts. Needs a host with the page service (a browser extension).
uses PageTreat from "std/behaviors/std-page-treat"الكيان: PageTreatRecord (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
PageTreat | TREAT | APPLIED, APPLY_FAILED, TREATED, TREAT_FAILED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
PageTreat | statusSlot | slot | Status slot |
std-page-watchwatches every browser tab whose URL matches match for elements matching itemSelector, and reports each element once as ITEM with the fields read from it, now and as the page changes. Needs a host with the page service (a browser extension, which asks for access to exactly the match pages). Each item carries its tab and element id; compose std-page-treat to hide, blur, highlight or label it.
uses PageWatch from "std/behaviors/std-page-watch"الكيان: PageWatchRecord (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
PageWatch | ITEM_FOUND | WATCHING, WATCH_FAILED, ITEM |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
PageWatch | fields | Map<string,PageField> | Fields |
PageWatch | itemEvent | event | Item input |
PageWatch | itemSelector | string | Item selector |
PageWatch | match | string | Pages |
PageWatch | statusSlot | slot | Status slot |
std-permission-matrixrole × module permission grant table / capability matrix admin surface. Use when a user voices that permissions must be managed per role and module (permission matrix, role permissions, capability matrix, permission grants, access matrix, who can see finance, hide margins, module-level permissions, admin permission screen, grant management, finance visibility by role, restrict modules by role). Persists PermissionGrant rows (workspaceId + role + module + capability flags canReadFinance / canSeeOthersHours / canSeeMargins) with full CRUD on an admin page mounted at /admin/permissions — create/edit forms are the std-modal ModalRecordModal substrate (the corpus's two-trait CRUD shape, mirroring std-list), persists live in a sibling coordinator trait, and adminRoles is ENFORCED at the persist boundary (a viewer whose role is not listed cannot fire a write, from the button or from the bus). Ships a query trait other traits consult event-wise: CHECK_GRANT { role, module } fetches the matching grant(s) and re-emits GRANT_RESOLVED { role, module, canReadFinance, canSeeOthersHours, canSeeMargins, found }. Grant SURFACE only — entity-layer @read/@update gate integration is a recorded core gap (gates are pure @entity/@user S-expressions and cannot consult another entity's rows), so enforcement stays with the consumer until that core lands.
uses PermissionMatrix from "std/behaviors/std-permission-matrix"الكيان: PermissionGrant (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
LoadingSpinner | لا شيء | لا شيء |
ErrorSpinner | لا شيء | لا شيء |
LoadingText | لا شيء | لا شيء |
ShieldCheckIcon | لا شيء | لا شيء |
PermissionMatrixTitle | لا شيء | لا شيء |
GrantDivider | لا شيء | لا شيء |
ErrorAlert | لا شيء | لا شيء |
PermissionMatrixAdmin | لا شيء | NEW, EDIT, DELETE, PermissionGrantLoaded, PermissionGrantLoadFailed |
PermissionGrantCreate | لا شيء | لا شيء |
PermissionGrantEdit | لا شيء | لا شيء |
PermissionGrantPersistor | DO_CREATE, DO_UPDATE, DO_DELETE | PermissionGrantSaved, PermissionGrantSaveFailed, PermissionGrantDeleted, PermissionGrantDeleteFailed |
PermissionGrantQuery | CHECK_GRANT | GRANT_RESOLVED, GrantCheckLoaded, GrantCheckFailed |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ErrorSpinner | size | unknown | |
LoadingText | color | unknown | |
LoadingText | content | unknown | |
LoadingText | variant | unknown | |
ShieldCheckIcon | name | unknown | |
PermissionMatrixTitle | content | unknown | |
PermissionMatrixTitle | variant | unknown | |
ErrorAlert | message | unknown | |
ErrorAlert | variant | unknown | |
PermissionMatrixAdmin | itemActions | [ItemAction] | Row actions |
PermissionMatrixAdmin | itemClickEvent | event | Row click |
PermissionMatrixAdmin | viewerRole | string | Viewer's role |
PermissionGrantCreate | fields | unknown | |
PermissionGrantCreate | icon | unknown | |
PermissionGrantCreate | mode | unknown | |
PermissionGrantCreate | title | unknown | |
PermissionGrantEdit | fields | unknown | |
PermissionGrantEdit | icon | unknown | |
PermissionGrantEdit | mode | unknown | |
PermissionGrantEdit | title | unknown | |
PermissionGrantPersistor | adminRoles | [string] | Who can manage grants? |
PermissionGrantQuery | enabled | boolean | Answer permission lookups |
std-rate-limiterstd-rate-limiter as a Function
uses RateLimiter from "std/behaviors/std-rate-limiter"الكيان: RateBucket (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
ShieldIcon | لا شيء | لا شيء |
RateBucketTitle | لا شيء | لا شيء |
OpenStatusDot | لا شيء | لا شيء |
ThrottledStatusDot | لا شيء | لا شيء |
RateLimitAlert | لا شيء | لا شيء |
RequestsStat | لا شيء | لا شيء |
WindowStat | لا شيء | لا شيء |
CountMeter | لا شيء | لا شيء |
CountProgressBar | لا شيء | لا شيء |
RequestButton | لا شيء | لا شيء |
ResetButton | لا شيء | لا شيء |
ResetPrimaryButton | لا شيء | لا شيء |
RateBucketDivider | لا شيء | لا شيء |
StatsGrid | لا شيء | لا شيء |
RateBucketRateLimiter | REQUEST, THROTTLE, RESET, CONFIGURE | WINDOW_ELAPSED |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ShieldIcon | name | unknown | |
RateBucketTitle | content | unknown | |
RateBucketTitle | variant | unknown | |
OpenStatusDot | label | unknown | |
OpenStatusDot | pulse | unknown | |
OpenStatusDot | status | unknown | |
ThrottledStatusDot | label | unknown | |
ThrottledStatusDot | pulse | unknown | |
ThrottledStatusDot | status | unknown | |
RateLimitAlert | message | unknown | |
RateLimitAlert | variant | unknown | |
RequestsStat | label | unknown | |
RequestsStat | look | unknown | |
RequestsStat | value | unknown | |
WindowStat | label | unknown | |
WindowStat | look | unknown | |
WindowStat | value | unknown | |
CountMeter | max | unknown | |
CountMeter | min | unknown | |
CountMeter | value | unknown | |
CountProgressBar | max | unknown | |
CountProgressBar | showPercentage | unknown | |
CountProgressBar | value | unknown | |
RequestButton | action | unknown | |
RequestButton | icon | unknown | |
RequestButton | label | unknown | |
RequestButton | variant | unknown | |
ResetButton | action | unknown | |
ResetButton | icon | unknown | |
ResetButton | label | unknown | |
ResetButton | variant | unknown | |
ResetPrimaryButton | action | unknown | |
ResetPrimaryButton | icon | unknown | |
ResetPrimaryButton | label | unknown | |
ResetPrimaryButton | variant | unknown | |
StatsGrid | children | unknown | |
StatsGrid | cols | unknown | |
RateBucketRateLimiter | enabled | boolean | Enabled |
RateBucketRateLimiter | requestsPerMinute | number | Requests per minute |
RateBucketRateLimiter | statLook | string | Stat display look |
std-reminder-schedulerdeadline reminders for a target entity. A periodic tick scans the target for records whose dateField deadline (a ms-epoch number or an ISO datetime string) is within offsetHours of now and that have not been reminded yet, and emits ReminderDue for each — every matching record, via a self-driving scan loop. direction picks which side of now the scan matches: 'future' (default) fires for deadlines up to offsetHours ahead; 'past' fires once a record's date is at least offsetHours behind now. Marks each record remindedAt so it isn't reminded twice — and only when the record actually matched the scan, so records outside the window stay eligible for later passes. Compose alongside std-notify-on-event to deliver the reminder.
uses ReminderScheduler from "std/behaviors/std-reminder-scheduler"الكيان: ReminderRunLog (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
ReminderScheduler | لا شيء | ReminderDue, ScanRecordsLoaded, ScanFailed, ReminderStepped |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ReminderScheduler | dateField | string | Which date field is the deadline? |
ReminderScheduler | direction | string | Scan which side of now? |
ReminderScheduler | enabled | boolean | Send deadline reminders |
ReminderScheduler | offsetHours | number | How many hours before the deadline to remind? |
ReminderScheduler | severity | string | How urgent are the reminders? |
ReminderScheduler | targetEntity | entity | Target entity |
ReminderScheduler | template | string | What should the reminder message say? |
std-review-cyclerevise-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.
uses ReviewCycle from "std/behaviors/std-review-cycle"الكيان: ReviewItem (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
ReviewCycle | ReviewSubmitted, ReviewChangesRequested, ReviewApproved | ReviewLogged, ReviewLogFailed, ReviewRequested, ReviewDecided |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
ReviewCycle | enabled | boolean | Run the review workflow? |
ReviewCycle | requireSeparateApproval | boolean | Require approval to be a separate action? |
std-row-access-controlrow-level access control gate / ownership filter / role-based row visibility. Use when a user voices that only certain users should see or edit certain records (only the owner can edit, private to owner, owner-only visibility, only see your own records, role-based visibility, admin-only access, visible to admins only, restricted to role, permission gate, ownership scoping, hide from other users, only show mine). Listens for RowsLoaded (rename via traitOverrides.events to the consumer's load event), filters @payload.data by @user.id (when ownerField is set) and/or @user.role (when visibleRoles is non-empty), re-emits RowsFiltered for downstream consumers (rename to wire into the UI atom's listen). Composable via extraTraits to interpose between a data fetch and a list/grid UI.
uses RowAccessControl from "std/behaviors/std-row-access-control"الكيان: RowAccessGateView (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
RowAccessGate | RowsLoaded | RowsFiltered |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
RowAccessGate | enabled | boolean | Restrict who sees records |
RowAccessGate | ownerField | string | Owner field |
RowAccessGate | visibleRoles | [string] | Allowed roles |
std-status-lifecyclethe host renders the badge and buttons.
uses StatusLifecycle from "std/behaviors/std-status-lifecycle"الكيان: StatusRecord (persistent)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
StatusMachine | ChangeStatusRequested | StatusChanged, StatusPersisted, StatusChangeFailed |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
StatusMachine | enabled | boolean | Enforce status lifecycle rules? |
StatusMachine | states | [string] | What are the possible statuses? |
StatusMachine | statusField | string | Which field holds the status? |
StatusMachine | targetEntity | entity | Target entity |
StatusMachine | transitions | [TransitionSpec] | Which status moves are allowed? |
std-status-lifecycle-controlinfra molecule pairing std-status-lifecycle's StatusMachine, which deliberately surfaces no UI of its own. Pure presentational: shows the current status and one button per legal next move (config.transitions filtered on config.currentStatus), emitting ChangeStatusRequested with the picked move's id/from/to on click. Driven entirely by config (currentStatus/recordId/transitions) rather than a bound entity, so a host embeds it inline at the record it's viewing (currentStatus={@entity.status} recordId={@entity.id} transitions matching the paired StatusMachine's own config.transitions) and points that StatusMachine's listens at this trait's emit (<Composer>.ChangeStatusRequested -> ChangeStatusRequested) instead of at a dead declared-only event.
uses StatusLifecycleControl from "std/behaviors/std-status-lifecycle-control"الكيان: StatusControlItem (runtime)
السمات
| السمة | الأحداث | يبثّ |
|---|---|---|
StatusLifecycleControl | لا شيء | ChangeStatusRequested, TRANSITION_REQUESTED |
InlineBadgeRender1 | لا شيء | لا شيء |
مفاتيح الإعداد
| السمة | المفتاح | النوع | التسمية |
|---|---|---|---|
StatusLifecycleControl | currentStatus | string | Current status |
StatusLifecycleControl | recordId | string | Record id |
StatusLifecycleControl | transitions | [TransitionSpec] | Which status moves are allowed? |
InlineBadgeRender1 | amount | number | Amount |
InlineBadgeRender1 | ariaBusy | boolean | Aria-busy |
InlineBadgeRender1 | ariaCurrent | string | Aria-current |
InlineBadgeRender1 | ariaDescribedby | string | Aria-describedby |
InlineBadgeRender1 | ariaExpanded | boolean | Aria-expanded |
InlineBadgeRender1 | ariaHidden | boolean | Aria-hidden |
InlineBadgeRender1 | ariaLabel | string | Aria-label |
InlineBadgeRender1 | ariaLabelledby | string | Aria-labelledby |
InlineBadgeRender1 | ariaLive | string | Aria-live |
InlineBadgeRender1 | ariaPressed | string | Aria-pressed |
InlineBadgeRender1 | ariaSelected | boolean | Aria-selected |
InlineBadgeRender1 | className | string | Class Name |
InlineBadgeRender1 | dir | string | Dir |
InlineBadgeRender1 | enter | string | Enter |
InlineBadgeRender1 | enterDelay | number | Enter Delay |
InlineBadgeRender1 | icon | icon | Icon |
InlineBadgeRender1 | iconAsset | BadgeIconAsset | Icon Asset |
InlineBadgeRender1 | label | scalar | Label |
InlineBadgeRender1 | lang | string | Lang |
InlineBadgeRender1 | onRemove | event | On Remove |
InlineBadgeRender1 | removeLabel | string | Remove Label |
InlineBadgeRender1 | role | string | Role |
InlineBadgeRender1 | size | string | Size |
InlineBadgeRender1 | skeleton | string | Skeleton |
InlineBadgeRender1 | tabIndex | number | Tab Index |
InlineBadgeRender1 | variant | string | Variant |