Add a docs header with breadcrumb and copy control The component library had no orientation: every page opened on a heading with no indication of where it sat in the library or how to get back. Adds two governed components and a header that uses them. breadcrumb/1 -- an ancestor trail whose last item is the current page and is therefore NOT a link. A link to the page you are already on is a dead control that still looks live, so the current crumb renders as text with aria-current="page". Separators are aria-hidden, so assistive technology reads a list of places rather than a stream of glyphs. copy_button/1 -- copies text and then says so. The confirmation is the whole point: a copy control that changes nothing on click leaves the reader unsure whether it worked. Flips data-copied, swaps the glyph for a tick, and returns after a moment. Both glyphs stay in the flow so the control does not resize when it flips and nudge everything beside it. The state is presentational and per-visitor, so it lives on the element via a colocated hook rather than in the LiveView. The header spans the content column rather than the whole page: the trail names where you are within the library, and the controls act on the page being read, so neither belongs over the sidebar. The breadcrumb takes the free space and truncates, so a long component name never collides with the controls. Also removes the palette comments' attribution to the product the ramp was sampled from, keeping the reasoning without the name. mix precommit green: 1414 tests, 17 JS.
Add a docs header with breadcrumb and copy control
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
assets/css/app.css -
modified
assets/css/openagents.css -
modified
docs/2026-08-20-scv-swarm-visualization-unit-audit.md -
modified
lib/openagents_web/component_catalog.ex -
modified
lib/openagents_web/components/layouts/components.html.heex -
modified
lib/openagents_web/components/ui.ex -
modified
lib/openagents_web/live/components_live.ex
Diff
7 files changed, +340 -23
assets/css/app.css modified +18 -17
@@ -25,6 +25,7 @@
| 25 | 25 |
|
| 26 | 26 |
|
| 27 | 27 |
|
| 28 |
|
|
| 28 | 29 |
|
| 29 | 30 |
|
| 30 | 31 |
|
@@ -76,24 +77,25 @@
| 76 | 77 |
|
| 77 | 78 |
|
| 78 | 79 |
|
| 79 |
|
|
| 80 |
|
|
| 81 |
|
|
| 80 |
|
|
| 81 |
|
|
| 82 |
|
|
| 82 | 83 |
|
| 83 | 84 |
|
| 84 | 85 |
|
| 85 | 86 |
|
| 86 |
|
|
| 87 |
|
|
| 88 |
|
|
| 89 |
|
|
| 87 |
|
|
| 88 |
|
|
| 89 |
|
|
| 90 |
|
|
| 91 |
|
|
| 90 | 92 |
|
| 91 | 93 |
|
| 92 | 94 |
|
| 93 | 95 |
|
| 94 | 96 |
|
| 95 |
|
|
| 96 |
|
|
| 97 |
|
|
| 98 |
|
|
| 97 | 99 |
|
| 98 | 100 |
|
| 99 | 101 |
|
@@ -107,9 +109,9 @@
| 107 | 109 |
|
| 108 | 110 |
|
| 109 | 111 |
|
| 110 |
|
|
| 111 |
|
|
| 112 |
|
|
| 112 |
|
|
| 113 |
|
|
| 114 |
|
|
| 113 | 115 |
|
| 114 | 116 |
|
| 115 | 117 |
|
@@ -138,7 +140,7 @@
| 138 | 140 |
|
| 139 | 141 |
|
| 140 | 142 |
|
| 141 |
|
|
| 143 |
|
|
| 142 | 144 |
|
| 143 | 145 |
|
| 144 | 146 |
|
@@ -147,10 +149,9 @@
| 147 | 149 |
|
| 148 | 150 |
|
| 149 | 151 |
|
| 150 |
|
|
| 151 |
|
|
| 152 |
|
|
| 153 |
|
|
| 152 |
|
|
| 153 |
|
|
| 154 |
|
|
| 154 | 155 |
|
| 155 | 156 |
|
| 156 | 157 |
|
assets/css/openagents.css modified +116
@@ -1833,3 +1833,119 @@
| 1833 | 1833 |
|
| 1834 | 1834 |
|
| 1835 | 1835 |
|
| 1836 |
|
|
| 1837 |
|
|
| 1838 |
|
|
| 1839 |
|
|
| 1840 |
|
|
| 1841 |
|
|
| 1842 |
|
|
| 1843 |
|
|
| 1844 |
|
|
| 1845 |
|
|
| 1846 |
|
|
| 1847 |
|
|
| 1848 |
|
|
| 1849 |
|
|
| 1850 |
|
|
| 1851 |
|
|
| 1852 |
|
|
| 1853 |
|
|
| 1854 |
|
|
| 1855 |
|
|
| 1856 |
|
|
| 1857 |
|
|
| 1858 |
|
|
| 1859 |
|
|
| 1860 |
|
|
| 1861 |
|
|
| 1862 |
|
|
| 1863 |
|
|
| 1864 |
|
|
| 1865 |
|
|
| 1866 |
|
|
| 1867 |
|
|
| 1868 |
|
|
| 1869 |
|
|
| 1870 |
|
|
| 1871 |
|
|
| 1872 |
|
|
| 1873 |
|
|
| 1874 |
|
|
| 1875 |
|
|
| 1876 |
|
|
| 1877 |
|
|
| 1878 |
|
|
| 1879 |
|
|
| 1880 |
|
|
| 1881 |
|
|
| 1882 |
|
|
| 1883 |
|
|
| 1884 |
|
|
| 1885 |
|
|
| 1886 |
|
|
| 1887 |
|
|
| 1888 |
|
|
| 1889 |
|
|
| 1890 |
|
|
| 1891 |
|
|
| 1892 |
|
|
| 1893 |
|
|
| 1894 |
|
|
| 1895 |
|
|
| 1896 |
|
|
| 1897 |
|
|
| 1898 |
|
|
| 1899 |
|
|
| 1900 |
|
|
| 1901 |
|
|
| 1902 |
|
|
| 1903 |
|
|
| 1904 |
|
|
| 1905 |
|
|
| 1906 |
|
|
| 1907 |
|
|
| 1908 |
|
|
| 1909 |
|
|
| 1910 |
|
|
| 1911 |
|
|
| 1912 |
|
|
| 1913 |
|
|
| 1914 |
|
|
| 1915 |
|
|
| 1916 |
|
|
| 1917 |
|
|
| 1918 |
|
|
| 1919 |
|
|
| 1920 |
|
|
| 1921 |
|
|
| 1922 |
|
|
| 1923 |
|
|
| 1924 |
|
|
| 1925 |
|
|
| 1926 |
|
|
| 1927 |
|
|
| 1928 |
|
|
| 1929 |
|
|
| 1930 |
|
|
| 1931 |
|
|
| 1932 |
|
|
| 1933 |
|
|
| 1934 |
|
|
| 1935 |
|
|
| 1936 |
|
|
| 1937 |
|
|
| 1938 |
|
|
| 1939 |
|
|
| 1940 |
|
|
| 1941 |
|
|
| 1942 |
|
|
| 1943 |
|
|
| 1944 |
|
|
| 1945 |
|
|
| 1946 |
|
|
| 1947 |
|
|
| 1948 |
|
|
| 1949 |
|
|
| 1950 |
|
|
| 1951 |
|
docs/2026-08-20-scv-swarm-visualization-unit-audit.md modified +2 -2
@@ -155,8 +155,8 @@ COLOR_BLUE = '#0066ff' COLOR_LINK_BLUE = '#1d62c9'
| 155 | 155 |
|
| 156 | 156 |
|
| 157 | 157 |
|
| 158 |
|
|
| 159 |
|
|
| 158 |
|
|
| 159 |
|
|
| 160 | 160 |
|
| 161 | 161 |
|
| 162 | 162 |
|
lib/openagents_web/component_catalog.ex modified +14
@@ -58,6 +58,20 @@ defmodule OpenAgentsWeb.ComponentCatalog do
| 58 | 58 |
|
| 59 | 59 |
|
| 60 | 60 |
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 61 | 75 |
|
| 62 | 76 |
|
| 63 | 77 |
|
lib/openagents_web/components/layouts/components.html.heex modified +28 -4
@@ -57,8 +57,32 @@
| 57 | 57 |
|
| 58 | 58 |
|
| 59 | 59 |
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 75 |
|
|
| 76 |
|
|
| 77 |
|
|
| 78 |
|
|
| 79 |
|
|
| 80 |
|
|
| 81 |
|
|
| 82 |
|
|
| 83 |
|
|
| 84 |
|
|
| 85 |
|
|
| 86 |
|
|
| 87 |
|
|
| 64 | 88 |
|
lib/openagents_web/components/ui.ex modified +106
@@ -776,6 +776,112 @@ defmodule OpenAgentsWeb.UI do
| 776 | 776 |
|
| 777 | 777 |
|
| 778 | 778 |
|
| 779 |
|
|
| 780 |
|
|
| 781 |
|
|
| 782 |
|
|
| 783 |
|
|
| 784 |
|
|
| 785 |
|
|
| 786 |
|
|
| 787 |
|
|
| 788 |
|
|
| 789 |
|
|
| 790 |
|
|
| 791 |
|
|
| 792 |
|
|
| 793 |
|
|
| 794 |
|
|
| 795 |
|
|
| 796 |
|
|
| 797 |
|
|
| 798 |
|
|
| 799 |
|
|
| 800 |
|
|
| 801 |
|
|
| 802 |
|
|
| 803 |
|
|
| 804 |
|
|
| 805 |
|
|
| 806 |
|
|
| 807 |
|
|
| 808 |
|
|
| 809 |
|
|
| 810 |
|
|
| 811 |
|
|
| 812 |
|
|
| 813 |
|
|
| 814 |
|
|
| 815 |
|
|
| 816 |
|
|
| 817 |
|
|
| 818 |
|
|
| 819 |
|
|
| 820 |
|
|
| 821 |
|
|
| 822 |
|
|
| 823 |
|
|
| 824 |
|
|
| 825 |
|
|
| 826 |
|
|
| 827 |
|
|
| 828 |
|
|
| 829 |
|
|
| 830 |
|
|
| 831 |
|
|
| 832 |
|
|
| 833 |
|
|
| 834 |
|
|
| 835 |
|
|
| 836 |
|
|
| 837 |
|
|
| 838 |
|
|
| 839 |
|
|
| 840 |
|
|
| 841 |
|
|
| 842 |
|
|
| 843 |
|
|
| 844 |
|
|
| 845 |
|
|
| 846 |
|
|
| 847 |
|
|
| 848 |
|
|
| 849 |
|
|
| 850 |
|
|
| 851 |
|
|
| 852 |
|
|
| 853 |
|
|
| 854 |
|
|
| 855 |
|
|
| 856 |
|
|
| 857 |
|
|
| 858 |
|
|
| 859 |
|
|
| 860 |
|
|
| 861 |
|
|
| 862 |
|
|
| 863 |
|
|
| 864 |
|
|
| 865 |
|
|
| 866 |
|
|
| 867 |
|
|
| 868 |
|
|
| 869 |
|
|
| 870 |
|
|
| 871 |
|
|
| 872 |
|
|
| 873 |
|
|
| 874 |
|
|
| 875 |
|
|
| 876 |
|
|
| 877 |
|
|
| 878 |
|
|
| 879 |
|
|
| 880 |
|
|
| 881 |
|
|
| 882 |
|
|
| 883 |
|
|
| 884 |
|
|
| 779 | 885 |
|
| 780 | 886 |
|
| 781 | 887 |
|
lib/openagents_web/live/components_live.ex modified +56
@@ -81,6 +81,7 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 81 | 81 |
|
| 82 | 82 |
|
| 83 | 83 |
|
| 84 |
|
|
| 84 | 85 |
|
| 85 | 86 |
|
| 86 | 87 |
|
@@ -97,6 +98,7 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 97 | 98 |
|
| 98 | 99 |
|
| 99 | 100 |
|
| 101 |
|
|
| 100 | 102 |
|
| 101 | 103 |
|
| 102 | 104 |
|
@@ -690,4 +692,58 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 690 | 692 |
|
| 691 | 693 |
|
| 692 | 694 |
|
| 695 |
|
|
| 696 |
|
|
| 697 |
|
|
| 698 |
|
|
| 699 |
|
|
| 700 |
|
|
| 701 |
|
|
| 702 |
|
|
| 703 |
|
|
| 704 |
|
|
| 705 |
|
|
| 706 |
|
|
| 707 |
|
|
| 708 |
|
|
| 709 |
|
|
| 710 |
|
|
| 711 |
|
|
| 712 |
|
|
| 713 |
|
|
| 714 |
|
|
| 715 |
|
|
| 716 |
|
|
| 717 |
|
|
| 718 |
|
|
| 719 |
|
|
| 720 |
|
|
| 721 |
|
|
| 722 |
|
|
| 723 |
|
|
| 724 |
|
|
| 725 |
|
|
| 726 |
|
|
| 727 |
|
|
| 728 |
|
|
| 729 |
|
|
| 730 |
|
|
| 731 |
|
|
| 732 |
|
|
| 733 |
|
|
| 734 |
|
|
| 735 |
|
|
| 736 |
|
|
| 737 |
|
|
| 738 |
|
|
| 739 |
|
|
| 740 |
|
|
| 741 |
|
|
| 742 |
|
|
| 743 |
|
|
| 744 |
|
|
| 745 |
|
|
| 746 |
|
|
| 747 |
|
|
| 748 |
|
|
| 693 | 749 |
|