@parity-app/cli 0.1.0 → 0.2.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.
package/dist/index.d.mts CHANGED
@@ -1,36 +1,220 @@
1
- /** Where the running app writes its address and token. */
2
- export declare const agentFile: string;
3
- export interface Screenshot {
1
+ /**
2
+ * Where running copies of Parity say how to reach them (PAR-514): one entry per copy, named by its main process, in
3
+ * `~/.parity/agents`. Each copy writes and removes only its own. The app and the CLI both go through here, so the
4
+ * format and the place live in one module. What a copy has open isn't here: the CLI asks each copy, live.
5
+ *
6
+ * `PARITY_AGENT_FILE` names one file instead, for a copy kept apart from the person's, as `pnpm perf`, the end-to-end
7
+ * tests and the backtest run: that copy writes only that file, and a CLI given it reaches only that copy.
8
+ */
9
+ interface Registry {
10
+ /** The folder of entries, or the one file a copy kept apart uses. */
11
+ kind: "folder" | "file";
12
+ path: string;
13
+ }
14
+ /**
15
+ * Why an agent's call failed, as a stable code it can act on without reading the message. The CLI and MCP publish
16
+ * these; the app throws them where it knows the cause.
17
+ */
18
+ declare const errorCodes: readonly [
19
+ /** The request is malformed: a field is missing, of the wrong type or out of range. */
20
+ "invalid_input",
21
+ /** The app isn't running, so there's nowhere to send the call. */
22
+ "not_running",
23
+ /** The app is running but didn't answer. */
24
+ "not_answering", "unknown_tab",
25
+ /** The tab is still opening, or failed to open. */
26
+ "tab_not_ready", "unknown_design", "unknown_node",
27
+ /** A reference matches more than one thing; the alternatives say how to name each. */
28
+ "ambiguous_reference", "unknown_state", "unknown_mode", "unknown_viewport", "unknown_component", "unknown_icon_set",
29
+ /** A retry named a failed snippet the app doesn't have, so the whole snippet has to be sent again. */
30
+ "unknown_edit_id",
31
+ /** The call's changes collided with edits made in the editor meanwhile. Running it again may succeed. */
32
+ "conflict",
33
+ /** A snippet threw. Retry it with its editId and edits. */
34
+ "execution_failed",
35
+ /** Anything else the app reported. */
36
+ "app_error"];
37
+ type ErrorCode = (typeof errorCodes)[number];
38
+ /**
39
+ * A failed call, the same in CLI `--json` and MCP `structuredContent`: a stable code to branch on, the message people
40
+ * read, whether the same request can succeed when sent again, the input at fault, and what to use instead.
41
+ */
42
+ interface OperationError {
43
+ code: ErrorCode;
44
+ message: string;
45
+ /** Whether sending the same request again, unchanged, can succeed: the app was starting, or edits collided. */
46
+ retryable: boolean;
47
+ /** A JSON pointer to the input at fault, such as `/design` or `/edits/0/find`, in the operation's field names. */
48
+ path?: string;
49
+ /** Valid ids to use instead of an unknown or ambiguous one, closest first, at most 20. */
50
+ alternatives?: string[];
51
+ /** A failed snippet's id: retry it with `editId` and `edits` instead of sending it again. */
52
+ editId?: string;
53
+ }
54
+ interface Edit {
55
+ find: string;
56
+ replace: string;
57
+ all?: boolean;
58
+ }
59
+ interface Screenshot {
4
60
  path: string;
5
61
  png: string;
6
62
  design: string;
7
63
  state: string;
8
64
  mode: string;
9
65
  }
10
- export interface ExecResponse {
66
+ /** The canonical result. Structured output is this without the screenshots' image data. */
67
+ interface ExecResponse {
11
68
  ok: boolean;
12
69
  applied: boolean;
13
70
  output: string[];
14
71
  warnings: string[];
15
- error?: string;
16
- editId?: string;
72
+ /** Set when the call failed, with the editId to retry a snippet by. */
73
+ error?: OperationError;
17
74
  created: Record<string, string>;
18
75
  screenshots: Screenshot[];
19
76
  }
20
- export interface Edit {
21
- find: string;
22
- replace: string;
23
- all?: boolean;
24
- }
77
+ /**
78
+ * Where running copies of the app say how to reach them: `~/.parity/agents`, or the one file `PARITY_AGENT_FILE` names
79
+ * for a copy kept apart from the person's.
80
+ */
81
+ export declare const registry: Registry;
25
82
  /**
26
83
  * Names who's calling in later calls, so the canvas can say who's at work. The MCP server learns the name from its
27
84
  * client, and is one session: its calls share an id, apart from any other session of the same agent.
28
85
  */
29
86
  export declare function setCaller(name: string | undefined, session?: boolean): void;
30
- /** Calls the running Parity app. Fails with a clear message when it isn't running. */
31
- export declare function call<T>(method: string, params?: Record<string, unknown>): Promise<T>;
87
+ /**
88
+ * How a call finds its copy of the app (PAR-514): `tab` goes to the copy that has the tab's project open, `open` to the
89
+ * copy that has the project or else the one the person used last, and `copies` asks every copy, for their tabs.
90
+ */
91
+ export type Routing = "tab" | "open" | "copies";
92
+ /**
93
+ * Calls the running Parity app: the copy that has the call's project open, with the exact tab it chose, by the rules
94
+ * in `@parity-app/agent/routing`. Fails with a clear message, and a code, when no copy is running, none has the
95
+ * project, or the call fails: the app's own code when it gives one.
96
+ */
97
+ export declare function call<T>(method: string, params?: Record<string, unknown>, routing?: Routing): Promise<T>;
32
98
  /** A readable account of an exec call, for terminals and for agents. */
33
99
  export declare function describeExec(result: ExecResponse): string;
100
+ /** One open project. */
101
+ export interface TabSummary {
102
+ id: string;
103
+ name: string;
104
+ root: string;
105
+ active: boolean;
106
+ status: "loading" | "ready" | "error";
107
+ error?: string;
108
+ designs: number;
109
+ }
110
+ export interface TabsResponse {
111
+ tabs: TabSummary[];
112
+ }
113
+ export interface StatusResponse {
114
+ tab: {
115
+ id: string;
116
+ name: string;
117
+ };
118
+ /** Opaque: the same only while nothing in the tab has changed. */
119
+ revision: string;
120
+ /** Something applied (and undoable) isn't on disk yet. */
121
+ dirty: boolean;
122
+ /** Changes save themselves a moment later; otherwise they wait for the person to save. */
123
+ autosave: boolean;
124
+ unsaved: {
125
+ path: string;
126
+ kind: "document" | "stylesheet";
127
+ designs?: {
128
+ added: string[];
129
+ changed: string[];
130
+ removed: string[];
131
+ };
132
+ modes?: boolean;
133
+ tokens?: string[];
134
+ more?: number;
135
+ }[];
136
+ tokenEdits: number;
137
+ save: {
138
+ status: "saved" | "unsaved" | "saving" | "failed";
139
+ error?: string;
140
+ };
141
+ errors: {
142
+ path: string;
143
+ error: string;
144
+ }[];
145
+ undo: {
146
+ count: number;
147
+ labels?: string[];
148
+ };
149
+ redo: {
150
+ count: number;
151
+ labels?: string[];
152
+ };
153
+ }
154
+ /** Where a tab's edits stand: the revision, what's applied and undoable, what's on disk, and what failed to write. */
155
+ export declare function describeStatus(result: StatusResponse): string;
156
+ export interface ModesResponse {
157
+ tab: {
158
+ id: string;
159
+ name: string;
160
+ };
161
+ variables: {
162
+ id: string;
163
+ name: string;
164
+ kind: "viewport" | "theme" | "locale" | "custom";
165
+ options: {
166
+ id: string;
167
+ name: string;
168
+ width?: number;
169
+ height?: number;
170
+ device?: string;
171
+ className?: string;
172
+ attributes?: Record<string, string>;
173
+ }[];
174
+ }[];
175
+ /** Viewport options: the ids Responsive takes, with the window each stands for. */
176
+ viewports: {
177
+ id: string;
178
+ name: string;
179
+ width: number;
180
+ height: number;
181
+ device?: string;
182
+ }[];
183
+ /** Modes: the ids renders take, each a combination of one option per variable. */
184
+ modes: {
185
+ id: string;
186
+ name: string;
187
+ primary: boolean;
188
+ viewport: string;
189
+ width: number;
190
+ height: number;
191
+ values: Record<string, string>;
192
+ classNames: string[];
193
+ attributes: Record<string, string>;
194
+ }[];
195
+ designs: {
196
+ id: string;
197
+ name: string;
198
+ state: string;
199
+ states: string[];
200
+ main: string;
201
+ beside: string[];
202
+ frames?: {
203
+ mode: string;
204
+ width: number;
205
+ height?: number;
206
+ window: {
207
+ width: number;
208
+ height: number;
209
+ };
210
+ }[];
211
+ }[];
212
+ }
213
+ /**
214
+ * The project's viewports (what Responsive takes), its other variables, its modes (what renders take) and what each
215
+ * design's board shows, with a named design's frames.
216
+ */
217
+ export declare function describeModes(result: ModesResponse): string;
34
218
  export interface AccessibilityFinding {
35
219
  state: string;
36
220
  mode: string;
@@ -86,8 +270,14 @@ export interface TokenInfo {
86
270
  source: string;
87
271
  values: Record<string, string>;
88
272
  }
273
+ export interface TokensResponse {
274
+ tokens: TokenInfo[];
275
+ /** How many matched, before the limit. */
276
+ total: number;
277
+ truncated: boolean;
278
+ }
89
279
  /** Tokens by category, each with its value in every theme that sets one. */
90
- export declare function describeTokens(tokens: TokenInfo[]): string;
280
+ export declare function describeTokens({ tokens, total, truncated }: TokensResponse): string;
91
281
  export interface ComponentsResponse {
92
282
  components: string[];
93
283
  iconLibraries?: string[];
@@ -106,10 +296,9 @@ export interface ComponentsResponse {
106
296
  problem: "provider" | "server" | "async" | "error";
107
297
  reason: string;
108
298
  }[];
109
- /** The person's corrections in the main project file, saved or not: exports listed by hand, and ones taken off. */
299
+ /** The person's corrections in the main project file, saved or not: exports listed by hand. */
110
300
  corrections?: {
111
301
  include?: ComponentRef[];
112
- exclude?: ComponentRef[];
113
302
  };
114
303
  }
115
304
  /** One of the app's exports, by its file and export name. */
@@ -154,7 +343,12 @@ export interface ConsoleResponse {
154
343
  id: string;
155
344
  name: string;
156
345
  };
346
+ /** The newest entries, up to the limit, oldest first. */
157
347
  entries: ConsoleEntry[];
348
+ /** How many there were, before the limit. */
349
+ total: number;
350
+ truncated: boolean;
158
351
  }
159
352
  /** A readable account of what a project's code wrote to the console, oldest first, with where each came from. */
160
- export declare function describeConsole(result: ConsoleResponse): string;
353
+ export declare function describeConsole(result: ConsoleResponse): string;
354
+ export type { Edit, ExecResponse, OperationError, Screenshot };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- export { t as agentFile, n as call, r as describeAccessibility, i as describeComponents, a as describeConsole, o as describeExec, s as describeProblems, c as describeProps, l as describeTokens, u as setCaller } from "./client-DsTLQ2lT.mjs";
1
+ export { t as call, n as describeAccessibility, r as describeComponents, i as describeConsole, a as describeExec, o as describeModes, s as describeProblems, c as describeProps, l as describeStatus, u as describeTokens, d as registry, f as setCaller } from "./client-Cf66-n3R.mjs";
@@ -4061,7 +4061,7 @@
4061
4061
  "children": [
4062
4062
  {
4063
4063
  "$render": [
4064
- "DropzoneArea isHovered: isFocused: isFocusVisible: isDropTar"
4064
+ "DropzoneArea isHovered: isFocused: isFocusVisible…"
4065
4065
  ]
4066
4066
  }
4067
4067
  ]
@@ -9023,7 +9023,7 @@
9023
9023
  "children": [
9024
9024
  {
9025
9025
  "$render": [
9026
- "Details Drag the handle up to expand this sheet to full heig"
9026
+ "Details Drag the handle up to expand this sheet to full…"
9027
9027
  ]
9028
9028
  }
9029
9029
  ]
@@ -9235,7 +9235,7 @@
9235
9235
  "children": [
9236
9236
  {
9237
9237
  "$render": [
9238
- "Sign up First Name: Last Name: Submit In an iPhone app, cons"
9238
+ "Sign up First Name: Last Name: Submit In an iPhone app…"
9239
9239
  ]
9240
9240
  }
9241
9241
  ]
@@ -9365,7 +9365,7 @@
9365
9365
  "children": [
9366
9366
  {
9367
9367
  "$render": [
9368
- "Details Drag the handle up to expand this sheet to full heig"
9368
+ "Details Drag the handle up to expand this sheet to full…"
9369
9369
  ]
9370
9370
  }
9371
9371
  ]
@@ -9512,7 +9512,7 @@
9512
9512
  "children": [
9513
9513
  {
9514
9514
  "$render": [
9515
- "Details Drag the handle up to expand this sheet to full heig"
9515
+ "Details Drag the handle up to expand this sheet to full…"
9516
9516
  ]
9517
9517
  }
9518
9518
  ]
@@ -58,7 +58,7 @@
58
58
  {
59
59
  "component": "Accordion.Panel",
60
60
  "children": [
61
- "Base UI is a library of high-quality unstyled React componen"
61
+ "Base UI is a library of high-quality unstyled React…"
62
62
  ]
63
63
  }
64
64
  ]
@@ -83,7 +83,7 @@
83
83
  "parentsFrom": "example",
84
84
  "sample": {
85
85
  "children": [
86
- "Base UI is a library of high-quality unstyled React componen"
86
+ "Base UI is a library of high-quality unstyled React…"
87
87
  ]
88
88
  },
89
89
  "fingerprint": "a6e70d5d",
@@ -120,7 +120,7 @@
120
120
  {
121
121
  "component": "Accordion.Panel",
122
122
  "children": [
123
- "Standard shipping takes 3–5 business days. Express delivery "
123
+ "Standard shipping takes 3–5 business days."
124
124
  ]
125
125
  }
126
126
  ]
