@tellegen/svelte 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +70 -0
  3. package/dist/Sparkline.svelte +100 -0
  4. package/dist/Sparkline.svelte.d.ts +8 -0
  5. package/dist/Sparkline.svelte.d.ts.map +1 -0
  6. package/dist/TellegenMap.svelte +1430 -0
  7. package/dist/TellegenMap.svelte.d.ts +14 -0
  8. package/dist/TellegenMap.svelte.d.ts.map +1 -0
  9. package/dist/TellegenProvider.svelte +38 -0
  10. package/dist/TellegenProvider.svelte.d.ts +9 -0
  11. package/dist/TellegenProvider.svelte.d.ts.map +1 -0
  12. package/dist/TellegenShell.svelte +126 -0
  13. package/dist/TellegenShell.svelte.d.ts +4 -0
  14. package/dist/TellegenShell.svelte.d.ts.map +1 -0
  15. package/dist/TellegenViewer.svelte +19 -0
  16. package/dist/TellegenViewer.svelte.d.ts +4 -0
  17. package/dist/TellegenViewer.svelte.d.ts.map +1 -0
  18. package/dist/api.d.ts +44 -0
  19. package/dist/api.d.ts.map +1 -0
  20. package/dist/api.js +137 -0
  21. package/dist/colors.d.ts +51 -0
  22. package/dist/colors.d.ts.map +1 -0
  23. package/dist/colors.js +140 -0
  24. package/dist/components/AppFooter.svelte +73 -0
  25. package/dist/components/AppFooter.svelte.d.ts +19 -0
  26. package/dist/components/AppFooter.svelte.d.ts.map +1 -0
  27. package/dist/components/AppHeader.svelte +405 -0
  28. package/dist/components/AppHeader.svelte.d.ts +4 -0
  29. package/dist/components/AppHeader.svelte.d.ts.map +1 -0
  30. package/dist/components/BindingLines.svelte +101 -0
  31. package/dist/components/BindingLines.svelte.d.ts +4 -0
  32. package/dist/components/BindingLines.svelte.d.ts.map +1 -0
  33. package/dist/components/BusPicker.svelte +227 -0
  34. package/dist/components/BusPicker.svelte.d.ts +4 -0
  35. package/dist/components/BusPicker.svelte.d.ts.map +1 -0
  36. package/dist/components/ControlPanel.svelte +154 -0
  37. package/dist/components/ControlPanel.svelte.d.ts +19 -0
  38. package/dist/components/ControlPanel.svelte.d.ts.map +1 -0
  39. package/dist/components/DemandSlider.svelte +271 -0
  40. package/dist/components/DemandSlider.svelte.d.ts +4 -0
  41. package/dist/components/DemandSlider.svelte.d.ts.map +1 -0
  42. package/dist/components/DisplayControls.svelte +81 -0
  43. package/dist/components/DisplayControls.svelte.d.ts +19 -0
  44. package/dist/components/DisplayControls.svelte.d.ts.map +1 -0
  45. package/dist/components/DropZone.svelte +46 -0
  46. package/dist/components/DropZone.svelte.d.ts +19 -0
  47. package/dist/components/DropZone.svelte.d.ts.map +1 -0
  48. package/dist/components/FormulationSelector.svelte +82 -0
  49. package/dist/components/FormulationSelector.svelte.d.ts +19 -0
  50. package/dist/components/FormulationSelector.svelte.d.ts.map +1 -0
  51. package/dist/components/LocalCaseDetails.svelte +253 -0
  52. package/dist/components/LocalCaseDetails.svelte.d.ts +4 -0
  53. package/dist/components/LocalCaseDetails.svelte.d.ts.map +1 -0
  54. package/dist/components/MulticonductorDetails.svelte +280 -0
  55. package/dist/components/MulticonductorDetails.svelte.d.ts +19 -0
  56. package/dist/components/MulticonductorDetails.svelte.d.ts.map +1 -0
  57. package/dist/components/NetworkStats.svelte +75 -0
  58. package/dist/components/NetworkStats.svelte.d.ts +19 -0
  59. package/dist/components/NetworkStats.svelte.d.ts.map +1 -0
  60. package/dist/components/PlacementCue.svelte +35 -0
  61. package/dist/components/PlacementCue.svelte.d.ts +19 -0
  62. package/dist/components/PlacementCue.svelte.d.ts.map +1 -0
  63. package/dist/components/RatingSlider.svelte +273 -0
  64. package/dist/components/RatingSlider.svelte.d.ts +4 -0
  65. package/dist/components/RatingSlider.svelte.d.ts.map +1 -0
  66. package/dist/components/RestoreDefaultsButton.svelte +34 -0
  67. package/dist/components/RestoreDefaultsButton.svelte.d.ts +19 -0
  68. package/dist/components/RestoreDefaultsButton.svelte.d.ts.map +1 -0
  69. package/dist/components/SensitivityReadout.svelte +126 -0
  70. package/dist/components/SensitivityReadout.svelte.d.ts +4 -0
  71. package/dist/components/SensitivityReadout.svelte.d.ts.map +1 -0
  72. package/dist/components/SizeLegend.svelte +55 -0
  73. package/dist/components/SizeLegend.svelte.d.ts +19 -0
  74. package/dist/components/SizeLegend.svelte.d.ts.map +1 -0
  75. package/dist/components/SolveCard.svelte +84 -0
  76. package/dist/components/SolveCard.svelte.d.ts +4 -0
  77. package/dist/components/SolveCard.svelte.d.ts.map +1 -0
  78. package/dist/components/TopMovers.svelte +68 -0
  79. package/dist/components/TopMovers.svelte.d.ts +19 -0
  80. package/dist/components/TopMovers.svelte.d.ts.map +1 -0
  81. package/dist/components.d.ts +19 -0
  82. package/dist/components.d.ts.map +1 -0
  83. package/dist/components.js +18 -0
  84. package/dist/context.svelte.d.ts +20 -0
  85. package/dist/context.svelte.d.ts.map +1 -0
  86. package/dist/context.svelte.js +43 -0
  87. package/dist/controller.svelte.d.ts +334 -0
  88. package/dist/controller.svelte.d.ts.map +1 -0
  89. package/dist/controller.svelte.js +2026 -0
  90. package/dist/display.d.ts +31 -0
  91. package/dist/display.d.ts.map +1 -0
  92. package/dist/display.js +63 -0
  93. package/dist/drop-classify.d.ts +48 -0
  94. package/dist/drop-classify.d.ts.map +1 -0
  95. package/dist/drop-classify.js +92 -0
  96. package/dist/format.d.ts +30 -0
  97. package/dist/format.d.ts.map +1 -0
  98. package/dist/format.js +49 -0
  99. package/dist/index.d.ts +21 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +12 -0
  102. package/dist/map.d.ts +9 -0
  103. package/dist/map.d.ts.map +1 -0
  104. package/dist/map.js +4 -0
  105. package/dist/multiconductor.d.ts +63 -0
  106. package/dist/multiconductor.d.ts.map +1 -0
  107. package/dist/multiconductor.js +255 -0
  108. package/dist/state.svelte.d.ts +258 -0
  109. package/dist/state.svelte.d.ts.map +1 -0
  110. package/dist/state.svelte.js +323 -0
  111. package/dist/study-package.d.ts +9 -0
  112. package/dist/study-package.d.ts.map +1 -0
  113. package/dist/study-package.js +17 -0
  114. package/dist/styles.css +393 -0
  115. package/dist/synthetic-layout.d.ts +12 -0
  116. package/dist/synthetic-layout.d.ts.map +1 -0
  117. package/dist/synthetic-layout.js +271 -0
  118. package/dist/types.d.ts +6 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +1 -0
  121. package/package.json +67 -0
