contain-css-svelte 1.1.4 → 1.1.6

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 (41) hide show
  1. package/dist/controls/ButtonLink.svelte +5 -1
  2. package/dist/controls/Input.svelte.d.ts +1 -1
  3. package/dist/controls/Option.svelte +3 -3
  4. package/dist/controls/Select.svelte +4 -3
  5. package/dist/controls/Slider.svelte +5 -1
  6. package/dist/cssprops.js +3 -0
  7. package/dist/dropdowns/DropdownMenu.svelte +40 -31
  8. package/dist/layout/Bar.svelte +4 -2
  9. package/dist/layout/Container.svelte.d.ts +6 -4
  10. package/dist/layout/DataListItem.svelte +1 -1
  11. package/dist/layout/FormProvider.svelte +3 -1
  12. package/dist/layout/GridLayout.svelte +1 -1
  13. package/dist/layout/Inline.svelte +5 -1
  14. package/dist/layout/Page.svelte +29 -1
  15. package/dist/layout/ResponsiveText.svelte +1 -1
  16. package/dist/layout/ResponsiveText.svelte.d.ts +2 -0
  17. package/dist/layout/Sidebar.svelte +22 -7
  18. package/dist/layout/SplitPane.svelte +3 -3
  19. package/dist/layout/Stack.svelte +5 -1
  20. package/dist/layout/TabBar.svelte +2 -3
  21. package/dist/layout/Table.svelte +21 -11
  22. package/dist/layout/Tile.svelte +1 -0
  23. package/dist/overlays/Dialog.svelte +2 -2
  24. package/dist/overlays/Dialog.svelte.d.ts +2 -2
  25. package/dist/overlays/Tooltip.svelte +65 -27
  26. package/dist/overlays/Tooltip.svelte.d.ts +1 -0
  27. package/dist/review/loadReviewAppPage.d.ts +1 -1
  28. package/dist/review/scenarios/IncredibleAppShell.svelte +44 -37
  29. package/dist/review/scenarios/LaunchStudio.svelte +108 -83
  30. package/dist/review/scenarios/LayoutWorkbench.svelte +49 -34
  31. package/dist/review/scenarios/TableWorkbench.svelte +82 -74
  32. package/dist/review/scenarios/VisualSystemBoard.svelte +387 -0
  33. package/dist/review/scenarios/VisualSystemBoard.svelte.d.ts +3 -0
  34. package/dist/review/scenarios.d.ts +8 -4
  35. package/dist/review/scenarios.js +9 -4
  36. package/dist/types.d.ts +3 -0
  37. package/dist/vars/colors.css +1 -1
  38. package/dist/vars/defaults.css +8 -1
  39. package/dist/vars/layout.css +7 -0
  40. package/dist/vars/themes/bootstrap.css +1 -0
  41. package/package.json +1 -1
@@ -11,115 +11,115 @@ import Table from "../../layout/Table.svelte";
11
11
  import TextLayout from "../../typography/TextLayout.svelte";