@@ -142,7 +142,7 @@
142
142
  {
143
143
  "component": "Accordion.Panel",
144
144
  "children": [
145
- "You can return any item within 30 days of delivery. Opened i"
145
+ "You can return any item within 30 days of delivery."
146
146
  ]
147
147
  }
148
148
  ]
@@ -164,7 +164,7 @@
164
164
  {
165
165
  "component": "Accordion.Panel",
166
166
  "children": [
167
- "Yes, we ship to over 40 countries. International orders typi"
167
+ "Yes, we ship to over 40 countries."
168
168
  ]
169
169
  }
170
170
  ]
@@ -186,7 +186,7 @@
186
186
  {
187
187
  "component": "Accordion.Panel",
188
188
  "children": [
189
- "Once your order ships, you’ll receive a tracking link by ema"
189
+ "Once your order ships, you’ll receive a tracking link by…"
190
190
  ]
191
191
  }
192
192
  ]
@@ -1705,7 +1705,7 @@
1705
1705
  "Right click here"
1706
1706
  ]
1707
1707
  },
1708
- "Add to Library Add to Playlist Play Next Play Last Favorite "
1708
+ "Add to Library Add to Playlist Play Next Play Last Favorite…"
1709
1709
  ]
1710
1710
  },
1711
1711
  "fingerprint": "163e37d4",
