@tellegen/svelte 0.4.3 → 0.4.5

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 (115) hide show
  1. package/README.md +45 -0
  2. package/dist/TellegenMap.svelte +63 -22
  3. package/dist/TellegenProvider.svelte +7 -4
  4. package/dist/TellegenShell.svelte +12 -1
  5. package/dist/TellegenViewer.svelte +2 -0
  6. package/dist/basemap.d.ts +14 -0
  7. package/dist/basemap.js +27 -0
  8. package/dist/colors.d.ts +6 -1
  9. package/dist/colors.js +11 -4
  10. package/dist/components/DiagnosticLogView.svelte +176 -0
  11. package/dist/components/DiagnosticLogView.svelte.d.ts +11 -0
  12. package/dist/components/FormulationSelector.svelte +1 -1
  13. package/dist/components/LocalCaseDetails.svelte +18 -3
  14. package/dist/components/LogEntryView.svelte +188 -0
  15. package/dist/components/LogEntryView.svelte.d.ts +11 -0
  16. package/dist/components/LogPanel.svelte +25 -0
  17. package/dist/components/LogPanel.svelte.d.ts +3 -0
  18. package/dist/components/McResults.svelte +18 -3
  19. package/dist/components/McWorkbench.svelte +688 -0
  20. package/dist/components/McWorkbench.svelte.d.ts +38 -0
  21. package/dist/components/MultiWire.svelte +136 -0
  22. package/dist/components/MultiWire.svelte.d.ts +7 -0
  23. package/dist/components/MulticonductorDetails.svelte +7 -0
  24. package/dist/components/NotificationCenter.svelte +37 -6
  25. package/dist/components/OmniSearch.svelte +163 -0
  26. package/dist/components/OmniSearch.svelte.d.ts +14 -0
  27. package/dist/components/ResultsTable.svelte +259 -0
  28. package/dist/components/ResultsTable.svelte.d.ts +13 -0
  29. package/dist/components/SchematicCanvas.svelte +1896 -0
  30. package/dist/components/SchematicCanvas.svelte.d.ts +13 -0
  31. package/dist/components/SolveCard.svelte +6 -0
  32. package/dist/components/schematic/PickCard.svelte +126 -0
  33. package/dist/components/schematic/PickCard.svelte.d.ts +56 -0
  34. package/dist/components/schematic/export.d.ts +21 -0
  35. package/dist/components/schematic/export.js +110 -0
  36. package/dist/components/schematic/layers.d.ts +161 -0
  37. package/dist/components/schematic/layers.js +756 -0
  38. package/dist/components/schematic/paint.d.ts +28 -0
  39. package/dist/components/schematic/paint.js +69 -0
  40. package/dist/components/schematic/palette.d.ts +34 -0
  41. package/dist/components/schematic/palette.js +54 -0
  42. package/dist/components/schematic/text.d.ts +83 -0
  43. package/dist/components/schematic/text.js +190 -0
  44. package/dist/components/schematic/view-prefs.svelte.d.ts +30 -0
  45. package/dist/components/schematic/view-prefs.svelte.js +77 -0
  46. package/dist/components.d.ts +4 -0
  47. package/dist/components.js +4 -0
  48. package/dist/context.svelte.d.ts +2 -0
  49. package/dist/context.svelte.js +2 -0
  50. package/dist/controller.svelte.d.ts +40 -5
  51. package/dist/controller.svelte.js +230 -25
  52. package/dist/diagram/basemap.d.ts +28 -0
  53. package/dist/diagram/basemap.js +39 -0
  54. package/dist/diagram/bus-stacks.d.ts +19 -0
  55. package/dist/diagram/bus-stacks.js +99 -0
  56. package/dist/diagram/colour-modes.d.ts +18 -0
  57. package/dist/diagram/colour-modes.js +33 -0
  58. package/dist/diagram/connections.d.ts +30 -0
  59. package/dist/diagram/connections.js +129 -0
  60. package/dist/diagram/display-tree.d.ts +21 -0
  61. package/dist/diagram/display-tree.js +65 -0
  62. package/dist/diagram/energisation.d.ts +10 -0
  63. package/dist/diagram/energisation.js +31 -0
  64. package/dist/diagram/feeders.d.ts +30 -0
  65. package/dist/diagram/feeders.js +57 -0
  66. package/dist/diagram/galvanic-zones.d.ts +60 -0
  67. package/dist/diagram/galvanic-zones.js +210 -0
  68. package/dist/diagram/graph-inputs.d.ts +18 -0
  69. package/dist/diagram/graph-inputs.js +103 -0
  70. package/dist/diagram/index.d.ts +28 -0
  71. package/dist/diagram/index.js +28 -0
  72. package/dist/diagram/landmarks.d.ts +50 -0
  73. package/dist/diagram/landmarks.js +153 -0
  74. package/dist/diagram/layout-morph.d.ts +15 -0
  75. package/dist/diagram/layout-morph.js +32 -0
  76. package/dist/diagram/multi-wire.d.ts +44 -0
  77. package/dist/diagram/multi-wire.js +65 -0
  78. package/dist/diagram/phase-bars.d.ts +35 -0
  79. package/dist/diagram/phase-bars.js +44 -0
  80. package/dist/diagram/results-table.d.ts +47 -0
  81. package/dist/diagram/results-table.js +173 -0
  82. package/dist/diagram/schematic-equipment.d.ts +133 -0
  83. package/dist/diagram/schematic-equipment.js +645 -0
  84. package/dist/diagram/schematic-layout.d.ts +51 -0
  85. package/dist/diagram/schematic-layout.js +240 -0
  86. package/dist/diagram/search.d.ts +36 -0
  87. package/dist/diagram/search.js +48 -0
  88. package/dist/diagram/shared-routes.d.ts +21 -0
  89. package/dist/diagram/shared-routes.js +40 -0
  90. package/dist/diagram/short-names.d.ts +11 -0
  91. package/dist/diagram/short-names.js +54 -0
  92. package/dist/diagram/snapshot.d.ts +115 -0
  93. package/dist/diagram/snapshot.js +242 -0
  94. package/dist/diagram/summary.d.ts +65 -0
  95. package/dist/diagram/summary.js +144 -0
  96. package/dist/diagram/svg-export.d.ts +80 -0
  97. package/dist/diagram/svg-export.js +108 -0
  98. package/dist/diagram/tree-walk.d.ts +13 -0
  99. package/dist/diagram/tree-walk.js +83 -0
  100. package/dist/diagram/value-labels.d.ts +24 -0
  101. package/dist/diagram/value-labels.js +69 -0
  102. package/dist/diagram/view-state.d.ts +12 -0
  103. package/dist/diagram/view-state.js +22 -0
  104. package/dist/diagram/voltage-levels.d.ts +14 -0
  105. package/dist/diagram/voltage-levels.js +20 -0
  106. package/dist/index.d.ts +3 -0
  107. package/dist/index.js +2 -0
  108. package/dist/log.svelte.d.ts +77 -0
  109. package/dist/log.svelte.js +149 -0
  110. package/dist/notices.svelte.d.ts +3 -0
  111. package/dist/state.svelte.d.ts +42 -5
  112. package/dist/state.svelte.js +56 -4
  113. package/dist/transformer-icon.d.ts +22 -13
  114. package/dist/transformer-icon.js +23 -13
  115. package/package.json +2 -2
