@adminiumjs/add-on-contracts 0.2.2 → 0.2.4
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/add-on-block.d.ts +2 -0
- package/dist/add-on-block.d.ts.map +1 -1
- package/dist/slots.d.ts +19 -4
- package/dist/slots.d.ts.map +1 -1
- package/dist/slots.js +89 -4
- package/dist/slots.js.map +1 -1
- package/package.json +1 -1
package/dist/add-on-block.d.ts
CHANGED
|
@@ -66,6 +66,7 @@ export declare const slotFillSchema: z.ZodObject<{
|
|
|
66
66
|
"product.admin.panel": "product.admin.panel";
|
|
67
67
|
"order.line.actions": "order.line.actions";
|
|
68
68
|
"record.editor.panel": "record.editor.panel";
|
|
69
|
+
"record.actions": "record.actions";
|
|
69
70
|
}>;
|
|
70
71
|
client: z.ZodString;
|
|
71
72
|
order: z.ZodNumber;
|
|
@@ -123,6 +124,7 @@ export declare const addOnBlockSchema: z.ZodObject<{
|
|
|
123
124
|
"product.admin.panel": "product.admin.panel";
|
|
124
125
|
"order.line.actions": "order.line.actions";
|
|
125
126
|
"record.editor.panel": "record.editor.panel";
|
|
127
|
+
"record.actions": "record.actions";
|
|
126
128
|
}>;
|
|
127
129
|
client: z.ZodString;
|
|
128
130
|
order: z.ZodNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-on-block.d.ts","sourceRoot":"","sources":["../src/add-on-block.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,+DAAgE,CAAC;AAC/F,eAAO,MAAM,mBAAmB;;;;;;EAA4B,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,2DAA2D;AAC3D,eAAO,MAAM,aAAa,wCAAyC,CAAC;AACpE,eAAO,MAAM,iBAAiB;;;;EAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAazD,eAAO,MAAM,kBAAkB;;;;kBAQpB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;kBAKhB,CAAC;AAEZ,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"add-on-block.d.ts","sourceRoot":"","sources":["../src/add-on-block.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,+DAAgE,CAAC;AAC/F,eAAO,MAAM,mBAAmB;;;;;;EAA4B,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,2DAA2D;AAC3D,eAAO,MAAM,aAAa,wCAAyC,CAAC;AACpE,eAAO,MAAM,iBAAiB;;;;EAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAazD,eAAO,MAAM,kBAAkB;;;;kBAQpB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;kBAKhB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;kBAKlB,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;;;;;;;;kBAOpB,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;kBAIpB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmC1B,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,wLASrB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/slots.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Slot registry v1 — CLOSED (24-marketplace-wave-4.md §5.4
|
|
2
|
+
* Slot registry v1 — CLOSED (24-marketplace-wave-4.md §5.4; eleven slots, plus
|
|
3
|
+
* one bought on 2026-08-28 and named at the end of the list).
|
|
3
4
|
*
|
|
4
5
|
* A slot is a named place in a host surface, its payload, and its fill rule.
|
|
5
6
|
* The registry is closed for the same reason the widget-id vocabulary is: an
|
|
@@ -16,9 +17,16 @@
|
|
|
16
17
|
* real `version` field on the contract pattern — an earlier revision of this
|
|
17
18
|
* comment claimed a package bump was the mechanism, and it never was.
|
|
18
19
|
*
|
|
19
|
-
* Every slot
|
|
20
|
-
* is a guess about a future add-on, which is why an earlier
|
|
21
|
-
* (`job.timeline.entries`) is absent.
|
|
20
|
+
* Every slot in the original eleven is filled by something built in wave 4. A
|
|
21
|
+
* slot nobody fills is a guess about a future add-on, which is why an earlier
|
|
22
|
+
* draft's twelfth (`job.timeline.entries`) is absent.
|
|
23
|
+
*
|
|
24
|
+
* THAT RULE SURVIVED A PURCHASE RATHER THAN BEING WAIVED BY ONE. `record.actions`
|
|
25
|
+
* arrives unfilled and is not a guess: it carries seven exhibits with a file and
|
|
26
|
+
* a line each, and the entry itself sets out the difference at length so a
|
|
27
|
+
* reader does not have to take the distinction on trust. If a second slot ever
|
|
28
|
+
* lands here on weaker evidence than that, this paragraph is the thing it
|
|
29
|
+
* should be measured against.
|
|
22
30
|
*/
|
|
23
31
|
import { z } from 'zod';
|
|
24
32
|
/** Which persona's surface the slot lives in. */
|
|
@@ -107,6 +115,12 @@ export declare const SLOT_REGISTRY: readonly [{
|
|
|
107
115
|
readonly fill: "multi";
|
|
108
116
|
readonly payload: "the table name, the record, and write handles";
|
|
109
117
|
readonly renders: "a panel inside the generated dashboard's record editor";
|
|
118
|
+
}, {
|
|
119
|
+
readonly id: "record.actions";
|
|
120
|
+
readonly surface: "both";
|
|
121
|
+
readonly fill: "multi";
|
|
122
|
+
readonly payload: "what kind of record it is, the record, and a way to write back";
|
|
123
|
+
readonly renders: "an action and the panel its result lands in";
|
|
110
124
|
}];
|
|
111
125
|
export type SlotId = (typeof SLOT_REGISTRY)[number]['id'];
|
|
112
126
|
export declare const SLOT_IDS: readonly SlotId[];
|
|
@@ -122,6 +136,7 @@ export declare const slotIdSchema: z.ZodEnum<{
|
|
|
122
136
|
"product.admin.panel": "product.admin.panel";
|
|
123
137
|
"order.line.actions": "order.line.actions";
|
|
124
138
|
"record.editor.panel": "record.editor.panel";
|
|
139
|
+
"record.actions": "record.actions";
|
|
125
140
|
}>;
|
|
126
141
|
export declare function isSlotId(v: unknown): v is SlotId;
|
|
127
142
|
export declare function slotDefinition(id: SlotId): SlotDefinition;
|
package/dist/slots.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,iDAAiD;AACjD,eAAO,MAAM,aAAa,iDAAkD,CAAC;AAC7E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,4CAA6C,CAAC;AACrE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmKoB,CAAC;AAE/C,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE1D,eAAO,MAAM,QAAQ,EAAqC,SAAS,MAAM,EAAE,CAAC;AAE5E,eAAO,MAAM,YAAY;;;;;;;;;;;;;EAAuD,CAAC;AAIjF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAEhD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAKzD"}
|
package/dist/slots.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
2
|
/**
|
|
3
|
-
* Slot registry v1 — CLOSED (24-marketplace-wave-4.md §5.4
|
|
3
|
+
* Slot registry v1 — CLOSED (24-marketplace-wave-4.md §5.4; eleven slots, plus
|
|
4
|
+
* one bought on 2026-08-28 and named at the end of the list).
|
|
4
5
|
*
|
|
5
6
|
* A slot is a named place in a host surface, its payload, and its fill rule.
|
|
6
7
|
* The registry is closed for the same reason the widget-id vocabulary is: an
|
|
@@ -17,9 +18,16 @@
|
|
|
17
18
|
* real `version` field on the contract pattern — an earlier revision of this
|
|
18
19
|
* comment claimed a package bump was the mechanism, and it never was.
|
|
19
20
|
*
|
|
20
|
-
* Every slot
|
|
21
|
-
* is a guess about a future add-on, which is why an earlier
|
|
22
|
-
* (`job.timeline.entries`) is absent.
|
|
21
|
+
* Every slot in the original eleven is filled by something built in wave 4. A
|
|
22
|
+
* slot nobody fills is a guess about a future add-on, which is why an earlier
|
|
23
|
+
* draft's twelfth (`job.timeline.entries`) is absent.
|
|
24
|
+
*
|
|
25
|
+
* THAT RULE SURVIVED A PURCHASE RATHER THAN BEING WAIVED BY ONE. `record.actions`
|
|
26
|
+
* arrives unfilled and is not a guess: it carries seven exhibits with a file and
|
|
27
|
+
* a line each, and the entry itself sets out the difference at length so a
|
|
28
|
+
* reader does not have to take the distinction on trust. If a second slot ever
|
|
29
|
+
* lands here on weaker evidence than that, this paragraph is the thing it
|
|
30
|
+
* should be measured against.
|
|
23
31
|
*/
|
|
24
32
|
import { z } from 'zod';
|
|
25
33
|
/** Which persona's surface the slot lives in. */
|
|
@@ -117,6 +125,83 @@ export const SLOT_REGISTRY = [
|
|
|
117
125
|
payload: 'the table name, the record, and write handles',
|
|
118
126
|
renders: "a panel inside the generated dashboard's record editor",
|
|
119
127
|
},
|
|
128
|
+
{
|
|
129
|
+
/*
|
|
130
|
+
* THE TWELFTH, BOUGHT ON 2026-08-28 (31-add-on-candidates.md O1).
|
|
131
|
+
*
|
|
132
|
+
* ── IT IS NOT THE TWELFTH THIS FILE'S HEADER REFUSES ────────────────────
|
|
133
|
+
*
|
|
134
|
+
* The header says a slot nobody fills is a guess about a future add-on, and
|
|
135
|
+
* names `job.timeline.entries` as the guess that was cut. A reader arriving
|
|
136
|
+
* here and finding a slot with no fill in this release is owed the
|
|
137
|
+
* difference, because on the face of it this is the same thing.
|
|
138
|
+
*
|
|
139
|
+
* A GUESS HAS NO EXHIBITS. `job.timeline.entries` was somebody's idea of
|
|
140
|
+
* what an add-on might one day want; nothing in any repo asked for it. This
|
|
141
|
+
* id arrives carrying seven, each a real screen in a shipped app with a
|
|
142
|
+
* file and a line against it, gathered by five independent surveys that
|
|
143
|
+
* were not looking for a slot — they were looking for what the apps lie
|
|
144
|
+
* about — and then held to an adversarial pass. They are written down in
|
|
145
|
+
* 31 Appendix A.1, which is the artifact this entry cites and which exists
|
|
146
|
+
* so the purchase can be audited rather than taken on trust:
|
|
147
|
+
*
|
|
148
|
+
* 1. the per-record document renders (invoice, folio, receipt, recall
|
|
149
|
+
* letter, .ics) across five apps
|
|
150
|
+
* 2. the certificate render moment
|
|
151
|
+
* 3. every transactional send-this-record moment — twelve hosts
|
|
152
|
+
* 4. the wallet-pass render moment
|
|
153
|
+
* 5. click-to-call / log-a-call on a deal
|
|
154
|
+
* 6. the post-resolution satisfaction action
|
|
155
|
+
* 7. attach-a-room to a session record
|
|
156
|
+
*
|
|
157
|
+
* 25 §8.2 declined this same shape and said what would change its mind:
|
|
158
|
+
* two independent implementations' worth of evidence. That is the bar this
|
|
159
|
+
* cleared, and the ruling is recorded rather than inferred.
|
|
160
|
+
*
|
|
161
|
+
* ── WHAT IT IS FOR ──────────────────────────────────────────────────────
|
|
162
|
+
*
|
|
163
|
+
* One opening, on the screen where somebody is already looking at ONE
|
|
164
|
+
* record, to do a thing to it. Every exhibit above is that sentence. The
|
|
165
|
+
* eleven ids before it could not carry any of them: `order.line.actions`
|
|
166
|
+
* is a line inside an order rather than a record, `order.dispatch.actions`
|
|
167
|
+
* is the dispatch end of an outbound order specifically, and
|
|
168
|
+
* `record.editor.panel` is a PANEL inside the generated dashboard's editor
|
|
169
|
+
* — a different host, a different verb, and no example app has one.
|
|
170
|
+
*
|
|
171
|
+
* ── `both`, AND WHY NOT `staff` ─────────────────────────────────────────
|
|
172
|
+
*
|
|
173
|
+
* The dossier's own title says "staff/admin", and five of its seven
|
|
174
|
+
* exhibits are staff screens. Two are not: the certificate sheet is the
|
|
175
|
+
* STUDENT's own page (`learning-platform/src/screens/Certificate.tsx`
|
|
176
|
+
* opens "the student's completion sheet") and the wallet pass is the
|
|
177
|
+
* ticket-holder's. Ruling the id `staff` would have put the two exhibits
|
|
178
|
+
* everyone actually wants to demo outside the thing bought to carry them,
|
|
179
|
+
* and 31 §A.3 already records "neither the 11 nor A.1 covers a customer
|
|
180
|
+
* surface" as an open gap — which is the same observation from the other
|
|
181
|
+
* end.
|
|
182
|
+
*
|
|
183
|
+
* There is nothing in the payload that a customer looking at their own
|
|
184
|
+
* record makes dishonest: it is a record and a way to write back to it,
|
|
185
|
+
* and who is reading changes what the HOST mounts, not what the slot is.
|
|
186
|
+
* `nav.add-on.routes` is `both` for the same reason.
|
|
187
|
+
*
|
|
188
|
+
* ── THE ONE THING A READER SHOULD HOLD AGAINST IT ───────────────────────
|
|
189
|
+
*
|
|
190
|
+
* It ships in wave 6 with NO FILL. Its first consumer is `docs-paperwork`,
|
|
191
|
+
* which is wave 5 and unbuilt, and the wave-6 add-on that could have
|
|
192
|
+
* filled it honestly turned out not to need it: `holiday-calendars`'
|
|
193
|
+
* working-day counts are derived live from the merged calendar, so a
|
|
194
|
+
* "recompute this request" action would have been an invented reason to
|
|
195
|
+
* touch the slot rather than a thing an operator wants. Inventing one to
|
|
196
|
+
* make this entry look filled is precisely the dishonesty the registry is
|
|
197
|
+
* closed to prevent, so it is not filled, and this comment says so.
|
|
198
|
+
*/
|
|
199
|
+
id: 'record.actions',
|
|
200
|
+
surface: 'both',
|
|
201
|
+
fill: 'multi',
|
|
202
|
+
payload: 'what kind of record it is, the record, and a way to write back',
|
|
203
|
+
renders: 'an action and the panel its result lands in',
|
|
204
|
+
},
|
|
120
205
|
];
|
|
121
206
|
export const SLOT_IDS = SLOT_REGISTRY.map((s) => s.id);
|
|
122
207
|
export const slotIdSchema = z.enum(SLOT_IDS);
|
package/dist/slots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"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"}
|