@@ -1996,7 +1996,7 @@
1996
1996
  {
1997
1997
  "component": "Dialog.Popup",
1998
1998
  "children": [
1999
- "Dialog This layout keeps the popup fully on screen while all",
1999
+ "Dialog This layout keeps the popup fully on screen while…",
2000
2000
  "Close"
2001
2001
  ]
2002
2002
  }
@@ -2088,11 +2088,11 @@
2088
2088
  {
2089
2089
  "component": "Drawer.Description",
2090
2090
  "children": [
2091
- "Review sign-in activity and update your security preferences"
2091
+ "Review sign-in activity and update your security…"
2092
2092
  ]
2093
2093
  },
2094
- "Passkeys enabled 2FA via authenticator app 3 signed-in devic",
2095
- "Advanced options Advanced This drawer is taller to demonstra"
2094
+ "Passkeys enabled 2FA via authenticator app 3 signed-in…",
2095
+ "Advanced options Advanced This drawer is taller to…"
2096
2096
  ]
2097
2097
  },
2098
2098
  "fingerprint": "c413c506",
@@ -2115,7 +2115,7 @@
2115
2115
  "parentsFrom": "example",
2116
2116
  "sample": {
2117
2117
  "children": [
2118
- "This is a drawer that slides in from the side. You can swipe"
2118
+ "This is a drawer that slides in from the side."
2119
2119
  ]
2120
2120
  },
