foldkit 0.83.0 → 0.85.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/README.md +1 -1
- package/dist/devTools/overlay.d.ts.map +1 -1
- package/dist/devTools/overlay.js +66 -4
- package/dist/devTools/protocol.d.ts +19 -2
- package/dist/devTools/protocol.d.ts.map +1 -1
- package/dist/devTools/protocol.js +5 -2
- package/dist/devTools/serialize.d.ts.map +1 -1
- package/dist/devTools/serialize.js +2 -0
- package/dist/devTools/store.d.ts +5 -1
- package/dist/devTools/store.d.ts.map +1 -1
- package/dist/devTools/store.js +37 -1
- package/dist/devTools/webSocketBridge.js +1 -0
- package/dist/html/index.d.ts +11 -0
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +58 -39
- package/dist/mount/index.d.ts +14 -1
- package/dist/mount/index.d.ts.map +1 -1
- package/dist/mount/index.js +9 -1
- package/dist/mount/public.d.ts +1 -1
- package/dist/mount/public.d.ts.map +1 -1
- package/dist/mount/public.js +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +50 -5
- package/dist/scene/public.d.ts +2 -0
- package/dist/scene/public.d.ts.map +1 -0
- package/dist/scene/public.js +1 -0
- package/dist/story/public.d.ts +2 -0
- package/dist/story/public.d.ts.map +1 -0
- package/dist/story/public.js +1 -0
- package/dist/task/dom.d.ts +11 -7
- package/dist/task/dom.d.ts.map +1 -1
- package/dist/task/dom.js +11 -7
- package/dist/test/apps/mountPanel.d.ts +42 -0
- package/dist/test/apps/mountPanel.d.ts.map +1 -0
- package/dist/test/apps/mountPanel.js +76 -0
- package/dist/test/internal.d.ts +43 -0
- package/dist/test/internal.d.ts.map +1 -1
- package/dist/test/internal.js +93 -0
- package/dist/test/scene.d.ts +40 -14
- package/dist/test/scene.d.ts.map +1 -1
- package/dist/test/scene.js +195 -8
- package/dist/test/story.d.ts +17 -13
- package/dist/test/story.d.ts.map +1 -1
- package/dist/test/story.js +19 -5
- package/dist/ui/combobox/multi.d.ts +10 -10
- package/dist/ui/combobox/public.d.ts +1 -1
- package/dist/ui/combobox/public.d.ts.map +1 -1
- package/dist/ui/combobox/public.js +1 -1
- package/dist/ui/combobox/shared.d.ts +41 -15
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +45 -32
- package/dist/ui/combobox/single.d.ts +10 -10
- package/dist/ui/datePicker/index.d.ts +1 -1
- package/dist/ui/listbox/multi.d.ts +4 -8
- package/dist/ui/listbox/multi.d.ts.map +1 -1
- package/dist/ui/listbox/public.d.ts +1 -1
- package/dist/ui/listbox/public.d.ts.map +1 -1
- package/dist/ui/listbox/public.js +1 -1
- package/dist/ui/listbox/shared.d.ts +20 -12
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +26 -35
- package/dist/ui/listbox/single.d.ts +4 -8
- package/dist/ui/listbox/single.d.ts.map +1 -1
- package/dist/ui/menu/index.d.ts +18 -8
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +30 -35
- package/dist/ui/menu/public.d.ts +1 -1
- package/dist/ui/menu/public.d.ts.map +1 -1
- package/dist/ui/menu/public.js +1 -1
- package/dist/ui/popover/index.d.ts +18 -5
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +25 -19
- package/dist/ui/popover/public.d.ts +1 -1
- package/dist/ui/popover/public.d.ts.map +1 -1
- package/dist/ui/popover/public.js +1 -1
- package/dist/ui/tooltip/index.d.ts +10 -3
- package/dist/ui/tooltip/index.d.ts.map +1 -1
- package/dist/ui/tooltip/index.js +13 -10
- package/dist/ui/tooltip/public.d.ts +1 -1
- package/dist/ui/tooltip/public.d.ts.map +1 -1
- package/dist/ui/tooltip/public.js +1 -1
- package/package.json +9 -1
package/dist/test/scene.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Array, Effect, Function, Option, Predicate, String as String_, pipe, } from 'effect';
|
|
2
2
|
import { dual } from 'effect/Function';
|
|
3
|
-
import { FileHandlerSymbol } from '../html/index.js';
|
|
3
|
+
import { FOLDKIT_MOUNT_KEY, FileHandlerSymbol } from '../html/index.js';
|
|
4
4
|
import { Dispatch } from '../runtime/index.js';
|
|
5
|
-
import { assertAllCommandsResolved, assertExactCommands, assertHasCommands, assertNoUnresolvedCommands, assertZeroCommands, resolveAllInternal, resolveByName, } from './internal.js';
|
|
5
|
+
import { assertAllCommandsResolved, assertAllMountsResolved, assertAllUnmountsAcknowledged, assertExactCommands, assertExactMounts, assertHasCommands, assertHasMounts, assertNoUnacknowledgedUnmounts, assertNoUnresolvedCommands, assertNoUnresolvedMounts, assertZeroCommands, assertZeroMounts, resolveAllInternal, resolveByName, resolveMountByName, } from './internal.js';
|
|
6
6
|
import { accessibleDescription, accessibleName, ancestorsOf, attr, resolveTarget, selector, textContent, within, } from './query.js';
|
|
7
7
|
import { allAltText, allDisplayValue, allLabel, allPlaceholder, allRole, allSelector, allTestId, allText, allTitle, } from './query.js';
|
|
8
8
|
export { find, findAll, textContent, attr, getByRole, getAllByRole, getByText, getByPlaceholder, getByLabel, getByAltText, getByTitle, getByTestId, getByDisplayValue, role, placeholder, label, altText, title, testId, displayValue, selector, text, within, getAllByText, getAllByLabel, getAllByPlaceholder, getAllByAltText, getAllByTitle, getAllByTestId, getAllByDisplayValue, first, last, nth, filter, } from './query.js';
|
|
@@ -21,6 +21,56 @@ export const all = {
|
|
|
21
21
|
selector: allSelector,
|
|
22
22
|
};
|
|
23
23
|
export { sceneMatchers } from './matchers.js';
|
|
24
|
+
const PENDING = { _tag: 'Pending' };
|
|
25
|
+
const RESOLVED = { _tag: 'Resolved' };
|
|
26
|
+
const ENDED_ACKNOWLEDGED = { _tag: 'Ended', acknowledged: true };
|
|
27
|
+
const ENDED_UNACKNOWLEDGED = { _tag: 'Ended', acknowledged: false };
|
|
28
|
+
const slotKey = ({ name, occurrence }) => `${name}#${occurrence}`;
|
|
29
|
+
const collectRenderedSlots = (vnode) => {
|
|
30
|
+
const counts = new Map();
|
|
31
|
+
const slots = [];
|
|
32
|
+
const walk = (node) => {
|
|
33
|
+
/* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
|
|
34
|
+
const marker = node.data?.[FOLDKIT_MOUNT_KEY];
|
|
35
|
+
if (marker !== undefined) {
|
|
36
|
+
const occurrence = counts.get(marker.name) ?? 0;
|
|
37
|
+
counts.set(marker.name, occurrence + 1);
|
|
38
|
+
slots.push({ name: marker.name, occurrence });
|
|
39
|
+
}
|
|
40
|
+
for (const child of node.children ?? []) {
|
|
41
|
+
if (typeof child !== 'string') {
|
|
42
|
+
walk(child);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
walk(vnode);
|
|
47
|
+
return slots;
|
|
48
|
+
};
|
|
49
|
+
const reconcileMountSlots = (previous, rendered) => {
|
|
50
|
+
const previousByKey = new Map(Array.map(previous, state => [slotKey(state.slot), state]));
|
|
51
|
+
const renderedSlots = collectRenderedSlots(rendered);
|
|
52
|
+
const renderedKeys = new Set(Array.map(renderedSlots, slotKey));
|
|
53
|
+
const fromRendered = Array.map(renderedSlots, slot => {
|
|
54
|
+
const existing = previousByKey.get(slotKey(slot));
|
|
55
|
+
if (existing !== undefined && existing.status._tag !== 'Ended') {
|
|
56
|
+
return existing;
|
|
57
|
+
}
|
|
58
|
+
return { slot, status: PENDING };
|
|
59
|
+
});
|
|
60
|
+
const fromVanished = pipe(previous, Array.filter(state => !renderedKeys.has(slotKey(state.slot))), Array.map(state => endStatus(state)));
|
|
61
|
+
const unacknowledgedRevived = pipe(previous, Array.filter(state => renderedKeys.has(slotKey(state.slot)) &&
|
|
62
|
+
state.status._tag === 'Ended' &&
|
|
63
|
+
!state.status.acknowledged));
|
|
64
|
+
return Array.appendAll(fromRendered, Array.appendAll(fromVanished, unacknowledgedRevived));
|
|
65
|
+
};
|
|
66
|
+
const endStatus = (state) => {
|
|
67
|
+
if (state.status._tag === 'Ended') {
|
|
68
|
+
return state;
|
|
69
|
+
}
|
|
70
|
+
return { slot: state.slot, status: ENDED_UNACKNOWLEDGED };
|
|
71
|
+
};
|
|
72
|
+
const pendingMountsOf = (mountSlots) => pipe(mountSlots, Array.filter(({ status }) => status._tag === 'Pending'), Array.map(({ slot }) => slot));
|
|
73
|
+
const unacknowledgedEndedMountsOf = (mountSlots) => pipe(mountSlots, Array.filter(({ status }) => status._tag === 'Ended' && !status.acknowledged), Array.map(({ slot }) => slot));
|
|
24
74
|
const UNINITIALIZED = Symbol('uninitialized');
|
|
25
75
|
const toInternal = (simulation) =>
|
|
26
76
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
@@ -106,6 +156,8 @@ const captureFromElement = (simulation, element, description, eventName, invokeH
|
|
|
106
156
|
return simulation;
|
|
107
157
|
}
|
|
108
158
|
assertNoUnresolvedCommands(internal.commands, 'when an interaction dispatched a new Message');
|
|
159
|
+
assertNoUnresolvedMounts(internal.mounts, 'when an interaction dispatched a new Message');
|
|
160
|
+
assertNoUnacknowledgedUnmounts(unacknowledgedEndedMountsOf(internal.mountSlots), 'when an interaction dispatched a new Message');
|
|
109
161
|
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
110
162
|
const capturedMessage = captured;
|
|
111
163
|
const result = internal.updateFn(internal.model, capturedMessage);
|
|
@@ -207,7 +259,7 @@ const with_ = (model) => {
|
|
|
207
259
|
/* eslint-enable @typescript-eslint/consistent-type-assertions */
|
|
208
260
|
};
|
|
209
261
|
/** Resolves a specific pending Command with the given result Message. */
|
|
210
|
-
|
|
262
|
+
const resolveCommand = (definition, resultMessage, toParentMessage) => (simulation) => {
|
|
211
263
|
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
212
264
|
const internal = toInternal(simulation);
|
|
213
265
|
const messageForUpdate = (Predicate.isUndefined(toParentMessage)
|
|
@@ -226,24 +278,153 @@ export const resolve = (definition, resultMessage, toParentMessage) => (simulati
|
|
|
226
278
|
/* eslint-enable @typescript-eslint/consistent-type-assertions */
|
|
227
279
|
};
|
|
228
280
|
/** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
|
|
229
|
-
|
|
281
|
+
const resolveAllCommands = (...resolvers) => (simulation) =>
|
|
230
282
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
231
283
|
resolveAllInternal(toInternal(simulation), resolvers);
|
|
232
284
|
/** Asserts that every given Command is among the pending Commands. */
|
|
233
|
-
|
|
285
|
+
const expectHasCommandsStep = (...definitions) => (simulation) => {
|
|
234
286
|
assertHasCommands(toInternal(simulation).commands, definitions);
|
|
235
287
|
return simulation;
|
|
236
288
|
};
|
|
237
289
|
/** Asserts that the pending Commands match the given definitions exactly (order-independent). */
|
|
238
|
-
|
|
290
|
+
const expectExactCommandsStep = (...definitions) => (simulation) => {
|
|
239
291
|
assertExactCommands(toInternal(simulation).commands, definitions);
|
|
240
292
|
return simulation;
|
|
241
293
|
};
|
|
242
294
|
/** Asserts that there are no pending Commands. */
|
|
243
|
-
|
|
295
|
+
const expectNoCommandsStep = () => (simulation) => {
|
|
244
296
|
assertZeroCommands(toInternal(simulation).commands);
|
|
245
297
|
return simulation;
|
|
246
298
|
};
|
|
299
|
+
/** Resolves a specific pending Mount with the given result Message. The first
|
|
300
|
+
* pending mount with the matching name is resolved. Mirrors `resolve` for
|
|
301
|
+
* Commands; the optional `toParentMessage` lifter matches `Mount.mapMessage`
|
|
302
|
+
* when a child Submodel mount is observed in a parent's view. */
|
|
303
|
+
const resolveMount = (definition, resultMessage, toParentMessage) => (simulation) => {
|
|
304
|
+
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
305
|
+
const internal = toInternal(simulation);
|
|
306
|
+
const messageForUpdate = (Predicate.isUndefined(toParentMessage)
|
|
307
|
+
? resultMessage
|
|
308
|
+
: toParentMessage(resultMessage));
|
|
309
|
+
const next = resolveMountByName(internal, internal.mounts, definition.name, messageForUpdate);
|
|
310
|
+
if (Predicate.isUndefined(next)) {
|
|
311
|
+
throw new Error(`I tried to resolve Mount "${definition.name}" but it wasn't in the pending Mounts.\n\n` +
|
|
312
|
+
`Pending Mounts:\n${Array.isReadonlyArrayNonEmpty(internal.mounts)
|
|
313
|
+
? pipe(internal.mounts, Array.map(({ name }) => ` ${name}`), Array.join('\n'))
|
|
314
|
+
: ' (none)'}\n\n` +
|
|
315
|
+
'Make sure the rendered view contains an OnMount with this name.');
|
|
316
|
+
}
|
|
317
|
+
const resolvedKeys = new Set(Array.map(next.pendingMounts, slot => slotKey(slot)));
|
|
318
|
+
const updatedSlots = Array.map(internal.mountSlots, (state) => {
|
|
319
|
+
if (state.status._tag !== 'Pending') {
|
|
320
|
+
return state;
|
|
321
|
+
}
|
|
322
|
+
const key = slotKey(state.slot);
|
|
323
|
+
return resolvedKeys.has(key)
|
|
324
|
+
? state
|
|
325
|
+
: state.slot.name === definition.name
|
|
326
|
+
? { slot: state.slot, status: RESOLVED }
|
|
327
|
+
: state;
|
|
328
|
+
});
|
|
329
|
+
return {
|
|
330
|
+
...next.internal,
|
|
331
|
+
mountSlots: updatedSlots,
|
|
332
|
+
mounts: next.pendingMounts,
|
|
333
|
+
};
|
|
334
|
+
/* eslint-enable @typescript-eslint/consistent-type-assertions */
|
|
335
|
+
};
|
|
336
|
+
/** Resolves all listed Mounts with their result Messages. Mounts are resolved
|
|
337
|
+
* in the order listed; each resolution feeds its Message through update
|
|
338
|
+
* before the next is resolved. */
|
|
339
|
+
const resolveAllMounts = (...resolvers) => (simulation) => Array.reduce(resolvers, simulation, (current, resolver) => {
|
|
340
|
+
const [definition, resultMessage] = resolver;
|
|
341
|
+
const lift = resolver.length === 3
|
|
342
|
+
? /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
|
|
343
|
+
resolver[2]
|
|
344
|
+
: undefined;
|
|
345
|
+
return Predicate.isUndefined(lift)
|
|
346
|
+
? resolveMount(definition, resultMessage)(current)
|
|
347
|
+
: resolveMount(definition, resultMessage, lift)(current);
|
|
348
|
+
});
|
|
349
|
+
/** Asserts that every given Mount is among the pending Mounts. */
|
|
350
|
+
const expectHasMountsStep = (...definitions) => (simulation) => {
|
|
351
|
+
assertHasMounts(toInternal(simulation).mounts, definitions);
|
|
352
|
+
return simulation;
|
|
353
|
+
};
|
|
354
|
+
/** Asserts that the pending Mounts match the given definitions exactly
|
|
355
|
+
* (order-independent, by name). */
|
|
356
|
+
const expectExactMountsStep = (...definitions) => (simulation) => {
|
|
357
|
+
assertExactMounts(toInternal(simulation).mounts, definitions);
|
|
358
|
+
return simulation;
|
|
359
|
+
};
|
|
360
|
+
/** Asserts that there are no pending Mounts. */
|
|
361
|
+
const expectNoMountsStep = () => (simulation) => {
|
|
362
|
+
assertZeroMounts(toInternal(simulation).mounts);
|
|
363
|
+
return simulation;
|
|
364
|
+
};
|
|
365
|
+
/** Acknowledges that the given Mounts disappeared from the rendered tree.
|
|
366
|
+
* Required for every Mount that fires and then unmounts during a scene,
|
|
367
|
+
* whether or not it was resolved first. Without this, the scene throws at
|
|
368
|
+
* the end of the test for any unacknowledged unmount. */
|
|
369
|
+
const expectEndedMountsStep = (...definitions) => (simulation) => {
|
|
370
|
+
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
371
|
+
const internal = toInternal(simulation);
|
|
372
|
+
const remainingNames = Array.map(definitions, ({ name }) => name);
|
|
373
|
+
const updatedSlots = [];
|
|
374
|
+
for (const state of internal.mountSlots) {
|
|
375
|
+
if (state.status._tag === 'Ended' &&
|
|
376
|
+
!state.status.acknowledged &&
|
|
377
|
+
remainingNames.includes(state.slot.name)) {
|
|
378
|
+
const index = remainingNames.indexOf(state.slot.name);
|
|
379
|
+
remainingNames.splice(index, 1);
|
|
380
|
+
updatedSlots.push({ slot: state.slot, status: ENDED_ACKNOWLEDGED });
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
updatedSlots.push(state);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (Array.isReadonlyArrayNonEmpty(remainingNames)) {
|
|
387
|
+
throw new Error(`I tried to acknowledge ended Mounts but some haven't unmounted:\n\n` +
|
|
388
|
+
pipe(remainingNames, Array.map(name => ` ${name}`), Array.join('\n')) +
|
|
389
|
+
'\n\nUse Scene.Mount.expectEnded only after the Mount has disappeared from the rendered tree.');
|
|
390
|
+
}
|
|
391
|
+
return {
|
|
392
|
+
...internal,
|
|
393
|
+
mountSlots: updatedSlots,
|
|
394
|
+
};
|
|
395
|
+
/* eslint-enable @typescript-eslint/consistent-type-assertions */
|
|
396
|
+
};
|
|
397
|
+
/** Steps that operate on the pending Commands of a scene simulation.
|
|
398
|
+
* Destructure as `const { Command } = Scene` for concise call sites. */
|
|
399
|
+
export const Command = {
|
|
400
|
+
/** Resolves a specific pending Command with the given result Message. */
|
|
401
|
+
resolve: resolveCommand,
|
|
402
|
+
/** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
|
|
403
|
+
resolveAll: resolveAllCommands,
|
|
404
|
+
/** Asserts that every given Command is among the pending Commands. */
|
|
405
|
+
expectHas: expectHasCommandsStep,
|
|
406
|
+
/** Asserts that the pending Commands match the given definitions exactly (order-independent). */
|
|
407
|
+
expectExact: expectExactCommandsStep,
|
|
408
|
+
/** Asserts that there are no pending Commands. */
|
|
409
|
+
expectNone: expectNoCommandsStep,
|
|
410
|
+
};
|
|
411
|
+
/** Steps that operate on the pending Mounts of a scene simulation.
|
|
412
|
+
* Destructure as `const { Mount } = Scene` for concise call sites. */
|
|
413
|
+
export const Mount = {
|
|
414
|
+
/** Resolves a specific pending Mount with the given result Message. */
|
|
415
|
+
resolve: resolveMount,
|
|
416
|
+
/** Resolves all listed Mounts with their result Messages. */
|
|
417
|
+
resolveAll: resolveAllMounts,
|
|
418
|
+
/** Asserts that every given Mount is among the pending Mounts. */
|
|
419
|
+
expectHas: expectHasMountsStep,
|
|
420
|
+
/** Asserts that the pending Mounts match the given definitions exactly (order-independent, by name). */
|
|
421
|
+
expectExact: expectExactMountsStep,
|
|
422
|
+
/** Asserts that there are no pending Mounts. */
|
|
423
|
+
expectNone: expectNoMountsStep,
|
|
424
|
+
/** Acknowledges Mounts that disappeared from the rendered tree. Required for
|
|
425
|
+
* every Mount that fires and then unmounts during a scene. */
|
|
426
|
+
expectEnded: expectEndedMountsStep,
|
|
427
|
+
};
|
|
247
428
|
/** Runs a function for side effects (e.g. assertions) without breaking the step chain. */
|
|
248
429
|
export const tap = (f) => (simulation) => {
|
|
249
430
|
f(simulation);
|
|
@@ -256,7 +437,9 @@ Array.reduce(steps, seed, (current, step) => {
|
|
|
256
437
|
const internal = toInternal(next);
|
|
257
438
|
if (internal.model !== UNINITIALIZED) {
|
|
258
439
|
const html = renderView(internal.viewFn, internal.model, internal.capturingDispatch.dispatch);
|
|
259
|
-
|
|
440
|
+
const mountSlots = reconcileMountSlots(internal.mountSlots, html);
|
|
441
|
+
const mounts = pendingMountsOf(mountSlots);
|
|
442
|
+
return { ...internal, html, mountSlots, mounts };
|
|
260
443
|
}
|
|
261
444
|
return next;
|
|
262
445
|
});
|
|
@@ -761,6 +944,8 @@ export const scene = (config, ...steps) => {
|
|
|
761
944
|
model: UNINITIALIZED,
|
|
762
945
|
message: undefined,
|
|
763
946
|
commands: [],
|
|
947
|
+
mounts: [],
|
|
948
|
+
mountSlots: [],
|
|
764
949
|
outMessage: undefined,
|
|
765
950
|
updateFn: config.update,
|
|
766
951
|
resolvers: {},
|
|
@@ -773,4 +958,6 @@ export const scene = (config, ...steps) => {
|
|
|
773
958
|
/* eslint-enable @typescript-eslint/consistent-type-assertions */
|
|
774
959
|
const internal = toInternal(result);
|
|
775
960
|
assertAllCommandsResolved(internal.commands);
|
|
961
|
+
assertAllMountsResolved(internal.mounts);
|
|
962
|
+
assertAllUnmountsAcknowledged(unacknowledgedEndedMountsOf(internal.mountSlots));
|
|
776
963
|
};
|
package/dist/test/story.d.ts
CHANGED
|
@@ -21,21 +21,25 @@ export { with_ as with };
|
|
|
21
21
|
declare const with_: <Model>(model: Model) => WithStep<Model>;
|
|
22
22
|
/** Sends a Message through update. Commands stay pending until resolve or resolveAll. */
|
|
23
23
|
export declare const message: <Message>(message_: NoInfer<Message>) => <Model, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
24
|
-
/** Resolves a specific pending Command with the given result Message. */
|
|
25
|
-
export declare const resolve: {
|
|
26
|
-
<Name extends string, ResultMessage>(definition: CommandDefinition<Name, ResultMessage>, resultMessage: ResultMessage): <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
27
|
-
<Name extends string, ResultMessage, ParentMessage>(definition: CommandDefinition<Name, ResultMessage>, resultMessage: ResultMessage, toParentMessage: (message: ResultMessage) => ParentMessage): <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
28
|
-
};
|
|
29
|
-
/** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
|
|
30
|
-
export declare const resolveAll: <R extends ReadonlyArray<unknown>>(...resolvers: { [K in keyof R]: Resolver<R[K]>; }) => <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
31
24
|
/** Runs an assertion function against the current Model. */
|
|
32
25
|
export declare const model: <Model, Message, OutMessage = undefined>(f: (model: Model) => void) => (simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
26
|
+
/** Steps that operate on the pending Commands of a story simulation.
|
|
27
|
+
* Destructure as `const { Command } = Story` for concise call sites. */
|
|
28
|
+
export declare const Command: {
|
|
29
|
+
/** Resolves a specific pending Command with the given result Message. */
|
|
30
|
+
readonly resolve: {
|
|
31
|
+
<Name extends string, ResultMessage>(definition: CommandDefinition<Name, ResultMessage>, resultMessage: ResultMessage): <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
32
|
+
<Name extends string, ResultMessage, ParentMessage>(definition: CommandDefinition<Name, ResultMessage>, resultMessage: ResultMessage, toParentMessage: (message: ResultMessage) => ParentMessage): <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
33
|
+
};
|
|
34
|
+
/** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
|
|
35
|
+
readonly resolveAll: <R extends ReadonlyArray<unknown>>(...resolvers: { [K in keyof R]: Resolver<R[K]>; }) => <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
36
|
+
/** Asserts that every given Command is among the pending Commands. */
|
|
37
|
+
readonly expectHas: (...definitions: ReadonlyArray<CommandDefinition<string, unknown>>) => <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
38
|
+
/** Asserts that the pending Commands match the given definitions exactly (order-independent). */
|
|
39
|
+
readonly expectExact: (...definitions: ReadonlyArray<CommandDefinition<string, unknown>>) => <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
40
|
+
/** Asserts that there are no pending Commands. */
|
|
41
|
+
readonly expectNone: () => <Model, Message, OutMessage = undefined>(simulation: StorySimulation<Model, Message, OutMessage>) => StorySimulation<Model, Message, OutMessage>;
|
|
42
|
+
};
|
|
39
43
|
/** Asserts that the OutMessage is Some with the expected value. */
|
|
40
44
|
export declare const expectOutMessage: <OutMessage>(expected: OutMessage) => <Model, Message>(simulation: StorySimulation<Model, Message, Option.Option<OutMessage>>) => StorySimulation<Model, Message, Option.Option<OutMessage>>;
|
|
41
45
|
/** Asserts that the OutMessage is None. */
|
package/dist/test/story.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../../src/test/story.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAmB,MAAM,QAAQ,CAAA;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAgB,QAAQ,EAAE,MAAM,eAAe,CAAA;AAWvE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;AAEpC,yDAAyD;AACzD,MAAM,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,IAAI,QAAQ,CAAC;IAC7E,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC,UAAU,EAAE,UAAU,CAAA;CACvB,CAAC,CAAA;AAEF,qGAAqG;AACrG,MAAM,MAAM,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC;IAAE,aAAa,EAAE,KAAK,CAAA;CAAE,CAAC,GAC9D,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,EAClC,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,KAChD,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AAE/C,sFAAsF;AACtF,MAAM,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,IAC5C,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GACxB,CAAC,CACC,UAAU,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KACpD,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AA8BrD,+CAA+C;AAC/C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,CAAA;AACxB,QAAA,MAAM,KAAK,GAAI,KAAK,EAAE,OAAO,KAAK,KAAG,QAAQ,CAAC,KAAK,CAiBlD,CAAA;AAED,yFAAyF;AACzF,eAAO,MAAM,OAAO,GACjB,OAAO,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,MACnC,KAAK,EAAE,UAAU,GAAG,SAAS,EAC5B,YAAY,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KACtD,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAkB5C,CAAA;
|
|
1
|
+
{"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../../src/test/story.ts"],"names":[],"mappings":"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"}
|
package/dist/test/story.js
CHANGED
|
@@ -36,7 +36,7 @@ export const message = (message_) => (simulation) => {
|
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
38
|
/** Resolves a specific pending Command with the given result Message. */
|
|
39
|
-
|
|
39
|
+
const resolveCommand = (definition, resultMessage, toParentMessage) => (simulation) => {
|
|
40
40
|
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
41
41
|
const internal = toInternal(simulation);
|
|
42
42
|
const messageForUpdate = (Predicate.isUndefined(toParentMessage)
|
|
@@ -55,7 +55,7 @@ export const resolve = (definition, resultMessage, toParentMessage) => (simulati
|
|
|
55
55
|
/* eslint-enable @typescript-eslint/consistent-type-assertions */
|
|
56
56
|
};
|
|
57
57
|
/** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
|
|
58
|
-
|
|
58
|
+
const resolveAllCommands = (...resolvers) => (simulation) =>
|
|
59
59
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
60
60
|
resolveAllInternal(toInternal(simulation), resolvers);
|
|
61
61
|
/** Runs an assertion function against the current Model. */
|
|
@@ -64,20 +64,34 @@ export const model = (f) => (simulation) => {
|
|
|
64
64
|
return simulation;
|
|
65
65
|
};
|
|
66
66
|
/** Asserts that every given Command is among the pending Commands. */
|
|
67
|
-
|
|
67
|
+
const expectHasCommandsStep = (...definitions) => (simulation) => {
|
|
68
68
|
assertHasCommands(toInternal(simulation).commands, definitions);
|
|
69
69
|
return simulation;
|
|
70
70
|
};
|
|
71
71
|
/** Asserts that the pending Commands match the given definitions exactly (order-independent). */
|
|
72
|
-
|
|
72
|
+
const expectExactCommandsStep = (...definitions) => (simulation) => {
|
|
73
73
|
assertExactCommands(toInternal(simulation).commands, definitions);
|
|
74
74
|
return simulation;
|
|
75
75
|
};
|
|
76
76
|
/** Asserts that there are no pending Commands. */
|
|
77
|
-
|
|
77
|
+
const expectNoCommandsStep = () => (simulation) => {
|
|
78
78
|
assertZeroCommands(toInternal(simulation).commands);
|
|
79
79
|
return simulation;
|
|
80
80
|
};
|
|
81
|
+
/** Steps that operate on the pending Commands of a story simulation.
|
|
82
|
+
* Destructure as `const { Command } = Story` for concise call sites. */
|
|
83
|
+
export const Command = {
|
|
84
|
+
/** Resolves a specific pending Command with the given result Message. */
|
|
85
|
+
resolve: resolveCommand,
|
|
86
|
+
/** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
|
|
87
|
+
resolveAll: resolveAllCommands,
|
|
88
|
+
/** Asserts that every given Command is among the pending Commands. */
|
|
89
|
+
expectHas: expectHasCommandsStep,
|
|
90
|
+
/** Asserts that the pending Commands match the given definitions exactly (order-independent). */
|
|
91
|
+
expectExact: expectExactCommandsStep,
|
|
92
|
+
/** Asserts that there are no pending Commands. */
|
|
93
|
+
expectNone: expectNoCommandsStep,
|
|
94
|
+
};
|
|
81
95
|
/** Asserts that the OutMessage is Some with the expected value. */
|
|
82
96
|
export const expectOutMessage = (expected) => (simulation) => {
|
|
83
97
|
const internal = toInternal(simulation);
|
|
@@ -93,10 +93,6 @@ export declare const update: (model: {
|
|
|
93
93
|
readonly _tag: "CompletedScrollIntoView";
|
|
94
94
|
} | {
|
|
95
95
|
readonly _tag: "CompletedClickItem";
|
|
96
|
-
} | {
|
|
97
|
-
readonly _tag: "CompletedAnchorMount";
|
|
98
|
-
} | {
|
|
99
|
-
readonly _tag: "CompletedBackdropPortal";
|
|
100
96
|
} | {
|
|
101
97
|
readonly _tag: "Opened";
|
|
102
98
|
readonly maybeActiveItemIndex: Option.Option<number>;
|
|
@@ -125,9 +121,13 @@ export declare const update: (model: {
|
|
|
125
121
|
} | {
|
|
126
122
|
readonly _tag: "CompletedFocusInput";
|
|
127
123
|
} | {
|
|
128
|
-
readonly _tag: "
|
|
124
|
+
readonly _tag: "CompletedAnchorCombobox";
|
|
125
|
+
} | {
|
|
126
|
+
readonly _tag: "CompletedAttachComboboxPreventBlur";
|
|
127
|
+
} | {
|
|
128
|
+
readonly _tag: "CompletedAttachComboboxSelectOnFocus";
|
|
129
129
|
} | {
|
|
130
|
-
readonly _tag: "
|
|
130
|
+
readonly _tag: "CompletedPortalComboboxBackdrop";
|
|
131
131
|
} | {
|
|
132
132
|
readonly _tag: "GotAnimationMessage";
|
|
133
133
|
readonly message: {
|
|
@@ -181,13 +181,13 @@ export declare const view: <ParentMessage, Item extends string>(config: Readonly
|
|
|
181
181
|
readonly inputValue: string;
|
|
182
182
|
};
|
|
183
183
|
toParentMessage: (message: Opened | Closed | import("./shared.js").BlurredInput | import("./shared.js").ActivatedItem | import("./shared.js").DeactivatedItem | SelectedItem | import("./shared.js").MovedPointerOverItem | import("./shared.js").RequestedItemClick | import("./shared.js").UpdatedInputValue | import("./shared.js").PressedToggleButton | {
|
|
184
|
-
readonly _tag: "
|
|
184
|
+
readonly _tag: "CompletedAnchorCombobox";
|
|
185
185
|
} | {
|
|
186
|
-
readonly _tag: "
|
|
186
|
+
readonly _tag: "CompletedAttachComboboxPreventBlur";
|
|
187
187
|
} | {
|
|
188
|
-
readonly _tag: "
|
|
188
|
+
readonly _tag: "CompletedAttachComboboxSelectOnFocus";
|
|
189
189
|
} | {
|
|
190
|
-
readonly _tag: "
|
|
190
|
+
readonly _tag: "CompletedPortalComboboxBackdrop";
|
|
191
191
|
}) => ParentMessage;
|
|
192
192
|
onSelectedItem?: (value: string) => ParentMessage;
|
|
193
193
|
items: readonly Item[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { init, update, open, close, selectItem, view, lazy, Model, } from './single.js';
|
|
2
|
-
export { Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusInput, CompletedScrollIntoView, CompletedClickItem,
|
|
2
|
+
export { Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusInput, CompletedScrollIntoView, CompletedClickItem, CompletedAnchorCombobox, CompletedAttachComboboxPreventBlur, CompletedAttachComboboxSelectOnFocus, CompletedPortalComboboxBackdrop, AnchorCombobox, AttachComboboxPreventBlur, AttachComboboxSelectOnFocus, PortalComboboxBackdrop, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusInput, ScrollIntoView, ClickItem, DetectMovementOrAnimationEnd, } from './shared.js';
|
|
3
3
|
export type { ActivationTrigger, Opened, Closed, BlurredInput, ActivatedItem, DeactivatedItem, MovedPointerOverItem, RequestedItemClick, UpdatedInputValue, PressedToggleButton, ItemConfig, GroupHeading, } from './shared.js';
|
|
4
4
|
export type { InitConfig, ViewConfig } from './single.js';
|
|
5
5
|
export type { AnchorConfig } from '../anchor.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,KAAK,GACN,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,KAAK,GACN,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,kCAAkC,EAClC,oCAAoC,EACpC,+BAA+B,EAC/B,cAAc,EACd,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,4BAA4B,GAC7B,MAAM,aAAa,CAAA;AAEpB,YAAY,EACV,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,YAAY,EACZ,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,YAAY,GACb,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEzD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { init, update, open, close, selectItem, view, lazy, Model, } from './single.js';
|
|
2
|
-
export { Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusInput, CompletedScrollIntoView, CompletedClickItem,
|
|
2
|
+
export { Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusInput, CompletedScrollIntoView, CompletedClickItem, CompletedAnchorCombobox, CompletedAttachComboboxPreventBlur, CompletedAttachComboboxSelectOnFocus, CompletedPortalComboboxBackdrop, AnchorCombobox, AttachComboboxPreventBlur, AttachComboboxSelectOnFocus, PortalComboboxBackdrop, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusInput, ScrollIntoView, ClickItem, DetectMovementOrAnimationEnd, } from './shared.js';
|
|
3
3
|
export * as Multi from './multiPublic.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Effect, Option, Schema as S } from 'effect';
|
|
2
2
|
import * as Command from '../../command/index.js';
|
|
3
3
|
import { type Attribute, type Html } from '../../html/index.js';
|
|
4
|
+
import * as Mount from '../../mount/index.js';
|
|
4
5
|
import type { AnchorConfig } from '../anchor.js';
|
|
5
6
|
import { groupContiguous } from '../group.js';
|
|
6
7
|
export { groupContiguous };
|
|
@@ -90,13 +91,13 @@ export declare const CompletedScrollIntoView: import("../../schema/index.js").Ca
|
|
|
90
91
|
/** Sent when the programmatic item click command completes. */
|
|
91
92
|
export declare const CompletedClickItem: import("../../schema/index.js").CallableTaggedStruct<"CompletedClickItem", {}>;
|
|
92
93
|
/** Sent when the items panel mounts and Floating UI has positioned it. Update no-ops; surfaces the positioning side effect for DevTools. */
|
|
93
|
-
export declare const
|
|
94
|
+
export declare const CompletedAnchorCombobox: import("../../schema/index.js").CallableTaggedStruct<"CompletedAnchorCombobox", {}>;
|
|
94
95
|
/** Sent when the items panel mounts and the capture-phase pointerdown listener is attached (with or without anchor). Update no-ops; surfaces the listener-attach side effect for DevTools. */
|
|
95
|
-
export declare const
|
|
96
|
+
export declare const CompletedAttachComboboxPreventBlur: import("../../schema/index.js").CallableTaggedStruct<"CompletedAttachComboboxPreventBlur", {}>;
|
|
96
97
|
/** Sent when the input mounts and the focus listener that auto-selects on focus is attached. Update no-ops; surfaces the listener-attach side effect for DevTools. */
|
|
97
|
-
export declare const
|
|
98
|
+
export declare const CompletedAttachComboboxSelectOnFocus: import("../../schema/index.js").CallableTaggedStruct<"CompletedAttachComboboxSelectOnFocus", {}>;
|
|
98
99
|
/** Sent when the combobox backdrop mounts and is portaled to the document body. Update no-ops; surfaces the portal side effect for DevTools. */
|
|
99
|
-
export declare const
|
|
100
|
+
export declare const CompletedPortalComboboxBackdrop: import("../../schema/index.js").CallableTaggedStruct<"CompletedPortalComboboxBackdrop", {}>;
|
|
100
101
|
/** Wraps an Animation submodel message for delegation. */
|
|
101
102
|
export declare const GotAnimationMessage: import("../../schema/index.js").CallableTaggedStruct<"GotAnimationMessage", {
|
|
102
103
|
message: S.Union<[import("../../schema/index.js").CallableTaggedStruct<"Showed", {}>, import("../../schema/index.js").CallableTaggedStruct<"Hid", {}>, import("../../schema/index.js").CallableTaggedStruct<"AdvancedAnimationFrame", {}>, import("../../schema/index.js").CallableTaggedStruct<"EndedAnimation", {}>]>;
|
|
@@ -124,10 +125,10 @@ export declare const Message: S.Union<[
|
|
|
124
125
|
typeof CompletedFocusInput,
|
|
125
126
|
typeof CompletedScrollIntoView,
|
|
126
127
|
typeof CompletedClickItem,
|
|
127
|
-
typeof
|
|
128
|
-
typeof
|
|
129
|
-
typeof
|
|
130
|
-
typeof
|
|
128
|
+
typeof CompletedAnchorCombobox,
|
|
129
|
+
typeof CompletedAttachComboboxPreventBlur,
|
|
130
|
+
typeof CompletedAttachComboboxSelectOnFocus,
|
|
131
|
+
typeof CompletedPortalComboboxBackdrop,
|
|
131
132
|
typeof GotAnimationMessage,
|
|
132
133
|
typeof UpdatedInputValue,
|
|
133
134
|
typeof PressedToggleButton
|
|
@@ -227,10 +228,6 @@ export declare const makeUpdate: <Model extends BaseModel>(handlers: Readonly<{
|
|
|
227
228
|
readonly _tag: "CompletedScrollIntoView";
|
|
228
229
|
} | {
|
|
229
230
|
readonly _tag: "CompletedClickItem";
|
|
230
|
-
} | {
|
|
231
|
-
readonly _tag: "CompletedAnchorMount";
|
|
232
|
-
} | {
|
|
233
|
-
readonly _tag: "CompletedBackdropPortal";
|
|
234
231
|
} | {
|
|
235
232
|
readonly _tag: "Opened";
|
|
236
233
|
readonly maybeActiveItemIndex: Option.Option<number>;
|
|
@@ -259,9 +256,13 @@ export declare const makeUpdate: <Model extends BaseModel>(handlers: Readonly<{
|
|
|
259
256
|
} | {
|
|
260
257
|
readonly _tag: "CompletedFocusInput";
|
|
261
258
|
} | {
|
|
262
|
-
readonly _tag: "
|
|
259
|
+
readonly _tag: "CompletedAnchorCombobox";
|
|
260
|
+
} | {
|
|
261
|
+
readonly _tag: "CompletedAttachComboboxPreventBlur";
|
|
262
|
+
} | {
|
|
263
|
+
readonly _tag: "CompletedAttachComboboxSelectOnFocus";
|
|
263
264
|
} | {
|
|
264
|
-
readonly _tag: "
|
|
265
|
+
readonly _tag: "CompletedPortalComboboxBackdrop";
|
|
265
266
|
} | {
|
|
266
267
|
readonly _tag: "GotAnimationMessage";
|
|
267
268
|
readonly message: {
|
|
@@ -280,6 +281,31 @@ export declare const makeUpdate: <Model extends BaseModel>(handlers: Readonly<{
|
|
|
280
281
|
readonly _tag: "PressedToggleButton";
|
|
281
282
|
}, never, never>;
|
|
282
283
|
}>[]];
|
|
284
|
+
/** The anchor-positioning Mount this Combobox renders when an anchor is
|
|
285
|
+
* configured. Exposed so Scene tests can call
|
|
286
|
+
* `Scene.Mount.resolve(AnchorCombobox, CompletedAnchorCombobox())`. */
|
|
287
|
+
export declare const AnchorCombobox: Mount.MountDefinition<"AnchorCombobox", {
|
|
288
|
+
readonly _tag: "CompletedAnchorCombobox";
|
|
289
|
+
}>;
|
|
290
|
+
/** The Mount this Combobox renders to install a `pointerdown`-cancelling
|
|
291
|
+
* capture listener that prevents blur on item presses. Exposed so Scene
|
|
292
|
+
* tests can call
|
|
293
|
+
* `Scene.Mount.resolve(AttachComboboxPreventBlur, CompletedAttachComboboxPreventBlur())`. */
|
|
294
|
+
export declare const AttachComboboxPreventBlur: Mount.MountDefinition<"AttachComboboxPreventBlur", {
|
|
295
|
+
readonly _tag: "CompletedAttachComboboxPreventBlur";
|
|
296
|
+
}>;
|
|
297
|
+
/** The Mount this Combobox renders to install the input's select-on-focus
|
|
298
|
+
* behavior. Exposed so Scene tests can call
|
|
299
|
+
* `Scene.Mount.resolve(AttachComboboxSelectOnFocus, CompletedAttachComboboxSelectOnFocus())`. */
|
|
300
|
+
export declare const AttachComboboxSelectOnFocus: Mount.MountDefinition<"AttachComboboxSelectOnFocus", {
|
|
301
|
+
readonly _tag: "CompletedAttachComboboxSelectOnFocus";
|
|
302
|
+
}>;
|
|
303
|
+
/** The backdrop-portaling Mount this Combobox renders. Exposed so Scene tests can
|
|
304
|
+
* call `Scene.Mount.resolve(PortalComboboxBackdrop, CompletedPortalComboboxBackdrop())` to
|
|
305
|
+
* acknowledge the mount produced by the rendered backdrop. */
|
|
306
|
+
export declare const PortalComboboxBackdrop: Mount.MountDefinition<"PortalComboboxBackdrop", {
|
|
307
|
+
readonly _tag: "CompletedPortalComboboxBackdrop";
|
|
308
|
+
}>;
|
|
283
309
|
/** Configuration for an individual combobox item's appearance. */
|
|
284
310
|
export type ItemConfig = Readonly<{
|
|
285
311
|
className?: string;
|
|
@@ -293,7 +319,7 @@ export type GroupHeading = Readonly<{
|
|
|
293
319
|
/** Configuration for rendering a combobox with `view`. */
|
|
294
320
|
export type BaseViewConfig<ParentMessage, Item extends string, Model extends BaseModel> = Readonly<{
|
|
295
321
|
model: Model;
|
|
296
|
-
toParentMessage: (message: Opened | Closed | BlurredInput | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | UpdatedInputValue | PressedToggleButton | typeof
|
|
322
|
+
toParentMessage: (message: Opened | Closed | BlurredInput | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | UpdatedInputValue | PressedToggleButton | typeof CompletedAnchorCombobox.Type | typeof CompletedAttachComboboxPreventBlur.Type | typeof CompletedAttachComboboxSelectOnFocus.Type | typeof CompletedPortalComboboxBackdrop.Type) => ParentMessage;
|
|
297
323
|
onSelectedItem?: (value: string) => ParentMessage;
|
|
298
324
|
items: ReadonlyArray<Item>;
|
|
299
325
|
itemToConfig: (item: Item, context: Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAEN,MAAM,EAGN,MAAM,IAAI,CAAC,EAEZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,IAAI,EAGV,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/shared.ts"],"names":[],"mappings":"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"}
|