@almadar/std 16.210.0 → 16.212.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +5 -2
- package/behaviors/lolo/infra/atoms/std-cache-aside.lolo +6 -0
- package/behaviors/lolo/infra/atoms/std-calendar-sync.lolo +8 -5
- package/behaviors/lolo/infra/atoms/std-cascade-on-delete.lolo +8 -1
- package/behaviors/lolo/infra/atoms/std-circuit-breaker.lolo +5 -3
- package/behaviors/lolo/infra/atoms/std-cross-reference.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-data-erasure.lolo +3 -0
- package/behaviors/lolo/infra/atoms/std-lifecycle.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-migration-job.lolo +12 -0
- package/behaviors/lolo/infra/atoms/std-mod-queue.lolo +1 -0
- package/behaviors/lolo/infra/atoms/std-notification-center.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +5 -0
- package/behaviors/lolo/infra/atoms/std-reminder-scheduler.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-status-lifecycle.lolo +1 -0
- package/behaviors/lolo/ml/atoms/std-ml-classify.lolo +1 -0
- package/behaviors/lolo/ml/atoms/std-ml-infer.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-board.lolo +6 -0
- package/behaviors/lolo/ui/core/atoms/std-browse.lolo +10 -1
- package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +6 -1
- package/behaviors/lolo/ui/core/atoms/std-confirmation.lolo +2 -0
- package/behaviors/lolo/ui/core/atoms/std-esign-request.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +2 -0
- package/behaviors/lolo/ui/core/atoms/std-gallery.lolo +8 -1
- package/behaviors/lolo/ui/core/atoms/std-graphs.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-list.lolo +8 -1
- package/behaviors/lolo/ui/core/atoms/std-modal.lolo +3 -1
- package/behaviors/lolo/ui/core/atoms/std-selection.lolo +8 -1
- package/behaviors/lolo/ui/core/atoms/std-stats.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-step-flow.lolo +4 -3
- package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +17 -4
- package/behaviors/lolo/ui/core/atoms/std-thread.lolo +33 -30
- package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-wizard.lolo +36 -0
- package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-button.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-checkbox.lolo +22 -2
- package/behaviors/lolo/ui/core/atoms/ui-game-icon.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-radio.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-range-slider.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-select.lolo +6 -2
- package/behaviors/lolo/ui/core/atoms/ui-switch.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-text-highlight.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +3 -1
- package/behaviors/lolo/ui/core/atoms/ui-time-slot-cell.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-code-block.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-command-palette.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-date-range-picker.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-filter-group.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-floating-toolbar.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-number-stepper.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-pagination.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-popover.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-relation-select.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-rich-text-editor.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-search-input.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-sidebar.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-star-rating.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-wizard-navigation.lolo +2 -2
- package/behaviors/lolo/ui/core/organisms/ui-split-pane.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +6 -0
- package/behaviors/lolo/ui/game/atoms/ui-action-palette.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-action-tile.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-dialogue-bubble.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-draw-fx-layer.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-draw-skinned-mesh.lolo +131 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-sprite-layer.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-game-audio-toggle.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +5 -5
- package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-health-bar.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-score-display.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-sequence-bar.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +5 -5
- package/behaviors/lolo/ui/game/organisms/std-arcade-board-3d.lolo +10 -10
- package/behaviors/lolo/ui/game/organisms/std-crew-board-2d.lolo +10 -10
- package/behaviors/lolo/ui/game/organisms/std-dungeon-board-2d.lolo +36 -36
- package/behaviors/lolo/ui/game/organisms/std-market-board-3d.lolo +36 -36
- package/behaviors/lolo/ui/game/organisms/std-objective-board-3d.lolo +34 -34
- package/behaviors/lolo/ui/game/organisms/std-survival-board-3d.lolo +10 -10
- package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +12 -12
- package/behaviors/lolo/ui/game/organisms/std-tactics-board-3d.lolo +12 -12
- package/behaviors/lolo/ui/game/organisms/std-worldmap-board-2d.lolo +20 -20
- package/behaviors/registry/infra/atoms/std-approval-gate.orb +76 -27
- package/behaviors/registry/infra/atoms/std-cache-aside.orb +76 -32
- package/behaviors/registry/infra/atoms/std-calendar-sync.orb +51 -0
- package/behaviors/registry/infra/atoms/std-cascade-on-delete.orb +48 -0
- package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +43 -14
- package/behaviors/registry/infra/atoms/std-cross-reference.orb +41 -15
- package/behaviors/registry/infra/atoms/std-data-erasure.orb +52 -0
- package/behaviors/registry/infra/atoms/std-lifecycle.orb +36 -0
- package/behaviors/registry/infra/atoms/std-migration-job.orb +108 -0
- package/behaviors/registry/infra/atoms/std-mod-queue.orb +20 -0
- package/behaviors/registry/infra/atoms/std-notification-center.orb +88 -24
- package/behaviors/registry/infra/atoms/std-notify-on-event.orb +82 -6
- package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +36 -0
- package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +20 -0
- package/behaviors/registry/ml/atoms/std-ml-classify.orb +18 -0
- package/behaviors/registry/ml/atoms/std-ml-infer.orb +18 -0
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +20 -0
- package/behaviors/registry/ui/core/atoms/std-board.orb +58 -0
- package/behaviors/registry/ui/core/atoms/std-browse.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-calendar.orb +9 -1
- package/behaviors/registry/ui/core/atoms/std-confirmation.orb +44 -18
- package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +44 -18
- package/behaviors/registry/ui/core/atoms/std-esign-request.orb +19 -8
- package/behaviors/registry/ui/core/atoms/std-event-log.orb +26 -0
- package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +20 -9
- package/behaviors/registry/ui/core/atoms/std-gallery.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-graphs.orb +1 -0
- package/behaviors/registry/ui/core/atoms/std-list.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-modal.orb +52 -24
- package/behaviors/registry/ui/core/atoms/std-selection.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-stats.orb +1 -0
- package/behaviors/registry/ui/core/atoms/std-step-flow.orb +0 -3
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +20 -0
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +58 -9
- package/behaviors/registry/ui/core/atoms/std-thread.orb +134 -40
- package/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -0
- package/behaviors/registry/ui/core/atoms/std-wizard.orb +77 -0
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +4 -1
- package/behaviors/registry/ui/core/atoms/ui-button.orb +4 -1
- package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +78 -2
- package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +4 -1
- package/behaviors/registry/ui/core/atoms/ui-radio.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-range-slider.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-select.orb +28 -0
- package/behaviors/registry/ui/core/atoms/ui-switch.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-text-highlight.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-textarea.orb +14 -0
- package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-code-block.orb +2 -0
- package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +2 -28
- package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +2 -0
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +2 -0
- package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +1 -20
- package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +1 -14
- package/behaviors/registry/ui/core/molecules/ui-menu.orb +1 -24
- package/behaviors/registry/ui/core/molecules/ui-number-stepper.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-pagination.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-popover.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-rich-text-editor.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-search-input.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-star-rating.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-tabs.orb +8 -2
- package/behaviors/registry/ui/core/molecules/ui-wizard-navigation.orb +2 -0
- package/behaviors/registry/ui/core/organisms/ui-split-pane.orb +1 -0
- package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +44 -0
- package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-control-button.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +697 -0
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +20 -5
- package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-score-display.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +9 -2
- package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +10 -30
- package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +10 -30
- package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +36 -108
- package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +36 -108
- package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +34 -102
- package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +10 -30
- package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +12 -36
- package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +12 -36
- package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +20 -60
- package/dist/behaviors/exports-reader.js +3136 -2291
- package/dist/behaviors/functions/index.d.ts +148 -40
- package/dist/behaviors/functions/index.js +3134 -2290
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +3137 -2292
- package/dist/behaviors/query.js +3136 -2291
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +25 -21
- package/dist/behaviors-registry.json +2296 -1209
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3137 -2292
- package/dist/knob-embeddings.hash.json +3 -3
- package/dist/knob-embeddings.json +1 -1
- package/dist/registry/factory-signatures.json +1 -1
- package/package.json +2 -2
|
@@ -342,6 +342,22 @@ orbital TagTaxonomyOrbital {
|
|
|
342
342
|
type: stack
|
|
343
343
|
})
|
|
344
344
|
(emit LEVEL_RELOAD { tagId: @entity.id })
|
|
345
|
+
CLOSE -> loading
|
|
346
|
+
(render-ui modal null)
|
|
347
|
+
(render-ui main {
|
|
348
|
+
align: center
|
|
349
|
+
children: [{ type: spinner }, {
|
|
350
|
+
color: muted
|
|
351
|
+
content: "Loading…"
|
|
352
|
+
type: typography
|
|
353
|
+
variant: caption
|
|
354
|
+
}]
|
|
355
|
+
className: py-12
|
|
356
|
+
direction: vertical
|
|
357
|
+
gap: md
|
|
358
|
+
type: stack
|
|
359
|
+
})
|
|
360
|
+
(emit LEVEL_RELOAD { tagId: @entity.id })
|
|
345
361
|
;; Refetch the level the new tag landed on — its own parentId names it.
|
|
346
362
|
TagCreated -> loading
|
|
347
363
|
(render-ui modal null)
|
|
@@ -537,10 +553,7 @@ orbital TagTaxonomyOrbital {
|
|
|
537
553
|
@description "Signals a tag has been chosen for further exploration."
|
|
538
554
|
@synonyms "chosen, picked, activated, highlighted"
|
|
539
555
|
@tier "domain"
|
|
540
|
-
NEW_TAG
|
|
541
|
-
@description "Opens the create-tag form (rendered only when allowEdit is on); the creation lands at the level currently open."
|
|
542
|
-
@synonyms "add tag, create category, new category"
|
|
543
|
-
@tier "domain"
|
|
556
|
+
;; NEW_TAG is self-consumed via listens, never an external emit.
|
|
544
557
|
COMMIT_TAG {
|
|
545
558
|
data : TagCommit
|
|
546
559
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
app std-thread "1.3.0"
|
|
2
|
-
"std-thread — forum-style nested replies with collapse + flat-mode toggle. Owns ThreadPost (persistent). flat:true covers 1:1 linear inquiry threads; flat:false renders forum-style nested. INIT fetches, scoped by @config.threadRootId when set (blank = every root, the default). REPLY persists a child post under @payload.parentId, stamped with the real @user identity. A consumer that mounts this as page comments forwards its own document-opened signal to SET_THREAD_ROOT { rootId }, which stamps the
|
|
2
|
+
"std-thread — forum-style nested replies with collapse + flat-mode toggle. Owns ThreadPost (persistent). flat:true covers 1:1 linear inquiry threads; flat:false renders forum-style nested. INIT fetches, scoped by @config.threadRootId when set (blank = every root, the default). REPLY persists a child post under @payload.parentId, stamped with the real @user identity. A consumer that mounts this as page comments forwards its own document-opened signal to SET_THREAD_ROOT { rootId }, which stamps @entity.replyRootId (scratch — the persisted threadRootId column is written only by the reply persist create) and refetches filtered by the payload; a plain INIT re-entry now also falls back through @entity.replyRootId before @config.threadRootId, so it stays scoped to the last SET_THREAD_ROOT instead of re-widening — only the after-create/after-select refetches still scope directly off their own event payload. Layer 3 variants override `bodyContent` to deliver chat-bubble, email-threaded, or linear-comments UX while inheriting the same trait, state machine, emits, and listens. A non-empty sectionTitle switches the default bodyContent into titled-comments mode: header + post list + a standalone composer button (without it an empty thread has no REPLY emitter at all — the affordance only existed per-row)."
|
|
3
3
|
orbital ThreadPostOrbital {
|
|
4
4
|
;; Forward relation: array of child ThreadPost IDs whose parentId === this.id.
|
|
5
5
|
;; Lowers to `type: "relation", cardinality: "many"` (orbital-lolo lower.rs).
|
|
@@ -40,7 +40,10 @@ orbital ThreadPostOrbital {
|
|
|
40
40
|
voteCount : number @description "The number of votes associated with this item." @synonyms "votes, rating, score" = 0
|
|
41
41
|
replyCount : number @description "The number of replies to this post." @synonyms "count, number of replies, child posts" = 0
|
|
42
42
|
replies : [ThreadPost] @description "A list of child ThreadPost entities." @synonyms "children, descendants, sub-posts"
|
|
43
|
-
focusedRow : Map string scalar @description "The currently selected or active row within the thread." @synonyms "selection, active, current" = {}
|
|
43
|
+
focusedRow : Map string scalar @intrinsic @description "The currently selected or active row within the thread." @synonyms "selection, active, current" = {}
|
|
44
|
+
replyDraft : string @intrinsic @description "Reply text being composed." = ""
|
|
45
|
+
replyParentId : string @intrinsic @description "Post the reply being composed answers." = ""
|
|
46
|
+
replyRootId : string @intrinsic @description "Thread root the reply being composed belongs to." = ""
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
trait ThreadPostBrowse -> @rebindable ThreadPost [interaction, collection] {
|
|
@@ -50,7 +53,7 @@ orbital ThreadPostOrbital {
|
|
|
50
53
|
INIT -> loading
|
|
51
54
|
(fetch ThreadPost {
|
|
52
55
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
53
|
-
filter: (or ["=", @config.threadRootId, ""] ["=", (object/get @entity threadRootId), @config.threadRootId])
|
|
56
|
+
filter: (or ["=", (str/default @entity.replyRootId @config.threadRootId), ""] ["=", (object/get @entity threadRootId), (str/default @entity.replyRootId @config.threadRootId)])
|
|
54
57
|
include: (replies)
|
|
55
58
|
})
|
|
56
59
|
(render-ui main { size: sm, type: spinner })
|
|
@@ -63,7 +66,7 @@ orbital ThreadPostOrbital {
|
|
|
63
66
|
variant: error
|
|
64
67
|
})
|
|
65
68
|
SET_THREAD_ROOT -> loading
|
|
66
|
-
(set @entity.
|
|
69
|
+
(set @entity.replyRootId ?rootId)
|
|
67
70
|
(fetch ThreadPost {
|
|
68
71
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
69
72
|
filter: (or ["=", ?rootId, ""] ["=", (object/get @entity threadRootId), ?rootId])
|
|
@@ -76,7 +79,7 @@ orbital ThreadPostOrbital {
|
|
|
76
79
|
INIT -> loading
|
|
77
80
|
(fetch ThreadPost {
|
|
78
81
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
79
|
-
filter: (or ["=", @config.threadRootId, ""] ["=", (object/get @entity threadRootId), @config.threadRootId])
|
|
82
|
+
filter: (or ["=", (str/default @entity.replyRootId @config.threadRootId), ""] ["=", (object/get @entity threadRootId), (str/default @entity.replyRootId @config.threadRootId)])
|
|
80
83
|
include: (replies)
|
|
81
84
|
})
|
|
82
85
|
(render-ui main { size: sm, type: spinner })
|
|
@@ -91,14 +94,14 @@ orbital ThreadPostOrbital {
|
|
|
91
94
|
authorName: @user.name
|
|
92
95
|
content: ?content
|
|
93
96
|
parentId: (str/default ?parentNodeId ?parentId)
|
|
94
|
-
threadRootId: (str/default ?parentNodeId (str/default @entity.
|
|
97
|
+
threadRootId: (str/default ?parentNodeId (str/default @entity.replyRootId (str/default @config.threadRootId root)))
|
|
95
98
|
} {
|
|
96
99
|
emit: { failure: ThreadPostCreateFailed, success: ThreadPostCreated }
|
|
97
100
|
})
|
|
98
101
|
;; Reply with no text yet (e.g. an email "Reply" button) opens the composer.
|
|
99
102
|
REPLY -> replying when ["=", (str/default ?content ""), ""]
|
|
100
|
-
(set @entity.
|
|
101
|
-
(set @entity.
|
|
103
|
+
(set @entity.replyParentId (str/default ?parentNodeId ?parentId))
|
|
104
|
+
(set @entity.replyRootId (str/default ?parentNodeId (str/default @entity.replyRootId (str/default @config.threadRootId root))))
|
|
102
105
|
(render-ui main {
|
|
103
106
|
children: [{
|
|
104
107
|
content: "Write a reply"
|
|
@@ -138,8 +141,8 @@ orbital ThreadPostOrbital {
|
|
|
138
141
|
;; ?row.threadRootId; ThreadPostCreated's payload is the created row
|
|
139
142
|
;; itself (see the type alias above), no `row` wrapper exists.
|
|
140
143
|
ThreadPostCreated -> browsing
|
|
141
|
-
(set @entity.
|
|
142
|
-
(set @entity.
|
|
144
|
+
(set @entity.replyDraft "")
|
|
145
|
+
(set @entity.replyParentId "")
|
|
143
146
|
(fetch ThreadPost {
|
|
144
147
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
145
148
|
filter: (or ["=", ?threadRootId, ""] ["=", (object/get @entity threadRootId), ?threadRootId])
|
|
@@ -159,20 +162,20 @@ orbital ThreadPostOrbital {
|
|
|
159
162
|
;; submit button) fire the composer triad while the trait sits in
|
|
160
163
|
;; browsing — without these arms every such click is swallowed.
|
|
161
164
|
EDIT_REPLY -> browsing
|
|
162
|
-
(set @entity.
|
|
163
|
-
SUBMIT_REPLY -> browsing when (not ["=", (str/default @entity.
|
|
165
|
+
(set @entity.replyDraft ?value)
|
|
166
|
+
SUBMIT_REPLY -> browsing when (not ["=", (str/default @entity.replyDraft ""), ""])
|
|
164
167
|
(persist create ThreadPost {
|
|
165
168
|
authorId: @user.id
|
|
166
169
|
authorName: @user.name
|
|
167
|
-
content: @entity.
|
|
168
|
-
parentId: (str/default @entity.
|
|
169
|
-
threadRootId: (str/default @entity.
|
|
170
|
+
content: @entity.replyDraft
|
|
171
|
+
parentId: (str/default @entity.replyParentId "")
|
|
172
|
+
threadRootId: (str/default @entity.replyRootId (str/default @config.threadRootId root))
|
|
170
173
|
} {
|
|
171
174
|
emit: { failure: ThreadPostCreateFailed, success: ThreadPostCreated }
|
|
172
175
|
})
|
|
173
176
|
CANCEL_REPLY -> browsing
|
|
174
|
-
(set @entity.
|
|
175
|
-
(set @entity.
|
|
177
|
+
(set @entity.replyDraft "")
|
|
178
|
+
(set @entity.replyParentId "")
|
|
176
179
|
;; replying.SUBMIT_REPLY -> browsing lands here before the persist
|
|
177
180
|
;; resolves; a failure must be caught here too, not just replying's twin arm.
|
|
178
181
|
ThreadPostCreateFailed -> browsing
|
|
@@ -190,7 +193,7 @@ orbital ThreadPostOrbital {
|
|
|
190
193
|
variant: error
|
|
191
194
|
})
|
|
192
195
|
SET_THREAD_ROOT -> loading
|
|
193
|
-
(set @entity.
|
|
196
|
+
(set @entity.replyRootId ?rootId)
|
|
194
197
|
(fetch ThreadPost {
|
|
195
198
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
196
199
|
filter: (or ["=", ?rootId, ""] ["=", (object/get @entity threadRootId), ?rootId])
|
|
@@ -201,25 +204,25 @@ orbital ThreadPostOrbital {
|
|
|
201
204
|
|
|
202
205
|
state replying {
|
|
203
206
|
EDIT_REPLY -> replying
|
|
204
|
-
(set @entity.
|
|
205
|
-
SUBMIT_REPLY -> browsing when (not ["=", (str/default @entity.
|
|
207
|
+
(set @entity.replyDraft ?value)
|
|
208
|
+
SUBMIT_REPLY -> browsing when (not ["=", (str/default @entity.replyDraft ""), ""])
|
|
206
209
|
(persist create ThreadPost {
|
|
207
210
|
authorId: @user.id
|
|
208
211
|
authorName: @user.name
|
|
209
|
-
content: @entity.
|
|
210
|
-
parentId: (str/default @entity.
|
|
211
|
-
threadRootId: (str/default @entity.
|
|
212
|
+
content: @entity.replyDraft
|
|
213
|
+
parentId: (str/default @entity.replyParentId "")
|
|
214
|
+
threadRootId: (str/default @entity.replyRootId (str/default @config.threadRootId root))
|
|
212
215
|
} {
|
|
213
216
|
emit: { failure: ThreadPostCreateFailed, success: ThreadPostCreated }
|
|
214
217
|
})
|
|
215
218
|
CANCEL_REPLY -> browsing
|
|
216
|
-
(set @entity.
|
|
217
|
-
(set @entity.
|
|
219
|
+
(set @entity.replyDraft "")
|
|
220
|
+
(set @entity.replyParentId "")
|
|
218
221
|
;; Scoped to the row just created (?threadRootId, flat) — see the twin
|
|
219
222
|
;; arm in `browsing` for why.
|
|
220
223
|
ThreadPostCreated -> browsing
|
|
221
|
-
(set @entity.
|
|
222
|
-
(set @entity.
|
|
224
|
+
(set @entity.replyDraft "")
|
|
225
|
+
(set @entity.replyParentId "")
|
|
223
226
|
(fetch ThreadPost {
|
|
224
227
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
225
228
|
filter: (or ["=", ?threadRootId, ""] ["=", (object/get @entity threadRootId), ?threadRootId])
|
|
@@ -232,7 +235,7 @@ orbital ThreadPostOrbital {
|
|
|
232
235
|
variant: error
|
|
233
236
|
})
|
|
234
237
|
SET_THREAD_ROOT -> loading
|
|
235
|
-
(set @entity.
|
|
238
|
+
(set @entity.replyRootId ?rootId)
|
|
236
239
|
(fetch ThreadPost {
|
|
237
240
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
238
241
|
filter: (or ["=", ?rootId, ""] ["=", (object/get @entity threadRootId), ?rootId])
|
|
@@ -245,12 +248,12 @@ orbital ThreadPostOrbital {
|
|
|
245
248
|
INIT -> loading
|
|
246
249
|
(fetch ThreadPost {
|
|
247
250
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
248
|
-
filter: (or ["=", @config.threadRootId, ""] ["=", (object/get @entity threadRootId), @config.threadRootId])
|
|
251
|
+
filter: (or ["=", (str/default @entity.replyRootId @config.threadRootId), ""] ["=", (object/get @entity threadRootId), (str/default @entity.replyRootId @config.threadRootId)])
|
|
249
252
|
include: (replies)
|
|
250
253
|
})
|
|
251
254
|
(render-ui main { size: sm, type: spinner })
|
|
252
255
|
SET_THREAD_ROOT -> loading
|
|
253
|
-
(set @entity.
|
|
256
|
+
(set @entity.replyRootId ?rootId)
|
|
254
257
|
(fetch ThreadPost {
|
|
255
258
|
emit: { failure: ThreadPostLoadFailed, success: ThreadPostLoaded }
|
|
256
259
|
filter: (or ["=", ?rootId, ""] ["=", (object/get @entity threadRootId), ?rootId])
|
|
@@ -18,7 +18,7 @@ orbital RevisionOrbital {
|
|
|
18
18
|
authorName : string @description "The name of the user who made the change." @synonyms "user, contributor, owner"
|
|
19
19
|
content : string @description "The snapshotted body of the revision — plain text or the rich-text HTML a document-look record carries. Rollback hands the whole row back to the host, which restores content onto the source document." @synonyms "text, body, data, value"
|
|
20
20
|
summary : string @description "A brief explanation of the revision's changes." @synonyms "description, note, comment, explanation"
|
|
21
|
-
searchTerm : string @description "The current search query the user submitted." @synonyms "query, term, q" = ""
|
|
21
|
+
searchTerm : string @intrinsic @description "The current search query the user submitted." @synonyms "query, term, q" = ""
|
|
22
22
|
createdAt : string
|
|
23
23
|
scopeKey : string @intrinsic @description "The parent document id the feed is currently scoped to, set by SHOW_HISTORY. Empty when browsing the unfiltered global feed." @synonyms "scope, filter key, document scope" = ""
|
|
24
24
|
}
|
|
@@ -444,6 +444,42 @@ orbital WizardOrbital {
|
|
|
444
444
|
}
|
|
445
445
|
|
|
446
446
|
state completed {
|
|
447
|
+
WizardSaved -> completed
|
|
448
|
+
(render-ui main {
|
|
449
|
+
align: center
|
|
450
|
+
children: [{
|
|
451
|
+
name: check-circle
|
|
452
|
+
size: lg
|
|
453
|
+
type: icon
|
|
454
|
+
}, {
|
|
455
|
+
align: center
|
|
456
|
+
content: Complete
|
|
457
|
+
type: typography
|
|
458
|
+
variant: h2
|
|
459
|
+
}, {
|
|
460
|
+
align: center
|
|
461
|
+
color: muted
|
|
462
|
+
content: @entity.completionMessage
|
|
463
|
+
type: typography
|
|
464
|
+
variant: body
|
|
465
|
+
}, {
|
|
466
|
+
allowNavigation: false
|
|
467
|
+
currentStep: @entity.totalSteps
|
|
468
|
+
steps: @entity.wizardSteps
|
|
469
|
+
type: wizard-progress
|
|
470
|
+
}, {
|
|
471
|
+
action: RESTART
|
|
472
|
+
icon: rotate-ccw
|
|
473
|
+
label: "Start a new wizard"
|
|
474
|
+
type: button
|
|
475
|
+
variant: secondary
|
|
476
|
+
}]
|
|
477
|
+
direction: vertical
|
|
478
|
+
gap: lg
|
|
479
|
+
type: stack
|
|
480
|
+
})
|
|
481
|
+
WizardSaveFailed -> completed
|
|
482
|
+
(notify error (str/concat "Couldn't save the wizard — " ?error))
|
|
447
483
|
RESTART -> loading
|
|
448
484
|
(set @entity.currentStepIndex 0)
|
|
449
485
|
(set @entity.completionMessage "")
|
|
@@ -9,7 +9,7 @@ orbital BadgeOrbital {
|
|
|
9
9
|
style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
|
|
10
10
|
variant : string
|
|
11
11
|
dimension : "2d" | "3d"
|
|
12
|
-
aspect : "1:1" | "16:9" | "5:7" | "8:1"
|
|
12
|
+
aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
|
|
13
13
|
atlas : asset
|
|
14
14
|
sprite : string
|
|
15
15
|
name : string
|
|
@@ -9,7 +9,7 @@ orbital ButtonOrbital {
|
|
|
9
9
|
style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
|
|
10
10
|
variant : string
|
|
11
11
|
dimension : "2d" | "3d"
|
|
12
|
-
aspect : "1:1" | "16:9" | "5:7" | "8:1"
|
|
12
|
+
aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
|
|
13
13
|
atlas : asset
|
|
14
14
|
sprite : string
|
|
15
15
|
name : string
|
|
@@ -3,6 +3,7 @@ app ui-checkbox "1.0.0"
|
|
|
3
3
|
orbital CheckboxOrbital {
|
|
4
4
|
entity CheckboxItem [runtime] {
|
|
5
5
|
id : string!
|
|
6
|
+
checked : boolean @intrinsic
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
trait CheckboxRender -> @rebindable CheckboxItem [interaction, instance] {
|
|
@@ -10,9 +11,20 @@ orbital CheckboxOrbital {
|
|
|
10
11
|
|
|
11
12
|
state idle {
|
|
12
13
|
INIT -> idle
|
|
14
|
+
(set @entity.checked @config.checked)
|
|
13
15
|
(render-ui main {
|
|
14
16
|
className: @config.className
|
|
15
|
-
checked: @
|
|
17
|
+
checked: @entity.checked
|
|
18
|
+
defaultChecked: @config.defaultChecked
|
|
19
|
+
label: @config.label
|
|
20
|
+
onChange: @config.onChange
|
|
21
|
+
type: checkbox
|
|
22
|
+
})
|
|
23
|
+
CHANGE -> idle
|
|
24
|
+
(set @entity.checked ?checked)
|
|
25
|
+
(render-ui main {
|
|
26
|
+
className: @config.className
|
|
27
|
+
checked: @entity.checked
|
|
16
28
|
defaultChecked: @config.defaultChecked
|
|
17
29
|
label: @config.label
|
|
18
30
|
onChange: @config.onChange
|
|
@@ -21,11 +33,19 @@ orbital CheckboxOrbital {
|
|
|
21
33
|
}
|
|
22
34
|
|
|
23
35
|
emits {
|
|
24
|
-
@config.onChange -> external {
|
|
36
|
+
@config.onChange -> external {
|
|
37
|
+
checked : boolean!
|
|
38
|
+
}
|
|
25
39
|
@description "onChange handler or declarative event key for trait dispatch"
|
|
26
40
|
@tier "essential"
|
|
27
41
|
}
|
|
28
42
|
|
|
43
|
+
listens {
|
|
44
|
+
CHANGE {
|
|
45
|
+
checked : boolean!
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
29
49
|
config {
|
|
30
50
|
className : string
|
|
31
51
|
@label "Class Name"
|
|
@@ -9,7 +9,7 @@ orbital GameIconOrbital {
|
|
|
9
9
|
style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
|
|
10
10
|
variant : string
|
|
11
11
|
dimension : "2d" | "3d"
|
|
12
|
-
aspect : "1:1" | "16:9" | "5:7" | "8:1"
|
|
12
|
+
aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
|
|
13
13
|
atlas : asset
|
|
14
14
|
sprite : string
|
|
15
15
|
name : string
|
|
@@ -46,10 +46,14 @@ orbital SelectOrbital {
|
|
|
46
46
|
}
|
|
47
47
|
@description "Declarative event name for trait dispatch — emits `{ value }` on selection commit (same gestures as `onChange`)."
|
|
48
48
|
@tier "essential"
|
|
49
|
-
@config.onChange -> external {
|
|
49
|
+
@config.onChange -> external {
|
|
50
|
+
value : string!
|
|
51
|
+
}
|
|
50
52
|
@description "onChange handler (native ChangeEvent) or declarative event key for trait dispatch"
|
|
51
53
|
@tier "essential"
|
|
52
|
-
@config.onValueChange -> external {
|
|
54
|
+
@config.onValueChange -> external {
|
|
55
|
+
value : string!
|
|
56
|
+
}
|
|
53
57
|
@description "Value-based change: a React callback (internal use) OR a declarative event key that emits `{ value }` on the bus (render-ui / lolo authoring). Mirrors the `onChange` handler|event convention so it's an event-emitting prop, not a bare callback."
|
|
54
58
|
@tier "essential"
|
|
55
59
|
}
|
|
@@ -3,7 +3,7 @@ app ui-text-highlight "1.0.0"
|
|
|
3
3
|
orbital TextHighlightOrbital {
|
|
4
4
|
entity TextHighlightItem [runtime] {
|
|
5
5
|
id : string!
|
|
6
|
-
annotationId : string
|
|
6
|
+
annotationId : string @intrinsic
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
trait TextHighlightRender -> @rebindable TextHighlightItem [interaction, instance] {
|
|
@@ -25,7 +25,9 @@ orbital TextareaOrbital {
|
|
|
25
25
|
@config.action -> external { }
|
|
26
26
|
@description "Declarative event name for trait dispatch"
|
|
27
27
|
@tier "essential"
|
|
28
|
-
@config.onChange -> external {
|
|
28
|
+
@config.onChange -> external {
|
|
29
|
+
value : string!
|
|
30
|
+
}
|
|
29
31
|
@description "onChange handler or declarative event key for trait dispatch"
|
|
30
32
|
@tier "essential"
|
|
31
33
|
}
|
|
@@ -27,8 +27,8 @@ orbital CodeBlockOrbital {
|
|
|
27
27
|
|
|
28
28
|
entity CodeBlockItem [runtime] {
|
|
29
29
|
id : string!
|
|
30
|
-
code : string
|
|
31
|
-
editorId : string
|
|
30
|
+
code : string @intrinsic
|
|
31
|
+
editorId : string @intrinsic
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
trait CodeBlockRender -> @rebindable CodeBlockItem [interaction, instance] {
|
|
@@ -28,7 +28,7 @@ orbital CommandPaletteOrbital {
|
|
|
28
28
|
|
|
29
29
|
entity CommandPaletteItem [runtime] {
|
|
30
30
|
id : string!
|
|
31
|
-
open : boolean = false
|
|
31
|
+
open : boolean @intrinsic = false
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
trait CommandPaletteRender -> @rebindable CommandPaletteItem [interaction, instance] {
|
|
@@ -89,7 +89,7 @@ orbital CommandPaletteOrbital {
|
|
|
89
89
|
@label "On Open Change"
|
|
90
90
|
@description "Called to open/close the overlay (Escape, overlay click, or a selection)"
|
|
91
91
|
@tier "presentation"
|
|
92
|
-
commands : [CommandPaletteCommandsItem] = [
|
|
92
|
+
commands : [CommandPaletteCommandsItem] = []
|
|
93
93
|
@label "Commands"
|
|
94
94
|
@description "Commands listed in the palette, filtered as the user types"
|
|
95
95
|
@tier "presentation"
|
|
@@ -12,8 +12,8 @@ orbital DateRangePickerOrbital {
|
|
|
12
12
|
|
|
13
13
|
entity DateRangePickerItem [runtime] {
|
|
14
14
|
id : string!
|
|
15
|
-
fromProp : string
|
|
16
|
-
toProp : string
|
|
15
|
+
fromProp : string @intrinsic
|
|
16
|
+
toProp : string @intrinsic
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
trait DateRangePickerRender -> @rebindable DateRangePickerItem [interaction, instance] {
|
|
@@ -11,8 +11,8 @@ orbital DocumentPanelOrbital {
|
|
|
11
11
|
|
|
12
12
|
entity DocumentPanelItem [runtime] {
|
|
13
13
|
id : string!
|
|
14
|
-
title : string
|
|
15
|
-
value : string
|
|
14
|
+
title : string @intrinsic
|
|
15
|
+
value : string @intrinsic
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
trait DocumentPanelRender -> @rebindable DocumentPanelItem [interaction, instance] {
|
|
@@ -32,7 +32,7 @@ orbital FloatingToolbarOrbital {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
config {
|
|
35
|
-
items : [FloatingToolbarItemsItem] = [
|
|
35
|
+
items : [FloatingToolbarItemsItem] = []
|
|
36
36
|
@label "Items"
|
|
37
37
|
@description "Tool items rendered as icon buttons"
|
|
38
38
|
@tier "presentation"
|
|
@@ -56,7 +56,7 @@ orbital ImportPreviewTreeOrbital {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
config {
|
|
59
|
-
units : [ImportPreviewTreeUnitsItem] = [
|
|
59
|
+
units : [ImportPreviewTreeUnitsItem] = []
|
|
60
60
|
@label "Units"
|
|
61
61
|
@description "Staged units to preview"
|
|
62
62
|
@tier "presentation"
|
|
@@ -39,7 +39,7 @@ orbital MenuOrbital {
|
|
|
39
39
|
@label "Trigger"
|
|
40
40
|
@description "Menu trigger element"
|
|
41
41
|
@tier "presentation"
|
|
42
|
-
items : [MenuItemsItem] = [
|
|
42
|
+
items : [MenuItemsItem] = []
|
|
43
43
|
@label "Items"
|
|
44
44
|
@description "Menu items"
|
|
45
45
|
@tier "presentation"
|
|
@@ -21,7 +21,7 @@ orbital TabsOrbital {
|
|
|
21
21
|
style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
|
|
22
22
|
variant : string
|
|
23
23
|
dimension : "2d" | "3d"
|
|
24
|
-
aspect : "1:1" | "16:9" | "5:7" | "8:1"
|
|
24
|
+
aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
|
|
25
25
|
atlas : asset
|
|
26
26
|
sprite : string
|
|
27
27
|
name : string
|
|
@@ -47,7 +47,7 @@ orbital TabsOrbital {
|
|
|
47
47
|
style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
|
|
48
48
|
variant : string
|
|
49
49
|
dimension : "2d" | "3d"
|
|
50
|
-
aspect : "1:1" | "16:9" | "5:7" | "8:1"
|
|
50
|
+
aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
|
|
51
51
|
atlas : asset
|
|
52
52
|
sprite : string
|
|
53
53
|
name : string
|
|
@@ -3,8 +3,8 @@ app ui-wizard-navigation "1.0.0"
|
|
|
3
3
|
orbital WizardNavigationOrbital {
|
|
4
4
|
entity WizardNavigationItem [runtime] {
|
|
5
5
|
id : string!
|
|
6
|
-
currentStep : number = 1
|
|
7
|
-
totalSteps : number = 1
|
|
6
|
+
currentStep : number @intrinsic = 1
|
|
7
|
+
totalSteps : number @intrinsic = 1
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
trait WizardNavigationRender -> @rebindable WizardNavigationItem [interaction, instance] {
|