@almadar/std 16.239.0 → 16.241.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 (75) hide show
  1. package/behaviors/behaviors-registry.json +165 -19
  2. package/behaviors/lolo/ui/core/atoms/std-board.lolo +53 -6
  3. package/behaviors/lolo/ui/core/atoms/std-site-header.lolo +15 -3
  4. package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +2 -2
  5. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +7 -7
  6. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +1 -1
  7. package/behaviors/lolo/ui/core/molecules/ui-header.lolo +5 -0
  8. package/behaviors/lolo-behavior-contracts.json +1 -1
  9. package/behaviors/registry/factory-signatures.json +1 -1
  10. package/behaviors/registry/ui/core/atoms/std-board.orb +110 -14
  11. package/behaviors/registry/ui/core/atoms/std-site-header.orb +40 -2
  12. package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +2 -0
  13. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +24 -0
  14. package/behaviors/registry/ui/core/atoms/std-version-history.orb +8 -1
  15. package/behaviors/registry/ui/core/molecules/ui-header.orb +7 -0
  16. package/canonical-operators.json +35 -1
  17. package/dist/behaviors/exports-reader.js +142 -15
  18. package/dist/behaviors/functions/index.d.ts +11 -4
  19. package/dist/behaviors/functions/index.js +142 -15
  20. package/dist/behaviors/index.js +142 -15
  21. package/dist/behaviors/query.js +142 -15
  22. package/dist/behaviors-embeddings.hash.json +3 -3
  23. package/dist/behaviors-embeddings.json +3 -3
  24. package/dist/behaviors-registry.json +165 -19
  25. package/dist/index.d.ts +3 -3
  26. package/dist/index.js +181 -16
  27. package/dist/knob-embeddings.hash.json +3 -3
  28. package/dist/knob-embeddings.json +17 -1
  29. package/dist/modules/anim.d.ts +1 -1
  30. package/dist/modules/array.d.ts +1 -1
  31. package/dist/modules/async.d.ts +1 -1
  32. package/dist/modules/behavior.d.ts +1 -1
  33. package/dist/modules/browser.d.ts +1 -1
  34. package/dist/modules/composition.d.ts +1 -1
  35. package/dist/modules/contract.d.ts +1 -1
  36. package/dist/modules/core.d.ts +1 -1
  37. package/dist/modules/core.js +2 -0
  38. package/dist/modules/data.d.ts +1 -1
  39. package/dist/modules/ease.d.ts +1 -1
  40. package/dist/modules/format.d.ts +1 -1
  41. package/dist/modules/geo.d.ts +1 -1
  42. package/dist/modules/graph.d.ts +1 -1
  43. package/dist/modules/grid.d.ts +1 -1
  44. package/dist/modules/i18n.d.ts +17 -0
  45. package/dist/modules/i18n.js +22 -0
  46. package/dist/modules/index.d.ts +2 -1
  47. package/dist/modules/index.js +24 -1
  48. package/dist/modules/integration.d.ts +1 -1
  49. package/dist/modules/json.d.ts +1 -1
  50. package/dist/modules/llm.d.ts +1 -1
  51. package/dist/modules/math.d.ts +1 -1
  52. package/dist/modules/memory.d.ts +1 -1
  53. package/dist/modules/nn.d.ts +1 -1
  54. package/dist/modules/noise.d.ts +1 -1
  55. package/dist/modules/object.d.ts +1 -1
  56. package/dist/modules/os.d.ts +1 -1
  57. package/dist/modules/path.d.ts +1 -1
  58. package/dist/modules/prob.d.ts +1 -1
  59. package/dist/modules/session.d.ts +1 -1
  60. package/dist/modules/str.d.ts +1 -1
  61. package/dist/modules/tensor.d.ts +1 -1
  62. package/dist/modules/time.d.ts +1 -1
  63. package/dist/modules/trace.d.ts +1 -1
  64. package/dist/modules/train.d.ts +1 -1
  65. package/dist/modules/validate.d.ts +1 -1
  66. package/dist/modules/vector.d.ts +1 -1
  67. package/dist/modules/workspace.d.ts +1 -1
  68. package/dist/registry/factory-signatures.json +1 -1
  69. package/dist/registry.d.ts +10 -3
  70. package/dist/registry.js +31 -1
  71. package/dist/{types-DLx38UFZ.d.ts → types-Cdb321uM.d.ts} +9 -3
  72. package/i18n/ar.json +1 -0
  73. package/i18n/en.json +1 -0
  74. package/i18n/sl.json +1 -0
  75. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  {
2
- "$generated": "2026-10-02T10:40:25.872Z",
2
+ "$generated": "2026-10-03T12:41:28.438Z",
3
3
  "$source": "tools/almadar-pattern-sync/behaviors",
4
4
  "$package": "@almadar/std",
5
5
  "totalBehaviors": 443,
@@ -26079,6 +26079,19 @@
26079
26079
  ],
