@almadar/std 16.146.0 → 16.148.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.
Files changed (102) hide show
  1. package/behaviors/lolo/infra/atoms/std-migration-job.lolo +269 -0
  2. package/behaviors/lolo/infra/atoms/std-mod-queue.lolo +1 -1
  3. package/behaviors/lolo/ml/atoms/std-data-collector.lolo +56 -0
  4. package/behaviors/lolo/ml/atoms/std-graph-builder.lolo +90 -0
  5. package/behaviors/lolo/ml/atoms/std-tokenizer.lolo +108 -0
  6. package/behaviors/lolo/ml/atoms/std-weight-validator.lolo +106 -0
  7. package/behaviors/lolo/ui/core/atoms/std-billable-hour.lolo +1 -1
  8. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +4 -6
  9. package/behaviors/lolo/ui/core/atoms/std-esign-flow.lolo +3 -3
  10. package/behaviors/lolo/ui/core/atoms/std-esign-request.lolo +4 -4
  11. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +2 -2
  12. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +1 -1
  13. package/behaviors/lolo/ui/core/atoms/std-gallery.lolo +1 -1
  14. package/behaviors/lolo/ui/core/atoms/std-image-upload-multi.lolo +2 -2
  15. package/behaviors/lolo/ui/core/atoms/std-import.lolo +132 -0
  16. package/behaviors/lolo/ui/core/atoms/std-recurrence.lolo +5 -5
  17. package/behaviors/lolo/ui/core/atoms/std-saved-search.lolo +1 -1
  18. package/behaviors/lolo/ui/core/atoms/std-signature-capture.lolo +1 -1
  19. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +0 -2
  20. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +0 -2
  21. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +96 -0
  22. package/behaviors/lolo/ui/core/molecules/ui-import-progress.lolo +49 -0
  23. package/behaviors/lolo/ui/core/molecules/ui-import-source-picker.lolo +67 -0
  24. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +0 -2
  25. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +0 -2
  26. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +0 -2
  27. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +0 -2
  28. package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +0 -2
  29. package/behaviors/registry/factory-signatures.json +11531 -2142
  30. package/behaviors/registry/infra/atoms/std-migration-job.orb +1310 -0
  31. package/behaviors/registry/infra/atoms/std-mod-queue.orb +5 -5
  32. package/behaviors/registry/ml/atoms/std-data-collector.orb +324 -0
  33. package/behaviors/registry/ml/atoms/std-graph-builder.orb +480 -0
  34. package/behaviors/registry/ml/atoms/std-tokenizer.orb +570 -0
  35. package/behaviors/registry/ml/atoms/std-weight-validator.orb +624 -0
  36. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +2 -2
  37. package/behaviors/registry/ui/core/atoms/std-browse.orb +4 -6
  38. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +17 -21
  39. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +7 -13
  40. package/behaviors/registry/ui/core/atoms/std-event-log.orb +2 -4
  41. package/behaviors/registry/ui/core/atoms/std-file-store.orb +3 -4
  42. package/behaviors/registry/ui/core/atoms/std-gallery.orb +11 -20
  43. package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +4 -4
  44. package/behaviors/registry/ui/core/atoms/std-import.orb +701 -0
  45. package/behaviors/registry/ui/core/atoms/std-recurrence.orb +5 -10
  46. package/behaviors/registry/ui/core/atoms/std-saved-search.orb +2 -2
  47. package/behaviors/registry/ui/core/atoms/std-signature-capture.orb +2 -2
  48. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +12 -25
  49. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +13 -26
  50. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +354 -0
  51. package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +195 -0
  52. package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +279 -0
  53. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +12 -25
  54. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +0 -13
  55. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +8 -21
  56. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +0 -13
  57. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +0 -13
  58. package/dist/behaviors/behaviors-embeddings.json +477 -405
  59. package/dist/behaviors/behaviors-registry.json +7518 -3936
  60. package/dist/behaviors/exports-reader.js +3093 -2581
  61. package/dist/behaviors/functions/index.d.ts +922 -14
  62. package/dist/behaviors/functions/index.js +3056 -2582
  63. package/dist/behaviors/index.d.ts +1 -1
  64. package/dist/behaviors/index.js +3094 -2582
  65. package/dist/behaviors/knob-embeddings.json +1 -1
  66. package/dist/behaviors/query.js +3093 -2581
  67. package/dist/behaviors/registry/factory-signatures.json +11531 -2142
  68. package/dist/behaviors/registry/infra/atoms/std-migration-job.orb +1310 -0
  69. package/dist/behaviors/registry/infra/atoms/std-mod-queue.orb +5 -5
  70. package/dist/behaviors/registry/ml/atoms/std-data-collector.orb +324 -0
  71. package/dist/behaviors/registry/ml/atoms/std-graph-builder.orb +480 -0
  72. package/dist/behaviors/registry/ml/atoms/std-tokenizer.orb +570 -0
  73. package/dist/behaviors/registry/ml/atoms/std-weight-validator.orb +624 -0
  74. package/dist/behaviors/registry/ui/core/atoms/std-billable-hour.orb +2 -2
  75. package/dist/behaviors/registry/ui/core/atoms/std-browse.orb +4 -6
  76. package/dist/behaviors/registry/ui/core/atoms/std-esign-flow.orb +17 -21
  77. package/dist/behaviors/registry/ui/core/atoms/std-esign-request.orb +7 -13
  78. package/dist/behaviors/registry/ui/core/atoms/std-event-log.orb +2 -4
  79. package/dist/behaviors/registry/ui/core/atoms/std-file-store.orb +3 -4
  80. package/dist/behaviors/registry/ui/core/atoms/std-gallery.orb +11 -20
  81. package/dist/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +4 -4
  82. package/dist/behaviors/registry/ui/core/atoms/std-import.orb +701 -0
  83. package/dist/behaviors/registry/ui/core/atoms/std-recurrence.orb +5 -10
  84. package/dist/behaviors/registry/ui/core/atoms/std-saved-search.orb +2 -2
  85. package/dist/behaviors/registry/ui/core/atoms/std-signature-capture.orb +2 -2
  86. package/dist/behaviors/registry/ui/core/molecules/ui-data-grid.orb +12 -25
  87. package/dist/behaviors/registry/ui/core/molecules/ui-data-list.orb +13 -26
  88. package/dist/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +354 -0
  89. package/dist/behaviors/registry/ui/core/molecules/ui-import-progress.orb +195 -0
  90. package/dist/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +279 -0
  91. package/dist/behaviors/registry/ui/core/molecules/ui-table-view.orb +12 -25
  92. package/dist/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +0 -13
  93. package/dist/behaviors/registry/ui/core/organisms/ui-entity-list.orb +8 -21
  94. package/dist/behaviors/registry/ui/core/organisms/ui-entity-table.orb +0 -13
  95. package/dist/behaviors/registry/ui/core/organisms/ui-timeline.orb +0 -13
  96. package/dist/behaviors-embeddings.json +477 -405
  97. package/dist/behaviors-registry.json +7518 -3936
  98. package/dist/index.d.ts +1 -1
  99. package/dist/index.js +3094 -2582
  100. package/dist/knob-embeddings.json +1 -1
  101. package/dist/registry/factory-signatures.json +11531 -2142
  102. package/package.json +2 -2
