@graview/layout 0.1.27 → 0.1.29

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.
package/dist/city.d.ts CHANGED
@@ -1,17 +1,24 @@
1
1
  import { type AnySchema } from "@graview/core";
2
- import { type CityMap, type Plot } from "@graview/core/scene";
2
+ import { type CityMap, type Plot } from "@graview/core/city";
3
3
  import type { CityFrame, Layout } from "./types.js";
4
4
  /**
5
5
  * THE CITY AT ALTITUDE: districts on the lattice, one uniform scale.
6
6
  *
7
7
  * The map is the declaration's (`cityMap`): a kind's plot never moves
8
- * because of what happened today or how wide the window is. What this
9
- * file decides is only how the lattice meets the canvas — ONE scale and
10
- * ONE translate, so the city keeps its shape at every width, rather than
11
- * the per-axis stretch a ring needed to fill a wide canvas — and how big
12
- * each district card is drawn: nearer rows larger, as the ring drew the
13
- * near side of the ellipse larger, with the reader's unit honored and
14
- * given back only as far as the cards need to keep off each other.
8
+ * because of what happened today. What this file decides is how the
9
+ * lattice meets the canvas — ONE scale and ONE translate, so the city keeps
10
+ * its shape at every width — and which way up it stands: up and to the
11
+ * right along the ground in a wide window, down it in a tall one, whichever
12
+ * draws it larger.
13
+ *
14
+ * THE WHOLE CITY OPENS IN THE WINDOW. The cell is the largest at which
15
+ * every plot, and the name under it, stands inside the room the canvas
16
+ * leaves once its chrome is paid for — the bar's corner controls at the
17
+ * top, the ask field and the zoom at the foot. The names are a fixed size
18
+ * on the screen, so the city never grows past the window to make room for
19
+ * them: where two would collide at this scale, the less pressing one says
20
+ * less — its name and count without the bar, then nothing until the camera
21
+ * comes closer. A district with problems is the last to go quiet.
15
22
  */