26080
26080
  "listenedEvents": [],
26081
26081
  "overridableConfigKeys": [
26082
+ {
26083
+ "key": "addPlacement",
26084
+ "type": "string",
26085
+ "default": "floating",
26086
+ "label": "Add button placement",
26087
+ "description": "Where the add-item button sits: 'floating' (default) pins a floating action button to the screen corner; 'inline' renders an ordinary Add button above the columns, for a board embedded in a card or panel.",
26088
+ "synonyms": "add button position, floating add, inline add, add item button placement. user phrases: 'put the add button inside the board' / 'no floating button' -> inline",
26089
+ "tier": "presentation",
26090
+ "enumValues": [
26091
+ "floating",
26092
+ "inline"
26093
+ ]
26094
+ },
26082
26095
  {
26083
26096
  "key": "boardLook",
26084
26097
  "type": "string",
@@ -26096,6 +26109,35 @@
26096
26109
  "type": "render-ui",
26097
26110
  "default": {
26098
26111
  "children": [
26112
+ [
26113
+ "if",
26114
+ [
26115
+ "=",
26116
+ "@config.addPlacement",
26117
+ "inline"
26118
+ ],
26119
+ {
26120
+ "children": [
26121
+ {
26122
+ "action": "ADD_CARD",
26123
+ "icon": "plus",
26124
+ "label": "Add item",
26125
+ "size": "sm",
26126
+ "type": "button",
26127
+ "variant": "secondary"
26128
+ }
26129
+ ],
26130
+ "direction": "horizontal",
26131
+ "gap": "sm",
26132
+ "justify": "end",
26133
+ "type": "stack"
26134
+ },
26135
+ {
26136
+ "children": [],
26137
+ "gap": "none",
26138
+ "type": "stack"
26139
+ }
26140
+ ],
26099
26141
  [
26100
26142
  "if",
26101
26143
  "@config.showHeader",
@@ -26296,13 +26338,26 @@
26296
26338
  ],
26297
26339
  "type": "data-grid"
26298
26340
  },
26299
- {
26300
- "action": "ADD_CARD",
26301
- "icon": "plus",
26302
- "label": "Add item",
26303
- "type": "floating-action-button",
26304
- "variant": "primary"
26305
- }
26341
+ [
26342
+ "if",
26343
+ [
26344
+ "=",
26345
+ "@config.addPlacement",
26346
+ "floating"
26347
+ ],
26348
+ {
26349
+ "action": "ADD_CARD",
26350
+ "icon": "plus",
26351
+ "label": "Add item",
26352
+ "type": "floating-action-button",
26353
+ "variant": "primary"
26354
+ },
26355
+ {
26356
+ "children": [],
26357
+ "gap": "none",
26358
+ "type": "stack"
26359
+ }
26360
+ ]
26306
26361
  ],
26307
26362
  "direction": "vertical",
26308
26363
  "gap": "md",
@@ -26645,6 +26700,35 @@
26645
26700
  "type": "render-ui",
26646
26701
  "default": {
26647
26702
  "children": [
26703
+ [
26704
+ "if",
26705
+ [
26706
+ "=",
26707
+ "@config.addPlacement",
26708
+ "inline"
26709
+ ],
26710
+ {
26711
+ "children": [
26712
+ {
26713
+ "action": "ADD_CARD",
26714
+ "icon": "plus",
26715
+ "label": "Add card",
26716
+ "size": "sm",
26717
+ "type": "button",
26718
+ "variant": "secondary"
26719
+ }
26720
+ ],
26721
+ "direction": "horizontal",
26722
+ "gap": "sm",
26723
+ "justify": "end",
26724
+ "type": "stack"
26725
+ },
26726
+ {
26727
+ "children": [],
26728
+ "gap": "none",
26729
+ "type": "stack"
26730
+ }
26731
+ ],
26648
26732
  [
26649
26733
  "if",
26650
26734
  "@config.showHeader",
@@ -26869,13 +26953,26 @@
26869
26953
  "scrollX": true,
26870
26954
  "type": "data-grid"
26871
26955
  },
26872
- {
26873
- "action": "ADD_CARD",
26874
- "icon": "plus",
26875
- "label": "Add card",
26876
- "type": "floating-action-button",
26877
- "variant": "primary"
26878
- }
26956
+ [
26957
+ "if",
26958
+ [
26959
+ "=",
26960
+ "@config.addPlacement",
26961
+ "floating"
26962
+ ],
26963
+ {
26964
+ "action": "ADD_CARD",
26965
+ "icon": "plus",
26966
+ "label": "Add card",
26967
+ "type": "floating-action-button",
26968
+ "variant": "primary"
26969
+ },
26970
+ {
26971
+ "children": [],
26972
+ "gap": "none",
26973
+ "type": "stack"
26974
+ }
26975
+ ]
26879
26976
  ],
26880
26977
  "className": "h-full",
26881
26978
  "direction": "vertical",
@@ -58881,7 +58978,7 @@
58881
58978
  "topic": "ui/core",
58882
58979
  "family": "ui/core",
58883
58980
  "layer": "UI Patterns",
58884
- "description": "std-site-header — the sticky top bar of a public website: brand (logo + name), navigation links with the current page marked (a link with children opens a dropdown), an optional language picker (std-language-picker: the same page in each language, default language at the root and the others under /<code>/), and an optional call-to-action button. On small screens the links fold into a menu opened by a toggle, with child links indented under their parent and the call-to-action button at the bottom. Links follow `href` (in-app path, #anchor, or absolute URL); the header action and the small-screen menu links also emit NAV_CLICKED { href, label }. Pick for marketing sites, docs portals and product websites; for signed-in app chrome use std-app-layout.",
58981
+ "description": "std-site-header — the sticky top bar of a public website: brand (logo + name, linking home when `homeHref` is set), navigation links with the current page marked (a link with children opens a dropdown), an optional light/dark toggle, an optional language picker (std-language-picker: the same page in each language, default language at the root and the others under /<code>/), and an optional call-to-action button. On small screens the links fold into a menu opened by a toggle, with child links indented under their parent and the call-to-action button at the bottom. Links follow `href` (in-app path, #anchor, or absolute URL); the header action and the small-screen menu links also emit NAV_CLICKED { href, label }. Pick for marketing sites, docs portals and product websites; for signed-in app chrome use std-app-layout.",
58885
58982
  "defaultOrbitalName": "SiteHeaderOrbital",
58886
58983
  "statePattern": "idle",
58887
58984
  "complexity": {
@@ -59283,6 +59380,16 @@
59283
59380
  {
59284
59381
  "actions": [
59285
59382
  "@trait.SiteHeaderLanguages",
59383
+ {
59384
+ "className": [
59385
+ "if",
59386
+ "@config.showThemeToggle",
59387
+ "",
59388
+ "hidden"
59389
+ ],
59390
+ "size": "sm",
59391
+ "type": "theme-toggle"
59392
+ },
59286
59393
  {
59287
59394
  "action": "NAV_LINK",
59288
59395
  "actionPayload": {
@@ -59306,6 +59413,7 @@
59306
59413
  "variant": "primary"
59307
59414
  }
59308
59415
  ],
59416
+ "brandHref": "@config.homeHref",
59309
59417
  "brandName": "@config.brandName",
59310
59418
  "className": "hidden lg:flex",
59311
59419
  "logoSrc": "@config.logoSrc",
@@ -59385,8 +59493,19 @@
59385
59493
  },
59386
59494
  {
59387
59495
  "actions": [
59388
- "@trait.SiteHeaderLanguages"
59496
+ "@trait.SiteHeaderLanguages",
59497
+ {
59498
+ "className": [
59499
+ "if",
59500
+ "@config.showThemeToggle",
59501
+ "",
59502
+ "hidden"
59503
+ ],
59504
+ "size": "sm",
59505
+ "type": "theme-toggle"
59506
+ }
59389
59507
  ],
59508
+ "brandHref": "@config.homeHref",
59390
59509
  "brandName": "@config.brandName",
59391
59510
  "className": "lg:hidden",
59392
59511
  "isMenuOpen": "@entity.menuOpen",
@@ -59580,6 +59699,15 @@
59580
59699
  "label": "Header body",
59581
59700
  "tier": "internal"
59582
59701
  },
59702
+ {
59703
+ "key": "homeHref",
59704
+ "type": "string",
59705
+ "default": "",
59706
+ "label": "Home link",
59707
+ "description": "Where the brand (logo + name) links to, usually the site's home page; empty leaves the brand unlinked",
59708
+ "synonyms": "logo link, home page, brand link",
59709
+ "tier": "presentation"
59710
+ },
59583
59711
  {
59584
59712
  "key": "languages",
59585
59713
  "type": "[SiteLanguage]",
@@ -59663,6 +59791,15 @@
59663
59791
  "label": "Logo image",
59664
59792
  "description": "Logo URL; empty shows the name only",
59665
59793
  "tier": "presentation"
59794
+ },
59795
+ {
59796
+ "key": "showThemeToggle",
59797
+ "type": "boolean",
59798
+ "default": false,
59799
+ "label": "Light/dark toggle",
59800
+ "description": "Show a button that switches the site between its light and dark mode",
59801
+ "synonyms": "dark mode, theme switch, color mode",
59802
+ "tier": "presentation"
59666
59803
  }
59667
59804
  ],
59668
59805
  "capabilities": [],
@@ -63957,7 +64094,8 @@
63957
64094
  },
63958
64095
  {
63959
64096
  "name": "docTagIds",
63960
- "type": "array"
64097
+ "type": "array",
64098
+ "default": []
63961
64099
  },
63962
64100
  {
63963
64101
  "name": "pendingTagName",
@@ -63966,7 +64104,8 @@
63966
64104
  },
63967
64105
  {
63968
64106
  "name": "pendingNames",
63969
- "type": "array"
64107
+ "type": "array",
64108
+ "default": []
63970
64109
  }
63971
64110
  ]
63972
64111
  },
@@ -161558,6 +161697,13 @@
161558
161697
  "synonyms": "aria-selected",
161559
161698
  "tier": "presentation"
161560
161699
  },