@@ -333,15 +333,14 @@ orbital BrowseItemOrbital {
333
333
  @tier "internal"
334
334
  denseBodyContent : render-ui = {
335
335
  children: [(if @config.bodySearch {
336
- align: center
337
336
  children: [{
338
- className: "w-full max-w-2xl"
337
+ className: w-full
339
338
  clearable: true
340
339
  event: REFETCH_QUERY
341
340
  placeholder: @config.searchPlaceholder
342
341
  type: search-input
343
342
  }]
344
- className: "w-full max-w-2xl"
343
+ className: w-full
345
344
  direction: horizontal
346
345
  gap: sm
347
346
  type: stack
@@ -356,7 +355,6 @@ orbital BrowseItemOrbital {
356
355
  gap: none
357
356
  type: stack
358
357
  }]
359
- className: p-card-md
360
358
  direction: vertical
361
359
  gap: sm
362
360
  type: stack
@@ -455,7 +453,7 @@ orbital BrowseItemOrbital {
455
453
  type: data-list
456
454
  variant: card
457
455
  }]
458
- className: "w-full p-card-md"
456
+ className: w-full
459
457
  direction: vertical
460
458
  gap: lg
461
459
  type: stack
@@ -556,7 +554,7 @@ orbital BrowseItemOrbital {
556
554
  })
557
555
  type: data-grid
558
556
  }]
559
- className: "w-full px-card-md py-section"
557
+ className: w-full
560
558
  direction: vertical
561
559
  gap: lg
562
560
  type: stack