16
23
  export interface CityCard {
17
24
  readonly id: string;
@@ -26,13 +33,33 @@ export interface CityCard {
26
33
  * listed one and counted three — opening it answered nothing.
27
34
  */
28
35
  readonly openedMin?: number;
36
+ /** The name under the district, on the screen: its whole size, and its size said short (name and count). */
37
+ readonly nameplate?: {
38
+ readonly width: number;
39
+ readonly height: number;
40
+ readonly short: {
41
+ readonly width: number;
42
+ readonly height: number;
43
+ };
44
+ };
45
+ /** How pressing it is to say: problems first, then population. The most pressing names are placed first. */
46
+ readonly weight?: number;
29
47
  /**
30
- * Extra height for a drive-in's marquee — the showings drawn as buttons
31
- * under the nameplate. Not given back like the listing: a marquee
32
- * clipped is a button nobody can press.
48
+ * The showings hanging under its name, when they are shown (a district a
49
+ * lens is open on): how wide and tall, on the screen. No other district's
50
+ * name is placed on them.
33
51
  */
34
- readonly marquee?: number;
52
+ readonly marquee?: {
53
+ readonly width: number;
54
+ readonly height: number;
55
+ };
35
56
  }
57
+ /**
58
+ * How much a district's name says at this scale — all of it, its name and
59
+ * count, or nothing until closer — and whether it stands beside the plot
60
+ * (`-aside`) because the ground under it is the next district's.
61
+ */
62
+ export type Nameplate = "full" | "short" | "full-above" | "short-above" | "full-aside" | "short-aside" | "none";
36
63
  export interface PlacedCard {
37
64
  readonly id: string;
38
65
  readonly x: number;
@@ -41,55 +68,55 @@ export interface PlacedCard {
41
68
  readonly height: number;
42
69
  readonly depth: number;
43
70
  readonly plot: Plot;
71
+ readonly nameplate: Nameplate;
44
72
  }
45
- /** Two drawn boxes sharing ground, with a little air required between them. */
46
- export declare function collides(a: {
47
- x: number;
48
- y: number;
49
- width: number;
50
- height: number;
51
- }, b: {
52
- x: number;
53
- y: number;
54
- width: number;
55
- height: number;
56
- }, air?: number): boolean;
57
- export declare function placeCity(cards: readonly CityCard[], schema: AnySchema, base: {
73
+ interface Box {
74
+ readonly x: number;
75
+ readonly y: number;
58
76
  readonly width: number;
59
77
  readonly height: number;
60
- }, canvas: {
78
+ }
79
+ export declare function nameplateSize(name: string, count: number, problems: number, states: boolean, unit?: number): {
80
+ width: number;
81
+ height: number;
82
+ short: {
83
+ width: number;
84
+ height: number;
85
+ };
86
+ };
87
+ /** Two drawn boxes sharing ground, with a little air required between them. */
88
+ export declare function collides(a: Box, b: Box, air?: number): boolean;
89
+ export declare function placeCity(cards: readonly CityCard[], schema: AnySchema, canvas: {
61
90
  readonly width: number;
62
91
  readonly height: number;
63
92
  }, inset?: {
64
93
  readonly left?: number;
65
94
  readonly right?: number;
95
+ readonly top?: number;
96
+ readonly bottom?: number;
66
97
  }, options?: {
67
98
  readonly order?: readonly string[];
68
99
  readonly plots?: Readonly<Record<string, {
69
100
  col: number;
70
101
  row: number;
71
102
  }>>;
72
- readonly scale?: number;
73
- /** The height a card is never drawn under, whatever the canvas — the layout's own floor. */
74
- readonly minHeight?: number;
75
103
  /** A factor on the fitted cell: the camera brought closer, the city allowed past the window. */
76
104
  readonly zoom?: number;
105
+ /** The kinds whose districts are chosen: a city drawn past the window keeps these, and their names, inside it. */
106
+ readonly keep?: readonly string[];
77
107
  /** The pan baked into the cards, recorded on the frame so the ground can tween with them. */
78
108
  readonly pan?: {
79
109
  readonly x: number;
80
110
  readonly y: number;
81
111
  };
112
+ /** A cell's height over its width: 0.5 at an angle, 1 from straight above. */
113
+ readonly tilt?: number;
82
114
  /**
83
115
  * Ground already taken — the picture standing in the middle from
84
- * altitude. No district is laid under it: the city slides aside, and
85
- * grows, until every district has ground of its own.
116
+ * altitude, the corner controls. No district or name is laid under it:
117
+ * the city steps aside, then draws smaller, until each has ground of its own.
86
118
  */
87
- readonly avoid?: readonly {
88
- readonly x: number;
89
- readonly y: number;
90
- readonly width: number;
91
- readonly height: number;
92
- }[];
119
+ readonly avoid?: readonly Box[];
93
120
  }): {
94
121
  readonly placed: readonly PlacedCard[];
95
122
  readonly frame: CityFrame;
@@ -107,6 +134,10 @@ export declare function cameraLimit(result: {
107
134
  readonly width: number;
108
135
  readonly height: number;
109
136
  readonly city?: CityFrame;
137
+ readonly visible?: {
138
+ readonly width: number;
139
+ readonly height: number;
140
+ };
110
141
  }): {
111
142
  readonly x: number;
112
143
  readonly y: number;
@@ -134,7 +165,7 @@ export interface PastTheEdge {
134
165
  * is named here with the side it lies past, so the scene can put a sign on
135
166
  * that edge, and with the pan that brings it into the window.
136
167
  */
137
- export declare function districtsPastTheEdge(result: Pick<Layout, "nodes" | "width" | "height" | "city">): readonly PastTheEdge[];
168
+ export declare function districtsPastTheEdge(result: Pick<Layout, "nodes" | "width" | "height" | "city" | "visible">): readonly PastTheEdge[];
138
169
  /**
139
170
  * THE PAN THAT KEEPS THE POINT UNDER THE POINTER STILL when the city is
140
171
  * zoomed. The city is placed about the canvas's center, so scaling its cell
@@ -159,4 +190,5 @@ export declare function panForZoom(pan: {
159
190
  readonly x: number;
160
191
  readonly y: number;
161
192
  };
193
+ export {};
162
194
  //# sourceMappingURL=city.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"city.d.ts","sourceRoot":"","sources":["../src/city.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"city.d.ts","sourceRoot":"","sources":["../src/city.ts"],"names":[],"mappings":"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"}