From 0c230f6eb56ceca699163ac0dce501a21954aca3 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 14 Sep 2023 07:22:34 -0700 Subject: [PATCH 1/2] Fix link paths in nested imports --- ci/release/changelogs/next.md | 1 + d2ir/compile.go | 31 +- d2ir/import_test.go | 13 + .../multiboard/life_index_d2/index.exp.svg | 152 +- .../life_index_d2/layers/stocks.exp.svg | 158 +-- .../TestCompile/imports/boards-deep.exp.json | 1227 +++++++++++++++++ 6 files changed, 1425 insertions(+), 157 deletions(-) create mode 100644 testdata/d2ir/TestCompile/imports/boards-deep.exp.json diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 9a8c1e4220..d3369d7b24 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -4,6 +4,7 @@ #### Improvements 🧹 +- Globs are lazily-evaluated [#1552](https://github.com/terrastruct/d2/pull/1552) - Latex now includes Mathjax's ASM extension for more powerful Latex functionality [#1544](https://github.com/terrastruct/d2/pull/1544) - `font-color` works on Markdown [#1546](https://github.com/terrastruct/d2/pull/1546) - `font-color` works on arrowheads [#1582](https://github.com/terrastruct/d2/pull/1582) diff --git a/d2ir/compile.go b/d2ir/compile.go index 2c46f70e45..b671f6cd3c 100644 --- a/d2ir/compile.go +++ b/d2ir/compile.go @@ -833,8 +833,35 @@ func (c *compiler) updateLinks(m *Map) { aida := IDA(f) if len(bida) != len(aida) { prependIDA := aida[:len(aida)-len(bida)] - kp := d2ast.MakeKeyPath(prependIDA) - s := d2format.Format(kp) + strings.TrimPrefix(f.Primary_.Value.ScalarString(), "root") + fullIDA := []string{"root"} + // With nested imports, a value may already have been updated with part of the absolute path + // E.g., + // The import prepends path a b c + // The existing path is b c d + // So the new path is + // a b c + // b c d + // ------- + // a b c d + OUTER: + for i := 1; i < len(prependIDA); i += 2 { + for j := 0; i+j < len(prependIDA); j++ { + if prependIDA[i+j] != linkIDA[1+j] { + break + } + // Reached the end and all common + if i+j == len(prependIDA)-1 { + break OUTER + } + } + fullIDA = append(fullIDA, prependIDA[i]) + fullIDA = append(fullIDA, prependIDA[i+1]) + } + // Chop off "root" + fullIDA = append(fullIDA, linkIDA[1:]...) + + kp := d2ast.MakeKeyPath(fullIDA) + s := d2format.Format(kp) f.Primary_.Value = d2ast.MakeValueBox(d2ast.FlatUnquotedString(s)).ScalarBox().Unbox() } } diff --git a/d2ir/import_test.go b/d2ir/import_test.go index 0b9497abee..8e94c5a5b1 100644 --- a/d2ir/import_test.go +++ b/d2ir/import_test.go @@ -84,6 +84,19 @@ label: meow`, assertQuery(t, m, 0, 0, "root.layers.x.layers.y", "layers.x.y.link") }, }, + { + name: "boards-deep", + run: func(t testing.TB) { + m, err := compileFS(t, "index.d2", map[string]string{ + "index.d2": `a.link: layers.b; layers: { b: @b }`, + "b.d2": `b.link: layers.c; layers: { c: @c }`, + "c.d2": `c.link: layers.d; layers: { d: @d }`, + "d.d2": `d`, + }) + assert.Success(t, err) + assertQuery(t, m, 0, 0, "root.layers.b.layers.c.layers.d", "layers.b.layers.c.c.link") + }, + }, { name: "steps-inheritence", run: func(t testing.TB) { diff --git a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg index 08de52c0a2..32f0a778ea 100644 --- a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg +++ b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg @@ -1,9 +1,9 @@ -xy + .d2-196331130 .fill-N1{fill:#0A0F25;} + .d2-196331130 .fill-N2{fill:#676C7E;} + .d2-196331130 .fill-N3{fill:#9499AB;} + .d2-196331130 .fill-N4{fill:#CFD2DD;} + .d2-196331130 .fill-N5{fill:#DEE1EB;} + .d2-196331130 .fill-N6{fill:#EEF1F8;} + .d2-196331130 .fill-N7{fill:#FFFFFF;} + .d2-196331130 .fill-B1{fill:#0D32B2;} + .d2-196331130 .fill-B2{fill:#0D32B2;} + .d2-196331130 .fill-B3{fill:#E3E9FD;} + .d2-196331130 .fill-B4{fill:#E3E9FD;} + .d2-196331130 .fill-B5{fill:#EDF0FD;} + .d2-196331130 .fill-B6{fill:#F7F8FE;} + .d2-196331130 .fill-AA2{fill:#4A6FF3;} + .d2-196331130 .fill-AA4{fill:#EDF0FD;} + .d2-196331130 .fill-AA5{fill:#F7F8FE;} + .d2-196331130 .fill-AB4{fill:#EDF0FD;} + .d2-196331130 .fill-AB5{fill:#F7F8FE;} + .d2-196331130 .stroke-N1{stroke:#0A0F25;} + .d2-196331130 .stroke-N2{stroke:#676C7E;} + .d2-196331130 .stroke-N3{stroke:#9499AB;} + .d2-196331130 .stroke-N4{stroke:#CFD2DD;} + .d2-196331130 .stroke-N5{stroke:#DEE1EB;} + .d2-196331130 .stroke-N6{stroke:#EEF1F8;} + .d2-196331130 .stroke-N7{stroke:#FFFFFF;} + .d2-196331130 .stroke-B1{stroke:#0D32B2;} + .d2-196331130 .stroke-B2{stroke:#0D32B2;} + .d2-196331130 .stroke-B3{stroke:#E3E9FD;} + .d2-196331130 .stroke-B4{stroke:#E3E9FD;} + .d2-196331130 .stroke-B5{stroke:#EDF0FD;} + .d2-196331130 .stroke-B6{stroke:#F7F8FE;} + .d2-196331130 .stroke-AA2{stroke:#4A6FF3;} + .d2-196331130 .stroke-AA4{stroke:#EDF0FD;} + .d2-196331130 .stroke-AA5{stroke:#F7F8FE;} + .d2-196331130 .stroke-AB4{stroke:#EDF0FD;} + .d2-196331130 .stroke-AB5{stroke:#F7F8FE;} + .d2-196331130 .background-color-N1{background-color:#0A0F25;} + .d2-196331130 .background-color-N2{background-color:#676C7E;} + .d2-196331130 .background-color-N3{background-color:#9499AB;} + .d2-196331130 .background-color-N4{background-color:#CFD2DD;} + .d2-196331130 .background-color-N5{background-color:#DEE1EB;} + .d2-196331130 .background-color-N6{background-color:#EEF1F8;} + .d2-196331130 .background-color-N7{background-color:#FFFFFF;} + .d2-196331130 .background-color-B1{background-color:#0D32B2;} + .d2-196331130 .background-color-B2{background-color:#0D32B2;} + .d2-196331130 .background-color-B3{background-color:#E3E9FD;} + .d2-196331130 .background-color-B4{background-color:#E3E9FD;} + .d2-196331130 .background-color-B5{background-color:#EDF0FD;} + .d2-196331130 .background-color-B6{background-color:#F7F8FE;} + .d2-196331130 .background-color-AA2{background-color:#4A6FF3;} + .d2-196331130 .background-color-AA4{background-color:#EDF0FD;} + .d2-196331130 .background-color-AA5{background-color:#F7F8FE;} + .d2-196331130 .background-color-AB4{background-color:#EDF0FD;} + .d2-196331130 .background-color-AB5{background-color:#F7F8FE;} + .d2-196331130 .color-N1{color:#0A0F25;} + .d2-196331130 .color-N2{color:#676C7E;} + .d2-196331130 .color-N3{color:#9499AB;} + .d2-196331130 .color-N4{color:#CFD2DD;} + .d2-196331130 .color-N5{color:#DEE1EB;} + .d2-196331130 .color-N6{color:#EEF1F8;} + .d2-196331130 .color-N7{color:#FFFFFF;} + .d2-196331130 .color-B1{color:#0D32B2;} + .d2-196331130 .color-B2{color:#0D32B2;} + .d2-196331130 .color-B3{color:#E3E9FD;} + .d2-196331130 .color-B4{color:#E3E9FD;} + .d2-196331130 .color-B5{color:#EDF0FD;} + .d2-196331130 .color-B6{color:#F7F8FE;} + .d2-196331130 .color-AA2{color:#4A6FF3;} + .d2-196331130 .color-AA4{color:#EDF0FD;} + .d2-196331130 .color-AA5{color:#F7F8FE;} + .d2-196331130 .color-AB4{color:#EDF0FD;} + .d2-196331130 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>xy diff --git a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg index d92baa3b76..6edf15a88f 100644 --- a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg +++ b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg @@ -1,9 +1,9 @@ -TSXNYSENASDAQ - + .d2-1207751185 .fill-N1{fill:#0A0F25;} + .d2-1207751185 .fill-N2{fill:#676C7E;} + .d2-1207751185 .fill-N3{fill:#9499AB;} + .d2-1207751185 .fill-N4{fill:#CFD2DD;} + .d2-1207751185 .fill-N5{fill:#DEE1EB;} + .d2-1207751185 .fill-N6{fill:#EEF1F8;} + .d2-1207751185 .fill-N7{fill:#FFFFFF;} + .d2-1207751185 .fill-B1{fill:#0D32B2;} + .d2-1207751185 .fill-B2{fill:#0D32B2;} + .d2-1207751185 .fill-B3{fill:#E3E9FD;} + .d2-1207751185 .fill-B4{fill:#E3E9FD;} + .d2-1207751185 .fill-B5{fill:#EDF0FD;} + .d2-1207751185 .fill-B6{fill:#F7F8FE;} + .d2-1207751185 .fill-AA2{fill:#4A6FF3;} + .d2-1207751185 .fill-AA4{fill:#EDF0FD;} + .d2-1207751185 .fill-AA5{fill:#F7F8FE;} + .d2-1207751185 .fill-AB4{fill:#EDF0FD;} + .d2-1207751185 .fill-AB5{fill:#F7F8FE;} + .d2-1207751185 .stroke-N1{stroke:#0A0F25;} + .d2-1207751185 .stroke-N2{stroke:#676C7E;} + .d2-1207751185 .stroke-N3{stroke:#9499AB;} + .d2-1207751185 .stroke-N4{stroke:#CFD2DD;} + .d2-1207751185 .stroke-N5{stroke:#DEE1EB;} + .d2-1207751185 .stroke-N6{stroke:#EEF1F8;} + .d2-1207751185 .stroke-N7{stroke:#FFFFFF;} + .d2-1207751185 .stroke-B1{stroke:#0D32B2;} + .d2-1207751185 .stroke-B2{stroke:#0D32B2;} + .d2-1207751185 .stroke-B3{stroke:#E3E9FD;} + .d2-1207751185 .stroke-B4{stroke:#E3E9FD;} + .d2-1207751185 .stroke-B5{stroke:#EDF0FD;} + .d2-1207751185 .stroke-B6{stroke:#F7F8FE;} + .d2-1207751185 .stroke-AA2{stroke:#4A6FF3;} + .d2-1207751185 .stroke-AA4{stroke:#EDF0FD;} + .d2-1207751185 .stroke-AA5{stroke:#F7F8FE;} + .d2-1207751185 .stroke-AB4{stroke:#EDF0FD;} + .d2-1207751185 .stroke-AB5{stroke:#F7F8FE;} + .d2-1207751185 .background-color-N1{background-color:#0A0F25;} + .d2-1207751185 .background-color-N2{background-color:#676C7E;} + .d2-1207751185 .background-color-N3{background-color:#9499AB;} + .d2-1207751185 .background-color-N4{background-color:#CFD2DD;} + .d2-1207751185 .background-color-N5{background-color:#DEE1EB;} + .d2-1207751185 .background-color-N6{background-color:#EEF1F8;} + .d2-1207751185 .background-color-N7{background-color:#FFFFFF;} + .d2-1207751185 .background-color-B1{background-color:#0D32B2;} + .d2-1207751185 .background-color-B2{background-color:#0D32B2;} + .d2-1207751185 .background-color-B3{background-color:#E3E9FD;} + .d2-1207751185 .background-color-B4{background-color:#E3E9FD;} + .d2-1207751185 .background-color-B5{background-color:#EDF0FD;} + .d2-1207751185 .background-color-B6{background-color:#F7F8FE;} + .d2-1207751185 .background-color-AA2{background-color:#4A6FF3;} + .d2-1207751185 .background-color-AA4{background-color:#EDF0FD;} + .d2-1207751185 .background-color-AA5{background-color:#F7F8FE;} + .d2-1207751185 .background-color-AB4{background-color:#EDF0FD;} + .d2-1207751185 .background-color-AB5{background-color:#F7F8FE;} + .d2-1207751185 .color-N1{color:#0A0F25;} + .d2-1207751185 .color-N2{color:#676C7E;} + .d2-1207751185 .color-N3{color:#9499AB;} + .d2-1207751185 .color-N4{color:#CFD2DD;} + .d2-1207751185 .color-N5{color:#DEE1EB;} + .d2-1207751185 .color-N6{color:#EEF1F8;} + .d2-1207751185 .color-N7{color:#FFFFFF;} + .d2-1207751185 .color-B1{color:#0D32B2;} + .d2-1207751185 .color-B2{color:#0D32B2;} + .d2-1207751185 .color-B3{color:#E3E9FD;} + .d2-1207751185 .color-B4{color:#E3E9FD;} + .d2-1207751185 .color-B5{color:#EDF0FD;} + .d2-1207751185 .color-B6{color:#F7F8FE;} + .d2-1207751185 .color-AA2{color:#4A6FF3;} + .d2-1207751185 .color-AA4{color:#EDF0FD;} + .d2-1207751185 .color-AA5{color:#F7F8FE;} + .d2-1207751185 .color-AB4{color:#EDF0FD;} + .d2-1207751185 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>TSXNYSENASDAQ + - - + + diff --git a/testdata/d2ir/TestCompile/imports/boards-deep.exp.json b/testdata/d2ir/TestCompile/imports/boards-deep.exp.json new file mode 100644 index 0000000000..3925c7050f --- /dev/null +++ b/testdata/d2ir/TestCompile/imports/boards-deep.exp.json @@ -0,0 +1,1227 @@ +{ + "fields": [ + { + "name": "a", + "composite": { + "fields": [ + { + "name": "link", + "primary": { + "value": { + "range": ",0:0:0-0:0:0", + "value": [ + { + "string": "root.layers.b" + } + ] + } + }, + "references": [ + { + "string": { + "range": "index.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + }, + "key_path": { + "range": "index.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "index.d2,0:0:0-0:16:16", + "key": { + "range": "index.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "index.d2,0:8:8-0:16:16", + "value": [ + { + "string": "layers.b", + "raw_string": "layers.b" + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + }, + "key_path": { + "range": "index.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "index.d2,0:0:0-0:16:16", + "key": { + "range": "index.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "index.d2,0:8:8-0:16:16", + "value": [ + { + "string": "layers.b", + "raw_string": "layers.b" + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + }, + { + "name": "layers", + "composite": { + "fields": [ + { + "name": "b", + "composite": { + "fields": [ + { + "name": "b", + "composite": { + "fields": [ + { + "name": "link", + "primary": { + "value": { + "range": ",0:0:0-0:0:0", + "value": [ + { + "string": "root.layers.b.layers.c" + } + ] + } + }, + "references": [ + { + "string": { + "range": "b.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + }, + "key_path": { + "range": "b.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "b.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "b.d2,0:0:0-0:16:16", + "key": { + "range": "b.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "b.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "b.d2,0:8:8-0:16:16", + "value": [ + { + "string": "layers.c", + "raw_string": "layers.c" + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "b.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + }, + "key_path": { + "range": "b.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "b.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "b.d2,0:0:0-0:16:16", + "key": { + "range": "b.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "b.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "b.d2,0:8:8-0:16:16", + "value": [ + { + "string": "layers.c", + "raw_string": "layers.c" + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + }, + { + "name": "layers", + "composite": { + "fields": [ + { + "name": "c", + "composite": { + "fields": [ + { + "name": "c", + "composite": { + "fields": [ + { + "name": "link", + "primary": { + "value": { + "range": ",0:0:0-0:0:0", + "value": [ + { + "string": "root.layers.b.layers.c.layers.d" + } + ] + } + }, + "references": [ + { + "string": { + "range": "c.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + }, + "key_path": { + "range": "c.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:0:0-0:1:1", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + }, + { + "unquoted_string": { + "range": "c.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "c.d2,0:0:0-0:16:16", + "key": { + "range": "c.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:0:0-0:1:1", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + }, + { + "unquoted_string": { + "range": "c.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "c.d2,0:8:8-0:16:16", + "value": [ + { + "string": "layers.d", + "raw_string": "layers.d" + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "c.d2,0:0:0-0:1:1", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + }, + "key_path": { + "range": "c.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:0:0-0:1:1", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + }, + { + "unquoted_string": { + "range": "c.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "c.d2,0:0:0-0:16:16", + "key": { + "range": "c.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:0:0-0:1:1", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + }, + { + "unquoted_string": { + "range": "c.d2,0:2:2-0:6:6", + "value": [ + { + "string": "link", + "raw_string": "link" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "c.d2,0:8:8-0:16:16", + "value": [ + { + "string": "layers.d", + "raw_string": "layers.d" + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + }, + { + "name": "layers", + "composite": { + "fields": [ + { + "name": "d", + "composite": { + "fields": [ + { + "name": "d", + "references": [ + { + "string": { + "range": "d.d2,0:0:0-0:1:1", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + }, + "key_path": { + "range": "d.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d.d2,0:0:0-0:1:1", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "d.d2,0:0:0-0:1:1", + "key": { + "range": "d.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d.d2,0:0:0-0:1:1", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "c.d2,0:28:28-0:29:29", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + }, + "key_path": { + "range": "c.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:28:28-0:29:29", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "c.d2,0:28:28-0:34:34", + "key": { + "range": "c.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:28:28-0:29:29", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "import": { + "range": "c.d2,0:31:31-0:34:34", + "spread": false, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:32:32-0:33:33", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "c.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + }, + "key_path": { + "range": "c.d2,0:18:18-0:24:24", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "c.d2,0:18:18-0:35:35", + "key": { + "range": "c.d2,0:18:18-0:24:24", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "c.d2,0:26:26-0:35:35", + "nodes": [ + { + "map_key": { + "range": "c.d2,0:28:28-0:34:34", + "key": { + "range": "c.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:28:28-0:29:29", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "import": { + "range": "c.d2,0:31:31-0:34:34", + "spread": false, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "c.d2,0:32:32-0:33:33", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + } + } + } + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "b.d2,0:28:28-0:29:29", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + }, + "key_path": { + "range": "b.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:28:28-0:29:29", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "b.d2,0:28:28-0:34:34", + "key": { + "range": "b.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:28:28-0:29:29", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "import": { + "range": "b.d2,0:31:31-0:34:34", + "spread": false, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:32:32-0:33:33", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "b.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + }, + "key_path": { + "range": "b.d2,0:18:18-0:24:24", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "b.d2,0:18:18-0:35:35", + "key": { + "range": "b.d2,0:18:18-0:24:24", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "b.d2,0:26:26-0:35:35", + "nodes": [ + { + "map_key": { + "range": "b.d2,0:28:28-0:34:34", + "key": { + "range": "b.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:28:28-0:29:29", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "import": { + "range": "b.d2,0:31:31-0:34:34", + "spread": false, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "b.d2,0:32:32-0:33:33", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + } + } + } + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "index.d2,0:28:28-0:29:29", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + }, + "key_path": { + "range": "index.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:28:28-0:29:29", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "index.d2,0:28:28-0:34:34", + "key": { + "range": "index.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:28:28-0:29:29", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "import": { + "range": "index.d2,0:31:31-0:34:34", + "spread": false, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:32:32-0:33:33", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "index.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + }, + "key_path": { + "range": "index.d2,0:18:18-0:24:24", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "index.d2,0:18:18-0:35:35", + "key": { + "range": "index.d2,0:18:18-0:24:24", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:18:18-0:24:24", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "index.d2,0:26:26-0:35:35", + "nodes": [ + { + "map_key": { + "range": "index.d2,0:28:28-0:34:34", + "key": { + "range": "index.d2,0:28:28-0:29:29", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:28:28-0:29:29", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "import": { + "range": "index.d2,0:31:31-0:34:34", + "spread": false, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:32:32-0:33:33", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + } + } + } + } + ] + } + } + } + }, + "due_to_glob": false, + "due_to_lazy_glob": false + } + ] + } + ], + "edges": null +} From a6e09b4f544c26198c3970dbe8c33d74868b80f6 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Mon, 25 Sep 2023 11:43:43 -0700 Subject: [PATCH 2/2] tests --- .../multiboard/life_index_d2/index.exp.svg | 152 ++++++++--------- .../life_index_d2/layers/stocks.exp.svg | 158 +++++++++--------- 2 files changed, 155 insertions(+), 155 deletions(-) diff --git a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg index 32f0a778ea..08de52c0a2 100644 --- a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg +++ b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/index.exp.svg @@ -1,9 +1,9 @@ -xy + .d2-66779799 .fill-N1{fill:#0A0F25;} + .d2-66779799 .fill-N2{fill:#676C7E;} + .d2-66779799 .fill-N3{fill:#9499AB;} + .d2-66779799 .fill-N4{fill:#CFD2DD;} + .d2-66779799 .fill-N5{fill:#DEE1EB;} + .d2-66779799 .fill-N6{fill:#EEF1F8;} + .d2-66779799 .fill-N7{fill:#FFFFFF;} + .d2-66779799 .fill-B1{fill:#0D32B2;} + .d2-66779799 .fill-B2{fill:#0D32B2;} + .d2-66779799 .fill-B3{fill:#E3E9FD;} + .d2-66779799 .fill-B4{fill:#E3E9FD;} + .d2-66779799 .fill-B5{fill:#EDF0FD;} + .d2-66779799 .fill-B6{fill:#F7F8FE;} + .d2-66779799 .fill-AA2{fill:#4A6FF3;} + .d2-66779799 .fill-AA4{fill:#EDF0FD;} + .d2-66779799 .fill-AA5{fill:#F7F8FE;} + .d2-66779799 .fill-AB4{fill:#EDF0FD;} + .d2-66779799 .fill-AB5{fill:#F7F8FE;} + .d2-66779799 .stroke-N1{stroke:#0A0F25;} + .d2-66779799 .stroke-N2{stroke:#676C7E;} + .d2-66779799 .stroke-N3{stroke:#9499AB;} + .d2-66779799 .stroke-N4{stroke:#CFD2DD;} + .d2-66779799 .stroke-N5{stroke:#DEE1EB;} + .d2-66779799 .stroke-N6{stroke:#EEF1F8;} + .d2-66779799 .stroke-N7{stroke:#FFFFFF;} + .d2-66779799 .stroke-B1{stroke:#0D32B2;} + .d2-66779799 .stroke-B2{stroke:#0D32B2;} + .d2-66779799 .stroke-B3{stroke:#E3E9FD;} + .d2-66779799 .stroke-B4{stroke:#E3E9FD;} + .d2-66779799 .stroke-B5{stroke:#EDF0FD;} + .d2-66779799 .stroke-B6{stroke:#F7F8FE;} + .d2-66779799 .stroke-AA2{stroke:#4A6FF3;} + .d2-66779799 .stroke-AA4{stroke:#EDF0FD;} + .d2-66779799 .stroke-AA5{stroke:#F7F8FE;} + .d2-66779799 .stroke-AB4{stroke:#EDF0FD;} + .d2-66779799 .stroke-AB5{stroke:#F7F8FE;} + .d2-66779799 .background-color-N1{background-color:#0A0F25;} + .d2-66779799 .background-color-N2{background-color:#676C7E;} + .d2-66779799 .background-color-N3{background-color:#9499AB;} + .d2-66779799 .background-color-N4{background-color:#CFD2DD;} + .d2-66779799 .background-color-N5{background-color:#DEE1EB;} + .d2-66779799 .background-color-N6{background-color:#EEF1F8;} + .d2-66779799 .background-color-N7{background-color:#FFFFFF;} + .d2-66779799 .background-color-B1{background-color:#0D32B2;} + .d2-66779799 .background-color-B2{background-color:#0D32B2;} + .d2-66779799 .background-color-B3{background-color:#E3E9FD;} + .d2-66779799 .background-color-B4{background-color:#E3E9FD;} + .d2-66779799 .background-color-B5{background-color:#EDF0FD;} + .d2-66779799 .background-color-B6{background-color:#F7F8FE;} + .d2-66779799 .background-color-AA2{background-color:#4A6FF3;} + .d2-66779799 .background-color-AA4{background-color:#EDF0FD;} + .d2-66779799 .background-color-AA5{background-color:#F7F8FE;} + .d2-66779799 .background-color-AB4{background-color:#EDF0FD;} + .d2-66779799 .background-color-AB5{background-color:#F7F8FE;} + .d2-66779799 .color-N1{color:#0A0F25;} + .d2-66779799 .color-N2{color:#676C7E;} + .d2-66779799 .color-N3{color:#9499AB;} + .d2-66779799 .color-N4{color:#CFD2DD;} + .d2-66779799 .color-N5{color:#DEE1EB;} + .d2-66779799 .color-N6{color:#EEF1F8;} + .d2-66779799 .color-N7{color:#FFFFFF;} + .d2-66779799 .color-B1{color:#0D32B2;} + .d2-66779799 .color-B2{color:#0D32B2;} + .d2-66779799 .color-B3{color:#E3E9FD;} + .d2-66779799 .color-B4{color:#E3E9FD;} + .d2-66779799 .color-B5{color:#EDF0FD;} + .d2-66779799 .color-B6{color:#F7F8FE;} + .d2-66779799 .color-AA2{color:#4A6FF3;} + .d2-66779799 .color-AA4{color:#EDF0FD;} + .d2-66779799 .color-AA5{color:#F7F8FE;} + .d2-66779799 .color-AB4{color:#EDF0FD;} + .d2-66779799 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>xy diff --git a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg index 6edf15a88f..d92baa3b76 100644 --- a/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg +++ b/e2etests-cli/testdata/TestCLI_E2E/multiboard/life_index_d2/layers/stocks.exp.svg @@ -1,9 +1,9 @@ -TSXNYSENASDAQ - + .d2-3935287890 .fill-N1{fill:#0A0F25;} + .d2-3935287890 .fill-N2{fill:#676C7E;} + .d2-3935287890 .fill-N3{fill:#9499AB;} + .d2-3935287890 .fill-N4{fill:#CFD2DD;} + .d2-3935287890 .fill-N5{fill:#DEE1EB;} + .d2-3935287890 .fill-N6{fill:#EEF1F8;} + .d2-3935287890 .fill-N7{fill:#FFFFFF;} + .d2-3935287890 .fill-B1{fill:#0D32B2;} + .d2-3935287890 .fill-B2{fill:#0D32B2;} + .d2-3935287890 .fill-B3{fill:#E3E9FD;} + .d2-3935287890 .fill-B4{fill:#E3E9FD;} + .d2-3935287890 .fill-B5{fill:#EDF0FD;} + .d2-3935287890 .fill-B6{fill:#F7F8FE;} + .d2-3935287890 .fill-AA2{fill:#4A6FF3;} + .d2-3935287890 .fill-AA4{fill:#EDF0FD;} + .d2-3935287890 .fill-AA5{fill:#F7F8FE;} + .d2-3935287890 .fill-AB4{fill:#EDF0FD;} + .d2-3935287890 .fill-AB5{fill:#F7F8FE;} + .d2-3935287890 .stroke-N1{stroke:#0A0F25;} + .d2-3935287890 .stroke-N2{stroke:#676C7E;} + .d2-3935287890 .stroke-N3{stroke:#9499AB;} + .d2-3935287890 .stroke-N4{stroke:#CFD2DD;} + .d2-3935287890 .stroke-N5{stroke:#DEE1EB;} + .d2-3935287890 .stroke-N6{stroke:#EEF1F8;} + .d2-3935287890 .stroke-N7{stroke:#FFFFFF;} + .d2-3935287890 .stroke-B1{stroke:#0D32B2;} + .d2-3935287890 .stroke-B2{stroke:#0D32B2;} + .d2-3935287890 .stroke-B3{stroke:#E3E9FD;} + .d2-3935287890 .stroke-B4{stroke:#E3E9FD;} + .d2-3935287890 .stroke-B5{stroke:#EDF0FD;} + .d2-3935287890 .stroke-B6{stroke:#F7F8FE;} + .d2-3935287890 .stroke-AA2{stroke:#4A6FF3;} + .d2-3935287890 .stroke-AA4{stroke:#EDF0FD;} + .d2-3935287890 .stroke-AA5{stroke:#F7F8FE;} + .d2-3935287890 .stroke-AB4{stroke:#EDF0FD;} + .d2-3935287890 .stroke-AB5{stroke:#F7F8FE;} + .d2-3935287890 .background-color-N1{background-color:#0A0F25;} + .d2-3935287890 .background-color-N2{background-color:#676C7E;} + .d2-3935287890 .background-color-N3{background-color:#9499AB;} + .d2-3935287890 .background-color-N4{background-color:#CFD2DD;} + .d2-3935287890 .background-color-N5{background-color:#DEE1EB;} + .d2-3935287890 .background-color-N6{background-color:#EEF1F8;} + .d2-3935287890 .background-color-N7{background-color:#FFFFFF;} + .d2-3935287890 .background-color-B1{background-color:#0D32B2;} + .d2-3935287890 .background-color-B2{background-color:#0D32B2;} + .d2-3935287890 .background-color-B3{background-color:#E3E9FD;} + .d2-3935287890 .background-color-B4{background-color:#E3E9FD;} + .d2-3935287890 .background-color-B5{background-color:#EDF0FD;} + .d2-3935287890 .background-color-B6{background-color:#F7F8FE;} + .d2-3935287890 .background-color-AA2{background-color:#4A6FF3;} + .d2-3935287890 .background-color-AA4{background-color:#EDF0FD;} + .d2-3935287890 .background-color-AA5{background-color:#F7F8FE;} + .d2-3935287890 .background-color-AB4{background-color:#EDF0FD;} + .d2-3935287890 .background-color-AB5{background-color:#F7F8FE;} + .d2-3935287890 .color-N1{color:#0A0F25;} + .d2-3935287890 .color-N2{color:#676C7E;} + .d2-3935287890 .color-N3{color:#9499AB;} + .d2-3935287890 .color-N4{color:#CFD2DD;} + .d2-3935287890 .color-N5{color:#DEE1EB;} + .d2-3935287890 .color-N6{color:#EEF1F8;} + .d2-3935287890 .color-N7{color:#FFFFFF;} + .d2-3935287890 .color-B1{color:#0D32B2;} + .d2-3935287890 .color-B2{color:#0D32B2;} + .d2-3935287890 .color-B3{color:#E3E9FD;} + .d2-3935287890 .color-B4{color:#E3E9FD;} + .d2-3935287890 .color-B5{color:#EDF0FD;} + .d2-3935287890 .color-B6{color:#F7F8FE;} + .d2-3935287890 .color-AA2{color:#4A6FF3;} + .d2-3935287890 .color-AA4{color:#EDF0FD;} + .d2-3935287890 .color-AA5{color:#F7F8FE;} + .d2-3935287890 .color-AB4{color:#EDF0FD;} + .d2-3935287890 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>TSXNYSENASDAQ + - - + +