@@ -18,11 +18,11 @@ orbital SignatureSessionOrbital {
18
18
  documentId : string! @description "Unique identifier for the associated document." @synonyms "fileID, docID, documentReference"
19
19
  documentName : string @description "The name of the document associated with the signature request." @synonyms "filename, document, file" = ""
20
20
  recipientName : string! @description "The name of the recipient for the signature request." @synonyms "recipient, name, user"
21
- recipientEmail : string! @description "The email address of the recipient." @synonyms "email, address, contact"
21
+ recipientEmail : email! @description "The email address of the recipient." @synonyms "email, address, contact"
22
22
  requesterName : string @description "The name of the user initiating the signature request." @synonyms "initiator, sender, originator" = ""
23
23
  status : "draft" | "sent" | "viewed" | "signed" | "declined" @description "Current state of the signature request." @synonyms "state, condition, stage" = draft
24
- sentAt : string @description "Timestamp indicating when the request was sent." @synonyms "sent date, submission time, dispatched" = ""
25
- signedAt : string @description "The date and time the signature was applied." @synonyms "signed date, completion date, signature time" = ""
24
+ sentAt : datetime @description "Timestamp indicating when the request was sent." @synonyms "sent date, submission time, dispatched"
25
+ signedAt : datetime @description "The date and time the signature was applied." @synonyms "signed date, completion date, signature time"
26
26
  pendingId : string @description "Unique identifier for a pending action or task." @synonyms "taskId, pendingKey, referenceId" = ""
27
27
  }
28
28
 
@@ -10,11 +10,11 @@ orbital ESignRequestOrbital {
10
10
  documentId : string! @description "Unique identifier for the associated document." @synonyms "document reference, file ID"
11
11
  documentName : string @description "The name of the document being requested for signature." @synonyms "filename, document title, file name" = ""
12
12
  recipientName : string! @description "The name of the recipient for the e-signature request." @synonyms "recipient, name, user"
13
- recipientEmail : string! @description "The email address of the recipient." @synonyms "email, address, contact"
13
+ recipientEmail : email! @description "The email address of the recipient." @synonyms "email, address, contact"
14
14
  status : "draft" | "sent" | "viewed" | "signed" | "declined" | "expired" @description "The current stage of the request lifecycle." @synonyms "state, condition, phase" = draft
15
- sentAt : string @description "Timestamp indicating when the request was sent." @synonyms "sent date, send time, dispatched at" = ""
16
- signedAt : string @description "Timestamp indicating when the request was signed." @synonyms "signed date, signature date, completion date" = ""
17
- expiresAt : string @description "The date and time when the request is no longer valid." @synonyms "expiration, expiry, due date" = ""
15
+ sentAt : datetime @description "Timestamp indicating when the request was sent." @synonyms "sent date, send time, dispatched at"
16
+ signedAt : datetime @description "Timestamp indicating when the request was signed." @synonyms "signed date, signature date, completion date"
17
+ expiresAt : datetime @description "The date and time when the request is no longer valid." @synonyms "expiration, expiry, due date"
18
18
  notes : string @description "Free-text comments or additional information." @synonyms "comment, remark, description, details" = ""
19
19
  }
20
20
 
@@ -22,14 +22,14 @@ orbital EventLogOrbital {
22
22
  title : string @description "The descriptive name or heading for the event log." @synonyms "heading, label, name" = ""
23
23
  description : string @description "A human-readable explanation of the event." @synonyms "text, details, explanation, summary" = ""
24
24
  kind : "created" | "updated" | "approved" | "rejected" @description "The type of event being logged." @synonyms "event type, event category, kind, status" = created
25
- date : string @description "The timestamp associated with the event." @synonyms "timestamp, time, occurred" = ""
25
+ date : date @description "The timestamp associated with the event." @synonyms "timestamp, time, occurred"
26
26
  allEntries : [LogEntry] @description "An array of log entry objects." @synonyms "entries, records, items, data" = []
27
27
  entries : [LogEntry] @description "A list of log entries, each with associated data." @synonyms "records, items, data, events" = []
28
28
  filterChips : [FilterChip] @description "Represents selectable filter options for event categories." @synonyms "filters, categories, types, selections" = []
29
29
  filterKind : string @description "The type of filter currently applied to the event log." @synonyms "filter, category, type" = ""
30
30
  backfillTitle : string @description "A descriptive title for a manually added event." @synonyms "manual title, user-provided title, custom title" = ""
31
31
  backfillDescription : string @description "A textual explanation for the event backfill process." @synonyms "explanation, details, notes, information" = ""
32
- backfillDate : string @description "The date and time when the event was manually added." @synonyms "timestamp, entered date, manual date" = ""
32
+ backfillDate : date @description "The date and time when the event was manually added." @synonyms "timestamp, entered date, manual date"
33
33
  backfillKind : string @description "Specifies the category or type of the manually added event." @synonyms "event type, category, kind" = ""
34
34
  errorMessage : string @description "A human-readable message indicating an error condition." @synonyms "error, error message, problem, issue" = ""
35
35
  }
