@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.
- package/behaviors/behaviors-registry.json +165 -19
- package/behaviors/lolo/ui/core/atoms/std-board.lolo +53 -6
- package/behaviors/lolo/ui/core/atoms/std-site-header.lolo +15 -3
- package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +7 -7
- package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-header.lolo +5 -0
- package/behaviors/lolo-behavior-contracts.json +1 -1
- package/behaviors/registry/factory-signatures.json +1 -1
- package/behaviors/registry/ui/core/atoms/std-board.orb +110 -14
- package/behaviors/registry/ui/core/atoms/std-site-header.orb +40 -2
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +2 -0
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +24 -0
- package/behaviors/registry/ui/core/atoms/std-version-history.orb +8 -1
- package/behaviors/registry/ui/core/molecules/ui-header.orb +7 -0
- package/canonical-operators.json +35 -1
- package/dist/behaviors/exports-reader.js +142 -15
- package/dist/behaviors/functions/index.d.ts +11 -4
- package/dist/behaviors/functions/index.js +142 -15
- package/dist/behaviors/index.js +142 -15
- package/dist/behaviors/query.js +142 -15
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +3 -3
- package/dist/behaviors-registry.json +165 -19
- package/dist/index.d.ts +3 -3
- package/dist/index.js +181 -16
- package/dist/knob-embeddings.hash.json +3 -3
- package/dist/knob-embeddings.json +17 -1
- package/dist/modules/anim.d.ts +1 -1
- package/dist/modules/array.d.ts +1 -1
- package/dist/modules/async.d.ts +1 -1
- package/dist/modules/behavior.d.ts +1 -1
- package/dist/modules/browser.d.ts +1 -1
- package/dist/modules/composition.d.ts +1 -1
- package/dist/modules/contract.d.ts +1 -1
- package/dist/modules/core.d.ts +1 -1
- package/dist/modules/core.js +2 -0
- package/dist/modules/data.d.ts +1 -1
- package/dist/modules/ease.d.ts +1 -1
- package/dist/modules/format.d.ts +1 -1
- package/dist/modules/geo.d.ts +1 -1
- package/dist/modules/graph.d.ts +1 -1
- package/dist/modules/grid.d.ts +1 -1
- package/dist/modules/i18n.d.ts +17 -0
- package/dist/modules/i18n.js +22 -0
- package/dist/modules/index.d.ts +2 -1
- package/dist/modules/index.js +24 -1
- package/dist/modules/integration.d.ts +1 -1
- package/dist/modules/json.d.ts +1 -1
- package/dist/modules/llm.d.ts +1 -1
- package/dist/modules/math.d.ts +1 -1
- package/dist/modules/memory.d.ts +1 -1
- package/dist/modules/nn.d.ts +1 -1
- package/dist/modules/noise.d.ts +1 -1
- package/dist/modules/object.d.ts +1 -1
- package/dist/modules/os.d.ts +1 -1
- package/dist/modules/path.d.ts +1 -1
- package/dist/modules/prob.d.ts +1 -1
- package/dist/modules/session.d.ts +1 -1
- package/dist/modules/str.d.ts +1 -1
- package/dist/modules/tensor.d.ts +1 -1
- package/dist/modules/time.d.ts +1 -1
- package/dist/modules/trace.d.ts +1 -1
- package/dist/modules/train.d.ts +1 -1
- package/dist/modules/validate.d.ts +1 -1
- package/dist/modules/vector.d.ts +1 -1
- package/dist/modules/workspace.d.ts +1 -1
- package/dist/registry/factory-signatures.json +1 -1
- package/dist/registry.d.ts +10 -3
- package/dist/registry.js +31 -1
- package/dist/{types-DLx38UFZ.d.ts → types-Cdb321uM.d.ts} +9 -3
- package/i18n/ar.json +1 -0
- package/i18n/en.json +1 -0
- package/i18n/sl.json +1 -0
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$generated": "2026-10-
|
|
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
|
-
"
|
|
26301
|
-
|
|
26302
|
-
|
|
26303
|
-
|
|
26304
|
-
|
|
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
|
-
"
|
|
26874
|
-
|
|
26875
|
-
|
|
26876
|
-
|
|
26877
|
-
|
|
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.
|
|
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.
|
|
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 :
|
|
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 :
|
|
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 :
|
|
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 :
|
|
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 :
|
|
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 :
|
|
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 :
|
|
574
|
+
tagId : Tag.id
|
|
575
575
|
}
|
|
576
576
|
@description "Refetch the open level."
|
|
577
577
|
@synonyms "reload level, refresh"
|
|
@@ -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"
|