161700
+ {
161701
+ "key": "brandHref",
161702
+ "type": "string",
161703
+ "label": "Brand Href",
161704
+ "description": "Where the brand (logo + name) links to, usually the home page; empty leaves it unlinked",
161705
+ "tier": "presentation"
161706
+ },
161561
161707
  {
161562
161708
  "key": "brandName",
161563
161709
  "type": "string",
@@ -587,6 +587,11 @@ orbital BoardOrbital {
587
587
  @label "Group-by field"
588
588
  @description "Entity field whose value matches a column key — items are filtered into columns by it. Default 'stage'; set to 'status' (or any field) for entities that track state under a different name."
589
589
  @tier "presentation"
590
+ addPlacement : "floating" | "inline" = floating
591
+ @label "Add button placement"
592
+ @description "Where the add-item button sits: 'floating' (default) pins a floating action button to the screen corner; 'inline' renders an ordinary Add button above the columns, for a board embedded in a card or panel."
593
+ @synonyms "add button position, floating add, inline add, add item button placement. user phrases: 'put the add button inside the board' / 'no floating button' -> inline"
594
+ @tier "presentation"
590
595
  boardLook : "columns" | "kanban-classic" = columns
591
596
  @label "Board look"
592
597
  @description "Layer 3 body layout: default N-column data-grid ('columns'), or a Trello-style wide-column kanban with sticky column headers ('kanban-classic')."
@@ -647,7 +652,24 @@ orbital BoardOrbital {
647
652
  @description "Actions row of the open-card panel. Default is the Delete button only. Override to add consumer-wired actions — e.g. an Edit button with action: EDIT_CARD and actionPayload: { id: @entity.currentId, row: @entity.currentRow }, listened to by the organism's edit modal. Never leave a button here without a listener."
648
653
  @tier "presentation"
649
654
  bodyContent : render-ui = {
650
- children: [(if @config.showHeader {
655
+ children: [(if ["=", @config.addPlacement, "inline"] {
656
+ children: [{
657
+ action: ADD_CARD
658
+ icon: plus
659
+ label: "Add item"
660
+ size: sm
661
+ type: button
662
+ variant: secondary
663
+ }]
664
+ direction: horizontal
665
+ gap: sm
666
+ justify: end
667
+ type: stack
668
+ } {
669
+ children: []
670
+ gap: none
671
+ type: stack
672
+ }), (if @config.showHeader {
651
673
  children: [{
652
674
  align: center
653
675
  children: [{ name: kanban-square, size: lg, type: icon }, {
@@ -770,13 +792,17 @@ orbital BoardOrbital {
770
792
  type: card
771
793
  })
772
794
  type: data-grid
773
- }, {
795
+ }, (if ["=", @config.addPlacement, "floating"] {
774
796
  action: ADD_CARD
775
797
  icon: plus
776
798
  label: "Add item"
777
799
  type: floating-action-button
778
800
  variant: primary
779
- }]
801
+ } {
802
+ children: []
803
+ gap: none
804
+ type: stack
805
+ })]
780
806
  direction: vertical
781
807
  gap: md
782
808
  type: stack
@@ -785,7 +811,24 @@ orbital BoardOrbital {
785
811
  @description "Render-ui SExpr rendered after the board loads for boardLook='columns' — the canonical column data-grid with nested per-column data-lists. boardLook='kanban-classic' renders kanbanClassicBodyContent instead; both share this trait's state machine, emits, and listens."
786
812
  @tier "internal"
787
813
  kanbanClassicBodyContent : render-ui = {
788
- children: [(if @config.showHeader {
814
+ children: [(if ["=", @config.addPlacement, "inline"] {
815
+ children: [{
816
+ action: ADD_CARD
817
+ icon: plus
818
+ label: "Add card"
819
+ size: sm
820
+ type: button
821
+ variant: secondary
822
+ }]
823
+ direction: horizontal
824
+ gap: sm
825
+ justify: end
826
+ type: stack
827
+ } {
828
+ children: []
829
+ gap: none
830
+ type: stack
831
+ }), (if @config.showHeader {
789
832
  children: [{
790
833
  align: center
791
834
  children: [{ name: kanban-square, size: xl, type: icon }, {
@@ -931,13 +974,17 @@ orbital BoardOrbital {
931
974
  })
932
975
  scrollX: true
933
976
  type: data-grid
934
- }, {
977
+ }, (if ["=", @config.addPlacement, "floating"] {
935
978
  action: ADD_CARD
936
979
  icon: plus
937
980
  label: "Add card"
938
981
  type: floating-action-button
939
982
  variant: primary
940
- }]
983
+ } {
984
+ children: []
985
+ gap: none
986
+ type: stack
987
+ })]
941
988
  className: h-full
942
989
  direction: vertical
943
990
  gap: md
@@ -1,5 +1,5 @@
1
1
  app std-site-header "1.0.0"
2
- "std-site-header — the sticky top bar of a public website: brand (logo + name), navigation links with the current page marked (a link with children opens a dropdown), an optional language picker (std-language-picker: the same page in each language, default language at the root and the others under /<code>/), and an optional call-to-action button. On small screens the links fold into a menu opened by a toggle, with child links indented under their parent and the call-to-action button at the bottom. Links follow `href` (in-app path, #anchor, or absolute URL); the header action and the small-screen menu links also emit NAV_CLICKED { href, label }. Pick for marketing sites, docs portals and product websites; for signed-in app chrome use std-app-layout."
2
+ "std-site-header — the sticky top bar of a public website: brand (logo + name, linking home when `homeHref` is set), navigation links with the current page marked (a link with children opens a dropdown), an optional light/dark toggle, an optional language picker (std-language-picker: the same page in each language, default language at the root and the others under /<code>/), and an optional call-to-action button. On small screens the links fold into a menu opened by a toggle, with child links indented under their parent and the call-to-action button at the bottom. Links follow `href` (in-app path, #anchor, or absolute URL); the header action and the small-screen menu links also emit NAV_CLICKED { href, label }. Pick for marketing sites, docs portals and product websites; for signed-in app chrome use std-app-layout."
3
3
  type SiteNavLink = { label : string!, href : string!, children : [SiteNavLink] }
4
4
  type SiteLanguage = { code : string!, label : string!, href : string! }
5
5
  orbital SiteHeaderOrbital {
@@ -54,6 +54,11 @@ orbital SiteHeaderOrbital {
54
54
  @label "Logo image"
55
55
  @description "Logo URL; empty shows the name only"
56
56
  @tier "presentation"
57
+ homeHref : string = ""
58
+ @label "Home link"
59
+ @description "Where the brand (logo + name) links to, usually the site's home page; empty leaves the brand unlinked"
60
+ @synonyms "logo link, home page, brand link"
61
+ @tier "presentation"
57
62
  links : [SiteNavLink] = [{ label: "Features", href: "/features" }, { label: "Pricing", href: "/pricing" }, { label: "About", href: "/about" }]
58
63
  @label "Navigation links"
59
64
  @synonyms "menu, nav items, top navigation"
@@ -67,6 +72,11 @@ orbital SiteHeaderOrbital {
67
72
  @description "Every language this page exists in, each named in its own language, with the href of THIS page in that language (default language at the root, others under /<code>/). Empty hides the language picker."
68
73
  @synonyms "locales, translations, language switcher, i18n"
69
74
  @tier "presentation"
75
+ showThemeToggle : boolean = false
76
+ @label "Light/dark toggle"
77
+ @description "Show a button that switches the site between its light and dark mode"
78
+ @synonyms "dark mode, theme switch, color mode"
79
+ @tier "presentation"
70
80
  currentLanguage : string = "en"
71
81
  @label "Current language"
72
82
  @description "The code of the language this page is in"
@@ -92,6 +102,7 @@ orbital SiteHeaderOrbital {
92
102
  showMenuToggle: false
93
103
  brandName: @config.brandName
94
104
  logoSrc: @config.logoSrc
105
+ brandHref: @config.homeHref
95
106
  className: "hidden lg:flex"
96
107
  navigationItems: (array/map @config.links (fn entry {
97
108
  label: (object/get @entry label "")
@@ -103,7 +114,7 @@ orbital SiteHeaderOrbital {
103
114
  active: (== (object/get @child href "") @config.currentPath)
104
115
  }))
105
116
  }))
106
- actions: [@trait.SiteHeaderLanguages, {
117
+ actions: [@trait.SiteHeaderLanguages, { type: theme-toggle, size: sm, className: (if @config.showThemeToggle "" hidden) }, {
107
118
  type: button
108
119
  label: @config.actionLabel
109
120
  href: @config.actionHref
@@ -122,8 +133,9 @@ orbital SiteHeaderOrbital {
122
133
  onMenuToggle: MENU_TOGGLE
123
134
  brandName: @config.brandName
124
135
  logoSrc: @config.logoSrc
136
+ brandHref: @config.homeHref
125
137
  className: "lg:hidden"
126
- actions: [@trait.SiteHeaderLanguages]
138
+ actions: [@trait.SiteHeaderLanguages, { type: theme-toggle, size: sm, className: (if @config.showThemeToggle "" hidden) }]
127
139
  }, {
128
140
  type: stack
129
141
  direction: vertical
@@ -19,9 +19,9 @@ orbital TagStripOrbital {
19
19
  createdAt : string = ""
20
20
  pendingId : string = ""
21
21
  docId : string @intrinsic @description "The open record's id, stashed at SHOW_TAG_STRIP so commits know which row to update." @synonyms "record id, scope id" = ""
22
- docTagIds : [string] @intrinsic @description "The open record's current tag ids, stashed at SHOW_TAG_STRIP for membership tests." @synonyms "attached tags, current tags"
22
+ docTagIds : [string] @intrinsic @description "The open record's current tag ids, stashed at SHOW_TAG_STRIP for membership tests." @synonyms "attached tags, current tags" = []
23
23
  pendingTagName : string @intrinsic @description "The tag name typed or clicked on add, held across the resolve fetch." @synonyms "typed tag, adding tag" = ""
24
- pendingNames : [string] @intrinsic @description "The chip names remaining after a remove, held across the resolve fetch." @synonyms "remaining tags, kept names"
24
+ pendingNames : [string] @intrinsic @description "The chip names remaining after a remove, held across the resolve fetch." @synonyms "remaining tags, kept names" = []
25
25
  }
26
26
 
27
27
  trait TagStrip -> @rebindable StripTag [interaction, collection] {
@@ -5,7 +5,7 @@ orbital TagTaxonomyOrbital {
5
5
 
6
6
  type TagLoadFailed = Event { error : string, code : string } "Fired when the tag collection fails to load"
7
7
 
8
- type TagSelected = Event { tagId : string! } "Fired when a tag is selected to drill into its children"
8
+ type TagSelected = Event { tagId : Tag.id! } "Fired when a tag is selected to drill into its children"
9
9
 
10
10
  type TagCreated = Event Tag "Fired after a new tag row persists — the payload IS the created row (flat: ?id, ?name, ?parentId)"
11
11
 
@@ -476,7 +476,7 @@ orbital TagTaxonomyOrbital {
476
476
 
477
477
  emits {
478
478
  SELECT_TAG {
479
- tagId : string!
479
+ tagId : Tag.id!
480
480
  }
481
481
  @description "Signals a tag has been chosen for navigation."
482
482
  @synonyms "choose, pick, activate, navigate"
@@ -495,7 +495,7 @@ orbital TagTaxonomyOrbital {
495
495
  @synonyms "error, failed, problem, issue"
496
496
  @tier "internal"
497
497
  TagSelected {
498
- tagId : string!
498
+ tagId : Tag.id!
499
499
  }
500
500
  @description "Signals a tag has been chosen for further exploration."
501
501
  @synonyms "chosen, picked, activated, highlighted"
@@ -512,7 +512,7 @@ orbital TagTaxonomyOrbital {
512
512
  @synonyms "cancel, back"
513
513
  @tier "internal"
514
514
  LEVEL_RELOAD {
515
- tagId : string
515
+ tagId : Tag.id
516
516
  }
517
517
  @description "Internal hop that refetches the open level after the new-category form closes (a fetch filter cannot read trait state, so the level travels by payload)."
518
518
  @synonyms "reload level, refresh"
@@ -532,7 +532,7 @@ orbital TagTaxonomyOrbital {
532
532
 
533
533
  listens {
534
534
  SELECT_TAG {
535
- tagId : string!
535
+ tagId : Tag.id!
536
536
  }
537
537
  @description "A tag in the taxonomy was selected for navigation."
538
538
  @synonyms "choose, pick, activate, navigate"
@@ -551,7 +551,7 @@ orbital TagTaxonomyOrbital {
551
551
  @synonyms "error, failure, load failed"
552
552
  @tier "internal"
553
553
  TagSelected {
554
- tagId : string!
554
+ tagId : Tag.id!
555
555
  }
556
556
  @description "A tag in the taxonomy has been chosen by the user."
557
557
  @synonyms "chosen, picked, activated, selected"
@@ -571,7 +571,7 @@ orbital TagTaxonomyOrbital {
571
571
  @synonyms "cancel, back"
572
572
  @tier "internal"
573
573
  LEVEL_RELOAD {
574
- tagId : string
574
+ tagId : Tag.id
575
575
  }
576
576
  @description "Refetch the open level."
577
577
  @synonyms "reload level, refresh"
@@ -168,7 +168,7 @@ orbital RevisionOrbital {
168
168
  type: typography
169
169
  variant: caption
170
170
  }, {
171
- content: @entity.createdAt
171
+ content: (time/format (time/parse @entity.createdAt) "MMM D, YYYY")
172
172
  type: typography
173
173
  variant: body
174
174
  }]
@@ -50,6 +50,7 @@ orbital HeaderOrbital {
50
50
  variant: @config.variant
51
51
  look: @config.look
52
52
  onLogoClick: @config.onLogoClick
53
+ brandHref: @config.brandHref
53
54
  className: @config.className
54
55
  isLoading: @config.isLoading
55
56
  error: @config.error
@@ -164,6 +165,10 @@ orbital HeaderOrbital {
164
165
  @label "On Logo Click"
165
166
  @description "Callback when logo/brand is clicked"
166
167
  @tier "presentation"
168
+ brandHref : string
169
+ @label "Brand Href"
170
+ @description "Where the brand (logo + name) links to, usually the home page; empty leaves it unlinked"
171
+ @tier "presentation"
167
172
  className : string
168
173
  @label "Class Name"
169
174
  @description "Additional CSS classes"