@@ -17,7 +17,7 @@ orbital StoredFileOrbital {
17
17
  uploaderId : string @description "Identifier of the user who uploaded the file." @synonyms "user, owner, creator" = ""
18
18
  uploaderName : string @description "The name of the user who uploaded the file." @synonyms "owner, user, author" = ""
19
19
  folder : string @description "The path to the containing directory." @synonyms "parent, directory, location" = ""
20
- uploadedAt : string @description "Timestamp indicating when the file was uploaded." @synonyms "upload date, date uploaded, upload time" = ""
20
+ uploadedAt : datetime @description "Timestamp indicating when the file was uploaded." @synonyms "upload date, date uploaded, upload time"
21
21
  isArchived : boolean @description "Indicates whether the file is archived." @synonyms "archived, status, state" = false
22
22
  }
23
23
 
@@ -18,7 +18,7 @@ orbital GalleryItemOrbital {
18
18
  description : string @description "A brief textual summary of the item's content." @synonyms "caption, summary, details, notes"
19
19
  status : "active" | "inactive" | "pending" @description "Indicates the current state of the item." @synonyms "state, condition, flag" = active
20
20
  createdAt : string
21
- imageUrl : string @description "The URL pointing to the image resource." @synonyms "image, src, path" = "https://picsum.photos/seed/gallery/800/600"
21
+ imageUrl : image @description "The URL pointing to the image resource." @synonyms "image, src, path" = "https://picsum.photos/seed/gallery/800/600"
22
22
  }
23
23
 