12
12
  const rows = [
13
13
  {
14
- id: "PLT-1042",
15
- task: "Stabilize SSO callback handling",
16
- owner: "TS",
17
- team: "Platform",
14
+ id: "BOX-1042",
15
+ task: "Define box as the square diplomat of containment",
16
+ owner: "BX",
17
+ team: "Boxes",
18
18
  priority: "P0",
19
19
  status: "Blocked",
20
20
  due: "Today",
21
21
  },
22
22
  {
23
- id: "MKT-221",
24
- task: "QA campaign attribution dashboard",
25
- owner: "AL",
26
- team: "Marketing",
23
+ id: "BIN-221",
24
+ task: "Compare open bins with lids, labels, and mild ambition",
25
+ owner: "BN",
26
+ team: "Bins",
27
27
  priority: "P1",
28
28
  status: "In Review",
29
29
  due: "Tomorrow",
30
30
  },
31
31
  {
32
- id: "OPS-878",
33
- task: "Backfill support SLA alerts",
34
- owner: "RJ",
35
- team: "Operations",
32
+ id: "BBL-878",
33
+ task: "Separate barrels from casks without starting a cellar debate",
34
+ owner: "BR",
35
+ team: "Barrels",
36
36
  priority: "P1",
37
37
  status: "In Progress",
38
38
  due: "Tue",
39
39
  },
40
40
  {
41
- id: "PLT-1048",
42
- task: "Ship migration retry banner copy",
43
- owner: "HS",
44
- team: "Platform",
41
+ id: "CRT-1048",
42
+ task: "Cross-reference crate with shipping, fruit, and stage magic",
43
+ owner: "CR",
44
+ team: "Crates",
45
45
  priority: "P2",
46
46
  status: "Ready",
47
47
  due: "Tue",
48
48
  },
49
49
  {
50
- id: "DS-55",
51
- task: "Audit density tokens for compact mode",
52
- owner: "AL",
53
- team: "Design",
50
+ id: "CAN-55",
51
+ task: "Audit canister, tin, and can for pantry precision",
52
+ owner: "CN",
53
+ team: "Cans",
54
54
  priority: "P2",
55
55
  status: "In Progress",
56
56
  due: "Wed",
57
57
  },
58
58
  {
59
- id: "OPS-881",
60
- task: "Resolve duplicate webhook replay jobs",
61
- owner: "RJ",
62
- team: "Operations",
59
+ id: "TUB-881",
60
+ task: "Resolve whether a tub is a bin taking a bath",
61
+ owner: "TB",
62
+ team: "Bins",
63
63
  priority: "P0",
64
64
  status: "Blocked",
65
65
  due: "Wed",
66
66
  },
67
67
  {
68
- id: "SUP-399",
69
- task: "Update admin troubleshooting macros",
70
- owner: "MK",
71
- team: "Support",
68
+ id: "JAR-399",
69
+ task: "Update jar notes for pickles, buttons, and tiny CSS tokens",
70
+ owner: "JR",
71
+ team: "Jars",
72
72
  priority: "P3",
73
73
  status: "Done",
74
74
  due: "Thu",
75
75
  },
76
76
  {
77
- id: "PLT-1054",
78
- task: "Instrument CSV export completion events",
79
- owner: "TS",
80
- team: "Platform",
77
+ id: "DRM-1054",
78
+ task: "Instrument drum definitions for industrial rhythm",
79
+ owner: "DM",
80
+ team: "Barrels",
81
81
  priority: "P1",
82
82
  status: "In Review",
83
83
  due: "Thu",
84
84
  },
85
85
  {
86
- id: "MKT-228",
87
- task: "Finalize launch checklist for webinar",
88
- owner: "JD",
89
- team: "Marketing",
86
+ id: "TTE-228",
87
+ task: "Finalize tote entry for handles, errands, and library books",
88
+ owner: "TT",
89
+ team: "Totes",
90
90
  priority: "P2",
91
91
  status: "Ready",
92
92
  due: "Fri",
93
93
  },
94
94
  {
95
- id: "DS-61",
96
- task: "Review icon sizing on navigation rails",
97
- owner: "HS",
98
- team: "Design",
95
+ id: "VLT-61",
96
+ task: "Review vault as the dramatic cousin of a lockbox",
97
+ owner: "VT",
98
+ team: "Boxes",
99
99
  priority: "P3",
100
100
  status: "In Progress",
101
101
  due: "Fri",
102
102
  },
103
103
  {
104
- id: "OPS-889",
105
- task: "Reconcile nightly inventory drift report",
106
- owner: "RJ",
107
- team: "Operations",
104
+ id: "AMP-889",
105
+ task: "Reconcile amphora with vase, urn, and ancient snack jar",
106
+ owner: "AM",
107
+ team: "Jars",
108
108
  priority: "P2",
109
109
  status: "In Progress",
110
110
  due: "Next Mon",
111
111
  },
112
112
  {
113
- id: "SUP-405",
114
- task: "Publish escalation policy revision",
115
- owner: "MK",
116
- team: "Support",
113
+ id: "PKT-405",
114
+ task: "Publish packet notes for envelopes, sachets, and tiny payloads",
115
+ owner: "PK",
116
+ team: "Pouches",
117
117
  priority: "P2",
118
118
  status: "Ready",
119
119
  due: "Next Mon",
120
120
  },
121
121
  ];