@@ -0,0 +1,280 @@
1
+ <script lang="ts">
2
+ import { getAppState, getController } from '../context.svelte.js';
3
+ import { fmt, rgbaCss } from '../format.js';
4
+ import {
5
+ attachmentColor,
6
+ attachmentGlyph,
7
+ isPhaseTerminal,
8
+ phaseColor
9
+ } from '../multiconductor.js';
10
+ import type { DistAttachmentKind } from '@tellegen/engine';
11
+
12
+ const app = getAppState();
13
+ const ctrl = getController();
14
+
15
+ const NEUTRAL_RGBA = [120, 114, 102, 255] as const;
16
+ const ATTACHMENT_LEGEND: DistAttachmentKind[] = [
17
+ 'source',
18
+ 'generator',
19
+ 'ibr',
20
+ 'load',
21
+ 'shunt'
22
+ ];
23
+
24
+ function terminalColor(t: string): string {
25
+ return rgbaCss(isPhaseTerminal(t) ? phaseColor(t) : [...NEUTRAL_RGBA]);
26
+ }
27
+ </script>
28
+
29
+ {#if app.activeMulti}
30
+ {@const mc = app.activeMulti}
31
+ {@const s = mc.summary}
32
+ <h2>{mc.label} <span class="region mono">via {mc.fileName}</span></h2>
33
+ {#if s}
34
+ <p class="tag mono">multiconductor &#8901; viewing only</p>
35
+ <dl class="mono">
36
+ <div>
37
+ <dt>buses</dt>
38
+ <dd>{s.n_bus}</dd>
39
+ </div>
40
+ <div>
41
+ <dt>lines / switches / xfmrs</dt>
42
+ <dd>{s.n_line} / {s.n_switch} / {s.n_transformer}</dd>
43
+ </div>
44
+ <div>
45
+ <dt>load</dt>
46
+ <dd>{fmt.format(s.load_kw)} kW</dd>
47
+ </div>
48
+ <div>
49
+ <dt>gen capacity</dt>
50
+ <dd>{fmt.format(s.gen_kw)} kW</dd>
51
+ </div>
52
+ <div>
53
+ <dt>sources / loads / gens</dt>
54
+ <dd>{s.n_source} / {s.n_load} / {s.n_generator}</dd>
55
+ </div>
56
+ {#if s.n_ibr > 0 || s.n_shunt > 0}
57
+ <div>
58
+ <dt>IBRs / shunts</dt>
59
+ <dd>{s.n_ibr} / {s.n_shunt}</dd>
60
+ </div>
61
+ {/if}
62
+ </dl>
63
+
64
+ {#if s.warnings.length > 0}
65
+ <ul class="warnings mono">
66
+ {#each s.warnings.slice(0, 4) as w, i (i)}
67
+ <li>{w}</li>
68
+ {/each}
69
+ {#if s.warnings.length > 4}
70
+ <li>+{s.warnings.length - 4} more</li>
71
+ {/if}
72
+ </ul>
73
+ {/if}
74
+
75
+ {#if !mc.placed}
76
+ <p class="footnote mono">
77
+ {s.coords_kind === 'planar'
78
+ ? 'coordinates are diagram-only: click the map to place the layout'
79
+ : 'no coordinates in this file: click the map to place the layout'}
80
+ </p>
81
+ {:else if mc.coordsKind === 'geographic'}
82
+ <p class="footnote mono">coordinates: geographic, from the case file</p>
83
+ {:else if mc.coordsKind === 'planar'}
84
+ <p class="footnote mono">coordinates: diagram layout fit where you placed it</p>
85
+ {:else}
86
+ <p class="footnote mono">coordinates: synthetic topology layout centered where you placed it</p>
87
+ {/if}
88
+ {/if}
89
+
90
+ {#if mc.selectedBus}
91
+ {@const b = mc.selectedBus}
92
+ <hr />
93
+ <h3 class="mono">bus {b.id}</h3>
94
+ <div class="terminals">
95
+ {#each b.terminals as t (t)}
96
+ <span
97
+ class="term"
98
+ class:grounded={b.grounded.includes(t)}
99
+ style={`--tc:${terminalColor(t)}`}
100
+ title={b.grounded.includes(t) ? `terminal ${t} (grounded)` : `terminal ${t}`}
101
+ >
102
+ {t}{#if b.grounded.includes(t)}<span class="gnd" aria-hidden="true">&#9178;</span>{/if}
103
+ </span>
104
+ {/each}
105
+ </div>
106
+ {#if b.attachmentKinds.length > 0}
107
+ <div class="badges">
108
+ {#each b.attachmentKinds as kind (kind)}
109
+ <span class="badge" style={`--bc:${rgbaCss([...attachmentColor(kind)])}`}>
110
+ {attachmentGlyph(kind)}
111
+ </span>
112
+ {/each}
113
+ </div>
114
+ {:else}
115
+ <p class="footnote mono">no attachments on this bus</p>
116
+ {/if}
117
+ {:else if mc.placed}
118
+ <p class="footnote mono">select a bus to expand its terminals and conductors</p>
119
+ {/if}
120
+
121
+ <div class="legend mono">
122
+ <span class="legend-row">
123
+ <i class="swatch" style={`--sc:${rgbaCss([...phaseColor('1')])}`}></i>a
124
+ <i class="swatch" style={`--sc:${rgbaCss([...phaseColor('2')])}`}></i>b
125
+ <i class="swatch" style={`--sc:${rgbaCss([...phaseColor('3')])}`}></i>c
126
+ <i class="swatch" style={`--sc:${rgbaCss([...NEUTRAL_RGBA])}`}></i>n
127
+ </span>
128
+ <span class="legend-row">
129
+ {#each ATTACHMENT_LEGEND as kind (kind)}
130
+ <i class="swatch" style={`--sc:${rgbaCss([...attachmentColor(kind)])}`}></i>{attachmentGlyph(
131
+ kind
132
+ )}
133
+ {/each}
134
+ </span>
135
+ </div>
136
+
137
+ <p class="footnote mono">parsed in your browser by powerio (wasm); never uploaded</p>
138
+
139
+ {#if !mc.placed}
140
+ <button class="reset mono" onclick={() => ctrl.moveMultiCase(mc)}>place on map</button>
141
+ {:else}
142
+ <button class="reset mono" onclick={() => ctrl.moveMultiCase(mc)}>move layout</button>
143
+ {/if}
144
+ <button class="reset mono" onclick={() => ctrl.removeMultiCase(mc)}>remove</button>
145
+ {/if}
146
+
147
+ <style>
148
+ h2 {
149
+ margin: 0 0 8px;
150
+ font-size: 16px;
151
+ font-weight: 600;
152
+ }
153
+
154
+ h3 {
155
+ margin: 0 0 8px;
156
+ font-size: 12px;
157
+ font-weight: 600;
158
+ }
159
+
160
+ .tag {
161
+ margin: 0 0 10px;
162
+ font-size: 10px;
163
+ color: var(--text-secondary);
164
+ letter-spacing: 0;
165
+ text-transform: uppercase;
166
+ }
167
+
168
+ dl {
169
+ margin: 0;
170
+ font-size: 12.5px;
171
+ }
172
+
173
+ dl div {
174
+ display: flex;
175
+ justify-content: space-between;
176
+ padding: 3px 0;
177
+ gap: 12px;
178
+ }
179
+
180
+ dt {
181
+ color: var(--text-secondary);
182
+ }
183
+
184
+ dd {
185
+ margin: 0;
186
+ text-align: right;
187
+ }
188
+
189
+ .terminals {
190
+ display: flex;
191
+ flex-wrap: wrap;
192
+ gap: 5px;
193
+ }
194
+
195
+ .term {
196
+ display: inline-flex;
197
+ align-items: center;
198
+ gap: 2px;
199
+ min-width: 18px;
200
+ height: 20px;
201
+ padding: 0 6px;
202
+ border-radius: 3px;
203
+ border: 1px solid color-mix(in srgb, var(--tc) 70%, #20242b);
204
+ background: color-mix(in srgb, var(--tc) 26%, transparent);
205
+ color: var(--ink);
206
+ font-family: var(--font-mono);
207
+ font-size: 11px;
208
+ }
209
+
210
+ .term.grounded {
211
+ border-style: dashed;
212
+ }
213
+
214
+ .gnd {
215
+ font-size: 12px;
216
+ color: var(--text-secondary);
217
+ }
218
+
219
+ .badges {
220
+ display: flex;
221
+ flex-wrap: wrap;
222
+ gap: 5px;
223
+ margin-top: 8px;
224
+ }
225
+
226
+ .badge {
227
+ padding: 1px 6px;
228
+ border-radius: 3px;
229
+ background: var(--bc);
230
+ color: #fff;
231
+ font-size: 10px;
232
+ letter-spacing: 0;
233
+ }
234
+
235
+ .legend {
236
+ display: flex;
237
+ flex-direction: column;
238
+ gap: 4px;
239
+ margin-top: 12px;
240
+ font-size: 10px;
241
+ color: var(--text-secondary);
242
+ }
243
+
244
+ .legend-row {
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 4px;
248
+ flex-wrap: wrap;
249
+ }
250
+
251
+ .swatch {
252
+ display: inline-block;
253
+ width: 10px;
254
+ height: 10px;
255
+ border-radius: 2px;
256
+ background: var(--sc);
257
+ }
258
+
259
+ .footnote {
260
+ margin: 8px 0 0;
261
+ font-size: 10px;
262
+ color: var(--text-tertiary);
263
+ letter-spacing: 0;
264
+ }
265
+
266
+ .warnings {
267
+ margin: 8px 0 0;
268
+ padding: 0;
269
+ list-style: none;
270
+ font-size: 10.5px;
271
+ line-height: 1.5;
272
+ color: var(--text-accent);
273
+ }
274
+
275
+ hr {
276
+ border: 0;
277
+ border-top: 1px solid var(--line);
278
+ margin: 12px 0;
279
+ }
280
+ </style>
@@ -0,0 +1,19 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const MulticonductorDetails: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type MulticonductorDetails = InstanceType<typeof MulticonductorDetails>;
18
+ export default MulticonductorDetails;
19
+ //# sourceMappingURL=MulticonductorDetails.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MulticonductorDetails.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/MulticonductorDetails.svelte.ts"],"names":[],"mappings":"AAyJA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,qBAAqB;;kBAA+E,CAAC;AACzF,KAAK,qBAAqB,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC1E,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,75 @@
1
+ <script lang="ts">
2
+ import { getAppState, getController } from '../context.svelte.js';
3
+ import { fmt, signed, splitName } from '../format.js';
4
+
5
+ const app = getAppState();
6
+ const ctrl = getController();
7
+ </script>
8
+
9
+ {#if ctrl.networkStats}
10
+ {@const stats = ctrl.networkStats}
11
+ {@const [cname, cregion] = splitName(app.active?.name ?? '')}
12
+ {@const deltaObjective = stats.deltaObjective}
13
+ <h2>{cname} <span class="region mono">{cregion}</span></h2>
14
+ <dl class="mono">
15
+ <div>
16
+ <dt>buses</dt>
17
+ <dd>{stats.buses}</dd>
18
+ </div>
19
+ <div>
20
+ <dt>lines</dt>
21
+ <dd>{stats.branches}</dd>
22
+ </div>
23
+ <div>
24
+ <dt>binding lines</dt>
25
+ <dd>{stats.binding ?? '…'}</dd>
26
+ </div>
27
+ <div>
28
+ <dt>cost</dt>
29
+ <dd>
30
+ {#if stats.objective === null}
31
+ <span class="blink">solving&hellip;</span>
32
+ {:else}
33
+ {fmt.format(stats.objective)} $/h
34
+ {/if}
35
+ </dd>
36
+ </div>
37
+ {#if ctrl.isPerturbed(ctrl.activeSolvable) && deltaObjective !== null}
38
+ <div class="delta">
39
+ <dt>vs base</dt>
40
+ <dd>{signed(deltaObjective)} $/h</dd>
41
+ </div>
42
+ {/if}
43
+ </dl>
44
+ {/if}
45
+
46
+ <style>
47
+ h2 {
48
+ margin: 0 0 12px;
49
+ font-size: 16px;
50
+ font-weight: 600;
51
+ }
52
+
53
+ dl {
54
+ margin: 0;
55
+ font-size: 12.5px;
56
+ }
57
+
58
+ dl div {
59
+ display: flex;
60
+ justify-content: space-between;
61
+ padding: 3px 0;
62
+ }
63
+
64
+ dl .delta dd {
65
+ color: var(--text-accent);
66
+ }
67
+
68
+ dt {
69
+ color: var(--text-secondary);
70
+ }
71
+
72
+ dd {
73
+ margin: 0;
74
+ }
75
+ </style>
@@ -0,0 +1,19 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const NetworkStats: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type NetworkStats = InstanceType<typeof NetworkStats>;
18
+ export default NetworkStats;
19
+ //# sourceMappingURL=NetworkStats.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkStats.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/NetworkStats.svelte.ts"],"names":[],"mappings":"AAsDA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,YAAY;;kBAA+E,CAAC;AAChF,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,35 @@
1
+ <script lang="ts">
2
+ import { getAppState } from '../context.svelte.js';
3
+
4
+ const app = getAppState();
5
+ </script>
6
+
7
+ {#if app.placingId}
8
+ <div class="placement-cue mono">click the map to place the topology layout</div>
9
+ {/if}
10
+
11
+ <style>
12
+ .placement-cue {
13
+ position: absolute;
14
+ left: 50%;
15
+ bottom: 52px;
16
+ z-index: 14;
17
+ transform: translateX(-50%);
18
+ padding: 8px 12px;
19
+ background: var(--panel);
20
+ border: 1px solid var(--accent);
21
+ border-radius: 3px;
22
+ color: var(--text-accent);
23
+ font-size: 11px;
24
+ box-shadow: 0 4px 18px rgba(32, 36, 43, 0.1);
25
+ pointer-events: none;
26
+ }
27
+
28
+ @media (max-width: 420px) {
29
+ .placement-cue {
30
+ bottom: 38px;
31
+ width: calc(100% - 28px);
32
+ text-align: center;
33
+ }
34
+ }
35
+ </style>
@@ -0,0 +1,19 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const PlacementCue: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type PlacementCue = InstanceType<typeof PlacementCue>;
18
+ export default PlacementCue;
19
+ //# sourceMappingURL=PlacementCue.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlacementCue.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/PlacementCue.svelte.ts"],"names":[],"mappings":"AAmBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,YAAY;;kBAA+E,CAAC;AAChF,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,eAAe,YAAY,CAAC"}