comparison docs/logo_generation.jl @ 1862:2c63ebc38b79 feature/documenter_logo

Clean up notebook
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 20 Jan 2025 15:40:56 +0100
parents 34970ef73e28
children
comparison
equal deleted inserted replaced
1861:34970ef73e28 1862:2c63ebc38b79
1 ### A Pluto.jl notebook ### 1 ### A Pluto.jl notebook ###
2 # v0.20.3 2 # v0.20.3
3 3
4 using Markdown 4 using Markdown
5 using InteractiveUtils 5 using InteractiveUtils
6
7 # This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error).
8 macro bind(def, element)
9 #! format: off
10 quote
11 local iv = try Base.loaded_modules[Base.PkgId(Base.UUID("6e696c72-6542-2067-7265-42206c756150"), "AbstractPlutoDingetjes")].Bonds.initial_value catch; b -> missing; end
12 local el = $(esc(element))
13 global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : iv(el)
14 el
15 end
16 #! format: on
17 end
6 18
7 # ╔═╡ e2c959c4-d2b7-11ef-0138-9761d4b6a434 19 # ╔═╡ e2c959c4-d2b7-11ef-0138-9761d4b6a434
8 begin 20 begin
9 using CairoMakie 21 using CairoMakie
10 using WGLMakie 22 using WGLMakie
11 using Colors 23 using Colors
24 using PlutoUI
12 25
13 WGLMakie.activate!() 26 WGLMakie.activate!()
14 # CairoMakie.activate!()
15 end 27 end
28
29 # ╔═╡ 61d6e5d8-ced5-4fe9-a375-bda329304a43
30 md"""
31 # Logo generation
32 This notebook generates the .svg containing the logo for the documentation of Diffinitive.jl.
33 """
34
35 # ╔═╡ 86bde2a1-8d55-47a7-bd8a-69d74e6a2958
36 md"""
37 ## Parameters
38 """
16 39
17 # ╔═╡ 8cb161ab-8b04-4744-86f6-b61f169e1368 40 # ╔═╡ 8cb161ab-8b04-4744-86f6-b61f169e1368
18 begin 41 begin
19 const R = 0.6 # Length of spokes 42 const R = 0.6 # Length of spokes
20 const d = 0.5 # Diameter of balls 43 const d = 0.5 # Diameter of balls
21 44
22 const spokewidth = 15 45 const spokewidth = 15
23 const strokewidth = 12 46 const strokewidth = 12
24 end; 47 end;
25 48
49 # ╔═╡ 17e62a16-580b-4ec5-88f8-9b73049f6ff9
50 logocolors = Colors.JULIA_LOGO_COLORS
51
52 # ╔═╡ 24b4144b-4ee4-4285-9926-217964084fcf
53 md"""
54 ## The logo
55 """
56
57 # ╔═╡ 292bb633-8409-4bb9-be69-fa2a5c34f441
58 begin
59 debug_checkbox = @bind debug CheckBox()
60
61
62 md"""
63 Debug mode: $debug_checkbox
64 """
65 end
66
67 # ╔═╡ 4821f7a0-d4fd-4b28-88cb-fa6745aeccc3
68 md"""
69 ### Saving to file
70 """
71
26 # ╔═╡ ddb3dc44-5e7b-4b36-878b-cfc7eba8f18b 72 # ╔═╡ ddb3dc44-5e7b-4b36-878b-cfc7eba8f18b
27 pwd() 73 pwd()
28 74
29 # ╔═╡ 17e62a16-580b-4ec5-88f8-9b73049f6ff9 75 # ╔═╡ e7ae1f66-06bd-4cc6-be23-2932383dd579
30 logocolors = Colors.JULIA_LOGO_COLORS 76 md"""
31 77 ## Specification
32 # ╔═╡ d810c823-b111-46ab-84fe-83e5b738d18d 78 """
33 polar(r,θ) = (r*cos(θ), r*sin(θ)) 79
34 80 # ╔═╡ d6077592-27b7-48ab-bb76-c0d9b5244253
35 # ╔═╡ 233d0556-1cae-4156-8239-2f7e01ac32c6 81 md"""
36 function limits(R,d) 82 ### Figure setup
37 θ = π/6 83 """
38
39 Δx_spoke = R*cos(π/6)
40 Δy_spoke = R*sin(π/6)
41 xlim = (-(Δx_spoke+d/2), Δx_spoke+d/2)
42 ylim = (-(Δy_spoke+d/2), R + d/2)
43
44 return (xlim, ylim)
45 end
46 84
47 # ╔═╡ 8c50ead2-0fd1-4190-9776-d233bef513e0 85 # ╔═╡ 8c50ead2-0fd1-4190-9776-d233bef513e0
48 function deactivate_all_interaction!(ax) 86 function deactivate_all_interaction!(ax)
49 deactivate_interaction!(ax, :dragpan) 87 deactivate_interaction!(ax, :dragpan)
50 deactivate_interaction!(ax, :scrollzoom) 88 deactivate_interaction!(ax, :scrollzoom)
55 function hide_coordinate_system!(ax) 93 function hide_coordinate_system!(ax)
56 hidespines!(ax) 94 hidespines!(ax)
57 hidedecorations!(ax) 95 hidedecorations!(ax)
58 end 96 end
59 97
98 # ╔═╡ 376b5f3c-508e-4677-8b96-3c75b8cd3443
99 md"""
100 ## Misc. functions
101 """
102
103 # ╔═╡ d810c823-b111-46ab-84fe-83e5b738d18d
104 polar(r,θ) = (r*cos(θ), r*sin(θ))
105
106 # ╔═╡ 233d0556-1cae-4156-8239-2f7e01ac32c6
107 function limits(R,d)
108 θ = π/6
109
110 Δx_spoke = R*cos(π/6)
111 Δy_spoke = R*sin(π/6)
112 xlim = (-(Δx_spoke+d/2), Δx_spoke+d/2)
113 ylim = (-(Δy_spoke+d/2), R + d/2)
114
115 return (xlim, ylim)
116 end
117
60 # ╔═╡ 7a580af5-a466-4d6e-bdb3-b0ebcecac802 118 # ╔═╡ 7a580af5-a466-4d6e-bdb3-b0ebcecac802
61 function draw_ball!(ax, p; color, d, strokewidth) 119 function draw_ball!(ax, p; color, d, strokewidth)
62 scatter!(ax, p; 120 scatter!(ax, p;
63 markersize = d, 121 markersize = d,
64 color, 122 color,
65 markerspace = :data, 123 markerspace = :data,
66 strokewidth, 124 strokewidth,
67 strokecolor = colorant"#000", 125 strokecolor = colorant"#000",
68 ) 126 )
69 end 127 end
70 128
71 # ╔═╡ 50aff181-0513-4b47-a501-1bcd9614dea6 129 # ╔═╡ 50aff181-0513-4b47-a501-1bcd9614dea6
72 function draw_logo!(ax;R,d,strokewidth, spokewidth) 130 function draw_logo!(ax;R,d,strokewidth, spokewidth)
73
74 origo = (0,0); 131 origo = (0,0);
75 θs = π/2 .+ 2π/3*(0:2) 132 θs = π/2 .+ 2π/3*(0:2)
76 ## Spokes 133 ## Spokes
77 for θ ∈ θs 134 for θ ∈ θs
78 lines!([origo, polar(R,θ)]; 135 lines!([origo, polar(R,θ)];
88 strokewidth, 145 strokewidth,
89 ) 146 )
90 147
91 ## Non-center 148 ## Non-center
92 colors = [logocolors.green, logocolors.red, logocolors.purple] 149 colors = [logocolors.green, logocolors.red, logocolors.purple]
93 150
94 for (i,θ) ∈ enumerate(θs) 151 for (i,θ) ∈ enumerate(θs)
95 draw_ball!(ax, polar(R,θ); 152 draw_ball!(ax, polar(R,θ);
96 color = colors[i], 153 color = colors[i],
97 d, 154 d,
98 strokewidth, 155 strokewidth,
100 end 157 end
101 end 158 end
102 159
103 # ╔═╡ 57811601-acf2-475d-bbe2-bbed4e9f46ba 160 # ╔═╡ 57811601-acf2-475d-bbe2-bbed4e9f46ba
104 function logo_figure(; debug = false, transparent = true) 161 function logo_figure(; debug = false, transparent = true)
105
106 # A bug in WGSLMakie makes it not work with transparent background 162 # A bug in WGSLMakie makes it not work with transparent background
107 if transparent 163 if transparent
108 bgspec = (;backgroundcolor=:transparent) 164 bgspec = (;backgroundcolor=:transparent)
109 else 165 else
110 bgspec = (;) 166 bgspec = (;)
111 end 167 end
112 168
113 fig = Figure(;bgspec...) 169 fig = Figure(;bgspec...)
114 170
115 ax = Axis(fig[1,1]; 171 ax = Axis(fig[1,1];
116 aspect=DataAspect(), 172 aspect=DataAspect(),
117 limits = limits(R,d), 173 limits = limits(R,d),
118 bgspec..., 174 bgspec...,
119 ) 175 )
120 176
121 if !debug 177 if !debug
122 hide_coordinate_system!(ax) 178 hide_coordinate_system!(ax)
123 deactivate_all_interaction!(ax) 179 deactivate_all_interaction!(ax)
124 end 180 end
125 181
126 draw_logo!(ax; R,d,strokewidth, spokewidth) 182 draw_logo!(ax; R,d,strokewidth, spokewidth)
127 183
128
129 # resize_to_layout!(fig)
130
131 fig 184 fig
132 end 185 end
133 186
134 # ╔═╡ 4d78323f-7126-46a7-b8d7-760bd2d06ab3 187 # ╔═╡ 4d78323f-7126-46a7-b8d7-760bd2d06ab3
135 logo_figure(;debug=false, transparent=false) 188 logo_figure(;debug, transparent=false)
136 # logo_figure(;debug=true, transparent=false) 189 # logo_figure(;debug=true, transparent=false)
137 190
138 # ╔═╡ 38ed8b50-de68-4df3-affe-c09382fd2ec3 191 # ╔═╡ 38ed8b50-de68-4df3-affe-c09382fd2ec3
139 save("src/assets/logo.svg",logo_figure(); backend=CairoMakie) 192 save("src/assets/logo.svg",logo_figure(); backend=CairoMakie)
193
194 # ╔═╡ 798aa3a9-3ef5-48ed-9e8f-eb23403bfc49
195 md"""
196 ## Appendix
197 """
198
199 # ╔═╡ fca0bd98-c9cb-4423-89b0-9d988ffb105d
200 PlutoUI.TableOfContents()
140 201
141 # ╔═╡ 00000000-0000-0000-0000-000000000001 202 # ╔═╡ 00000000-0000-0000-0000-000000000001
142 PLUTO_PROJECT_TOML_CONTENTS = """ 203 PLUTO_PROJECT_TOML_CONTENTS = """
143 [deps] 204 [deps]
144 CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" 205 CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
145 Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" 206 Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
207 PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
146 WGLMakie = "276b4fcb-3e11-5398-bf8b-a0c2d153d008" 208 WGLMakie = "276b4fcb-3e11-5398-bf8b-a0c2d153d008"
147 209
148 [compat] 210 [compat]
149 CairoMakie = "~0.12.18" 211 CairoMakie = "~0.12.18"
150 Colors = "~0.12.11" 212 Colors = "~0.12.11"
213 PlutoUI = "~0.7.60"
151 WGLMakie = "~0.10.18" 214 WGLMakie = "~0.10.18"
152 """ 215 """
153 216
154 # ╔═╡ 00000000-0000-0000-0000-000000000002 217 # ╔═╡ 00000000-0000-0000-0000-000000000002
155 PLUTO_MANIFEST_TOML_CONTENTS = """ 218 PLUTO_MANIFEST_TOML_CONTENTS = """
156 # This file is machine-generated - editing it directly is not advised 219 # This file is machine-generated - editing it directly is not advised
157 220
158 julia_version = "1.11.2" 221 julia_version = "1.11.2"
159 manifest_format = "2.0" 222 manifest_format = "2.0"
160 project_hash = "c15f6ed1839600325b489dfc544af7640c934918" 223 project_hash = "a086985124f354d2bdad8066fd4f55286038c1ef"
161 224
162 [[deps.AbstractFFTs]] 225 [[deps.AbstractFFTs]]
163 deps = ["LinearAlgebra"] 226 deps = ["LinearAlgebra"]
164 git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" 227 git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef"
165 uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" 228 uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
168 231
169 [deps.AbstractFFTs.extensions] 232 [deps.AbstractFFTs.extensions]
170 AbstractFFTsChainRulesCoreExt = "ChainRulesCore" 233 AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
171 AbstractFFTsTestExt = "Test" 234 AbstractFFTsTestExt = "Test"
172 235
236 [[deps.AbstractPlutoDingetjes]]
237 deps = ["Pkg"]
238 git-tree-sha1 = "6e1d2a35f2f90a4bc7c2ed98079b2ba09c35b83a"
239 uuid = "6e696c72-6542-2067-7265-42206c756150"
240 version = "1.3.2"
241
173 [[deps.AbstractTrees]] 242 [[deps.AbstractTrees]]
174 git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" 243 git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177"
175 uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" 244 uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
176 version = "0.4.5" 245 version = "0.4.5"
177 246
650 deps = ["Test"] 719 deps = ["Test"]
651 git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4" 720 git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4"
652 uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91" 721 uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
653 version = "0.0.5" 722 version = "0.0.5"
654 723
724 [[deps.HypertextLiteral]]
725 deps = ["Tricks"]
726 git-tree-sha1 = "7134810b1afce04bbc1045ca1985fbe81ce17653"
727 uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
728 version = "0.9.5"
729
730 [[deps.IOCapture]]
731 deps = ["Logging", "Random"]
732 git-tree-sha1 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770"
733 uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
734 version = "0.2.5"
735
655 [[deps.ImageAxes]] 736 [[deps.ImageAxes]]
656 deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] 737 deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"]
657 git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba" 738 git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba"
658 uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" 739 uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac"
659 version = "0.6.12" 740 version = "0.6.12"
954 deps = ["Dates", "Logging"] 1035 deps = ["Dates", "Logging"]
955 git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3" 1036 git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3"
956 uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" 1037 uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36"
957 version = "1.1.0" 1038 version = "1.1.0"
958 1039
1040 [[deps.MIMEs]]
1041 git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb"
1042 uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65"
1043 version = "0.1.4"
1044
959 [[deps.MKL_jll]] 1045 [[deps.MKL_jll]]
960 deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] 1046 deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"]
961 git-tree-sha1 = "f046ccd0c6db2832a9f639e2c669c6fe867e5f4f" 1047 git-tree-sha1 = "f046ccd0c6db2832a9f639e2c669c6fe867e5f4f"
962 uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" 1048 uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
963 version = "2024.2.0+0" 1049 version = "2024.2.0+0"
1184 [[deps.PlotUtils]] 1270 [[deps.PlotUtils]]
1185 deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] 1271 deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"]
1186 git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18" 1272 git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18"
1187 uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" 1273 uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
1188 version = "1.4.3" 1274 version = "1.4.3"
1275
1276 [[deps.PlutoUI]]
1277 deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"]
1278 git-tree-sha1 = "eba4810d5e6a01f612b948c9fa94f905b49087b0"
1279 uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
1280 version = "0.7.60"
1189 1281
1190 [[deps.PolygonOps]] 1282 [[deps.PolygonOps]]
1191 git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" 1283 git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6"
1192 uuid = "647866c9-e3ac-4575-94e7-e3d426903924" 1284 uuid = "647866c9-e3ac-4575-94e7-e3d426903924"
1193 version = "0.1.2" 1285 version = "0.1.2"
1531 [[deps.TranscodingStreams]] 1623 [[deps.TranscodingStreams]]
1532 git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" 1624 git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742"
1533 uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" 1625 uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
1534 version = "0.11.3" 1626 version = "0.11.3"
1535 1627
1628 [[deps.Tricks]]
1629 git-tree-sha1 = "7822b97e99a1672bfb1b49b668a6d46d58d8cbcb"
1630 uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
1631 version = "0.1.9"
1632
1536 [[deps.TriplotBase]] 1633 [[deps.TriplotBase]]
1537 git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b" 1634 git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b"
1538 uuid = "981d1d27-644d-49a2-9326-4793e63143c3" 1635 uuid = "981d1d27-644d-49a2-9326-4793e63143c3"
1539 version = "0.1.0" 1636 version = "0.1.0"
1540 1637
1751 uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" 1848 uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
1752 version = "3.6.0+0" 1849 version = "3.6.0+0"
1753 """ 1850 """
1754 1851
1755 # ╔═╡ Cell order: 1852 # ╔═╡ Cell order:
1756 # ╠═e2c959c4-d2b7-11ef-0138-9761d4b6a434 1853 # ╟─61d6e5d8-ced5-4fe9-a375-bda329304a43
1854 # ╟─86bde2a1-8d55-47a7-bd8a-69d74e6a2958
1757 # ╠═8cb161ab-8b04-4744-86f6-b61f169e1368 1855 # ╠═8cb161ab-8b04-4744-86f6-b61f169e1368
1758 # ╠═4d78323f-7126-46a7-b8d7-760bd2d06ab3 1856 # ╠═17e62a16-580b-4ec5-88f8-9b73049f6ff9
1759 # ╠═57811601-acf2-475d-bbe2-bbed4e9f46ba 1857 # ╟─24b4144b-4ee4-4285-9926-217964084fcf
1760 # ╠═50aff181-0513-4b47-a501-1bcd9614dea6 1858 # ╟─292bb633-8409-4bb9-be69-fa2a5c34f441
1859 # ╟─4d78323f-7126-46a7-b8d7-760bd2d06ab3
1860 # ╟─4821f7a0-d4fd-4b28-88cb-fa6745aeccc3
1761 # ╠═ddb3dc44-5e7b-4b36-878b-cfc7eba8f18b 1861 # ╠═ddb3dc44-5e7b-4b36-878b-cfc7eba8f18b
1762 # ╠═38ed8b50-de68-4df3-affe-c09382fd2ec3 1862 # ╠═38ed8b50-de68-4df3-affe-c09382fd2ec3
1763 # ╠═17e62a16-580b-4ec5-88f8-9b73049f6ff9 1863 # ╟─e7ae1f66-06bd-4cc6-be23-2932383dd579
1864 # ╠═50aff181-0513-4b47-a501-1bcd9614dea6
1865 # ╟─d6077592-27b7-48ab-bb76-c0d9b5244253
1866 # ╠═57811601-acf2-475d-bbe2-bbed4e9f46ba
1867 # ╠═8c50ead2-0fd1-4190-9776-d233bef513e0
1868 # ╠═3c620b15-7342-458f-a175-a060976b1ceb
1869 # ╟─376b5f3c-508e-4677-8b96-3c75b8cd3443
1764 # ╠═d810c823-b111-46ab-84fe-83e5b738d18d 1870 # ╠═d810c823-b111-46ab-84fe-83e5b738d18d
1765 # ╠═233d0556-1cae-4156-8239-2f7e01ac32c6 1871 # ╠═233d0556-1cae-4156-8239-2f7e01ac32c6
1766 # ╠═8c50ead2-0fd1-4190-9776-d233bef513e0
1767 # ╠═3c620b15-7342-458f-a175-a060976b1ceb
1768 # ╠═7a580af5-a466-4d6e-bdb3-b0ebcecac802 1872 # ╠═7a580af5-a466-4d6e-bdb3-b0ebcecac802
1873 # ╟─798aa3a9-3ef5-48ed-9e8f-eb23403bfc49
1874 # ╠═e2c959c4-d2b7-11ef-0138-9761d4b6a434
1875 # ╠═fca0bd98-c9cb-4423-89b0-9d988ffb105d
1769 # ╟─00000000-0000-0000-0000-000000000001 1876 # ╟─00000000-0000-0000-0000-000000000001
1770 # ╟─00000000-0000-0000-0000-000000000002 1877 # ╟─00000000-0000-0000-0000-000000000002