2121
2121
  "fingerprint": "beb84af4",
@@ -2134,7 +2134,7 @@
2134
2134
  "parentsFrom": "example",
2135
2135
  "sample": {
2136
2136
  "children": [
2137
- "Open drawer Notifications You are all caught up. Good job! C"
2137
+ "Open drawer Notifications You are all caught up. Good job!"
2138
2138
  ]
2139
2139
  },
2140
2140
  "fingerprint": "141c3ab0",
@@ -2181,11 +2181,11 @@
2181
2181
  {
2182
2182
  "component": "Drawer.Description",
2183
2183
  "children": [
2184
- "Review sign-in activity and update your security preferences"
2184
+ "Review sign-in activity and update your security…"
2185
2185
  ]
2186
2186
  },
2187
- "Passkeys enabled 2FA via authenticator app 3 signed-in devic",
2188
- "Advanced options Advanced This drawer is taller to demonstra"
2187
+ "Passkeys enabled 2FA via authenticator app 3 signed-in…",
2188
+ "Advanced options Advanced This drawer is taller to…"
2189
2189
  ]
2190
2190
  }
2191
2191
  ]
@@ -2251,7 +2251,7 @@
2251
2251
  "visual": false,
2252
2252
  "sample": {
2253
2253
  "children": [
2254
- "Open drawer Notifications You are all caught up. Good job! C"
2254
+ "Open drawer Notifications You are all caught up. Good job!"
2255
2255
  ]
2256
2256
  },