122
- let query = $state("a");
122
+ let query = $state("");
123
123
  let team = $state("all");
124
124
  let showClosed = $state(false);
125
125
  let bulkActionsOpen = $state(false);
@@ -190,7 +190,7 @@ function getCssLengthValue(node, property) {
190
190
  {#snippet header()}
191
191
  <Bar primary>
192
192
  <div>
193
- <h1>Operations Table</h1>
193
+ <h1>Container Reference Table</h1>
194
194
  </div>
195
195
 
196
196
  <div>
@@ -199,7 +199,7 @@ function getCssLengthValue(node, property) {
199
199
  aria-expanded={bulkActionsOpen}
200
200
  onclick={toggleBulkActions}
201
201
  >
202
- {bulkActionsOpen ? "Hide Actions" : "Bulk Actions"}
202
+ {bulkActionsOpen ? "Hide Actions" : "Reference Actions"}
203
203
  </Button>
204
204
  <Button secondary>Refresh</Button>
205
205
  </div>
@@ -207,36 +207,44 @@ function getCssLengthValue(node, property) {
207
207
  {/snippet}
208
208
 
209
209
  <TextLayout>
210
- <h1>Sticky table workbench</h1>
210
+ <h1>Thesaurus of things that contain other things</h1>
211
211
  <p>
212
- This scenario exercises filters, an action bar, and a sticky-header table
213
- with enough rows to expose scrolling behavior.
212
+ A container may be humble or ceremonial, disposable or heirloom, open to
213
+ the air or sealed against weather. This reference table catalogs boxes,
214
+ bins, barrels, jars, pouches, crates, drums, and every other noun that
215
+ wants to keep a smaller noun from rolling away.
214
216
  </p>
215
217
 
216
218
  <Form layout="above" fullWidth globalInputStyles>
217
219
  <Fieldset>
218
220
  {#snippet legend()}
219
- Filters
221
+ Reference Filters
220
222
  {/snippet}
221
223
 
222
224
  <FormItem>
223
225
  {#snippet label()}
224
- Search Queue
226
+ Search Terms
225
227
  {/snippet}
226
- <Input bind:value={query} placeholder="Search by task, team, or owner" />
228
+ <Input
229
+ bind:value={query}
230
+ placeholder="Search by container, family, or curator"
231
+ />
227
232
  </FormItem>
228
233
 
229
234
  <FormItem>
230
235
  {#snippet label()}
231
- Team
236
+ Family
232
237
  {/snippet}
233
- <Select bind:value={team}>
234
- <option value="all">All teams</option>
235
- <option value="Platform">Platform</option>
236
- <option value="Marketing">Marketing</option>
237
- <option value="Operations">Operations</option>
238
- <option value="Design">Design</option>
239
- <option value="Support">Support</option>
238
+ <Select bind:value={team} data-audit-action="open-team-select">
239
+ <option value="all">All families</option>
240
+ <option value="Boxes">Boxes</option>
241
+ <option value="Bins">Bins</option>
242
+ <option value="Barrels">Barrels</option>
243
+ <option value="Crates">Crates</option>
244
+ <option value="Cans">Cans</option>
245
+ <option value="Jars">Jars</option>
246
+ <option value="Totes">Totes</option>
247
+ <option value="Pouches">Pouches</option>
240
248
  </Select>
241
249
  </FormItem>
242
250
 
@@ -244,7 +252,7 @@ function getCssLengthValue(node, property) {
244
252
  {#snippet label()}
245
253
  Visibility
246
254
  {/snippet}
247
- <Checkbox bind:checked={showClosed}>Include completed work</Checkbox>
255
+ <Checkbox bind:checked={showClosed}>Include archived definitions</Checkbox>
248
256
  </FormItem>
249
257
  </Fieldset>
250
258
  </Form>
@@ -252,11 +260,11 @@ function getCssLengthValue(node, property) {
252
260
  {#if bulkActionsOpen}
253
261
  <div data-audit-target="bulk-actions-open">
254
262
  <Bar secondary>
255
- <div>{filteredRows.length} selected for scheduling review</div>
263
+ <div>{filteredRows.length} selected for lexical containment review</div>
256
264
  <div>
257
- <Button success>Assign Owner</Button>
258
- <Button warning>Snooze</Button>
259
- <Button danger>Escalate</Button>
265
+ <Button success>Assign Curator</Button>
266
+ <Button warning>Shelve</Button>
267
+ <Button danger>Dispute Term</Button>
260
268
  </div>
261
269
  </Bar>
262
270
  </div>
@@ -278,7 +286,7 @@ function getCssLengthValue(node, property) {
278
286
  >
279
287
  Scroll Preview
280
288
  </Button>
281
- <Button info>Export CSV</Button>
289
+ <Button info>Export Glossary</Button>
282
290
  </div>
283
291
  </Bar>
284
292
 
@@ -287,9 +295,9 @@ function getCssLengthValue(node, property) {
287
295
  {#snippet thead()}
288
296
  <thead>
289
297
  <tr>
290
- <th>Task</th>
291
- <th>Owner</th>
292
- <th>Team</th>
298
+ <th>Entry</th>
299
+ <th>Curator</th>
300
+ <th>Family</th>
293
301
  <th>Priority</th>
294
302
  <th>Status</th>
295
303
  <th>Due</th>
@@ -0,0 +1,387 @@
1
+ <script lang="ts">import Card from "../../Card.svelte";
2
+ import Button from "../../controls/Button.svelte";
3
+ import Checkbox from "../../controls/Checkbox.svelte";
4
+ import Input from "../../controls/Input.svelte";
5
+ import RadioButton from "../../controls/RadioButton.svelte";
6
+ import Select from "../../controls/Select.svelte";
7
+ import Slider from "../../controls/Slider.svelte";
8
+ import Toggle from "../../controls/Toggle.svelte";
9
+ import DropdownMenu from "../../dropdowns/DropdownMenu.svelte";
10
+ import Bar from "../../layout/Bar.svelte";
11
+ import Container from "../../layout/Container.svelte";
12
+ import DataList from "../../layout/DataList.svelte";
13
+ import DataListItem from "../../layout/DataListItem.svelte";
14
+ import Fieldset from "../../layout/Fieldset.svelte";
15
+ import Form from "../../layout/Form.svelte";
16
+ import FormItem from "../../layout/FormItem.svelte";
17
+ import GridLayout from "../../layout/GridLayout.svelte";
18
+ import Inline from "../../layout/Inline.svelte";
19
+ import Page from "../../layout/Page.svelte";
20
+ import Stack from "../../layout/Stack.svelte";
21
+ import Table from "../../layout/Table.svelte";
22
+ import Progress from "../../misc/Progress.svelte";
23
+ import Tag from "../../misc/Tag.svelte";
24
+ import Dialog from "../../overlays/Dialog.svelte";
25
+ import TextLayout from "../../typography/TextLayout.svelte";
26
+ const members = [
27
+ {
28
+ name: "Avery Crate",
29
+ role: "Box model curator",
30
+ status: "Approved",
31
+ intent: "success",
32
+ },
33
+ {
34
+ name: "Mina Can",
35
+ role: "Canister operations",
36
+ status: "Reviewing",
37
+ intent: "warning",
38
+ },
39
+ {
40
+ name: "Jon Barrel",
41
+ role: "Cargo product",
42
+ status: "Queued",
43
+ intent: "info",
44
+ },
45
+ ];
46
+ const rhythm = [
47
+ { label: "Crate contrast", value: 84 },
48
+ { label: "Seal separation", value: 68 },
49
+ { label: "Manifest density", value: 72 },
50
+ { label: "Cargo hierarchy", value: 91 },
51
+ ];
52
+ const rows = [
53
+ [
54
+ "Lids",
55
+ "Primary, secondary, and emergency closures for decisive sealing",
56
+ "Sealed",
57
+ ],
58
+ [
59
+ "Walls",
60
+ "Panel seams, bin edges, manifest rows, and dividers that hold the line",
61
+ "Inspect",
62
+ ],
63
+ [
64
+ "Manifests",
65
+ "Search fields, selectors, toggles, and sliders for cargo edits",
66
+ "Sealed",
67
+ ],
68
+ [
69
+ "Stacks",
70
+ "Bars, cards, lists, inline controls, and ledgers stacked like tidy bins",
71
+ "Sealed",
72
+ ],
73
+ ];
74
+ let plan = $state("growth");
75
+ let density = $state("balanced");
76
+ let includeArchived = $state(false);
77
+ let notifications = $state(true);
78
+ let confidence = $state(72);
79
+ let owner = $state("design");
80
+ let search = $state("crate polish");
81
+ let detailOpen = $state(false);
82
+ let dialogOpen = $state(false);
83
+ let confidenceLabel = $derived(confidence > 80 ? "High" : confidence > 55 ? "Medium" : "Low");
84
+ function openDetail() {
85
+ detailOpen = true;
86
+ }
87
+ function openDialog() {
88
+ dialogOpen = true;
89
+ }
90
+ </script>
91
+
92
+ <Page data-audit-target="page">
93
+ {#snippet header()}
94
+ <Bar primary height="auto">
95
+ <Stack gap="0">
96
+ <small>Workspace</small>
97
+ <h1>Contain Depot Board</h1>
98
+ </Stack>
99
+
100
+ <Inline wrap="wrap">
101
+ <DropdownMenu triggerAuditAction="open-actions-menu">
102
+ {#snippet label()}
103
+ Actions
104
+ {/snippet}
105
+ <li><button type="button">Share snapshot</button></li>
106
+ <li><button type="button">Create inspection note</button></li>
107
+ <li><button type="button">Export comparison</button></li>
108
+ </DropdownMenu>
109
+ <Button data-audit-action="open-dialog" primary onclick={openDialog}>
110
+ Preview
111
+ </Button>
112
+ </Inline>
113
+ </Bar>
114
+ {/snippet}
115
+
116
+ <Container maxWidth="1180px">
117
+ <Stack gap="var(--space-lg)">
118
+ <TextLayout>
119
+ <h2>Contain depot board</h2>
120
+ <h1>Lids, walls, manifests, and stacks in one cargo view</h1>
121
+ <p>
122
+ Welcome to the Contain depot, where ship manifests, policy memos,
123
+ retail storage reports, and old-fashioned box glossaries arrive at the
124
+ same inspection desk. Every crate earns a label, every label earns a
125
+ little skepticism, and every suspicious lid is asked politely to close
126
+ before the evening whistle.
127
+ </p>
128
+ </TextLayout>
129
+
130
+ <GridLayout card>
131
+ <Card>
132
+ {#snippet header()}
133
+ <h3>Readiness</h3>
134
+ {/snippet}
135
+ <h2>84%</h2>
136
+ <p>
137
+ Eight of ten containment checks are sealed and stacked. The
138
+ remaining issues are ordinary yard dents: one crate has a soft
139
+ corner, one manifest line needs more breathing room, and one label
140
+ has been warned not to drift into international waters.
141
+ </p>
142
+ {#snippet footer()}
143
+ <Inline wrap="wrap">
144
+ <Tag success>Passing</Tag>
145
+ <Tag info>{confidenceLabel}</Tag>
146
+ </Inline>
147
+ {/snippet}
148
+ </Card>
149
+
150
+ <Card>
151
+ {#snippet header()}
152
+ <h3>Closure Set</h3>
153
+ {/snippet}
154
+ <Stack gap="var(--space)">
155
+ <Inline wrap="wrap">
156
+ <Button primary data-audit-action="focus-primary" data-audit-focus="true">
157
+ Seal
158
+ </Button>
159
+ <Button secondary>Hold</Button>
160
+ </Inline>
161
+ <Inline wrap="wrap">
162
+ <Button success>Clear</Button>
163
+ <Button warning>Delay</Button>
164
+ <Button danger>Reject</Button>
165
+ </Inline>
166
+ </Stack>
167
+ </Card>
168
+
169
+ <Card>
170
+ {#snippet header()}
171
+ <h3>Yard Rhythm</h3>
172
+ {/snippet}
173
+ <p>
174
+ These progress rows track the practical rhythm of the yard: contrast
175
+ between crates, separation between seals, density on the manifest,
176
+ and hierarchy in the cargo stack. A good depot never lets a barrel
177
+ pretend it is a filing cabinet.
178
+ </p>
179
+ <Stack gap="var(--space)">
180
+ {#each rhythm as item}
181
+ <div>
182
+ <strong>{item.label}</strong>
183
+ <Progress value={item.value} max={100}>{item.value}%</Progress>
184
+ </div>
185
+ {/each}
186
+ </Stack>
187
+ </Card>
188
+ </GridLayout>
189
+
190
+ <GridLayout>
191
+ <Container border data-audit-target="form-panel">
192
+ <Bar secondary>
193
+ <h2>Filters</h2>
194
+ <Toggle bind:checked={notifications}>Alerts</Toggle>
195
+ </Bar>
196
+
197
+ <Form layout="above" fullWidth globalInputStyles>
198
+ <Fieldset>
199
+ {#snippet legend()}
200
+ Search and segmentation
201
+ {/snippet}
202
+
203
+ <FormItem>
204
+ {#snippet label()}
205
+ Search
206
+ {/snippet}
207
+ <Input
208
+ bind:value={search}
209
+ placeholder="Find a crate, seal, or manifest"
210
+ />
211
+ </FormItem>
212
+
213
+ <FormItem>
214
+ {#snippet label()}
215
+ Container
216
+ {/snippet}
217
+ <Select bind:value={plan}>
218
+ <option value="starter">Lunchbox</option>
219
+ <option value="growth">Shipping crate</option>
220
+ <option value="enterprise">Freight container</option>
221
+ </Select>
222
+ </FormItem>
223
+
224
+ <FormItem>
225
+ {#snippet label()}
226
+ Handler
227
+ {/snippet}
228
+ <RadioButton bind:group={owner} value="design">Box crew</RadioButton>
229
+ <RadioButton bind:group={owner} value="frontend">Can crew</RadioButton>
230
+ <RadioButton bind:group={owner} value="product">Pack crew</RadioButton>
231
+ </FormItem>
232
+
233
+ <FormItem>
234
+ {#snippet label()}
235
+ Density
236
+ {/snippet}
237
+ <Select bind:value={density}>
238
+ <option value="compact">Compact</option>
239
+ <option value="balanced">Balanced</option>
240
+ <option value="spacious">Spacious</option>
241
+ </Select>
242
+ </FormItem>
243
+
244
+ <FormItem>
245
+ {#snippet label()}
246
+ Confidence {confidence}%
247
+ {/snippet}
248
+ <Slider bind:value={confidence} min={0} max={100} />
249
+ </FormItem>
250
+
251
+ <FormItem>
252
+ {#snippet label()}
253
+ History
254
+ {/snippet}
255
+ <Checkbox bind:checked={includeArchived}>Include archived containers</Checkbox>
256
+ </FormItem>
257
+ </Fieldset>
258
+ </Form>
259
+ </Container>
260
+
261
+ <Container border>
262
+ <Bar secondary>
263
+ <h2>Containment Queue</h2>
264
+ <Button data-audit-action="open-detail" onclick={openDetail}>
265
+ Inspect
266
+ </Button>
267
+ </Bar>
268
+
269
+ {#if detailOpen}
270
+ <div data-audit-target="detail-open">
271
+ <Card>
272
+ {#snippet header()}
273
+ <h3>Selection detail</h3>
274
+ {/snippet}
275
+ <p>
276
+ The selected container has survived the first shake test, but
277
+ the crew still needs to inspect its label, closure, and
278
+ surrounding paperwork. Long copy is useful here because a
279
+ container can look perfectly calm until a full manifest asks
280
+ it to hold three more lines than planned.
281
+ </p>
282
+ </Card>
283
+ </div>
284
+ {/if}
285
+
286
+ <DataList stackable>
287
+ {#each members as member}
288
+ <DataListItem interactive>
289
+ {#snippet start()}
290
+ <Tag info>{member.name.slice(0, 1)}</Tag>
291
+ {/snippet}
292
+ <h3>{member.name}</h3>
293
+ <span>{member.role}</span>
294
+ {#snippet end()}
295
+ {#if member.intent === "success"}
296
+ <Tag success>{member.status}</Tag>
297
+ {:else if member.intent === "warning"}
298
+ <Tag warning>{member.status}</Tag>
299
+ {:else}
300
+ <Tag info>{member.status}</Tag>
301
+ {/if}
302
+ {/snippet}
303
+ </DataListItem>
304
+ {/each}
305
+ </DataList>
306
+ </Container>
307
+ </GridLayout>
308
+
309
+ <Container border data-audit-target="table-panel">
310
+ <Bar secondary>
311
+ <h2>Seal Checklist</h2>
312
+ <Inline wrap="wrap">
313
+ <Tag info>{density}</Tag>
314
+ <Tag success>{plan}</Tag>
315
+ </Inline>
316
+ </Bar>
317
+
318
+ <Table>
319
+ {#snippet thead()}
320
+ <thead>
321
+ <tr>
322
+ <th>Area</th>
323
+ <th>Inspection Focus</th>
324
+ <th>Status</th>
325
+ <th>Action</th>
326
+ </tr>
327
+ </thead>
328
+ {/snippet}
329
+
330
+ {#snippet tbody()}
331
+ <tbody>
332
+ {#each rows as row}
333
+ <tr>
334
+ <th>{row[0]}</th>
335
+ <td>{row[1]}</td>
336
+ <td>{row[2]}</td>
337
+ <td><Button>Open</Button></td>
338
+ </tr>
339
+ {/each}
340
+ </tbody>
341
+ {/snippet}
342
+ </Table>
343
+ </Container>
344
+ </Stack>
345
+ </Container>
346
+
347
+ {#if dialogOpen}
348
+ <Dialog
349
+ open={dialogOpen}
350
+ onClose={() => {
351
+ dialogOpen = false;
352
+ }}
353
+ >
354
+ <div data-audit-target="dialog-open">
355
+ <TextLayout>
356
+ <h2>Inspection preview</h2>
357
+ <p>
358
+ This modal is the inspection booth at the edge of the yard. The
359
+ supervisor checks the selected container, confirms the handler, and
360
+ stamps the confidence score before the little box is allowed to
361
+ travel with the rest of the shipment.
362
+ </p>
363
+ </TextLayout>
364
+ <GridLayout card>
365
+ <Card>
366
+ {#snippet header()}
367
+ <h3>Container</h3>
368
+ {/snippet}
369
+ <strong>{plan}</strong>
370
+ </Card>
371
+ <Card>
372
+ {#snippet header()}
373
+ <h3>Owner</h3>
374
+ {/snippet}
375
+ <strong>{owner}</strong>
376
+ </Card>
377
+ <Card>
378
+ {#snippet header()}
379
+ <h3>Confidence</h3>
380
+ {/snippet}
381
+ <strong>{confidence}%</strong>
382
+ </Card>
383
+ </GridLayout>
384
+ </div>
385
+ </Dialog>
386
+ {/if}
387
+ </Page>
@@ -0,0 +1,3 @@
1
+ declare const VisualSystemBoard: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type VisualSystemBoard = ReturnType<typeof VisualSystemBoard>;
3
+ export default VisualSystemBoard;