24
24
  trait LoadingSpinner = Spinner.traits.SpinnerRender -> GalleryItem {
@@ -11,7 +11,7 @@ orbital UploadedImageOrbital {
11
11
 
12
12
  entity UploadedImage [persistent: uploadedimages] {
13
13
  id : string!
14
- url : string! @description "The accessible address for retrieving the image data." @synonyms "link, path, address"
14
+ url : url! @description "The accessible address for retrieving the image data." @synonyms "link, path, address"
15
15
  name : string @description "The filename or identifier for the uploaded image." @synonyms "filename, originalName, identifier"
16
16
  sizeBytes : number @description "The file size in bytes." @synonyms "length, filesize, bytes"
17
17
  mimeType : string @description "The file's internet media type." @synonyms "type, format, media type"
@@ -19,7 +19,7 @@ orbital UploadedImageOrbital {
19
19
  height : number @description "The vertical dimension of the image, in pixels." @synonyms "vertical, y, dimension"
20
20
  parentId : string @description "Identifier of the parent resource this image belongs to." @synonyms "parent, reference, source"
21
21
  parentType : string @description "Identifies the type of the parent entity." @synonyms "parent, type, category"
22
- uploadedAt : string @description "Timestamp indicating when the image was uploaded." @synonyms "date, timestamp, upload time"
22
+ uploadedAt : datetime @description "Timestamp indicating when the image was uploaded." @synonyms "date, timestamp, upload time"
23
23
  }
24
24
 
25
25
  trait UploadedImageUpload -> UploadedImage [interaction, collection] {
@@ -0,0 +1,132 @@
1
+ app std-import "1.0.0"
2
+ "std-import — a dropdown source menu (Paste text / Markdown files defaults; caller can override via config.sources) plus the OS file picker for file-kind sources. Emits IMPORT_REQUESTED { source, files } on the bus — source is the picked SourceOption descriptor; files carries file metadata when the picker ran (empty otherwise). The actual import work is delegated to a sibling std-migration-job, which listens for IMPORT_REQUESTED and drives the migration service. Mirrors std-export: the menu emits each entry's own literal event field, so overriding the event alone does not retarget the click — also set sources[].event to match."
3
+ orbital ImportOrbital {
4
+ uses Button from "std/behaviors/ui-button"
5
+ uses Menu from "std/behaviors/ui-menu"
6
+
7
+ type SourceOption = { id : string!, kind : string!, label : string!, event : string }
8
+
9
+ entity ImportPanel [runtime] {
10
+ id : string!
11
+ pendingSource : object = {}
12
+ pendingFiles : [object] = []
13
+ }
14
+
15
+ trait Button1 = Button.traits.ButtonRender -> ImportPanel {
16
+ config {
17
+ action: OPEN_IMPORT
18
+ icon: upload
19
+ label: @config.buttonLabel
20
+ size: sm
21
+ variant: ghost
22
+ }
23
+ }
24
+
25
+ trait Menu1 = Menu.traits.MenuRender -> ImportPanel {
26
+ config {
27
+ items: @config.sources
28
+ position: bottom-start
29
+ trigger: [@trait.Button1]
30
+ }
31
+ }
32
+
33
+ trait ImportMenu -> ImportPanel [interaction, instance] {
34
+ initial: idle
35
+
36
+ state idle {
37
+ INIT -> idle
38
+ (render-ui main { children: [@trait.Menu1], type: box })
39
+ OPEN_IMPORT -> idle
40
+ IMPORT_SOURCE_PICKED -> picking when (== (object/get (array/find @config.sources (fn s (== (object/get @s id) ?itemId))) kind "") "file")
41
+ (set @entity.pendingSource (array/find @config.sources (fn s (== (object/get @s id) ?itemId))))
42
+ (browser/open-file-picker { accept: @config.accept, multiple: true }
43
+ { emit: { success: FILES_PICKED, failure: PICK_FAILED } })
44
+ IMPORT_SOURCE_PICKED -> idle when (!= (object/get (array/find @config.sources (fn s (== (object/get @s id) ?itemId))) kind "") "file")
45
+ (set @entity.pendingSource (array/find @config.sources (fn s (== (object/get @s id) ?itemId))))
46
+ (emit IMPORT_REQUESTED { files: @entity.pendingFiles, source: @entity.pendingSource })
47
+ ;; Self-loops on the external emits so the validator sees in-atom
48
+ ;; listeners for events consumed by the sibling std-migration-job.
49
+ IMPORT_REQUESTED -> idle
50
+ IMPORT_FAILED -> idle
51
+ }
52
+
53
+ state picking {
54
+ FILES_PICKED -> idle
55
+ (set @entity.pendingFiles (object/get ?result files []))
56
+ (emit IMPORT_REQUESTED { files: @entity.pendingFiles, source: @entity.pendingSource })
57
+ PICK_FAILED -> idle
58
+ (emit IMPORT_FAILED { error: ?error })
59
+ }
60
+
61
+ emits {
62
+ IMPORT_REQUESTED -> external {
63
+ source : object!
64
+ files : [object]
65
+ }
66
+ @description "Requests an import from the picked source. source is the SourceOption descriptor (id/kind/label); files carries picker metadata (name/size/type/lastModified) for file-kind sources, empty otherwise. A sibling std-migration-job listens and drives the run."
67
+ @synonyms "import, upload, migrate, bring in data"
68
+ @tier "domain"
69
+ IMPORT_FAILED -> external {
70
+ error : string!
71
+ }
72
+ @description "The file picker failed or was cancelled at the OS level"
73
+ @synonyms "import error, picker failed"
74
+ @tier "internal"
75
+ FILES_PICKED {
76
+ result : object!
77
+ }
78
+ @description "browser/open-file-picker success envelope — result.files holds the picked file metadata"
79
+ @tier "secondary"
80
+ PICK_FAILED {
81
+ error : string!
82
+ }
83
+ @description "browser/open-file-picker failure signal"
84
+ @tier "secondary"
85
+ }
86
+
87
+ listens {
88
+ IMPORT_SOURCE_PICKED {
89
+ itemId : string!
90
+ label : string!
91
+ }
92
+ @description "A source entry was picked from the menu. itemId matches the SourceOption.id of the picked entry; kind is resolved from config.sources by id."
93
+ @synonyms "source selected, import source chosen"
94
+ @tier "domain"
95
+ }
96
+
97
+ config {
98
+ accept : string = ".md,.markdown,.txt"
99
+ @label "Accepted file types"
100
+ @description "File-extension filter for the OS file picker when a file-kind source is picked"
101
+ @synonyms "file filter, allowed extensions, accepted formats"
102
+ @tier "presentation"
103
+ buttonLabel : string = Import
104
+ @label "Button label"
105
+ @description "Text shown on the toolbar button that opens the import source popover"
106
+ @synonyms "the text on the import trigger button. user phrases: 'rename import button to X' / 'set the button label to X' -> X (e.g. 'Import Data', 'Add Sources')"
107
+ @tier "presentation"
108
+ event : string = IMPORT_SOURCE_PICKED
109
+ @label "Source-picked event"
110
+ @description "Event emitted when the user picks a source. Each entry in sources[] carries its own literal event field (no per-item templating in .lolo) — overriding this alone does not retarget the click; also set sources[].event to match."
111
+ @synonyms "bus event name. internal wiring; users rarely target directly"
112
+ @tier "internal"
113
+ sources : [SourceOption] = [{
114
+ event: IMPORT_SOURCE_PICKED
115
+ id: paste
116
+ kind: paste
117
+ label: "Paste text"
118
+ }, {
119
+ event: IMPORT_SOURCE_PICKED
120
+ id: markdown
121
+ kind: file
122
+ label: "Markdown files"
123
+ }]
124
+ @label "Import sources"
125
+ @description "Sources shown in the import popover. kind 'file' opens the OS file picker before IMPORT_REQUESTED; any other kind emits immediately (the host renders the matching input UI, e.g. a paste textarea)."
126
+ @synonyms "list of import source entries (paste / file / api / database). user phrases: 'only paste' -> keep only the paste entry; 'add database' -> append a database entry"
127
+ @tier "presentation"
128
+ }
129
+ }
130
+
131
+ page "/imports/menu" as ImportMenuPage -> ImportMenu, Button1, Menu1
132
+ }
@@ -16,18 +16,18 @@ orbital RecurrenceOrbital {
16
16
  id : string!
17
17
  title : string @description "A short, user-friendly name for the recurrence." @synonyms "label, heading, name" = ""
18
18
  notes : string @description "Free-form text providing additional information or context." @synonyms "comment, remark, description, details" = ""
19
- date : string @description "The date associated with this occurrence." @synonyms "due date, scheduled date, run date" = ""
19
+ date : date @description "The date associated with this occurrence." @synonyms "due date, scheduled date, run date"
20
20
  occurrences : [OccurrenceItem] @description "A list of scheduled event instances." @synonyms "events, instances, schedules, runs" = []
21
21
  frequency : "daily" | "weekly" | "monthly" | "yearly" @description "How often the recurrence happens." @synonyms "period, repeat, schedule" = weekly
22
22
  interval : number @description "The number of time units between occurrences." @synonyms "period, repetition, spacing" = 1
23
- startDate : string @description "The date when the recurrence begins." @synonyms "start date, begin date, initial date" = ""
24
- endDate : string @description "The date when the recurrence ends." @synonyms "end date, termination date, final date" = ""
23
+ startDate : date @description "The date when the recurrence begins." @synonyms "start date, begin date, initial date"
24
+ endDate : date @description "The date when the recurrence ends." @synonyms "end date, termination date, final date"
25
25
  endAfterCount : number @description "The number of occurrences after which the recurrence ends." @synonyms "count, limit, total" = 0
26
26
  summaryText : string @description "A human-readable summary of the recurrence rule." @synonyms "description, rule summary, explanation" = ""
27
27
  currentOccurrenceId : string @description "Unique identifier for the currently active occurrence." @synonyms "occurrence ID, run ID, current run" = ""
28
- currentOccurrenceDate : string @description "The date of the currently active occurrence." @synonyms "occurrence date, current date, run date" = ""
28
+ currentOccurrenceDate : date @description "The date of the currently active occurrence." @synonyms "occurrence date, current date, run date"
29
29
  currentOccurrenceLabel : string @description "A human-readable label for the current occurrence." @synonyms "current run, present instance, now" = ""
30
- rescheduleDate : string @description "The date to which the recurrence is rescheduled." @synonyms "new date, replacement date, revised date" = ""
30
+ rescheduleDate : date @description "The date to which the recurrence is rescheduled." @synonyms "new date, replacement date, revised date"
31
31
  skipReason : string @description "Reason provided when skipping a scheduled occurrence." @synonyms "rationale, explanation, justification" = ""
32
32
  errorMessage : string @description "Error message displayed to the user." @synonyms "error, message, problem" = ""
33
33
  }
@@ -17,7 +17,7 @@ orbital SavedSearchOrbital {
17
17
  alertEnabled : boolean @description "Indicates whether alerts are enabled for this saved search." @synonyms "enabled, active, notification status" = false
18
18
  alertFrequency : "instant" | "daily" | "weekly" @description "How often alerts are triggered." @synonyms "frequency, interval, recurrence" = daily
19
19
  userId : string @description "Identifier of the user who created the saved search." @synonyms "creator, owner, user_id"
20
- lastNotifiedAt : string @description "Timestamp of the last notification sent." @synonyms "last_notification, notified_at, last_alert"
20
+ lastNotifiedAt : datetime @description "Timestamp of the last notification sent." @synonyms "last_notification, notified_at, last_alert"
21
21
  createdAt : string
22
22
  }
23
23
 
@@ -15,7 +15,7 @@ orbital SignatureCaptureOrbital {
15
15
  targetType : string! @description "Specifies the type of target associated with the signature." @synonyms "type, kind, category"
16
16
  signerName : string! @description "The name of the person providing the signature." @synonyms "name, user, person"
17
17
  signatureDataUrl : string! @description "Encoded signature image data, typically a data URL." @synonyms "signature image, image data, signature representation"
18
- signedAt : string @description "Timestamp indicating when the signature was captured." @synonyms "date, time, timestamp"
18
+ signedAt : datetime @description "Timestamp indicating when the signature was captured." @synonyms "date, time, timestamp"
19
19
  ipAddress : string @description "The client's IP address during signature capture." @synonyms "client IP, source IP, originating IP"
20
20
  }
21
21
 
@@ -106,8 +106,6 @@ orbital DataGridOrbital {
106
106
  look: @config.look
107
107
  type: data-grid
108
108
  })
109
- VIEW -> idle
110
- (emit VIEW {})
111
109
  }
112
110
 
113
111
  emits {
@@ -122,8 +122,6 @@ orbital DataListOrbital {
122
122
  look: @config.look
123
123
  type: data-list
124
124
  })
125
- VIEW -> idle
126
- (emit VIEW {})
127
125
  }
128
126
 
129
127
  emits {
@@ -0,0 +1,96 @@
1
+ app ui-import-preview-tree "1.0.0"
2
+ "ImportPreviewTree — UI factory (1:1 with the @almadar/ui import-preview-tree pattern)."
3
+ orbital ImportPreviewTreeOrbital {
4
+ type ImportPreviewTreeUnitsItem = {
5
+ ref : string!
6
+ targetEntity : string!
7
+ fields : Map string json!
8
+ parentRef : string
9
+ }
10
+ type ImportPreviewTreeSkippedItem = {
11
+ ref : string!
12
+ reason : string!
13
+ }
14
+ type ImportPreviewTreeEntityDisplayValue = {
15
+ singular : string!
16
+ plural : string!
17
+ }
18
+
19
+ entity ImportPreviewTreeItem [runtime] {
20
+ id : string!
21
+ }
22
+
23
+ trait ImportPreviewTreeRender -> @rebindable ImportPreviewTreeItem [interaction, instance] {
24
+ initial: idle
25
+
26
+ state idle {
27
+ INIT -> idle
28
+ (render-ui main {
29
+ units: @config.units
30
+ skipped: @config.skipped
31
+ entityDisplay: @config.entityDisplay
32
+ onConfirm: @config.onConfirm
33
+ onCancel: @config.onCancel
34
+ confirmLabel: @config.confirmLabel
35
+ cancelLabel: @config.cancelLabel
36
+ indent: @config.indent
37
+ className: @config.className
38
+ type: import-preview-tree
39
+ })
40
+ }
41
+
42
+ emits {
43
+ @config.onConfirm -> external {
44
+ id : string
45
+ }
46
+ @description "Called when the user confirms the staged import"
47
+ @tier "essential"
48
+ @config.onCancel -> external {
49
+ id : string
50
+ }
51
+ @description "Called when the user cancels the staged import"
52
+ @tier "essential"
53
+ }
54
+
55
+ config {
56
+ units : [ImportPreviewTreeUnitsItem] = [{ ref: "Ref", targetEntity: "Target Entity", fields: {}, parentRef: "Parent Ref" }, { ref: "Ref 2", targetEntity: "Target Entity 2", fields: {}, parentRef: "Parent Ref 2" }]
57
+ @label "Units"
58
+ @description "Staged units to preview"
59
+ @tier "presentation"
60
+ skipped : [ImportPreviewTreeSkippedItem] = []
61
+ @label "Skipped"
62
+ @description "Elements skipped during extraction, with reasons"
63
+ @tier "presentation"
64
+ entityDisplay : Map string ImportPreviewTreeEntityDisplayValue = { item: { singular: "Singular", plural: "Plural" } }
65
+ @label "Entity Display"
66
+ @description "Entity name → display labels; falls back to the entity name"
67
+ @tier "presentation"
68
+ onConfirm : string = "CONFIRM"
69
+ @label "On Confirm"
70
+ @description "Called when the user confirms the staged import"
71
+ @tier "presentation"
72
+ onCancel : string = "CANCEL"
73
+ @label "On Cancel"
74
+ @description "Called when the user cancels the staged import"
75
+ @tier "presentation"
76
+ confirmLabel : string = "Confirm import"
77
+ @label "Confirm Label"
78
+ @description "Confirm button label"
79
+ @tier "presentation"
80
+ cancelLabel : string = Cancel
81
+ @label "Cancel Label"
82
+ @description "Cancel button label"
83
+ @tier "presentation"
84
+ indent : number = 16
85
+ @label "Indent"
86
+ @description "Indent per tree depth in px (default: 16)"
87
+ @tier "presentation"
88
+ className : string
89
+ @label "Class Name"
90
+ @description "Additional CSS classes"
91
+ @tier "presentation"
92
+ }
93
+ }
94
+
95
+ page "/import-preview-tree" as ImportPreviewTreePage -> ImportPreviewTreeRender
96
+ }
@@ -0,0 +1,49 @@
1
+ app ui-import-progress "1.0.0"
2
+ "ImportProgress — UI factory (1:1 with the @almadar/ui import-progress pattern)."
3
+ orbital ImportProgressOrbital {
4
+ type ImportProgressCounts = {
5
+ staged : number
6
+ committed : number
7
+ failed : number
8
+ }
9
+
10
+ entity ImportProgressItem [runtime] {
11
+ id : string!
12
+ }
13
+
14
+ trait ImportProgressRender -> @rebindable ImportProgressItem [interaction, instance] {
15
+ initial: idle
16
+
17
+ state idle {
18
+ INIT -> idle
19
+ (render-ui main {
20
+ step: @config.step
21
+ counts: @config.counts
22
+ labels: @config.labels
23
+ className: @config.className
24
+ type: import-progress
25
+ })
26
+ }
27
+
28
+ config {
29
+ step : "fetching" | "mapping" | "reviewing" | "committing" | "done" | "failed" = fetching
30
+ @label "Step"
31
+ @description "Current lifecycle step"
32
+ @tier "presentation"
33
+ counts : ImportProgressCounts
34
+ @label "Counts"
35
+ @description "Unit counts"
36
+ @tier "presentation"
37
+ labels : Map string string = { item: "Item" }
38
+ @label "Labels"
39
+ @description "Step label overrides"
40
+ @tier "presentation"
41
+ className : string
42
+ @label "Class Name"
43
+ @description "Additional CSS classes"
44
+ @tier "presentation"
45
+ }
46
+ }
47
+
48
+ page "/import-progress" as ImportProgressPage -> ImportProgressRender
49
+ }
@@ -0,0 +1,67 @@
1
+ app ui-import-source-picker "1.0.0"
2
+ "ImportSourcePicker — UI factory (1:1 with the @almadar/ui import-source-picker pattern)."
3
+ orbital ImportSourcePickerOrbital {
4
+ type ImportSourcePickerSourcesItem = {
5
+ id : string!
6
+ label : string!
7
+ description : string
8
+ icon : icon
9
+ kind : "action" | "file"
10
+ accept : string
11
+ multiple : boolean
12
+ disabled : boolean
13
+ }
14
+
15
+ entity ImportSourcePickerItem [runtime] {
16
+ id : string!
17
+ }
18
+
19
+ trait ImportSourcePickerRender -> @rebindable ImportSourcePickerItem [interaction, instance] {
20
+ initial: idle
21
+
22
+ state idle {
23
+ INIT -> idle
24
+ (render-ui main {
25
+ sources: @config.sources
26
+ onSelect: @config.onSelect
27
+ title: @config.title
28
+ moreSources: @config.moreSources
29
+ className: @config.className
30
+ type: import-source-picker
31
+ })
32
+ }
33
+
34
+ emits {
35
+ @config.onSelect -> external {
36
+ sourceId : string
37
+ }
38
+ @description "Called with the source id when an 'action' option is picked"
39
+ @tier "essential"
40
+ }
41
+
42
+ config {
43
+ sources : [ImportSourcePickerSourcesItem] = [{ id: "Id", label: "Label", description: "Description", icon: "circle", kind: action, accept: "Accept", multiple: false, disabled: false }, { id: "Id 2", label: "Label 2", description: "Description 2", icon: "circle", kind: file, accept: "Accept 2", multiple: true, disabled: true }]
44
+ @label "Sources"
45
+ @description "Source options to render"
46
+ @tier "presentation"
47
+ onSelect : string = "SELECT"
48
+ @label "On Select"
49
+ @description "Called with the source id when an 'action' option is picked"
50
+ @tier "presentation"
51
+ title : string
52
+ @label "Title"
53
+ @description "Optional heading above the options"
54
+ @tier "presentation"
55
+ moreSources : node
56
+ @label "More Sources"
57
+ @description "Generic slot for additional sources rendered below the options"
58
+ @tier "presentation"
59
+ className : string
60
+ @label "Class Name"
61
+ @description "Additional CSS classes"
62
+ @tier "presentation"
63
+ }
64
+ }
65
+
66
+ page "/import-source-picker" as ImportSourcePickerPage -> ImportSourcePickerRender
67
+ }
@@ -111,8 +111,6 @@ orbital TableViewOrbital {
111
111
  look: @config.look
112
112
  type: table-view
113
113
  })
114
- VIEW -> idle
115
- (emit VIEW {})
116
114
  }
117
115
 
118
116
  emits {
@@ -96,8 +96,6 @@ orbital EntityCardsOrbital {
96
96
  imageField: @config.imageField
97
97
  type: entity-cards
98
98
  })
99
- VIEW -> idle
100
- (emit VIEW {})
101
99
  }
102
100
 
103
101
  emits {
@@ -74,8 +74,6 @@ orbital EntityListOrbital {
74
74
  fieldNames: @config.fieldNames
75
75
  type: entity-list
76
76
  })
77
- VIEW -> idle
78
- (emit VIEW {})
79
77
  }
80
78
 
81
79
  emits {
@@ -120,8 +120,6 @@ orbital EntityTableOrbital {
120
120
  look: @config.look
121
121
  type: entity-table
122
122
  })
123
- VIEW -> idle
124
- (emit VIEW {})
125
123
  }
126
124
 
127
125
  emits {
@@ -59,8 +59,6 @@ orbital TimelineOrbital {
59
59
  look: @config.look
60
60
  type: timeline
61
61
  })
62
- VIEW -> idle
63
- (emit VIEW {})
64
62
  }
65
63
 
66
64
  emits {