2257
2257
  "fingerprint": "a761e30b",
@@ -2417,11 +2417,11 @@
2417
2417
  {
2418
2418
  "component": "Drawer.Description",
2419
2419
  "children": [
2420
- "Review sign-in activity and update your security preferences"
2420
+ "Review sign-in activity and update your security…"
2421
2421
  ]
2422
2422
  },
2423
- "Passkeys enabled 2FA via authenticator app 3 signed-in devic",
2424
- "Advanced options Advanced This drawer is taller to demonstra"
2423
+ "Passkeys enabled 2FA via authenticator app 3 signed-in…",
2424
+ "Advanced options Advanced This drawer is taller to…"
2425
2425
  ]
2426
2426
  }
2427
2427
  ]
@@ -5909,8 +5909,8 @@
5909
5909
  "parentsFrom": "example",
5910
5910
  "sample": {
5911
5911
  "children": [
5912
- "Vernacular architecture is building done outside any academi",
5913
- "This type of architecture usually serves immediate, local ne"
5912
+ "Vernacular architecture is building done outside any…",
5913
+ "This type of architecture usually serves immediate, local…"
5914
5914
  ]
5915
5915
  },
5916
5916
  "fingerprint": "1c72c9cc",
@@ -6030,8 +6030,8 @@
6030
6030
  {
6031
6031
  "component": "ScrollArea.Content",
6032
6032
  "children": [
6033
- "Vernacular architecture is building done outside any academi",
6034
- "This type of architecture usually serves immediate, local ne"
6033
+ "Vernacular architecture is building done outside any…",
6034
+ "This type of architecture usually serves immediate, local…"
6035
6035
  ]
6036
6036
  }
6037
6037
  ]
@@ -7259,7 +7259,7 @@
7259
7259
  }
7260
7260
  ]
7261
7261
  },
7262
- "Workspace stats and activity. Milestones and deadlines. Prof"
7262
+ "Workspace stats and activity. Milestones and deadlines."
7263
7263
  ]
7264
7264
  },
7265
7265
  "fingerprint": "53a7c0df",
@@ -7275,7 +7275,7 @@
7275
7275
  {
7276
7276
  "component": "Accordion.ItemBody",
7277
7277
  "children": [
7278
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cur"
7278
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
7279
7279
  ]
7280
7280
  }
7281
7281
  ]
@@ -11647,7 +11647,7 @@
11647
11647
  {
11648
11648
  "component": "Accordion.ItemBody",
11649
11649
  "children": [
11650
- "Click the accordion button to see a different style when exp"
11650
+ "Click the accordion button to see a different style when…"
11651
11651
  ]
11652
11652
  }
11653
11653
  ]
@@ -11680,7 +11680,7 @@
11680
11680
  {
11681
11681
  "component": "Accordion.ItemBody",
11682
11682
  "children": [
11683
- "The trigger background changes to teal with white text when "
11683
+ "The trigger background changes to teal with white text when…"
11684
11684
  ]
11685
11685
  }
11686
11686
  ]
@@ -31040,7 +31040,7 @@
31040
31040
  "cite": "Uzumaki Naruto"
31041
31041
  },
31042
31042
  "children": [
31043
- "If anyone thinks he is something when he is nothing, he dece"
31043
+ "If anyone thinks he is something when he is nothing, he…"
31044
31044
  ]