@@ -0,0 +1,259 @@
1
+ <script lang="ts">
2
+ import { queryTable, type TableModel } from '../diagram/index.js';
3
+
4
+ let {
5
+ model,
6
+ selected,
7
+ onselect,
8
+ hovered = -1,
9
+ onhover
10
+ }: {
11
+ model: TableModel;
12
+ /** Row index (network order) of the current selection, or −1. */
13
+ selected: number;
14
+ onselect: (index: number) => void;
15
+ /** Row under the pointer here or in a linked view (−1 for none). */
16
+ hovered?: number;
17
+ onhover?: (index: number) => void;
18
+ } = $props();
19
+
20
+ const ROW = 22;
21
+ const HEIGHT = 240;
22
+ const OVERSCAN = 6;
23
+ let text = $state('');
24
+ let issuesOnly = $state(false);
25
+ let sortKey = $state<string | null>(null);
26
+ let descending = $state(false);
27
+ let scrollTop = $state(0);
28
+ let scroller = $state<HTMLDivElement>();
29
+
30
+ const rows = $derived(queryTable(model, { text, issuesOnly, sortKey, descending }));
31
+ const first = $derived(Math.max(0, Math.floor(scrollTop / ROW) - OVERSCAN));
32
+ const last = $derived(Math.min(rows.length, first + Math.ceil(HEIGHT / ROW) + 2 * OVERSCAN));
33
+ const visible = $derived(Array.from(rows.subarray(first, last)));
34
+ const template = $derived(
35
+ model.columns
36
+ .map((c) =>
37
+ c.numeric
38
+ ? 'minmax(64px, 0.8fr)'
39
+ : c.key === 'id'
40
+ ? 'minmax(110px, 1.5fr)'
41
+ : 'minmax(70px, 1fr)'
42
+ )
43
+ .join(' ')
44
+ );
45
+ const format = (v: unknown, digits = 2) =>
46
+ v === null || v === undefined
47
+ ? '—'
48
+ : typeof v === 'number'
49
+ ? v.toLocaleString(undefined, {
50
+ minimumFractionDigits: digits,
51
+ maximumFractionDigits: digits
52
+ })
53
+ : String(v);
54
+
55
+ function sort(key: string, numeric?: boolean) {
56
+ // Numbers start largest-first, text A–Z; a second click reverses.
57
+ descending = sortKey === key ? !descending : !!numeric;
58
+ sortKey = key;
59
+ }
60
+ // Bring the selection into view when it changes elsewhere (map, issues, search).
61
+ $effect(() => {
62
+ const k = rows.indexOf(selected);
63
+ if (k < 0 || !scroller) return;
64
+ const y = k * ROW;
65
+ if (y < scroller.scrollTop || y + ROW > scroller.scrollTop + HEIGHT)
66
+ scroller.scrollTop = y - HEIGHT / 2;
67
+ });
68
+ function onkeydown(e: KeyboardEvent) {
69
+ if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key) || !rows.length) return;
70
+ e.preventDefault();
71
+ const k = rows.indexOf(selected);
72
+ const next =
73
+ e.key === 'Home'
74
+ ? 0
75
+ : e.key === 'End'
76
+ ? rows.length - 1
77
+ : Math.max(
78
+ 0,
79
+ Math.min(rows.length - 1, (k < 0 ? -1 : k) + (e.key === 'ArrowDown' ? 1 : -1))
80
+ );
81
+ onselect(rows[next]);
82
+ }
83
+ </script>
84
+
85
+ <div class="table">
86
+ <div class="toolbar">
87
+ <input
88
+ type="search"
89
+ placeholder="Filter by ID or endpoint"
90
+ aria-label="Filter rows"
91
+ bind:value={text}
92
+ />
93
+ <label><input type="checkbox" bind:checked={issuesOnly} /> Issues only</label>
94
+ </div>
95
+ <!-- The grid is a keyboard target: arrow keys move the shared selection. -->
96
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
97
+ <div
98
+ class="scroll"
99
+ role="grid"
100
+ aria-label="Results by {model.kind === 'bus' ? 'bus' : 'branch'}"
101
+ aria-rowcount={rows.length}
102
+ tabindex="0"
103
+ style:height="{HEIGHT}px"
104
+ bind:this={scroller}
105
+ onscroll={(e) => (scrollTop = e.currentTarget.scrollTop)}
106
+ {onkeydown}
107
+ >
108
+ <div class="head" role="row" style:grid-template-columns={template}>
109
+ {#each model.columns as c (c.key)}
110
+ <div
111
+ role="columnheader"
112
+ class:num={c.numeric}
113
+ aria-sort={sortKey === c.key ? (descending ? 'descending' : 'ascending') : 'none'}
114
+ >
115
+ <button title={c.title ?? `Sort by ${c.label}`} onclick={() => sort(c.key, c.numeric)}
116
+ >{c.label}{#if c.unit}<small>{c.unit}</small>{/if}</button
117
+ >
118
+ </div>
119
+ {/each}
120
+ </div>
121
+ <div class="body" style:height="{rows.length * ROW}px">
122
+ {#each visible as i, n (i)}
123
+ {@const row = model.row(i)}
124
+ <!-- Arrow keys on the grid move the selection; a click is the pointer equivalent. -->
125
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
126
+ <div
127
+ class="row {row.state}"
128
+ role="row"
129
+ tabindex="-1"
130
+ aria-selected={i === selected}
131
+ class:hovered={i === hovered}
132
+ style:top="{(first + n) * ROW}px"
133
+ style:grid-template-columns={template}
134
+ onclick={() => onselect(i)}
135
+ onpointerenter={() => onhover?.(i)}
136
+ onpointerleave={() => onhover?.(-1)}
137
+ >
138
+ {#each model.columns as c (c.key)}
139
+ <span role="gridcell" class:num={c.numeric}>{format(row[c.key], c.digits)}</span>
140
+ {/each}
141
+ </div>
142
+ {/each}
143
+ </div>
144
+ </div>
145
+ <p class="count">{rows.length.toLocaleString()} of {model.count.toLocaleString()} rows</p>
146
+ </div>
147
+
148
+ <style>
149
+ .table {
150
+ font-size: 11px;
151
+ }
152
+ .toolbar {
153
+ display: flex;
154
+ gap: 8px;
155
+ align-items: center;
156
+ margin-bottom: 4px;
157
+ }
158
+ .toolbar input[type='search'] {
159
+ flex: 1;
160
+ min-width: 0;
161
+ font: 11px var(--font-mono);
162
+ color: var(--ink);
163
+ background: var(--paper);
164
+ border: 1px solid var(--line);
165
+ border-radius: 3px;
166
+ padding: 5px 7px;
167
+ }
168
+ .toolbar label,
169
+ .count,
170
+ small {
171
+ color: var(--text-secondary);
172
+ }
173
+ .scroll {
174
+ position: relative;
175
+ overflow: auto;
176
+ border: 1px solid var(--line);
177
+ border-radius: 3px;
178
+ font: 10px var(--font-mono);
179
+ }
180
+ .scroll:focus-visible {
181
+ outline: 2px solid var(--accent);
182
+ outline-offset: 2px;
183
+ }
184
+ .head {
185
+ position: sticky;
186
+ top: 0;
187
+ z-index: 1;
188
+ display: grid;
189
+ min-width: max-content;
190
+ background: var(--surface-control);
191
+ border-bottom: 1px solid var(--line);
192
+ }
193
+ .head button {
194
+ width: 100%;
195
+ padding: 4px 6px;
196
+ text-align: left;
197
+ font: inherit;
198
+ color: var(--text-secondary);
199
+ background: transparent;
200
+ border: 0;
201
+ cursor: pointer;
202
+ white-space: nowrap;
203
+ }
204
+ .head .num button {
205
+ text-align: right;
206
+ }
207
+ .head [aria-sort='ascending'] button,
208
+ .head [aria-sort='descending'] button {
209
+ color: var(--ink);
210
+ }
211
+ small {
212
+ display: block;
213
+ font-size: 9px;
214
+ }
215
+ .body {
216
+ position: relative;
217
+ min-width: max-content;
218
+ }
219
+ .row {
220
+ position: absolute;
221
+ left: 0;
222
+ right: 0;
223
+ height: 22px;
224
+ display: grid;
225
+ align-items: center;
226
+ cursor: pointer;
227
+ border-bottom: 1px solid color-mix(in srgb, var(--line) 50%, transparent);
228
+ }
229
+ .row span {
230
+ padding: 0 6px;
231
+ overflow: hidden;
232
+ text-overflow: ellipsis;
233
+ white-space: nowrap;
234
+ }
235
+ .num {
236
+ text-align: right;
237
+ }
238
+ .row.hovered {
239
+ box-shadow: inset 3px 0 var(--line-strong, var(--text-secondary));
240
+ }
241
+ .row[aria-selected='true'] {
242
+ background: var(--accent-soft);
243
+ box-shadow: inset 3px 0 var(--accent);
244
+ }
245
+ .violation span:last-child {
246
+ color: var(--text-danger);
247
+ }
248
+ .warning span:last-child {
249
+ color: var(--text-accent);
250
+ }
251
+ .inactive,
252
+ .missing,
253
+ .unbounded {
254
+ color: var(--text-secondary);
255
+ }
256
+ .count {
257
+ margin: 4px 0 0;
258
+ }
259
+ </style>
@@ -0,0 +1,13 @@
1
+ import { type TableModel } from '../diagram/index.js';
2
+ type $$ComponentProps = {
3
+ model: TableModel;
4
+ /** Row index (network order) of the current selection, or −1. */
5
+ selected: number;
6
+ onselect: (index: number) => void;
7
+ /** Row under the pointer here or in a linked view (−1 for none). */
8
+ hovered?: number;
9
+ onhover?: (index: number) => void;
10
+ };
11
+ declare const ResultsTable: import("svelte").Component<$$ComponentProps, {}, "">;
12
+ type ResultsTable = ReturnType<typeof ResultsTable>;
13
+ export default ResultsTable;