31045
31045
  },
31046
31046
  "fingerprint": "ca28c419",
@@ -32776,7 +32776,7 @@
32776
32776
  "cite": "Uzumaki Naruto"
32777
32777
  },
32778
32778
  "children": [
32779
- "If anyone thinks he is something when he is nothing, he dece"
32779
+ "If anyone thinks he is something when he is nothing, he…"
32780
32780
  ]
32781
32781
  },
32782
32782
  {
@@ -42420,7 +42420,7 @@
42420
42420
  "color": "gray.600"
42421
42421
  },
42422
42422
  "children": [
42423
- "This is the card body. Lorem ipsum dolor sit amet, consectet"
42423
+ "This is the card body."
42424
42424
  ]
42425
42425
  }
42426
42426
  ]
@@ -45919,7 +45919,7 @@
45919
45919
  "color": "gray.600"
45920
45920
  },
45921
45921
  "children": [
45922
- "This is the card body. Lorem ipsum dolor sit amet, consectet"
45922
+ "This is the card body."
45923
45923
  ]
45924
45924
  }
45925
45925
  ]
@@ -143482,7 +143482,7 @@
143482
143482
  "fluid": true
143483
143483
  },
143484
143484
  "children": [
143485
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nul"
143485
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
143486
143486
  ]
143487
143487
  },
143488
143488
  "fingerprint": "29eb410f",
@@ -186407,7 +186407,7 @@
186407
186407
  {
186408
186408
  "component": "Dialog.Description",
186409
186409
  "children": [
186410
- "This dialog uses backdropFilter=\"auto\" and backdropBlur so t"
186410
+ "This dialog uses backdropFilter=\"auto\" and backdropBlur so…"
186411
186411
  ]
186412
186412
  }
186413
186413
  ]
@@ -197034,7 +197034,7 @@
197034
197034
  "sample": {
197035
197035
  "children": [
197036
197036
  "Drawer is open:",
197037
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed",
197037
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
197038
197038
  "Close"
197039
197039
  ]
197040
197040
  },
@@ -199673,7 +199673,7 @@
199673
199673
  },
199674
199674
  "children": [
199675
199675
  "Drawer is open:",
199676
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed",
199676
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
199677
199677
  "Close"
199678
199678
  ]
199679
199679
  }
@@ -337542,7 +337542,7 @@
337542
337542
  {
337543
337543
  "component": "Popover.Description",
337544
337544
  "children": [
337545
- "A Japanese manga series written and illustrated by Masashi K"
337545
+ "A Japanese manga series written and illustrated by Masashi…"
337546
337546
  ]
337547
337547
  }
337548
337548
  ]
@@ -338452,7 +338452,7 @@
338452
338452
  "parentsFrom": "example",
338453
338453
  "sample": {
338454
338454
  "children": [
338455
- "A Japanese manga series written and illustrated by Masashi K"
338455
+ "A Japanese manga series written and illustrated by Masashi…"
338456
338456
  ]
338457
338457
  },
338458
338458
  "fingerprint": "ca28c419",
@@ -340190,7 +340190,7 @@
340190
340190
  {
340191
340191
  "component": "Popover.Description",
340192
340192
  "children": [
340193
- "A Japanese manga series written and illustrated by Masashi K"
340193
+ "A Japanese manga series written and illustrated by Masashi…"
340194
340194
  ]
340195
340195
  }
340196
340196
  ]
@@ -341074,7 +341074,7 @@
341074
341074
  {
341075
341075
  "component": "Popover.Description",
341076
341076
  "children": [
341077
- "A Japanese manga series written and illustrated by Masashi K"
341077
+ "A Japanese manga series written and illustrated by Masashi…"
341078
341078
  ]
341079
341079
  }
341080
341080
  ]
@@ -413986,7 +413986,7 @@
413986
413986
  "loading": false
413987
413987
  },
413988
413988
  "children": [
413989
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pro"
413989
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
413990
413990
  ]
413991
413991
  },
413992
413992
  "fingerprint": "eac0f96c",
@@ -488299,7 +488299,7 @@
488299
488299
  {
488300
488300
  "component": "Tag.Label",
488301
488301
  "children": [
488302
- "Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui"
488302
+ "Lorem ipsum dolor sit amet consectetur adipisicing elit."
488303
488303
  ]
488304
488304
  },
488305
488305
  {